Name: series-workflowrcrw6 Phase: Succeeded StartedAt: 2026-07-21 23:52:45 +0000 UTC FinishedAt: 2026-07-22 01:58:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[0] Phase: Succeeded StartedAt: 2026-07-21 23:52:45 +0000 UTC FinishedAt: 2026-07-22 00:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 23:52:45 +0000 UTC FinishedAt: 2026-07-22 00:25:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG", "BTRFS_FS", "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG", "BTRFS_FS", "SHMEM" ], "series_id": "b7289142-0ccd-4786-b30a-55de36b69ef1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shmem_unused_huge_shrink", "shmem_unused_huge_scan", "shmem_unused_huge_count", "shmem_unused_huge_add", "shmem_unused_huge_del", "shmem_unused_huge_isolate", "shmem_unused_huge_requeue", "shmem_unused_huge_drop", "is_shmem_unused_huge_match", "shmem_unused_huge_alloc_lru", "shmem_get_and_clear_memcg", "is_shmem_unused_huge_isolated", "set_shmem_unused_huge_isolated", "btrfs_nr_cached_objects" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NjYW4mIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfY291bnQmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfYWRkJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2RlbCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3JlcXVldWUmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfZHJvcCYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUmIzM0OywKICAgICYjMzQ7c2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZCYjMzQ7LAogICAgJiMzNDtzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7YnRyZnNfbnJfY2FjaGVkX29iamVjdHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNobWVtIGhhbmRsZXMgdW51c2VkIGh1Z2UgcGFnZXMgd2hlbiBzaHJpbmtpbmcsIGludHJvZHVjaW5nIGxpc3RfbHJ1IGZvciBzaHJpbmtsaXN0IGluIHNobWVtX3NiX2luZm8uIEl0IGFsc28gbW9kaWZpZXMgc3VwZXJfY2FjaGVfc2NhbiBhbmQgc3VwZXJfY2FjaGVfY291bnQgaW4gZnMvc3VwZXIuYyB0byByZW1vdmUgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZSBhbmQgaW5zdGVhZCB1c2VzIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgaW4gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQyYmEzMmRhYjMxZTFmMTM1OGM3MGFkZGU0OWViOGY0MTllZTI2YTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAwMDoyNDozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuY1xuaW5kZXggYTdkODA0MjE5YmVjMzQuLmNjNDUzNzQzNTM5OTc2IDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvc3VwZXIuY1xuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pc2NkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21hZ2ljLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmF0ZWxpbWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMmMuaFx1MDAzZVxuQEAgLTI0MzQsNiAmIzQzOzI0MzUsMTUgQEAgc3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm9cbiBcdHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gYnRyZnNfc2Ioc2IpO1xuIFx0Y29uc3QgczY0IG5yID0gcGVyY3B1X2NvdW50ZXJfcmVhZF9wb3NpdGl2ZShcdTAwMjZmc19pbmZvLVx1MDAzZWV2aWN0YWJsZV9leHRlbnRfbWFwcyk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZXZpY3RhYmxlIGV4dGVudCBtYXAgY291bnRlciBpcyBmaWxlc3lzdGVtLWdsb2JhbCBhbmQgZG9lcyBub3RcbiYjNDM7XHQgKiBob25vdXIgc2MtXHUwMDNlbWVtY2csIHNvIGl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiB0aGUgZ2xvYmFsIChrc3dhcGQgb3JcbiYjNDM7XHQgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2ZcbiYjNDM7XHQgKiBzaHJpbmtfc2xhYl9tZW1jZygpIHRvIGF2b2lkIHF1ZXVlaW5nIGR1cGxpY2F0ZSBnbG9iYWwgd29yay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0dHJhY2VfYnRyZnNfZXh0ZW50X21hcF9zaHJpbmtlcl9jb3VudChmc19pbmZvLCBucik7XG4gXG4gXHRyZXR1cm4gbnI7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDlmODJlNmIzOGYwN2VlLi45M2YyNGFlYTc1YzRkNiAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmNcbkBAIC0yNCw3ICYjNDM7MjQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuQEAgLTE3MSwxOSAmIzQzOzE3MCw2IEBAIHN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXG4gXHR3YWtlX3VwX3ZhcihcdTAwMjZzYi1cdTAwM2VzX2ZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBUaGUgc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBob29rcyAodXNlZCBmb3IgZXhhbXBsZSBieSBidHJmcyBhbmQgeGZzKVxuLSAqIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGUgYW5kIGlnbm9yZSBzYy1cdTAwM2VtZW1jZy4gRHJpdmluZyB0aGVtXG4tICogZnJvbSBwZXItbWVtY2cgc2hyaW5rX3NsYWJfbWVtY2coKSBpbnZvY2F0aW9ucyBvbmx5IGJ1cm5zIENQVSB3YWxraW5nXG4tICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uXG4tICogdGhlIGdsb2JhbCBwYXRoIChrc3dhcGQgb3Igcm9vdCBkaXJlY3QgcmVjbGFpbSkgcmVnYXJkbGVzcy4gUmVzdHJpY3QgdGhlbVxuLSAqIHRvIHRoYXQgcGF0aC5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLXtcbi1cdHJldHVybiAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKTtcbi19XG4tXG4gLypcbiAgKiBPbmUgdGhpbmcgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIHdpdGggYSBwZXItc2Igc2hyaW5rZXIgaXMgdGhhdCB3ZSBkb24mIzM5O3RcbiAgKiBkcm9wIHRoZSBsYXN0IGFjdGl2ZSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyYmxvY2sgZnJvbSB3aXRoaW4gdGhlIHNocmlua2VyLlxuQEAgLTIxMyw3ICYjNDM7MTk5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdGlmICghc3VwZXJfdHJ5bG9ja19zaGFyZWQoc2IpKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjYgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpXG4mIzQzO1x0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMpXG4gXHRcdGZzX29iamVjdHMgPSBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7XG4gXG4gXHRpbm9kZXMgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9scnUsIHNjKTtcbkBAIC0yNzQsOCAmIzQzOzI2MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIFx0XHRyZXR1cm4gMDtcbiBcdHNtcF9ybWIoKTtcbiBcbi1cdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxuJiM0MztcdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKVxuIFx0XHR0b3RhbF9vYmplY3RzID0gc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpO1xuIFxuIFx0dG90YWxfb2JqZWN0cyAmIzQzOz0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSwgc2MpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDk1NzI2MDY3NzY3ODE1Li44MTcwYmI4MDY2YTIyZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTUyMCw2ICYjNDM7NTIwLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0cmV0dXJuIChtZW1jZyA9PSByb290X21lbV9jZ3JvdXApO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgLSBpcyB0aGlzIGEgZ2xvYmFsIG9yIHJvb3QtbWVtY2cgc2hyaW5rIGludm9jYXRpb24/XG4mIzQzOyAqIEBzYzogc2hyaW5rX2NvbnRyb2wgZGVzY3JpYmluZyB0aGUgY3VycmVudCBzaHJpbmtlciBjYWxsXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSB3aGVuIEBzYyByZXByZXNlbnRzIGEgZ2xvYmFsIHJlY2xhaW0gc2hyaW5rIChzYy1cdTAwM2VtZW1jZyA9PSBOVUxMKVxuJiM0MzsgKiBvciBhIHJvb3QtbWVtY2cgc2hyaW5rLCBpLmUuIG5vdCBhIHBlci1tZW1jZyBpdGVyYXRpb24gb2ZcbiYjNDM7ICogc2hyaW5rX3NsYWJfbWVtY2coKS4gRmlsZXN5c3RlbXMgd2hvc2UgLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKCkvXG4mIzQzOyAqIC1cdTAwM2VmcmVlX2NhY2hlZF9vYmplY3RzKCkgaW1wbGVtZW50YXRpb25zIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGVcbiYjNDM7ICogYW5kIGRvIG5vdCBob25vdXIgc2MtXHUwMDNlbWVtY2cgY2FuIHVzZSB0aGlzIHRvIGVhcmx5LXJldHVybiAwIGluIHBlci1tZW1jZ1xuJiM0MzsgKiBjb250ZXh0cy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIXNjLVx1MDAzZW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy1cdTAwM2VtZW1jZyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuIFx0cmV0dXJuIG9iamNnLVx1MDAzZWlzX3Jvb3Q7XG5AQCAtMTA3MSw2ICYjNDM7MTA4NywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuaW5kZXggNTY2M2RmZjUzMTg2ZTIuLmFlYjU5OTAxYTg0MGM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3BhcnNlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiBcbiAvKiBpbm9kZSBpbi1rZXJuZWwgZGF0YSAqL1xuIFxuQEAgLTU0LDYgJiM0Mzs1NSwxMSBAQCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgZHF1b3QgX19yY3VcdCppX2RxdW90W01BWFFVT1RBU107XG4gI2VuZGlmXG4gXHRzdHJ1Y3QgaW5vZGVcdFx0dmZzX2lub2RlO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwXHQqc2hyaW5rbGlzdF9tZW1jZztcbiYjNDM7XHRpbnRcdFx0XHRzaHJpbmtsaXN0X25pZDtcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiAjZGVmaW5lIFNITUVNX0ZMX1VTRVJfVklTSUJMRVx0XHQoRlNfRkxfVVNFUl9WSVNJQkxFIHwgRlNfQ0FTRUZPTERfRkwpXG5AQCAtODMsOSAmIzQzOzg5LDkgQEAgc3RydWN0IHNobWVtX3NiX2luZm8ge1xuIFx0aW5vX3QgbmV4dF9pbm87XHRcdCAgICAvKiBUaGUgbmV4dCBwZXItc2IgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xuIFx0aW5vX3QgX19wZXJjcHUgKmlub19iYXRjaDsgIC8qIFRoZSBuZXh0IHBlci1jcHUgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDsgICAgIC8qIGRlZmF1bHQgbWVtb3J5IHBvbGljeSBmb3IgbWFwcGluZ3MgKi9cbi1cdHNwaW5sb2NrX3Qgc2hyaW5rbGlzdF9sb2NrOyAgIC8qIFByb3RlY3RzIHNocmlua2xpc3QgKi9cbi1cdHN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdDsgIC8qIExpc3Qgb2Ygc2hpbmthYmxlIGlub2RlcyAqL1xuLVx0dW5zaWduZWQgbG9uZyBzaHJpbmtsaXN0X2xlbjsgLyogTGVuZ3RoIG9mIHNocmlua2xpc3QgKi9cbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdHN0cnVjdCBsaXN0X2xydSBzaHJpbmtsaXN0OyAvKiBMaXN0IG9mIHNocmlua2FibGUgaW5vZGVzICovXG4mIzQzOyNlbmRpZlxuIFx0c3RydWN0IHNobWVtX3F1b3RhX2xpbWl0cyBxbGltaXRzOyAvKiBEZWZhdWx0IHF1b3RhIGxpbWl0cyAqL1xuIFx0c3RydWN0IHNpbXBsZV94YXR0cl9jYWNoZSB4YV9jYWNoZTtcbiB9O1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBmMTg5ZDFhYzQwZGIyZC4uOGJmNmRkODUwZjg1YjQgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtNzI0LDUxICYjNDM7NzI0LDI0MiBAQCBzdGF0aWMgY29uc3QgY2hhciAqc2htZW1fZm9ybWF0X2h1Z2UoaW50IGh1Z2UpXG4gfVxuICNlbmRpZlxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9PSAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9IC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2c7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZW1jZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR1xuJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuJiM0MztzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0ICAgIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuJiM0MztcdGlmICghbWVtY2cpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBnZnApO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWVtY2c7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcbiYjNDM7c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdCAgICBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZyA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHNiaW5mbywgZm9saW8sIGdmcCk7XG4mIzQzO1x0aWYgKElTX0VSUihtZW1jZykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpKSB7XG4mIzQzO1x0XHQvKiBpc29sYXRlZCBvbiBzY2FuIGxpc3QsIGxldCBzaHJpbmsgaGFuZGxlIGl0ICovXG4mIzQzO1x0XHRpZiAoaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbykpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID09IG5pZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPT0gbWVtY2cpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfbHJ1X2RlbChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LFxuJiM0MztcdFx0XHQgICAgIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQsIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyk7XG4mIzQzO1x0XHRvbGRfbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XG4mIzQzO1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9IG5pZDtcbiYjNDM7XHRsaXN0X2xydV9hZGQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgbmlkLCBtZW1jZyk7XG4mIzQzO1x0bWVtY2cgPSBOVUxMO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChvbGRfbWVtY2cpO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KSkge1xuJiM0MztcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4mIzQzO1x0XHRcdCAgICAgaW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCwgaW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnKTtcbiYjNDM7XHRcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0MztcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2M7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbiYjNDM7XHRcdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcbiYjNDM7XHRcdFx0XHRcdFx0IHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnO1xuJiM0MztcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB0cnlsb2NrIHRvIGF2b2lkIEFCQkEgZGVhZGxvY2s6IGFkZC9kZWwgcGF0aCB0YWtlcyBpbmZvLVx1MDAzZWxvY2tcbiYjNDM7XHQgKiBiZWZvcmUgdGhlIGxpc3RfbHJ1IGJ1Y2tldCBsb2NrLCB3aGlsZSBoZXJlIHRoZSBvcmRlciBpcyByZXZlcnNlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spKVxuJiM0MztcdFx0cmV0dXJuIExSVV9TS0lQO1xuJiM0MztcbiYjNDM7XHQvKiBwaW4gdGhlIGlub2RlICovXG4mIzQzO1x0aW5vZGUgPSBpZ3JhYihcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZSk7XG4mIzQzO1x0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xuJiM0MztcdGlmICghaW5vZGUpIHtcbiYjNDM7XHRcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcbiYjNDM7XHRcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO1x0XHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XG4mIzQzO1x0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuJiM0MztcdHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKTtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2c2Nhbi1cdTAwM2VsaXN0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIExSVV9SRU1PVkVEO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbiYjNDM7XHRib29sIG1hdGNoO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgbm9uLXJvb3QgbWVtY2cgcmVjbGFpbSBuZWVkcyB0byBtYXRjaCB0aGUgZm9saW8gY2hhcmdlIGFnYWluc3RcbiYjNDM7XHQgKiBzYy1cdTAwM2VtZW1jZy4gU2tpcCB0aGUgZm9saW8gbWVtY2cgY2hlY2sgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4mIzQzO1x0ICogMS4gc2htZW0gcXVvdGEgcmVjbGFpbSAoc2MgPT0gTlVMTClcbiYjNDM7XHQgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbVxuJiM0MztcdCAqIDMuIHJvb3QgbWVtY2cgcmVjbGFpbVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghc2MgfHwgIXNjLVx1MDAzZW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy1cdTAwM2VtZW1jZykpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZvbGlvX25pZChmb2xpbykgIT0gc2MtXHUwMDNlbmlkKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuJiM0MztcdG1hdGNoID0gbWVtY2cgPT0gc2MtXHUwMDNlbWVtY2c7XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWF0Y2g7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4mIzQzO1x0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHNiaW5mbywgZm9saW8sIEdGUF9OT1dBSVQpO1xuJiM0MztcdGlmIChJU19FUlIobWVtY2cpKVxuJiM0MztcdFx0Z290byBkcm9wO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7XHQvKiBSZXF1ZXVlIHRoZSBpbm9kZSB0byBzaHJpbmtsaXN0ICovXG4mIzQzO1x0bGlzdF9kZWxfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuJiM0MztcdGxpc3RfbHJ1X2FkZChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBuaWQsIG1lbWNnKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBtZW1jZztcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xuJiM0MztcdG1lbWNnID0gTlVMTDtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuO1xuJiM0MztcbiYjNDM7ZHJvcDpcbiYjNDM7XHRzaG1lbV91bnVzZWRfaHVnZV9kcm9wKGlub2RlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYywgdW5zaWduZWQgbG9uZyBucl90b19mcmVlKVxuIHtcbi1cdExJU1RfSEVBRChsaXN0KSwgKnBvcywgKm5leHQ7XG4mIzQzO1x0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2NhbjtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHR1bnNpZ25lZCBsb25nIGJhdGNoID0gc2MgPyBzYy1cdTAwM2Vucl90b19zY2FuIDogMTI4O1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm5leHQ7XG4gXHR1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwO1xuIFxuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpKVxuLVx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4tXG4tXHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCkge1xuLVx0XHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbi1cbi1cdFx0LyogcGluIHRoZSBpbm9kZSAqL1xuLVx0XHRpbm9kZSA9IGlncmFiKFx1MDAyNmluZm8tXHUwMDNldmZzX2lub2RlKTtcbi1cbi1cdFx0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xuLVx0XHRpZiAoIWlub2RlKSB7XG4tXHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuLVx0XHRcdGdvdG8gbmV4dDtcbi1cdFx0fVxuLVxuLVx0XHRsaXN0X21vdmUoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZsaXN0KTtcbi1uZXh0OlxuLVx0XHRzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4tLTtcbi1cdFx0aWYgKCEtLWJhdGNoKVxuLVx0XHRcdGJyZWFrO1xuLVx0fVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2Nhbi5saXN0KTtcbiYjNDM7XHRzY2FuLnNjID0gc2M7XG4mIzQzO1x0aWYgKHNjKVxuJiM0MztcdFx0bGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNjLFxuJiM0MztcdFx0XHRcdCAgICAgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZSwgXHUwMDI2c2Nhbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bGlzdF9scnVfd2FsayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZSxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2c2NhbiwgMTI4KTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFx1MDAyNmxpc3QpIHtcbi1cdFx0cGdvZmZfdCBuZXh0LCBlbmQ7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgXHUwMDI2c2Nhbi5saXN0KSB7XG4mIzQzO1x0XHRwZ29mZl90IGZvbGlvX2VuZCwgZW5kO1xuIFx0XHRsb2ZmX3QgaV9zaXplO1xuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbiBcdFx0aW5vZGUgPSBcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZTtcbiBcbi1cdFx0aWYgKG5yX3RvX2ZyZWUgXHUwMDI2XHUwMDI2IGZyZWVkIFx1MDAzZT0gbnJfdG9fZnJlZSlcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbi1cbiBcdFx0aV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIFx0XHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLVx1MDAzZWlfbWFwcGluZywgaV9zaXplIC8gUEFHRV9TSVpFKTtcbiBcdFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpXG5AQCAtNzgxLDEzICYjNDM7OTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxuIFx0XHR9XG4gXG4gXHRcdC8qIENoZWNrIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvIGdhaW4gZnJvbSBzcGxpdHRpbmcgKi9cbi1cdFx0bmV4dCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fZW5kID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4gXHRcdGVuZCA9IHNobWVtX2ZhbGxvY2VuZChpbm9kZSwgRElWX1JPVU5EX1VQKGlfc2l6ZSwgUEFHRV9TSVpFKSk7XG4tXHRcdGlmIChlbmQgXHUwMDNjPSBmb2xpby1cdTAwM2VpbmRleCB8fCBlbmQgXHUwMDNlPSBuZXh0KSB7XG4mIzQzO1x0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gZm9saW9fZW5kKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdGlmICghaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goZm9saW8sIHNjYW4uc2MpKSB7XG4mIzQzO1x0XHRcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdFx0Z290byBwdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5yX3RvX2ZyZWUgXHUwMDI2XHUwMDI2IGZyZWVkIFx1MDAzZT0gbnJfdG9fZnJlZSkge1xuJiM0MztcdFx0XHRzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRcdGdvdG8gcHV0O1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogTW92ZSB0aGUgaW5vZGUgb24gdGhlIGxpc3QgYmFjayB0byBzaHJpbmtsaXN0IGlmIHdlIGZhaWxlZFxuIFx0XHQgKiB0byBsb2NrIHRoZSBwYWdlIGF0IHRoaXMgdGltZS5cbkBAIC03OTYsMzQgJiM0Mzs5OTksMzMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdCAqIHJlY2xhaW0gcGF0aC5cbiBcdFx0ICovXG4gXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbiYjNDM7XHRcdFx0c2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0XHRnb3RvIHB1dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkge1xuJiM0MztcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiM0MztcdFx0XHRzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbiYjNDM7XHRcdFx0Z290byBwdXQ7XG4gXHRcdH1cbiBcbiBcdFx0cmV0ID0gc3BsaXRfZm9saW8oZm9saW8pO1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0XHQvKiBJZiBzcGxpdCBmYWlsZWQgbW92ZSB0aGUgaW5vZGUgb24gdGhlIGxpc3QgYmFjayB0byBzaHJpbmtsaXN0ICovXG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0Z290byBtb3ZlX2JhY2s7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdFx0Z290byBwdXQ7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdGZyZWVkICYjNDM7PSBuZXh0IC0gZW5kO1xuJiM0MztcdFx0ZnJlZWQgJiM0Mzs9IGZvbGlvX2VuZCAtIGVuZDtcbiBcdFx0c3BsaXQmIzQzOyYjNDM7O1xuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBkcm9wOlxuLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tXHRcdGdvdG8gcHV0O1xuLW1vdmVfYmFjazpcbi1cdFx0Lypcbi1cdFx0ICogTWFrZSBzdXJlIHRoZSBpbm9kZSBpcyBlaXRoZXIgb24gdGhlIGdsb2JhbCBsaXN0IG9yIGRlbGV0ZWRcbi1cdFx0ICogZnJvbSBhbnkgbG9jYWwgbGlzdCBiZWZvcmUgaXB1dCgpIHNpbmNlIGl0IGNvdWxkIGJlIGRlbGV0ZWRcbi1cdFx0ICogaW4gYW5vdGhlciB0aHJlYWQgb25jZSB3ZSBwdXQgdGhlIGlub2RlICh0aGVuIHRoZSBsb2NhbCBsaXN0XG4tXHRcdCAqIGlzIGNvcnJ1cHRlZCkuXG4tXHRcdCAqL1xuLVx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdGxpc3RfbW92ZShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsIFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuJiM0MzsmIzQzOztcbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4mIzQzO1x0XHRzaG1lbV91bnVzZWRfaHVnZV9kcm9wKGlub2RlKTtcbiBwdXQ6XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0fVxuQEAgLTgzNiw3ICYjNDM7MTAzOCw3IEBAIHN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX3NjYW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuIFxuLVx0aWYgKCFSRUFEX09OQ0Uoc2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKSlcbiYjNDM7XHRpZiAoIWxpc3RfbHJ1X3Nocmlua19jb3VudChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2MpKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4gXHRyZXR1cm4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgc2MsIDApO1xuQEAgLTg0NiwxMiAmIzQzOzEwNDgsMjIgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuLVx0cmV0dXJuIFJFQURfT05DRShzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYyk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbiAjZGVmaW5lIHNobWVtX2h1Z2UgU0hNRU1fSFVHRV9ERU5ZXG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcbiB7XG5AQCAtMTQwNywxNCAmIzQzOzE2MTksNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSAwO1xuIFx0XHRtYXBwaW5nX3NldF9leGl0aW5nKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXHRcdHNobWVtX3RydW5jYXRlX3JhbmdlKGlub2RlLCAwLCAobG9mZl90KS0xKTtcbi1cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbi0tO1xuLVx0XHRcdH1cbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdFx0fVxuJiM0MztcdFx0c2htZW1fdW51c2VkX2h1Z2VfZGVsKGlub2RlKTtcbiBcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc3dhcGxpc3QpKSB7XG4gXHRcdFx0LyogV2FpdCB3aGlsZSBzaG1lbV91bnVzZSgpIGlzIHNjYW5uaW5nIHRoaXMgaW5vZGUuLi4gKi9cbiBcdFx0XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZpbmZvLVx1MDAzZXN0b3BfZXZpY3Rpb24sXG5AQCAtMjUyMiwyOCAmIzQzOzI3MjcsNiBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcbiBhbGxvY2VkOlxuIFx0YWxsb2NlZCA9IHRydWU7XG4tXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2XG4tXHQgICAgRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKSBcdTAwM2Ncbi1cdFx0XHRcdFx0Zm9saW9fbmV4dF9pbmRleChmb2xpbykpIHtcbi1cdFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0XHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuLVx0XHQvKlxuLVx0XHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XG4tXHRcdCAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4tXHRcdCAqL1xuLVx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdC8qXG4tXHRcdCAqIF9jYXJlZnVsIHRvIGRlZmVuZCBhZ2FpbnN0IHVubG9ja2VkIGFjY2VzcyB0b1xuLVx0XHQgKiAtXHUwMDNlc2hyaW5rX2xpc3QgaW4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKClcbi1cdFx0ICovXG4tXHRcdGlmIChsaXN0X2VtcHR5X2NhcmVmdWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KSkge1xuLVx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LFxuLVx0XHRcdFx0ICAgICAgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuLVx0XHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbiYjNDM7JiM0Mzs7XG4tXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHR9XG4tXG4gXHRpZiAoc2dwID09IFNHUF9XUklURSlcbiBcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pO1xuIFx0LypcbkBAIC0yNTcyLDYgJiM0MzsyNzU1LDE1IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0XHRlcnJvciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoYWxsb2NlZCBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXHUwMDNjIGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdFxuJiM0MztcdFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2htZW1fdW51c2VkX2h1Z2VfYWRkKGlub2RlLCBmb2xpbywgZ2ZwKTtcbiYjNDM7XHR9XG4gb3V0OlxuIFx0KmZvbGlvcCA9IGZvbGlvO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzA0OCw2ICYjNDM7MzI0MCwxMCBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpfX3NobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChpbmZvLVx1MDAzZWZzZmxhZ3MpXG4gXHRcdHNobWVtX3NldF9pbm9kZV9mbGFncyhpbm9kZSwgaW5mby1cdTAwM2Vmc2ZsYWdzLCBOVUxMKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xuJiM0MztcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPSAtMTtcbiYjNDM7I2VuZGlmXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZXN3YXBsaXN0KTtcbiBcdGNhY2hlX25vX2FjbChpbm9kZSk7XG4gXHRpZiAoc2JpbmZvLVx1MDAzZW5vc3dhcClcbkBAIC00OTE0LDYgJiM0Mzs1MTEwLDkgQEAgc3RhdGljIHZvaWQgc2htZW1fcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gI2VuZGlmXG4gXHRmcmVlX3BlcmNwdShzYmluZm8tXHUwMDNlaW5vX2JhdGNoKTtcbiBcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXHUwMDI2c2JpbmZvLVx1MDAzZXVzZWRfYmxvY2tzKTtcbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuJiM0MzsjZW5kaWZcbiBcdG1wb2xfcHV0KHNiaW5mby1cdTAwM2VtcG9sKTtcbiAjaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXG4gXHRzaW1wbGVfeGF0dHJfY2FjaGVfY2xlYW51cChcdTAwMjZzYmluZm8tXHUwMDNleGFfY2FjaGUpO1xuQEAgLTUwMDcsOCAmIzQzOzUyMDYsMTEgQEAgc3RhdGljIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZzYmluZm8tXHUwMDNlc3RhdF9sb2NrKTtcbiBcdGlmIChwZXJjcHVfY291bnRlcl9pbml0KFx1MDAyNnNiaW5mby1cdTAwM2V1c2VkX2Jsb2NrcywgMCwgR0ZQX0tFUk5FTCkpXG4gXHRcdGdvdG8gZmFpbGVkO1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNiLVx1MDAzZXNfc2hyaW5rKSlcbiYjNDM7XHRcdGdvdG8gZmFpbGVkO1xuJiM0MzsjZW5kaWZcbiBcbiBcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuIFx0c2ItXHUwMDNlc19ibG9ja3NpemUgPSBQQUdFX1NJWkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NjYW4mIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfY291bnQmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfYWRkJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2RlbCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3JlcXVldWUmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfZHJvcCYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUmIzM0OywKICAgICYjMzQ7c2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZCYjMzQ7LAogICAgJiMzNDtzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7YnRyZnNfbnJfY2FjaGVkX29iamVjdHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNobWVtIGhhbmRsZXMgdW51c2VkIGh1Z2UgcGFnZXMgd2hlbiBzaHJpbmtpbmcsIGludHJvZHVjaW5nIGxpc3RfbHJ1IGZvciBzaHJpbmtsaXN0IGluIHNobWVtX3NiX2luZm8uIEl0IGFsc28gbW9kaWZpZXMgc3VwZXJfY2FjaGVfc2NhbiBhbmQgc3VwZXJfY2FjaGVfY291bnQgaW4gZnMvc3VwZXIuYyB0byByZW1vdmUgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZSBhbmQgaW5zdGVhZCB1c2VzIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgaW4gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDJiYTMyZGFiMzFlMWYxMzU4YzcwYWRkZTQ5ZWI4ZjQxOWVlMjZhMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDIyIDAwOjI0OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggYTdkODA0MjE5YmVjMzQuLmNjNDUzNzQzNTM5OTc2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmFtZWkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9taXNjZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWFnaWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtY29udHJvbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYXRlbGltaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcmMzMmMuaCZndDsKQEAgLTI0MzQsNiAmIzQzOzI0MzUsMTUgQEAgc3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm8KIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IGJ0cmZzX3NiKHNiKTsKIAljb25zdCBzNjQgbnIgPSBwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0aXZlKCZhbXA7ZnNfaW5mby0mZ3Q7ZXZpY3RhYmxlX2V4dGVudF9tYXBzKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGUgZXZpY3RhYmxlIGV4dGVudCBtYXAgY291bnRlciBpcyBmaWxlc3lzdGVtLWdsb2JhbCBhbmQgZG9lcyBub3QKJiM0MzsJICogaG9ub3VyIHNjLSZndDttZW1jZywgc28gaXQgaXMgb25seSBtZWFuaW5nZnVsIG9uIHRoZSBnbG9iYWwgKGtzd2FwZCBvcgomIzQzOwkgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2YKJiM0MzsJICogc2hyaW5rX3NsYWJfbWVtY2coKSB0byBhdm9pZCBxdWV1ZWluZyBkdXBsaWNhdGUgZ2xvYmFsIHdvcmsuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJdHJhY2VfYnRyZnNfZXh0ZW50X21hcF9zaHJpbmtlcl9jb3VudChmc19pbmZvLCBucik7CiAKIAlyZXR1cm4gbnI7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA5ZjgyZTZiMzhmMDdlZS4uOTNmMjRhZWE3NWM0ZDYgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtMjQsNyAmIzQzOzI0LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmxrZGV2LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbWVtY29udHJvbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JoYXNodGFibGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CkBAIC0xNzEsMTkgJiM0MzsxNzAsNiBAQCBzdGF0aWMgdm9pZCBzdXBlcl93YWtlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBmbGFnKQogCXdha2VfdXBfdmFyKCZhbXA7c2ItJmd0O3NfZmxhZ3MpOwogfQogCi0vKgotICogVGhlIHNfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzIGhvb2tzICh1c2VkIGZvciBleGFtcGxlIGJ5IGJ0cmZzIGFuZCB4ZnMpCi0gKiBvcGVyYXRlIG9uIGZpbGVzeXN0ZW0tZ2xvYmFsIHN0YXRlIGFuZCBpZ25vcmUgc2MtJmd0O21lbWNnLiBEcml2aW5nIHRoZW0KLSAqIGZyb20gcGVyLW1lbWNnIHNocmlua19zbGFiX21lbWNnKCkgaW52b2NhdGlvbnMgb25seSBidXJucyBDUFUgd2Fsa2luZwotICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uCi0gKiB0aGUgZ2xvYmFsIHBhdGggKGtzd2FwZCBvciByb290IGRpcmVjdCByZWNsYWltKSByZWdhcmRsZXNzLiBSZXN0cmljdCB0aGVtCi0gKiB0byB0aGF0IHBhdGguCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCi17Ci0JcmV0dXJuICFzYy0mZ3Q7bWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLSZndDttZW1jZyk7Ci19Ci0KIC8qCiAgKiBPbmUgdGhpbmcgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIHdpdGggYSBwZXItc2Igc2hyaW5rZXIgaXMgdGhhdCB3ZSBkb24mIzM5O3QKICAqIGRyb3AgdGhlIGxhc3QgYWN0aXZlIHJlZmVyZW5jZSB0byB0aGUgc3VwZXJibG9jayBmcm9tIHdpdGhpbiB0aGUgc2hyaW5rZXIuCkBAIC0yMTMsNyAmIzQzOzE5OSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssCiAJaWYgKCFzdXBlcl90cnlsb2NrX3NoYXJlZChzYikpCiAJCXJldHVybiBTSFJJTktfU1RPUDsKIAotCWlmIChzYi0mZ3Q7c19vcC0mZ3Q7bnJfY2FjaGVkX29iamVjdHMgJmFtcDsmYW1wOyBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSkKJiM0MzsJaWYgKHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cykKIAkJZnNfb2JqZWN0cyA9IHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpOwogCiAJaW5vZGVzID0gbGlzdF9scnVfc2hyaW5rX2NvdW50KCZhbXA7c2ItJmd0O3NfaW5vZGVfbHJ1LCBzYyk7CkBAIC0yNzQsOCAmIzQzOzI2MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAogCQlyZXR1cm4gMDsKIAlzbXBfcm1iKCk7CiAKLQlpZiAoc2ItJmd0O3Nfb3AgJmFtcDsmYW1wOyBzYi0mZ3Q7c19vcC0mZ3Q7bnJfY2FjaGVkX29iamVjdHMgJmFtcDsmYW1wOwotCSAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSkKJiM0MzsJaWYgKHNiLSZndDtzX29wICZhbXA7JmFtcDsgc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzKQogCQl0b3RhbF9vYmplY3RzID0gc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7CiAKIAl0b3RhbF9vYmplY3RzICYjNDM7PSBsaXN0X2xydV9zaHJpbmtfY291bnQoJmFtcDtzYi0mZ3Q7c19kZW50cnlfbHJ1LCBzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDk1NzI2MDY3NzY3ODE1Li44MTcwYmI4MDY2YTIyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTUyMCw2ICYjNDM7NTIwLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCXJldHVybiAobWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgLSBpcyB0aGlzIGEgZ2xvYmFsIG9yIHJvb3QtbWVtY2cgc2hyaW5rIGludm9jYXRpb24/CiYjNDM7ICogQHNjOiBzaHJpbmtfY29udHJvbCBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHNocmlua2VyIGNhbGwKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSB3aGVuIEBzYyByZXByZXNlbnRzIGEgZ2xvYmFsIHJlY2xhaW0gc2hyaW5rIChzYy0mZ3Q7bWVtY2cgPT0gTlVMTCkKJiM0MzsgKiBvciBhIHJvb3QtbWVtY2cgc2hyaW5rLCBpLmUuIG5vdCBhIHBlci1tZW1jZyBpdGVyYXRpb24gb2YKJiM0MzsgKiBzaHJpbmtfc2xhYl9tZW1jZygpLiBGaWxlc3lzdGVtcyB3aG9zZSAtJmd0O25yX2NhY2hlZF9vYmplY3RzKCkvCiYjNDM7ICogLSZndDtmcmVlX2NhY2hlZF9vYmplY3RzKCkgaW1wbGVtZW50YXRpb25zIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGUKJiM0MzsgKiBhbmQgZG8gbm90IGhvbm91ciBzYy0mZ3Q7bWVtY2cgY2FuIHVzZSB0aGlzIHRvIGVhcmx5LXJldHVybiAwIGluIHBlci1tZW1jZwomIzQzOyAqIGNvbnRleHRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwlyZXR1cm4gIXNjLSZndDttZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtJmd0O21lbWNnKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKIHsKIAlyZXR1cm4gb2JqY2ctJmd0O2lzX3Jvb3Q7CkBAIC0xMDcxLDYgJiM0MzsxMDg3LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc3RydWN0IHNocmlua19jb250cm9sICpzYykKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQogewogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCmluZGV4IDU2NjNkZmY1MzE4NmUyLi5hZWI1OTkwMWE4NDBjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaApAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9mc19wYXJzZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91c2VyZmF1bHRmZF9rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXN0X2xydS5oJmd0OwogCiAvKiBpbm9kZSBpbi1rZXJuZWwgZGF0YSAqLwogCkBAIC01NCw2ICYjNDM7NTUsMTEgQEAgc3RydWN0IHNobWVtX2lub2RlX2luZm8gewogCXN0cnVjdCBkcXVvdCBfX3JjdQkqaV9kcXVvdFtNQVhRVU9UQVNdOwogI2VuZGlmCiAJc3RydWN0IGlub2RlCQl2ZnNfaW5vZGU7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cAkqc2hyaW5rbGlzdF9tZW1jZzsKJiM0MzsJaW50CQkJc2hyaW5rbGlzdF9uaWQ7CiYjNDM7I2VuZGlmCiB9OwogCiAjZGVmaW5lIFNITUVNX0ZMX1VTRVJfVklTSUJMRQkJKEZTX0ZMX1VTRVJfVklTSUJMRSB8IEZTX0NBU0VGT0xEX0ZMKQpAQCAtODMsOSAmIzQzOzg5LDkgQEAgc3RydWN0IHNobWVtX3NiX2luZm8gewogCWlub190IG5leHRfaW5vOwkJICAgIC8qIFRoZSBuZXh0IHBlci1zYiBpbm9kZSBudW1iZXIgdG8gdXNlICovCiAJaW5vX3QgX19wZXJjcHUgKmlub19iYXRjaDsgIC8qIFRoZSBuZXh0IHBlci1jcHUgaW5vZGUgbnVtYmVyIHRvIHVzZSAqLwogCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovCi0Jc3BpbmxvY2tfdCBzaHJpbmtsaXN0X2xvY2s7ICAgLyogUHJvdGVjdHMgc2hyaW5rbGlzdCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdDsgIC8qIExpc3Qgb2Ygc2hpbmthYmxlIGlub2RlcyAqLwotCXVuc2lnbmVkIGxvbmcgc2hyaW5rbGlzdF9sZW47IC8qIExlbmd0aCBvZiBzaHJpbmtsaXN0ICovCiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdDsgLyogTGlzdCBvZiBzaHJpbmthYmxlIGlub2RlcyAqLwomIzQzOyNlbmRpZgogCXN0cnVjdCBzaG1lbV9xdW90YV9saW1pdHMgcWxpbWl0czsgLyogRGVmYXVsdCBxdW90YSBsaW1pdHMgKi8KIAlzdHJ1Y3Qgc2ltcGxlX3hhdHRyX2NhY2hlIHhhX2NhY2hlOwogfTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGYxODlkMWFjNDBkYjJkLi44YmY2ZGQ4NTBmODViNCAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC03MjQsNTEgJiM0Mzs3MjQsMjQyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9mb3JtYXRfaHVnZShpbnQgaHVnZSkKIH0KICNlbmRpZgogCiYjNDM7c3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwomIzQzOwlyZXR1cm4gaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPT0gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbmlkID0gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2c7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2cgPSBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gbWVtY2c7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0cKJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKgomIzQzO3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0ID0gbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csICZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCBnZnApOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBtZW1jZzsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKgomIzQzO3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0MzsJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKJiM0MzsJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJaW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEwsICpvbGRfbWVtY2cgPSBOVUxMOwomIzQzOwomIzQzOwltZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApOwomIzQzOwlpZiAoSVNfRVJSKG1lbWNnKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aW5mby0mZ3Q7bG9jayk7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpKSB7CiYjNDM7CQkvKiBpc29sYXRlZCBvbiBzY2FuIGxpc3QsIGxldCBzaHJpbmsgaGFuZGxlIGl0ICovCiYjNDM7CQlpZiAoaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbykpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPT0gbmlkICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpbmZvLSZndDtzaHJpbmtsaXN0X21lbWNnID09IG1lbWNnKQomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwkJbGlzdF9scnVfZGVsKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QsCiYjNDM7CQkJICAgICBpbmZvLSZndDtzaHJpbmtsaXN0X25pZCwgaW5mby0mZ3Q7c2hyaW5rbGlzdF9tZW1jZyk7CiYjNDM7CQlvbGRfbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2cgPSBtZW1jZzsKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPSBuaWQ7CiYjNDM7CWxpc3RfbHJ1X2FkZCgmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCwgJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0LCBuaWQsIG1lbWNnKTsKJiM0MzsJbWVtY2cgPSBOVUxMOwomIzQzO3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJbWVtX2Nncm91cF9wdXQob2xkX21lbWNnKTsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KSkgewomIzQzOwkJbGlzdF9scnVfZGVsKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QsCiYjNDM7CQkJICAgICBpbmZvLSZndDtzaHJpbmtsaXN0X25pZCwgaW5mby0mZ3Q7c2hyaW5rbGlzdF9tZW1jZyk7CiYjNDM7CQltZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJc3RydWN0IHNocmlua19jb250cm9sICpzYzsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLAomIzQzOwkJCQkJCSBzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsCiYjNDM7CQkJCQkJIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnOwomIzQzOwlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbzsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKJiM0MzsKJiM0MzsJaW5mbyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgdHJ5bG9jayB0byBhdm9pZCBBQkJBIGRlYWRsb2NrOiBhZGQvZGVsIHBhdGggdGFrZXMgaW5mby0mZ3Q7bG9jawomIzQzOwkgKiBiZWZvcmUgdGhlIGxpc3RfbHJ1IGJ1Y2tldCBsb2NrLCB3aGlsZSBoZXJlIHRoZSBvcmRlciBpcyByZXZlcnNlZC4KJiM0MzsJICovCiYjNDM7CWlmICghc3Bpbl90cnlsb2NrKCZhbXA7aW5mby0mZ3Q7bG9jaykpCiYjNDM7CQlyZXR1cm4gTFJVX1NLSVA7CiYjNDM7CiYjNDM7CS8qIHBpbiB0aGUgaW5vZGUgKi8KJiM0MzsJaW5vZGUgPSBpZ3JhYigmYW1wO2luZm8tJmd0O3Zmc19pbm9kZSk7CiYjNDM7CS8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi8KJiM0MzsJaWYgKCFpbm9kZSkgewomIzQzOwkJbGlzdF9scnVfaXNvbGF0ZShscnUsIGl0ZW0pOwomIzQzOwkJbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsJCXJldHVybiBMUlVfUkVNT1ZFRDsKJiM0MzsJfQomIzQzOwomIzQzOwlsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7CiYjNDM7CW1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTsKJiM0MzsJc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKGluZm8pOwomIzQzOwlsaXN0X2FkZF90YWlsKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwgJmFtcDtzY2FuLSZndDtsaXN0KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzOwomIzQzOwlyZXR1cm4gTFJVX1JFTU9WRUQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKJiM0MzsJYm9vbCBtYXRjaDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT25seSBub24tcm9vdCBtZW1jZyByZWNsYWltIG5lZWRzIHRvIG1hdGNoIHRoZSBmb2xpbyBjaGFyZ2UgYWdhaW5zdAomIzQzOwkgKiBzYy0mZ3Q7bWVtY2cuIFNraXAgdGhlIGZvbGlvIG1lbWNnIGNoZWNrIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOgomIzQzOwkgKiAxLiBzaG1lbSBxdW90YSByZWNsYWltIChzYyA9PSBOVUxMKQomIzQzOwkgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbQomIzQzOwkgKiAzLiByb290IG1lbWNnIHJlY2xhaW0KJiM0MzsJICovCiYjNDM7CWlmICghc2MgfHwgIXNjLSZndDttZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtJmd0O21lbWNnKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAoZm9saW9fbmlkKGZvbGlvKSAhPSBzYy0mZ3Q7bmlkKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwomIzQzOwltYXRjaCA9IG1lbWNnID09IHNjLSZndDttZW1jZzsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzOwomIzQzOwlyZXR1cm4gbWF0Y2g7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwlsaXN0X2RlbF9pbml0KCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aW5mby0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsJaW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7CiYjNDM7CiYjNDM7CW1lbWNnID0gc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHNiaW5mbywgZm9saW8sIEdGUF9OT1dBSVQpOwomIzQzOwlpZiAoSVNfRVJSKG1lbWNnKSkKJiM0MzsJCWdvdG8gZHJvcDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aW5mby0mZ3Q7bG9jayk7CiYjNDM7CS8qIFJlcXVldWUgdGhlIGlub2RlIHRvIHNocmlua2xpc3QgKi8KJiM0MzsJbGlzdF9kZWxfaW5pdCgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpOwomIzQzOwlsaXN0X2xydV9hZGQoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsICZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwgbmlkLCBtZW1jZyk7CiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2cgPSBtZW1jZzsKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPSBuaWQ7CiYjNDM7CW1lbWNnID0gTlVMTDsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzOwomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7ZHJvcDoKJiM0MzsJc2htZW1fdW51c2VkX2h1Z2VfZHJvcChpbm9kZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sCiAJCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSkKIHsKLQlMSVNUX0hFQUQobGlzdCksICpwb3MsICpuZXh0OwomIzQzOwlzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiBzY2FuOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKLQl1bnNpZ25lZCBsb25nIGJhdGNoID0gc2MgPyBzYy0mZ3Q7bnJfdG9fc2NhbiA6IDEyODsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwOwogCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpKQotCQlyZXR1cm4gU0hSSU5LX1NUT1A7Ci0KLQlzcGluX2xvY2soJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpIHsKLQkJaW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7Ci0KLQkJLyogcGluIHRoZSBpbm9kZSAqLwotCQlpbm9kZSA9IGlncmFiKCZhbXA7aW5mby0mZ3Q7dmZzX2lub2RlKTsKLQotCQkvKiBpbm9kZSBpcyBhYm91dCB0byBiZSBldmljdGVkICovCi0JCWlmICghaW5vZGUpIHsKLQkJCWxpc3RfZGVsX2luaXQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKLQkJCWdvdG8gbmV4dDsKLQkJfQotCi0JCWxpc3RfbW92ZSgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QsICZhbXA7bGlzdCk7Ci1uZXh0OgotCQlzYmluZm8tJmd0O3Nocmlua2xpc3RfbGVuLS07Ci0JCWlmICghLS1iYXRjaCkKLQkJCWJyZWFrOwotCX0KLQlzcGluX3VubG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtzY2FuLmxpc3QpOwomIzQzOwlzY2FuLnNjID0gc2M7CiYjNDM7CWlmIChzYykKJiM0MzsJCWxpc3RfbHJ1X3Nocmlua193YWxrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCBzYywKJiM0MzsJCQkJICAgICBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlLCAmYW1wO3NjYW4pOwomIzQzOwllbHNlCiYjNDM7CQlsaXN0X2xydV93YWxrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlLAomIzQzOwkJCSAgICAgICZhbXA7c2NhbiwgMTI4KTsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsICZhbXA7bGlzdCkgewotCQlwZ29mZl90IG5leHQsIGVuZDsKJiM0MzsJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgJmFtcDtzY2FuLmxpc3QpIHsKJiM0MzsJCXBnb2ZmX3QgZm9saW9fZW5kLCBlbmQ7CiAJCWxvZmZfdCBpX3NpemU7CiAJCWludCByZXQ7CiAKIAkJaW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7CiAJCWlub2RlID0gJmFtcDtpbmZvLSZndDt2ZnNfaW5vZGU7CiAKLQkJaWYgKG5yX3RvX2ZyZWUgJmFtcDsmYW1wOyBmcmVlZCAmZ3Q7PSBucl90b19mcmVlKQotCQkJZ290byBtb3ZlX2JhY2s7Ci0KIAkJaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCQlmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLSZndDtpX21hcHBpbmcsIGlfc2l6ZSAvIFBBR0VfU0laRSk7CiAJCWlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKQpAQCAtNzgxLDEzICYjNDM7OTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLAogCQl9CiAKIAkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZ2FpbiBmcm9tIHNwbGl0dGluZyAqLwotCQluZXh0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7CiYjNDM7CQlmb2xpb19lbmQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTsKIAkJZW5kID0gc2htZW1fZmFsbG9jZW5kKGlub2RlLCBESVZfUk9VTkRfVVAoaV9zaXplLCBQQUdFX1NJWkUpKTsKLQkJaWYgKGVuZCAmbHQ7PSBmb2xpby0mZ3Q7aW5kZXggfHwgZW5kICZndDs9IG5leHQpIHsKJiM0MzsJCWlmIChlbmQgJmx0Oz0gZm9saW8tJmd0O2luZGV4IHx8IGVuZCAmZ3Q7PSBmb2xpb19lbmQpIHsKIAkJCWZvbGlvX3B1dChmb2xpbyk7CiAJCQlnb3RvIGRyb3A7CiAJCX0KIAomIzQzOwkJaWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHsKJiM0MzsJCQlzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7CiYjNDM7CQkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJCQlnb3RvIHB1dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChucl90b19mcmVlICZhbXA7JmFtcDsgZnJlZWQgJmd0Oz0gbnJfdG9fZnJlZSkgewomIzQzOwkJCXNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJCWdvdG8gcHV0OwomIzQzOwkJfQomIzQzOwogCQkvKgogCQkgKiBNb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgaWYgd2UgZmFpbGVkCiAJCSAqIHRvIGxvY2sgdGhlIHBhZ2UgYXQgdGhpcyB0aW1lLgpAQCAtNzk2LDM0ICYjNDM7OTk5LDMzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLAogCQkgKiByZWNsYWltIHBhdGguCiAJCSAqLwogCQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKSB7CiYjNDM7CQkJc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pOwomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQkJZ290byBwdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkgewomIzQzOwkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CQkJc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pOwogCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCWdvdG8gbW92ZV9iYWNrOwomIzQzOwkJCWdvdG8gcHV0OwogCQl9CiAKIAkJcmV0ID0gc3BsaXRfZm9saW8oZm9saW8pOwogCQlmb2xpb191bmxvY2soZm9saW8pOwotCQlmb2xpb19wdXQoZm9saW8pOwogCiAJCS8qIElmIHNwbGl0IGZhaWxlZCBtb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgKi8KLQkJaWYgKHJldCkKLQkJCWdvdG8gbW92ZV9iYWNrOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJCWdvdG8gcHV0OwomIzQzOwkJfQogCi0JCWZyZWVkICYjNDM7PSBuZXh0IC0gZW5kOwomIzQzOwkJZnJlZWQgJiM0Mzs9IGZvbGlvX2VuZCAtIGVuZDsKIAkJc3BsaXQmIzQzOyYjNDM7OwomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKIGRyb3A6Ci0JCWxpc3RfZGVsX2luaXQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKLQkJZ290byBwdXQ7Ci1tb3ZlX2JhY2s6Ci0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgZWl0aGVyIG9uIHRoZSBnbG9iYWwgbGlzdCBvciBkZWxldGVkCi0JCSAqIGZyb20gYW55IGxvY2FsIGxpc3QgYmVmb3JlIGlwdXQoKSBzaW5jZSBpdCBjb3VsZCBiZSBkZWxldGVkCi0JCSAqIGluIGFub3RoZXIgdGhyZWFkIG9uY2Ugd2UgcHV0IHRoZSBpbm9kZSAodGhlbiB0aGUgbG9jYWwgbGlzdAotCQkgKiBpcyBjb3JydXB0ZWQpLgotCQkgKi8KLQkJc3Bpbl9sb2NrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0X2xvY2spOwotCQlsaXN0X21vdmUoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCk7Ci0JCXNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4mIzQzOyYjNDM7OwotCQlzcGluX3VubG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKJiM0MzsJCXNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpOwogcHV0OgogCQlpcHV0KGlub2RlKTsKIAl9CkBAIC04MzYsNyAmIzQzOzEwMzgsNyBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zY2FuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiB7CiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKHNiKTsKIAotCWlmICghUkVBRF9PTkNFKHNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4pKQomIzQzOwlpZiAoIWxpc3RfbHJ1X3Nocmlua19jb3VudCgmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCwgc2MpKQogCQlyZXR1cm4gU0hSSU5LX1NUT1A7CiAKIAlyZXR1cm4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgc2MsIDApOwpAQCAtODQ2LDEyICYjNDM7MTA0OCwyMiBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQlzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQogewogCXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7Ci0JcmV0dXJuIFJFQURfT05DRShzYmluZm8tJmd0O3Nocmlua2xpc3RfbGVuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGxpc3RfbHJ1X3Nocmlua19jb3VudCgmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCwgc2MpOwogfQogI2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwogCiAjZGVmaW5lIHNobWVtX2h1Z2UgU0hNRU1fSFVHRV9ERU5ZCiAKJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJICBnZnBfdCBnZnApCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sCiAJCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSkKIHsKQEAgLTE0MDcsMTQgJiM0MzsxNjE5LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkJaW5vZGUtJmd0O2lfc2l6ZSA9IDA7CiAJCW1hcHBpbmdfc2V0X2V4aXRpbmcoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiAJCXNobWVtX3RydW5jYXRlX3JhbmdlKGlub2RlLCAwLCAobG9mZl90KS0xKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCkpIHsKLQkJCXNwaW5fbG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKLQkJCWlmICghbGlzdF9lbXB0eSgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpKSB7Ci0JCQkJbGlzdF9kZWxfaW5pdCgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpOwotCQkJCXNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4tLTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0X2xvY2spOwotCQl9CiYjNDM7CQlzaG1lbV91bnVzZWRfaHVnZV9kZWwoaW5vZGUpOwogCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmFtcDtpbmZvLSZndDtzd2FwbGlzdCkpIHsKIAkJCS8qIFdhaXQgd2hpbGUgc2htZW1fdW51c2UoKSBpcyBzY2FubmluZyB0aGlzIGlub2RlLi4uICovCiAJCQl3YWl0X3Zhcl9ldmVudCgmYW1wO2luZm8tJmd0O3N0b3BfZXZpY3Rpb24sCkBAIC0yNTIyLDI4ICYjNDM7MjcyNyw2IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCiBhbGxvY2VkOgogCWFsbG9jZWQgPSB0cnVlOwotCWlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7Ci0JICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgJmx0OwotCQkJCQlmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkgewotCQlzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtJmd0O2lfc2IpOwotCQlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwotCQkvKgotCQkgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0Ci0JCSAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCi0JCSAqLwotCQlzcGluX2xvY2soJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7Ci0JCS8qCi0JCSAqIF9jYXJlZnVsIHRvIGRlZmVuZCBhZ2FpbnN0IHVubG9ja2VkIGFjY2VzcyB0bwotCQkgKiAtJmd0O3Nocmlua19saXN0IGluIHNobWVtX3VudXNlZF9odWdlX3NocmluaygpCi0JCSAqLwotCQlpZiAobGlzdF9lbXB0eV9jYXJlZnVsKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCkpIHsKLQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0LAotCQkJCSAgICAgICZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0KTsKLQkJCXNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4mIzQzOyYjNDM7OwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0X2xvY2spOwotCX0KLQogCWlmIChzZ3AgPT0gU0dQX1dSSVRFKQogCQlmb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7CiAJLyoKQEAgLTI1NzIsNiAmIzQzOzI3NTUsMTUgQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJCWVycm9yID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CiAJfQomIzQzOwomIzQzOwlpZiAoYWxsb2NlZCAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pICZhbXA7JmFtcDsKJiM0MzsJICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgJmx0OyBmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFBhcnQgb2YgdGhlIGxhcmdlIGZvbGlvIGlzIGJleW9uZCBpX3NpemU6IHN1YmplY3QKJiM0MzsJCSAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCiYjNDM7CQkgKi8KJiM0MzsJCXNobWVtX3VudXNlZF9odWdlX2FkZChpbm9kZSwgZm9saW8sIGdmcCk7CiYjNDM7CX0KIG91dDoKIAkqZm9saW9wID0gZm9saW87CiAJcmV0dXJuIDA7CkBAIC0zMDQ4LDYgJiM0MzszMjQwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmIChpbmZvLSZndDtmc2ZsYWdzKQogCQlzaG1lbV9zZXRfaW5vZGVfZmxhZ3MoaW5vZGUsIGluZm8tJmd0O2ZzZmxhZ3MsIE5VTEwpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCk7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlpbmZvLSZndDtzaHJpbmtsaXN0X21lbWNnID0gTlVMTDsKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPSAtMTsKJiM0MzsjZW5kaWYKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2luZm8tJmd0O3N3YXBsaXN0KTsKIAljYWNoZV9ub19hY2woaW5vZGUpOwogCWlmIChzYmluZm8tJmd0O25vc3dhcCkKQEAgLTQ5MTQsNiAmIzQzOzUxMTAsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKICNlbmRpZgogCWZyZWVfcGVyY3B1KHNiaW5mby0mZ3Q7aW5vX2JhdGNoKTsKIAlwZXJjcHVfY291bnRlcl9kZXN0cm95KCZhbXA7c2JpbmZvLSZndDt1c2VkX2Jsb2Nrcyk7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlsaXN0X2xydV9kZXN0cm95KCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0KTsKJiM0MzsjZW5kaWYKIAltcG9sX3B1dChzYmluZm8tJmd0O21wb2wpOwogI2lmZGVmIENPTkZJR19UTVBGU19YQVRUUgogCXNpbXBsZV94YXR0cl9jYWNoZV9jbGVhbnVwKCZhbXA7c2JpbmZvLSZndDt4YV9jYWNoZSk7CkBAIC01MDA3LDggJiM0Mzs1MjA2LDExIEBAIHN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7c2JpbmZvLSZndDtzdGF0X2xvY2spOwogCWlmIChwZXJjcHVfY291bnRlcl9pbml0KCZhbXA7c2JpbmZvLSZndDt1c2VkX2Jsb2NrcywgMCwgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gZmFpbGVkOwotCXNwaW5fbG9ja19pbml0KCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0KTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7CWlmIChsaXN0X2xydV9pbml0X21lbWNnKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCBzYi0mZ3Q7c19zaHJpbmspKQomIzQzOwkJZ290byBmYWlsZWQ7CiYjNDM7I2VuZGlmCiAKIAlzYi0mZ3Q7c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7CiAJc2ItJmd0O3NfYmxvY2tzaXplID0gUEFHRV9TSVpFOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogSHVnZSBQYWdlIGFuZCBPYmplY3QgQ2FjaGluZyBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaXQgc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgaG93IGBzaG1lbWAgZGVhbHMgd2l0aCB1bnVzZWQgaHVnZSBwYWdlcyBkdXJpbmcgc2hyaW5raW5nIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHJlcGxhY2luZyB0aGUgb2xkIGBsaXN0X2hlYWRgIGFuZCBzcGlubG9jayBpbiBgc2htZW1fc2JfaW5mb2Agd2l0aCBhIGBsaXN0X2xydWAgZm9yIHRoZSBgc2hyaW5rbGlzdGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG9wdGltaXphdGlvbiwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBiZXR0ZXIgcGVyZm9ybWFuY2UgaW4gY29udGVudGlvbiBzY2VuYXJpb3MuIEl0IGFsc28gc2VlbXMgdG8gYmUgdG91Y2hpbmcgYHN1cGVyX2NhY2hlX3NjYW5gIGFuZCBgc3VwZXJfY2FjaGVfY291bnRgIGluIGBmcy9zdXBlci5jYCwgcmVtb3ZpbmcgYHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGVgIGFuZCBsZWFuaW5nIG9uIGBtZW1fY2dyb3VwX3Nocmlua19pc19yb290YCB3aXRoaW4gYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYCBpbnN0ZWFkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgbW92ZSB0b3dhcmRzIG1vcmUgdW5pZmllZCBtZW1vcnkgY2dyb3VwIG1hbmFnZW1lbnQuCgpGdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGltcGFjdGluZyBgbW0vc2htZW0uY2AgYW5kIGFsc28gaW1wYWN0aW5nIGBmcy9idHJmcy9zdXBlci5jYC4gVGhlIGBzaG1lbWAgc2lkZSBpcyBkZWZpbml0ZWx5IHRpZWQgaW50byBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYENPTkZJR19NRU1DR2AuIEdpdmVuIHRoaXMsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4KCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgIGlzIGNhbGxlZCBieSBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAsIHdoaWNoIGluIHR1cm4gaXMgYSBzdXBlcmJsb2NrIHNocmlua2VyIGNhbGxiYWNrIOKAkyBzcGVjaWZpY2FsbHksIGBzX29wLSZndDtmcmVlX2NhY2hlZF9vYmplY3RzYC4gVGhhdCYjMzk7cyBhIGNsZWFyIGVudHJ5IHBvaW50LCBhIGRlZmluaXRlICYjMzQ7eWVzJiMzNDsgZm9yIHJlYWNoYWJpbGl0eS4gVGhlbiwgYHNobWVtX3VudXNlZF9odWdlX2FkZGAgaXMgYWxzbyBjYWxsZWQgZnJvbSBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgd2hlbiBhIGxhcmdlIGZvbGlvIGlzIGFsbG9jYXRlZCwgc3BlY2lmaWNhbGx5IHdoZW4gcGFydCBvZiB0aGUgZm9saW8gaXMgYmV5b25kIGBpX3NpemVgLiBUaGF0JiMzOTtzIGFub3RoZXIgcG90ZW50aWFsIHRyaWdnZXIuIFl1cCwgdGhpcyBwYXRjaCBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBwaW5wb2ludCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQ6CiogICBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYAoqICAgYENPTkZJR19NRU1DR2AKKiAgIGBDT05GSUdfU0hNRU1gIChJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgbGlrZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjaykKKiAgIGBDT05GSUdfVE1QRlNgCgpOZXh0IHN0ZXA6IGxldCYjMzk7cyBnbyBpbnRvIGBtbS9zaG1lbS5jYCBhbmQgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMuIFdlIG5lZWQgdG8gZm9jdXMgb246CiogICBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYAoqICAgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gCiogICBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgCiogICBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYAoqICAgYHNobWVtX3VudXNlZF9odWdlX2RlbGAKKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlYAoqICAgYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgCiogICBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGAKCkFuZCB0aGVuLCBvdmVyIGluIGBmcy9idHJmcy9zdXBlci5jYCwgd2UmIzM5O3ZlIGdvdDoKKiAgIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AKKiAgIGBidHJmc19mcmVlX2NhY2hlZF9vYmplY3RzYAoKRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgdXNpbmcgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGNvbmZpcm0gdGhvc2UgY29uZmlncyBhbmQgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGltZSB0byBnZXQgdGhpcyBzZXQgdXAgYW5kIHN0YXJ0IHRoZSBmdXp6aW5nIHJ1biEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9MTEzPXN0cnVjdCBzaG1lbV9vcHRpb25zIHtcbi0tXG5tbS9zaG1lbS5jLTEzNi1cbm1tL3NobWVtLmM6MTM3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3NobWVtLmMtMTM4LXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xuLS1cbm1tL3NobWVtLmM9NTIwPXN0YXRpYyBpbnQgc2htZW1fY29uZmlybV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtNTY4LVxubW0vc2htZW0uYzo1Njk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy01NzAtLyogaWZkZWYgaGVyZSB0byBhdm9pZCBibG9hdGluZyBzaG1lbS5vIHdoZW4gbm90IG5lY2Vzc2FyeSAqL1xubW0vc2htZW0uYy01NzEtXG5tbS9zaG1lbS5jOjU3MjojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUilcbm1tL3NobWVtLmMtNTczLSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfTkVWRVJcbm1tL3NobWVtLmM6NTc0OiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTKVxubW0vc2htZW0uYy01NzUtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcbm1tL3NobWVtLmM6NTc2OiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkUpXG5tbS9zaG1lbS5jLTU3Ny0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9zaG1lbS5jOjU3ODojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRSlcbm1tL3NobWVtLmMtNTc5LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQURWSVNFXG4tLVxubW0vc2htZW0uYz01ODQ9c3RhdGljIGludCBzaG1lbV9odWdlIF9fcmVhZF9tb3N0bHkgPSBTSE1FTV9IVUdFX0RFRkFVTFQ7XG4tLVxubW0vc2htZW0uYy01ODctXG5tbS9zaG1lbS5jOjU4ODojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUilcbm1tL3NobWVtLmMtNTg5LSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfTkVWRVJcbm1tL3NobWVtLmM6NTkwOiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTKVxubW0vc2htZW0uYy01OTEtI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcbm1tL3NobWVtLmM6NTkyOiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkUpXG5tbS9zaG1lbS5jLTU5My0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9zaG1lbS5jOjU5NDojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRSlcbm1tL3NobWVtLmMtNTk1LSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQURWSVNFXG4tLVxubW0vc2htZW0uYz0xMDQ3PXN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxubW0vc2htZW0uYy0xMDUzLX1cbm1tL3NobWVtLmM6MTA1NDojZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9zaG1lbS5jLTEwNTUtXG4tLVxubW0vc2htZW0uYz0xMDczPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMTA3OS19XG5tbS9zaG1lbS5jOjEwODA6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vc2htZW0uYy0xMDgxLVxuLS1cbm1tL3NobWVtLmM9MTc5OD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc2htZW0uYy0xODQwLVxubW0vc2htZW0uYzoxODQxOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3NobWVtLmMtMTg0Mi1cdFx0aWYgKG9yZGVyIFx1MDAzZT0gSFBBR0VfUE1EX09SREVSKSB7XG4tLVxubW0vc2htZW0uYz0xOTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBpbl9jbHVzdGVyKHN3cF9lbnRyeV90IHN3YXAsIGdmcF90IGdmcCxcbi0tXG5tbS9zaG1lbS5jLTIwMDgtXG5tbS9zaG1lbS5jOjIwMDk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0yMDEwLWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcbi0tXG5tbS9zaG1lbS5jPTIxMDg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3NobWVtLmMtMjExMy19XG5tbS9zaG1lbS5jOjIxMTQ6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vc2htZW0uYy0yMTE1LVxuLS1cbm1tL3NobWVtLmM9MjEzMD1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3NobWVtLmMtMjE0MS1cbm1tL3NobWVtLmM6MjE0MjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxubW0vc2htZW0uYy0yMTQzLVx0XHRvcmRlcnMgPSAwO1xuLS1cbm1tL3NobWVtLmM9MjI4MD1zdGF0aWMgaW50IHNobWVtX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBnZnBfdCBnZnAsXG4tLVxubW0vc2htZW0uYy0yMjk0LVx0Z2ZwIFx1MDAyNj0gfkdGUF9DT05TVFJBSU5UX01BU0s7XG5tbS9zaG1lbS5jOjIyOTU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0yMjk2LVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKSB7XG4tLVxubW0vc2htZW0uYz0yOTE4PXVuc2lnbmVkIGxvbmcgc2htZW1fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vc2htZW0uYy0yOTMzLVxubW0vc2htZW0uYzoyOTM0Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG5tbS9zaG1lbS5jLTI5MzUtXHRcdHJldHVybiBhZGRyO1xuLS1cbm1tL3NobWVtLmMtMjk3Ny1cdFx0XHQgKi9cbm1tL3NobWVtLmM6Mjk3ODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTI5NzktXHRcdFx0aHBhZ2Vfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XG4tLVxubW0vc2htZW0uYz0zMjAzPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbm1tL3NobWVtLmMtMzI0Mi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG5tbS9zaG1lbS5jOjMyNDM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0zMjQ0LVx0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gTlVMTDtcbi0tXG5tbS9zaG1lbS5jPTQ3MTY9c3RhdGljIGludCBzaG1lbV9wYXJzZV9vbmUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbi0tXG5tbS9zaG1lbS5jLTQ3ODUtXHRcdGlmIChjdHgtXHUwMDNlaHVnZSAhPSBTSE1FTV9IVUdFX05FVkVSIFx1MDAyNlx1MDAyNlxubW0vc2htZW0uYzo0Nzg2Olx0XHQgICAgIShJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9zaG1lbS5jLTQ3ODctXHRcdCAgICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSlcbi0tXG5tbS9zaG1lbS5jPTUwMjY9c3RhdGljIGludCBzaG1lbV9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4tLVxubW0vc2htZW0uYy01MDY1LVx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7LGlub2RlJWRcJiMzNDssIChzYmluZm8tXHUwMDNlZnVsbF9pbnVtcyA/IDY0IDogMzIpKTtcbm1tL3NobWVtLmM6NTA2NjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTUwNjctXHQvKiBSaWdodGx5IG9yIHdyb25nbHksIHNob3cgaHVnZSBtb3VudCBvcHRpb24gdW5tYXNrZWQgYnkgc2htZW1faHVnZSAqL1xuLS1cbm1tL3NobWVtLmM9NTA5OT1zdGF0aWMgdm9pZCBzaG1lbV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5tbS9zaG1lbS5jLTUxMTItXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFx1MDAyNnNiaW5mby1cdTAwM2V1c2VkX2Jsb2Nrcyk7XG5tbS9zaG1lbS5jOjUxMTM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy01MTE0LVx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tLVxubW0vc2htZW0uYz01MTMxPXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxubW0vc2htZW0uYy01MTk2LVx0c2JpbmZvLVx1MDAzZW1vZGUgPSBjdHgtXHUwMDNlbW9kZTtcbm1tL3NobWVtLmM6NTE5NzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTUxOTgtXHRpZiAoY3R4LVx1MDAzZXNlZW4gXHUwMDI2IFNITUVNX1NFRU5fSFVHRSlcbi0tXG5tbS9zaG1lbS5jLTUyMDktXG5tbS9zaG1lbS5jOjUyMTA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy01MjExLVx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNiLVx1MDAzZXNfc2hyaW5rKSlcbi0tXG5tbS9zaG1lbS5jPTU0MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcbi0tXG5tbS9zaG1lbS5jLTU0MzAtXHQucHV0X3N1cGVyXHQ9IHNobWVtX3B1dF9zdXBlcixcbm1tL3NobWVtLmM6NTQzMTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTU0MzItXHQubnJfY2FjaGVkX29iamVjdHNcdD0gc2htZW1fdW51c2VkX2h1Z2VfY291bnQsXG4tLVxubW0vc2htZW0uYz01NTU2PXZvaWQgX19pbml0IHNobWVtX2luaXQodm9pZClcbi0tXG5tbS9zaG1lbS5jLTU1ODYtXG5tbS9zaG1lbS5jOjU1ODc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy01NTg4LVx0aWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNiBzaG1lbV9odWdlIFx1MDAzZSBTSE1FTV9IVUdFX0RFTlkpXG4tLVxubW0vc2htZW0uYy01NjExLVxubW0vc2htZW0uYzo1NjEyOiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NZU0ZTKVxubW0vc2htZW0uYy01NjEzLXN0YXRpYyBzc2l6ZV90IHNobWVtX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9zaG1lbS5jPTU3Njc9c3RydWN0IGtvYmpfYXR0cmlidXRlIHRocHNpemVfc2htZW1fZW5hYmxlZF9hdHRyID1cbm1tL3NobWVtLmMtNTc2OC1cdF9fQVRUUihzaG1lbV9lbmFibGVkLCAwNjQ0LCB0aHBzaXplX3NobWVtX2VuYWJsZWRfc2hvdywgdGhwc2l6ZV9zaG1lbV9lbmFibGVkX3N0b3JlKTtcbm1tL3NobWVtLmM6NTc2OTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiBDT05GSUdfU1lTRlMgKi9cbm1tL3NobWVtLmMtNTc3MC1cbm1tL3NobWVtLmM6NTc3MTojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5tbS9zaG1lbS5jLTU3NzItXG4tLVxubW0vc2htZW0uYz01OTAyPV9fc2V0dXAoXCYjMzQ7dGhwX3NobWVtPVwmIzM0Oywgc2V0dXBfdGhwX3NobWVtKTtcbm1tL3NobWVtLmMtNTkwMy1cbm1tL3NobWVtLmM6NTkwNDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9zaG1lbS5jLTU5MDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBUSFAgYW5kIGNncm91cHMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAoYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWApLiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQmIzM5O3Mgd2hhdCB3ZSB3YW50IGZvciBwZXJmb3JtYW5jZSBpbiBtYW55IHdvcmtsb2Fkcy4gQnV0IG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYENPTkZJR19NRU1DR2AuIElmIHdlJiMzOTtyZSB1c2luZyBUSFAsIGVzcGVjaWFsbHkgaW4gYW55IGtpbmQgb2YgY29udGFpbmVyaXplZCBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgSSAqbmVlZCogdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IHdpdGggbWVtb3J5IGNncm91cHMuIEFyZSB3ZSBwcm9wZXJseSBhY2NvdW50aW5nIGZvciBUSFAgdXNhZ2Ugd2l0aGluIHRob3NlIGNncm91cCBsaW1pdHM/IElzIHRoZSBzY2hlZHVsZXIgYmVpbmcgTlVNQS1hd2FyZSBlbm91Z2ggaW4gaXRzIHBsYWNlbWVudCBvZiBodWdlcGFnZXMgd2l0aGluIGEgbWVtY2c/IFdoYXQgYWJvdXQgb3ZlcmNvbW1pdCDigJMgaG93IGRvZXMgdGhlIHN5c3RlbSBoYW5kbGUgYSBzaXR1YXRpb24gd2hlcmUgYSBtZW1jZyByZXF1ZXN0cyBtb3JlIFRIUCB0aGFuIGlzIGF2YWlsYWJsZSwgYW5kIHdoYXQgYXJlIHRoZSByZXBlcmN1c3Npb25zPyBXZSYjMzk7cmUgcG90ZW50aWFsbHkgdGFsa2luZyBhYm91dCBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGVzZSB0d28gZmVhdHVyZXMgaW50ZXJhY3QuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdG8gc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBiZWhhdmUgdG9nZXRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkga25vd24gZ290Y2hhcyBvciB0dW5pbmcgcGFyYW1ldGVycyB0aGF0IGFyZSBjcml0aWNhbCB0byBvcHRpbWl6aW5nIHRoaXMgc2V0dXAuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBkdXJpbmcgYSBzeXN0ZW0gYXVkaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTczOD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXG4tLVxubW0vc2htZW0uYy03NDYtXG5tbS9zaG1lbS5jOjc0NzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zaG1lbS5jLTc0OC1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBCdHJmcyBTdXBlcmJsb2NrIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdCBgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdGAgY2hlY2sgd2l0aGluIHRoZSBCdHJmcyBjb2RlYmFzZT8gSSBrbm93IGl0IGRlYWxzIHdpdGggbWVtb3J5IGNncm91cHMsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIHN1cGVyYmxvY2sgY29kZSwgcGFydGljdWxhcmx5IHdoZXJlIGl0IGhhbmRsZXMgdGhpbmdzIGxpa2UgbWV0YWRhdGEuIFJpZ2h0LCB0aGF0IHB1dHMgbWUgc3F1YXJlbHkgaW4gYGZzL2J0cmZzL3N1cGVyLmNgLiBUaGF0IGZpbGUgaXMgdGhlIGNlbnRyYWwgaHViIGZvciBzdXBlcmJsb2NrIG9wZXJhdGlvbnMsIHNvIGl0IHNob3VsZCBjb250YWluIHRoZSByZWxldmFudCBjb250ZXh0LCBvciBhdCBsZWFzdCB0aGUgY2FsbHMgSSBuZWVkIHRvIHRyYWNlLiBOb3csIHRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbiB0aGVyZS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3Nocmlua19pc19yb290JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYnRyZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9idHJmcy9zdXBlci5jPTI0MzM9c3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5mcy9idHJmcy9zdXBlci5jLTI0NDMtXHQgKi9cbmZzL2J0cmZzL3N1cGVyLmM6MjQ0NDpcdGlmICghbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzYykpXG5mcy9idHJmcy9zdXBlci5jLTI0NDUtXHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjM5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgcHJvbWlzaW5nIOKAkyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCB0aHJvd2luZyBhIGZ1enplciBhdC4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AsIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX3VudXNlZF9odWdlX2FkZGAsIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLCBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAsIGBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlYCwgYHNobWVtX3VudXNlZF9odWdlX2Ryb3BgLCBhbmQgYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0IGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgZWRnZSBjYXNlcy4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgIGlzIHN0YXRpYy4uLiB5ZXMsIGdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLiBOb3cgSSBrbm93IHRvIHdhdGNoIG91dCBmb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmlsZXMuCgpUaGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgaGVyZSBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYE1FTUNHYCwgYW5kIGBCVFJGU19GU2AuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGZyYW1ld29yayB0byBrbm93IHdoYXQgdG8gZXhwZWN0IGFuZCB3aGVyZSB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMuCgpJJiMzOTtsbCBnbGFuY2UgYXQgYGZzL2J0cmZzL3N1cGVyLmNgIG5leHQgdG8gdW5kZXJzdGFuZCBgYnRyZnNfbnJfY2FjaGVkX29iamVjdHNgIGluIG1vcmUgZGV0YWlsIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBodWdlcGFnZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidHJmc19ucl9jYWNoZWRfb2JqZWN0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2J0cmZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnRyZnMvc3VwZXIuYz0yNDE3PXN0YXRpYyBpbnQgYnRyZnNfc2hvd19kZXZuYW1lKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9idHJmcy9zdXBlci5jLTI0MzItXG5mcy9idHJmcy9zdXBlci5jOjI0MzM6c3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbmZzL2J0cmZzL3N1cGVyLmMtMjQzNC17XG4tLVxuZnMvYnRyZnMvc3VwZXIuYz0yNTMzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBidHJmc19zdXBlcl9vcHMgPSB7XG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0yNTQ1LVx0LnVuZnJlZXplX2ZzXHQ9IGJ0cmZzX3VuZnJlZXplLFxuZnMvYnRyZnMvc3VwZXIuYzoyNTQ2Olx0Lm5yX2NhY2hlZF9vYmplY3RzID0gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMsXG5mcy9idHJmcy9zdXBlci5jLTI1NDctXHQuZnJlZV9jYWNoZWRfb2JqZWN0cyA9IGJ0cmZzX2ZyZWVfY2FjaGVkX29iamVjdHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDI4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2hhbmdlcyBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gdGhlIGNoYW5nZXMgaW4gYGZzL2J0cmZzL3N1cGVyLmNgIGFyZSBwcmV0dHkgaW5jb25zZXF1ZW50aWFsIC0ganVzdCBhIHNpbXBsZSBlYXJseSByZXR1cm4uIFRoZSByZWFsIG1lYXQgb2YgdGhlIHVwZGF0ZSBzZWVtcyB0byBiZSBpbiBgbW0vc2htZW0uY2AsIHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIGBsaXN0X2xydWAgZm9yIHRoZSBgc2hyaW5rbGlzdGAuIFRoYXQgbWVhbnMgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGBzaG1lbV91bnVzZWRfaHVnZV8qYCBmdW5jdGlvbnMuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IHNjb3BlZCwgZ2l2ZW4gdGhlIGNoYW5nZS4gTGV0IG1lIGdvIHRocm91Z2ggdGhlbTogYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AgaXMgc3RhdGljPyBZZXAuIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYD8gU3RhdGljLCBjaGVjay4gYHNobWVtX3VudXNlZF9odWdlX2NvdW50YD8gU3RhdGljLCBhcyBleHBlY3RlZC4gYHNobWVtX3VudXNlZF9odWdlX2FkZGA/IFl1cCwgc3RhdGljLiAgYHNobWVtX3VudXNlZF9odWdlX2RlbGAsIHN0YXRpYy4gYHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVgLCBhbmQgYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgLCBhcyB3ZWxsIGFzIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYCBhcmUgc3RhdGljIGFzIHdlbGwuIE9rYXksIGFsbCBsb29rcyBnb29kIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHdoZXJlIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTkwOT1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc2htZW0uYy05MzUtXG5tbS9zaG1lbS5jOjkzNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbm1tL3NobWVtLmMtOTM3LVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXG4tLVxubW0vc2htZW0uYz0xMDM2PXN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX3NjYW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5tbS9zaG1lbS5jLTEwNDMtXG5tbS9zaG1lbS5jOjEwNDQ6XHRyZXR1cm4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgc2MsIDApO1xubW0vc2htZW0uYy0xMDQ1LX1cbi0tXG5tbS9zaG1lbS5jPTEwNjM9c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxubW0vc2htZW0uYy0xMDY2LVxubW0vc2htZW0uYzoxMDY3OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxubW0vc2htZW0uYy0xMDY4LVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXG4tLVxubW0vc2htZW0uYz0yMTMwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc2htZW0uYy0yMjAzLVx0XHQgKi9cbm1tL3NobWVtLmM6MjIwNDpcdFx0c2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgTlVMTCwgcGFnZXMpO1xubW0vc2htZW0uYy0yMjA1LVx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAzMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgU0hNRU0gSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgc2hhcmVkIG1lbW9yeSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IHVudXNlZCBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkIGluIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gU28sIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzIOKAkyBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGNhbGxlZCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZS4gSSBrbm93IHRoZSBzaGFyZWQgbWVtb3J5IHN1YnN5c3RlbSBpcyBob3VzZWQgdW5kZXIgYG1tL2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBtYWdpYyBoYXBwZW5zLiBBbmQsIGNvbnNpZGVyaW5nIHRoZSBuYW1lLCBJJiMzOTtkIGJldCB0aGUgc291cmNlIGZpbGUgSSYjMzk7bSBhZnRlciBpcyBgc2htZW0uY2AuIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBvcGVuIHRoYXQgZmlsZSBhbmQgbWFrZSBzdXJlIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBpcyBhY3R1YWxseSBkZWZpbmVkIHRoZXJlLiBUaGlzIGlzIGJhc2ljLCBidXQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGdldCBhIG1lbnRhbCByb2FkbWFwIG9mIHRoZSBjb2RlIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz04MTM9c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxubW0vc2htZW0uYy04MjktXG5tbS9zaG1lbS5jOjgzMDpzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiB7XG5tbS9zaG1lbS5jLTgzMS1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi0tXG5tbS9zaG1lbS5jPTgzNT1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbi0tXG5tbS9zaG1lbS5jLTgzOC17XG5tbS9zaG1lbS5jOjgzOTpcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnO1xubW0vc2htZW0uYy04NDAtXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcbi0tXG5tbS9zaG1lbS5jPTkzNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbi0tXG5tbS9zaG1lbS5jLTkzOC17XG5tbS9zaG1lbS5jOjkzOTpcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHNjYW47XG5tbS9zaG1lbS5jLTk0MC1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4tLVxubW0vc2htZW0uYy0xMDM1LVxubW0vc2htZW0uYzoxMDM2OnN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX3NjYW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbm1tL3NobWVtLmMtMTAzNy1cdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5tbS9zaG1lbS5jPTU0MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcbi0tXG5tbS9zaG1lbS5jLTU0MzItXHQubnJfY2FjaGVkX29iamVjdHNcdD0gc2htZW1fdW51c2VkX2h1Z2VfY291bnQsXG5tbS9zaG1lbS5jOjU0MzM6XHQuZnJlZV9jYWNoZWRfb2JqZWN0c1x0PSBzaG1lbV91bnVzZWRfaHVnZV9zY2FuLFxubW0vc2htZW0uYy01NDM0LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc4MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGb2N1czogVW51c2VkIEh1Z2UgUGFnZSBNYW5hZ2VtZW50IGluIFNoYXJlZCBNZW1vcnkqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB1bnVzZWQgaHVnZSBwYWdlcyB3aXRoaW4gdGhlIHNoYXJlZCBtZW1vcnkgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIG15IGF0dGVudGlvbiBuZWVkcyB0byBiZSBvbiB0aGVzZTogYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AsIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX3VudXNlZF9odWdlX2FkZGAsIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLCBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAsIGBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlYCwgYHNobWVtX3VudXNlZF9odWdlX2Ryb3BgLCBgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hgLCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydWAuIFRoZXNlIGFyZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZWlyIGludGVyYWN0aW9ucyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBteSBhbmFseXNpcy4KClRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGlzIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGAuIEkgbmVlZCB0byBjb25maXJtIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCwgSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYG1tL3NobWVtLmNgIHRvIHNlZSBpZiB0aGF0JiMzOTtzIHdoZXJlIGl0JiMzOTtzIGxvY2F0ZWQuIFRoZW4gSSYjMzk7bGwgZGl2ZSBpbnRvIGVhY2ggb2YgdGhvc2Ugb3RoZXIgZnVuY3Rpb25zLCBtYXBwaW5nIHRoZW0gb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz04MzU9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4tLVxubW0vc2htZW0uYy04NzMtXG5tbS9zaG1lbS5jOjg3NDpzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc2htZW0uYy04NzUtXHRcdFx0XHQgICAgICAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5tbS9zaG1lbS5jPTkzNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbi0tXG5tbS9zaG1lbS5jLTk4MS1cbm1tL3NobWVtLmM6OTgyOlx0XHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkge1xubW0vc2htZW0uYy05ODMtXHRcdFx0c2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pO1xuLS1cbm1tL3NobWVtLmMtMTAwNi1cbm1tL3NobWVtLmM6MTAwNzpcdFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHtcbm1tL3NobWVtLmMtMTAwOC1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKldoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW5kIGNhbiBJIGZpbmQgaXQgcXVpY2tseT8qKiBJIG5lZWQgdG8gbG9jYXRlIGBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSwgYW5kIGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSwgYG1tL3NobWVtLmNgIHNlZW1zIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2xsIHN0YXJ0IG15IHNlYXJjaC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gaXQmIzM5O3MgaW4gYSBmaWxlIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSwgYW5kIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCB0aGF0JiMzOTtzIGFsbW9zdCBhbHdheXMgd2hlcmUgaXQgbGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz03NDg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcbm1tL3NobWVtLmM6NzQ5OnNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc2htZW0uYy03NTAtXHRcdFx0ICAgIGdmcF90IGdmcClcbi0tXG5tbS9zaG1lbS5jPTc2OD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxubW0vc2htZW0uYzo3Njk6c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zaG1lbS5jLTc3MC1cdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3NobWVtLmM9Nzc2PXN0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3NobWVtLmMtNzgzLVxubW0vc2htZW0uYzo3ODQ6XHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApO1xubW0vc2htZW0uYy03ODUtXHRpZiAoSVNfRVJSKG1lbWNnKSlcbi0tXG5tbS9zaG1lbS5jPTkwOT1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc2htZW0uYy05MTUtXG5tbS9zaG1lbS5jOjkxNjpcdG1lbWNnID0gc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHNiaW5mbywgZm9saW8sIEdGUF9OT1dBSVQpO1xubW0vc2htZW0uYy05MTctXHRpZiAoSVNfRVJSKG1lbWNnKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEJ0cmZzIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3Mg4oCTIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AsIHdoaWNoIGlzIHN0YW5kYXJkIGVub3VnaCBmb3Igb3B0aW1pemF0aW9uIGVmZm9ydHMuIEJ1dCBob2xkIG9uLCBJIHNlZSBgQlRSRlNfRlNgIGNoYW5nZWQgYXMgd2VsbC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEJ0cmZzIGlzIGFuIGFyZWEgd2hlcmUgcGVyZm9ybWFuY2UgdHVuaW5nIGNhbiBiZSBxdWl0ZSBpbnZvbHZlZCwgYW5kIGFueSBjb25maWcgbW9kaWZpY2F0aW9uIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGltcHJvdmVtZW50IG9yIGEgc3BlY2lmaWMgdXNlIGNhc2UgY29uc2lkZXJhdGlvbi4KCk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIHNlZSAqd2h5KiB0aGUgQnRyZnMgZmlsZXN5c3RlbSBpcyB0b3VjaGVkLiBUbyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBJJiMzOTttIG5vdyBnb2luZyB0byBjb25maXJtIGlmIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AgaXMgcmVsYXRlZCB0byB0aGUgQnRyZnMgY2hhbmdlcy4gSXQmIzM5O3MgdGltZSB0byBjaGVjayBgZnMvYnRyZnMvc3VwZXIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCByZWxhdGVkIGxvZ2ljIGlmIHRoaXMgY29uZmlnIGNoYW5nZSBpcyByZWxldmFudCB0byBvYmplY3QgY2FjaGluZyB3aXRoaW4gdGhlIEJ0cmZzIGZpbGVzeXN0ZW1zLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoaXMgd291bGQgaGVscCBtZSBmb3JtIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidHJmc19ucl9jYWNoZWRfb2JqZWN0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2J0cmZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnRyZnMvc3VwZXIuYz0yNDE3PXN0YXRpYyBpbnQgYnRyZnNfc2hvd19kZXZuYW1lKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9idHJmcy9zdXBlci5jLTI0MzItXG5mcy9idHJmcy9zdXBlci5jOjI0MzM6c3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbmZzL2J0cmZzL3N1cGVyLmMtMjQzNC17XG4tLVxuZnMvYnRyZnMvc3VwZXIuYz0yNTMzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBidHJmc19zdXBlcl9vcHMgPSB7XG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0yNTQ1LVx0LnVuZnJlZXplX2ZzXHQ9IGJ0cmZzX3VuZnJlZXplLFxuZnMvYnRyZnMvc3VwZXIuYzoyNTQ2Olx0Lm5yX2NhY2hlZF9vYmplY3RzID0gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMsXG5mcy9idHJmcy9zdXBlci5jLTI1NDctXHQuZnJlZV9jYWNoZWRfb2JqZWN0cyA9IGJ0cmZzX2ZyZWVfY2FjaGVkX29iamVjdHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Njk5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhbmQgSW50ZWdyYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlcyBpbiBgZnMvYnRyZnMvc3VwZXIuY2AgYXJlIHByZXR0eSBtaW5vciwgYnV0IGxldCYjMzk7cyBmb2xkIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AgaW50byB0aGUgZm9jdXMgc3ltYm9scy4gV2FpdCwgaG9sZCBvbi4uLiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgc29tZXRoaW5nIGFib3V0IHRoaXMgYmVpbmcgYSBnbG9iYWwgY291bnRlciwgbm90IGhvbm9yaW5nIGBzYy0mZ3Q7bWVtY2dgLCBhbmQgYmVpbmcgZm9yIHRoZSBnbG9iYWwgc2hyaW5rIHBhdGguIFNvLCB0aGlzIGxvb2tzIGxpa2UgYSBzbWFsbCBvcHRpbWl6YXRpb24gb3IgZml4LiBUaGUgYnVsayBvZiB0aGUgbG9naWMgaXMgYWN0dWFsbHkgaW4gYG1tL3NobWVtLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBsaWVzLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBzaG1lbWAgZnVuY3Rpb25zLiBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdGljIHN0YXR1cyBvZiBlYWNoIG9mIHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2htZW0gc3Vic3lzdGVtOiBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYCwgYHNobWVtX3VudXNlZF9odWdlX2RlbGAsIGBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlYCwgYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgLCBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGAsIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGAsIGBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVgLCBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCwgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YC4gT2theSwgYWxsIHN0YXRpYy4gR29vZC4KCkkmIzM5O2xsIGFsc28gY2hlY2sgYHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2dgLCBgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRgIGFuZCBgc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkYC4gQWxsIGFyZSBzdGF0aWMuIFBlcmZlY3QuCgpOb3csIGxldCYjMzk7cyBpbmNsdWRlIGFsbCB0aG9zZSBmdW5jdGlvbnMgSSBqdXN0IGNvbmZpcm1lZCBhcmUgc3RhdGljIGludG8gYEZvY3VzU3ltYm9sc2AuIFRoYXQgbWFrZXMgaXQsIGZvciBzdXJlLCBlYXNpZXIgdG8gdHJhY2sgdGhpcyBsb2dpYy4gU28gd2UgaGF2ZToKCi0gYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AKLSBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAKLSBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgCi0gYHNobWVtX3VudXNlZF9odWdlX2FkZGAKLSBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYAotIGBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlYAotIGBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlYAotIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYAotIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGAKLSBgc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1YAotIGBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnYAotIGBpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZGAKLSBgc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkYAoKQW5kLCBzaW5jZSB3ZSYjMzk7cmUgaGVyZSwgd2UgY2FuIGdvIGFoZWFkIGFuZCBpbmNsdWRlIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AgdG9vLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gV2UgaGF2ZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgTUVNQ0dgLCBhbmQgYEJUUkZTX0ZTYCBhcyByZWxldmFudC4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgd2hldGhlciBgQ09ORklHX1NITUVNYCBpcyBuZWVkZWQuIEl0JiMzOTtzIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaC4gV2FpdCwgaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgKnJlcXVpcmVkKiwgYnV0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AgKmFyZSogcGFydCBvZiB0aGUgbmVjZXNzYXJ5IGNvbmZpZy4gSSBzaG91bGQgYWxzbyBzZWUgd2hldGhlciBgQ09ORklHX1RNUEZTYCBpcyBuZWVkZWQuIExldCYjMzk7cyB0cmFjZSBpdCB0aHJvdWdoIGBtbS9zaG1lbS5jYCwgd2hpY2ggaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1NITUVNYCBpcyBlbmFibGVkLCBhbmQgdGhlbiBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW0ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTUzLVx0XHRcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZTo1NDpcdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG5tbS9NYWtlZmlsZS01NS1cdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgc2htZW0ub2AgQnVpbGQgUHJvY2VzcyoqCgpSaWdodCwgYHNobWVtLm9gIGlzIGEgY29yZSBwYXJ0IG9mIHRoZSBzeXN0ZW0sIHNvIGl0cyBhbHdheXMgY29tcGlsZWQsIGFzIGV4cGVjdGVkLiBCdXQsIEkmIzM5O20ganVzdCBxdWlja2x5IGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZyBieSBjaGVja2luZyB3aGVyZSB0aGF0JiMzOTtzIGFjdHVhbGx5IGRyaXZlbi4gQWgsIGludGVyZXN0aW5nLCBJIHNlZSB0aGUgYENPTkZJR19TSE1FTWAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyB1c2VkICp3aXRoaW4qIGBtbS9zaG1lbS5jYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHRlbGxzIG1lIHRoYXQgY29tcGlsYXRpb24gb2YgdGhhdCBtb2R1bGUgaXMgY29uZGl0aW9uZWQgb24gdGhhdCBjb25maWcgb3B0aW9uLiBOb3csIHRoYXQmIzM5O3Mgd2hhdCBJIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NITUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xubW0vc2htZW0uYy00Ny1cbm1tL3NobWVtLmM6NDg6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy00OS0vKlxuLS1cbm1tL3NobWVtLmM9NTkwMj1fX3NldHVwKFwmIzM0O3RocF9zaG1lbT1cJiMzNDssIHNldHVwX3RocF9zaG1lbSk7XG4tLVxubW0vc2htZW0uYy01OTA1LVxubW0vc2htZW0uYzo1OTA2OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cbm1tL3NobWVtLmMtNTkwNy1cbi0tXG5tbS9zaG1lbS5jPTU5NzU9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTU5ODItXG5tbS9zaG1lbS5jOjU5ODM6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xubW0vc2htZW0uYy01OTg0LVxuLS1cbm1tL3NobWVtLmM9NjEzNz1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNjEzOS17XG5tbS9zaG1lbS5jOjYxNDA6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy02MTQxLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4ODYKCQkJCQkJCW91dHB1dDogMzI5CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9ucywgcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6CgoqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gYENPTkZJR19TSE1FTWAgaXMgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuIFRoYXQmIzM5O3MgYSBzb2xpZCBjaG9pY2UsIHNvIGl0JiMzOTtzIGdvb2QgdG8gaW5jbHVkZSBpdC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSBJIG5vdGUgdGhhdC4KClRoZW4sIHdlJiMzOTt2ZSBhbHNvIGdvdCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYENPTkZJR19NRU1DR2AuIFRob3NlIGFyZSBwcmV0dHkgc3RhbmRhcmQsIGFuZCBwcm9iYWJseSBiZWluZyBkcml2ZW4gYnkgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgcmVxdWlyZW1lbnRzIHJlc3BlY3RpdmVseS4gQWdhaW4sIG1ha2VzIHNlbnNlIGFuZCBnb29kIHRvIGtub3cgdGhleSBhcmUgYWN0aXZlLgoKRmluYWxseSwgYENPTkZJR19CVFJGU19GU2AgaXMgcHJlc2VudC4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSBpcyBhIHN0cmF0ZWdpYyBjaG9pY2UgZm9yIHRoYXQgZmlsZXN5c3RlbSwgcGVyaGFwcyByZWxhdGVkIHRvIHNuYXBzaG90cywgZGF0YSBpbnRlZ3JpdHksIG9yIGdlbmVyYWwgc3lzdGVtIG1hbmFnZW1lbnQgcmVxdWlyZW1lbnRzLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgaW4gdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGRyaXZlbiBieSB0aGF0IGluY2x1c2lvbi4KClJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGFsbCBvZiB0aGVzZSwgc28gSSB3aWxsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NocmluayYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9zY2FuJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2NvdW50JiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2FkZCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9kZWwmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZSYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2Ryb3AmIzM0OywKICAgICYjMzQ7aXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2gmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1JiMzNDssCiAgICAmIzM0O3NobWVtX2dldF9hbmRfY2xlYXJfbWVtY2cmIzM0OywKICAgICYjMzQ7aXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7c2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkJiMzNDssCiAgICAmIzM0O2J0cmZzX25yX2NhY2hlZF9vYmplY3RzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBzaG1lbSBoYW5kbGVzIHVudXNlZCBodWdlIHBhZ2VzIHdoZW4gc2hyaW5raW5nLCBpbnRyb2R1Y2luZyBsaXN0X2xydSBmb3Igc2hyaW5rbGlzdCBpbiBzaG1lbV9zYl9pbmZvLiBJdCBhbHNvIG1vZGlmaWVzIHN1cGVyX2NhY2hlX3NjYW4gYW5kIHN1cGVyX2NhY2hlX2NvdW50IGluIGZzL3N1cGVyLmMgdG8gcmVtb3ZlIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUgYW5kIGluc3RlYWQgdXNlcyBtZW1fY2dyb3VwX3Nocmlua19pc19yb290IGluIGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NjYW4mIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfY291bnQmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfYWRkJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2RlbCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3JlcXVldWUmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfZHJvcCYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUmIzM0OywKICAgICYjMzQ7c2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZCYjMzQ7LAogICAgJiMzNDtzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7YnRyZnNfbnJfY2FjaGVkX29iamVjdHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNobWVtIGhhbmRsZXMgdW51c2VkIGh1Z2UgcGFnZXMgd2hlbiBzaHJpbmtpbmcsIGludHJvZHVjaW5nIGxpc3RfbHJ1IGZvciBzaHJpbmtsaXN0IGluIHNobWVtX3NiX2luZm8uIEl0IGFsc28gbW9kaWZpZXMgc3VwZXJfY2FjaGVfc2NhbiBhbmQgc3VwZXJfY2FjaGVfY291bnQgaW4gZnMvc3VwZXIuYyB0byByZW1vdmUgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZSBhbmQgaW5zdGVhZCB1c2VzIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgaW4gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI0OjQwLjcyMTczMTI4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjA1MzIxNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9zY2FuXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9jb3VudFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfYWRkXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9kZWxcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX3JlcXVldWVcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2Ryb3BcIixcbiAgICBcImlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVcIixcbiAgICBcInNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2dcIixcbiAgICBcImlzX3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkXCIsXG4gICAgXCJzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRcIixcbiAgICBcImJ0cmZzX25yX2NhY2hlZF9vYmplY3RzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNobWVtIGhhbmRsZXMgdW51c2VkIGh1Z2UgcGFnZXMgd2hlbiBzaHJpbmtpbmcsIGludHJvZHVjaW5nIGxpc3RfbHJ1IGZvciBzaHJpbmtsaXN0IGluIHNobWVtX3NiX2luZm8uIEl0IGFsc28gbW9kaWZpZXMgc3VwZXJfY2FjaGVfc2NhbiBhbmQgc3VwZXJfY2FjaGVfY291bnQgaW4gZnMvc3VwZXIuYyB0byByZW1vdmUgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZSBhbmQgaW5zdGVhZCB1c2VzIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgaW4gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjQ6NDAuNzIxNzM3MzkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0MzQ0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MmJhMzJkYWIzMWUxZjEzNThjNzBhZGRlNDllYjhmNDE5ZWUyNmEyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDAwOjI0OjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jXFxuaW5kZXggYTdkODA0MjE5YmVjMzQuLmNjNDUzNzQzNTM5OTc2IDEwMDY0NFxcbi0tLSBhL2ZzL2J0cmZzL3N1cGVyLmNcXG4rKysgYi9mcy9idHJmcy9zdXBlci5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25hbWVpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9taXNjZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWdpYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmF0ZWxpbWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmMzMmMuaFxcdTAwM2VcXG5AQCAtMjQzNCw2ICsyNDM1LDE1IEBAIHN0YXRpYyBsb25nIGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBzaHJpbmtfY29udHJvXFxuIFxcdHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gYnRyZnNfc2Ioc2IpO1xcbiBcXHRjb25zdCBzNjQgbnIgPSBwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0aXZlKFxcdTAwMjZmc19pbmZvLVxcdTAwM2VldmljdGFibGVfZXh0ZW50X21hcHMpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIGV2aWN0YWJsZSBleHRlbnQgbWFwIGNvdW50ZXIgaXMgZmlsZXN5c3RlbS1nbG9iYWwgYW5kIGRvZXMgbm90XFxuK1xcdCAqIGhvbm91ciBzYy1cXHUwMDNlbWVtY2csIHNvIGl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiB0aGUgZ2xvYmFsIChrc3dhcGQgb3JcXG4rXFx0ICogcm9vdCBkaXJlY3QgcmVjbGFpbSkgc2hyaW5rIHBhdGguIFNraXAgdGhlIHBlci1tZW1jZyBpdGVyYXRpb25zIG9mXFxuK1xcdCAqIHNocmlua19zbGFiX21lbWNnKCkgdG8gYXZvaWQgcXVldWVpbmcgZHVwbGljYXRlIGdsb2JhbCB3b3JrLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHNjKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHR0cmFjZV9idHJmc19leHRlbnRfbWFwX3Nocmlua2VyX2NvdW50KGZzX2luZm8sIG5yKTtcXG4gXFxuIFxcdHJldHVybiBucjtcXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcXG5pbmRleCA5ZjgyZTZiMzhmMDdlZS4uOTNmMjRhZWE3NWM0ZDYgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtMjQsNyArMjQsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtkZXYuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbkBAIC0xNzEsMTkgKzE3MCw2IEBAIHN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXFxuIFxcdHdha2VfdXBfdmFyKFxcdTAwMjZzYi1cXHUwMDNlc19mbGFncyk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFRoZSBzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBob29rcyAodXNlZCBmb3IgZXhhbXBsZSBieSBidHJmcyBhbmQgeGZzKVxcbi0gKiBvcGVyYXRlIG9uIGZpbGVzeXN0ZW0tZ2xvYmFsIHN0YXRlIGFuZCBpZ25vcmUgc2MtXFx1MDAzZW1lbWNnLiBEcml2aW5nIHRoZW1cXG4tICogZnJvbSBwZXItbWVtY2cgc2hyaW5rX3NsYWJfbWVtY2coKSBpbnZvY2F0aW9ucyBvbmx5IGJ1cm5zIENQVSB3YWxraW5nXFxuLSAqIHBlci1jcHUgY291bnRlcnMgYW5kIHF1ZXVlaW5nIGR1cGxpY2F0ZSB3b3JrOiB0aGUgYWN0dWFsIHJlY2xhaW0gaGFwcGVucyBvblxcbi0gKiB0aGUgZ2xvYmFsIHBhdGggKGtzd2FwZCBvciByb290IGRpcmVjdCByZWNsYWltKSByZWdhcmRsZXNzLiBSZXN0cmljdCB0aGVtXFxuLSAqIHRvIHRoYXQgcGF0aC5cXG4tICovXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLXtcXG4tXFx0cmV0dXJuICFzYy1cXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVxcdTAwM2VtZW1jZyk7XFxuLX1cXG4tXFxuIC8qXFxuICAqIE9uZSB0aGluZyB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgb2Ygd2l0aCBhIHBlci1zYiBzaHJpbmtlciBpcyB0aGF0IHdlIGRvbid0XFxuICAqIGRyb3AgdGhlIGxhc3QgYWN0aXZlIHJlZmVyZW5jZSB0byB0aGUgc3VwZXJibG9jayBmcm9tIHdpdGhpbiB0aGUgc2hyaW5rZXIuXFxuQEAgLTIxMyw3ICsxOTksNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbiBcXHRpZiAoIXN1cGVyX3RyeWxvY2tfc2hhcmVkKHNiKSlcXG4gXFx0XFx0cmV0dXJuIFNIUklOS19TVE9QO1xcbiBcXG4tXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcXHUwMDI2XFx1MDAyNiBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcXG4rXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cylcXG4gXFx0XFx0ZnNfb2JqZWN0cyA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpO1xcbiBcXG4gXFx0aW5vZGVzID0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9scnUsIHNjKTtcXG5AQCAtMjc0LDggKzI2MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0c21wX3JtYigpO1xcbiBcXG4tXFx0aWYgKHNiLVxcdTAwM2VzX29wIFxcdTAwMjZcXHUwMDI2IHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpXFxuK1xcdGlmIChzYi1cXHUwMDNlc19vcCBcXHUwMDI2XFx1MDAyNiBzYi1cXHUwMDNlc19vcC1cXHUwMDNlbnJfY2FjaGVkX29iamVjdHMpXFxuIFxcdFxcdHRvdGFsX29iamVjdHMgPSBzYi1cXHUwMDNlc19vcC1cXHUwMDNlbnJfY2FjaGVkX29iamVjdHMoc2IsIHNjKTtcXG4gXFxuIFxcdHRvdGFsX29iamVjdHMgKz0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZzYi1cXHUwMDNlc19kZW50cnlfbHJ1LCBzYyk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCA5NTcyNjA2Nzc2NzgxNS4uODE3MGJiODA2NmEyMmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC01MjAsNiArNTIwLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXHRyZXR1cm4gKG1lbWNnID09IHJvb3RfbWVtX2Nncm91cCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBtZW1fY2dyb3VwX3Nocmlua19pc19yb290IC0gaXMgdGhpcyBhIGdsb2JhbCBvciByb290LW1lbWNnIHNocmluayBpbnZvY2F0aW9uP1xcbisgKiBAc2M6IHNocmlua19jb250cm9sIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc2hyaW5rZXIgY2FsbFxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgd2hlbiBAc2MgcmVwcmVzZW50cyBhIGdsb2JhbCByZWNsYWltIHNocmluayAoc2MtXFx1MDAzZW1lbWNnID09IE5VTEwpXFxuKyAqIG9yIGEgcm9vdC1tZW1jZyBzaHJpbmssIGkuZS4gbm90IGEgcGVyLW1lbWNnIGl0ZXJhdGlvbiBvZlxcbisgKiBzaHJpbmtfc2xhYl9tZW1jZygpLiBGaWxlc3lzdGVtcyB3aG9zZSAtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKCkvXFxuKyAqIC1cXHUwMDNlZnJlZV9jYWNoZWRfb2JqZWN0cygpIGltcGxlbWVudGF0aW9ucyBvcGVyYXRlIG9uIGZpbGVzeXN0ZW0tZ2xvYmFsIHN0YXRlXFxuKyAqIGFuZCBkbyBub3QgaG9ub3VyIHNjLVxcdTAwM2VtZW1jZyBjYW4gdXNlIHRoaXMgdG8gZWFybHktcmV0dXJuIDAgaW4gcGVyLW1lbWNnXFxuKyAqIGNvbnRleHRzLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4re1xcbitcXHRyZXR1cm4gIXNjLVxcdTAwM2VtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtXFx1MDAzZW1lbWNnKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuIHtcXG4gXFx0cmV0dXJuIG9iamNnLVxcdTAwM2Vpc19yb290O1xcbkBAIC0xMDcxLDYgKzEwODcsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4ge1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXFxuaW5kZXggNTY2M2RmZjUzMTg2ZTIuLmFlYjU5OTAxYTg0MGM3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxcbkBAIC0xMSw2ICsxMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19wYXJzZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcXHUwMDNlXFxuIFxcbiAvKiBpbm9kZSBpbi1rZXJuZWwgZGF0YSAqL1xcbiBcXG5AQCAtNTQsNiArNTUsMTEgQEAgc3RydWN0IHNobWVtX2lub2RlX2luZm8ge1xcbiBcXHRzdHJ1Y3QgZHF1b3QgX19yY3VcXHQqaV9kcXVvdFtNQVhRVU9UQVNdO1xcbiAjZW5kaWZcXG4gXFx0c3RydWN0IGlub2RlXFx0XFx0dmZzX2lub2RlO1xcbitcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cFxcdCpzaHJpbmtsaXN0X21lbWNnO1xcbitcXHRpbnRcXHRcXHRcXHRzaHJpbmtsaXN0X25pZDtcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiAjZGVmaW5lIFNITUVNX0ZMX1VTRVJfVklTSUJMRVxcdFxcdChGU19GTF9VU0VSX1ZJU0lCTEUgfCBGU19DQVNFRk9MRF9GTClcXG5AQCAtODMsOSArODksOSBAQCBzdHJ1Y3Qgc2htZW1fc2JfaW5mbyB7XFxuIFxcdGlub190IG5leHRfaW5vO1xcdFxcdCAgICAvKiBUaGUgbmV4dCBwZXItc2IgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xcbiBcXHRpbm9fdCBfX3BlcmNwdSAqaW5vX2JhdGNoOyAgLyogVGhlIG5leHQgcGVyLWNwdSBpbm9kZSBudW1iZXIgdG8gdXNlICovXFxuIFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovXFxuLVxcdHNwaW5sb2NrX3Qgc2hyaW5rbGlzdF9sb2NrOyAgIC8qIFByb3RlY3RzIHNocmlua2xpc3QgKi9cXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBzaHJpbmtsaXN0OyAgLyogTGlzdCBvZiBzaGlua2FibGUgaW5vZGVzICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgc2hyaW5rbGlzdF9sZW47IC8qIExlbmd0aCBvZiBzaHJpbmtsaXN0ICovXFxuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rXFx0c3RydWN0IGxpc3RfbHJ1IHNocmlua2xpc3Q7IC8qIExpc3Qgb2Ygc2hyaW5rYWJsZSBpbm9kZXMgKi9cXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBzaG1lbV9xdW90YV9saW1pdHMgcWxpbWl0czsgLyogRGVmYXVsdCBxdW90YSBsaW1pdHMgKi9cXG4gXFx0c3RydWN0IHNpbXBsZV94YXR0cl9jYWNoZSB4YV9jYWNoZTtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCBmMTg5ZDFhYzQwZGIyZC4uOGJmNmRkODUwZjg1YjQgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtNzI0LDUxICs3MjQsMjQyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9mb3JtYXRfaHVnZShpbnQgaHVnZSlcXG4gfVxcbiAjZW5kaWZcXG4gXFxuK3N0YXRpYyBib29sIGlzX3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKVxcbit7XFxuK1xcbitcXHRyZXR1cm4gaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9uaWQgPT0gLTE7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcXG4re1xcbitcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X25pZCA9IC0xO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZztcXG4rXFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIG1lbWNnO1xcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHX01FTUNHXFxuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqXFxuK3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbit7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxuK1xcdGlmICghbWVtY2cpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0ID0gbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIGdmcCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbWVtY2c7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4rc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rI2VuZGlmXFxuK1xcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcXG4rXFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEwsICpvbGRfbWVtY2cgPSBOVUxMO1xcbitcXG4rXFx0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgZ2ZwKTtcXG4rXFx0aWYgKElTX0VSUihtZW1jZykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpIHtcXG4rXFx0XFx0LyogaXNvbGF0ZWQgb24gc2NhbiBsaXN0LCBsZXQgc2hyaW5rIGhhbmRsZSBpdCAqL1xcbitcXHRcXHRpZiAoaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbykpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID09IG5pZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9PSBtZW1jZylcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRcXHRsaXN0X2xydV9kZWwoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsXFxuK1xcdFxcdFxcdCAgICAgaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9uaWQsIGluZm8tXFx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xcbitcXHRcXHRvbGRfbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xcbitcXHR9XFxuK1xcbitcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xcbitcXHRsaXN0X2xydV9hZGQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xcbitcXHRtZW1jZyA9IE5VTEw7XFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWxvY2spO1xcbitcXHRtZW1fY2dyb3VwX3B1dChvbGRfbWVtY2cpO1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpKSB7XFxuK1xcdFxcdGxpc3RfbHJ1X2RlbChcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCxcXG4rXFx0XFx0XFx0ICAgICBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X25pZCwgaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyk7XFxuK1xcdFxcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK31cXG4rXFxuK3N0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjO1xcbit9O1xcbitcXG4rc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB2b2lkICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gKnNjYW4gPSBhcmc7XFxuK1xcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbitcXG4rXFx0aW5mbyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRyeWxvY2sgdG8gYXZvaWQgQUJCQSBkZWFkbG9jazogYWRkL2RlbCBwYXRoIHRha2VzIGluZm8tXFx1MDAzZWxvY2tcXG4rXFx0ICogYmVmb3JlIHRoZSBsaXN0X2xydSBidWNrZXQgbG9jaywgd2hpbGUgaGVyZSB0aGUgb3JkZXIgaXMgcmV2ZXJzZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNwaW5fdHJ5bG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jaykpXFxuK1xcdFxcdHJldHVybiBMUlVfU0tJUDtcXG4rXFxuK1xcdC8qIHBpbiB0aGUgaW5vZGUgKi9cXG4rXFx0aW5vZGUgPSBpZ3JhYihcXHUwMDI2aW5mby1cXHUwMDNldmZzX2lub2RlKTtcXG4rXFx0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xcbitcXHRpZiAoIWlub2RlKSB7XFxuK1xcdFxcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcXG4rXFx0XFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rXFx0XFx0cmV0dXJuIExSVV9SRU1PVkVEO1xcbitcXHR9XFxuK1xcbitcXHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XFxuK1xcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcXG4rXFx0c2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKGluZm8pO1xcbitcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2c2Nhbi1cXHUwMDNlbGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitcXG4rXFx0cmV0dXJuIExSVV9SRU1PVkVEO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbitcXHRib29sIG1hdGNoO1xcbitcXG4rXFx0LypcXG4rXFx0ICogT25seSBub24tcm9vdCBtZW1jZyByZWNsYWltIG5lZWRzIHRvIG1hdGNoIHRoZSBmb2xpbyBjaGFyZ2UgYWdhaW5zdFxcbitcXHQgKiBzYy1cXHUwMDNlbWVtY2cuIFNraXAgdGhlIGZvbGlvIG1lbWNnIGNoZWNrIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOlxcbitcXHQgKiAxLiBzaG1lbSBxdW90YSByZWNsYWltIChzYyA9PSBOVUxMKVxcbitcXHQgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbVxcbitcXHQgKiAzLiByb290IG1lbWNnIHJlY2xhaW1cXG4rXFx0ICovXFxuK1xcdGlmICghc2MgfHwgIXNjLVxcdTAwM2VtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtXFx1MDAzZW1lbWNnKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAoZm9saW9fbmlkKGZvbGlvKSAhPSBzYy1cXHUwMDNlbmlkKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbitcXHRtYXRjaCA9IG1lbWNnID09IHNjLVxcdTAwM2VtZW1jZztcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitcXG4rXFx0cmV0dXJuIG1hdGNoO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbitcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuK1xcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xcbitcXG4rXFx0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgR0ZQX05PV0FJVCk7XFxuK1xcdGlmIChJU19FUlIobWVtY2cpKVxcbitcXHRcXHRnb3RvIGRyb3A7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZWxvY2spO1xcbitcXHQvKiBSZXF1ZXVlIHRoZSBpbm9kZSB0byBzaHJpbmtsaXN0ICovXFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbitcXHRsaXN0X2xydV9hZGQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xcbitcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xcbitcXHRtZW1jZyA9IE5VTEw7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitcXG4rXFx0cmV0dXJuO1xcbitcXG4rZHJvcDpcXG4rXFx0c2htZW1fdW51c2VkX2h1Z2VfZHJvcChpbm9kZSk7XFxuK31cXG4rXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbiBcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXFxuIHtcXG4tXFx0TElTVF9IRUFEKGxpc3QpLCAqcG9zLCAqbmV4dDtcXG4rXFx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2NhbjtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4gXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLVxcdHVuc2lnbmVkIGxvbmcgYmF0Y2ggPSBzYyA/IHNjLVxcdTAwM2Vucl90b19zY2FuIDogMTI4O1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0O1xcbiBcXHR1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwO1xcbiBcXG4tXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpXFxuLVxcdFxcdHJldHVybiBTSFJJTktfU1RPUDtcXG4tXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xcbi1cXHRsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KSB7XFxuLVxcdFxcdGluZm8gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpO1xcbi1cXG4tXFx0XFx0LyogcGluIHRoZSBpbm9kZSAqL1xcbi1cXHRcXHRpbm9kZSA9IGlncmFiKFxcdTAwMjZpbmZvLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbi1cXG4tXFx0XFx0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xcbi1cXHRcXHRpZiAoIWlub2RlKSB7XFxuLVxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbi1cXHRcXHRcXHRnb3RvIG5leHQ7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGxpc3RfbW92ZShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNmxpc3QpO1xcbi1uZXh0Olxcbi1cXHRcXHRzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbGVuLS07XFxuLVxcdFxcdGlmICghLS1iYXRjaClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjYW4ubGlzdCk7XFxuK1xcdHNjYW4uc2MgPSBzYztcXG4rXFx0aWYgKHNjKVxcbitcXHRcXHRsaXN0X2xydV9zaHJpbmtfd2FsayhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlLCBcXHUwMDI2c2Nhbik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bGlzdF9scnVfd2FsayhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlLFxcbitcXHRcXHRcXHQgICAgICBcXHUwMDI2c2NhbiwgMTI4KTtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFxcdTAwMjZsaXN0KSB7XFxuLVxcdFxcdHBnb2ZmX3QgbmV4dCwgZW5kO1xcbitcXHRsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBcXHUwMDI2c2Nhbi5saXN0KSB7XFxuK1xcdFxcdHBnb2ZmX3QgZm9saW9fZW5kLCBlbmQ7XFxuIFxcdFxcdGxvZmZfdCBpX3NpemU7XFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcXG4gXFx0XFx0aW5vZGUgPSBcXHUwMDI2aW5mby1cXHUwMDNldmZzX2lub2RlO1xcbiBcXG4tXFx0XFx0aWYgKG5yX3RvX2ZyZWUgXFx1MDAyNlxcdTAwMjYgZnJlZWQgXFx1MDAzZT0gbnJfdG9fZnJlZSlcXG4tXFx0XFx0XFx0Z290byBtb3ZlX2JhY2s7XFxuLVxcbiBcXHRcXHRpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuIFxcdFxcdGZvbGlvID0gZmlsZW1hcF9nZXRfZW50cnkoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgaV9zaXplIC8gUEFHRV9TSVpFKTtcXG4gXFx0XFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpXFxuQEAgLTc4MSwxMyArOTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBDaGVjayBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBnYWluIGZyb20gc3BsaXR0aW5nICovXFxuLVxcdFxcdG5leHQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fZW5kID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XFxuIFxcdFxcdGVuZCA9IHNobWVtX2ZhbGxvY2VuZChpbm9kZSwgRElWX1JPVU5EX1VQKGlfc2l6ZSwgUEFHRV9TSVpFKSk7XFxuLVxcdFxcdGlmIChlbmQgXFx1MDAzYz0gZm9saW8tXFx1MDAzZWluZGV4IHx8IGVuZCBcXHUwMDNlPSBuZXh0KSB7XFxuK1xcdFxcdGlmIChlbmQgXFx1MDAzYz0gZm9saW8tXFx1MDAzZWluZGV4IHx8IGVuZCBcXHUwMDNlPSBmb2xpb19lbmQpIHtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0XFx0Z290byBkcm9wO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkge1xcbitcXHRcXHRcXHRzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7XFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdFxcdGdvdG8gcHV0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobnJfdG9fZnJlZSBcXHUwMDI2XFx1MDAyNiBmcmVlZCBcXHUwMDNlPSBucl90b19mcmVlKSB7XFxuK1xcdFxcdFxcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIE1vdmUgdGhlIGlub2RlIG9uIHRoZSBsaXN0IGJhY2sgdG8gc2hyaW5rbGlzdCBpZiB3ZSBmYWlsZWRcXG4gXFx0XFx0ICogdG8gbG9jayB0aGUgcGFnZSBhdCB0aGlzIHRpbWUuXFxuQEAgLTc5NiwzNCArOTk5LDMzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbiBcXHRcXHQgKiByZWNsYWltIHBhdGguXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuK1xcdFxcdFxcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goZm9saW8sIHNjYW4uc2MpKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdFxcdFxcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0XFx0Z290byBtb3ZlX2JhY2s7XFxuK1xcdFxcdFxcdGdvdG8gcHV0O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcbiBcXHRcXHQvKiBJZiBzcGxpdCBmYWlsZWQgbW92ZSB0aGUgaW5vZGUgb24gdGhlIGxpc3QgYmFjayB0byBzaHJpbmtsaXN0ICovXFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdGdvdG8gbW92ZV9iYWNrO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdFxcdGZyZWVkICs9IG5leHQgLSBlbmQ7XFxuK1xcdFxcdGZyZWVkICs9IGZvbGlvX2VuZCAtIGVuZDtcXG4gXFx0XFx0c3BsaXQrKztcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gZHJvcDpcXG4tXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuLVxcdFxcdGdvdG8gcHV0O1xcbi1tb3ZlX2JhY2s6XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgZWl0aGVyIG9uIHRoZSBnbG9iYWwgbGlzdCBvciBkZWxldGVkXFxuLVxcdFxcdCAqIGZyb20gYW55IGxvY2FsIGxpc3QgYmVmb3JlIGlwdXQoKSBzaW5jZSBpdCBjb3VsZCBiZSBkZWxldGVkXFxuLVxcdFxcdCAqIGluIGFub3RoZXIgdGhyZWFkIG9uY2Ugd2UgcHV0IHRoZSBpbm9kZSAodGhlbiB0aGUgbG9jYWwgbGlzdFxcbi1cXHRcXHQgKiBpcyBjb3JydXB0ZWQpLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdFxcdGxpc3RfbW92ZShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuLVxcdFxcdHNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sZW4rKztcXG4tXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4rXFx0XFx0c2htZW1fdW51c2VkX2h1Z2VfZHJvcChpbm9kZSk7XFxuIHB1dDpcXG4gXFx0XFx0aXB1dChpbm9kZSk7XFxuIFxcdH1cXG5AQCAtODM2LDcgKzEwMzgsNyBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zY2FuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIHtcXG4gXFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKHNiKTtcXG4gXFxuLVxcdGlmICghUkVBRF9PTkNFKHNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sZW4pKVxcbitcXHRpZiAoIWxpc3RfbHJ1X3Nocmlua19jb3VudChcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzYykpXFxuIFxcdFxcdHJldHVybiBTSFJJTktfU1RPUDtcXG4gXFxuIFxcdHJldHVybiBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc2JpbmZvLCBzYywgMCk7XFxuQEAgLTg0NiwxMiArMTA0OCwyMiBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbiB7XFxuIFxcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7XFxuLVxcdHJldHVybiBSRUFEX09OQ0Uoc2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xlbik7XFxuK1xcbitcXHRyZXR1cm4gbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNjKTtcXG4gfVxcbiAjZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuIFxcbiAjZGVmaW5lIHNobWVtX2h1Z2UgU0hNRU1fSFVHRV9ERU5ZXFxuIFxcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnApXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXFxuIFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcXG4ge1xcbkBAIC0xNDA3LDE0ICsxNjE5LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IDA7XFxuIFxcdFxcdG1hcHBpbmdfc2V0X2V4aXRpbmcoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuIFxcdFxcdHNobWVtX3RydW5jYXRlX3JhbmdlKGlub2RlLCAwLCAobG9mZl90KS0xKTtcXG4tXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KSkge1xcbi1cXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4tXFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KSkge1xcbi1cXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KTtcXG4tXFx0XFx0XFx0XFx0c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xlbi0tO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdFxcdH1cXG4rXFx0XFx0c2htZW1fdW51c2VkX2h1Z2VfZGVsKGlub2RlKTtcXG4gXFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZpbmZvLVxcdTAwM2Vzd2FwbGlzdCkpIHtcXG4gXFx0XFx0XFx0LyogV2FpdCB3aGlsZSBzaG1lbV91bnVzZSgpIGlzIHNjYW5uaW5nIHRoaXMgaW5vZGUuLi4gKi9cXG4gXFx0XFx0XFx0d2FpdF92YXJfZXZlbnQoXFx1MDAyNmluZm8tXFx1MDAzZXN0b3BfZXZpY3Rpb24sXFxuQEAgLTI1MjIsMjggKzI3MjcsNiBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFxuIGFsbG9jZWQ6XFxuIFxcdGFsbG9jZWQgPSB0cnVlO1xcbi1cXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXFx1MDAzY1xcbi1cXHRcXHRcXHRcXHRcXHRmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XFxuLVxcdFxcdCAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogX2NhcmVmdWwgdG8gZGVmZW5kIGFnYWluc3QgdW5sb2NrZWQgYWNjZXNzIHRvXFxuLVxcdFxcdCAqIC1cXHUwMDNlc2hyaW5rX2xpc3QgaW4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKClcXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChsaXN0X2VtcHR5X2NhcmVmdWwoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpKSB7XFxuLVxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsXFxuLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbi1cXHRcXHRcXHRzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbGVuKys7XFxuLVxcdFxcdH1cXG4tXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKHNncCA9PSBTR1BfV1JJVEUpXFxuIFxcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKGZvbGlvKTtcXG4gXFx0LypcXG5AQCAtMjU3Miw2ICsyNzU1LDE1IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHRcXHRlcnJvciA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHR9XFxuK1xcbitcXHRpZiAoYWxsb2NlZCBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKSBcXHUwMDNjIGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFBhcnQgb2YgdGhlIGxhcmdlIGZvbGlvIGlzIGJleW9uZCBpX3NpemU6IHN1YmplY3RcXG4rXFx0XFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNobWVtX3VudXNlZF9odWdlX2FkZChpbm9kZSwgZm9saW8sIGdmcCk7XFxuK1xcdH1cXG4gb3V0OlxcbiBcXHQqZm9saW9wID0gZm9saW87XFxuIFxcdHJldHVybiAwO1xcbkBAIC0zMDQ4LDYgKzMyNDAsMTAgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqX19zaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdGlmIChpbmZvLVxcdTAwM2Vmc2ZsYWdzKVxcbiBcXHRcXHRzaG1lbV9zZXRfaW5vZGVfZmxhZ3MoaW5vZGUsIGluZm8tXFx1MDAzZWZzZmxhZ3MsIE5VTEwpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rXFx0aW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IE5VTEw7XFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID0gLTE7XFxuKyNlbmRpZlxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aW5mby1cXHUwMDNlc3dhcGxpc3QpO1xcbiBcXHRjYWNoZV9ub19hY2woaW5vZGUpO1xcbiBcXHRpZiAoc2JpbmZvLVxcdTAwM2Vub3N3YXApXFxuQEAgLTQ5MTQsNiArNTExMCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiAjZW5kaWZcXG4gXFx0ZnJlZV9wZXJjcHUoc2JpbmZvLVxcdTAwM2Vpbm9fYmF0Y2gpO1xcbiBcXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFxcdTAwMjZzYmluZm8tXFx1MDAzZXVzZWRfYmxvY2tzKTtcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbisjZW5kaWZcXG4gXFx0bXBvbF9wdXQoc2JpbmZvLVxcdTAwM2VtcG9sKTtcXG4gI2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxcbiBcXHRzaW1wbGVfeGF0dHJfY2FjaGVfY2xlYW51cChcXHUwMDI2c2JpbmZvLVxcdTAwM2V4YV9jYWNoZSk7XFxuQEAgLTUwMDcsOCArNTIwNiwxMSBAQCBzdGF0aWMgaW50IHNobWVtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc3RhdF9sb2NrKTtcXG4gXFx0aWYgKHBlcmNwdV9jb3VudGVyX2luaXQoXFx1MDAyNnNiaW5mby1cXHUwMDNldXNlZF9ibG9ja3MsIDAsIEdGUF9LRVJORUwpKVxcbiBcXHRcXHRnb3RvIGZhaWxlZDtcXG4tXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuK1xcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdGlmIChsaXN0X2xydV9pbml0X21lbWNnKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNiLVxcdTAwM2VzX3NocmluaykpXFxuK1xcdFxcdGdvdG8gZmFpbGVkO1xcbisjZW5kaWZcXG4gXFxuIFxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcXG4gXFx0c2ItXFx1MDAzZXNfYmxvY2tzaXplID0gUEFHRV9TSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNDo0MS4xNjI4Njg2ODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MTc2NDE3NTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJUUkZTX0ZTXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNobWVtX3VudXNlZF9odWdlX3Nocmlua1wiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2Vfc2NhblwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfY291bnRcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2FkZFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfZGVsXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9kcm9wXCIsXG4gICAgXCJpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1XCIsXG4gICAgXCJzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnXCIsXG4gICAgXCJpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZFwiLFxuICAgIFwic2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkXCIsXG4gICAgXCJidHJmc19ucl9jYWNoZWRfb2JqZWN0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBzaG1lbSBoYW5kbGVzIHVudXNlZCBodWdlIHBhZ2VzIHdoZW4gc2hyaW5raW5nLCBpbnRyb2R1Y2luZyBsaXN0X2xydSBmb3Igc2hyaW5rbGlzdCBpbiBzaG1lbV9zYl9pbmZvLiBJdCBhbHNvIG1vZGlmaWVzIHN1cGVyX2NhY2hlX3NjYW4gYW5kIHN1cGVyX2NhY2hlX2NvdW50IGluIGZzL3N1cGVyLmMgdG8gcmVtb3ZlIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUgYW5kIGluc3RlYWQgdXNlcyBtZW1fY2dyb3VwX3Nocmlua19pc19yb290IGluIGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDJiYTMyZGFiMzFlMWYxMzU4YzcwYWRkZTQ5ZWI4ZjQxOWVlMjZhMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDAwOjI0OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmNcbmluZGV4IGE3ZDgwNDIxOWJlYzM0Li5jYzQ1Mzc0MzUzOTk3NiAxMDA2NDRcbi0tLSBhL2ZzL2J0cmZzL3N1cGVyLmNcbisrKyBiL2ZzL2J0cmZzL3N1cGVyLmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pc2NkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21hZ2ljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYXRlbGltaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyYy5oXHUwMDNlXG5AQCAtMjQzNCw2ICsyNDM1LDE1IEBAIHN0YXRpYyBsb25nIGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBzaHJpbmtfY29udHJvXG4gXHRzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IGJ0cmZzX3NiKHNiKTtcbiBcdGNvbnN0IHM2NCBuciA9IHBlcmNwdV9jb3VudGVyX3JlYWRfcG9zaXRpdmUoXHUwMDI2ZnNfaW5mby1cdTAwM2VldmljdGFibGVfZXh0ZW50X21hcHMpO1xuIFxuK1x0LypcbitcdCAqIFRoZSBldmljdGFibGUgZXh0ZW50IG1hcCBjb3VudGVyIGlzIGZpbGVzeXN0ZW0tZ2xvYmFsIGFuZCBkb2VzIG5vdFxuK1x0ICogaG9ub3VyIHNjLVx1MDAzZW1lbWNnLCBzbyBpdCBpcyBvbmx5IG1lYW5pbmdmdWwgb24gdGhlIGdsb2JhbCAoa3N3YXBkIG9yXG4rXHQgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2ZcbitcdCAqIHNocmlua19zbGFiX21lbWNnKCkgdG8gYXZvaWQgcXVldWVpbmcgZHVwbGljYXRlIGdsb2JhbCB3b3JrLlxuK1x0ICovXG4rXHRpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdHRyYWNlX2J0cmZzX2V4dGVudF9tYXBfc2hyaW5rZXJfY291bnQoZnNfaW5mbywgbnIpO1xuIFxuIFx0cmV0dXJuIG5yO1xuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCA5ZjgyZTZiMzhmMDdlZS4uOTNmMjRhZWE3NWM0ZDYgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtMjQsNyArMjQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuQEAgLTE3MSwxOSArMTcwLDYgQEAgc3RhdGljIHZvaWQgc3VwZXJfd2FrZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgZmxhZylcbiBcdHdha2VfdXBfdmFyKFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MpO1xuIH1cbiBcbi0vKlxuLSAqIFRoZSBzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIGhvb2tzICh1c2VkIGZvciBleGFtcGxlIGJ5IGJ0cmZzIGFuZCB4ZnMpXG4tICogb3BlcmF0ZSBvbiBmaWxlc3lzdGVtLWdsb2JhbCBzdGF0ZSBhbmQgaWdub3JlIHNjLVx1MDAzZW1lbWNnLiBEcml2aW5nIHRoZW1cbi0gKiBmcm9tIHBlci1tZW1jZyBzaHJpbmtfc2xhYl9tZW1jZygpIGludm9jYXRpb25zIG9ubHkgYnVybnMgQ1BVIHdhbGtpbmdcbi0gKiBwZXItY3B1IGNvdW50ZXJzIGFuZCBxdWV1ZWluZyBkdXBsaWNhdGUgd29yazogdGhlIGFjdHVhbCByZWNsYWltIGhhcHBlbnMgb25cbi0gKiB0aGUgZ2xvYmFsIHBhdGggKGtzd2FwZCBvciByb290IGRpcmVjdCByZWNsYWltKSByZWdhcmRsZXNzLiBSZXN0cmljdCB0aGVtXG4tICogdG8gdGhhdCBwYXRoLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4te1xuLVx0cmV0dXJuICFzYy1cdTAwM2VtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtXHUwMDNlbWVtY2cpO1xuLX1cbi1cbiAvKlxuICAqIE9uZSB0aGluZyB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgb2Ygd2l0aCBhIHBlci1zYiBzaHJpbmtlciBpcyB0aGF0IHdlIGRvbid0XG4gICogZHJvcCB0aGUgbGFzdCBhY3RpdmUgcmVmZXJlbmNlIHRvIHRoZSBzdXBlcmJsb2NrIGZyb20gd2l0aGluIHRoZSBzaHJpbmtlci5cbkBAIC0yMTMsNyArMTk5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdGlmICghc3VwZXJfdHJ5bG9ja19zaGFyZWQoc2IpKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjYgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpXG4rXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cylcbiBcdFx0ZnNfb2JqZWN0cyA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMoc2IsIHNjKTtcbiBcbiBcdGlub2RlcyA9IGxpc3RfbHJ1X3Nocmlua19jb3VudChcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xydSwgc2MpO1xuQEAgLTI3NCw4ICsyNjAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdFx0cmV0dXJuIDA7XG4gXHRzbXBfcm1iKCk7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjZcbi1cdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcbitcdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKVxuIFx0XHR0b3RhbF9vYmplY3RzID0gc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpO1xuIFxuIFx0dG90YWxfb2JqZWN0cyArPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2ItXHUwMDNlc19kZW50cnlfbHJ1LCBzYyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggOTU3MjYwNjc3Njc4MTUuLjgxNzBiYjgwNjZhMjJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNTIwLDYgKzUyMCwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdHJldHVybiAobWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwKTtcbiB9XG4gXG4rLyoqXG4rICogbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdCAtIGlzIHRoaXMgYSBnbG9iYWwgb3Igcm9vdC1tZW1jZyBzaHJpbmsgaW52b2NhdGlvbj9cbisgKiBAc2M6IHNocmlua19jb250cm9sIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc2hyaW5rZXIgY2FsbFxuKyAqXG4rICogUmV0dXJucyB0cnVlIHdoZW4gQHNjIHJlcHJlc2VudHMgYSBnbG9iYWwgcmVjbGFpbSBzaHJpbmsgKHNjLVx1MDAzZW1lbWNnID09IE5VTEwpXG4rICogb3IgYSByb290LW1lbWNnIHNocmluaywgaS5lLiBub3QgYSBwZXItbWVtY2cgaXRlcmF0aW9uIG9mXG4rICogc2hyaW5rX3NsYWJfbWVtY2coKS4gRmlsZXN5c3RlbXMgd2hvc2UgLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKCkvXG4rICogLVx1MDAzZWZyZWVfY2FjaGVkX29iamVjdHMoKSBpbXBsZW1lbnRhdGlvbnMgb3BlcmF0ZSBvbiBmaWxlc3lzdGVtLWdsb2JhbCBzdGF0ZVxuKyAqIGFuZCBkbyBub3QgaG9ub3VyIHNjLVx1MDAzZW1lbWNnIGNhbiB1c2UgdGhpcyB0byBlYXJseS1yZXR1cm4gMCBpbiBwZXItbWVtY2dcbisgKiBjb250ZXh0cy5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuK3tcbitcdHJldHVybiAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuIFx0cmV0dXJuIG9iamNnLVx1MDAzZWlzX3Jvb3Q7XG5AQCAtMTA3MSw2ICsxMDg3LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuaW5kZXggNTY2M2RmZjUzMTg2ZTIuLmFlYjU5OTAxYTg0MGM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNfcGFyc2VyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gXG4gLyogaW5vZGUgaW4ta2VybmVsIGRhdGEgKi9cbiBcbkBAIC01NCw2ICs1NSwxMSBAQCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgZHF1b3QgX19yY3VcdCppX2RxdW90W01BWFFVT1RBU107XG4gI2VuZGlmXG4gXHRzdHJ1Y3QgaW5vZGVcdFx0dmZzX2lub2RlO1xuK1xuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHN0cnVjdCBtZW1fY2dyb3VwXHQqc2hyaW5rbGlzdF9tZW1jZztcbitcdGludFx0XHRcdHNocmlua2xpc3RfbmlkO1xuKyNlbmRpZlxuIH07XG4gXG4gI2RlZmluZSBTSE1FTV9GTF9VU0VSX1ZJU0lCTEVcdFx0KEZTX0ZMX1VTRVJfVklTSUJMRSB8IEZTX0NBU0VGT0xEX0ZMKVxuQEAgLTgzLDkgKzg5LDkgQEAgc3RydWN0IHNobWVtX3NiX2luZm8ge1xuIFx0aW5vX3QgbmV4dF9pbm87XHRcdCAgICAvKiBUaGUgbmV4dCBwZXItc2IgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xuIFx0aW5vX3QgX19wZXJjcHUgKmlub19iYXRjaDsgIC8qIFRoZSBuZXh0IHBlci1jcHUgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDsgICAgIC8qIGRlZmF1bHQgbWVtb3J5IHBvbGljeSBmb3IgbWFwcGluZ3MgKi9cbi1cdHNwaW5sb2NrX3Qgc2hyaW5rbGlzdF9sb2NrOyAgIC8qIFByb3RlY3RzIHNocmlua2xpc3QgKi9cbi1cdHN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdDsgIC8qIExpc3Qgb2Ygc2hpbmthYmxlIGlub2RlcyAqL1xuLVx0dW5zaWduZWQgbG9uZyBzaHJpbmtsaXN0X2xlbjsgLyogTGVuZ3RoIG9mIHNocmlua2xpc3QgKi9cbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdDsgLyogTGlzdCBvZiBzaHJpbmthYmxlIGlub2RlcyAqL1xuKyNlbmRpZlxuIFx0c3RydWN0IHNobWVtX3F1b3RhX2xpbWl0cyBxbGltaXRzOyAvKiBEZWZhdWx0IHF1b3RhIGxpbWl0cyAqL1xuIFx0c3RydWN0IHNpbXBsZV94YXR0cl9jYWNoZSB4YV9jYWNoZTtcbiB9O1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBmMTg5ZDFhYzQwZGIyZC4uOGJmNmRkODUwZjg1YjQgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtNzI0LDUxICs3MjQsMjQyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9mb3JtYXRfaHVnZShpbnQgaHVnZSlcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXG4re1xuK1xuK1x0cmV0dXJuIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPT0gLTE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbit7XG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gLTE7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2c7XG4rXG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xuK1xuK1x0cmV0dXJuIG1lbWNnO1xuK31cbitcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcbitzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGludCByZXQ7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIGdmcCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcdH1cbitcbitcdHJldHVybiBtZW1jZztcbit9XG4rI2Vsc2VcbitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdCAgICBnZnBfdCBnZnApXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0ICBnZnBfdCBnZnApXG4re1xuK1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbitcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZyA9IE5VTEw7XG4rXG4rXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApO1xuK1x0aWYgKElTX0VSUihtZW1jZykpXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbitcdFx0LyogaXNvbGF0ZWQgb24gc2NhbiBsaXN0LCBsZXQgc2hyaW5rIGhhbmRsZSBpdCAqL1xuK1x0XHRpZiAoaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbykpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRcdGlmIChpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID09IG5pZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9PSBtZW1jZylcbitcdFx0XHRnb3RvIHVubG9jaztcbitcbitcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4rXHRcdFx0ICAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xuK1x0XHRvbGRfbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuK1x0fVxuK1xuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xuK1x0bGlzdF9scnVfYWRkKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xuK1x0bWVtY2cgPSBOVUxMO1xuK3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rXHRtZW1fY2dyb3VwX3B1dChvbGRfbWVtY2cpO1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuK1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbitcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4rXHRcdFx0ICAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xuK1x0XHRtZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7XG4rXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK31cbitcbitzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjO1xuK307XG4rXG4rc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4rXHRcdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcbitcdFx0XHRcdFx0XHQgdm9pZCAqYXJnKVxuK3tcbitcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnO1xuK1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbitcbitcdGluZm8gPSBsaXN0X2VudHJ5KGl0ZW0sIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbitcbitcdC8qXG4rXHQgKiBVc2UgdHJ5bG9jayB0byBhdm9pZCBBQkJBIGRlYWRsb2NrOiBhZGQvZGVsIHBhdGggdGFrZXMgaW5mby1cdTAwM2Vsb2NrXG4rXHQgKiBiZWZvcmUgdGhlIGxpc3RfbHJ1IGJ1Y2tldCBsb2NrLCB3aGlsZSBoZXJlIHRoZSBvcmRlciBpcyByZXZlcnNlZC5cbitcdCAqL1xuK1x0aWYgKCFzcGluX3RyeWxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKSlcbitcdFx0cmV0dXJuIExSVV9TS0lQO1xuK1xuK1x0LyogcGluIHRoZSBpbm9kZSAqL1xuK1x0aW5vZGUgPSBpZ3JhYihcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZSk7XG4rXHQvKiBpbm9kZSBpcyBhYm91dCB0byBiZSBldmljdGVkICovXG4rXHRpZiAoIWlub2RlKSB7XG4rXHRcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcbitcdFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1x0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rXHRcdHJldHVybiBMUlVfUkVNT1ZFRDtcbitcdH1cbitcbitcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcbitcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcbitcdHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKTtcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZzY2FuLVx1MDAzZWxpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcbitcdHJldHVybiBMUlVfUkVNT1ZFRDtcbit9XG4rXG4rc3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4rXHRib29sIG1hdGNoO1xuK1xuK1x0LypcbitcdCAqIE9ubHkgbm9uLXJvb3QgbWVtY2cgcmVjbGFpbSBuZWVkcyB0byBtYXRjaCB0aGUgZm9saW8gY2hhcmdlIGFnYWluc3RcbitcdCAqIHNjLVx1MDAzZW1lbWNnLiBTa2lwIHRoZSBmb2xpbyBtZW1jZyBjaGVjayBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcbitcdCAqIDEuIHNobWVtIHF1b3RhIHJlY2xhaW0gKHNjID09IE5VTEwpXG4rXHQgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbVxuK1x0ICogMy4gcm9vdCBtZW1jZyByZWNsYWltXG4rXHQgKi9cbitcdGlmICghc2MgfHwgIXNjLVx1MDAzZW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy1cdTAwM2VtZW1jZykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKGZvbGlvX25pZChmb2xpbykgIT0gc2MtXHUwMDNlbmlkKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuK1x0bWF0Y2ggPSBtZW1jZyA9PSBzYy1cdTAwM2VtZW1jZztcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuK1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG4rXG4rXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBHRlBfTk9XQUlUKTtcbitcdGlmIChJU19FUlIobWVtY2cpKVxuK1x0XHRnb3RvIGRyb3A7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdC8qIFJlcXVldWUgdGhlIGlub2RlIHRvIHNocmlua2xpc3QgKi9cbitcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbitcdGxpc3RfbHJ1X2FkZChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBuaWQsIG1lbWNnKTtcbitcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IG1lbWNnO1xuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9IG5pZDtcbitcdG1lbWNnID0gTlVMTDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rXG4rXHRyZXR1cm47XG4rXG4rZHJvcDpcbitcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYywgdW5zaWduZWQgbG9uZyBucl90b19mcmVlKVxuIHtcbi1cdExJU1RfSEVBRChsaXN0KSwgKnBvcywgKm5leHQ7XG4rXHRzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiBzY2FuO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdHVuc2lnbmVkIGxvbmcgYmF0Y2ggPSBzYyA/IHNjLVx1MDAzZW5yX3RvX3NjYW4gOiAxMjg7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0O1xuIFx0dW5zaWduZWQgbG9uZyBzcGxpdCA9IDAsIGZyZWVkID0gMDtcbiBcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KSlcbi1cdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuLVxuLVx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpIHtcbi1cdFx0aW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XG4tXG4tXHRcdC8qIHBpbiB0aGUgaW5vZGUgKi9cbi1cdFx0aW5vZGUgPSBpZ3JhYihcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZSk7XG4tXG4tXHRcdC8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi9cbi1cdFx0aWYgKCFpbm9kZSkge1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRnb3RvIG5leHQ7XG4tXHRcdH1cbi1cbi1cdFx0bGlzdF9tb3ZlKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2bGlzdCk7XG4tbmV4dDpcbi1cdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuLS07XG4tXHRcdGlmICghLS1iYXRjaClcbi1cdFx0XHRicmVhaztcbi1cdH1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2Nhbi5saXN0KTtcbitcdHNjYW4uc2MgPSBzYztcbitcdGlmIChzYylcbitcdFx0bGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNjLFxuK1x0XHRcdFx0ICAgICBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlLCBcdTAwMjZzY2FuKTtcbitcdGVsc2VcbitcdFx0bGlzdF9scnVfd2FsayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZSxcbitcdFx0XHQgICAgICBcdTAwMjZzY2FuLCAxMjgpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgXHUwMDI2bGlzdCkge1xuLVx0XHRwZ29mZl90IG5leHQsIGVuZDtcbitcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFx1MDAyNnNjYW4ubGlzdCkge1xuK1x0XHRwZ29mZl90IGZvbGlvX2VuZCwgZW5kO1xuIFx0XHRsb2ZmX3QgaV9zaXplO1xuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbiBcdFx0aW5vZGUgPSBcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZTtcbiBcbi1cdFx0aWYgKG5yX3RvX2ZyZWUgXHUwMDI2XHUwMDI2IGZyZWVkIFx1MDAzZT0gbnJfdG9fZnJlZSlcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbi1cbiBcdFx0aV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIFx0XHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLVx1MDAzZWlfbWFwcGluZywgaV9zaXplIC8gUEFHRV9TSVpFKTtcbiBcdFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpXG5AQCAtNzgxLDEzICs5NzIsMjUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdH1cbiBcbiBcdFx0LyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZ2FpbiBmcm9tIHNwbGl0dGluZyAqL1xuLVx0XHRuZXh0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4rXHRcdGZvbGlvX2VuZCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xuIFx0XHRlbmQgPSBzaG1lbV9mYWxsb2NlbmQoaW5vZGUsIERJVl9ST1VORF9VUChpX3NpemUsIFBBR0VfU0laRSkpO1xuLVx0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gbmV4dCkge1xuK1x0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gZm9saW9fZW5kKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiBcbitcdFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHtcbitcdFx0XHRzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0XHRnb3RvIHB1dDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobnJfdG9fZnJlZSBcdTAwMjZcdTAwMjYgZnJlZWQgXHUwMDNlPSBucl90b19mcmVlKSB7XG4rXHRcdFx0c2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pO1xuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRcdFx0Z290byBwdXQ7XG4rXHRcdH1cbitcbiBcdFx0LypcbiBcdFx0ICogTW92ZSB0aGUgaW5vZGUgb24gdGhlIGxpc3QgYmFjayB0byBzaHJpbmtsaXN0IGlmIHdlIGZhaWxlZFxuIFx0XHQgKiB0byBsb2NrIHRoZSBwYWdlIGF0IHRoaXMgdGltZS5cbkBAIC03OTYsMzQgKzk5OSwzMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0ICogcmVjbGFpbSBwYXRoLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuK1x0XHRcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcbitcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRcdGdvdG8gcHV0O1xuK1x0XHR9XG4rXG4rXHRcdGlmICghaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goZm9saW8sIHNjYW4uc2MpKSB7XG4rXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdFx0XHRzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbitcdFx0XHRnb3RvIHB1dDtcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHRcdC8qIElmIHNwbGl0IGZhaWxlZCBtb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgKi9cbi1cdFx0aWYgKHJldClcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcbitcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRcdGdvdG8gcHV0O1xuK1x0XHR9XG4gXG4tXHRcdGZyZWVkICs9IG5leHQgLSBlbmQ7XG4rXHRcdGZyZWVkICs9IGZvbGlvX2VuZCAtIGVuZDtcbiBcdFx0c3BsaXQrKztcbitcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBkcm9wOlxuLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tXHRcdGdvdG8gcHV0O1xuLW1vdmVfYmFjazpcbi1cdFx0Lypcbi1cdFx0ICogTWFrZSBzdXJlIHRoZSBpbm9kZSBpcyBlaXRoZXIgb24gdGhlIGdsb2JhbCBsaXN0IG9yIGRlbGV0ZWRcbi1cdFx0ICogZnJvbSBhbnkgbG9jYWwgbGlzdCBiZWZvcmUgaXB1dCgpIHNpbmNlIGl0IGNvdWxkIGJlIGRlbGV0ZWRcbi1cdFx0ICogaW4gYW5vdGhlciB0aHJlYWQgb25jZSB3ZSBwdXQgdGhlIGlub2RlICh0aGVuIHRoZSBsb2NhbCBsaXN0XG4tXHRcdCAqIGlzIGNvcnJ1cHRlZCkuXG4tXHRcdCAqL1xuLVx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdGxpc3RfbW92ZShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsIFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKys7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuK1x0XHRzaG1lbV91bnVzZWRfaHVnZV9kcm9wKGlub2RlKTtcbiBwdXQ6XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0fVxuQEAgLTgzNiw3ICsxMDM4LDcgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIHtcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7XG4gXG4tXHRpZiAoIVJFQURfT05DRShzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4pKVxuK1x0aWYgKCFsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNjKSlcbiBcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuIFxuIFx0cmV0dXJuIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzYmluZm8sIHNjLCAwKTtcbkBAIC04NDYsMTIgKzEwNDgsMjIgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuLVx0cmV0dXJuIFJFQURfT05DRShzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4pO1xuK1xuK1x0cmV0dXJuIGxpc3RfbHJ1X3Nocmlua19jb3VudChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2MpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4gI2RlZmluZSBzaG1lbV9odWdlIFNITUVNX0hVR0VfREVOWVxuIFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0ICBnZnBfdCBnZnApXG4re1xuK31cbitcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rfVxuK1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxuIFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXG4ge1xuQEAgLTE0MDcsMTQgKzE2MTksNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSAwO1xuIFx0XHRtYXBwaW5nX3NldF9leGl0aW5nKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXHRcdHNobWVtX3RydW5jYXRlX3JhbmdlKGlub2RlLCAwLCAobG9mZl90KS0xKTtcbi1cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbi0tO1xuLVx0XHRcdH1cbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdFx0fVxuK1x0XHRzaG1lbV91bnVzZWRfaHVnZV9kZWwoaW5vZGUpO1xuIFx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2aW5mby1cdTAwM2Vzd2FwbGlzdCkpIHtcbiBcdFx0XHQvKiBXYWl0IHdoaWxlIHNobWVtX3VudXNlKCkgaXMgc2Nhbm5pbmcgdGhpcyBpbm9kZS4uLiAqL1xuIFx0XHRcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNmluZm8tXHUwMDNlc3RvcF9ldmljdGlvbixcbkBAIC0yNTIyLDI4ICsyNzI3LDYgQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXG4gYWxsb2NlZDpcbiBcdGFsbG9jZWQgPSB0cnVlO1xuLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuLVx0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXHUwMDNjXG4tXHRcdFx0XHRcdGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XG4tXHRcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbi1cdFx0Lypcbi1cdFx0ICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdFxuLVx0XHQgKiB0byBzaHJpbmsgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuLVx0XHQgKi9cbi1cdFx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuLVx0XHQvKlxuLVx0XHQgKiBfY2FyZWZ1bCB0byBkZWZlbmQgYWdhaW5zdCB1bmxvY2tlZCBhY2Nlc3MgdG9cbi1cdFx0ICogLVx1MDAzZXNocmlua19saXN0IGluIHNobWVtX3VudXNlZF9odWdlX3NocmluaygpXG4tXHRcdCAqL1xuLVx0XHRpZiAobGlzdF9lbXB0eV9jYXJlZnVsKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCxcbi1cdFx0XHRcdCAgICAgIFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4rKztcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdH1cbi1cbiBcdGlmIChzZ3AgPT0gU0dQX1dSSVRFKVxuIFx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7XG4gXHQvKlxuQEAgLTI1NzIsNiArMjc1NSwxNSBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdFx0ZXJyb3IgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbitcbitcdGlmIChhbGxvY2VkIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdCAgICBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpIFx1MDAzYyBmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XG4rXHRcdCAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4rXHRcdCAqL1xuK1x0XHRzaG1lbV91bnVzZWRfaHVnZV9hZGQoaW5vZGUsIGZvbGlvLCBnZnApO1xuK1x0fVxuIG91dDpcbiBcdCpmb2xpb3AgPSBmb2xpbztcbiBcdHJldHVybiAwO1xuQEAgLTMwNDgsNiArMzI0MCwxMCBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpfX3NobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChpbmZvLVx1MDAzZWZzZmxhZ3MpXG4gXHRcdHNobWVtX3NldF9pbm9kZV9mbGFncyhpbm9kZSwgaW5mby1cdTAwM2Vmc2ZsYWdzLCBOVUxMKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gTlVMTDtcbitcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPSAtMTtcbisjZW5kaWZcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc3dhcGxpc3QpO1xuIFx0Y2FjaGVfbm9fYWNsKGlub2RlKTtcbiBcdGlmIChzYmluZm8tXHUwMDNlbm9zd2FwKVxuQEAgLTQ5MTQsNiArNTExMCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuICNlbmRpZlxuIFx0ZnJlZV9wZXJjcHUoc2JpbmZvLVx1MDAzZWlub19iYXRjaCk7XG4gXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFx1MDAyNnNiaW5mby1cdTAwM2V1c2VkX2Jsb2Nrcyk7XG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0bGlzdF9scnVfZGVzdHJveShcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4rI2VuZGlmXG4gXHRtcG9sX3B1dChzYmluZm8tXHUwMDNlbXBvbCk7XG4gI2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxuIFx0c2ltcGxlX3hhdHRyX2NhY2hlX2NsZWFudXAoXHUwMDI2c2JpbmZvLVx1MDAzZXhhX2NhY2hlKTtcbkBAIC01MDA3LDggKzUyMDYsMTEgQEAgc3RhdGljIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZzYmluZm8tXHUwMDNlc3RhdF9sb2NrKTtcbiBcdGlmIChwZXJjcHVfY291bnRlcl9pbml0KFx1MDAyNnNiaW5mby1cdTAwM2V1c2VkX2Jsb2NrcywgMCwgR0ZQX0tFUk5FTCkpXG4gXHRcdGdvdG8gZmFpbGVkO1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4rXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNiLVx1MDAzZXNfc2hyaW5rKSlcbitcdFx0Z290byBmYWlsZWQ7XG4rI2VuZGlmXG4gXG4gXHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbiBcdHNiLVx1MDAzZXNfYmxvY2tzaXplID0gUEFHRV9TSVpFO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjQ6NDEuMTYyODcwMTQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODgxMDc1MzQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEh1Z2UgUGFnZSBhbmQgT2JqZWN0IENhY2hpbmcgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBpdCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyBob3cgYHNobWVtYCBkZWFscyB3aXRoIHVudXNlZCBodWdlIHBhZ2VzIGR1cmluZyBzaHJpbmtpbmcgb3BlcmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyByZXBsYWNpbmcgdGhlIG9sZCBgbGlzdF9oZWFkYCBhbmQgc3BpbmxvY2sgaW4gYHNobWVtX3NiX2luZm9gIHdpdGggYSBgbGlzdF9scnVgIGZvciB0aGUgYHNocmlua2xpc3RgLiBUaGF0J3MgYSBjbGFzc2ljIG9wdGltaXphdGlvbiwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBiZXR0ZXIgcGVyZm9ybWFuY2UgaW4gY29udGVudGlvbiBzY2VuYXJpb3MuIEl0IGFsc28gc2VlbXMgdG8gYmUgdG91Y2hpbmcgYHN1cGVyX2NhY2hlX3NjYW5gIGFuZCBgc3VwZXJfY2FjaGVfY291bnRgIGluIGBmcy9zdXBlci5jYCwgcmVtb3ZpbmcgYHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGVgIGFuZCBsZWFuaW5nIG9uIGBtZW1fY2dyb3VwX3Nocmlua19pc19yb290YCB3aXRoaW4gYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYCBpbnN0ZWFkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBtb3ZlIHRvd2FyZHMgbW9yZSB1bmlmaWVkIG1lbW9yeSBjZ3JvdXAgbWFuYWdlbWVudC5cblxuRnVuY3Rpb25hbGx5LCB0aGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgYG1tL3NobWVtLmNgIGFuZCBhbHNvIGltcGFjdGluZyBgZnMvYnRyZnMvc3VwZXIuY2AuIFRoZSBgc2htZW1gIHNpZGUgaXMgZGVmaW5pdGVseSB0aWVkIGludG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfTUVNQ0dgLiBHaXZlbiB0aGlzLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIGZ1enppbmcgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS5cblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCBpcyBjYWxsZWQgYnkgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLCB3aGljaCBpbiB0dXJuIGlzIGEgc3VwZXJibG9jayBzaHJpbmtlciBjYWxsYmFjayDigJMgc3BlY2lmaWNhbGx5LCBgc19vcC1cdTAwM2VmcmVlX2NhY2hlZF9vYmplY3RzYC4gVGhhdCdzIGEgY2xlYXIgZW50cnkgcG9pbnQsIGEgZGVmaW5pdGUgXCJ5ZXNcIiBmb3IgcmVhY2hhYmlsaXR5LiBUaGVuLCBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYCBpcyBhbHNvIGNhbGxlZCBmcm9tIGBzaG1lbV9nZXRfZm9saW9fZ2ZwYCB3aGVuIGEgbGFyZ2UgZm9saW8gaXMgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHkgd2hlbiBwYXJ0IG9mIHRoZSBmb2xpbyBpcyBiZXlvbmQgYGlfc2l6ZWAuIFRoYXQncyBhbm90aGVyIHBvdGVudGlhbCB0cmlnZ2VyLiBZdXAsIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBXZSdyZSBsb29raW5nIGF0OlxuKiAgIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG4qICAgYENPTkZJR19NRU1DR2BcbiogICBgQ09ORklHX1NITUVNYCAoSSdtIGFzc3VtaW5nIHRoaXMgaXMgbGlrZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrKVxuKiAgIGBDT05GSUdfVE1QRlNgXG5cbk5leHQgc3RlcDogbGV0J3MgZ28gaW50byBgbW0vc2htZW0uY2AgYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIGZvY3VzIG9uOlxuKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgXG4qICAgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gXG4qICAgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YFxuKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgXG4qICAgYHNobWVtX3VudXNlZF9odWdlX2RlbGBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGBcblxuQW5kIHRoZW4sIG92ZXIgaW4gYGZzL2J0cmZzL3N1cGVyLmNgLCB3ZSd2ZSBnb3Q6XG4qICAgYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYFxuKiAgIGBidHJmc19mcmVlX2NhY2hlZF9vYmplY3RzYFxuXG5GaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjayB1c2luZyBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gY29uZmlybSB0aG9zZSBjb25maWdzIGFuZCBmdW5jdGlvbnMsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaW1lIHRvIGdldCB0aGlzIHNldCB1cCBhbmQgc3RhcnQgdGhlIGZ1enppbmcgcnVuIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzI3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjQ6NDkuOTczNjI2Nzk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MjQxMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTEzPXN0cnVjdCBzaG1lbV9vcHRpb25zIHtcXG4tLVxcbm1tL3NobWVtLmMtMTM2LVxcbm1tL3NobWVtLmM6MTM3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTEzOC1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlX3NobWVtX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL3NobWVtLmM9NTIwPXN0YXRpYyBpbnQgc2htZW1fY29uZmlybV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy01NjgtXFxubW0vc2htZW0uYzo1Njk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtNTcwLS8qIGlmZGVmIGhlcmUgdG8gYXZvaWQgYmxvYXRpbmcgc2htZW0ubyB3aGVuIG5vdCBuZWNlc3NhcnkgKi9cXG5tbS9zaG1lbS5jLTU3MS1cXG5tbS9zaG1lbS5jOjU3MjojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUilcXG5tbS9zaG1lbS5jLTU3My0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXFxubW0vc2htZW0uYzo1NzQ6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVMpXFxubW0vc2htZW0uYy01NzUtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9zaG1lbS5jOjU3NjojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFKVxcbm1tL3NobWVtLmMtNTc3LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9zaG1lbS5jOjU3ODojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRSlcXG5tbS9zaG1lbS5jLTU3OS0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxcbi0tXFxubW0vc2htZW0uYz01ODQ9c3RhdGljIGludCBzaG1lbV9odWdlIF9fcmVhZF9tb3N0bHkgPSBTSE1FTV9IVUdFX0RFRkFVTFQ7XFxuLS1cXG5tbS9zaG1lbS5jLTU4Ny1cXG5tbS9zaG1lbS5jOjU4ODojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUilcXG5tbS9zaG1lbS5jLTU4OS0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXFxubW0vc2htZW0uYzo1OTA6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVMpXFxubW0vc2htZW0uYy01OTEtI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9zaG1lbS5jOjU5MjojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFKVxcbm1tL3NobWVtLmMtNTkzLSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9zaG1lbS5jOjU5NDojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRSlcXG5tbS9zaG1lbS5jLTU5NS0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxcbi0tXFxubW0vc2htZW0uYz0xMDQ3PXN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5tbS9zaG1lbS5jLTEwNTMtfVxcbm1tL3NobWVtLmM6MTA1NDojZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vc2htZW0uYy0xMDU1LVxcbi0tXFxubW0vc2htZW0uYz0xMDczPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0xMDc5LX1cXG5tbS9zaG1lbS5jOjEwODA6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL3NobWVtLmMtMTA4MS1cXG4tLVxcbm1tL3NobWVtLmM9MTc5OD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE4NDAtXFxubW0vc2htZW0uYzoxODQxOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTE4NDItXFx0XFx0aWYgKG9yZGVyIFxcdTAwM2U9IEhQQUdFX1BNRF9PUkRFUikge1xcbi0tXFxubW0vc2htZW0uYz0xOTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBpbl9jbHVzdGVyKHN3cF9lbnRyeV90IHN3YXAsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NobWVtLmMtMjAwOC1cXG5tbS9zaG1lbS5jOjIwMDk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtMjAxMC1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9zaG1lbS5jPTIxMDg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc2htZW0uYy0yMTEzLX1cXG5tbS9zaG1lbS5jOjIxMTQ6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL3NobWVtLmMtMjExNS1cXG4tLVxcbm1tL3NobWVtLmM9MjEzMD1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc2htZW0uYy0yMTQxLVxcbm1tL3NobWVtLmM6MjE0MjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG5tbS9zaG1lbS5jLTIxNDMtXFx0XFx0b3JkZXJzID0gMDtcXG4tLVxcbm1tL3NobWVtLmM9MjI4MD1zdGF0aWMgaW50IHNobWVtX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zaG1lbS5jLTIyOTQtXFx0Z2ZwIFxcdTAwMjY9IH5HRlBfQ09OU1RSQUlOVF9NQVNLO1xcbm1tL3NobWVtLmM6MjI5NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy0yMjk2LVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDEpIHtcXG4tLVxcbm1tL3NobWVtLmM9MjkxOD11bnNpZ25lZCBsb25nIHNobWVtX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vc2htZW0uYy0yOTMzLVxcbm1tL3NobWVtLmM6MjkzNDpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG5tbS9zaG1lbS5jLTI5MzUtXFx0XFx0cmV0dXJuIGFkZHI7XFxuLS1cXG5tbS9zaG1lbS5jLTI5NzctXFx0XFx0XFx0ICovXFxubW0vc2htZW0uYzoyOTc4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTI5NzktXFx0XFx0XFx0aHBhZ2Vfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XFxuLS1cXG5tbS9zaG1lbS5jPTMyMDM9c3RhdGljIHN0cnVjdCBpbm9kZSAqX19zaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5tbS9zaG1lbS5jLTMyNDItXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbm1tL3NobWVtLmM6MzI0MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy0zMjQ0LVxcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xcbi0tXFxubW0vc2htZW0uYz00NzE2PXN0YXRpYyBpbnQgc2htZW1fcGFyc2Vfb25lKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuLS1cXG5tbS9zaG1lbS5jLTQ3ODUtXFx0XFx0aWYgKGN0eC1cXHUwMDNlaHVnZSAhPSBTSE1FTV9IVUdFX05FVkVSIFxcdTAwMjZcXHUwMDI2XFxubW0vc2htZW0uYzo0Nzg2OlxcdFxcdCAgICAhKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3NobWVtLmMtNDc4Ny1cXHRcXHQgICAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkpXFxuLS1cXG5tbS9zaG1lbS5jPTUwMjY9c3RhdGljIGludCBzaG1lbV9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuLS1cXG5tbS9zaG1lbS5jLTUwNjUtXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIsaW5vZGUlZFxcXCIsIChzYmluZm8tXFx1MDAzZWZ1bGxfaW51bXMgPyA2NCA6IDMyKSk7XFxubW0vc2htZW0uYzo1MDY2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTUwNjctXFx0LyogUmlnaHRseSBvciB3cm9uZ2x5LCBzaG93IGh1Z2UgbW91bnQgb3B0aW9uIHVubWFza2VkIGJ5IHNobWVtX2h1Z2UgKi9cXG4tLVxcbm1tL3NobWVtLmM9NTA5OT1zdGF0aWMgdm9pZCBzaG1lbV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbm1tL3NobWVtLmMtNTExMi1cXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFxcdTAwMjZzYmluZm8tXFx1MDAzZXVzZWRfYmxvY2tzKTtcXG5tbS9zaG1lbS5jOjUxMTM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtNTExNC1cXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbi0tXFxubW0vc2htZW0uYz01MTMxPXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5tbS9zaG1lbS5jLTUxOTYtXFx0c2JpbmZvLVxcdTAwM2Vtb2RlID0gY3R4LVxcdTAwM2Vtb2RlO1xcbm1tL3NobWVtLmM6NTE5NzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy01MTk4LVxcdGlmIChjdHgtXFx1MDAzZXNlZW4gXFx1MDAyNiBTSE1FTV9TRUVOX0hVR0UpXFxuLS1cXG5tbS9zaG1lbS5jLTUyMDktXFxubW0vc2htZW0uYzo1MjEwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTUyMTEtXFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgc2ItXFx1MDAzZXNfc2hyaW5rKSlcXG4tLVxcbm1tL3NobWVtLmM9NTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc2htZW1fb3BzID0ge1xcbi0tXFxubW0vc2htZW0uYy01NDMwLVxcdC5wdXRfc3VwZXJcXHQ9IHNobWVtX3B1dF9zdXBlcixcXG5tbS9zaG1lbS5jOjU0MzE6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtNTQzMi1cXHQubnJfY2FjaGVkX29iamVjdHNcXHQ9IHNobWVtX3VudXNlZF9odWdlX2NvdW50LFxcbi0tXFxubW0vc2htZW0uYz01NTU2PXZvaWQgX19pbml0IHNobWVtX2luaXQodm9pZClcXG4tLVxcbm1tL3NobWVtLmMtNTU4Ni1cXG5tbS9zaG1lbS5jOjU1ODc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtNTU4OC1cXHRpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgXFx1MDAyNlxcdTAwMjYgc2htZW1faHVnZSBcXHUwMDNlIFNITUVNX0hVR0VfREVOWSlcXG4tLVxcbm1tL3NobWVtLmMtNTYxMS1cXG5tbS9zaG1lbS5jOjU2MTI6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TWVNGUylcXG5tbS9zaG1lbS5jLTU2MTMtc3RhdGljIHNzaXplX3Qgc2htZW1fZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vc2htZW0uYz01NzY3PXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0aHBzaXplX3NobWVtX2VuYWJsZWRfYXR0ciA9XFxubW0vc2htZW0uYy01NzY4LVxcdF9fQVRUUihzaG1lbV9lbmFibGVkLCAwNjQ0LCB0aHBzaXplX3NobWVtX2VuYWJsZWRfc2hvdywgdGhwc2l6ZV9zaG1lbV9lbmFibGVkX3N0b3JlKTtcXG5tbS9zaG1lbS5jOjU3Njk6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfU1lTRlMgKi9cXG5tbS9zaG1lbS5jLTU3NzAtXFxubW0vc2htZW0uYzo1NzcxOiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5tbS9zaG1lbS5jLTU3NzItXFxuLS1cXG5tbS9zaG1lbS5jPTU5MDI9X19zZXR1cChcXFwidGhwX3NobWVtPVxcXCIsIHNldHVwX3RocF9zaG1lbSk7XFxubW0vc2htZW0uYy01OTAzLVxcbm1tL3NobWVtLmM6NTkwNDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vc2htZW0uYy01OTA1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNDo1MC4wMzE4NzE2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MzczNjg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBUSFAgYW5kIGNncm91cHMqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyB0cmFuc3BhcmVudCBodWdlcGFnZXMgKGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgKS4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IHdlIHdhbnQgZm9yIHBlcmZvcm1hbmNlIGluIG1hbnkgd29ya2xvYWRzLiBCdXQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgQ09ORklHX01FTUNHYC4gSWYgd2UncmUgdXNpbmcgVEhQLCBlc3BlY2lhbGx5IGluIGFueSBraW5kIG9mIGNvbnRhaW5lcml6ZWQgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIEkgKm5lZWQqIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSB3aXRoIG1lbW9yeSBjZ3JvdXBzLiBBcmUgd2UgcHJvcGVybHkgYWNjb3VudGluZyBmb3IgVEhQIHVzYWdlIHdpdGhpbiB0aG9zZSBjZ3JvdXAgbGltaXRzPyBJcyB0aGUgc2NoZWR1bGVyIGJlaW5nIE5VTUEtYXdhcmUgZW5vdWdoIGluIGl0cyBwbGFjZW1lbnQgb2YgaHVnZXBhZ2VzIHdpdGhpbiBhIG1lbWNnPyBXaGF0IGFib3V0IG92ZXJjb21taXQg4oCTIGhvdyBkb2VzIHRoZSBzeXN0ZW0gaGFuZGxlIGEgc2l0dWF0aW9uIHdoZXJlIGEgbWVtY2cgcmVxdWVzdHMgbW9yZSBUSFAgdGhhbiBpcyBhdmFpbGFibGUsIGFuZCB3aGF0IGFyZSB0aGUgcmVwZXJjdXNzaW9ucz8gV2UncmUgcG90ZW50aWFsbHkgdGFsa2luZyBhYm91dCBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGVzZSB0d28gZmVhdHVyZXMgaW50ZXJhY3QuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdG8gc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBiZWhhdmUgdG9nZXRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkga25vd24gZ290Y2hhcyBvciB0dW5pbmcgcGFyYW1ldGVycyB0aGF0IGFyZSBjcml0aWNhbCB0byBvcHRpbWl6aW5nIHRoaXMgc2V0dXAuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBkdXJpbmcgYSBzeXN0ZW0gYXVkaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDc1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjQ6NTQuMjE1NjEwNjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTcwNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NzM4PXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcXG4tLVxcbm1tL3NobWVtLmMtNzQ2LVxcbm1tL3NobWVtLmM6NzQ3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zaG1lbS5jLTc0OC1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNDo1NC4yNzI3ODY0NTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzNzY0MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEJ0cmZzIFN1cGVyYmxvY2sgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0IGBtZW1fY2dyb3VwX3Nocmlua19pc19yb290YCBjaGVjayB3aXRoaW4gdGhlIEJ0cmZzIGNvZGViYXNlPyBJIGtub3cgaXQgZGVhbHMgd2l0aCBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggbWVhbnMgSSBzaG91bGQgYmUgbG9va2luZyBhdCB0aGUgc3VwZXJibG9jayBjb2RlLCBwYXJ0aWN1bGFybHkgd2hlcmUgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBtZXRhZGF0YS4gUmlnaHQsIHRoYXQgcHV0cyBtZSBzcXVhcmVseSBpbiBgZnMvYnRyZnMvc3VwZXIuY2AuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIHN1cGVyYmxvY2sgb3BlcmF0aW9ucywgc28gaXQgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbGV2YW50IGNvbnRleHQsIG9yIGF0IGxlYXN0IHRoZSBjYWxscyBJIG5lZWQgdG8gdHJhY2UuIE5vdywgdGltZSB0byBzdGFydCBkaWdnaW5nIGluIHRoZXJlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODg3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjQ6NTcuNjk2NTUzMDk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNjk1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYnRyZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idHJmcy9zdXBlci5jPTI0MzM9c3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmMtMjQ0My1cXHQgKi9cXG5mcy9idHJmcy9zdXBlci5jOjI0NDQ6XFx0aWYgKCFtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHNjKSlcXG5mcy9idHJmcy9zdXBlci5jLTI0NDUtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI0OjU3Ljc1NzI1MzY3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjczMDYzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIHByb21pc2luZyDigJMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggdGhyb3dpbmcgYSBmdXp6ZXIgYXQuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgLCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAsIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAsIGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgLCBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYCwgYHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVgLCBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWAsIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYCwgYW5kIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmFjdCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgIGlzIHN0YXRpYy4uLiB5ZXMsIGdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0ZWQuIE5vdyBJIGtub3cgdG8gd2F0Y2ggb3V0IGZvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmaWxlcy5cblxuVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzIGhlcmUgYXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNRU1DR2AsIGFuZCBgQlRSRlNfRlNgLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBmcmFtZXdvcmsgdG8ga25vdyB3aGF0IHRvIGV4cGVjdCBhbmQgd2hlcmUgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzLlxuXG5JJ2xsIGdsYW5jZSBhdCBgZnMvYnRyZnMvc3VwZXIuY2AgbmV4dCB0byB1bmRlcnN0YW5kIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AgaW4gbW9yZSBkZXRhaWwgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGh1Z2VwYWdlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjM5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI1OjAyLjI4NDU2Mjk5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM1NTM4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRyZnNfbnJfY2FjaGVkX29iamVjdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYnRyZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idHJmcy9zdXBlci5jPTI0MTc9c3RhdGljIGludCBidHJmc19zaG93X2Rldm5hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbi0tXFxuZnMvYnRyZnMvc3VwZXIuYy0yNDMyLVxcbmZzL2J0cmZzL3N1cGVyLmM6MjQzMzpzdGF0aWMgbG9uZyBidHJmc19ucl9jYWNoZWRfb2JqZWN0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbmZzL2J0cmZzL3N1cGVyLmMtMjQzNC17XFxuLS1cXG5mcy9idHJmcy9zdXBlci5jPTI1MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJ0cmZzX3N1cGVyX29wcyA9IHtcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmMtMjU0NS1cXHQudW5mcmVlemVfZnNcXHQ9IGJ0cmZzX3VuZnJlZXplLFxcbmZzL2J0cmZzL3N1cGVyLmM6MjU0NjpcXHQubnJfY2FjaGVkX29iamVjdHMgPSBidHJmc19ucl9jYWNoZWRfb2JqZWN0cyxcXG5mcy9idHJmcy9zdXBlci5jLTI1NDctXFx0LmZyZWVfY2FjaGVkX29iamVjdHMgPSBidHJmc19mcmVlX2NhY2hlZF9vYmplY3RzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNTowMi4zNDgxMjE4ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5MDk3NzYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZXMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhlIGNoYW5nZXMgaW4gYGZzL2J0cmZzL3N1cGVyLmNgIGFyZSBwcmV0dHkgaW5jb25zZXF1ZW50aWFsIC0ganVzdCBhIHNpbXBsZSBlYXJseSByZXR1cm4uIFRoZSByZWFsIG1lYXQgb2YgdGhlIHVwZGF0ZSBzZWVtcyB0byBiZSBpbiBgbW0vc2htZW0uY2AsIHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIGBsaXN0X2xydWAgZm9yIHRoZSBgc2hyaW5rbGlzdGAuIFRoYXQgbWVhbnMgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGBzaG1lbV91bnVzZWRfaHVnZV8qYCBmdW5jdGlvbnMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgc2NvcGVkLCBnaXZlbiB0aGUgY2hhbmdlLiBMZXQgbWUgZ28gdGhyb3VnaCB0aGVtOiBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCBpcyBzdGF0aWM/IFllcC4gYHNobWVtX3VudXNlZF9odWdlX3NjYW5gPyBTdGF0aWMsIGNoZWNrLiBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgPyBTdGF0aWMsIGFzIGV4cGVjdGVkLiBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYD8gWXVwLCBzdGF0aWMuICBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYCwgc3RhdGljLiBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAsIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWAsIGFzIHdlbGwgYXMgYHNobWVtX3VudXNlZF9odWdlX2Ryb3BgIGFyZSBzdGF0aWMgYXMgd2VsbC4gT2theSwgYWxsIGxvb2tzIGdvb2QgdGhlcmUuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHdoZXJlIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MDcuMTM5MTAyMzg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjExMjg3MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX3VudXNlZF9odWdlX3Nocmlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9OTA5PXN0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3NobWVtLmMtOTM1LVxcbm1tL3NobWVtLmM6OTM2OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbm1tL3NobWVtLmMtOTM3LVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcXG4tLVxcbm1tL3NobWVtLmM9MTAzNj1zdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zY2FuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5tbS9zaG1lbS5jLTEwNDMtXFxubW0vc2htZW0uYzoxMDQ0OlxcdHJldHVybiBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc2JpbmZvLCBzYywgMCk7XFxubW0vc2htZW0uYy0xMDQ1LX1cXG4tLVxcbm1tL3NobWVtLmM9MTA2Mz1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL3NobWVtLmMtMTA2Ni1cXG5tbS9zaG1lbS5jOjEwNjc6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXFxubW0vc2htZW0uYy0xMDY4LVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcXG4tLVxcbm1tL3NobWVtLmM9MjEzMD1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc2htZW0uYy0yMjAzLVxcdFxcdCAqL1xcbm1tL3NobWVtLmM6MjIwNDpcXHRcXHRzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc2JpbmZvLCBOVUxMLCBwYWdlcyk7XFxubW0vc2htZW0uYy0yMjA1LVxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI1OjA4LjM1MDM5NTgyMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgwMzIzNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyB0aGUgU0hNRU0gSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIHNoYXJlZCBtZW1vcnkgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IHVudXNlZCBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkIGluIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gU28sIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzIOKAkyBJJ20gcHJldHR5IHN1cmUgaXQncyBjYWxsZWQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UuIEkga25vdyB0aGUgc2hhcmVkIG1lbW9yeSBzdWJzeXN0ZW0gaXMgaG91c2VkIHVuZGVyIGBtbS9gLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBtYWdpYyBoYXBwZW5zLiBBbmQsIGNvbnNpZGVyaW5nIHRoZSBuYW1lLCBJJ2QgYmV0IHRoZSBzb3VyY2UgZmlsZSBJJ20gYWZ0ZXIgaXMgYHNobWVtLmNgLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBvcGVuIHRoYXQgZmlsZSBhbmQgbWFrZSBzdXJlIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBpcyBhY3R1YWxseSBkZWZpbmVkIHRoZXJlLiBUaGlzIGlzIGJhc2ljLCBidXQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGdldCBhIG1lbnRhbCByb2FkbWFwIG9mIHRoZSBjb2RlIGludm9sdmVkLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MTEuNjMwNzI5MzMxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEzMDYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fdW51c2VkX2h1Z2Vfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9ODEzPXN0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxubW0vc2htZW0uYy04MjktXFxubW0vc2htZW0uYzo4MzA6c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4ge1xcbm1tL3NobWVtLmMtODMxLVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4tLVxcbm1tL3NobWVtLmM9ODM1PXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbi0tXFxubW0vc2htZW0uYy04Mzgte1xcbm1tL3NobWVtLmM6ODM5OlxcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnO1xcbm1tL3NobWVtLmMtODQwLVxcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xcbi0tXFxubW0vc2htZW0uYz05MzY9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXFxuLS1cXG5tbS9zaG1lbS5jLTkzOC17XFxubW0vc2htZW0uYzo5Mzk6XFx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2NhbjtcXG5tbS9zaG1lbS5jLTk0MC1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbi0tXFxubW0vc2htZW0uYy0xMDM1LVxcbm1tL3NobWVtLmM6MTAzNjpzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zY2FuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxubW0vc2htZW0uYy0xMDM3LVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS9zaG1lbS5jPTU0MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTQzMi1cXHQubnJfY2FjaGVkX29iamVjdHNcXHQ9IHNobWVtX3VudXNlZF9odWdlX2NvdW50LFxcbm1tL3NobWVtLmM6NTQzMzpcXHQuZnJlZV9jYWNoZWRfb2JqZWN0c1xcdD0gc2htZW1fdW51c2VkX2h1Z2Vfc2NhbixcXG5tbS9zaG1lbS5jLTU0MzQtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI1OjExLjg0MjA0MzYwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQ4NTY2MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZvY3VzOiBVbnVzZWQgSHVnZSBQYWdlIE1hbmFnZW1lbnQgaW4gU2hhcmVkIE1lbW9yeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgdW51c2VkIGh1Z2UgcGFnZXMgd2l0aGluIHRoZSBzaGFyZWQgbWVtb3J5IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBteSBhdHRlbnRpb24gbmVlZHMgdG8gYmUgb24gdGhlc2U6IGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgLCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAsIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAsIGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgLCBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYCwgYHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVgLCBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWAsIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYCwgYGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoYCwgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbnMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3IgbXkgYW5hbHlzaXMuXG5cblRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaXMgYGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hlcmUgdGhpcyBpcyBkZWZpbmVkLCBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9zaG1lbS5jYCB0byBzZWUgaWYgdGhhdCdzIHdoZXJlIGl0J3MgbG9jYXRlZC4gVGhlbiBJJ2xsIGRpdmUgaW50byBlYWNoIG9mIHRob3NlIG90aGVyIGZ1bmN0aW9ucywgbWFwcGluZyB0aGVtIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3ODEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MTYuMjkwNjEyMzU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkyMDU5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTgzNT1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4tLVxcbm1tL3NobWVtLmMtODczLVxcbm1tL3NobWVtLmM6ODc0OnN0YXRpYyBib29sIGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc2htZW0uYy04NzUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS9zaG1lbS5jPTkzNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcXG4tLVxcbm1tL3NobWVtLmMtOTgxLVxcbm1tL3NobWVtLmM6OTgyOlxcdFxcdGlmICghaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goZm9saW8sIHNjYW4uc2MpKSB7XFxubW0vc2htZW0uYy05ODMtXFx0XFx0XFx0c2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pO1xcbi0tXFxubW0vc2htZW0uYy0xMDA2LVxcbm1tL3NobWVtLmM6MTAwNzpcXHRcXHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkge1xcbm1tL3NobWVtLmMtMTAwOC1cXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNToxNi40OTk4MjY5NDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3NzkzNjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKldoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW5kIGNhbiBJIGZpbmQgaXQgcXVpY2tseT8qKiBJIG5lZWQgdG8gbG9jYXRlIGBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSwgYW5kIGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlLCBgbW0vc2htZW0uY2Agc2VlbXMgbGlrZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSBJJ2xsIHN0YXJ0IG15IHNlYXJjaC4gSXQncyBhbG1vc3QgY2VydGFpbiBpdCdzIGluIGEgZmlsZSByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnksIGFuZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgdGhhdCdzIGFsbW9zdCBhbHdheXMgd2hlcmUgaXQgbGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTIxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MTkuMTc3NzY2NjE0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIxODIxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NobWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2htZW0uYz03NDg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5tbS9zaG1lbS5jOjc0OTpzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9zaG1lbS5jLTc1MC1cXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vc2htZW0uYz03Njg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5tbS9zaG1lbS5jOjc2OTpzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9zaG1lbS5jLTc3MC1cXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vc2htZW0uYz03NzY9c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTc4My1cXG5tbS9zaG1lbS5jOjc4NDpcXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApO1xcbm1tL3NobWVtLmMtNzg1LVxcdGlmIChJU19FUlIobWVtY2cpKVxcbi0tXFxubW0vc2htZW0uYz05MDk9c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc2htZW0uYy05MTUtXFxubW0vc2htZW0uYzo5MTY6XFx0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgR0ZQX05PV0FJVCk7XFxubW0vc2htZW0uYy05MTctXFx0aWYgKElTX0VSUihtZW1jZykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI1OjE5LjM2OTk1NjA3M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzEyNzA3ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEJ0cmZzIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWdzIOKAkyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgLCB3aGljaCBpcyBzdGFuZGFyZCBlbm91Z2ggZm9yIG9wdGltaXphdGlvbiBlZmZvcnRzLiBCdXQgaG9sZCBvbiwgSSBzZWUgYEJUUkZTX0ZTYCBjaGFuZ2VkIGFzIHdlbGwuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBCdHJmcyBpcyBhbiBhcmVhIHdoZXJlIHBlcmZvcm1hbmNlIHR1bmluZyBjYW4gYmUgcXVpdGUgaW52b2x2ZWQsIGFuZCBhbnkgY29uZmlnIG1vZGlmaWNhdGlvbiBzdWdnZXN0cyBhIHBvdGVudGlhbCBhcmVhIGZvciBpbXByb3ZlbWVudCBvciBhIHNwZWNpZmljIHVzZSBjYXNlIGNvbnNpZGVyYXRpb24uXG5cbk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIHNlZSAqd2h5KiB0aGUgQnRyZnMgZmlsZXN5c3RlbSBpcyB0b3VjaGVkLiBUbyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBJJ20gbm93IGdvaW5nIHRvIGNvbmZpcm0gaWYgYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYCBpcyByZWxhdGVkIHRvIHRoZSBCdHJmcyBjaGFuZ2VzLiBJdCdzIHRpbWUgdG8gY2hlY2sgYGZzL2J0cmZzL3N1cGVyLmNgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCByZWxhdGVkIGxvZ2ljIGlmIHRoaXMgY29uZmlnIGNoYW5nZSBpcyByZWxldmFudCB0byBvYmplY3QgY2FjaGluZyB3aXRoaW4gdGhlIEJ0cmZzIGZpbGVzeXN0ZW1zLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoaXMgd291bGQgaGVscCBtZSBmb3JtIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI1OjIzLjY4MjY2NjU0NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgxNDYyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRyZnNfbnJfY2FjaGVkX29iamVjdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYnRyZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idHJmcy9zdXBlci5jPTI0MTc9c3RhdGljIGludCBidHJmc19zaG93X2Rldm5hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbi0tXFxuZnMvYnRyZnMvc3VwZXIuYy0yNDMyLVxcbmZzL2J0cmZzL3N1cGVyLmM6MjQzMzpzdGF0aWMgbG9uZyBidHJmc19ucl9jYWNoZWRfb2JqZWN0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbmZzL2J0cmZzL3N1cGVyLmMtMjQzNC17XFxuLS1cXG5mcy9idHJmcy9zdXBlci5jPTI1MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJ0cmZzX3N1cGVyX29wcyA9IHtcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmMtMjU0NS1cXHQudW5mcmVlemVfZnNcXHQ9IGJ0cmZzX3VuZnJlZXplLFxcbmZzL2J0cmZzL3N1cGVyLmM6MjU0NjpcXHQubnJfY2FjaGVkX29iamVjdHMgPSBidHJmc19ucl9jYWNoZWRfb2JqZWN0cyxcXG5mcy9idHJmcy9zdXBlci5jLTI1NDctXFx0LmZyZWVfY2FjaGVkX29iamVjdHMgPSBidHJmc19mcmVlX2NhY2hlZF9vYmplY3RzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNToyMy43NTA4MTgwOTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcyNTEwNTAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYW5kIEludGVncmF0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlcyBpbiBgZnMvYnRyZnMvc3VwZXIuY2AgYXJlIHByZXR0eSBtaW5vciwgYnV0IGxldCdzIGZvbGQgYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYCBpbnRvIHRoZSBmb2N1cyBzeW1ib2xzLiBXYWl0LCBob2xkIG9uLi4uIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBzb21ldGhpbmcgYWJvdXQgdGhpcyBiZWluZyBhIGdsb2JhbCBjb3VudGVyLCBub3QgaG9ub3JpbmcgYHNjLVx1MDAzZW1lbWNnYCwgYW5kIGJlaW5nIGZvciB0aGUgZ2xvYmFsIHNocmluayBwYXRoLiBTbywgdGhpcyBsb29rcyBsaWtlIGEgc21hbGwgb3B0aW1pemF0aW9uIG9yIGZpeC4gVGhlIGJ1bGsgb2YgdGhlIGxvZ2ljIGlzIGFjdHVhbGx5IGluIGBtbS9zaG1lbS5jYCwgc28gdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBsaWVzLlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYHNobWVtYCBmdW5jdGlvbnMuIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXRpYyBzdGF0dXMgb2YgZWFjaCBvZiB0aGVzZSBjcnVjaWFsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNobWVtIHN1YnN5c3RlbTogYHNobWVtX3VudXNlZF9odWdlX2FkZGAsIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLCBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAsIGBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlYCwgYHNobWVtX3VudXNlZF9odWdlX2Ryb3BgLCBgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hgLCBgc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1YCwgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AsIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuIE9rYXksIGFsbCBzdGF0aWMuIEdvb2QuXG5cbkknbGwgYWxzbyBjaGVjayBgc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZ2AsIGBpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZGAgYW5kIGBzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRgLiBBbGwgYXJlIHN0YXRpYy4gUGVyZmVjdC5cblxuTm93LCBsZXQncyBpbmNsdWRlIGFsbCB0aG9zZSBmdW5jdGlvbnMgSSBqdXN0IGNvbmZpcm1lZCBhcmUgc3RhdGljIGludG8gYEZvY3VzU3ltYm9sc2AuIFRoYXQgbWFrZXMgaXQsIGZvciBzdXJlLCBlYXNpZXIgdG8gdHJhY2sgdGhpcyBsb2dpYy4gU28gd2UgaGF2ZTpcblxuLSBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYFxuLSBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmBcbi0gYHNobWVtX3VudXNlZF9odWdlX2NvdW50YFxuLSBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYFxuLSBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYFxuLSBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWBcbi0gYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgXG4tIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYFxuLSBgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hgXG4tIGBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVgXG4tIGBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnYFxuLSBgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRgXG4tIGBzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRgXG5cbkFuZCwgc2luY2Ugd2UncmUgaGVyZSwgd2UgY2FuIGdvIGFoZWFkIGFuZCBpbmNsdWRlIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AgdG9vLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMuIFdlIGhhdmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYE1FTUNHYCwgYW5kIGBCVFJGU19GU2AgYXMgcmVsZXZhbnQuIEkgYWxzbyB3YW50IHRvIGNoZWNrIHdoZXRoZXIgYENPTkZJR19TSE1FTWAgaXMgbmVlZGVkLiBJdCdzIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGxldCdzIGJlIHRob3JvdWdoLiBXYWl0LCBpdCdzIG5vdCBleHBsaWNpdGx5ICpyZXF1aXJlZCosIGJ1dCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgICphcmUqIHBhcnQgb2YgdGhlIG5lY2Vzc2FyeSBjb25maWcuIEkgc2hvdWxkIGFsc28gc2VlIHdoZXRoZXIgYENPTkZJR19UTVBGU2AgaXMgbmVlZGVkLiBMZXQncyB0cmFjZSBpdCB0aHJvdWdoIGBtbS9zaG1lbS5jYCwgd2hpY2ggaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1NITUVNYCBpcyBlbmFibGVkLCBhbmQgdGhlbiBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2OTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MzMuNDc1OTI1Nzk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjE4OTcxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW0ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTMtXFx0XFx0XFx0ICAgcmVhZGFoZWFkLm8gZm9saW8ubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU0OlxcdFxcdFxcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcXFxcbm1tL01ha2VmaWxlLTU1LVxcdFxcdFxcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MzMuNzk3ODI3MjEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODIyODkwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBzaG1lbS5vYCBCdWlsZCBQcm9jZXNzKipcblxuUmlnaHQsIGBzaG1lbS5vYCBpcyBhIGNvcmUgcGFydCBvZiB0aGUgc3lzdGVtLCBzbyBpdHMgYWx3YXlzIGNvbXBpbGVkLCBhcyBleHBlY3RlZC4gQnV0LCBJJ20ganVzdCBxdWlja2x5IGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZyBieSBjaGVja2luZyB3aGVyZSB0aGF0J3MgYWN0dWFsbHkgZHJpdmVuLiBBaCwgaW50ZXJlc3RpbmcsIEkgc2VlIHRoZSBgQ09ORklHX1NITUVNYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIHVzZWQgKndpdGhpbiogYG1tL3NobWVtLmNgLiBUaGF0J3MgdGhlIGtleS4gVGhhdCB0ZWxscyBtZSB0aGF0IGNvbXBpbGF0aW9uIG9mIHRoYXQgbW9kdWxlIGlzIGNvbmRpdGlvbmVkIG9uIHRoYXQgY29uZmlnIG9wdGlvbi4gTm93LCB0aGF0J3Mgd2hhdCBJIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNTozNy40ODAxMTg1MjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MzI0Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TSE1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NDY9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XFxubW0vc2htZW0uYy00Ny1cXG5tbS9zaG1lbS5jOjQ4OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTQ5LS8qXFxuLS1cXG5tbS9zaG1lbS5jPTU5MDI9X19zZXR1cChcXFwidGhwX3NobWVtPVxcXCIsIHNldHVwX3RocF9zaG1lbSk7XFxuLS1cXG5tbS9zaG1lbS5jLTU5MDUtXFxubW0vc2htZW0uYzo1OTA2OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU5MDctXFxuLS1cXG5tbS9zaG1lbS5jPTU5NzU9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbm1tL3NobWVtLmMtNTk4Mi1cXG5tbS9zaG1lbS5jOjU5ODM6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xcbm1tL3NobWVtLmMtNTk4NC1cXG4tLVxcbm1tL3NobWVtLmM9NjEzNz1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vc2htZW0uYy02MTM5LXtcXG5tbS9zaG1lbS5jOjYxNDA6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL3NobWVtLmMtNjE0MS1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MzcuNTQ1NDQ3NTcxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyOTkzMTM4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zLCBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDpcblxuKipNeSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gYENPTkZJR19TSE1FTWAgaXMgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuIFRoYXQncyBhIHNvbGlkIGNob2ljZSwgc28gaXQncyBnb29kIHRvIGluY2x1ZGUgaXQuIEknbSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSBJIG5vdGUgdGhhdC5cblxuVGhlbiwgd2UndmUgYWxzbyBnb3QgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfTUVNQ0dgLiBUaG9zZSBhcmUgcHJldHR5IHN0YW5kYXJkLCBhbmQgcHJvYmFibHkgYmVpbmcgZHJpdmVuIGJ5IHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHJlcXVpcmVtZW50cyByZXNwZWN0aXZlbHkuIEFnYWluLCBtYWtlcyBzZW5zZSBhbmQgZ29vZCB0byBrbm93IHRoZXkgYXJlIGFjdGl2ZS5cblxuRmluYWxseSwgYENPTkZJR19CVFJGU19GU2AgaXMgcHJlc2VudC4gSSdtIGFzc3VtaW5nIHRoZXJlIGlzIGEgc3RyYXRlZ2ljIGNob2ljZSBmb3IgdGhhdCBmaWxlc3lzdGVtLCBwZXJoYXBzIHJlbGF0ZWQgdG8gc25hcHNob3RzLCBkYXRhIGludGVncml0eSwgb3IgZ2VuZXJhbCBzeXN0ZW0gbWFuYWdlbWVudCByZXF1aXJlbWVudHMuIEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIGluIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBiZWluZyBkcml2ZW4gYnkgdGhhdCBpbmNsdXNpb24uXG5cblJpZ2h0LCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgYWxsIG9mIHRoZXNlLCBzbyBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4ODYsIk91dHB1dFRva2VucyI6MzI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6NDIuODQ0NzYzNTc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyNzY0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9zY2FuXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9jb3VudFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfYWRkXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9kZWxcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX3JlcXVldWVcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2Ryb3BcIixcbiAgICBcImlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVcIixcbiAgICBcInNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2dcIixcbiAgICBcImlzX3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkXCIsXG4gICAgXCJzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRcIixcbiAgICBcImJ0cmZzX25yX2NhY2hlZF9vYmplY3RzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNobWVtIGhhbmRsZXMgdW51c2VkIGh1Z2UgcGFnZXMgd2hlbiBzaHJpbmtpbmcsIGludHJvZHVjaW5nIGxpc3RfbHJ1IGZvciBzaHJpbmtsaXN0IGluIHNobWVtX3NiX2luZm8uIEl0IGFsc28gbW9kaWZpZXMgc3VwZXJfY2FjaGVfc2NhbiBhbmQgc3VwZXJfY2FjaGVfY291bnQgaW4gZnMvc3VwZXIuYyB0byByZW1vdmUgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZSBhbmQgaW5zdGVhZCB1c2VzIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgaW4gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJUUkZTX0ZTXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNobWVtX3VudXNlZF9odWdlX3Nocmlua1wiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2Vfc2NhblwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfY291bnRcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2FkZFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfZGVsXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9kcm9wXCIsXG4gICAgXCJpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1XCIsXG4gICAgXCJzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnXCIsXG4gICAgXCJpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZFwiLFxuICAgIFwic2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkXCIsXG4gICAgXCJidHJmc19ucl9jYWNoZWRfb2JqZWN0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBzaG1lbSBoYW5kbGVzIHVudXNlZCBodWdlIHBhZ2VzIHdoZW4gc2hyaW5raW5nLCBpbnRyb2R1Y2luZyBsaXN0X2xydSBmb3Igc2hyaW5rbGlzdCBpbiBzaG1lbV9zYl9pbmZvLiBJdCBhbHNvIG1vZGlmaWVzIHN1cGVyX2NhY2hlX3NjYW4gYW5kIHN1cGVyX2NhY2hlX2NvdW50IGluIGZzL3N1cGVyLmMgdG8gcmVtb3ZlIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUgYW5kIGluc3RlYWQgdXNlcyBtZW1fY2dyb3VwX3Nocmlua19pc19yb290IGluIGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcrw6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 23:52:45 +0000 UTC FinishedAt: 2026-07-22 00:25:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG", "BTRFS_FS", "SHMEM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "3fe08b9796f36ef437ab9328e7dd1e5ff2d66603", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "MEMCG", "BTRFS_FS", "SHMEM" ], "series_id": "b7289142-0ccd-4786-b30a-55de36b69ef1" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shmem_unused_huge_shrink", "shmem_unused_huge_scan", "shmem_unused_huge_count", "shmem_unused_huge_add", "shmem_unused_huge_del", "shmem_unused_huge_isolate", "shmem_unused_huge_requeue", "shmem_unused_huge_drop", "is_shmem_unused_huge_match", "shmem_unused_huge_alloc_lru", "shmem_get_and_clear_memcg", "is_shmem_unused_huge_isolated", "set_shmem_unused_huge_isolated", "btrfs_nr_cached_objects" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NjYW4mIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfY291bnQmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfYWRkJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2RlbCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3JlcXVldWUmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfZHJvcCYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUmIzM0OywKICAgICYjMzQ7c2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZCYjMzQ7LAogICAgJiMzNDtzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7YnRyZnNfbnJfY2FjaGVkX29iamVjdHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNobWVtIGhhbmRsZXMgdW51c2VkIGh1Z2UgcGFnZXMgd2hlbiBzaHJpbmtpbmcsIGludHJvZHVjaW5nIGxpc3RfbHJ1IGZvciBzaHJpbmtsaXN0IGluIHNobWVtX3NiX2luZm8uIEl0IGFsc28gbW9kaWZpZXMgc3VwZXJfY2FjaGVfc2NhbiBhbmQgc3VwZXJfY2FjaGVfY291bnQgaW4gZnMvc3VwZXIuYyB0byByZW1vdmUgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZSBhbmQgaW5zdGVhZCB1c2VzIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgaW4gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQyYmEzMmRhYjMxZTFmMTM1OGM3MGFkZGU0OWViOGY0MTllZTI2YTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAwMDoyNDozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9idHJmcy9zdXBlci5jIGIvZnMvYnRyZnMvc3VwZXIuY1xuaW5kZXggYTdkODA0MjE5YmVjMzQuLmNjNDUzNzQzNTM5OTc2IDEwMDY0NFxuLS0tIGEvZnMvYnRyZnMvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYnRyZnMvc3VwZXIuY1xuQEAgLTIyLDYgJiM0MzsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pc2NkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21hZ2ljLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWVtY29udHJvbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmF0ZWxpbWl0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMmMuaFx1MDAzZVxuQEAgLTI0MzQsNiAmIzQzOzI0MzUsMTUgQEAgc3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm9cbiBcdHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gYnRyZnNfc2Ioc2IpO1xuIFx0Y29uc3QgczY0IG5yID0gcGVyY3B1X2NvdW50ZXJfcmVhZF9wb3NpdGl2ZShcdTAwMjZmc19pbmZvLVx1MDAzZWV2aWN0YWJsZV9leHRlbnRfbWFwcyk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZXZpY3RhYmxlIGV4dGVudCBtYXAgY291bnRlciBpcyBmaWxlc3lzdGVtLWdsb2JhbCBhbmQgZG9lcyBub3RcbiYjNDM7XHQgKiBob25vdXIgc2MtXHUwMDNlbWVtY2csIHNvIGl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiB0aGUgZ2xvYmFsIChrc3dhcGQgb3JcbiYjNDM7XHQgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2ZcbiYjNDM7XHQgKiBzaHJpbmtfc2xhYl9tZW1jZygpIHRvIGF2b2lkIHF1ZXVlaW5nIGR1cGxpY2F0ZSBnbG9iYWwgd29yay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0dHJhY2VfYnRyZnNfZXh0ZW50X21hcF9zaHJpbmtlcl9jb3VudChmc19pbmZvLCBucik7XG4gXG4gXHRyZXR1cm4gbnI7XG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDlmODJlNmIzOGYwN2VlLi45M2YyNGFlYTc1YzRkNiAxMDA2NDRcbi0tLSBhL2ZzL3N1cGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmNcbkBAIC0yNCw3ICYjNDM7MjQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuQEAgLTE3MSwxOSAmIzQzOzE3MCw2IEBAIHN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXG4gXHR3YWtlX3VwX3ZhcihcdTAwMjZzYi1cdTAwM2VzX2ZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBUaGUgc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBob29rcyAodXNlZCBmb3IgZXhhbXBsZSBieSBidHJmcyBhbmQgeGZzKVxuLSAqIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGUgYW5kIGlnbm9yZSBzYy1cdTAwM2VtZW1jZy4gRHJpdmluZyB0aGVtXG4tICogZnJvbSBwZXItbWVtY2cgc2hyaW5rX3NsYWJfbWVtY2coKSBpbnZvY2F0aW9ucyBvbmx5IGJ1cm5zIENQVSB3YWxraW5nXG4tICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uXG4tICogdGhlIGdsb2JhbCBwYXRoIChrc3dhcGQgb3Igcm9vdCBkaXJlY3QgcmVjbGFpbSkgcmVnYXJkbGVzcy4gUmVzdHJpY3QgdGhlbVxuLSAqIHRvIHRoYXQgcGF0aC5cbi0gKi9cbi1zdGF0aWMgaW5saW5lIGJvb2wgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLXtcbi1cdHJldHVybiAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKTtcbi19XG4tXG4gLypcbiAgKiBPbmUgdGhpbmcgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIHdpdGggYSBwZXItc2Igc2hyaW5rZXIgaXMgdGhhdCB3ZSBkb24mIzM5O3RcbiAgKiBkcm9wIHRoZSBsYXN0IGFjdGl2ZSByZWZlcmVuY2UgdG8gdGhlIHN1cGVyYmxvY2sgZnJvbSB3aXRoaW4gdGhlIHNocmlua2VyLlxuQEAgLTIxMyw3ICYjNDM7MTk5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdGlmICghc3VwZXJfdHJ5bG9ja19zaGFyZWQoc2IpKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjYgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpXG4mIzQzO1x0aWYgKHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMpXG4gXHRcdGZzX29iamVjdHMgPSBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7XG4gXG4gXHRpbm9kZXMgPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2ItXHUwMDNlc19pbm9kZV9scnUsIHNjKTtcbkBAIC0yNzQsOCAmIzQzOzI2MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxuIFx0XHRyZXR1cm4gMDtcbiBcdHNtcF9ybWIoKTtcbiBcbi1cdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUoc2MpKVxuJiM0MztcdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKVxuIFx0XHR0b3RhbF9vYmplY3RzID0gc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpO1xuIFxuIFx0dG90YWxfb2JqZWN0cyAmIzQzOz0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiLVx1MDAzZXNfZGVudHJ5X2xydSwgc2MpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbmluZGV4IDk1NzI2MDY3NzY3ODE1Li44MTcwYmI4MDY2YTIyZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuQEAgLTUyMCw2ICYjNDM7NTIwLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0cmV0dXJuIChtZW1jZyA9PSByb290X21lbV9jZ3JvdXApO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgLSBpcyB0aGlzIGEgZ2xvYmFsIG9yIHJvb3QtbWVtY2cgc2hyaW5rIGludm9jYXRpb24/XG4mIzQzOyAqIEBzYzogc2hyaW5rX2NvbnRyb2wgZGVzY3JpYmluZyB0aGUgY3VycmVudCBzaHJpbmtlciBjYWxsXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSB3aGVuIEBzYyByZXByZXNlbnRzIGEgZ2xvYmFsIHJlY2xhaW0gc2hyaW5rIChzYy1cdTAwM2VtZW1jZyA9PSBOVUxMKVxuJiM0MzsgKiBvciBhIHJvb3QtbWVtY2cgc2hyaW5rLCBpLmUuIG5vdCBhIHBlci1tZW1jZyBpdGVyYXRpb24gb2ZcbiYjNDM7ICogc2hyaW5rX3NsYWJfbWVtY2coKS4gRmlsZXN5c3RlbXMgd2hvc2UgLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKCkvXG4mIzQzOyAqIC1cdTAwM2VmcmVlX2NhY2hlZF9vYmplY3RzKCkgaW1wbGVtZW50YXRpb25zIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGVcbiYjNDM7ICogYW5kIGRvIG5vdCBob25vdXIgc2MtXHUwMDNlbWVtY2cgY2FuIHVzZSB0aGlzIHRvIGVhcmx5LXJldHVybiAwIGluIHBlci1tZW1jZ1xuJiM0MzsgKiBjb250ZXh0cy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIXNjLVx1MDAzZW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy1cdTAwM2VtZW1jZyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuIFx0cmV0dXJuIG9iamNnLVx1MDAzZWlzX3Jvb3Q7XG5AQCAtMTA3MSw2ICYjNDM7MTA4NywxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuaW5kZXggNTY2M2RmZjUzMTg2ZTIuLmFlYjU5OTAxYTg0MGM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbkBAIC0xMSw2ICYjNDM7MTEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzX3BhcnNlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcmZhdWx0ZmRfay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0cy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcdTAwM2VcbiBcbiAvKiBpbm9kZSBpbi1rZXJuZWwgZGF0YSAqL1xuIFxuQEAgLTU0LDYgJiM0Mzs1NSwxMSBAQCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgZHF1b3QgX19yY3VcdCppX2RxdW90W01BWFFVT1RBU107XG4gI2VuZGlmXG4gXHRzdHJ1Y3QgaW5vZGVcdFx0dmZzX2lub2RlO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwXHQqc2hyaW5rbGlzdF9tZW1jZztcbiYjNDM7XHRpbnRcdFx0XHRzaHJpbmtsaXN0X25pZDtcbiYjNDM7I2VuZGlmXG4gfTtcbiBcbiAjZGVmaW5lIFNITUVNX0ZMX1VTRVJfVklTSUJMRVx0XHQoRlNfRkxfVVNFUl9WSVNJQkxFIHwgRlNfQ0FTRUZPTERfRkwpXG5AQCAtODMsOSAmIzQzOzg5LDkgQEAgc3RydWN0IHNobWVtX3NiX2luZm8ge1xuIFx0aW5vX3QgbmV4dF9pbm87XHRcdCAgICAvKiBUaGUgbmV4dCBwZXItc2IgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xuIFx0aW5vX3QgX19wZXJjcHUgKmlub19iYXRjaDsgIC8qIFRoZSBuZXh0IHBlci1jcHUgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDsgICAgIC8qIGRlZmF1bHQgbWVtb3J5IHBvbGljeSBmb3IgbWFwcGluZ3MgKi9cbi1cdHNwaW5sb2NrX3Qgc2hyaW5rbGlzdF9sb2NrOyAgIC8qIFByb3RlY3RzIHNocmlua2xpc3QgKi9cbi1cdHN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdDsgIC8qIExpc3Qgb2Ygc2hpbmthYmxlIGlub2RlcyAqL1xuLVx0dW5zaWduZWQgbG9uZyBzaHJpbmtsaXN0X2xlbjsgLyogTGVuZ3RoIG9mIHNocmlua2xpc3QgKi9cbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdHN0cnVjdCBsaXN0X2xydSBzaHJpbmtsaXN0OyAvKiBMaXN0IG9mIHNocmlua2FibGUgaW5vZGVzICovXG4mIzQzOyNlbmRpZlxuIFx0c3RydWN0IHNobWVtX3F1b3RhX2xpbWl0cyBxbGltaXRzOyAvKiBEZWZhdWx0IHF1b3RhIGxpbWl0cyAqL1xuIFx0c3RydWN0IHNpbXBsZV94YXR0cl9jYWNoZSB4YV9jYWNoZTtcbiB9O1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBmMTg5ZDFhYzQwZGIyZC4uOGJmNmRkODUwZjg1YjQgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jXG5AQCAtNzI0LDUxICYjNDM7NzI0LDI0MiBAQCBzdGF0aWMgY29uc3QgY2hhciAqc2htZW1fZm9ybWF0X2h1Z2UoaW50IGh1Z2UpXG4gfVxuICNlbmRpZlxuIFxuJiM0MztzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gaW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9PSAtMTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9IC0xO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2c7XG4mIzQzO1xuJiM0MztcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiBtZW1jZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR1xuJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuJiM0MztzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0ICAgIGdmcF90IGdmcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuJiM0MztcdGlmICghbWVtY2cpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBnZnApO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKHJldCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWVtY2c7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcbiYjNDM7c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdCAgICBnZnBfdCBnZnApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZyA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHNiaW5mbywgZm9saW8sIGdmcCk7XG4mIzQzO1x0aWYgKElTX0VSUihtZW1jZykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdGlmICghbGlzdF9lbXB0eShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpKSB7XG4mIzQzO1x0XHQvKiBpc29sYXRlZCBvbiBzY2FuIGxpc3QsIGxldCBzaHJpbmsgaGFuZGxlIGl0ICovXG4mIzQzO1x0XHRpZiAoaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbykpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID09IG5pZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPT0gbWVtY2cpXG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7XHRcdGxpc3RfbHJ1X2RlbChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LFxuJiM0MztcdFx0XHQgICAgIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQsIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyk7XG4mIzQzO1x0XHRvbGRfbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XG4mIzQzO1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9IG5pZDtcbiYjNDM7XHRsaXN0X2xydV9hZGQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgbmlkLCBtZW1jZyk7XG4mIzQzO1x0bWVtY2cgPSBOVUxMO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChvbGRfbWVtY2cpO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KSkge1xuJiM0MztcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4mIzQzO1x0XHRcdCAgICAgaW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCwgaW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnKTtcbiYjNDM7XHRcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcbiYjNDM7XHR9XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuJiM0MztcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2M7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbiYjNDM7XHRcdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcbiYjNDM7XHRcdFx0XHRcdFx0IHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnO1xuJiM0MztcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xuJiM0MztcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB0cnlsb2NrIHRvIGF2b2lkIEFCQkEgZGVhZGxvY2s6IGFkZC9kZWwgcGF0aCB0YWtlcyBpbmZvLVx1MDAzZWxvY2tcbiYjNDM7XHQgKiBiZWZvcmUgdGhlIGxpc3RfbHJ1IGJ1Y2tldCBsb2NrLCB3aGlsZSBoZXJlIHRoZSBvcmRlciBpcyByZXZlcnNlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spKVxuJiM0MztcdFx0cmV0dXJuIExSVV9TS0lQO1xuJiM0MztcbiYjNDM7XHQvKiBwaW4gdGhlIGlub2RlICovXG4mIzQzO1x0aW5vZGUgPSBpZ3JhYihcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZSk7XG4mIzQzO1x0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xuJiM0MztcdGlmICghaW5vZGUpIHtcbiYjNDM7XHRcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcbiYjNDM7XHRcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO1x0XHRyZXR1cm4gTFJVX1JFTU9WRUQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XG4mIzQzO1x0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuJiM0MztcdHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKTtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2c2Nhbi1cdTAwM2VsaXN0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIExSVV9SRU1PVkVEO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbiYjNDM7XHRib29sIG1hdGNoO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgbm9uLXJvb3QgbWVtY2cgcmVjbGFpbSBuZWVkcyB0byBtYXRjaCB0aGUgZm9saW8gY2hhcmdlIGFnYWluc3RcbiYjNDM7XHQgKiBzYy1cdTAwM2VtZW1jZy4gU2tpcCB0aGUgZm9saW8gbWVtY2cgY2hlY2sgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4mIzQzO1x0ICogMS4gc2htZW0gcXVvdGEgcmVjbGFpbSAoc2MgPT0gTlVMTClcbiYjNDM7XHQgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbVxuJiM0MztcdCAqIDMuIHJvb3QgbWVtY2cgcmVjbGFpbVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghc2MgfHwgIXNjLVx1MDAzZW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy1cdTAwM2VtZW1jZykpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGZvbGlvX25pZChmb2xpbykgIT0gc2MtXHUwMDNlbmlkKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuJiM0MztcdG1hdGNoID0gbWVtY2cgPT0gc2MtXHUwMDNlbWVtY2c7XG4mIzQzO1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbWF0Y2g7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuJiM0MztcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG4mIzQzO1x0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG4mIzQzO1xuJiM0MztcdG1lbWNnID0gc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHNiaW5mbywgZm9saW8sIEdGUF9OT1dBSVQpO1xuJiM0MztcdGlmIChJU19FUlIobWVtY2cpKVxuJiM0MztcdFx0Z290byBkcm9wO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbiYjNDM7XHQvKiBSZXF1ZXVlIHRoZSBpbm9kZSB0byBzaHJpbmtsaXN0ICovXG4mIzQzO1x0bGlzdF9kZWxfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuJiM0MztcdGxpc3RfbHJ1X2FkZChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBuaWQsIG1lbWNnKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBtZW1jZztcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xuJiM0MztcdG1lbWNnID0gTlVMTDtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuJiM0MztcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuO1xuJiM0MztcbiYjNDM7ZHJvcDpcbiYjNDM7XHRzaG1lbV91bnVzZWRfaHVnZV9kcm9wKGlub2RlKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYywgdW5zaWduZWQgbG9uZyBucl90b19mcmVlKVxuIHtcbi1cdExJU1RfSEVBRChsaXN0KSwgKnBvcywgKm5leHQ7XG4mIzQzO1x0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2NhbjtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHR1bnNpZ25lZCBsb25nIGJhdGNoID0gc2MgPyBzYy1cdTAwM2Vucl90b19zY2FuIDogMTI4O1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKm5leHQ7XG4gXHR1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwO1xuIFxuLVx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpKVxuLVx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4tXG4tXHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCkge1xuLVx0XHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbi1cbi1cdFx0LyogcGluIHRoZSBpbm9kZSAqL1xuLVx0XHRpbm9kZSA9IGlncmFiKFx1MDAyNmluZm8tXHUwMDNldmZzX2lub2RlKTtcbi1cbi1cdFx0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xuLVx0XHRpZiAoIWlub2RlKSB7XG4tXHRcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuLVx0XHRcdGdvdG8gbmV4dDtcbi1cdFx0fVxuLVxuLVx0XHRsaXN0X21vdmUoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZsaXN0KTtcbi1uZXh0OlxuLVx0XHRzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4tLTtcbi1cdFx0aWYgKCEtLWJhdGNoKVxuLVx0XHRcdGJyZWFrO1xuLVx0fVxuLVx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4mIzQzO1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2Nhbi5saXN0KTtcbiYjNDM7XHRzY2FuLnNjID0gc2M7XG4mIzQzO1x0aWYgKHNjKVxuJiM0MztcdFx0bGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNjLFxuJiM0MztcdFx0XHRcdCAgICAgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZSwgXHUwMDI2c2Nhbik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bGlzdF9scnVfd2FsayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZSxcbiYjNDM7XHRcdFx0ICAgICAgXHUwMDI2c2NhbiwgMTI4KTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFx1MDAyNmxpc3QpIHtcbi1cdFx0cGdvZmZfdCBuZXh0LCBlbmQ7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgXHUwMDI2c2Nhbi5saXN0KSB7XG4mIzQzO1x0XHRwZ29mZl90IGZvbGlvX2VuZCwgZW5kO1xuIFx0XHRsb2ZmX3QgaV9zaXplO1xuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbiBcdFx0aW5vZGUgPSBcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZTtcbiBcbi1cdFx0aWYgKG5yX3RvX2ZyZWUgXHUwMDI2XHUwMDI2IGZyZWVkIFx1MDAzZT0gbnJfdG9fZnJlZSlcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbi1cbiBcdFx0aV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIFx0XHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLVx1MDAzZWlfbWFwcGluZywgaV9zaXplIC8gUEFHRV9TSVpFKTtcbiBcdFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpXG5AQCAtNzgxLDEzICYjNDM7OTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxuIFx0XHR9XG4gXG4gXHRcdC8qIENoZWNrIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvIGdhaW4gZnJvbSBzcGxpdHRpbmcgKi9cbi1cdFx0bmV4dCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fZW5kID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4gXHRcdGVuZCA9IHNobWVtX2ZhbGxvY2VuZChpbm9kZSwgRElWX1JPVU5EX1VQKGlfc2l6ZSwgUEFHRV9TSVpFKSk7XG4tXHRcdGlmIChlbmQgXHUwMDNjPSBmb2xpby1cdTAwM2VpbmRleCB8fCBlbmQgXHUwMDNlPSBuZXh0KSB7XG4mIzQzO1x0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gZm9saW9fZW5kKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdGlmICghaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goZm9saW8sIHNjYW4uc2MpKSB7XG4mIzQzO1x0XHRcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdFx0Z290byBwdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKG5yX3RvX2ZyZWUgXHUwMDI2XHUwMDI2IGZyZWVkIFx1MDAzZT0gbnJfdG9fZnJlZSkge1xuJiM0MztcdFx0XHRzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7XG4mIzQzO1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzQzO1x0XHRcdGdvdG8gcHV0O1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LypcbiBcdFx0ICogTW92ZSB0aGUgaW5vZGUgb24gdGhlIGxpc3QgYmFjayB0byBzaHJpbmtsaXN0IGlmIHdlIGZhaWxlZFxuIFx0XHQgKiB0byBsb2NrIHRoZSBwYWdlIGF0IHRoaXMgdGltZS5cbkBAIC03OTYsMzQgJiM0Mzs5OTksMzMgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdCAqIHJlY2xhaW0gcGF0aC5cbiBcdFx0ICovXG4gXHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbiYjNDM7XHRcdFx0c2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pO1xuJiM0MztcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0XHRnb3RvIHB1dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkge1xuJiM0MztcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiM0MztcdFx0XHRzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbiYjNDM7XHRcdFx0Z290byBwdXQ7XG4gXHRcdH1cbiBcbiBcdFx0cmV0ID0gc3BsaXRfZm9saW8oZm9saW8pO1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuLVx0XHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0XHQvKiBJZiBzcGxpdCBmYWlsZWQgbW92ZSB0aGUgaW5vZGUgb24gdGhlIGxpc3QgYmFjayB0byBzaHJpbmtsaXN0ICovXG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0Z290byBtb3ZlX2JhY2s7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdFx0Z290byBwdXQ7XG4mIzQzO1x0XHR9XG4gXG4tXHRcdGZyZWVkICYjNDM7PSBuZXh0IC0gZW5kO1xuJiM0MztcdFx0ZnJlZWQgJiM0Mzs9IGZvbGlvX2VuZCAtIGVuZDtcbiBcdFx0c3BsaXQmIzQzOyYjNDM7O1xuJiM0MztcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBkcm9wOlxuLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tXHRcdGdvdG8gcHV0O1xuLW1vdmVfYmFjazpcbi1cdFx0Lypcbi1cdFx0ICogTWFrZSBzdXJlIHRoZSBpbm9kZSBpcyBlaXRoZXIgb24gdGhlIGdsb2JhbCBsaXN0IG9yIGRlbGV0ZWRcbi1cdFx0ICogZnJvbSBhbnkgbG9jYWwgbGlzdCBiZWZvcmUgaXB1dCgpIHNpbmNlIGl0IGNvdWxkIGJlIGRlbGV0ZWRcbi1cdFx0ICogaW4gYW5vdGhlciB0aHJlYWQgb25jZSB3ZSBwdXQgdGhlIGlub2RlICh0aGVuIHRoZSBsb2NhbCBsaXN0XG4tXHRcdCAqIGlzIGNvcnJ1cHRlZCkuXG4tXHRcdCAqL1xuLVx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdGxpc3RfbW92ZShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsIFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuJiM0MzsmIzQzOztcbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4mIzQzO1x0XHRzaG1lbV91bnVzZWRfaHVnZV9kcm9wKGlub2RlKTtcbiBwdXQ6XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0fVxuQEAgLTgzNiw3ICYjNDM7MTAzOCw3IEBAIHN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX3NjYW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuIFxuLVx0aWYgKCFSRUFEX09OQ0Uoc2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKSlcbiYjNDM7XHRpZiAoIWxpc3RfbHJ1X3Nocmlua19jb3VudChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2MpKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4gXHRyZXR1cm4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgc2MsIDApO1xuQEAgLTg0NiwxMiAmIzQzOzEwNDgsMjIgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuLVx0cmV0dXJuIFJFQURfT05DRShzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbGlzdF9scnVfc2hyaW5rX2NvdW50KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBzYyk7XG4gfVxuICNlbHNlIC8qICFDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbiAjZGVmaW5lIHNobWVtX2h1Z2UgU0hNRU1fSFVHRV9ERU5ZXG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdCAgZ2ZwX3QgZ2ZwKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcbiB7XG5AQCAtMTQwNywxNCAmIzQzOzE2MTksNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSAwO1xuIFx0XHRtYXBwaW5nX3NldF9leGl0aW5nKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXHRcdHNobWVtX3RydW5jYXRlX3JhbmdlKGlub2RlLCAwLCAobG9mZl90KS0xKTtcbi1cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbi0tO1xuLVx0XHRcdH1cbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdFx0fVxuJiM0MztcdFx0c2htZW1fdW51c2VkX2h1Z2VfZGVsKGlub2RlKTtcbiBcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc3dhcGxpc3QpKSB7XG4gXHRcdFx0LyogV2FpdCB3aGlsZSBzaG1lbV91bnVzZSgpIGlzIHNjYW5uaW5nIHRoaXMgaW5vZGUuLi4gKi9cbiBcdFx0XHR3YWl0X3Zhcl9ldmVudChcdTAwMjZpbmZvLVx1MDAzZXN0b3BfZXZpY3Rpb24sXG5AQCAtMjUyMiwyOCAmIzQzOzI3MjcsNiBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcbiBhbGxvY2VkOlxuIFx0YWxsb2NlZCA9IHRydWU7XG4tXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2XG4tXHQgICAgRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKSBcdTAwM2Ncbi1cdFx0XHRcdFx0Zm9saW9fbmV4dF9pbmRleChmb2xpbykpIHtcbi1cdFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0XHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuLVx0XHQvKlxuLVx0XHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XG4tXHRcdCAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4tXHRcdCAqL1xuLVx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdC8qXG4tXHRcdCAqIF9jYXJlZnVsIHRvIGRlZmVuZCBhZ2FpbnN0IHVubG9ja2VkIGFjY2VzcyB0b1xuLVx0XHQgKiAtXHUwMDNlc2hyaW5rX2xpc3QgaW4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKClcbi1cdFx0ICovXG4tXHRcdGlmIChsaXN0X2VtcHR5X2NhcmVmdWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KSkge1xuLVx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LFxuLVx0XHRcdFx0ICAgICAgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuLVx0XHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbiYjNDM7JiM0Mzs7XG4tXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHR9XG4tXG4gXHRpZiAoc2dwID09IFNHUF9XUklURSlcbiBcdFx0Zm9saW9fc2V0X3JlZmVyZW5jZWQoZm9saW8pO1xuIFx0LypcbkBAIC0yNTcyLDYgJiM0MzsyNzU1LDE1IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuIFx0XHRlcnJvciA9IC1FSU5WQUw7XG4gXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRpZiAoYWxsb2NlZCBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXHUwMDNjIGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdFxuJiM0MztcdFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2htZW1fdW51c2VkX2h1Z2VfYWRkKGlub2RlLCBmb2xpbywgZ2ZwKTtcbiYjNDM7XHR9XG4gb3V0OlxuIFx0KmZvbGlvcCA9IGZvbGlvO1xuIFx0cmV0dXJuIDA7XG5AQCAtMzA0OCw2ICYjNDM7MzI0MCwxMCBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpfX3NobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChpbmZvLVx1MDAzZWZzZmxhZ3MpXG4gXHRcdHNobWVtX3NldF9pbm9kZV9mbGFncyhpbm9kZSwgaW5mby1cdTAwM2Vmc2ZsYWdzLCBOVUxMKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4mIzQzOyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xuJiM0MztcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPSAtMTtcbiYjNDM7I2VuZGlmXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZXN3YXBsaXN0KTtcbiBcdGNhY2hlX25vX2FjbChpbm9kZSk7XG4gXHRpZiAoc2JpbmZvLVx1MDAzZW5vc3dhcClcbkBAIC00OTE0LDYgJiM0Mzs1MTEwLDkgQEAgc3RhdGljIHZvaWQgc2htZW1fcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gI2VuZGlmXG4gXHRmcmVlX3BlcmNwdShzYmluZm8tXHUwMDNlaW5vX2JhdGNoKTtcbiBcdHBlcmNwdV9jb3VudGVyX2Rlc3Ryb3koXHUwMDI2c2JpbmZvLVx1MDAzZXVzZWRfYmxvY2tzKTtcbiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MztcdGxpc3RfbHJ1X2Rlc3Ryb3koXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpO1xuJiM0MzsjZW5kaWZcbiBcdG1wb2xfcHV0KHNiaW5mby1cdTAwM2VtcG9sKTtcbiAjaWZkZWYgQ09ORklHX1RNUEZTX1hBVFRSXG4gXHRzaW1wbGVfeGF0dHJfY2FjaGVfY2xlYW51cChcdTAwMjZzYmluZm8tXHUwMDNleGFfY2FjaGUpO1xuQEAgLTUwMDcsOCAmIzQzOzUyMDYsMTEgQEAgc3RhdGljIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZzYmluZm8tXHUwMDNlc3RhdF9sb2NrKTtcbiBcdGlmIChwZXJjcHVfY291bnRlcl9pbml0KFx1MDAyNnNiaW5mby1cdTAwM2V1c2VkX2Jsb2NrcywgMCwgR0ZQX0tFUk5FTCkpXG4gXHRcdGdvdG8gZmFpbGVkO1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNiLVx1MDAzZXNfc2hyaW5rKSlcbiYjNDM7XHRcdGdvdG8gZmFpbGVkO1xuJiM0MzsjZW5kaWZcbiBcbiBcdHNiLVx1MDAzZXNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFO1xuIFx0c2ItXHUwMDNlc19ibG9ja3NpemUgPSBQQUdFX1NJWkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NjYW4mIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfY291bnQmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfYWRkJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2RlbCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3JlcXVldWUmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfZHJvcCYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUmIzM0OywKICAgICYjMzQ7c2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZCYjMzQ7LAogICAgJiMzNDtzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7YnRyZnNfbnJfY2FjaGVkX29iamVjdHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNobWVtIGhhbmRsZXMgdW51c2VkIGh1Z2UgcGFnZXMgd2hlbiBzaHJpbmtpbmcsIGludHJvZHVjaW5nIGxpc3RfbHJ1IGZvciBzaHJpbmtsaXN0IGluIHNobWVtX3NiX2luZm8uIEl0IGFsc28gbW9kaWZpZXMgc3VwZXJfY2FjaGVfc2NhbiBhbmQgc3VwZXJfY2FjaGVfY291bnQgaW4gZnMvc3VwZXIuYyB0byByZW1vdmUgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZSBhbmQgaW5zdGVhZCB1c2VzIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgaW4gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDJiYTMyZGFiMzFlMWYxMzU4YzcwYWRkZTQ5ZWI4ZjQxOWVlMjZhMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDIyIDAwOjI0OjM5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggYTdkODA0MjE5YmVjMzQuLmNjNDUzNzQzNTM5OTc2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2J0cmZzL3N1cGVyLmMKQEAgLTIyLDYgJiM0MzsyMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbmFtZWkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9taXNjZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbWFnaWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtY29udHJvbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYXRlbGltaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcmMzMmMuaCZndDsKQEAgLTI0MzQsNiAmIzQzOzI0MzUsMTUgQEAgc3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm8KIAlzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IGJ0cmZzX3NiKHNiKTsKIAljb25zdCBzNjQgbnIgPSBwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0aXZlKCZhbXA7ZnNfaW5mby0mZ3Q7ZXZpY3RhYmxlX2V4dGVudF9tYXBzKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGUgZXZpY3RhYmxlIGV4dGVudCBtYXAgY291bnRlciBpcyBmaWxlc3lzdGVtLWdsb2JhbCBhbmQgZG9lcyBub3QKJiM0MzsJICogaG9ub3VyIHNjLSZndDttZW1jZywgc28gaXQgaXMgb25seSBtZWFuaW5nZnVsIG9uIHRoZSBnbG9iYWwgKGtzd2FwZCBvcgomIzQzOwkgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2YKJiM0MzsJICogc2hyaW5rX3NsYWJfbWVtY2coKSB0byBhdm9pZCBxdWV1ZWluZyBkdXBsaWNhdGUgZ2xvYmFsIHdvcmsuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJdHJhY2VfYnRyZnNfZXh0ZW50X21hcF9zaHJpbmtlcl9jb3VudChmc19pbmZvLCBucik7CiAKIAlyZXR1cm4gbnI7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA5ZjgyZTZiMzhmMDdlZS4uOTNmMjRhZWE3NWM0ZDYgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvc3VwZXIuYwpAQCAtMjQsNyAmIzQzOzI0LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9leHBvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmxrZGV2LmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bGludXgvbWVtY29udHJvbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JoYXNodGFibGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb3VudC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CkBAIC0xNzEsMTkgJiM0MzsxNzAsNiBAQCBzdGF0aWMgdm9pZCBzdXBlcl93YWtlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBmbGFnKQogCXdha2VfdXBfdmFyKCZhbXA7c2ItJmd0O3NfZmxhZ3MpOwogfQogCi0vKgotICogVGhlIHNfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzIGhvb2tzICh1c2VkIGZvciBleGFtcGxlIGJ5IGJ0cmZzIGFuZCB4ZnMpCi0gKiBvcGVyYXRlIG9uIGZpbGVzeXN0ZW0tZ2xvYmFsIHN0YXRlIGFuZCBpZ25vcmUgc2MtJmd0O21lbWNnLiBEcml2aW5nIHRoZW0KLSAqIGZyb20gcGVyLW1lbWNnIHNocmlua19zbGFiX21lbWNnKCkgaW52b2NhdGlvbnMgb25seSBidXJucyBDUFUgd2Fsa2luZwotICogcGVyLWNwdSBjb3VudGVycyBhbmQgcXVldWVpbmcgZHVwbGljYXRlIHdvcms6IHRoZSBhY3R1YWwgcmVjbGFpbSBoYXBwZW5zIG9uCi0gKiB0aGUgZ2xvYmFsIHBhdGggKGtzd2FwZCBvciByb290IGRpcmVjdCByZWNsYWltKSByZWdhcmRsZXNzLiBSZXN0cmljdCB0aGVtCi0gKiB0byB0aGF0IHBhdGguCi0gKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCi17Ci0JcmV0dXJuICFzYy0mZ3Q7bWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLSZndDttZW1jZyk7Ci19Ci0KIC8qCiAgKiBPbmUgdGhpbmcgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIG9mIHdpdGggYSBwZXItc2Igc2hyaW5rZXIgaXMgdGhhdCB3ZSBkb24mIzM5O3QKICAqIGRyb3AgdGhlIGxhc3QgYWN0aXZlIHJlZmVyZW5jZSB0byB0aGUgc3VwZXJibG9jayBmcm9tIHdpdGhpbiB0aGUgc2hyaW5rZXIuCkBAIC0yMTMsNyAmIzQzOzE5OSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssCiAJaWYgKCFzdXBlcl90cnlsb2NrX3NoYXJlZChzYikpCiAJCXJldHVybiBTSFJJTktfU1RPUDsKIAotCWlmIChzYi0mZ3Q7c19vcC0mZ3Q7bnJfY2FjaGVkX29iamVjdHMgJmFtcDsmYW1wOyBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSkKJiM0MzsJaWYgKHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cykKIAkJZnNfb2JqZWN0cyA9IHNiLSZndDtzX29wLSZndDtucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpOwogCiAJaW5vZGVzID0gbGlzdF9scnVfc2hyaW5rX2NvdW50KCZhbXA7c2ItJmd0O3NfaW5vZGVfbHJ1LCBzYyk7CkBAIC0yNzQsOCAmIzQzOzI2MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLAogCQlyZXR1cm4gMDsKIAlzbXBfcm1iKCk7CiAKLQlpZiAoc2ItJmd0O3Nfb3AgJmFtcDsmYW1wOyBzYi0mZ3Q7c19vcC0mZ3Q7bnJfY2FjaGVkX29iamVjdHMgJmFtcDsmYW1wOwotCSAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSkKJiM0MzsJaWYgKHNiLSZndDtzX29wICZhbXA7JmFtcDsgc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzKQogCQl0b3RhbF9vYmplY3RzID0gc2ItJmd0O3Nfb3AtJmd0O25yX2NhY2hlZF9vYmplY3RzKHNiLCBzYyk7CiAKIAl0b3RhbF9vYmplY3RzICYjNDM7PSBsaXN0X2xydV9zaHJpbmtfY291bnQoJmFtcDtzYi0mZ3Q7c19kZW50cnlfbHJ1LCBzYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDk1NzI2MDY3NzY3ODE1Li44MTcwYmI4MDY2YTIyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgKQEAgLTUyMCw2ICYjNDM7NTIwLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCXJldHVybiAobWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgLSBpcyB0aGlzIGEgZ2xvYmFsIG9yIHJvb3QtbWVtY2cgc2hyaW5rIGludm9jYXRpb24/CiYjNDM7ICogQHNjOiBzaHJpbmtfY29udHJvbCBkZXNjcmliaW5nIHRoZSBjdXJyZW50IHNocmlua2VyIGNhbGwKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSB3aGVuIEBzYyByZXByZXNlbnRzIGEgZ2xvYmFsIHJlY2xhaW0gc2hyaW5rIChzYy0mZ3Q7bWVtY2cgPT0gTlVMTCkKJiM0MzsgKiBvciBhIHJvb3QtbWVtY2cgc2hyaW5rLCBpLmUuIG5vdCBhIHBlci1tZW1jZyBpdGVyYXRpb24gb2YKJiM0MzsgKiBzaHJpbmtfc2xhYl9tZW1jZygpLiBGaWxlc3lzdGVtcyB3aG9zZSAtJmd0O25yX2NhY2hlZF9vYmplY3RzKCkvCiYjNDM7ICogLSZndDtmcmVlX2NhY2hlZF9vYmplY3RzKCkgaW1wbGVtZW50YXRpb25zIG9wZXJhdGUgb24gZmlsZXN5c3RlbS1nbG9iYWwgc3RhdGUKJiM0MzsgKiBhbmQgZG8gbm90IGhvbm91ciBzYy0mZ3Q7bWVtY2cgY2FuIHVzZSB0aGlzIHRvIGVhcmx5LXJldHVybiAwIGluIHBlci1tZW1jZwomIzQzOyAqIGNvbnRleHRzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpCiYjNDM7ewomIzQzOwlyZXR1cm4gIXNjLSZndDttZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtJmd0O21lbWNnKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZykKIHsKIAlyZXR1cm4gb2JqY2ctJmd0O2lzX3Jvb3Q7CkBAIC0xMDcxLDYgJiM0MzsxMDg3LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc3RydWN0IHNocmlua19jb250cm9sICpzYykKJiM0Mzt7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKQogewogCXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCmluZGV4IDU2NjNkZmY1MzE4NmUyLi5hZWI1OTkwMWE4NDBjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaApAQCAtMTEsNiAmIzQzOzExLDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9mc19wYXJzZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91c2VyZmF1bHRmZF9rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9saXN0X2xydS5oJmd0OwogCiAvKiBpbm9kZSBpbi1rZXJuZWwgZGF0YSAqLwogCkBAIC01NCw2ICYjNDM7NTUsMTEgQEAgc3RydWN0IHNobWVtX2lub2RlX2luZm8gewogCXN0cnVjdCBkcXVvdCBfX3JjdQkqaV9kcXVvdFtNQVhRVU9UQVNdOwogI2VuZGlmCiAJc3RydWN0IGlub2RlCQl2ZnNfaW5vZGU7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cAkqc2hyaW5rbGlzdF9tZW1jZzsKJiM0MzsJaW50CQkJc2hyaW5rbGlzdF9uaWQ7CiYjNDM7I2VuZGlmCiB9OwogCiAjZGVmaW5lIFNITUVNX0ZMX1VTRVJfVklTSUJMRQkJKEZTX0ZMX1VTRVJfVklTSUJMRSB8IEZTX0NBU0VGT0xEX0ZMKQpAQCAtODMsOSAmIzQzOzg5LDkgQEAgc3RydWN0IHNobWVtX3NiX2luZm8gewogCWlub190IG5leHRfaW5vOwkJICAgIC8qIFRoZSBuZXh0IHBlci1zYiBpbm9kZSBudW1iZXIgdG8gdXNlICovCiAJaW5vX3QgX19wZXJjcHUgKmlub19iYXRjaDsgIC8qIFRoZSBuZXh0IHBlci1jcHUgaW5vZGUgbnVtYmVyIHRvIHVzZSAqLwogCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovCi0Jc3BpbmxvY2tfdCBzaHJpbmtsaXN0X2xvY2s7ICAgLyogUHJvdGVjdHMgc2hyaW5rbGlzdCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdDsgIC8qIExpc3Qgb2Ygc2hpbmthYmxlIGlub2RlcyAqLwotCXVuc2lnbmVkIGxvbmcgc2hyaW5rbGlzdF9sZW47IC8qIExlbmd0aCBvZiBzaHJpbmtsaXN0ICovCiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdDsgLyogTGlzdCBvZiBzaHJpbmthYmxlIGlub2RlcyAqLwomIzQzOyNlbmRpZgogCXN0cnVjdCBzaG1lbV9xdW90YV9saW1pdHMgcWxpbWl0czsgLyogRGVmYXVsdCBxdW90YSBsaW1pdHMgKi8KIAlzdHJ1Y3Qgc2ltcGxlX3hhdHRyX2NhY2hlIHhhX2NhY2hlOwogfTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IGYxODlkMWFjNDBkYjJkLi44YmY2ZGQ4NTBmODViNCAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zaG1lbS5jCkBAIC03MjQsNTEgJiM0Mzs3MjQsMjQyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9mb3JtYXRfaHVnZShpbnQgaHVnZSkKIH0KICNlbmRpZgogCiYjNDM7c3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwomIzQzOwlyZXR1cm4gaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPT0gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbmlkID0gLTE7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2c7CiYjNDM7CiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2cgPSBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gbWVtY2c7CiYjNDM7fQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0cKJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKgomIzQzO3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7CiYjNDM7CWlmICghbWVtY2cpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0ID0gbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csICZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCBnZnApOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7CQlyZXR1cm4gRVJSX1BUUihyZXQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBtZW1jZzsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKgomIzQzO3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCSAgICBnZnBfdCBnZnApCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSAgZ2ZwX3QgZ2ZwKQomIzQzO3sKJiM0MzsJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKJiM0MzsJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJaW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEwsICpvbGRfbWVtY2cgPSBOVUxMOwomIzQzOwomIzQzOwltZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApOwomIzQzOwlpZiAoSVNfRVJSKG1lbWNnKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aW5mby0mZ3Q7bG9jayk7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpKSB7CiYjNDM7CQkvKiBpc29sYXRlZCBvbiBzY2FuIGxpc3QsIGxldCBzaHJpbmsgaGFuZGxlIGl0ICovCiYjNDM7CQlpZiAoaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbykpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPT0gbmlkICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpbmZvLSZndDtzaHJpbmtsaXN0X21lbWNnID09IG1lbWNnKQomIzQzOwkJCWdvdG8gdW5sb2NrOwomIzQzOwomIzQzOwkJbGlzdF9scnVfZGVsKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QsCiYjNDM7CQkJICAgICBpbmZvLSZndDtzaHJpbmtsaXN0X25pZCwgaW5mby0mZ3Q7c2hyaW5rbGlzdF9tZW1jZyk7CiYjNDM7CQlvbGRfbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2cgPSBtZW1jZzsKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPSBuaWQ7CiYjNDM7CWxpc3RfbHJ1X2FkZCgmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCwgJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0LCBuaWQsIG1lbWNnKTsKJiM0MzsJbWVtY2cgPSBOVUxMOwomIzQzO3VubG9jazoKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJbWVtX2Nncm91cF9wdXQob2xkX21lbWNnKTsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwlpZiAoIWxpc3RfZW1wdHkoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KSkgewomIzQzOwkJbGlzdF9scnVfZGVsKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QsCiYjNDM7CQkJICAgICBpbmZvLSZndDtzaHJpbmtsaXN0X25pZCwgaW5mby0mZ3Q7c2hyaW5rbGlzdF9tZW1jZyk7CiYjNDM7CQltZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7CiYjNDM7CX0KJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzO30KJiM0MzsKJiM0MztzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJc3RydWN0IHNocmlua19jb250cm9sICpzYzsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLAomIzQzOwkJCQkJCSBzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsCiYjNDM7CQkJCQkJIHZvaWQgKmFyZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnOwomIzQzOwlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbzsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKJiM0MzsKJiM0MzsJaW5mbyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgdHJ5bG9jayB0byBhdm9pZCBBQkJBIGRlYWRsb2NrOiBhZGQvZGVsIHBhdGggdGFrZXMgaW5mby0mZ3Q7bG9jawomIzQzOwkgKiBiZWZvcmUgdGhlIGxpc3RfbHJ1IGJ1Y2tldCBsb2NrLCB3aGlsZSBoZXJlIHRoZSBvcmRlciBpcyByZXZlcnNlZC4KJiM0MzsJICovCiYjNDM7CWlmICghc3Bpbl90cnlsb2NrKCZhbXA7aW5mby0mZ3Q7bG9jaykpCiYjNDM7CQlyZXR1cm4gTFJVX1NLSVA7CiYjNDM7CiYjNDM7CS8qIHBpbiB0aGUgaW5vZGUgKi8KJiM0MzsJaW5vZGUgPSBpZ3JhYigmYW1wO2luZm8tJmd0O3Zmc19pbm9kZSk7CiYjNDM7CS8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi8KJiM0MzsJaWYgKCFpbm9kZSkgewomIzQzOwkJbGlzdF9scnVfaXNvbGF0ZShscnUsIGl0ZW0pOwomIzQzOwkJbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pOwomIzQzOwkJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJCW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsJCXJldHVybiBMUlVfUkVNT1ZFRDsKJiM0MzsJfQomIzQzOwomIzQzOwlsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7CiYjNDM7CW1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTsKJiM0MzsJc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKGluZm8pOwomIzQzOwlsaXN0X2FkZF90YWlsKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwgJmFtcDtzY2FuLSZndDtsaXN0KTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzOwomIzQzOwlyZXR1cm4gTFJVX1JFTU9WRUQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDsKJiM0MzsJYm9vbCBtYXRjaDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT25seSBub24tcm9vdCBtZW1jZyByZWNsYWltIG5lZWRzIHRvIG1hdGNoIHRoZSBmb2xpbyBjaGFyZ2UgYWdhaW5zdAomIzQzOwkgKiBzYy0mZ3Q7bWVtY2cuIFNraXAgdGhlIGZvbGlvIG1lbWNnIGNoZWNrIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOgomIzQzOwkgKiAxLiBzaG1lbSBxdW90YSByZWNsYWltIChzYyA9PSBOVUxMKQomIzQzOwkgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbQomIzQzOwkgKiAzLiByb290IG1lbWNnIHJlY2xhaW0KJiM0MzsJICovCiYjNDM7CWlmICghc2MgfHwgIXNjLSZndDttZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtJmd0O21lbWNnKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlpZiAoZm9saW9fbmlkKGZvbGlvKSAhPSBzYy0mZ3Q7bmlkKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwltZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwomIzQzOwltYXRjaCA9IG1lbWNnID09IHNjLSZndDttZW1jZzsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzOwomIzQzOwlyZXR1cm4gbWF0Y2g7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2luZm8tJmd0O2xvY2spOwomIzQzOwlsaXN0X2RlbF9pbml0KCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aW5mby0mZ3Q7bG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7CiYjNDM7CXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS0mZ3Q7aV9zYik7CiYjNDM7CXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKJiM0MzsJaW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7CiYjNDM7CiYjNDM7CW1lbWNnID0gc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHNiaW5mbywgZm9saW8sIEdGUF9OT1dBSVQpOwomIzQzOwlpZiAoSVNfRVJSKG1lbWNnKSkKJiM0MzsJCWdvdG8gZHJvcDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aW5mby0mZ3Q7bG9jayk7CiYjNDM7CS8qIFJlcXVldWUgdGhlIGlub2RlIHRvIHNocmlua2xpc3QgKi8KJiM0MzsJbGlzdF9kZWxfaW5pdCgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpOwomIzQzOwlsaXN0X2xydV9hZGQoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QsICZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCwgbmlkLCBtZW1jZyk7CiYjNDM7CWluZm8tJmd0O3Nocmlua2xpc3RfbWVtY2cgPSBtZW1jZzsKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPSBuaWQ7CiYjNDM7CW1lbWNnID0gTlVMTDsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbmZvLSZndDtsb2NrKTsKJiM0MzsJbWVtX2Nncm91cF9wdXQobWVtY2cpOwomIzQzOwomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7ZHJvcDoKJiM0MzsJc2htZW1fdW51c2VkX2h1Z2VfZHJvcChpbm9kZSk7CiYjNDM7fQomIzQzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sCiAJCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSkKIHsKLQlMSVNUX0hFQUQobGlzdCksICpwb3MsICpuZXh0OwomIzQzOwlzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiBzY2FuOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKLQl1bnNpZ25lZCBsb25nIGJhdGNoID0gc2MgPyBzYy0mZ3Q7bnJfdG9fc2NhbiA6IDEyODsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwOwogCi0JaWYgKGxpc3RfZW1wdHkoJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpKQotCQlyZXR1cm4gU0hSSU5LX1NUT1A7Ci0KLQlzcGluX2xvY2soJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3QpIHsKLQkJaW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7Ci0KLQkJLyogcGluIHRoZSBpbm9kZSAqLwotCQlpbm9kZSA9IGlncmFiKCZhbXA7aW5mby0mZ3Q7dmZzX2lub2RlKTsKLQotCQkvKiBpbm9kZSBpcyBhYm91dCB0byBiZSBldmljdGVkICovCi0JCWlmICghaW5vZGUpIHsKLQkJCWxpc3RfZGVsX2luaXQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKLQkJCWdvdG8gbmV4dDsKLQkJfQotCi0JCWxpc3RfbW92ZSgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QsICZhbXA7bGlzdCk7Ci1uZXh0OgotCQlzYmluZm8tJmd0O3Nocmlua2xpc3RfbGVuLS07Ci0JCWlmICghLS1iYXRjaCkKLQkJCWJyZWFrOwotCX0KLQlzcGluX3VubG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtzY2FuLmxpc3QpOwomIzQzOwlzY2FuLnNjID0gc2M7CiYjNDM7CWlmIChzYykKJiM0MzsJCWxpc3RfbHJ1X3Nocmlua193YWxrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCBzYywKJiM0MzsJCQkJICAgICBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlLCAmYW1wO3NjYW4pOwomIzQzOwllbHNlCiYjNDM7CQlsaXN0X2xydV93YWxrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlLAomIzQzOwkJCSAgICAgICZhbXA7c2NhbiwgMTI4KTsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsICZhbXA7bGlzdCkgewotCQlwZ29mZl90IG5leHQsIGVuZDsKJiM0MzsJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgJmFtcDtzY2FuLmxpc3QpIHsKJiM0MzsJCXBnb2ZmX3QgZm9saW9fZW5kLCBlbmQ7CiAJCWxvZmZfdCBpX3NpemU7CiAJCWludCByZXQ7CiAKIAkJaW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7CiAJCWlub2RlID0gJmFtcDtpbmZvLSZndDt2ZnNfaW5vZGU7CiAKLQkJaWYgKG5yX3RvX2ZyZWUgJmFtcDsmYW1wOyBmcmVlZCAmZ3Q7PSBucl90b19mcmVlKQotCQkJZ290byBtb3ZlX2JhY2s7Ci0KIAkJaV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCQlmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLSZndDtpX21hcHBpbmcsIGlfc2l6ZSAvIFBBR0VfU0laRSk7CiAJCWlmICghZm9saW8gfHwgeGFfaXNfdmFsdWUoZm9saW8pKQpAQCAtNzgxLDEzICYjNDM7OTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLAogCQl9CiAKIAkJLyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZ2FpbiBmcm9tIHNwbGl0dGluZyAqLwotCQluZXh0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7CiYjNDM7CQlmb2xpb19lbmQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTsKIAkJZW5kID0gc2htZW1fZmFsbG9jZW5kKGlub2RlLCBESVZfUk9VTkRfVVAoaV9zaXplLCBQQUdFX1NJWkUpKTsKLQkJaWYgKGVuZCAmbHQ7PSBmb2xpby0mZ3Q7aW5kZXggfHwgZW5kICZndDs9IG5leHQpIHsKJiM0MzsJCWlmIChlbmQgJmx0Oz0gZm9saW8tJmd0O2luZGV4IHx8IGVuZCAmZ3Q7PSBmb2xpb19lbmQpIHsKIAkJCWZvbGlvX3B1dChmb2xpbyk7CiAJCQlnb3RvIGRyb3A7CiAJCX0KIAomIzQzOwkJaWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHsKJiM0MzsJCQlzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7CiYjNDM7CQkJZm9saW9fcHV0KGZvbGlvKTsKJiM0MzsJCQlnb3RvIHB1dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmIChucl90b19mcmVlICZhbXA7JmFtcDsgZnJlZWQgJmd0Oz0gbnJfdG9fZnJlZSkgewomIzQzOwkJCXNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJCWdvdG8gcHV0OwomIzQzOwkJfQomIzQzOwogCQkvKgogCQkgKiBNb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgaWYgd2UgZmFpbGVkCiAJCSAqIHRvIGxvY2sgdGhlIHBhZ2UgYXQgdGhpcyB0aW1lLgpAQCAtNzk2LDM0ICYjNDM7OTk5LDMzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLAogCQkgKiByZWNsYWltIHBhdGguCiAJCSAqLwogCQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKSB7CiYjNDM7CQkJc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pOwomIzQzOwkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQkJZ290byBwdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkgewomIzQzOwkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CQkJc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pOwogCQkJZm9saW9fcHV0KGZvbGlvKTsKLQkJCWdvdG8gbW92ZV9iYWNrOwomIzQzOwkJCWdvdG8gcHV0OwogCQl9CiAKIAkJcmV0ID0gc3BsaXRfZm9saW8oZm9saW8pOwogCQlmb2xpb191bmxvY2soZm9saW8pOwotCQlmb2xpb19wdXQoZm9saW8pOwogCiAJCS8qIElmIHNwbGl0IGZhaWxlZCBtb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgKi8KLQkJaWYgKHJldCkKLQkJCWdvdG8gbW92ZV9iYWNrOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCXNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJCWdvdG8gcHV0OwomIzQzOwkJfQogCi0JCWZyZWVkICYjNDM7PSBuZXh0IC0gZW5kOwomIzQzOwkJZnJlZWQgJiM0Mzs9IGZvbGlvX2VuZCAtIGVuZDsKIAkJc3BsaXQmIzQzOyYjNDM7OwomIzQzOwkJZm9saW9fcHV0KGZvbGlvKTsKIGRyb3A6Ci0JCWxpc3RfZGVsX2luaXQoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0KTsKLQkJZ290byBwdXQ7Ci1tb3ZlX2JhY2s6Ci0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgZWl0aGVyIG9uIHRoZSBnbG9iYWwgbGlzdCBvciBkZWxldGVkCi0JCSAqIGZyb20gYW55IGxvY2FsIGxpc3QgYmVmb3JlIGlwdXQoKSBzaW5jZSBpdCBjb3VsZCBiZSBkZWxldGVkCi0JCSAqIGluIGFub3RoZXIgdGhyZWFkIG9uY2Ugd2UgcHV0IHRoZSBpbm9kZSAodGhlbiB0aGUgbG9jYWwgbGlzdAotCQkgKiBpcyBjb3JydXB0ZWQpLgotCQkgKi8KLQkJc3Bpbl9sb2NrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0X2xvY2spOwotCQlsaXN0X21vdmUoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0LCAmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCk7Ci0JCXNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4mIzQzOyYjNDM7OwotCQlzcGluX3VubG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKJiM0MzsJCXNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpOwogcHV0OgogCQlpcHV0KGlub2RlKTsKIAl9CkBAIC04MzYsNyAmIzQzOzEwMzgsNyBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zY2FuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiB7CiAJc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKHNiKTsKIAotCWlmICghUkVBRF9PTkNFKHNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4pKQomIzQzOwlpZiAoIWxpc3RfbHJ1X3Nocmlua19jb3VudCgmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCwgc2MpKQogCQlyZXR1cm4gU0hSSU5LX1NUT1A7CiAKIAlyZXR1cm4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgc2MsIDApOwpAQCAtODQ2LDEyICYjNDM7MTA0OCwyMiBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQlzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQogewogCXN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7Ci0JcmV0dXJuIFJFQURfT05DRShzYmluZm8tJmd0O3Nocmlua2xpc3RfbGVuKTsKJiM0MzsKJiM0MzsJcmV0dXJuIGxpc3RfbHJ1X3Nocmlua19jb3VudCgmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdCwgc2MpOwogfQogI2Vsc2UgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwogCiAjZGVmaW5lIHNobWVtX2h1Z2UgU0hNRU1fSFVHRV9ERU5ZCiAKJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkJICBnZnBfdCBnZnApCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7fQomIzQzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sCiAJCXN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSkKIHsKQEAgLTE0MDcsMTQgJiM0MzsxNjE5LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkJaW5vZGUtJmd0O2lfc2l6ZSA9IDA7CiAJCW1hcHBpbmdfc2V0X2V4aXRpbmcoaW5vZGUtJmd0O2lfbWFwcGluZyk7CiAJCXNobWVtX3RydW5jYXRlX3JhbmdlKGlub2RlLCAwLCAobG9mZl90KS0xKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCkpIHsKLQkJCXNwaW5fbG9jaygmYW1wO3NiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sb2NrKTsKLQkJCWlmICghbGlzdF9lbXB0eSgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpKSB7Ci0JCQkJbGlzdF9kZWxfaW5pdCgmYW1wO2luZm8tJmd0O3Nocmlua2xpc3QpOwotCQkJCXNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4tLTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0X2xvY2spOwotCQl9CiYjNDM7CQlzaG1lbV91bnVzZWRfaHVnZV9kZWwoaW5vZGUpOwogCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmFtcDtpbmZvLSZndDtzd2FwbGlzdCkpIHsKIAkJCS8qIFdhaXQgd2hpbGUgc2htZW1fdW51c2UoKSBpcyBzY2FubmluZyB0aGlzIGlub2RlLi4uICovCiAJCQl3YWl0X3Zhcl9ldmVudCgmYW1wO2luZm8tJmd0O3N0b3BfZXZpY3Rpb24sCkBAIC0yNTIyLDI4ICYjNDM7MjcyNyw2IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAogCiBhbGxvY2VkOgogCWFsbG9jZWQgPSB0cnVlOwotCWlmIChmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSAmYW1wOyZhbXA7Ci0JICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgJmx0OwotCQkJCQlmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkgewotCQlzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtJmd0O2lfc2IpOwotCQlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpOwotCQkvKgotCQkgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0Ci0JCSAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCi0JCSAqLwotCQlzcGluX2xvY2soJmFtcDtzYmluZm8tJmd0O3Nocmlua2xpc3RfbG9jayk7Ci0JCS8qCi0JCSAqIF9jYXJlZnVsIHRvIGRlZmVuZCBhZ2FpbnN0IHVubG9ja2VkIGFjY2VzcyB0bwotCQkgKiAtJmd0O3Nocmlua19saXN0IGluIHNobWVtX3VudXNlZF9odWdlX3NocmluaygpCi0JCSAqLwotCQlpZiAobGlzdF9lbXB0eV9jYXJlZnVsKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCkpIHsKLQkJCWxpc3RfYWRkX3RhaWwoJmFtcDtpbmZvLSZndDtzaHJpbmtsaXN0LAotCQkJCSAgICAgICZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0KTsKLQkJCXNiaW5mby0mZ3Q7c2hyaW5rbGlzdF9sZW4mIzQzOyYjNDM7OwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0X2xvY2spOwotCX0KLQogCWlmIChzZ3AgPT0gU0dQX1dSSVRFKQogCQlmb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7CiAJLyoKQEAgLTI1NzIsNiAmIzQzOzI3NTUsMTUgQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCiAJCWVycm9yID0gLUVJTlZBTDsKIAkJZ290byB1bmxvY2s7CiAJfQomIzQzOwomIzQzOwlpZiAoYWxsb2NlZCAmYW1wOyZhbXA7IGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pICZhbXA7JmFtcDsKJiM0MzsJICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgJmx0OyBmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFBhcnQgb2YgdGhlIGxhcmdlIGZvbGlvIGlzIGJleW9uZCBpX3NpemU6IHN1YmplY3QKJiM0MzsJCSAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCiYjNDM7CQkgKi8KJiM0MzsJCXNobWVtX3VudXNlZF9odWdlX2FkZChpbm9kZSwgZm9saW8sIGdmcCk7CiYjNDM7CX0KIG91dDoKIAkqZm9saW9wID0gZm9saW87CiAJcmV0dXJuIDA7CkBAIC0zMDQ4LDYgJiM0MzszMjQwLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogCWlmIChpbmZvLSZndDtmc2ZsYWdzKQogCQlzaG1lbV9zZXRfaW5vZGVfZmxhZ3MoaW5vZGUsIGluZm8tJmd0O2ZzZmxhZ3MsIE5VTEwpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7aW5mby0mZ3Q7c2hyaW5rbGlzdCk7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlpbmZvLSZndDtzaHJpbmtsaXN0X21lbWNnID0gTlVMTDsKJiM0MzsJaW5mby0mZ3Q7c2hyaW5rbGlzdF9uaWQgPSAtMTsKJiM0MzsjZW5kaWYKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2luZm8tJmd0O3N3YXBsaXN0KTsKIAljYWNoZV9ub19hY2woaW5vZGUpOwogCWlmIChzYmluZm8tJmd0O25vc3dhcCkKQEAgLTQ5MTQsNiAmIzQzOzUxMTAsOSBAQCBzdGF0aWMgdm9pZCBzaG1lbV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKICNlbmRpZgogCWZyZWVfcGVyY3B1KHNiaW5mby0mZ3Q7aW5vX2JhdGNoKTsKIAlwZXJjcHVfY291bnRlcl9kZXN0cm95KCZhbXA7c2JpbmZvLSZndDt1c2VkX2Jsb2Nrcyk7CiYjNDM7I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlsaXN0X2xydV9kZXN0cm95KCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0KTsKJiM0MzsjZW5kaWYKIAltcG9sX3B1dChzYmluZm8tJmd0O21wb2wpOwogI2lmZGVmIENPTkZJR19UTVBGU19YQVRUUgogCXNpbXBsZV94YXR0cl9jYWNoZV9jbGVhbnVwKCZhbXA7c2JpbmZvLSZndDt4YV9jYWNoZSk7CkBAIC01MDA3LDggJiM0Mzs1MjA2LDExIEBAIHN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpCiAJcmF3X3NwaW5fbG9ja19pbml0KCZhbXA7c2JpbmZvLSZndDtzdGF0X2xvY2spOwogCWlmIChwZXJjcHVfY291bnRlcl9pbml0KCZhbXA7c2JpbmZvLSZndDt1c2VkX2Jsb2NrcywgMCwgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gZmFpbGVkOwotCXNwaW5fbG9ja19pbml0KCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0KTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7CWlmIChsaXN0X2xydV9pbml0X21lbWNnKCZhbXA7c2JpbmZvLSZndDtzaHJpbmtsaXN0LCBzYi0mZ3Q7c19zaHJpbmspKQomIzQzOwkJZ290byBmYWlsZWQ7CiYjNDM7I2VuZGlmCiAKIAlzYi0mZ3Q7c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7CiAJc2ItJmd0O3NfYmxvY2tzaXplID0gUEFHRV9TSVpFOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MzI3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaDogSHVnZSBQYWdlIGFuZCBPYmplY3QgQ2FjaGluZyBNb2RpZmljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBhbmQgaXQgc2VlbXMgdG8gYmUgcmVmYWN0b3JpbmcgaG93IGBzaG1lbWAgZGVhbHMgd2l0aCB1bnVzZWQgaHVnZSBwYWdlcyBkdXJpbmcgc2hyaW5raW5nIG9wZXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0JiMzOTtzIHJlcGxhY2luZyB0aGUgb2xkIGBsaXN0X2hlYWRgIGFuZCBzcGlubG9jayBpbiBgc2htZW1fc2JfaW5mb2Agd2l0aCBhIGBsaXN0X2xydWAgZm9yIHRoZSBgc2hyaW5rbGlzdGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIG9wdGltaXphdGlvbiwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBiZXR0ZXIgcGVyZm9ybWFuY2UgaW4gY29udGVudGlvbiBzY2VuYXJpb3MuIEl0IGFsc28gc2VlbXMgdG8gYmUgdG91Y2hpbmcgYHN1cGVyX2NhY2hlX3NjYW5gIGFuZCBgc3VwZXJfY2FjaGVfY291bnRgIGluIGBmcy9zdXBlci5jYCwgcmVtb3ZpbmcgYHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGVgIGFuZCBsZWFuaW5nIG9uIGBtZW1fY2dyb3VwX3Nocmlua19pc19yb290YCB3aXRoaW4gYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYCBpbnN0ZWFkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBzdWdnZXN0aW5nIGEgbW92ZSB0b3dhcmRzIG1vcmUgdW5pZmllZCBtZW1vcnkgY2dyb3VwIG1hbmFnZW1lbnQuCgpGdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGltcGFjdGluZyBgbW0vc2htZW0uY2AgYW5kIGFsc28gaW1wYWN0aW5nIGBmcy9idHJmcy9zdXBlci5jYC4gVGhlIGBzaG1lbWAgc2lkZSBpcyBkZWZpbml0ZWx5IHRpZWQgaW50byBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYENPTkZJR19NRU1DR2AuIEdpdmVuIHRoaXMsIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIGZ1enppbmcgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS4KCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgIGlzIGNhbGxlZCBieSBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAsIHdoaWNoIGluIHR1cm4gaXMgYSBzdXBlcmJsb2NrIHNocmlua2VyIGNhbGxiYWNrIOKAkyBzcGVjaWZpY2FsbHksIGBzX29wLSZndDtmcmVlX2NhY2hlZF9vYmplY3RzYC4gVGhhdCYjMzk7cyBhIGNsZWFyIGVudHJ5IHBvaW50LCBhIGRlZmluaXRlICYjMzQ7eWVzJiMzNDsgZm9yIHJlYWNoYWJpbGl0eS4gVGhlbiwgYHNobWVtX3VudXNlZF9odWdlX2FkZGAgaXMgYWxzbyBjYWxsZWQgZnJvbSBgc2htZW1fZ2V0X2ZvbGlvX2dmcGAgd2hlbiBhIGxhcmdlIGZvbGlvIGlzIGFsbG9jYXRlZCwgc3BlY2lmaWNhbGx5IHdoZW4gcGFydCBvZiB0aGUgZm9saW8gaXMgYmV5b25kIGBpX3NpemVgLiBUaGF0JiMzOTtzIGFub3RoZXIgcG90ZW50aWFsIHRyaWdnZXIuIFl1cCwgdGhpcyBwYXRjaCBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBwaW5wb2ludCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gV2UmIzM5O3JlIGxvb2tpbmcgYXQ6CiogICBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYAoqICAgYENPTkZJR19NRU1DR2AKKiAgIGBDT05GSUdfU0hNRU1gIChJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgbGlrZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjaykKKiAgIGBDT05GSUdfVE1QRlNgCgpOZXh0IHN0ZXA6IGxldCYjMzk7cyBnbyBpbnRvIGBtbS9zaG1lbS5jYCBhbmQgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMuIFdlIG5lZWQgdG8gZm9jdXMgb246CiogICBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYAoqICAgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gCiogICBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgCiogICBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYAoqICAgYHNobWVtX3VudXNlZF9odWdlX2RlbGAKKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlYAoqICAgYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgCiogICBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGAKCkFuZCB0aGVuLCBvdmVyIGluIGBmcy9idHJmcy9zdXBlci5jYCwgd2UmIzM5O3ZlIGdvdDoKKiAgIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AKKiAgIGBidHJmc19mcmVlX2NhY2hlZF9vYmplY3RzYAoKRmluYWxseSwgYSBxdWljayBzYW5pdHkgY2hlY2sgdXNpbmcgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIGNvbmZpcm0gdGhvc2UgY29uZmlncyBhbmQgZnVuY3Rpb25zLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gVGltZSB0byBnZXQgdGhpcyBzZXQgdXAgYW5kIHN0YXJ0IHRoZSBmdXp6aW5nIHJ1biEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zaG1lbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9MTEzPXN0cnVjdCBzaG1lbV9vcHRpb25zIHtcbi0tXG5tbS9zaG1lbS5jLTEzNi1cbm1tL3NobWVtLmM6MTM3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3NobWVtLmMtMTM4LXN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xuLS1cbm1tL3NobWVtLmM9NTIwPXN0YXRpYyBpbnQgc2htZW1fY29uZmlybV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtNTY4LVxubW0vc2htZW0uYzo1Njk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy01NzAtLyogaWZkZWYgaGVyZSB0byBhdm9pZCBibG9hdGluZyBzaG1lbS5vIHdoZW4gbm90IG5lY2Vzc2FyeSAqL1xubW0vc2htZW0uYy01NzEtXG5tbS9zaG1lbS5jOjU3MjojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUilcbm1tL3NobWVtLmMtNTczLSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfTkVWRVJcbm1tL3NobWVtLmM6NTc0OiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTKVxubW0vc2htZW0uYy01NzUtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcbm1tL3NobWVtLmM6NTc2OiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkUpXG5tbS9zaG1lbS5jLTU3Ny0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9zaG1lbS5jOjU3ODojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRSlcbm1tL3NobWVtLmMtNTc5LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQURWSVNFXG4tLVxubW0vc2htZW0uYz01ODQ9c3RhdGljIGludCBzaG1lbV9odWdlIF9fcmVhZF9tb3N0bHkgPSBTSE1FTV9IVUdFX0RFRkFVTFQ7XG4tLVxubW0vc2htZW0uYy01ODctXG5tbS9zaG1lbS5jOjU4ODojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUilcbm1tL3NobWVtLmMtNTg5LSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfTkVWRVJcbm1tL3NobWVtLmM6NTkwOiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTKVxubW0vc2htZW0uYy01OTEtI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcbm1tL3NobWVtLmM6NTkyOiNlbGlmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkUpXG5tbS9zaG1lbS5jLTU5My0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9zaG1lbS5jOjU5NDojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRSlcbm1tL3NobWVtLmMtNTk1LSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfQURWSVNFXG4tLVxubW0vc2htZW0uYz0xMDQ3PXN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxubW0vc2htZW0uYy0xMDUzLX1cbm1tL3NobWVtLmM6MTA1NDojZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9zaG1lbS5jLTEwNTUtXG4tLVxubW0vc2htZW0uYz0xMDczPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMTA3OS19XG5tbS9zaG1lbS5jOjEwODA6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vc2htZW0uYy0xMDgxLVxuLS1cbm1tL3NobWVtLmM9MTc5OD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc2htZW0uYy0xODQwLVxubW0vc2htZW0uYzoxODQxOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL3NobWVtLmMtMTg0Mi1cdFx0aWYgKG9yZGVyIFx1MDAzZT0gSFBBR0VfUE1EX09SREVSKSB7XG4tLVxubW0vc2htZW0uYz0xOTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBpbl9jbHVzdGVyKHN3cF9lbnRyeV90IHN3YXAsIGdmcF90IGdmcCxcbi0tXG5tbS9zaG1lbS5jLTIwMDgtXG5tbS9zaG1lbS5jOjIwMDk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0yMDEwLWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcbi0tXG5tbS9zaG1lbS5jPTIxMDg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3NobWVtLmMtMjExMy19XG5tbS9zaG1lbS5jOjIxMTQ6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xubW0vc2htZW0uYy0yMTE1LVxuLS1cbm1tL3NobWVtLmM9MjEzMD1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL3NobWVtLmMtMjE0MS1cbm1tL3NobWVtLmM6MjE0MjpcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKVxubW0vc2htZW0uYy0yMTQzLVx0XHRvcmRlcnMgPSAwO1xuLS1cbm1tL3NobWVtLmM9MjI4MD1zdGF0aWMgaW50IHNobWVtX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBnZnBfdCBnZnAsXG4tLVxubW0vc2htZW0uYy0yMjk0LVx0Z2ZwIFx1MDAyNj0gfkdGUF9DT05TVFJBSU5UX01BU0s7XG5tbS9zaG1lbS5jOjIyOTU6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0yMjk2LVx0aWYgKG5yX3BhZ2VzIFx1MDAzZSAxKSB7XG4tLVxubW0vc2htZW0uYz0yOTE4PXVuc2lnbmVkIGxvbmcgc2htZW1fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxubW0vc2htZW0uYy0yOTMzLVxubW0vc2htZW0uYzoyOTM0Olx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG5tbS9zaG1lbS5jLTI5MzUtXHRcdHJldHVybiBhZGRyO1xuLS1cbm1tL3NobWVtLmMtMjk3Ny1cdFx0XHQgKi9cbm1tL3NobWVtLmM6Mjk3ODojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTI5NzktXHRcdFx0aHBhZ2Vfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XG4tLVxubW0vc2htZW0uYz0zMjAzPXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fc2htZW1fZ2V0X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbm1tL3NobWVtLmMtMzI0Mi1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG5tbS9zaG1lbS5jOjMyNDM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy0zMjQ0LVx0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gTlVMTDtcbi0tXG5tbS9zaG1lbS5jPTQ3MTY9c3RhdGljIGludCBzaG1lbV9wYXJzZV9vbmUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbi0tXG5tbS9zaG1lbS5jLTQ3ODUtXHRcdGlmIChjdHgtXHUwMDNlaHVnZSAhPSBTSE1FTV9IVUdFX05FVkVSIFx1MDAyNlx1MDAyNlxubW0vc2htZW0uYzo0Nzg2Olx0XHQgICAgIShJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG5tbS9zaG1lbS5jLTQ3ODctXHRcdCAgICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSlcbi0tXG5tbS9zaG1lbS5jPTUwMjY9c3RhdGljIGludCBzaG1lbV9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4tLVxubW0vc2htZW0uYy01MDY1LVx0XHRzZXFfcHJpbnRmKHNlcSwgXCYjMzQ7LGlub2RlJWRcJiMzNDssIChzYmluZm8tXHUwMDNlZnVsbF9pbnVtcyA/IDY0IDogMzIpKTtcbm1tL3NobWVtLmM6NTA2NjojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTUwNjctXHQvKiBSaWdodGx5IG9yIHdyb25nbHksIHNob3cgaHVnZSBtb3VudCBvcHRpb24gdW5tYXNrZWQgYnkgc2htZW1faHVnZSAqL1xuLS1cbm1tL3NobWVtLmM9NTA5OT1zdGF0aWMgdm9pZCBzaG1lbV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5tbS9zaG1lbS5jLTUxMTItXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFx1MDAyNnNiaW5mby1cdTAwM2V1c2VkX2Jsb2Nrcyk7XG5tbS9zaG1lbS5jOjUxMTM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy01MTE0LVx0bGlzdF9scnVfZGVzdHJveShcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tLVxubW0vc2htZW0uYz01MTMxPXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxubW0vc2htZW0uYy01MTk2LVx0c2JpbmZvLVx1MDAzZW1vZGUgPSBjdHgtXHUwMDNlbW9kZTtcbm1tL3NobWVtLmM6NTE5NzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTUxOTgtXHRpZiAoY3R4LVx1MDAzZXNlZW4gXHUwMDI2IFNITUVNX1NFRU5fSFVHRSlcbi0tXG5tbS9zaG1lbS5jLTUyMDktXG5tbS9zaG1lbS5jOjUyMTA6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy01MjExLVx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNiLVx1MDAzZXNfc2hyaW5rKSlcbi0tXG5tbS9zaG1lbS5jPTU0MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcbi0tXG5tbS9zaG1lbS5jLTU0MzAtXHQucHV0X3N1cGVyXHQ9IHNobWVtX3B1dF9zdXBlcixcbm1tL3NobWVtLmM6NTQzMTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9zaG1lbS5jLTU0MzItXHQubnJfY2FjaGVkX29iamVjdHNcdD0gc2htZW1fdW51c2VkX2h1Z2VfY291bnQsXG4tLVxubW0vc2htZW0uYz01NTU2PXZvaWQgX19pbml0IHNobWVtX2luaXQodm9pZClcbi0tXG5tbS9zaG1lbS5jLTU1ODYtXG5tbS9zaG1lbS5jOjU1ODc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vc2htZW0uYy01NTg4LVx0aWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNiBzaG1lbV9odWdlIFx1MDAzZSBTSE1FTV9IVUdFX0RFTlkpXG4tLVxubW0vc2htZW0uYy01NjExLVxubW0vc2htZW0uYzo1NjEyOiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NZU0ZTKVxubW0vc2htZW0uYy01NjEzLXN0YXRpYyBzc2l6ZV90IHNobWVtX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9zaG1lbS5jPTU3Njc9c3RydWN0IGtvYmpfYXR0cmlidXRlIHRocHNpemVfc2htZW1fZW5hYmxlZF9hdHRyID1cbm1tL3NobWVtLmMtNTc2OC1cdF9fQVRUUihzaG1lbV9lbmFibGVkLCAwNjQ0LCB0aHBzaXplX3NobWVtX2VuYWJsZWRfc2hvdywgdGhwc2l6ZV9zaG1lbV9lbmFibGVkX3N0b3JlKTtcbm1tL3NobWVtLmM6NTc2OTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiBDT05GSUdfU1lTRlMgKi9cbm1tL3NobWVtLmMtNTc3MC1cbm1tL3NobWVtLmM6NTc3MTojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG5tbS9zaG1lbS5jLTU3NzItXG4tLVxubW0vc2htZW0uYz01OTAyPV9fc2V0dXAoXCYjMzQ7dGhwX3NobWVtPVwmIzM0Oywgc2V0dXBfdGhwX3NobWVtKTtcbm1tL3NobWVtLmMtNTkwMy1cbm1tL3NobWVtLmM6NTkwNDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5tbS9zaG1lbS5jLTU5MDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBUSFAgYW5kIGNncm91cHMqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIHRyYW5zcGFyZW50IGh1Z2VwYWdlcyAoYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWApLiBUaGF0JiMzOTtzIGdvb2QsIHRoYXQmIzM5O3Mgd2hhdCB3ZSB3YW50IGZvciBwZXJmb3JtYW5jZSBpbiBtYW55IHdvcmtsb2Fkcy4gQnV0IG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYENPTkZJR19NRU1DR2AuIElmIHdlJiMzOTtyZSB1c2luZyBUSFAsIGVzcGVjaWFsbHkgaW4gYW55IGtpbmQgb2YgY29udGFpbmVyaXplZCBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgSSAqbmVlZCogdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IHdpdGggbWVtb3J5IGNncm91cHMuIEFyZSB3ZSBwcm9wZXJseSBhY2NvdW50aW5nIGZvciBUSFAgdXNhZ2Ugd2l0aGluIHRob3NlIGNncm91cCBsaW1pdHM/IElzIHRoZSBzY2hlZHVsZXIgYmVpbmcgTlVNQS1hd2FyZSBlbm91Z2ggaW4gaXRzIHBsYWNlbWVudCBvZiBodWdlcGFnZXMgd2l0aGluIGEgbWVtY2c/IFdoYXQgYWJvdXQgb3ZlcmNvbW1pdCDigJMgaG93IGRvZXMgdGhlIHN5c3RlbSBoYW5kbGUgYSBzaXR1YXRpb24gd2hlcmUgYSBtZW1jZyByZXF1ZXN0cyBtb3JlIFRIUCB0aGFuIGlzIGF2YWlsYWJsZSwgYW5kIHdoYXQgYXJlIHRoZSByZXBlcmN1c3Npb25zPyBXZSYjMzk7cmUgcG90ZW50aWFsbHkgdGFsa2luZyBhYm91dCBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGVzZSB0d28gZmVhdHVyZXMgaW50ZXJhY3QuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdG8gc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBiZWhhdmUgdG9nZXRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkga25vd24gZ290Y2hhcyBvciB0dW5pbmcgcGFyYW1ldGVycyB0aGF0IGFyZSBjcml0aWNhbCB0byBvcHRpbWl6aW5nIHRoaXMgc2V0dXAuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBkdXJpbmcgYSBzeXN0ZW0gYXVkaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX01FTUNHJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTczOD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXG4tLVxubW0vc2htZW0uYy03NDYtXG5tbS9zaG1lbS5jOjc0NzojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zaG1lbS5jLTc0OC1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODg3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBCdHJmcyBTdXBlcmJsb2NrIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdCBgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdGAgY2hlY2sgd2l0aGluIHRoZSBCdHJmcyBjb2RlYmFzZT8gSSBrbm93IGl0IGRlYWxzIHdpdGggbWVtb3J5IGNncm91cHMsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIHN1cGVyYmxvY2sgY29kZSwgcGFydGljdWxhcmx5IHdoZXJlIGl0IGhhbmRsZXMgdGhpbmdzIGxpa2UgbWV0YWRhdGEuIFJpZ2h0LCB0aGF0IHB1dHMgbWUgc3F1YXJlbHkgaW4gYGZzL2J0cmZzL3N1cGVyLmNgLiBUaGF0IGZpbGUgaXMgdGhlIGNlbnRyYWwgaHViIGZvciBzdXBlcmJsb2NrIG9wZXJhdGlvbnMsIHNvIGl0IHNob3VsZCBjb250YWluIHRoZSByZWxldmFudCBjb250ZXh0LCBvciBhdCBsZWFzdCB0aGUgY2FsbHMgSSBuZWVkIHRvIHRyYWNlLiBOb3csIHRpbWUgdG8gc3RhcnQgZGlnZ2luZyBpbiB0aGVyZS4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX3Nocmlua19pc19yb290JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYnRyZnMvc3VwZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9idHJmcy9zdXBlci5jPTI0MzM9c3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5mcy9idHJmcy9zdXBlci5jLTI0NDMtXHQgKi9cbmZzL2J0cmZzL3N1cGVyLmM6MjQ0NDpcdGlmICghbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzYykpXG5mcy9idHJmcy9zdXBlci5jLTI0NDUtXHRcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjM5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgcHJvbWlzaW5nIOKAkyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCB0aHJvd2luZyBhIGZ1enplciBhdC4gTXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AsIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX3VudXNlZF9odWdlX2FkZGAsIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLCBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAsIGBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlYCwgYHNobWVtX3VudXNlZF9odWdlX2Ryb3BgLCBhbmQgYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGludGVyYWN0IGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgZWRnZSBjYXNlcy4KCkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgIGlzIHN0YXRpYy4uLiB5ZXMsIGdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLiBOb3cgSSBrbm93IHRvIHdhdGNoIG91dCBmb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmlsZXMuCgpUaGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgaGVyZSBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYE1FTUNHYCwgYW5kIGBCVFJGU19GU2AuIFRoaXMgZ2l2ZXMgbWUgYSBnb29kIGZyYW1ld29yayB0byBrbm93IHdoYXQgdG8gZXhwZWN0IGFuZCB3aGVyZSB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMuCgpJJiMzOTtsbCBnbGFuY2UgYXQgYGZzL2J0cmZzL3N1cGVyLmNgIG5leHQgdG8gdW5kZXJzdGFuZCBgYnRyZnNfbnJfY2FjaGVkX29iamVjdHNgIGluIG1vcmUgZGV0YWlsIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBodWdlcGFnZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidHJmc19ucl9jYWNoZWRfb2JqZWN0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2J0cmZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnRyZnMvc3VwZXIuYz0yNDE3PXN0YXRpYyBpbnQgYnRyZnNfc2hvd19kZXZuYW1lKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9idHJmcy9zdXBlci5jLTI0MzItXG5mcy9idHJmcy9zdXBlci5jOjI0MzM6c3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbmZzL2J0cmZzL3N1cGVyLmMtMjQzNC17XG4tLVxuZnMvYnRyZnMvc3VwZXIuYz0yNTMzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBidHJmc19zdXBlcl9vcHMgPSB7XG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0yNTQ1LVx0LnVuZnJlZXplX2ZzXHQ9IGJ0cmZzX3VuZnJlZXplLFxuZnMvYnRyZnMvc3VwZXIuYzoyNTQ2Olx0Lm5yX2NhY2hlZF9vYmplY3RzID0gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMsXG5mcy9idHJmcy9zdXBlci5jLTI1NDctXHQuZnJlZV9jYWNoZWRfb2JqZWN0cyA9IGJ0cmZzX2ZyZWVfY2FjaGVkX29iamVjdHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDI4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ2hhbmdlcyBmb3IgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gdGhlIGNoYW5nZXMgaW4gYGZzL2J0cmZzL3N1cGVyLmNgIGFyZSBwcmV0dHkgaW5jb25zZXF1ZW50aWFsIC0ganVzdCBhIHNpbXBsZSBlYXJseSByZXR1cm4uIFRoZSByZWFsIG1lYXQgb2YgdGhlIHVwZGF0ZSBzZWVtcyB0byBiZSBpbiBgbW0vc2htZW0uY2AsIHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIGBsaXN0X2xydWAgZm9yIHRoZSBgc2hyaW5rbGlzdGAuIFRoYXQgbWVhbnMgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGBzaG1lbV91bnVzZWRfaHVnZV8qYCBmdW5jdGlvbnMuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHByb3Blcmx5IHNjb3BlZCwgZ2l2ZW4gdGhlIGNoYW5nZS4gTGV0IG1lIGdvIHRocm91Z2ggdGhlbTogYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AgaXMgc3RhdGljPyBZZXAuIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYD8gU3RhdGljLCBjaGVjay4gYHNobWVtX3VudXNlZF9odWdlX2NvdW50YD8gU3RhdGljLCBhcyBleHBlY3RlZC4gYHNobWVtX3VudXNlZF9odWdlX2FkZGA/IFl1cCwgc3RhdGljLiAgYHNobWVtX3VudXNlZF9odWdlX2RlbGAsIHN0YXRpYy4gYHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVgLCBhbmQgYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgLCBhcyB3ZWxsIGFzIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYCBhcmUgc3RhdGljIGFzIHdlbGwuIE9rYXksIGFsbCBsb29rcyBnb29kIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHdoZXJlIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTkwOT1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc2htZW0uYy05MzUtXG5tbS9zaG1lbS5jOjkzNjpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbm1tL3NobWVtLmMtOTM3LVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXG4tLVxubW0vc2htZW0uYz0xMDM2PXN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX3NjYW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5tbS9zaG1lbS5jLTEwNDMtXG5tbS9zaG1lbS5jOjEwNDQ6XHRyZXR1cm4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgc2MsIDApO1xubW0vc2htZW0uYy0xMDQ1LX1cbi0tXG5tbS9zaG1lbS5jPTEwNjM9c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxubW0vc2htZW0uYy0xMDY2LVxubW0vc2htZW0uYzoxMDY3OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxubW0vc2htZW0uYy0xMDY4LVx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXG4tLVxubW0vc2htZW0uYz0yMTMwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX2FsbG9jX2FuZF9hZGRfZm9saW8oc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc2htZW0uYy0yMjAzLVx0XHQgKi9cbm1tL3NobWVtLmM6MjIwNDpcdFx0c2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHNiaW5mbywgTlVMTCwgcGFnZXMpO1xubW0vc2htZW0uYy0yMjA1LVx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjAzMgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyB0aGUgU0hNRU0gSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyBhYm91dCB0aGUgc2hhcmVkIG1lbW9yeSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IHVudXNlZCBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkIGluIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gU28sIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzIOKAkyBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGNhbGxlZCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZS4gSSBrbm93IHRoZSBzaGFyZWQgbWVtb3J5IHN1YnN5c3RlbSBpcyBob3VzZWQgdW5kZXIgYG1tL2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBtYWdpYyBoYXBwZW5zLiBBbmQsIGNvbnNpZGVyaW5nIHRoZSBuYW1lLCBJJiMzOTtkIGJldCB0aGUgc291cmNlIGZpbGUgSSYjMzk7bSBhZnRlciBpcyBgc2htZW0uY2AuIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyBvcGVuIHRoYXQgZmlsZSBhbmQgbWFrZSBzdXJlIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBpcyBhY3R1YWxseSBkZWZpbmVkIHRoZXJlLiBUaGlzIGlzIGJhc2ljLCBidXQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGdldCBhIG1lbnRhbCByb2FkbWFwIG9mIHRoZSBjb2RlIGludm9sdmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz04MTM9c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxubW0vc2htZW0uYy04MjktXG5tbS9zaG1lbS5jOjgzMDpzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiB7XG5tbS9zaG1lbS5jLTgzMS1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbi0tXG5tbS9zaG1lbS5jPTgzNT1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcbi0tXG5tbS9zaG1lbS5jLTgzOC17XG5tbS9zaG1lbS5jOjgzOTpcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnO1xubW0vc2htZW0uYy04NDAtXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbztcbi0tXG5tbS9zaG1lbS5jPTkzNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbi0tXG5tbS9zaG1lbS5jLTkzOC17XG5tbS9zaG1lbS5jOjkzOTpcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHNjYW47XG5tbS9zaG1lbS5jLTk0MC1cdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4tLVxubW0vc2htZW0uYy0xMDM1LVxubW0vc2htZW0uYzoxMDM2OnN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX3NjYW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbm1tL3NobWVtLmMtMTAzNy1cdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5tbS9zaG1lbS5jPTU0MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcbi0tXG5tbS9zaG1lbS5jLTU0MzItXHQubnJfY2FjaGVkX29iamVjdHNcdD0gc2htZW1fdW51c2VkX2h1Z2VfY291bnQsXG5tbS9zaG1lbS5jOjU0MzM6XHQuZnJlZV9jYWNoZWRfb2JqZWN0c1x0PSBzaG1lbV91bnVzZWRfaHVnZV9zY2FuLFxubW0vc2htZW0uYy01NDM0LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc4MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGb2N1czogVW51c2VkIEh1Z2UgUGFnZSBNYW5hZ2VtZW50IGluIFNoYXJlZCBNZW1vcnkqKgoKT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBtYW5hZ2luZyB1bnVzZWQgaHVnZSBwYWdlcyB3aXRoaW4gdGhlIHNoYXJlZCBtZW1vcnkgc3Vic3lzdGVtLiBTcGVjaWZpY2FsbHksIG15IGF0dGVudGlvbiBuZWVkcyB0byBiZSBvbiB0aGVzZTogYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AsIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YCwgYHNobWVtX3VudXNlZF9odWdlX2FkZGAsIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLCBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAsIGBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlYCwgYHNobWVtX3VudXNlZF9odWdlX2Ryb3BgLCBgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hgLCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydWAuIFRoZXNlIGFyZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZWlyIGludGVyYWN0aW9ucyBpcyBnb2luZyB0byBiZSBjcnVjaWFsIGZvciBteSBhbmFseXNpcy4KClRoZSBmaXJzdCB0aGluZyBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIGlzIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGAuIEkgbmVlZCB0byBjb25maXJtIHdoZXJlIHRoaXMgaXMgZGVmaW5lZCwgSSYjMzk7bGwgc3RhcnQgYnkgY2hlY2tpbmcgYG1tL3NobWVtLmNgIHRvIHNlZSBpZiB0aGF0JiMzOTtzIHdoZXJlIGl0JiMzOTtzIGxvY2F0ZWQuIFRoZW4gSSYjMzk7bGwgZGl2ZSBpbnRvIGVhY2ggb2YgdGhvc2Ugb3RoZXIgZnVuY3Rpb25zLCBtYXBwaW5nIHRoZW0gb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz04MzU9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4tLVxubW0vc2htZW0uYy04NzMtXG5tbS9zaG1lbS5jOjg3NDpzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc2htZW0uYy04NzUtXHRcdFx0XHQgICAgICAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbi0tXG5tbS9zaG1lbS5jPTkzNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbi0tXG5tbS9zaG1lbS5jLTk4MS1cbm1tL3NobWVtLmM6OTgyOlx0XHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkge1xubW0vc2htZW0uYy05ODMtXHRcdFx0c2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pO1xuLS1cbm1tL3NobWVtLmMtMTAwNi1cbm1tL3NobWVtLmM6MTAwNzpcdFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHtcbm1tL3NobWVtLmMtMTAwOC1cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUyMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKldoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW5kIGNhbiBJIGZpbmQgaXQgcXVpY2tseT8qKiBJIG5lZWQgdG8gbG9jYXRlIGBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSwgYW5kIGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSwgYG1tL3NobWVtLmNgIHNlZW1zIGxpa2UgdGhlIGxpa2VseSBjYW5kaWRhdGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHBsYWNlIEkmIzM5O2xsIHN0YXJ0IG15IHNlYXJjaC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW4gaXQmIzM5O3MgaW4gYSBmaWxlIHJlbGF0ZWQgdG8gc2hhcmVkIG1lbW9yeSwgYW5kIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCB0aGF0JiMzOTtzIGFsbW9zdCBhbHdheXMgd2hlcmUgaXQgbGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz03NDg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcbm1tL3NobWVtLmM6NzQ5OnNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc2htZW0uYy03NTAtXHRcdFx0ICAgIGdmcF90IGdmcClcbi0tXG5tbS9zaG1lbS5jPTc2OD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxubW0vc2htZW0uYzo3Njk6c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9zaG1lbS5jLTc3MC1cdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL3NobWVtLmM9Nzc2PXN0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3NobWVtLmMtNzgzLVxubW0vc2htZW0uYzo3ODQ6XHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApO1xubW0vc2htZW0uYy03ODUtXHRpZiAoSVNfRVJSKG1lbWNnKSlcbi0tXG5tbS9zaG1lbS5jPTkwOT1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc2htZW0uYy05MTUtXG5tbS9zaG1lbS5jOjkxNjpcdG1lbWNnID0gc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHNiaW5mbywgZm9saW8sIEdGUF9OT1dBSVQpO1xubW0vc2htZW0uYy05MTctXHRpZiAoSVNfRVJSKG1lbWNnKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxMDcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEJ0cmZzIE9wdGltaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3Mg4oCTIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AsIHdoaWNoIGlzIHN0YW5kYXJkIGVub3VnaCBmb3Igb3B0aW1pemF0aW9uIGVmZm9ydHMuIEJ1dCBob2xkIG9uLCBJIHNlZSBgQlRSRlNfRlNgIGNoYW5nZWQgYXMgd2VsbC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEJ0cmZzIGlzIGFuIGFyZWEgd2hlcmUgcGVyZm9ybWFuY2UgdHVuaW5nIGNhbiBiZSBxdWl0ZSBpbnZvbHZlZCwgYW5kIGFueSBjb25maWcgbW9kaWZpY2F0aW9uIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGFyZWEgZm9yIGltcHJvdmVtZW50IG9yIGEgc3BlY2lmaWMgdXNlIGNhc2UgY29uc2lkZXJhdGlvbi4KCk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIHNlZSAqd2h5KiB0aGUgQnRyZnMgZmlsZXN5c3RlbSBpcyB0b3VjaGVkLiBUbyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBJJiMzOTttIG5vdyBnb2luZyB0byBjb25maXJtIGlmIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AgaXMgcmVsYXRlZCB0byB0aGUgQnRyZnMgY2hhbmdlcy4gSXQmIzM5O3MgdGltZSB0byBjaGVjayBgZnMvYnRyZnMvc3VwZXIuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCByZWxhdGVkIGxvZ2ljIGlmIHRoaXMgY29uZmlnIGNoYW5nZSBpcyByZWxldmFudCB0byBvYmplY3QgY2FjaGluZyB3aXRoaW4gdGhlIEJ0cmZzIGZpbGVzeXN0ZW1zLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoaXMgd291bGQgaGVscCBtZSBmb3JtIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidHJmc19ucl9jYWNoZWRfb2JqZWN0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2J0cmZzL3N1cGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnRyZnMvc3VwZXIuYz0yNDE3PXN0YXRpYyBpbnQgYnRyZnNfc2hvd19kZXZuYW1lKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9idHJmcy9zdXBlci5jLTI0MzItXG5mcy9idHJmcy9zdXBlci5jOjI0MzM6c3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbmZzL2J0cmZzL3N1cGVyLmMtMjQzNC17XG4tLVxuZnMvYnRyZnMvc3VwZXIuYz0yNTMzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBidHJmc19zdXBlcl9vcHMgPSB7XG4tLVxuZnMvYnRyZnMvc3VwZXIuYy0yNTQ1LVx0LnVuZnJlZXplX2ZzXHQ9IGJ0cmZzX3VuZnJlZXplLFxuZnMvYnRyZnMvc3VwZXIuYzoyNTQ2Olx0Lm5yX2NhY2hlZF9vYmplY3RzID0gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMsXG5mcy9idHJmcy9zdXBlci5jLTI1NDctXHQuZnJlZV9jYWNoZWRfb2JqZWN0cyA9IGJ0cmZzX2ZyZWVfY2FjaGVkX29iamVjdHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Njk5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhbmQgSW50ZWdyYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlcyBpbiBgZnMvYnRyZnMvc3VwZXIuY2AgYXJlIHByZXR0eSBtaW5vciwgYnV0IGxldCYjMzk7cyBmb2xkIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AgaW50byB0aGUgZm9jdXMgc3ltYm9scy4gV2FpdCwgaG9sZCBvbi4uLiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgc29tZXRoaW5nIGFib3V0IHRoaXMgYmVpbmcgYSBnbG9iYWwgY291bnRlciwgbm90IGhvbm9yaW5nIGBzYy0mZ3Q7bWVtY2dgLCBhbmQgYmVpbmcgZm9yIHRoZSBnbG9iYWwgc2hyaW5rIHBhdGguIFNvLCB0aGlzIGxvb2tzIGxpa2UgYSBzbWFsbCBvcHRpbWl6YXRpb24gb3IgZml4LiBUaGUgYnVsayBvZiB0aGUgbG9naWMgaXMgYWN0dWFsbHkgaW4gYG1tL3NobWVtLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBsaWVzLgoKUmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBzaG1lbWAgZnVuY3Rpb25zLiBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdGljIHN0YXR1cyBvZiBlYWNoIG9mIHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgc2htZW0gc3Vic3lzdGVtOiBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYCwgYHNobWVtX3VudXNlZF9odWdlX2RlbGAsIGBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlYCwgYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgLCBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGAsIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGAsIGBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVgLCBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCwgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLCBhbmQgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YC4gT2theSwgYWxsIHN0YXRpYy4gR29vZC4KCkkmIzM5O2xsIGFsc28gY2hlY2sgYHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2dgLCBgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRgIGFuZCBgc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkYC4gQWxsIGFyZSBzdGF0aWMuIFBlcmZlY3QuCgpOb3csIGxldCYjMzk7cyBpbmNsdWRlIGFsbCB0aG9zZSBmdW5jdGlvbnMgSSBqdXN0IGNvbmZpcm1lZCBhcmUgc3RhdGljIGludG8gYEZvY3VzU3ltYm9sc2AuIFRoYXQgbWFrZXMgaXQsIGZvciBzdXJlLCBlYXNpZXIgdG8gdHJhY2sgdGhpcyBsb2dpYy4gU28gd2UgaGF2ZToKCi0gYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AKLSBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAKLSBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgCi0gYHNobWVtX3VudXNlZF9odWdlX2FkZGAKLSBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYAotIGBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlYAotIGBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlYAotIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYAotIGBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaGAKLSBgc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1YAotIGBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnYAotIGBpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZGAKLSBgc2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkYAoKQW5kLCBzaW5jZSB3ZSYjMzk7cmUgaGVyZSwgd2UgY2FuIGdvIGFoZWFkIGFuZCBpbmNsdWRlIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AgdG9vLgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIGNvbmZpZ3VyYXRpb24gYXNwZWN0cy4gV2UgaGF2ZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgTUVNQ0dgLCBhbmQgYEJUUkZTX0ZTYCBhcyByZWxldmFudC4gSSBhbHNvIHdhbnQgdG8gY2hlY2sgd2hldGhlciBgQ09ORklHX1NITUVNYCBpcyBuZWVkZWQuIEl0JiMzOTtzIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGxldCYjMzk7cyBiZSB0aG9yb3VnaC4gV2FpdCwgaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgKnJlcXVpcmVkKiwgYnV0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNRU1DR2AgKmFyZSogcGFydCBvZiB0aGUgbmVjZXNzYXJ5IGNvbmZpZy4gSSBzaG91bGQgYWxzbyBzZWUgd2hldGhlciBgQ09ORklHX1RNUEZTYCBpcyBuZWVkZWQuIExldCYjMzk7cyB0cmFjZSBpdCB0aHJvdWdoIGBtbS9zaG1lbS5jYCwgd2hpY2ggaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1NITUVNYCBpcyBlbmFibGVkLCBhbmQgdGhlbiBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2htZW0ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxuLS1cbm1tL01ha2VmaWxlLTUzLVx0XHRcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZTo1NDpcdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG5tbS9NYWtlZmlsZS01NS1cdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAwMDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDM1MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgc2htZW0ub2AgQnVpbGQgUHJvY2VzcyoqCgpSaWdodCwgYHNobWVtLm9gIGlzIGEgY29yZSBwYXJ0IG9mIHRoZSBzeXN0ZW0sIHNvIGl0cyBhbHdheXMgY29tcGlsZWQsIGFzIGV4cGVjdGVkLiBCdXQsIEkmIzM5O20ganVzdCBxdWlja2x5IGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZyBieSBjaGVja2luZyB3aGVyZSB0aGF0JiMzOTtzIGFjdHVhbGx5IGRyaXZlbi4gQWgsIGludGVyZXN0aW5nLCBJIHNlZSB0aGUgYENPTkZJR19TSE1FTWAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBpcyB1c2VkICp3aXRoaW4qIGBtbS9zaG1lbS5jYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBUaGF0IHRlbGxzIG1lIHRoYXQgY29tcGlsYXRpb24gb2YgdGhhdCBtb2R1bGUgaXMgY29uZGl0aW9uZWQgb24gdGhhdCBjb25maWcgb3B0aW9uLiBOb3csIHRoYXQmIzM5O3Mgd2hhdCBJIG5lZWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1NITUVNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTQ2PXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQgX19yb19hZnRlcl9pbml0O1xubW0vc2htZW0uYy00Ny1cbm1tL3NobWVtLmM6NDg6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy00OS0vKlxuLS1cbm1tL3NobWVtLmM9NTkwMj1fX3NldHVwKFwmIzM0O3RocF9zaG1lbT1cJiMzNDssIHNldHVwX3RocF9zaG1lbSk7XG4tLVxubW0vc2htZW0uYy01OTA1LVxubW0vc2htZW0uYzo1OTA2OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cbm1tL3NobWVtLmMtNTkwNy1cbi0tXG5tbS9zaG1lbS5jPTU5NzU9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5tbS9zaG1lbS5jLTU5ODItXG5tbS9zaG1lbS5jOjU5ODM6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xubW0vc2htZW0uYy01OTg0LVxuLS1cbm1tL3NobWVtLmM9NjEzNz1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL3NobWVtLmMtNjEzOS17XG5tbS9zaG1lbS5jOjYxNDA6I2lmZGVmIENPTkZJR19TSE1FTVxubW0vc2htZW0uYy02MTQxLVx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXHUwMDNlaG9zdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMDA6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4ODYKCQkJCQkJCW91dHB1dDogMzI5CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb25maWd1cmF0aW9ucywgcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6CgoqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKQWxyaWdodCwgc28gYENPTkZJR19TSE1FTWAgaXMgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuIFRoYXQmIzM5O3MgYSBzb2xpZCBjaG9pY2UsIHNvIGl0JiMzOTtzIGdvb2QgdG8gaW5jbHVkZSBpdC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSBJIG5vdGUgdGhhdC4KClRoZW4sIHdlJiMzOTt2ZSBhbHNvIGdvdCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYENPTkZJR19NRU1DR2AuIFRob3NlIGFyZSBwcmV0dHkgc3RhbmRhcmQsIGFuZCBwcm9iYWJseSBiZWluZyBkcml2ZW4gYnkgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgcmVxdWlyZW1lbnRzIHJlc3BlY3RpdmVseS4gQWdhaW4sIG1ha2VzIHNlbnNlIGFuZCBnb29kIHRvIGtub3cgdGhleSBhcmUgYWN0aXZlLgoKRmluYWxseSwgYENPTkZJR19CVFJGU19GU2AgaXMgcHJlc2VudC4gSSYjMzk7bSBhc3N1bWluZyB0aGVyZSBpcyBhIHN0cmF0ZWdpYyBjaG9pY2UgZm9yIHRoYXQgZmlsZXN5c3RlbSwgcGVyaGFwcyByZWxhdGVkIHRvIHNuYXBzaG90cywgZGF0YSBpbnRlZ3JpdHksIG9yIGdlbmVyYWwgc3lzdGVtIG1hbmFnZW1lbnQgcmVxdWlyZW1lbnRzLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gY2hlY2sgaW4gdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGRyaXZlbiBieSB0aGF0IGluY2x1c2lvbi4KClJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGFsbCBvZiB0aGVzZSwgc28gSSB3aWxsIG5vdyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDAwOjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtCVFJGU19GUyYjMzQ7LAogICAgJiMzNDtTSE1FTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NocmluayYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9zY2FuJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2NvdW50JiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2FkZCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9kZWwmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZSYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2Ryb3AmIzM0OywKICAgICYjMzQ7aXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2gmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1JiMzNDssCiAgICAmIzM0O3NobWVtX2dldF9hbmRfY2xlYXJfbWVtY2cmIzM0OywKICAgICYjMzQ7aXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7c2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkJiMzNDssCiAgICAmIzM0O2J0cmZzX25yX2NhY2hlZF9vYmplY3RzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBzaG1lbSBoYW5kbGVzIHVudXNlZCBodWdlIHBhZ2VzIHdoZW4gc2hyaW5raW5nLCBpbnRyb2R1Y2luZyBsaXN0X2xydSBmb3Igc2hyaW5rbGlzdCBpbiBzaG1lbV9zYl9pbmZvLiBJdCBhbHNvIG1vZGlmaWVzIHN1cGVyX2NhY2hlX3NjYW4gYW5kIHN1cGVyX2NhY2hlX2NvdW50IGluIGZzL3N1cGVyLmMgdG8gcmVtb3ZlIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUgYW5kIGluc3RlYWQgdXNlcyBtZW1fY2dyb3VwX3Nocmlua19pc19yb290IGluIGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O0JUUkZTX0ZTJiMzNDssCiAgICAmIzM0O1NITUVNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3NjYW4mIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfY291bnQmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfYWRkJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX2RlbCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlJiMzNDssCiAgICAmIzM0O3NobWVtX3VudXNlZF9odWdlX3JlcXVldWUmIzM0OywKICAgICYjMzQ7c2htZW1fdW51c2VkX2h1Z2VfZHJvcCYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaCYjMzQ7LAogICAgJiMzNDtzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUmIzM0OywKICAgICYjMzQ7c2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyYjMzQ7LAogICAgJiMzNDtpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZCYjMzQ7LAogICAgJiMzNDtzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7YnRyZnNfbnJfY2FjaGVkX29iamVjdHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNobWVtIGhhbmRsZXMgdW51c2VkIGh1Z2UgcGFnZXMgd2hlbiBzaHJpbmtpbmcsIGludHJvZHVjaW5nIGxpc3RfbHJ1IGZvciBzaHJpbmtsaXN0IGluIHNobWVtX3NiX2luZm8uIEl0IGFsc28gbW9kaWZpZXMgc3VwZXJfY2FjaGVfc2NhbiBhbmQgc3VwZXJfY2FjaGVfY291bnQgaW4gZnMvc3VwZXIuYyB0byByZW1vdmUgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZSBhbmQgaW5zdGVhZCB1c2VzIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgaW4gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI0OjQwLjcyMTczMTI4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjA1MzIxNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9zY2FuXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9jb3VudFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfYWRkXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9kZWxcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX3JlcXVldWVcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2Ryb3BcIixcbiAgICBcImlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVcIixcbiAgICBcInNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2dcIixcbiAgICBcImlzX3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkXCIsXG4gICAgXCJzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRcIixcbiAgICBcImJ0cmZzX25yX2NhY2hlZF9vYmplY3RzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNobWVtIGhhbmRsZXMgdW51c2VkIGh1Z2UgcGFnZXMgd2hlbiBzaHJpbmtpbmcsIGludHJvZHVjaW5nIGxpc3RfbHJ1IGZvciBzaHJpbmtsaXN0IGluIHNobWVtX3NiX2luZm8uIEl0IGFsc28gbW9kaWZpZXMgc3VwZXJfY2FjaGVfc2NhbiBhbmQgc3VwZXJfY2FjaGVfY291bnQgaW4gZnMvc3VwZXIuYyB0byByZW1vdmUgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZSBhbmQgaW5zdGVhZCB1c2VzIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgaW4gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjQ6NDAuNzIxNzM3MzkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDA0MzQ0MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0MmJhMzJkYWIzMWUxZjEzNThjNzBhZGRlNDllYjhmNDE5ZWUyNmEyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgSnVsIDIyIDAwOjI0OjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jXFxuaW5kZXggYTdkODA0MjE5YmVjMzQuLmNjNDUzNzQzNTM5OTc2IDEwMDY0NFxcbi0tLSBhL2ZzL2J0cmZzL3N1cGVyLmNcXG4rKysgYi9mcy9idHJmcy9zdXBlci5jXFxuQEAgLTIyLDYgKzIyLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25hbWVpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9taXNjZGV2aWNlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tYWdpYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtY29udHJvbC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmF0ZWxpbWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmMzMmMuaFxcdTAwM2VcXG5AQCAtMjQzNCw2ICsyNDM1LDE1IEBAIHN0YXRpYyBsb25nIGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBzaHJpbmtfY29udHJvXFxuIFxcdHN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gYnRyZnNfc2Ioc2IpO1xcbiBcXHRjb25zdCBzNjQgbnIgPSBwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0aXZlKFxcdTAwMjZmc19pbmZvLVxcdTAwM2VldmljdGFibGVfZXh0ZW50X21hcHMpO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIGV2aWN0YWJsZSBleHRlbnQgbWFwIGNvdW50ZXIgaXMgZmlsZXN5c3RlbS1nbG9iYWwgYW5kIGRvZXMgbm90XFxuK1xcdCAqIGhvbm91ciBzYy1cXHUwMDNlbWVtY2csIHNvIGl0IGlzIG9ubHkgbWVhbmluZ2Z1bCBvbiB0aGUgZ2xvYmFsIChrc3dhcGQgb3JcXG4rXFx0ICogcm9vdCBkaXJlY3QgcmVjbGFpbSkgc2hyaW5rIHBhdGguIFNraXAgdGhlIHBlci1tZW1jZyBpdGVyYXRpb25zIG9mXFxuK1xcdCAqIHNocmlua19zbGFiX21lbWNnKCkgdG8gYXZvaWQgcXVldWVpbmcgZHVwbGljYXRlIGdsb2JhbCB3b3JrLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHNjKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHR0cmFjZV9idHJmc19leHRlbnRfbWFwX3Nocmlua2VyX2NvdW50KGZzX2luZm8sIG5yKTtcXG4gXFxuIFxcdHJldHVybiBucjtcXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcXG5pbmRleCA5ZjgyZTZiMzhmMDdlZS4uOTNmMjRhZWE3NWM0ZDYgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtMjQsNyArMjQsNiBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ibGtkZXYuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JoYXNodGFibGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vdW50LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWN1cml0eS5oXFx1MDAzZVxcbkBAIC0xNzEsMTkgKzE3MCw2IEBAIHN0YXRpYyB2b2lkIHN1cGVyX3dha2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGZsYWcpXFxuIFxcdHdha2VfdXBfdmFyKFxcdTAwMjZzYi1cXHUwMDNlc19mbGFncyk7XFxuIH1cXG4gXFxuLS8qXFxuLSAqIFRoZSBzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBob29rcyAodXNlZCBmb3IgZXhhbXBsZSBieSBidHJmcyBhbmQgeGZzKVxcbi0gKiBvcGVyYXRlIG9uIGZpbGVzeXN0ZW0tZ2xvYmFsIHN0YXRlIGFuZCBpZ25vcmUgc2MtXFx1MDAzZW1lbWNnLiBEcml2aW5nIHRoZW1cXG4tICogZnJvbSBwZXItbWVtY2cgc2hyaW5rX3NsYWJfbWVtY2coKSBpbnZvY2F0aW9ucyBvbmx5IGJ1cm5zIENQVSB3YWxraW5nXFxuLSAqIHBlci1jcHUgY291bnRlcnMgYW5kIHF1ZXVlaW5nIGR1cGxpY2F0ZSB3b3JrOiB0aGUgYWN0dWFsIHJlY2xhaW0gaGFwcGVucyBvblxcbi0gKiB0aGUgZ2xvYmFsIHBhdGggKGtzd2FwZCBvciByb290IGRpcmVjdCByZWNsYWltKSByZWdhcmRsZXNzLiBSZXN0cmljdCB0aGVtXFxuLSAqIHRvIHRoYXQgcGF0aC5cXG4tICovXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLXtcXG4tXFx0cmV0dXJuICFzYy1cXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVxcdTAwM2VtZW1jZyk7XFxuLX1cXG4tXFxuIC8qXFxuICAqIE9uZSB0aGluZyB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgb2Ygd2l0aCBhIHBlci1zYiBzaHJpbmtlciBpcyB0aGF0IHdlIGRvbid0XFxuICAqIGRyb3AgdGhlIGxhc3QgYWN0aXZlIHJlZmVyZW5jZSB0byB0aGUgc3VwZXJibG9jayBmcm9tIHdpdGhpbiB0aGUgc2hyaW5rZXIuXFxuQEAgLTIxMyw3ICsxOTksNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbiBcXHRpZiAoIXN1cGVyX3RyeWxvY2tfc2hhcmVkKHNiKSlcXG4gXFx0XFx0cmV0dXJuIFNIUklOS19TVE9QO1xcbiBcXG4tXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcXHUwMDI2XFx1MDAyNiBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcXG4rXFx0aWYgKHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cylcXG4gXFx0XFx0ZnNfb2JqZWN0cyA9IHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpO1xcbiBcXG4gXFx0aW5vZGVzID0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZzYi1cXHUwMDNlc19pbm9kZV9scnUsIHNjKTtcXG5AQCAtMjc0LDggKzI2MCw3IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN1cGVyX2NhY2hlX2NvdW50KHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLFxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0c21wX3JtYigpO1xcbiBcXG4tXFx0aWYgKHNiLVxcdTAwM2VzX29wIFxcdTAwMjZcXHUwMDI2IHNiLVxcdTAwM2VzX29wLVxcdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpXFxuK1xcdGlmIChzYi1cXHUwMDNlc19vcCBcXHUwMDI2XFx1MDAyNiBzYi1cXHUwMDNlc19vcC1cXHUwMDNlbnJfY2FjaGVkX29iamVjdHMpXFxuIFxcdFxcdHRvdGFsX29iamVjdHMgPSBzYi1cXHUwMDNlc19vcC1cXHUwMDNlbnJfY2FjaGVkX29iamVjdHMoc2IsIHNjKTtcXG4gXFxuIFxcdHRvdGFsX29iamVjdHMgKz0gbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZzYi1cXHUwMDNlc19kZW50cnlfbHJ1LCBzYyk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oIGIvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG5pbmRleCA5NTcyNjA2Nzc2NzgxNS4uODE3MGJiODA2NmEyMmYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC01MjAsNiArNTIwLDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiBcXHRyZXR1cm4gKG1lbWNnID09IHJvb3RfbWVtX2Nncm91cCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBtZW1fY2dyb3VwX3Nocmlua19pc19yb290IC0gaXMgdGhpcyBhIGdsb2JhbCBvciByb290LW1lbWNnIHNocmluayBpbnZvY2F0aW9uP1xcbisgKiBAc2M6IHNocmlua19jb250cm9sIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc2hyaW5rZXIgY2FsbFxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgd2hlbiBAc2MgcmVwcmVzZW50cyBhIGdsb2JhbCByZWNsYWltIHNocmluayAoc2MtXFx1MDAzZW1lbWNnID09IE5VTEwpXFxuKyAqIG9yIGEgcm9vdC1tZW1jZyBzaHJpbmssIGkuZS4gbm90IGEgcGVyLW1lbWNnIGl0ZXJhdGlvbiBvZlxcbisgKiBzaHJpbmtfc2xhYl9tZW1jZygpLiBGaWxlc3lzdGVtcyB3aG9zZSAtXFx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKCkvXFxuKyAqIC1cXHUwMDNlZnJlZV9jYWNoZWRfb2JqZWN0cygpIGltcGxlbWVudGF0aW9ucyBvcGVyYXRlIG9uIGZpbGVzeXN0ZW0tZ2xvYmFsIHN0YXRlXFxuKyAqIGFuZCBkbyBub3QgaG9ub3VyIHNjLVxcdTAwM2VtZW1jZyBjYW4gdXNlIHRoaXMgdG8gZWFybHktcmV0dXJuIDAgaW4gcGVyLW1lbWNnXFxuKyAqIGNvbnRleHRzLlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4re1xcbitcXHRyZXR1cm4gIXNjLVxcdTAwM2VtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtXFx1MDAzZW1lbWNnKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXFxuIHtcXG4gXFx0cmV0dXJuIG9iamNnLVxcdTAwM2Vpc19yb290O1xcbkBAIC0xMDcxLDYgKzEwODcsMTEgQEAgc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfaXNfcm9vdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbit7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgb2JqX2Nncm91cF9pc19yb290KGNvbnN0IHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZylcXG4ge1xcbiBcXHRyZXR1cm4gdHJ1ZTtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXFxuaW5kZXggNTY2M2RmZjUzMTg2ZTIuLmFlYjU5OTAxYTg0MGM3IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxcbkBAIC0xMSw2ICsxMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9mc19wYXJzZXIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJmYXVsdGZkX2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpc3RfbHJ1LmhcXHUwMDNlXFxuIFxcbiAvKiBpbm9kZSBpbi1rZXJuZWwgZGF0YSAqL1xcbiBcXG5AQCAtNTQsNiArNTUsMTEgQEAgc3RydWN0IHNobWVtX2lub2RlX2luZm8ge1xcbiBcXHRzdHJ1Y3QgZHF1b3QgX19yY3VcXHQqaV9kcXVvdFtNQVhRVU9UQVNdO1xcbiAjZW5kaWZcXG4gXFx0c3RydWN0IGlub2RlXFx0XFx0dmZzX2lub2RlO1xcbitcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cFxcdCpzaHJpbmtsaXN0X21lbWNnO1xcbitcXHRpbnRcXHRcXHRcXHRzaHJpbmtsaXN0X25pZDtcXG4rI2VuZGlmXFxuIH07XFxuIFxcbiAjZGVmaW5lIFNITUVNX0ZMX1VTRVJfVklTSUJMRVxcdFxcdChGU19GTF9VU0VSX1ZJU0lCTEUgfCBGU19DQVNFRk9MRF9GTClcXG5AQCAtODMsOSArODksOSBAQCBzdHJ1Y3Qgc2htZW1fc2JfaW5mbyB7XFxuIFxcdGlub190IG5leHRfaW5vO1xcdFxcdCAgICAvKiBUaGUgbmV4dCBwZXItc2IgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xcbiBcXHRpbm9fdCBfX3BlcmNwdSAqaW5vX2JhdGNoOyAgLyogVGhlIG5leHQgcGVyLWNwdSBpbm9kZSBudW1iZXIgdG8gdXNlICovXFxuIFxcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2w7ICAgICAvKiBkZWZhdWx0IG1lbW9yeSBwb2xpY3kgZm9yIG1hcHBpbmdzICovXFxuLVxcdHNwaW5sb2NrX3Qgc2hyaW5rbGlzdF9sb2NrOyAgIC8qIFByb3RlY3RzIHNocmlua2xpc3QgKi9cXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBzaHJpbmtsaXN0OyAgLyogTGlzdCBvZiBzaGlua2FibGUgaW5vZGVzICovXFxuLVxcdHVuc2lnbmVkIGxvbmcgc2hyaW5rbGlzdF9sZW47IC8qIExlbmd0aCBvZiBzaHJpbmtsaXN0ICovXFxuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rXFx0c3RydWN0IGxpc3RfbHJ1IHNocmlua2xpc3Q7IC8qIExpc3Qgb2Ygc2hyaW5rYWJsZSBpbm9kZXMgKi9cXG4rI2VuZGlmXFxuIFxcdHN0cnVjdCBzaG1lbV9xdW90YV9saW1pdHMgcWxpbWl0czsgLyogRGVmYXVsdCBxdW90YSBsaW1pdHMgKi9cXG4gXFx0c3RydWN0IHNpbXBsZV94YXR0cl9jYWNoZSB4YV9jYWNoZTtcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmNcXG5pbmRleCBmMTg5ZDFhYzQwZGIyZC4uOGJmNmRkODUwZjg1YjQgMTAwNjQ0XFxuLS0tIGEvbW0vc2htZW0uY1xcbisrKyBiL21tL3NobWVtLmNcXG5AQCAtNzI0LDUxICs3MjQsMjQyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9mb3JtYXRfaHVnZShpbnQgaHVnZSlcXG4gfVxcbiAjZW5kaWZcXG4gXFxuK3N0YXRpYyBib29sIGlzX3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvKVxcbit7XFxuK1xcbitcXHRyZXR1cm4gaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9uaWQgPT0gLTE7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcXG4re1xcbitcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X25pZCA9IC0xO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZztcXG4rXFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIG1lbWNnO1xcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHX01FTUNHXFxuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqXFxuK3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbit7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxuK1xcdGlmICghbWVtY2cpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0cmV0ID0gbWVtY2dfbGlzdF9scnVfYWxsb2MobWVtY2csIFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIGdmcCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitcXHRcXHRyZXR1cm4gRVJSX1BUUihyZXQpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbWVtY2c7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG4rc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1KHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdCAgICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rI2VuZGlmXFxuK1xcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnApXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcXG4rXFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEwsICpvbGRfbWVtY2cgPSBOVUxMO1xcbitcXG4rXFx0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgZ2ZwKTtcXG4rXFx0aWYgKElTX0VSUihtZW1jZykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpIHtcXG4rXFx0XFx0LyogaXNvbGF0ZWQgb24gc2NhbiBsaXN0LCBsZXQgc2hyaW5rIGhhbmRsZSBpdCAqL1xcbitcXHRcXHRpZiAoaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbykpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID09IG5pZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9PSBtZW1jZylcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRcXHRsaXN0X2xydV9kZWwoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsXFxuK1xcdFxcdFxcdCAgICAgaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9uaWQsIGluZm8tXFx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xcbitcXHRcXHRvbGRfbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xcbitcXHR9XFxuK1xcbitcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xcbitcXHRsaXN0X2xydV9hZGQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xcbitcXHRtZW1jZyA9IE5VTEw7XFxuK3VubG9jazpcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmluZm8tXFx1MDAzZWxvY2spO1xcbitcXHRtZW1fY2dyb3VwX3B1dChvbGRfbWVtY2cpO1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XFxuK1xcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuK1xcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZWxvY2spO1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpKSB7XFxuK1xcdFxcdGxpc3RfbHJ1X2RlbChcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCxcXG4rXFx0XFx0XFx0ICAgICBpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X25pZCwgaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyk7XFxuK1xcdFxcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcXG4rXFx0fVxcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XFxuK31cXG4rXFxuK3N0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbitcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjO1xcbit9O1xcbitcXG4rc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbGlzdF9scnVfb25lICpscnUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCB2b2lkICphcmcpXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gKnNjYW4gPSBhcmc7XFxuK1xcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbitcXG4rXFx0aW5mbyA9IGxpc3RfZW50cnkoaXRlbSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVXNlIHRyeWxvY2sgdG8gYXZvaWQgQUJCQSBkZWFkbG9jazogYWRkL2RlbCBwYXRoIHRha2VzIGluZm8tXFx1MDAzZWxvY2tcXG4rXFx0ICogYmVmb3JlIHRoZSBsaXN0X2xydSBidWNrZXQgbG9jaywgd2hpbGUgaGVyZSB0aGUgb3JkZXIgaXMgcmV2ZXJzZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNwaW5fdHJ5bG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jaykpXFxuK1xcdFxcdHJldHVybiBMUlVfU0tJUDtcXG4rXFxuK1xcdC8qIHBpbiB0aGUgaW5vZGUgKi9cXG4rXFx0aW5vZGUgPSBpZ3JhYihcXHUwMDI2aW5mby1cXHUwMDNldmZzX2lub2RlKTtcXG4rXFx0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xcbitcXHRpZiAoIWlub2RlKSB7XFxuK1xcdFxcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcXG4rXFx0XFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rXFx0XFx0cmV0dXJuIExSVV9SRU1PVkVEO1xcbitcXHR9XFxuK1xcbitcXHRsaXN0X2xydV9pc29sYXRlKGxydSwgaXRlbSk7XFxuK1xcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcXG4rXFx0c2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkKGluZm8pO1xcbitcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBcXHUwMDI2c2Nhbi1cXHUwMDNlbGlzdCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitcXG4rXFx0cmV0dXJuIExSVV9SRU1PVkVEO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBOVUxMO1xcbitcXHRib29sIG1hdGNoO1xcbitcXG4rXFx0LypcXG4rXFx0ICogT25seSBub24tcm9vdCBtZW1jZyByZWNsYWltIG5lZWRzIHRvIG1hdGNoIHRoZSBmb2xpbyBjaGFyZ2UgYWdhaW5zdFxcbitcXHQgKiBzYy1cXHUwMDNlbWVtY2cuIFNraXAgdGhlIGZvbGlvIG1lbWNnIGNoZWNrIGZvciB0aGUgZm9sbG93aW5nIGNhc2VzOlxcbitcXHQgKiAxLiBzaG1lbSBxdW90YSByZWNsYWltIChzYyA9PSBOVUxMKVxcbitcXHQgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbVxcbitcXHQgKiAzLiByb290IG1lbWNnIHJlY2xhaW1cXG4rXFx0ICovXFxuK1xcdGlmICghc2MgfHwgIXNjLVxcdTAwM2VtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtXFx1MDAzZW1lbWNnKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbitcXHRpZiAoZm9saW9fbmlkKGZvbGlvKSAhPSBzYy1cXHUwMDNlbmlkKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xcbitcXHRtYXRjaCA9IG1lbWNnID09IHNjLVxcdTAwM2VtZW1jZztcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitcXG4rXFx0cmV0dXJuIG1hdGNoO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlbG9jayk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbitcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuK1xcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xcbitcXG4rXFx0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgR0ZQX05PV0FJVCk7XFxuK1xcdGlmIChJU19FUlIobWVtY2cpKVxcbitcXHRcXHRnb3RvIGRyb3A7XFxuK1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZWxvY2spO1xcbitcXHQvKiBSZXF1ZXVlIHRoZSBpbm9kZSB0byBzaHJpbmtsaXN0ICovXFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbitcXHRsaXN0X2xydV9hZGQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xcbitcXHRpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xcbitcXHRtZW1jZyA9IE5VTEw7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbitcXG4rXFx0cmV0dXJuO1xcbitcXG4rZHJvcDpcXG4rXFx0c2htZW1fdW51c2VkX2h1Z2VfZHJvcChpbm9kZSk7XFxuK31cXG4rXFxuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbiBcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXFxuIHtcXG4tXFx0TElTVF9IRUFEKGxpc3QpLCAqcG9zLCAqbmV4dDtcXG4rXFx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2NhbjtcXG4gXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4gXFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XFxuIFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLVxcdHVuc2lnbmVkIGxvbmcgYmF0Y2ggPSBzYyA/IHNjLVxcdTAwM2Vucl90b19zY2FuIDogMTI4O1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0O1xcbiBcXHR1bnNpZ25lZCBsb25nIHNwbGl0ID0gMCwgZnJlZWQgPSAwO1xcbiBcXG4tXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCkpXFxuLVxcdFxcdHJldHVybiBTSFJJTktfU1RPUDtcXG4tXFxuLVxcdHNwaW5fbG9jayhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xcbi1cXHRsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KSB7XFxuLVxcdFxcdGluZm8gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHNocmlua2xpc3QpO1xcbi1cXG4tXFx0XFx0LyogcGluIHRoZSBpbm9kZSAqL1xcbi1cXHRcXHRpbm9kZSA9IGlncmFiKFxcdTAwMjZpbmZvLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbi1cXG4tXFx0XFx0LyogaW5vZGUgaXMgYWJvdXQgdG8gYmUgZXZpY3RlZCAqL1xcbi1cXHRcXHRpZiAoIWlub2RlKSB7XFxuLVxcdFxcdFxcdGxpc3RfZGVsX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbi1cXHRcXHRcXHRnb3RvIG5leHQ7XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdGxpc3RfbW92ZShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNmxpc3QpO1xcbi1uZXh0Olxcbi1cXHRcXHRzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbGVuLS07XFxuLVxcdFxcdGlmICghLS1iYXRjaClcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdH1cXG4tXFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjYW4ubGlzdCk7XFxuK1xcdHNjYW4uc2MgPSBzYztcXG4rXFx0aWYgKHNjKVxcbitcXHRcXHRsaXN0X2xydV9zaHJpbmtfd2FsayhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzYyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlLCBcXHUwMDI2c2Nhbik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bGlzdF9scnVfd2FsayhcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlLFxcbitcXHRcXHRcXHQgICAgICBcXHUwMDI2c2NhbiwgMTI4KTtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFxcdTAwMjZsaXN0KSB7XFxuLVxcdFxcdHBnb2ZmX3QgbmV4dCwgZW5kO1xcbitcXHRsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBcXHUwMDI2c2Nhbi5saXN0KSB7XFxuK1xcdFxcdHBnb2ZmX3QgZm9saW9fZW5kLCBlbmQ7XFxuIFxcdFxcdGxvZmZfdCBpX3NpemU7XFxuIFxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcXG4gXFx0XFx0aW5vZGUgPSBcXHUwMDI2aW5mby1cXHUwMDNldmZzX2lub2RlO1xcbiBcXG4tXFx0XFx0aWYgKG5yX3RvX2ZyZWUgXFx1MDAyNlxcdTAwMjYgZnJlZWQgXFx1MDAzZT0gbnJfdG9fZnJlZSlcXG4tXFx0XFx0XFx0Z290byBtb3ZlX2JhY2s7XFxuLVxcbiBcXHRcXHRpX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuIFxcdFxcdGZvbGlvID0gZmlsZW1hcF9nZXRfZW50cnkoaW5vZGUtXFx1MDAzZWlfbWFwcGluZywgaV9zaXplIC8gUEFHRV9TSVpFKTtcXG4gXFx0XFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpXFxuQEAgLTc4MSwxMyArOTcyLDI1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHQvKiBDaGVjayBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBnYWluIGZyb20gc3BsaXR0aW5nICovXFxuLVxcdFxcdG5leHQgPSBmb2xpb19uZXh0X2luZGV4KGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fZW5kID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XFxuIFxcdFxcdGVuZCA9IHNobWVtX2ZhbGxvY2VuZChpbm9kZSwgRElWX1JPVU5EX1VQKGlfc2l6ZSwgUEFHRV9TSVpFKSk7XFxuLVxcdFxcdGlmIChlbmQgXFx1MDAzYz0gZm9saW8tXFx1MDAzZWluZGV4IHx8IGVuZCBcXHUwMDNlPSBuZXh0KSB7XFxuK1xcdFxcdGlmIChlbmQgXFx1MDAzYz0gZm9saW8tXFx1MDAzZWluZGV4IHx8IGVuZCBcXHUwMDNlPSBmb2xpb19lbmQpIHtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFx0XFx0XFx0Z290byBkcm9wO1xcbiBcXHRcXHR9XFxuIFxcbitcXHRcXHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkge1xcbitcXHRcXHRcXHRzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7XFxuK1xcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdFxcdGdvdG8gcHV0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAobnJfdG9fZnJlZSBcXHUwMDI2XFx1MDAyNiBmcmVlZCBcXHUwMDNlPSBucl90b19mcmVlKSB7XFxuK1xcdFxcdFxcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIE1vdmUgdGhlIGlub2RlIG9uIHRoZSBsaXN0IGJhY2sgdG8gc2hyaW5rbGlzdCBpZiB3ZSBmYWlsZWRcXG4gXFx0XFx0ICogdG8gbG9jayB0aGUgcGFnZSBhdCB0aGlzIHRpbWUuXFxuQEAgLTc5NiwzNCArOTk5LDMzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbiBcXHRcXHQgKiByZWNsYWltIHBhdGguXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuK1xcdFxcdFxcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICghaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goZm9saW8sIHNjYW4uc2MpKSB7XFxuK1xcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdFxcdFxcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4tXFx0XFx0XFx0Z290byBtb3ZlX2JhY2s7XFxuK1xcdFxcdFxcdGdvdG8gcHV0O1xcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuLVxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIFxcbiBcXHRcXHQvKiBJZiBzcGxpdCBmYWlsZWQgbW92ZSB0aGUgaW5vZGUgb24gdGhlIGxpc3QgYmFjayB0byBzaHJpbmtsaXN0ICovXFxuLVxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdGdvdG8gbW92ZV9iYWNrO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0XFx0Z290byBwdXQ7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdFxcdGZyZWVkICs9IG5leHQgLSBlbmQ7XFxuK1xcdFxcdGZyZWVkICs9IGZvbGlvX2VuZCAtIGVuZDtcXG4gXFx0XFx0c3BsaXQrKztcXG4rXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gZHJvcDpcXG4tXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuLVxcdFxcdGdvdG8gcHV0O1xcbi1tb3ZlX2JhY2s6XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaXMgZWl0aGVyIG9uIHRoZSBnbG9iYWwgbGlzdCBvciBkZWxldGVkXFxuLVxcdFxcdCAqIGZyb20gYW55IGxvY2FsIGxpc3QgYmVmb3JlIGlwdXQoKSBzaW5jZSBpdCBjb3VsZCBiZSBkZWxldGVkXFxuLVxcdFxcdCAqIGluIGFub3RoZXIgdGhyZWFkIG9uY2Ugd2UgcHV0IHRoZSBpbm9kZSAodGhlbiB0aGUgbG9jYWwgbGlzdFxcbi1cXHRcXHQgKiBpcyBjb3JydXB0ZWQpLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdFxcdGxpc3RfbW92ZShcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuLVxcdFxcdHNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sZW4rKztcXG4tXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4rXFx0XFx0c2htZW1fdW51c2VkX2h1Z2VfZHJvcChpbm9kZSk7XFxuIHB1dDpcXG4gXFx0XFx0aXB1dChpbm9kZSk7XFxuIFxcdH1cXG5AQCAtODM2LDcgKzEwMzgsNyBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zY2FuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuIHtcXG4gXFx0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKHNiKTtcXG4gXFxuLVxcdGlmICghUkVBRF9PTkNFKHNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sZW4pKVxcbitcXHRpZiAoIWxpc3RfbHJ1X3Nocmlua19jb3VudChcXHUwMDI2c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0LCBzYykpXFxuIFxcdFxcdHJldHVybiBTSFJJTktfU1RPUDtcXG4gXFxuIFxcdHJldHVybiBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc2JpbmZvLCBzYywgMCk7XFxuQEAgLTg0NiwxMiArMTA0OCwyMiBAQCBzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9jb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbiBcXHRcXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbiB7XFxuIFxcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7XFxuLVxcdHJldHVybiBSRUFEX09OQ0Uoc2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xlbik7XFxuK1xcbitcXHRyZXR1cm4gbGlzdF9scnVfc2hyaW5rX2NvdW50KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNjKTtcXG4gfVxcbiAjZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuIFxcbiAjZGVmaW5lIHNobWVtX2h1Z2UgU0hNRU1fSFVHRV9ERU5ZXFxuIFxcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9hZGQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnApXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rfVxcbitcXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXFxuIFxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcXG4ge1xcbkBAIC0xNDA3LDE0ICsxNjE5LDcgQEAgc3RhdGljIHZvaWQgc2htZW1fZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0aW5vZGUtXFx1MDAzZWlfc2l6ZSA9IDA7XFxuIFxcdFxcdG1hcHBpbmdfc2V0X2V4aXRpbmcoaW5vZGUtXFx1MDAzZWlfbWFwcGluZyk7XFxuIFxcdFxcdHNobWVtX3RydW5jYXRlX3JhbmdlKGlub2RlLCAwLCAobG9mZl90KS0xKTtcXG4tXFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KSkge1xcbi1cXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4tXFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KSkge1xcbi1cXHRcXHRcXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZpbmZvLVxcdTAwM2VzaHJpbmtsaXN0KTtcXG4tXFx0XFx0XFx0XFx0c2JpbmZvLVxcdTAwM2VzaHJpbmtsaXN0X2xlbi0tO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbG9jayk7XFxuLVxcdFxcdH1cXG4rXFx0XFx0c2htZW1fdW51c2VkX2h1Z2VfZGVsKGlub2RlKTtcXG4gXFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KFxcdTAwMjZpbmZvLVxcdTAwM2Vzd2FwbGlzdCkpIHtcXG4gXFx0XFx0XFx0LyogV2FpdCB3aGlsZSBzaG1lbV91bnVzZSgpIGlzIHNjYW5uaW5nIHRoaXMgaW5vZGUuLi4gKi9cXG4gXFx0XFx0XFx0d2FpdF92YXJfZXZlbnQoXFx1MDAyNmluZm8tXFx1MDAzZXN0b3BfZXZpY3Rpb24sXFxuQEAgLTI1MjIsMjggKzI3MjcsNiBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4gXFxuIGFsbG9jZWQ6XFxuIFxcdGFsbG9jZWQgPSB0cnVlO1xcbi1cXHRpZiAoZm9saW9fdGVzdF9sYXJnZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXFx1MDAzY1xcbi1cXHRcXHRcXHRcXHRcXHRmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkge1xcbi1cXHRcXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XFxuLVxcdFxcdCAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogX2NhcmVmdWwgdG8gZGVmZW5kIGFnYWluc3QgdW5sb2NrZWQgYWNjZXNzIHRvXFxuLVxcdFxcdCAqIC1cXHUwMDNlc2hyaW5rX2xpc3QgaW4gc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKClcXG4tXFx0XFx0ICovXFxuLVxcdFxcdGlmIChsaXN0X2VtcHR5X2NhcmVmdWwoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpKSB7XFxuLVxcdFxcdFxcdGxpc3RfYWRkX3RhaWwoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QsXFxuLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbi1cXHRcXHRcXHRzYmluZm8tXFx1MDAzZXNocmlua2xpc3RfbGVuKys7XFxuLVxcdFxcdH1cXG4tXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKHNncCA9PSBTR1BfV1JJVEUpXFxuIFxcdFxcdGZvbGlvX3NldF9yZWZlcmVuY2VkKGZvbGlvKTtcXG4gXFx0LypcXG5AQCAtMjU3Miw2ICsyNzU1LDE1IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbiBcXHRcXHRlcnJvciA9IC1FSU5WQUw7XFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHR9XFxuK1xcbitcXHRpZiAoYWxsb2NlZCBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgRElWX1JPVU5EX1VQKGlfc2l6ZV9yZWFkKGlub2RlKSwgUEFHRV9TSVpFKSBcXHUwMDNjIGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFBhcnQgb2YgdGhlIGxhcmdlIGZvbGlvIGlzIGJleW9uZCBpX3NpemU6IHN1YmplY3RcXG4rXFx0XFx0ICogdG8gc2hyaW5rIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNobWVtX3VudXNlZF9odWdlX2FkZChpbm9kZSwgZm9saW8sIGdmcCk7XFxuK1xcdH1cXG4gb3V0OlxcbiBcXHQqZm9saW9wID0gZm9saW87XFxuIFxcdHJldHVybiAwO1xcbkBAIC0zMDQ4LDYgKzMyNDAsMTAgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqX19zaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdGlmIChpbmZvLVxcdTAwM2Vmc2ZsYWdzKVxcbiBcXHRcXHRzaG1lbV9zZXRfaW5vZGVfZmxhZ3MoaW5vZGUsIGluZm8tXFx1MDAzZWZzZmxhZ3MsIE5VTEwpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rXFx0aW5mby1cXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IE5VTEw7XFxuK1xcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbmlkID0gLTE7XFxuKyNlbmRpZlxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aW5mby1cXHUwMDNlc3dhcGxpc3QpO1xcbiBcXHRjYWNoZV9ub19hY2woaW5vZGUpO1xcbiBcXHRpZiAoc2JpbmZvLVxcdTAwM2Vub3N3YXApXFxuQEAgLTQ5MTQsNiArNTExMCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiAjZW5kaWZcXG4gXFx0ZnJlZV9wZXJjcHUoc2JpbmZvLVxcdTAwM2Vpbm9fYmF0Y2gpO1xcbiBcXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFxcdTAwMjZzYmluZm8tXFx1MDAzZXVzZWRfYmxvY2tzKTtcXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbisjZW5kaWZcXG4gXFx0bXBvbF9wdXQoc2JpbmZvLVxcdTAwM2VtcG9sKTtcXG4gI2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxcbiBcXHRzaW1wbGVfeGF0dHJfY2FjaGVfY2xlYW51cChcXHUwMDI2c2JpbmZvLVxcdTAwM2V4YV9jYWNoZSk7XFxuQEAgLTUwMDcsOCArNTIwNiwxMSBAQCBzdGF0aWMgaW50IHNobWVtX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRyYXdfc3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc3RhdF9sb2NrKTtcXG4gXFx0aWYgKHBlcmNwdV9jb3VudGVyX2luaXQoXFx1MDAyNnNiaW5mby1cXHUwMDNldXNlZF9ibG9ja3MsIDAsIEdGUF9LRVJORUwpKVxcbiBcXHRcXHRnb3RvIGZhaWxlZDtcXG4tXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCk7XFxuK1xcbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdGlmIChsaXN0X2xydV9pbml0X21lbWNnKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QsIHNiLVxcdTAwM2VzX3NocmluaykpXFxuK1xcdFxcdGdvdG8gZmFpbGVkO1xcbisjZW5kaWZcXG4gXFxuIFxcdHNiLVxcdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcXG4gXFx0c2ItXFx1MDAzZXNfYmxvY2tzaXplID0gUEFHRV9TSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNDo0MS4xNjI4Njg2ODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2MTc2NDE3NTc1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJUUkZTX0ZTXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNobWVtX3VudXNlZF9odWdlX3Nocmlua1wiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2Vfc2NhblwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfY291bnRcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2FkZFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfZGVsXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9kcm9wXCIsXG4gICAgXCJpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1XCIsXG4gICAgXCJzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnXCIsXG4gICAgXCJpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZFwiLFxuICAgIFwic2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkXCIsXG4gICAgXCJidHJmc19ucl9jYWNoZWRfb2JqZWN0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBzaG1lbSBoYW5kbGVzIHVudXNlZCBodWdlIHBhZ2VzIHdoZW4gc2hyaW5raW5nLCBpbnRyb2R1Y2luZyBsaXN0X2xydSBmb3Igc2hyaW5rbGlzdCBpbiBzaG1lbV9zYl9pbmZvLiBJdCBhbHNvIG1vZGlmaWVzIHN1cGVyX2NhY2hlX3NjYW4gYW5kIHN1cGVyX2NhY2hlX2NvdW50IGluIGZzL3N1cGVyLmMgdG8gcmVtb3ZlIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUgYW5kIGluc3RlYWQgdXNlcyBtZW1fY2dyb3VwX3Nocmlua19pc19yb290IGluIGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDJiYTMyZGFiMzFlMWYxMzU4YzcwYWRkZTQ5ZWI4ZjQxOWVlMjZhMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDIyIDAwOjI0OjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmNcbmluZGV4IGE3ZDgwNDIxOWJlYzM0Li5jYzQ1Mzc0MzUzOTk3NiAxMDA2NDRcbi0tLSBhL2ZzL2J0cmZzL3N1cGVyLmNcbisrKyBiL2ZzL2J0cmZzL3N1cGVyLmNcbkBAIC0yMiw2ICsyMiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmFtZWkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pc2NkZXZpY2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21hZ2ljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYXRlbGltaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyYy5oXHUwMDNlXG5AQCAtMjQzNCw2ICsyNDM1LDE1IEBAIHN0YXRpYyBsb25nIGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBzaHJpbmtfY29udHJvXG4gXHRzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbyA9IGJ0cmZzX3NiKHNiKTtcbiBcdGNvbnN0IHM2NCBuciA9IHBlcmNwdV9jb3VudGVyX3JlYWRfcG9zaXRpdmUoXHUwMDI2ZnNfaW5mby1cdTAwM2VldmljdGFibGVfZXh0ZW50X21hcHMpO1xuIFxuK1x0LypcbitcdCAqIFRoZSBldmljdGFibGUgZXh0ZW50IG1hcCBjb3VudGVyIGlzIGZpbGVzeXN0ZW0tZ2xvYmFsIGFuZCBkb2VzIG5vdFxuK1x0ICogaG9ub3VyIHNjLVx1MDAzZW1lbWNnLCBzbyBpdCBpcyBvbmx5IG1lYW5pbmdmdWwgb24gdGhlIGdsb2JhbCAoa3N3YXBkIG9yXG4rXHQgKiByb290IGRpcmVjdCByZWNsYWltKSBzaHJpbmsgcGF0aC4gU2tpcCB0aGUgcGVyLW1lbWNnIGl0ZXJhdGlvbnMgb2ZcbitcdCAqIHNocmlua19zbGFiX21lbWNnKCkgdG8gYXZvaWQgcXVldWVpbmcgZHVwbGljYXRlIGdsb2JhbCB3b3JrLlxuK1x0ICovXG4rXHRpZiAoIW1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3Qoc2MpKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdHRyYWNlX2J0cmZzX2V4dGVudF9tYXBfc2hyaW5rZXJfY291bnQoZnNfaW5mbywgbnIpO1xuIFxuIFx0cmV0dXJuIG5yO1xuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCA5ZjgyZTZiMzhmMDdlZS4uOTNmMjRhZWE3NWM0ZDYgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtMjQsNyArMjQsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYmxrZGV2LmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VjdXJpdHkuaFx1MDAzZVxuQEAgLTE3MSwxOSArMTcwLDYgQEAgc3RhdGljIHZvaWQgc3VwZXJfd2FrZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgZmxhZylcbiBcdHdha2VfdXBfdmFyKFx1MDAyNnNiLVx1MDAzZXNfZmxhZ3MpO1xuIH1cbiBcbi0vKlxuLSAqIFRoZSBzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzIGhvb2tzICh1c2VkIGZvciBleGFtcGxlIGJ5IGJ0cmZzIGFuZCB4ZnMpXG4tICogb3BlcmF0ZSBvbiBmaWxlc3lzdGVtLWdsb2JhbCBzdGF0ZSBhbmQgaWdub3JlIHNjLVx1MDAzZW1lbWNnLiBEcml2aW5nIHRoZW1cbi0gKiBmcm9tIHBlci1tZW1jZyBzaHJpbmtfc2xhYl9tZW1jZygpIGludm9jYXRpb25zIG9ubHkgYnVybnMgQ1BVIHdhbGtpbmdcbi0gKiBwZXItY3B1IGNvdW50ZXJzIGFuZCBxdWV1ZWluZyBkdXBsaWNhdGUgd29yazogdGhlIGFjdHVhbCByZWNsYWltIGhhcHBlbnMgb25cbi0gKiB0aGUgZ2xvYmFsIHBhdGggKGtzd2FwZCBvciByb290IGRpcmVjdCByZWNsYWltKSByZWdhcmRsZXNzLiBSZXN0cmljdCB0aGVtXG4tICogdG8gdGhhdCBwYXRoLlxuLSAqL1xuLXN0YXRpYyBpbmxpbmUgYm9vbCBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4te1xuLVx0cmV0dXJuICFzYy1cdTAwM2VtZW1jZyB8fCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc2MtXHUwMDNlbWVtY2cpO1xuLX1cbi1cbiAvKlxuICAqIE9uZSB0aGluZyB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwgb2Ygd2l0aCBhIHBlci1zYiBzaHJpbmtlciBpcyB0aGF0IHdlIGRvbid0XG4gICogZHJvcCB0aGUgbGFzdCBhY3RpdmUgcmVmZXJlbmNlIHRvIHRoZSBzdXBlcmJsb2NrIGZyb20gd2l0aGluIHRoZSBzaHJpbmtlci5cbkBAIC0yMTMsNyArMTk5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc3VwZXJfY2FjaGVfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdGlmICghc3VwZXJfdHJ5bG9ja19zaGFyZWQoc2IpKVxuIFx0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjYgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZShzYykpXG4rXHRpZiAoc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cylcbiBcdFx0ZnNfb2JqZWN0cyA9IHNiLVx1MDAzZXNfb3AtXHUwMDNlbnJfY2FjaGVkX29iamVjdHMoc2IsIHNjKTtcbiBcbiBcdGlub2RlcyA9IGxpc3RfbHJ1X3Nocmlua19jb3VudChcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xydSwgc2MpO1xuQEAgLTI3NCw4ICsyNjAsNyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdXBlcl9jYWNoZV9jb3VudChzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluayxcbiBcdFx0cmV0dXJuIDA7XG4gXHRzbXBfcm1iKCk7XG4gXG4tXHRpZiAoc2ItXHUwMDNlc19vcCBcdTAwMjZcdTAwMjYgc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyBcdTAwMjZcdTAwMjZcbi1cdCAgICBzdXBlcl9mc19vYmplY3RzX2VsaWdpYmxlKHNjKSlcbitcdGlmIChzYi1cdTAwM2VzX29wIFx1MDAyNlx1MDAyNiBzYi1cdTAwM2VzX29wLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKVxuIFx0XHR0b3RhbF9vYmplY3RzID0gc2ItXHUwMDNlc19vcC1cdTAwM2Vucl9jYWNoZWRfb2JqZWN0cyhzYiwgc2MpO1xuIFxuIFx0dG90YWxfb2JqZWN0cyArPSBsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2ItXHUwMDNlc19kZW50cnlfbHJ1LCBzYyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxuaW5kZXggOTU3MjYwNjc3Njc4MTUuLjgxNzBiYjgwNjZhMjJmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNTIwLDYgKzUyMCwyMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9pc19yb290KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbiBcdHJldHVybiAobWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwKTtcbiB9XG4gXG4rLyoqXG4rICogbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdCAtIGlzIHRoaXMgYSBnbG9iYWwgb3Igcm9vdC1tZW1jZyBzaHJpbmsgaW52b2NhdGlvbj9cbisgKiBAc2M6IHNocmlua19jb250cm9sIGRlc2NyaWJpbmcgdGhlIGN1cnJlbnQgc2hyaW5rZXIgY2FsbFxuKyAqXG4rICogUmV0dXJucyB0cnVlIHdoZW4gQHNjIHJlcHJlc2VudHMgYSBnbG9iYWwgcmVjbGFpbSBzaHJpbmsgKHNjLVx1MDAzZW1lbWNnID09IE5VTEwpXG4rICogb3IgYSByb290LW1lbWNnIHNocmluaywgaS5lLiBub3QgYSBwZXItbWVtY2cgaXRlcmF0aW9uIG9mXG4rICogc2hyaW5rX3NsYWJfbWVtY2coKS4gRmlsZXN5c3RlbXMgd2hvc2UgLVx1MDAzZW5yX2NhY2hlZF9vYmplY3RzKCkvXG4rICogLVx1MDAzZWZyZWVfY2FjaGVkX29iamVjdHMoKSBpbXBsZW1lbnRhdGlvbnMgb3BlcmF0ZSBvbiBmaWxlc3lzdGVtLWdsb2JhbCBzdGF0ZVxuKyAqIGFuZCBkbyBub3QgaG9ub3VyIHNjLVx1MDAzZW1lbWNnIGNhbiB1c2UgdGhpcyB0byBlYXJseS1yZXR1cm4gMCBpbiBwZXItbWVtY2dcbisgKiBjb250ZXh0cy5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9zaHJpbmtfaXNfcm9vdChzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuK3tcbitcdHJldHVybiAhc2MtXHUwMDNlbWVtY2cgfHwgbWVtX2Nncm91cF9pc19yb290KHNjLVx1MDAzZW1lbWNnKTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIG9ial9jZ3JvdXBfaXNfcm9vdChjb25zdCBzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cpXG4ge1xuIFx0cmV0dXJuIG9iamNnLVx1MDAzZWlzX3Jvb3Q7XG5AQCAtMTA3MSw2ICsxMDg3LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX2lzX3Jvb3Qoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4re1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfY2dyb3VwX2lzX3Jvb3QoY29uc3Qgc3RydWN0IG9ial9jZ3JvdXAgKm9iamNnKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaCBiL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaFxuaW5kZXggNTY2M2RmZjUzMTg2ZTIuLmFlYjU5OTAxYTg0MGM3IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmhcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNfcGFyc2VyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyZmF1bHRmZF9rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gXG4gLyogaW5vZGUgaW4ta2VybmVsIGRhdGEgKi9cbiBcbkBAIC01NCw2ICs1NSwxMSBAQCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyB7XG4gXHRzdHJ1Y3QgZHF1b3QgX19yY3VcdCppX2RxdW90W01BWFFVT1RBU107XG4gI2VuZGlmXG4gXHRzdHJ1Y3QgaW5vZGVcdFx0dmZzX2lub2RlO1xuK1xuKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHN0cnVjdCBtZW1fY2dyb3VwXHQqc2hyaW5rbGlzdF9tZW1jZztcbitcdGludFx0XHRcdHNocmlua2xpc3RfbmlkO1xuKyNlbmRpZlxuIH07XG4gXG4gI2RlZmluZSBTSE1FTV9GTF9VU0VSX1ZJU0lCTEVcdFx0KEZTX0ZMX1VTRVJfVklTSUJMRSB8IEZTX0NBU0VGT0xEX0ZMKVxuQEAgLTgzLDkgKzg5LDkgQEAgc3RydWN0IHNobWVtX3NiX2luZm8ge1xuIFx0aW5vX3QgbmV4dF9pbm87XHRcdCAgICAvKiBUaGUgbmV4dCBwZXItc2IgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xuIFx0aW5vX3QgX19wZXJjcHUgKmlub19iYXRjaDsgIC8qIFRoZSBuZXh0IHBlci1jcHUgaW5vZGUgbnVtYmVyIHRvIHVzZSAqL1xuIFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDsgICAgIC8qIGRlZmF1bHQgbWVtb3J5IHBvbGljeSBmb3IgbWFwcGluZ3MgKi9cbi1cdHNwaW5sb2NrX3Qgc2hyaW5rbGlzdF9sb2NrOyAgIC8qIFByb3RlY3RzIHNocmlua2xpc3QgKi9cbi1cdHN0cnVjdCBsaXN0X2hlYWQgc2hyaW5rbGlzdDsgIC8qIExpc3Qgb2Ygc2hpbmthYmxlIGlub2RlcyAqL1xuLVx0dW5zaWduZWQgbG9uZyBzaHJpbmtsaXN0X2xlbjsgLyogTGVuZ3RoIG9mIHNocmlua2xpc3QgKi9cbisjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRzdHJ1Y3QgbGlzdF9scnUgc2hyaW5rbGlzdDsgLyogTGlzdCBvZiBzaHJpbmthYmxlIGlub2RlcyAqL1xuKyNlbmRpZlxuIFx0c3RydWN0IHNobWVtX3F1b3RhX2xpbWl0cyBxbGltaXRzOyAvKiBEZWZhdWx0IHF1b3RhIGxpbWl0cyAqL1xuIFx0c3RydWN0IHNpbXBsZV94YXR0cl9jYWNoZSB4YV9jYWNoZTtcbiB9O1xuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXG5pbmRleCBmMTg5ZDFhYzQwZGIyZC4uOGJmNmRkODUwZjg1YjQgMTAwNjQ0XG4tLS0gYS9tbS9zaG1lbS5jXG4rKysgYi9tbS9zaG1lbS5jXG5AQCAtNzI0LDUxICs3MjQsMjQyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpzaG1lbV9mb3JtYXRfaHVnZShpbnQgaHVnZSlcbiB9XG4gI2VuZGlmXG4gXG4rc3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8pXG4re1xuK1xuK1x0cmV0dXJuIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPT0gLTE7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbit7XG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gLTE7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcbit7XG4rXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2c7XG4rXG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xuK1xuK1x0cmV0dXJuIG1lbWNnO1xuK31cbitcbisjaWZkZWYgQ09ORklHX01FTUNHXG4rc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcbitzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHQgICAgZ2ZwX3QgZ2ZwKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcdGludCByZXQ7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuK1x0aWYgKCFtZW1jZylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRyZXQgPSBtZW1jZ19saXN0X2xydV9hbGxvYyhtZW1jZywgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIGdmcCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIocmV0KTtcbitcdH1cbitcbitcdHJldHVybiBtZW1jZztcbit9XG4rI2Vsc2VcbitzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK3NobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdCAgICBnZnBfdCBnZnApXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0ICBnZnBfdCBnZnApXG4re1xuK1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbitcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGludCBuaWQgPSBmb2xpb19uaWQoZm9saW8pO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTCwgKm9sZF9tZW1jZyA9IE5VTEw7XG4rXG4rXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApO1xuK1x0aWYgKElTX0VSUihtZW1jZykpXG4rXHRcdHJldHVybjtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbitcdFx0LyogaXNvbGF0ZWQgb24gc2NhbiBsaXN0LCBsZXQgc2hyaW5rIGhhbmRsZSBpdCAqL1xuK1x0XHRpZiAoaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWQoaW5mbykpXG4rXHRcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRcdGlmIChpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID09IG5pZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9PSBtZW1jZylcbitcdFx0XHRnb3RvIHVubG9jaztcbitcbitcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4rXHRcdFx0ICAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xuK1x0XHRvbGRfbWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuK1x0fVxuK1xuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gbWVtY2c7XG4rXHRpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkID0gbmlkO1xuK1x0bGlzdF9scnVfYWRkKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsIG5pZCwgbWVtY2cpO1xuK1x0bWVtY2cgPSBOVUxMO1xuK3VubG9jazpcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rXHRtZW1fY2dyb3VwX3B1dChvbGRfbWVtY2cpO1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuK1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbitcbitcdHNwaW5fbG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbitcdFx0bGlzdF9scnVfZGVsKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsXG4rXHRcdFx0ICAgICBpbmZvLVx1MDAzZXNocmlua2xpc3RfbmlkLCBpbmZvLVx1MDAzZXNocmlua2xpc3RfbWVtY2cpO1xuK1x0XHRtZW1jZyA9IHNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2coaW5mbyk7XG4rXHR9XG4rXHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1xuK1x0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xuK31cbitcbitzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjO1xuK307XG4rXG4rc3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sXG4rXHRcdFx0XHRcdFx0IHN0cnVjdCBsaXN0X2xydV9vbmUgKmxydSxcbitcdFx0XHRcdFx0XHQgdm9pZCAqYXJnKVxuK3tcbitcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnO1xuK1x0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm87XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gTlVMTDtcbitcbitcdGluZm8gPSBsaXN0X2VudHJ5KGl0ZW0sIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbitcbitcdC8qXG4rXHQgKiBVc2UgdHJ5bG9jayB0byBhdm9pZCBBQkJBIGRlYWRsb2NrOiBhZGQvZGVsIHBhdGggdGFrZXMgaW5mby1cdTAwM2Vsb2NrXG4rXHQgKiBiZWZvcmUgdGhlIGxpc3RfbHJ1IGJ1Y2tldCBsb2NrLCB3aGlsZSBoZXJlIHRoZSBvcmRlciBpcyByZXZlcnNlZC5cbitcdCAqL1xuK1x0aWYgKCFzcGluX3RyeWxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKSlcbitcdFx0cmV0dXJuIExSVV9TS0lQO1xuK1xuK1x0LyogcGluIHRoZSBpbm9kZSAqL1xuK1x0aW5vZGUgPSBpZ3JhYihcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZSk7XG4rXHQvKiBpbm9kZSBpcyBhYm91dCB0byBiZSBldmljdGVkICovXG4rXHRpZiAoIWlub2RlKSB7XG4rXHRcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcbitcdFx0bWVtY2cgPSBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnKGluZm8pO1xuK1x0XHRzcGluX3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZWxvY2spO1xuK1x0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rXHRcdHJldHVybiBMUlVfUkVNT1ZFRDtcbitcdH1cbitcbitcdGxpc3RfbHJ1X2lzb2xhdGUobHJ1LCBpdGVtKTtcbitcdG1lbWNnID0gc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhpbmZvKTtcbitcdHNldF9zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZChpbmZvKTtcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBcdTAwMjZzY2FuLVx1MDAzZWxpc3QpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcbitcdHJldHVybiBMUlVfUkVNT1ZFRDtcbit9XG4rXG4rc3RhdGljIGJvb2wgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IE5VTEw7XG4rXHRib29sIG1hdGNoO1xuK1xuK1x0LypcbitcdCAqIE9ubHkgbm9uLXJvb3QgbWVtY2cgcmVjbGFpbSBuZWVkcyB0byBtYXRjaCB0aGUgZm9saW8gY2hhcmdlIGFnYWluc3RcbitcdCAqIHNjLVx1MDAzZW1lbWNnLiBTa2lwIHRoZSBmb2xpbyBtZW1jZyBjaGVjayBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcbitcdCAqIDEuIHNobWVtIHF1b3RhIHJlY2xhaW0gKHNjID09IE5VTEwpXG4rXHQgKiAyLiBnbG9iYWwgc2hyaW5rZXIgcmVjbGFpbVxuK1x0ICogMy4gcm9vdCBtZW1jZyByZWNsYWltXG4rXHQgKi9cbitcdGlmICghc2MgfHwgIXNjLVx1MDAzZW1lbWNnIHx8IG1lbV9jZ3JvdXBfaXNfcm9vdChzYy1cdTAwM2VtZW1jZykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0aWYgKGZvbGlvX25pZChmb2xpbykgIT0gc2MtXHUwMDNlbmlkKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuK1x0bWF0Y2ggPSBtZW1jZyA9PSBzYy1cdTAwM2VtZW1jZztcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcbitcdHJldHVybiBtYXRjaDtcbit9XG4rXG4rc3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvID0gU0hNRU1fSShpbm9kZSk7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuK1x0c3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyA9IFNITUVNX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1x0aW50IG5pZCA9IGZvbGlvX25pZChmb2xpbyk7XG4rXG4rXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBHRlBfTk9XQUlUKTtcbitcdGlmIChJU19FUlIobWVtY2cpKVxuK1x0XHRnb3RvIGRyb3A7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2aW5mby1cdTAwM2Vsb2NrKTtcbitcdC8qIFJlcXVldWUgdGhlIGlub2RlIHRvIHNocmlua2xpc3QgKi9cbitcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbitcdGxpc3RfbHJ1X2FkZChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0LCBuaWQsIG1lbWNnKTtcbitcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9tZW1jZyA9IG1lbWNnO1xuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X25pZCA9IG5pZDtcbitcdG1lbWNnID0gTlVMTDtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlbG9jayk7XG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rXG4rXHRyZXR1cm47XG4rXG4rZHJvcDpcbitcdHNobWVtX3VudXNlZF9odWdlX2Ryb3AoaW5vZGUpO1xuK31cbitcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYywgdW5zaWduZWQgbG9uZyBucl90b19mcmVlKVxuIHtcbi1cdExJU1RfSEVBRChsaXN0KSwgKnBvcywgKm5leHQ7XG4rXHRzdHJ1Y3Qgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbiBzY2FuO1xuIFx0c3RydWN0IGlub2RlICppbm9kZTtcbiBcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdHVuc2lnbmVkIGxvbmcgYmF0Y2ggPSBzYyA/IHNjLVx1MDAzZW5yX3RvX3NjYW4gOiAxMjg7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuZXh0O1xuIFx0dW5zaWduZWQgbG9uZyBzcGxpdCA9IDAsIGZyZWVkID0gMDtcbiBcbi1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KSlcbi1cdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuLVxuLVx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QpIHtcbi1cdFx0aW5mbyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbywgc2hyaW5rbGlzdCk7XG4tXG4tXHRcdC8qIHBpbiB0aGUgaW5vZGUgKi9cbi1cdFx0aW5vZGUgPSBpZ3JhYihcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZSk7XG4tXG4tXHRcdC8qIGlub2RlIGlzIGFib3V0IHRvIGJlIGV2aWN0ZWQgKi9cbi1cdFx0aWYgKCFpbm9kZSkge1xuLVx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRnb3RvIG5leHQ7XG4tXHRcdH1cbi1cbi1cdFx0bGlzdF9tb3ZlKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgXHUwMDI2bGlzdCk7XG4tbmV4dDpcbi1cdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuLS07XG4tXHRcdGlmICghLS1iYXRjaClcbi1cdFx0XHRicmVhaztcbi1cdH1cbi1cdHNwaW5fdW5sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2Nhbi5saXN0KTtcbitcdHNjYW4uc2MgPSBzYztcbitcdGlmIChzYylcbitcdFx0bGlzdF9scnVfc2hyaW5rX3dhbGsoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNjLFxuK1x0XHRcdFx0ICAgICBzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlLCBcdTAwMjZzY2FuKTtcbitcdGVsc2VcbitcdFx0bGlzdF9scnVfd2FsayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZSxcbitcdFx0XHQgICAgICBcdTAwMjZzY2FuLCAxMjgpO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbmV4dCwgXHUwMDI2bGlzdCkge1xuLVx0XHRwZ29mZl90IG5leHQsIGVuZDtcbitcdGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIFx1MDAyNnNjYW4ubGlzdCkge1xuK1x0XHRwZ29mZl90IGZvbGlvX2VuZCwgZW5kO1xuIFx0XHRsb2ZmX3QgaV9zaXplO1xuIFx0XHRpbnQgcmV0O1xuIFxuIFx0XHRpbmZvID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvLCBzaHJpbmtsaXN0KTtcbiBcdFx0aW5vZGUgPSBcdTAwMjZpbmZvLVx1MDAzZXZmc19pbm9kZTtcbiBcbi1cdFx0aWYgKG5yX3RvX2ZyZWUgXHUwMDI2XHUwMDI2IGZyZWVkIFx1MDAzZT0gbnJfdG9fZnJlZSlcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbi1cbiBcdFx0aV9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIFx0XHRmb2xpbyA9IGZpbGVtYXBfZ2V0X2VudHJ5KGlub2RlLVx1MDAzZWlfbWFwcGluZywgaV9zaXplIC8gUEFHRV9TSVpFKTtcbiBcdFx0aWYgKCFmb2xpbyB8fCB4YV9pc192YWx1ZShmb2xpbykpXG5AQCAtNzgxLDEzICs5NzIsMjUgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXG4gXHRcdH1cbiBcbiBcdFx0LyogQ2hlY2sgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZ2FpbiBmcm9tIHNwbGl0dGluZyAqL1xuLVx0XHRuZXh0ID0gZm9saW9fbmV4dF9pbmRleChmb2xpbyk7XG4rXHRcdGZvbGlvX2VuZCA9IGZvbGlvX25leHRfaW5kZXgoZm9saW8pO1xuIFx0XHRlbmQgPSBzaG1lbV9mYWxsb2NlbmQoaW5vZGUsIERJVl9ST1VORF9VUChpX3NpemUsIFBBR0VfU0laRSkpO1xuLVx0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gbmV4dCkge1xuK1x0XHRpZiAoZW5kIFx1MDAzYz0gZm9saW8tXHUwMDNlaW5kZXggfHwgZW5kIFx1MDAzZT0gZm9saW9fZW5kKSB7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdH1cbiBcbitcdFx0aWYgKCFpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaChmb2xpbywgc2Nhbi5zYykpIHtcbitcdFx0XHRzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0XHRnb3RvIHB1dDtcbitcdFx0fVxuK1xuK1x0XHRpZiAobnJfdG9fZnJlZSBcdTAwMjZcdTAwMjYgZnJlZWQgXHUwMDNlPSBucl90b19mcmVlKSB7XG4rXHRcdFx0c2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pO1xuK1x0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRcdFx0Z290byBwdXQ7XG4rXHRcdH1cbitcbiBcdFx0LypcbiBcdFx0ICogTW92ZSB0aGUgaW5vZGUgb24gdGhlIGxpc3QgYmFjayB0byBzaHJpbmtsaXN0IGlmIHdlIGZhaWxlZFxuIFx0XHQgKiB0byBsb2NrIHRoZSBwYWdlIGF0IHRoaXMgdGltZS5cbkBAIC03OTYsMzQgKzk5OSwzMyBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcbiBcdFx0ICogcmVjbGFpbSBwYXRoLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuK1x0XHRcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcbitcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRcdGdvdG8gcHV0O1xuK1x0XHR9XG4rXG4rXHRcdGlmICghaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goZm9saW8sIHNjYW4uc2MpKSB7XG4rXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdFx0XHRzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlKGlub2RlLCBmb2xpbyk7XG4gXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbitcdFx0XHRnb3RvIHB1dDtcbiBcdFx0fVxuIFxuIFx0XHRyZXQgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4tXHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHRcdC8qIElmIHNwbGl0IGZhaWxlZCBtb3ZlIHRoZSBpbm9kZSBvbiB0aGUgbGlzdCBiYWNrIHRvIHNocmlua2xpc3QgKi9cbi1cdFx0aWYgKHJldClcbi1cdFx0XHRnb3RvIG1vdmVfYmFjaztcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoaW5vZGUsIGZvbGlvKTtcbitcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuK1x0XHRcdGdvdG8gcHV0O1xuK1x0XHR9XG4gXG4tXHRcdGZyZWVkICs9IG5leHQgLSBlbmQ7XG4rXHRcdGZyZWVkICs9IGZvbGlvX2VuZCAtIGVuZDtcbiBcdFx0c3BsaXQrKztcbitcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiBkcm9wOlxuLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4tXHRcdGdvdG8gcHV0O1xuLW1vdmVfYmFjazpcbi1cdFx0Lypcbi1cdFx0ICogTWFrZSBzdXJlIHRoZSBpbm9kZSBpcyBlaXRoZXIgb24gdGhlIGdsb2JhbCBsaXN0IG9yIGRlbGV0ZWRcbi1cdFx0ICogZnJvbSBhbnkgbG9jYWwgbGlzdCBiZWZvcmUgaXB1dCgpIHNpbmNlIGl0IGNvdWxkIGJlIGRlbGV0ZWRcbi1cdFx0ICogaW4gYW5vdGhlciB0aHJlYWQgb25jZSB3ZSBwdXQgdGhlIGlub2RlICh0aGVuIHRoZSBsb2NhbCBsaXN0XG4tXHRcdCAqIGlzIGNvcnJ1cHRlZCkuXG4tXHRcdCAqL1xuLVx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdGxpc3RfbW92ZShcdTAwMjZpbmZvLVx1MDAzZXNocmlua2xpc3QsIFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbGVuKys7XG4tXHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuK1x0XHRzaG1lbV91bnVzZWRfaHVnZV9kcm9wKGlub2RlKTtcbiBwdXQ6XG4gXHRcdGlwdXQoaW5vZGUpO1xuIFx0fVxuQEAgLTgzNiw3ICsxMDM4LDcgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuIHtcbiBcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihzYik7XG4gXG4tXHRpZiAoIVJFQURfT05DRShzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4pKVxuK1x0aWYgKCFsaXN0X2xydV9zaHJpbmtfY291bnQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNjKSlcbiBcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuIFxuIFx0cmV0dXJuIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzYmluZm8sIHNjLCAwKTtcbkBAIC04NDYsMTIgKzEwNDgsMjIgQEAgc3RhdGljIGxvbmcgc2htZW1fdW51c2VkX2h1Z2VfY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiBcdFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvID0gU0hNRU1fU0Ioc2IpO1xuLVx0cmV0dXJuIFJFQURfT05DRShzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4pO1xuK1xuK1x0cmV0dXJuIGxpc3RfbHJ1X3Nocmlua19jb3VudChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCwgc2MpO1xuIH1cbiAjZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4gI2RlZmluZSBzaG1lbV9odWdlIFNITUVNX0hVR0VfREVOWVxuIFxuK3N0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdFx0ICBnZnBfdCBnZnApXG4re1xuK31cbitcbitzdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rfVxuK1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxuIFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjLCB1bnNpZ25lZCBsb25nIG5yX3RvX2ZyZWUpXG4ge1xuQEAgLTE0MDcsMTQgKzE2MTksNyBAQCBzdGF0aWMgdm9pZCBzaG1lbV9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRpbm9kZS1cdTAwM2VpX3NpemUgPSAwO1xuIFx0XHRtYXBwaW5nX3NldF9leGl0aW5nKGlub2RlLVx1MDAzZWlfbWFwcGluZyk7XG4gXHRcdHNobWVtX3RydW5jYXRlX3JhbmdlKGlub2RlLCAwLCAobG9mZl90KS0xKTtcbi1cdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRzcGluX2xvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2aW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRcdHNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xlbi0tO1xuLVx0XHRcdH1cbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdFx0fVxuK1x0XHRzaG1lbV91bnVzZWRfaHVnZV9kZWwoaW5vZGUpO1xuIFx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2aW5mby1cdTAwM2Vzd2FwbGlzdCkpIHtcbiBcdFx0XHQvKiBXYWl0IHdoaWxlIHNobWVtX3VudXNlKCkgaXMgc2Nhbm5pbmcgdGhpcyBpbm9kZS4uLiAqL1xuIFx0XHRcdHdhaXRfdmFyX2V2ZW50KFx1MDAyNmluZm8tXHUwMDNlc3RvcF9ldmljdGlvbixcbkBAIC0yNTIyLDI4ICsyNzI3LDYgQEAgc3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4gXG4gYWxsb2NlZDpcbiBcdGFsbG9jZWQgPSB0cnVlO1xuLVx0aWYgKGZvbGlvX3Rlc3RfbGFyZ2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuLVx0ICAgIERJVl9ST1VORF9VUChpX3NpemVfcmVhZChpbm9kZSksIFBBR0VfU0laRSkgXHUwMDNjXG4tXHRcdFx0XHRcdGZvbGlvX25leHRfaW5kZXgoZm9saW8pKSB7XG4tXHRcdHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8gPSBTSE1FTV9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0c3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTtcbi1cdFx0Lypcbi1cdFx0ICogUGFydCBvZiB0aGUgbGFyZ2UgZm9saW8gaXMgYmV5b25kIGlfc2l6ZTogc3ViamVjdFxuLVx0XHQgKiB0byBzaHJpbmsgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuLVx0XHQgKi9cbi1cdFx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0X2xvY2spO1xuLVx0XHQvKlxuLVx0XHQgKiBfY2FyZWZ1bCB0byBkZWZlbmQgYWdhaW5zdCB1bmxvY2tlZCBhY2Nlc3MgdG9cbi1cdFx0ICogLVx1MDAzZXNocmlua19saXN0IGluIHNobWVtX3VudXNlZF9odWdlX3NocmluaygpXG4tXHRcdCAqL1xuLVx0XHRpZiAobGlzdF9lbXB0eV9jYXJlZnVsKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCkpIHtcbi1cdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCxcbi1cdFx0XHRcdCAgICAgIFx1MDAyNnNiaW5mby1cdTAwM2VzaHJpbmtsaXN0KTtcbi1cdFx0XHRzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sZW4rKztcbi1cdFx0fVxuLVx0XHRzcGluX3VubG9jayhcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdF9sb2NrKTtcbi1cdH1cbi1cbiBcdGlmIChzZ3AgPT0gU0dQX1dSSVRFKVxuIFx0XHRmb2xpb19zZXRfcmVmZXJlbmNlZChmb2xpbyk7XG4gXHQvKlxuQEAgLTI1NzIsNiArMjc1NSwxNSBAQCBzdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbiBcdFx0ZXJyb3IgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbitcbitcdGlmIChhbGxvY2VkIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X2xhcmdlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdCAgICBESVZfUk9VTkRfVVAoaV9zaXplX3JlYWQoaW5vZGUpLCBQQUdFX1NJWkUpIFx1MDAzYyBmb2xpb19uZXh0X2luZGV4KGZvbGlvKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBQYXJ0IG9mIHRoZSBsYXJnZSBmb2xpbyBpcyBiZXlvbmQgaV9zaXplOiBzdWJqZWN0XG4rXHRcdCAqIHRvIHNocmluayB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXG4rXHRcdCAqL1xuK1x0XHRzaG1lbV91bnVzZWRfaHVnZV9hZGQoaW5vZGUsIGZvbGlvLCBnZnApO1xuK1x0fVxuIG91dDpcbiBcdCpmb2xpb3AgPSBmb2xpbztcbiBcdHJldHVybiAwO1xuQEAgLTMwNDgsNiArMzI0MCwxMCBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpfX3NobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdGlmIChpbmZvLVx1MDAzZWZzZmxhZ3MpXG4gXHRcdHNobWVtX3NldF9pbm9kZV9mbGFncyhpbm9kZSwgaW5mby1cdTAwM2Vmc2ZsYWdzLCBOVUxMKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0aW5mby1cdTAwM2VzaHJpbmtsaXN0X21lbWNnID0gTlVMTDtcbitcdGluZm8tXHUwMDNlc2hyaW5rbGlzdF9uaWQgPSAtMTtcbisjZW5kaWZcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc3dhcGxpc3QpO1xuIFx0Y2FjaGVfbm9fYWNsKGlub2RlKTtcbiBcdGlmIChzYmluZm8tXHUwMDNlbm9zd2FwKVxuQEAgLTQ5MTQsNiArNTExMCw5IEBAIHN0YXRpYyB2b2lkIHNobWVtX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuICNlbmRpZlxuIFx0ZnJlZV9wZXJjcHUoc2JpbmZvLVx1MDAzZWlub19iYXRjaCk7XG4gXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFx1MDAyNnNiaW5mby1cdTAwM2V1c2VkX2Jsb2Nrcyk7XG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0bGlzdF9scnVfZGVzdHJveShcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4rI2VuZGlmXG4gXHRtcG9sX3B1dChzYmluZm8tXHUwMDNlbXBvbCk7XG4gI2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxuIFx0c2ltcGxlX3hhdHRyX2NhY2hlX2NsZWFudXAoXHUwMDI2c2JpbmZvLVx1MDAzZXhhX2NhY2hlKTtcbkBAIC01MDA3LDggKzUyMDYsMTEgQEAgc3RhdGljIGludCBzaG1lbV9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHJhd19zcGluX2xvY2tfaW5pdChcdTAwMjZzYmluZm8tXHUwMDNlc3RhdF9sb2NrKTtcbiBcdGlmIChwZXJjcHVfY291bnRlcl9pbml0KFx1MDAyNnNiaW5mby1cdTAwM2V1c2VkX2Jsb2NrcywgMCwgR0ZQX0tFUk5FTCkpXG4gXHRcdGdvdG8gZmFpbGVkO1xuLVx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3RfbG9jayk7XG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzYmluZm8tXHUwMDNlc2hyaW5rbGlzdCk7XG4rXG4rI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXHUwMDI2c2JpbmZvLVx1MDAzZXNocmlua2xpc3QsIHNiLVx1MDAzZXNfc2hyaW5rKSlcbitcdFx0Z290byBmYWlsZWQ7XG4rI2VuZGlmXG4gXG4gXHRzYi1cdTAwM2VzX21heGJ5dGVzID0gTUFYX0xGU19GSUxFU0laRTtcbiBcdHNiLVx1MDAzZXNfYmxvY2tzaXplID0gUEFHRV9TSVpFO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjQ6NDEuMTYyODcwMTQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODgxMDc1MzQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2g6IEh1Z2UgUGFnZSBhbmQgT2JqZWN0IENhY2hpbmcgTW9kaWZpY2F0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2gsIGFuZCBpdCBzZWVtcyB0byBiZSByZWZhY3RvcmluZyBob3cgYHNobWVtYCBkZWFscyB3aXRoIHVudXNlZCBodWdlIHBhZ2VzIGR1cmluZyBzaHJpbmtpbmcgb3BlcmF0aW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQncyByZXBsYWNpbmcgdGhlIG9sZCBgbGlzdF9oZWFkYCBhbmQgc3BpbmxvY2sgaW4gYHNobWVtX3NiX2luZm9gIHdpdGggYSBgbGlzdF9scnVgIGZvciB0aGUgYHNocmlua2xpc3RgLiBUaGF0J3MgYSBjbGFzc2ljIG9wdGltaXphdGlvbiwgcG90ZW50aWFsbHkgbGVhZGluZyB0byBiZXR0ZXIgcGVyZm9ybWFuY2UgaW4gY29udGVudGlvbiBzY2VuYXJpb3MuIEl0IGFsc28gc2VlbXMgdG8gYmUgdG91Y2hpbmcgYHN1cGVyX2NhY2hlX3NjYW5gIGFuZCBgc3VwZXJfY2FjaGVfY291bnRgIGluIGBmcy9zdXBlci5jYCwgcmVtb3ZpbmcgYHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGVgIGFuZCBsZWFuaW5nIG9uIGBtZW1fY2dyb3VwX3Nocmlua19pc19yb290YCB3aXRoaW4gYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYCBpbnN0ZWFkLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHN1Z2dlc3RpbmcgYSBtb3ZlIHRvd2FyZHMgbW9yZSB1bmlmaWVkIG1lbW9yeSBjZ3JvdXAgbWFuYWdlbWVudC5cblxuRnVuY3Rpb25hbGx5LCB0aGVzZSBjaGFuZ2VzIGFyZSBpbXBhY3RpbmcgYG1tL3NobWVtLmNgIGFuZCBhbHNvIGltcGFjdGluZyBgZnMvYnRyZnMvc3VwZXIuY2AuIFRoZSBgc2htZW1gIHNpZGUgaXMgZGVmaW5pdGVseSB0aWVkIGludG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfTUVNQ0dgLiBHaXZlbiB0aGlzLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIHdvcnRoIGZ1enppbmcgYW5kLCBtb3JlIGltcG9ydGFudGx5LCB3aGV0aGVyIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGFjdHVhbGx5IHJlYWNoYWJsZS5cblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCBpcyBjYWxsZWQgYnkgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLCB3aGljaCBpbiB0dXJuIGlzIGEgc3VwZXJibG9jayBzaHJpbmtlciBjYWxsYmFjayDigJMgc3BlY2lmaWNhbGx5LCBgc19vcC1cdTAwM2VmcmVlX2NhY2hlZF9vYmplY3RzYC4gVGhhdCdzIGEgY2xlYXIgZW50cnkgcG9pbnQsIGEgZGVmaW5pdGUgXCJ5ZXNcIiBmb3IgcmVhY2hhYmlsaXR5LiBUaGVuLCBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYCBpcyBhbHNvIGNhbGxlZCBmcm9tIGBzaG1lbV9nZXRfZm9saW9fZ2ZwYCB3aGVuIGEgbGFyZ2UgZm9saW8gaXMgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHkgd2hlbiBwYXJ0IG9mIHRoZSBmb2xpbyBpcyBiZXlvbmQgYGlfc2l6ZWAuIFRoYXQncyBhbm90aGVyIHBvdGVudGlhbCB0cmlnZ2VyLiBZdXAsIHRoaXMgcGF0Y2ggaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHBpbnBvaW50IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlncyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBXZSdyZSBsb29raW5nIGF0OlxuKiAgIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgXG4qICAgYENPTkZJR19NRU1DR2BcbiogICBgQ09ORklHX1NITUVNYCAoSSdtIGFzc3VtaW5nIHRoaXMgaXMgbGlrZWx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrKVxuKiAgIGBDT05GSUdfVE1QRlNgXG5cbk5leHQgc3RlcDogbGV0J3MgZ28gaW50byBgbW0vc2htZW0uY2AgYW5kIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zLiBXZSBuZWVkIHRvIGZvY3VzIG9uOlxuKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgXG4qICAgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gXG4qICAgYHNobWVtX3VudXNlZF9odWdlX2NvdW50YFxuKiAgIGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgXG4qICAgYHNobWVtX3VudXNlZF9odWdlX2RlbGBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWBcbiogICBgc2htZW1fdW51c2VkX2h1Z2VfZHJvcGBcblxuQW5kIHRoZW4sIG92ZXIgaW4gYGZzL2J0cmZzL3N1cGVyLmNgLCB3ZSd2ZSBnb3Q6XG4qICAgYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYFxuKiAgIGBidHJmc19mcmVlX2NhY2hlZF9vYmplY3RzYFxuXG5GaW5hbGx5LCBhIHF1aWNrIHNhbml0eSBjaGVjayB1c2luZyBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gY29uZmlybSB0aG9zZSBjb25maWdzIGFuZCBmdW5jdGlvbnMsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaW1lIHRvIGdldCB0aGlzIHNldCB1cCBhbmQgc3RhcnQgdGhlIGZ1enppbmcgcnVuIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MzI3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjQ6NDkuOTczNjI2Nzk4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MjQxMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTEzPXN0cnVjdCBzaG1lbV9vcHRpb25zIHtcXG4tLVxcbm1tL3NobWVtLmMtMTM2LVxcbm1tL3NobWVtLmM6MTM3OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTEzOC1zdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlX3NobWVtX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL3NobWVtLmM9NTIwPXN0YXRpYyBpbnQgc2htZW1fY29uZmlybV9zd2FwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy01NjgtXFxubW0vc2htZW0uYzo1Njk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtNTcwLS8qIGlmZGVmIGhlcmUgdG8gYXZvaWQgYmxvYXRpbmcgc2htZW0ubyB3aGVuIG5vdCBuZWNlc3NhcnkgKi9cXG5tbS9zaG1lbS5jLTU3MS1cXG5tbS9zaG1lbS5jOjU3MjojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUilcXG5tbS9zaG1lbS5jLTU3My0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXFxubW0vc2htZW0uYzo1NzQ6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVMpXFxubW0vc2htZW0uYy01NzUtI2RlZmluZSBTSE1FTV9IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9zaG1lbS5jOjU3NjojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFKVxcbm1tL3NobWVtLmMtNTc3LSNkZWZpbmUgU0hNRU1fSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9zaG1lbS5jOjU3ODojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRSlcXG5tbS9zaG1lbS5jLTU3OS0jZGVmaW5lIFNITUVNX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxcbi0tXFxubW0vc2htZW0uYz01ODQ9c3RhdGljIGludCBzaG1lbV9odWdlIF9fcmVhZF9tb3N0bHkgPSBTSE1FTV9IVUdFX0RFRkFVTFQ7XFxuLS1cXG5tbS9zaG1lbS5jLTU4Ny1cXG5tbS9zaG1lbS5jOjU4ODojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUilcXG5tbS9zaG1lbS5jLTU4OS0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX05FVkVSXFxubW0vc2htZW0uYzo1OTA6I2VsaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVMpXFxubW0vc2htZW0uYy01OTEtI2RlZmluZSBUTVBGU19IVUdFX0RFRkFVTFQgU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9zaG1lbS5jOjU5MjojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFKVxcbm1tL3NobWVtLmMtNTkzLSNkZWZpbmUgVE1QRlNfSFVHRV9ERUZBVUxUIFNITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9zaG1lbS5jOjU5NDojZWxpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRSlcXG5tbS9zaG1lbS5jLTU5NS0jZGVmaW5lIFRNUEZTX0hVR0VfREVGQVVMVCBTSE1FTV9IVUdFX0FEVklTRVxcbi0tXFxubW0vc2htZW0uYz0xMDQ3PXN0YXRpYyBsb25nIHNobWVtX3VudXNlZF9odWdlX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5tbS9zaG1lbS5jLTEwNTMtfVxcbm1tL3NobWVtLmM6MTA1NDojZWxzZSAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vc2htZW0uYy0xMDU1LVxcbi0tXFxubW0vc2htZW0uYz0xMDczPXN0YXRpYyB1bnNpZ25lZCBpbnQgc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0xMDc5LX1cXG5tbS9zaG1lbS5jOjEwODA6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL3NobWVtLmMtMTA4MS1cXG4tLVxcbm1tL3NobWVtLmM9MTc5OD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE4NDAtXFxubW0vc2htZW0uYzoxODQxOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTE4NDItXFx0XFx0aWYgKG9yZGVyIFxcdTAwM2U9IEhQQUdFX1BNRF9PUkRFUikge1xcbi0tXFxubW0vc2htZW0uYz0xOTk1PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKnNobWVtX3N3YXBpbl9jbHVzdGVyKHN3cF9lbnRyeV90IHN3YXAsIGdmcF90IGdmcCxcXG4tLVxcbm1tL3NobWVtLmMtMjAwOC1cXG5tbS9zaG1lbS5jOjIwMDk6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtMjAxMC1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9zaG1lbS5jPTIxMDg9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fc3VpdGFibGVfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc2htZW0uYy0yMTEzLX1cXG5tbS9zaG1lbS5jOjIxMTQ6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbm1tL3NobWVtLmMtMjExNS1cXG4tLVxcbm1tL3NobWVtLmM9MjEzMD1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc2htZW0uYy0yMTQxLVxcbm1tL3NobWVtLmM6MjE0MjpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG5tbS9zaG1lbS5jLTIxNDMtXFx0XFx0b3JkZXJzID0gMDtcXG4tLVxcbm1tL3NobWVtLmM9MjI4MD1zdGF0aWMgaW50IHNobWVtX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zaG1lbS5jLTIyOTQtXFx0Z2ZwIFxcdTAwMjY9IH5HRlBfQ09OU1RSQUlOVF9NQVNLO1xcbm1tL3NobWVtLmM6MjI5NTojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy0yMjk2LVxcdGlmIChucl9wYWdlcyBcXHUwMDNlIDEpIHtcXG4tLVxcbm1tL3NobWVtLmM9MjkxOD11bnNpZ25lZCBsb25nIHNobWVtX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxubW0vc2htZW0uYy0yOTMzLVxcbm1tL3NobWVtLmM6MjkzNDpcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG5tbS9zaG1lbS5jLTI5MzUtXFx0XFx0cmV0dXJuIGFkZHI7XFxuLS1cXG5tbS9zaG1lbS5jLTI5NzctXFx0XFx0XFx0ICovXFxubW0vc2htZW0uYzoyOTc4OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTI5NzktXFx0XFx0XFx0aHBhZ2Vfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XFxuLS1cXG5tbS9zaG1lbS5jPTMyMDM9c3RhdGljIHN0cnVjdCBpbm9kZSAqX19zaG1lbV9nZXRfaW5vZGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5tbS9zaG1lbS5jLTMyNDItXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbm1tL3NobWVtLmM6MzI0MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy0zMjQ0LVxcdGluZm8tXFx1MDAzZXNocmlua2xpc3RfbWVtY2cgPSBOVUxMO1xcbi0tXFxubW0vc2htZW0uYz00NzE2PXN0YXRpYyBpbnQgc2htZW1fcGFyc2Vfb25lKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuLS1cXG5tbS9zaG1lbS5jLTQ3ODUtXFx0XFx0aWYgKGN0eC1cXHUwMDNlaHVnZSAhPSBTSE1FTV9IVUdFX05FVkVSIFxcdTAwMjZcXHUwMDI2XFxubW0vc2htZW0uYzo0Nzg2OlxcdFxcdCAgICAhKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3NobWVtLmMtNDc4Ny1cXHRcXHQgICAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkpXFxuLS1cXG5tbS9zaG1lbS5jPTUwMjY9c3RhdGljIGludCBzaG1lbV9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuLS1cXG5tbS9zaG1lbS5jLTUwNjUtXFx0XFx0c2VxX3ByaW50ZihzZXEsIFxcXCIsaW5vZGUlZFxcXCIsIChzYmluZm8tXFx1MDAzZWZ1bGxfaW51bXMgPyA2NCA6IDMyKSk7XFxubW0vc2htZW0uYzo1MDY2OiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTUwNjctXFx0LyogUmlnaHRseSBvciB3cm9uZ2x5LCBzaG93IGh1Z2UgbW91bnQgb3B0aW9uIHVubWFza2VkIGJ5IHNobWVtX2h1Z2UgKi9cXG4tLVxcbm1tL3NobWVtLmM9NTA5OT1zdGF0aWMgdm9pZCBzaG1lbV9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4tLVxcbm1tL3NobWVtLmMtNTExMi1cXHRwZXJjcHVfY291bnRlcl9kZXN0cm95KFxcdTAwMjZzYmluZm8tXFx1MDAzZXVzZWRfYmxvY2tzKTtcXG5tbS9zaG1lbS5jOjUxMTM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtNTExNC1cXHRsaXN0X2xydV9kZXN0cm95KFxcdTAwMjZzYmluZm8tXFx1MDAzZXNocmlua2xpc3QpO1xcbi0tXFxubW0vc2htZW0uYz01MTMxPXN0YXRpYyBpbnQgc2htZW1fZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5tbS9zaG1lbS5jLTUxOTYtXFx0c2JpbmZvLVxcdTAwM2Vtb2RlID0gY3R4LVxcdTAwM2Vtb2RlO1xcbm1tL3NobWVtLmM6NTE5NzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vc2htZW0uYy01MTk4LVxcdGlmIChjdHgtXFx1MDAzZXNlZW4gXFx1MDAyNiBTSE1FTV9TRUVOX0hVR0UpXFxuLS1cXG5tbS9zaG1lbS5jLTUyMDktXFxubW0vc2htZW0uYzo1MjEwOiNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9zaG1lbS5jLTUyMTEtXFx0aWYgKGxpc3RfbHJ1X2luaXRfbWVtY2coXFx1MDAyNnNiaW5mby1cXHUwMDNlc2hyaW5rbGlzdCwgc2ItXFx1MDAzZXNfc2hyaW5rKSlcXG4tLVxcbm1tL3NobWVtLmM9NTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc2htZW1fb3BzID0ge1xcbi0tXFxubW0vc2htZW0uYy01NDMwLVxcdC5wdXRfc3VwZXJcXHQ9IHNobWVtX3B1dF9zdXBlcixcXG5tbS9zaG1lbS5jOjU0MzE6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtNTQzMi1cXHQubnJfY2FjaGVkX29iamVjdHNcXHQ9IHNobWVtX3VudXNlZF9odWdlX2NvdW50LFxcbi0tXFxubW0vc2htZW0uYz01NTU2PXZvaWQgX19pbml0IHNobWVtX2luaXQodm9pZClcXG4tLVxcbm1tL3NobWVtLmMtNTU4Ni1cXG5tbS9zaG1lbS5jOjU1ODc6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL3NobWVtLmMtNTU4OC1cXHRpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgXFx1MDAyNlxcdTAwMjYgc2htZW1faHVnZSBcXHUwMDNlIFNITUVNX0hVR0VfREVOWSlcXG4tLVxcbm1tL3NobWVtLmMtNTYxMS1cXG5tbS9zaG1lbS5jOjU2MTI6I2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TWVNGUylcXG5tbS9zaG1lbS5jLTU2MTMtc3RhdGljIHNzaXplX3Qgc2htZW1fZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vc2htZW0uYz01NzY3PXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0aHBzaXplX3NobWVtX2VuYWJsZWRfYXR0ciA9XFxubW0vc2htZW0uYy01NzY4LVxcdF9fQVRUUihzaG1lbV9lbmFibGVkLCAwNjQ0LCB0aHBzaXplX3NobWVtX2VuYWJsZWRfc2hvdywgdGhwc2l6ZV9zaG1lbV9lbmFibGVkX3N0b3JlKTtcXG5tbS9zaG1lbS5jOjU3Njk6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfU1lTRlMgKi9cXG5tbS9zaG1lbS5jLTU3NzAtXFxubW0vc2htZW0uYzo1NzcxOiNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcXG5tbS9zaG1lbS5jLTU3NzItXFxuLS1cXG5tbS9zaG1lbS5jPTU5MDI9X19zZXR1cChcXFwidGhwX3NobWVtPVxcXCIsIHNldHVwX3RocF9zaG1lbSk7XFxubW0vc2htZW0uYy01OTAzLVxcbm1tL3NobWVtLmM6NTkwNDojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxubW0vc2htZW0uYy01OTA1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNDo1MC4wMzE4NzE2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4MzczNjg0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBUSFAgYW5kIGNncm91cHMqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyB0cmFuc3BhcmVudCBodWdlcGFnZXMgKGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgKS4gVGhhdCdzIGdvb2QsIHRoYXQncyB3aGF0IHdlIHdhbnQgZm9yIHBlcmZvcm1hbmNlIGluIG1hbnkgd29ya2xvYWRzLiBCdXQgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgQ09ORklHX01FTUNHYC4gSWYgd2UncmUgdXNpbmcgVEhQLCBlc3BlY2lhbGx5IGluIGFueSBraW5kIG9mIGNvbnRhaW5lcml6ZWQgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIEkgKm5lZWQqIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSB3aXRoIG1lbW9yeSBjZ3JvdXBzLiBBcmUgd2UgcHJvcGVybHkgYWNjb3VudGluZyBmb3IgVEhQIHVzYWdlIHdpdGhpbiB0aG9zZSBjZ3JvdXAgbGltaXRzPyBJcyB0aGUgc2NoZWR1bGVyIGJlaW5nIE5VTUEtYXdhcmUgZW5vdWdoIGluIGl0cyBwbGFjZW1lbnQgb2YgaHVnZXBhZ2VzIHdpdGhpbiBhIG1lbWNnPyBXaGF0IGFib3V0IG92ZXJjb21taXQg4oCTIGhvdyBkb2VzIHRoZSBzeXN0ZW0gaGFuZGxlIGEgc2l0dWF0aW9uIHdoZXJlIGEgbWVtY2cgcmVxdWVzdHMgbW9yZSBUSFAgdGhhbiBpcyBhdmFpbGFibGUsIGFuZCB3aGF0IGFyZSB0aGUgcmVwZXJjdXNzaW9ucz8gV2UncmUgcG90ZW50aWFsbHkgdGFsa2luZyBhYm91dCBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgaGVyZSwgZGVwZW5kaW5nIG9uIGhvdyB0aGVzZSB0d28gZmVhdHVyZXMgaW50ZXJhY3QuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgc291cmNlIGNvZGUgdG8gc2VlIGhvdyB0aGVzZSBjb25maWd1cmF0aW9ucyBiZWhhdmUgdG9nZXRoZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGFyZSBhbnkga25vd24gZ290Y2hhcyBvciB0dW5pbmcgcGFyYW1ldGVycyB0aGF0IGFyZSBjcml0aWNhbCB0byBvcHRpbWl6aW5nIHRoaXMgc2V0dXAuIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludCB0aGF0IG5lZWRzIHRvIGJlIGFkZHJlc3NlZCBkdXJpbmcgYSBzeXN0ZW0gYXVkaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDc1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjQ6NTQuMjE1NjEwNjczWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MTcwNzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19NRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NzM4PXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZyhzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbylcXG4tLVxcbm1tL3NobWVtLmMtNzQ2LVxcbm1tL3NobWVtLmM6NzQ3OiNpZmRlZiBDT05GSUdfTUVNQ0dcXG5tbS9zaG1lbS5jLTc0OC1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNDo1NC4yNzI3ODY0NTZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIzNzY0MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIEJ0cmZzIFN1cGVyYmxvY2sgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcsIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gZmluZCB0aGF0IGBtZW1fY2dyb3VwX3Nocmlua19pc19yb290YCBjaGVjayB3aXRoaW4gdGhlIEJ0cmZzIGNvZGViYXNlPyBJIGtub3cgaXQgZGVhbHMgd2l0aCBtZW1vcnkgY2dyb3Vwcywgd2hpY2ggbWVhbnMgSSBzaG91bGQgYmUgbG9va2luZyBhdCB0aGUgc3VwZXJibG9jayBjb2RlLCBwYXJ0aWN1bGFybHkgd2hlcmUgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSBtZXRhZGF0YS4gUmlnaHQsIHRoYXQgcHV0cyBtZSBzcXVhcmVseSBpbiBgZnMvYnRyZnMvc3VwZXIuY2AuIFRoYXQgZmlsZSBpcyB0aGUgY2VudHJhbCBodWIgZm9yIHN1cGVyYmxvY2sgb3BlcmF0aW9ucywgc28gaXQgc2hvdWxkIGNvbnRhaW4gdGhlIHJlbGV2YW50IGNvbnRleHQsIG9yIGF0IGxlYXN0IHRoZSBjYWxscyBJIG5lZWQgdG8gdHJhY2UuIE5vdywgdGltZSB0byBzdGFydCBkaWdnaW5nIGluIHRoZXJlLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODg3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjQ6NTcuNjk2NTUzMDk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNjk1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYnRyZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idHJmcy9zdXBlci5jPTI0MzM9c3RhdGljIGxvbmcgYnRyZnNfbnJfY2FjaGVkX29iamVjdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmMtMjQ0My1cXHQgKi9cXG5mcy9idHJmcy9zdXBlci5jOjI0NDQ6XFx0aWYgKCFtZW1fY2dyb3VwX3Nocmlua19pc19yb290KHNjKSlcXG5mcy9idHJmcy9zdXBlci5jLTI0NDUtXFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI0OjU3Ljc1NzI1MzY3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjczMDYzNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGxvb2tzIHByb21pc2luZyDigJMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggdGhyb3dpbmcgYSBmdXp6ZXIgYXQuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgLCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAsIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAsIGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgLCBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYCwgYHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVgLCBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWAsIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYCwgYW5kIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBpbnRlcmFjdCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgIGlzIHN0YXRpYy4uLiB5ZXMsIGdvb2QsIHRoYXQncyB3aGF0IEkgZXhwZWN0ZWQuIE5vdyBJIGtub3cgdG8gd2F0Y2ggb3V0IGZvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBmaWxlcy5cblxuVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzIGhlcmUgYXJlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBNRU1DR2AsIGFuZCBgQlRSRlNfRlNgLiBUaGlzIGdpdmVzIG1lIGEgZ29vZCBmcmFtZXdvcmsgdG8ga25vdyB3aGF0IHRvIGV4cGVjdCBhbmQgd2hlcmUgdG8gbG9vayBmb3IgZGVwZW5kZW5jaWVzLlxuXG5JJ2xsIGdsYW5jZSBhdCBgZnMvYnRyZnMvc3VwZXIuY2AgbmV4dCB0byB1bmRlcnN0YW5kIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AgaW4gbW9yZSBkZXRhaWwgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGh1Z2VwYWdlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjM5LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI1OjAyLjI4NDU2Mjk5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM1NTM4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRyZnNfbnJfY2FjaGVkX29iamVjdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYnRyZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idHJmcy9zdXBlci5jPTI0MTc9c3RhdGljIGludCBidHJmc19zaG93X2Rldm5hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbi0tXFxuZnMvYnRyZnMvc3VwZXIuYy0yNDMyLVxcbmZzL2J0cmZzL3N1cGVyLmM6MjQzMzpzdGF0aWMgbG9uZyBidHJmc19ucl9jYWNoZWRfb2JqZWN0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbmZzL2J0cmZzL3N1cGVyLmMtMjQzNC17XFxuLS1cXG5mcy9idHJmcy9zdXBlci5jPTI1MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJ0cmZzX3N1cGVyX29wcyA9IHtcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmMtMjU0NS1cXHQudW5mcmVlemVfZnNcXHQ9IGJ0cmZzX3VuZnJlZXplLFxcbmZzL2J0cmZzL3N1cGVyLmM6MjU0NjpcXHQubnJfY2FjaGVkX29iamVjdHMgPSBidHJmc19ucl9jYWNoZWRfb2JqZWN0cyxcXG5mcy9idHJmcy9zdXBlci5jLTI1NDctXFx0LmZyZWVfY2FjaGVkX29iamVjdHMgPSBidHJmc19mcmVlX2NhY2hlZF9vYmplY3RzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNTowMi4zNDgxMjE4ODlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc5MDk3NzYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENoYW5nZXMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gdGhlIGNoYW5nZXMgaW4gYGZzL2J0cmZzL3N1cGVyLmNgIGFyZSBwcmV0dHkgaW5jb25zZXF1ZW50aWFsIC0ganVzdCBhIHNpbXBsZSBlYXJseSByZXR1cm4uIFRoZSByZWFsIG1lYXQgb2YgdGhlIHVwZGF0ZSBzZWVtcyB0byBiZSBpbiBgbW0vc2htZW0uY2AsIHNwZWNpZmljYWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIGBsaXN0X2xydWAgZm9yIHRoZSBgc2hyaW5rbGlzdGAuIFRoYXQgbWVhbnMgSSByZWFsbHkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIGBzaG1lbV91bnVzZWRfaHVnZV8qYCBmdW5jdGlvbnMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvcGVybHkgc2NvcGVkLCBnaXZlbiB0aGUgY2hhbmdlLiBMZXQgbWUgZ28gdGhyb3VnaCB0aGVtOiBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYCBpcyBzdGF0aWM/IFllcC4gYHNobWVtX3VudXNlZF9odWdlX3NjYW5gPyBTdGF0aWMsIGNoZWNrLiBgc2htZW1fdW51c2VkX2h1Z2VfY291bnRgPyBTdGF0aWMsIGFzIGV4cGVjdGVkLiBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYD8gWXVwLCBzdGF0aWMuICBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYCwgc3RhdGljLiBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAsIGFuZCBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWAsIGFzIHdlbGwgYXMgYHNobWVtX3VudXNlZF9odWdlX2Ryb3BgIGFyZSBzdGF0aWMgYXMgd2VsbC4gT2theSwgYWxsIGxvb2tzIGdvb2QgdGhlcmUuXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHdoZXJlIGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgIGlzIGFjdHVhbGx5IGRlZmluZWQsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMjgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MDcuMTM5MTAyMzg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjExMjg3MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNobWVtX3VudXNlZF9odWdlX3Nocmlua1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9OTA5PXN0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX3JlcXVldWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3NobWVtLmMtOTM1LVxcbm1tL3NobWVtLmM6OTM2OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNobWVtX3VudXNlZF9odWdlX3NocmluayhzdHJ1Y3Qgc2htZW1fc2JfaW5mbyAqc2JpbmZvLFxcbm1tL3NobWVtLmMtOTM3LVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcXG4tLVxcbm1tL3NobWVtLmM9MTAzNj1zdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zY2FuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5tbS9zaG1lbS5jLTEwNDMtXFxubW0vc2htZW0uYzoxMDQ0OlxcdHJldHVybiBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc2JpbmZvLCBzYywgMCk7XFxubW0vc2htZW0uYy0xMDQ1LX1cXG4tLVxcbm1tL3NobWVtLmM9MTA2Mz1zdGF0aWMgdm9pZCBzaG1lbV91bnVzZWRfaHVnZV9kZWwoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL3NobWVtLmMtMTA2Ni1cXG5tbS9zaG1lbS5jOjEwNjc6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXFxubW0vc2htZW0uYy0xMDY4LVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MsIHVuc2lnbmVkIGxvbmcgbnJfdG9fZnJlZSlcXG4tLVxcbm1tL3NobWVtLmM9MjEzMD1zdGF0aWMgc3RydWN0IGZvbGlvICpzaG1lbV9hbGxvY19hbmRfYWRkX2ZvbGlvKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc2htZW0uYy0yMjAzLVxcdFxcdCAqL1xcbm1tL3NobWVtLmM6MjIwNDpcXHRcXHRzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc2JpbmZvLCBOVUxMLCBwYWdlcyk7XFxubW0vc2htZW0uYy0yMjA1LVxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI1OjA4LjM1MDM5NTgyMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgwMzIzNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyB0aGUgU0hNRU0gSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIHNoYXJlZCBtZW1vcnkgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gaG93IHVudXNlZCBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkIGluIHNoYXJlZCBtZW1vcnkgcmVnaW9ucy4gU28sIHRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0aGlzIOKAkyBJJ20gcHJldHR5IHN1cmUgaXQncyBjYWxsZWQgYHNobWVtX3VudXNlZF9odWdlX3NjYW5gLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZWJhc2UuIEkga25vdyB0aGUgc2hhcmVkIG1lbW9yeSBzdWJzeXN0ZW0gaXMgaG91c2VkIHVuZGVyIGBtbS9gLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBtYWdpYyBoYXBwZW5zLiBBbmQsIGNvbnNpZGVyaW5nIHRoZSBuYW1lLCBJJ2QgYmV0IHRoZSBzb3VyY2UgZmlsZSBJJ20gYWZ0ZXIgaXMgYHNobWVtLmNgLiBTbywgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBvcGVuIHRoYXQgZmlsZSBhbmQgbWFrZSBzdXJlIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCBpcyBhY3R1YWxseSBkZWZpbmVkIHRoZXJlLiBUaGlzIGlzIGJhc2ljLCBidXQgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGdldCBhIG1lbnRhbCByb2FkbWFwIG9mIHRoZSBjb2RlIGludm9sdmVkLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDMyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MTEuNjMwNzI5MzMxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEzMDYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fdW51c2VkX2h1Z2Vfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9ODEzPXN0YXRpYyB2b2lkIHNobWVtX3VudXNlZF9odWdlX2RlbChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxubW0vc2htZW0uYy04MjktXFxubW0vc2htZW0uYzo4MzA6c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4ge1xcbm1tL3NobWVtLmMtODMxLVxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4tLVxcbm1tL3NobWVtLmM9ODM1PXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZShzdHJ1Y3QgbGlzdF9oZWFkICppdGVtLFxcbi0tXFxubW0vc2htZW0uYy04Mzgte1xcbm1tL3NobWVtLmM6ODM5OlxcdHN0cnVjdCBzaG1lbV91bnVzZWRfaHVnZV9zY2FuICpzY2FuID0gYXJnO1xcbm1tL3NobWVtLmMtODQwLVxcdHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvO1xcbi0tXFxubW0vc2htZW0uYz05MzY9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rKHN0cnVjdCBzaG1lbV9zYl9pbmZvICpzYmluZm8sXFxuLS1cXG5tbS9zaG1lbS5jLTkzOC17XFxubW0vc2htZW0uYzo5Mzk6XFx0c3RydWN0IHNobWVtX3VudXNlZF9odWdlX3NjYW4gc2NhbjtcXG5tbS9zaG1lbS5jLTk0MC1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xcbi0tXFxubW0vc2htZW0uYy0xMDM1LVxcbm1tL3NobWVtLmM6MTAzNjpzdGF0aWMgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zY2FuKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxubW0vc2htZW0uYy0xMDM3LVxcdFxcdHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS9zaG1lbS5jPTU0MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNobWVtX29wcyA9IHtcXG4tLVxcbm1tL3NobWVtLmMtNTQzMi1cXHQubnJfY2FjaGVkX29iamVjdHNcXHQ9IHNobWVtX3VudXNlZF9odWdlX2NvdW50LFxcbm1tL3NobWVtLmM6NTQzMzpcXHQuZnJlZV9jYWNoZWRfb2JqZWN0c1xcdD0gc2htZW1fdW51c2VkX2h1Z2Vfc2NhbixcXG5tbS9zaG1lbS5jLTU0MzQtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI1OjExLjg0MjA0MzYwMVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDQ4NTY2MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZvY3VzOiBVbnVzZWQgSHVnZSBQYWdlIE1hbmFnZW1lbnQgaW4gU2hhcmVkIE1lbW9yeSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gbWFuYWdpbmcgdW51c2VkIGh1Z2UgcGFnZXMgd2l0aGluIHRoZSBzaGFyZWQgbWVtb3J5IHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBteSBhdHRlbnRpb24gbmVlZHMgdG8gYmUgb24gdGhlc2U6IGBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmtgLCBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmAsIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAsIGBzaG1lbV91bnVzZWRfaHVnZV9hZGRgLCBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYCwgYHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVgLCBgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZWAsIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYCwgYGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoYCwgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVgLiBUaGVzZSBhcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGVpciBpbnRlcmFjdGlvbnMgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3IgbXkgYW5hbHlzaXMuXG5cblRoZSBmaXJzdCB0aGluZyBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaXMgYGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hlcmUgdGhpcyBpcyBkZWZpbmVkLCBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIGBtbS9zaG1lbS5jYCB0byBzZWUgaWYgdGhhdCdzIHdoZXJlIGl0J3MgbG9jYXRlZC4gVGhlbiBJJ2xsIGRpdmUgaW50byBlYWNoIG9mIHRob3NlIG90aGVyIGZ1bmN0aW9ucywgbWFwcGluZyB0aGVtIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3ODEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MTYuMjkwNjEyMzU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDkyMDU5MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2htZW0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTgzNT1zdGF0aWMgZW51bSBscnVfc3RhdHVzIHNobWVtX3VudXNlZF9odWdlX2lzb2xhdGUoc3RydWN0IGxpc3RfaGVhZCAqaXRlbSxcXG4tLVxcbm1tL3NobWVtLmMtODczLVxcbm1tL3NobWVtLmM6ODc0OnN0YXRpYyBib29sIGlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc2htZW0uYy04NzUtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxuLS1cXG5tbS9zaG1lbS5jPTkzNj1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaG1lbV91bnVzZWRfaHVnZV9zaHJpbmsoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbyxcXG4tLVxcbm1tL3NobWVtLmMtOTgxLVxcbm1tL3NobWVtLmM6OTgyOlxcdFxcdGlmICghaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2goZm9saW8sIHNjYW4uc2MpKSB7XFxubW0vc2htZW0uYy05ODMtXFx0XFx0XFx0c2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShpbm9kZSwgZm9saW8pO1xcbi0tXFxubW0vc2htZW0uYy0xMDA2LVxcbm1tL3NobWVtLmM6MTAwNzpcXHRcXHRpZiAoIWlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoKGZvbGlvLCBzY2FuLnNjKSkge1xcbm1tL3NobWVtLmMtMTAwOC1cXHRcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNToxNi40OTk4MjY5NDlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3NzkzNjU0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiAqKldoZXJlIGlzIHRoaXMgZnVuY3Rpb24gZGVmaW5lZCwgYW5kIGNhbiBJIGZpbmQgaXQgcXVpY2tseT8qKiBJIG5lZWQgdG8gbG9jYXRlIGBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVgLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSwgYW5kIGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RydWN0dXJlLCBgbW0vc2htZW0uY2Agc2VlbXMgbGlrZSB0aGUgbGlrZWx5IGNhbmRpZGF0ZS4gVGhhdCdzIHRoZSBmaXJzdCBwbGFjZSBJJ2xsIHN0YXJ0IG15IHNlYXJjaC4gSXQncyBhbG1vc3QgY2VydGFpbiBpdCdzIGluIGEgZmlsZSByZWxhdGVkIHRvIHNoYXJlZCBtZW1vcnksIGFuZCB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgdGhhdCdzIGFsbW9zdCBhbHdheXMgd2hlcmUgaXQgbGl2ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTIxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MTkuMTc3NzY2NjE0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIxODIxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NobWVtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2htZW0uYz03NDg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5tbS9zaG1lbS5jOjc0OTpzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9zaG1lbS5jLTc1MC1cXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vc2htZW0uYz03Njg9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpcXG5tbS9zaG1lbS5jOjc2OTpzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc3RydWN0IHNobWVtX3NiX2luZm8gKnNiaW5mbywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9zaG1lbS5jLTc3MC1cXHRcXHRcXHQgICAgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vc2htZW0uYz03NzY9c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTc4My1cXG5tbS9zaG1lbS5jOjc4NDpcXHRtZW1jZyA9IHNobWVtX3VudXNlZF9odWdlX2FsbG9jX2xydShzYmluZm8sIGZvbGlvLCBnZnApO1xcbm1tL3NobWVtLmMtNzg1LVxcdGlmIChJU19FUlIobWVtY2cpKVxcbi0tXFxubW0vc2htZW0uYz05MDk9c3RhdGljIHZvaWQgc2htZW1fdW51c2VkX2h1Z2VfcmVxdWV1ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc2htZW0uYy05MTUtXFxubW0vc2htZW0uYzo5MTY6XFx0bWVtY2cgPSBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnUoc2JpbmZvLCBmb2xpbywgR0ZQX05PV0FJVCk7XFxubW0vc2htZW0uYy05MTctXFx0aWYgKElTX0VSUihtZW1jZykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI1OjE5LjM2OTk1NjA3M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzEyNzA3ODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEJ0cmZzIE9wdGltaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWdzIOKAkyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgLCB3aGljaCBpcyBzdGFuZGFyZCBlbm91Z2ggZm9yIG9wdGltaXphdGlvbiBlZmZvcnRzLiBCdXQgaG9sZCBvbiwgSSBzZWUgYEJUUkZTX0ZTYCBjaGFuZ2VkIGFzIHdlbGwuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBCdHJmcyBpcyBhbiBhcmVhIHdoZXJlIHBlcmZvcm1hbmNlIHR1bmluZyBjYW4gYmUgcXVpdGUgaW52b2x2ZWQsIGFuZCBhbnkgY29uZmlnIG1vZGlmaWNhdGlvbiBzdWdnZXN0cyBhIHBvdGVudGlhbCBhcmVhIGZvciBpbXByb3ZlbWVudCBvciBhIHNwZWNpZmljIHVzZSBjYXNlIGNvbnNpZGVyYXRpb24uXG5cbk15IG5leHQgc3RlcCBpcyB0byBxdWlja2x5IGRyaWxsIGRvd24gYW5kIHNlZSAqd2h5KiB0aGUgQnRyZnMgZmlsZXN5c3RlbSBpcyB0b3VjaGVkLiBUbyB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBJJ20gbm93IGdvaW5nIHRvIGNvbmZpcm0gaWYgYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYCBpcyByZWxhdGVkIHRvIHRoZSBCdHJmcyBjaGFuZ2VzLiBJdCdzIHRpbWUgdG8gY2hlY2sgYGZzL2J0cmZzL3N1cGVyLmNgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBleHBlY3QgdG8gZmluZCByZWxhdGVkIGxvZ2ljIGlmIHRoaXMgY29uZmlnIGNoYW5nZSBpcyByZWxldmFudCB0byBvYmplY3QgY2FjaGluZyB3aXRoaW4gdGhlIEJ0cmZzIGZpbGVzeXN0ZW1zLiBEZXBlbmRpbmcgb24gd2hhdCBJIGZpbmQsIHRoaXMgd291bGQgaGVscCBtZSBmb3JtIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODEwNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDAwOjI1OjIzLjY4MjY2NjU0NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgxNDYyMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRyZnNfbnJfY2FjaGVkX29iamVjdHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYnRyZnMvc3VwZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idHJmcy9zdXBlci5jPTI0MTc9c3RhdGljIGludCBidHJmc19zaG93X2Rldm5hbWUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbi0tXFxuZnMvYnRyZnMvc3VwZXIuYy0yNDMyLVxcbmZzL2J0cmZzL3N1cGVyLmM6MjQzMzpzdGF0aWMgbG9uZyBidHJmc19ucl9jYWNoZWRfb2JqZWN0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbmZzL2J0cmZzL3N1cGVyLmMtMjQzNC17XFxuLS1cXG5mcy9idHJmcy9zdXBlci5jPTI1MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJ0cmZzX3N1cGVyX29wcyA9IHtcXG4tLVxcbmZzL2J0cmZzL3N1cGVyLmMtMjU0NS1cXHQudW5mcmVlemVfZnNcXHQ9IGJ0cmZzX3VuZnJlZXplLFxcbmZzL2J0cmZzL3N1cGVyLmM6MjU0NjpcXHQubnJfY2FjaGVkX29iamVjdHMgPSBidHJmc19ucl9jYWNoZWRfb2JqZWN0cyxcXG5mcy9idHJmcy9zdXBlci5jLTI1NDctXFx0LmZyZWVfY2FjaGVkX29iamVjdHMgPSBidHJmc19mcmVlX2NhY2hlZF9vYmplY3RzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNToyMy43NTA4MTgwOTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTcyNTEwNTAxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYW5kIEludGVncmF0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyB0aGUgY2hhbmdlcyBpbiBgZnMvYnRyZnMvc3VwZXIuY2AgYXJlIHByZXR0eSBtaW5vciwgYnV0IGxldCdzIGZvbGQgYGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzYCBpbnRvIHRoZSBmb2N1cyBzeW1ib2xzLiBXYWl0LCBob2xkIG9uLi4uIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBtZW50aW9ucyBzb21ldGhpbmcgYWJvdXQgdGhpcyBiZWluZyBhIGdsb2JhbCBjb3VudGVyLCBub3QgaG9ub3JpbmcgYHNjLVx1MDAzZW1lbWNnYCwgYW5kIGJlaW5nIGZvciB0aGUgZ2xvYmFsIHNocmluayBwYXRoLiBTbywgdGhpcyBsb29rcyBsaWtlIGEgc21hbGwgb3B0aW1pemF0aW9uIG9yIGZpeC4gVGhlIGJ1bGsgb2YgdGhlIGxvZ2ljIGlzIGFjdHVhbGx5IGluIGBtbS9zaG1lbS5jYCwgc28gdGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBsaWVzLlxuXG5SaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgYHNobWVtYCBmdW5jdGlvbnMuIEknbGwgcXVpY2tseSB2ZXJpZnkgdGhlIHN0YXRpYyBzdGF0dXMgb2YgZWFjaCBvZiB0aGVzZSBjcnVjaWFsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNobWVtIHN1YnN5c3RlbTogYHNobWVtX3VudXNlZF9odWdlX2FkZGAsIGBzaG1lbV91bnVzZWRfaHVnZV9kZWxgLCBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWAsIGBzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlYCwgYHNobWVtX3VudXNlZF9odWdlX2Ryb3BgLCBgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hgLCBgc2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1YCwgYHNobWVtX3VudXNlZF9odWdlX3Nocmlua2AsIGBzaG1lbV91bnVzZWRfaHVnZV9zY2FuYCwgYW5kIGBzaG1lbV91bnVzZWRfaHVnZV9jb3VudGAuIE9rYXksIGFsbCBzdGF0aWMuIEdvb2QuXG5cbkknbGwgYWxzbyBjaGVjayBgc2htZW1fZ2V0X2FuZF9jbGVhcl9tZW1jZ2AsIGBpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZGAgYW5kIGBzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRgLiBBbGwgYXJlIHN0YXRpYy4gUGVyZmVjdC5cblxuTm93LCBsZXQncyBpbmNsdWRlIGFsbCB0aG9zZSBmdW5jdGlvbnMgSSBqdXN0IGNvbmZpcm1lZCBhcmUgc3RhdGljIGludG8gYEZvY3VzU3ltYm9sc2AuIFRoYXQgbWFrZXMgaXQsIGZvciBzdXJlLCBlYXNpZXIgdG8gdHJhY2sgdGhpcyBsb2dpYy4gU28gd2UgaGF2ZTpcblxuLSBgc2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rYFxuLSBgc2htZW1fdW51c2VkX2h1Z2Vfc2NhbmBcbi0gYHNobWVtX3VudXNlZF9odWdlX2NvdW50YFxuLSBgc2htZW1fdW51c2VkX2h1Z2VfYWRkYFxuLSBgc2htZW1fdW51c2VkX2h1Z2VfZGVsYFxuLSBgc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWBcbi0gYHNobWVtX3VudXNlZF9odWdlX3JlcXVldWVgXG4tIGBzaG1lbV91bnVzZWRfaHVnZV9kcm9wYFxuLSBgaXNfc2htZW1fdW51c2VkX2h1Z2VfbWF0Y2hgXG4tIGBzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVgXG4tIGBzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnYFxuLSBgaXNfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRgXG4tIGBzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRgXG5cbkFuZCwgc2luY2Ugd2UncmUgaGVyZSwgd2UgY2FuIGdvIGFoZWFkIGFuZCBpbmNsdWRlIGBidHJmc19ucl9jYWNoZWRfb2JqZWN0c2AgdG9vLlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIGFzcGVjdHMuIFdlIGhhdmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYE1FTUNHYCwgYW5kIGBCVFJGU19GU2AgYXMgcmVsZXZhbnQuIEkgYWxzbyB3YW50IHRvIGNoZWNrIHdoZXRoZXIgYENPTkZJR19TSE1FTWAgaXMgbmVlZGVkLiBJdCdzIG9mdGVuIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGxldCdzIGJlIHRob3JvdWdoLiBXYWl0LCBpdCdzIG5vdCBleHBsaWNpdGx5ICpyZXF1aXJlZCosIGJ1dCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTUVNQ0dgICphcmUqIHBhcnQgb2YgdGhlIG5lY2Vzc2FyeSBjb25maWcuIEkgc2hvdWxkIGFsc28gc2VlIHdoZXRoZXIgYENPTkZJR19UTVBGU2AgaXMgbmVlZGVkLiBMZXQncyB0cmFjZSBpdCB0aHJvdWdoIGBtbS9zaG1lbS5jYCwgd2hpY2ggaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX1NITUVNYCBpcyBlbmFibGVkLCBhbmQgdGhlbiBjaGVjayBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2OTksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MzMuNDc1OTI1Nzk1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjE4OTcxMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW0ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTMtXFx0XFx0XFx0ICAgcmVhZGFoZWFkLm8gZm9saW8ubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU0OlxcdFxcdFxcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcXFxcbm1tL01ha2VmaWxlLTU1LVxcdFxcdFxcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MzMuNzk3ODI3MjEzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODIyODkwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBzaG1lbS5vYCBCdWlsZCBQcm9jZXNzKipcblxuUmlnaHQsIGBzaG1lbS5vYCBpcyBhIGNvcmUgcGFydCBvZiB0aGUgc3lzdGVtLCBzbyBpdHMgYWx3YXlzIGNvbXBpbGVkLCBhcyBleHBlY3RlZC4gQnV0LCBJJ20ganVzdCBxdWlja2x5IGNvbmZpcm1pbmcgbXkgdW5kZXJzdGFuZGluZyBieSBjaGVja2luZyB3aGVyZSB0aGF0J3MgYWN0dWFsbHkgZHJpdmVuLiBBaCwgaW50ZXJlc3RpbmcsIEkgc2VlIHRoZSBgQ09ORklHX1NITUVNYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIGlzIHVzZWQgKndpdGhpbiogYG1tL3NobWVtLmNgLiBUaGF0J3MgdGhlIGtleS4gVGhhdCB0ZWxscyBtZSB0aGF0IGNvbXBpbGF0aW9uIG9mIHRoYXQgbW9kdWxlIGlzIGNvbmRpdGlvbmVkIG9uIHRoYXQgY29uZmlnIG9wdGlvbi4gTm93LCB0aGF0J3Mgd2hhdCBJIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNTAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQwMDoyNTozNy40ODAxMTg1MjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MzI0Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TSE1FTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zaG1lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NDY9c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc2htX21udCBfX3JvX2FmdGVyX2luaXQ7XFxubW0vc2htZW0uYy00Ny1cXG5tbS9zaG1lbS5jOjQ4OiNpZmRlZiBDT05GSUdfU0hNRU1cXG5tbS9zaG1lbS5jLTQ5LS8qXFxuLS1cXG5tbS9zaG1lbS5jPTU5MDI9X19zZXR1cChcXFwidGhwX3NobWVtPVxcXCIsIHNldHVwX3RocF9zaG1lbSk7XFxuLS1cXG5tbS9zaG1lbS5jLTU5MDUtXFxubW0vc2htZW0uYzo1OTA2OiNlbHNlIC8qICFDT05GSUdfU0hNRU0gKi9cXG5tbS9zaG1lbS5jLTU5MDctXFxuLS1cXG5tbS9zaG1lbS5jPTU5NzU9c3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKnNobWVtX2dldF9pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbm1tL3NobWVtLmMtNTk4Mi1cXG5tbS9zaG1lbS5jOjU5ODM6I2VuZGlmIC8qIENPTkZJR19TSE1FTSAqL1xcbm1tL3NobWVtLmMtNTk4NC1cXG4tLVxcbm1tL3NobWVtLmM9NjEzNz1zdHJ1Y3QgZm9saW8gKnNobWVtX3JlYWRfZm9saW9fZ2ZwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vc2htZW0uYy02MTM5LXtcXG5tbS9zaG1lbS5jOjYxNDA6I2lmZGVmIENPTkZJR19TSE1FTVxcbm1tL3NobWVtLmMtNjE0MS1cXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6MzcuNTQ1NDQ3NTcxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyOTkzMTM4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvbmZpZ3VyYXRpb25zLCBydW5uaW5nIHRocm91Z2ggbXkgbWVudGFsIGNoZWNrbGlzdDpcblxuKipNeSBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zKipcblxuQWxyaWdodCwgc28gYENPTkZJR19TSE1FTWAgaXMgZGVmaW5pdGVseSBpbiBwbGF5IGhlcmUuIFRoYXQncyBhIHNvbGlkIGNob2ljZSwgc28gaXQncyBnb29kIHRvIGluY2x1ZGUgaXQuIEknbSBnb2luZyB0byB3YW50IHRvIG1ha2Ugc3VyZSBJIG5vdGUgdGhhdC5cblxuVGhlbiwgd2UndmUgYWxzbyBnb3QgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBDT05GSUdfTUVNQ0dgLiBUaG9zZSBhcmUgcHJldHR5IHN0YW5kYXJkLCBhbmQgcHJvYmFibHkgYmVpbmcgZHJpdmVuIGJ5IHBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IHJlcXVpcmVtZW50cyByZXNwZWN0aXZlbHkuIEFnYWluLCBtYWtlcyBzZW5zZSBhbmQgZ29vZCB0byBrbm93IHRoZXkgYXJlIGFjdGl2ZS5cblxuRmluYWxseSwgYENPTkZJR19CVFJGU19GU2AgaXMgcHJlc2VudC4gSSdtIGFzc3VtaW5nIHRoZXJlIGlzIGEgc3RyYXRlZ2ljIGNob2ljZSBmb3IgdGhhdCBmaWxlc3lzdGVtLCBwZXJoYXBzIHJlbGF0ZWQgdG8gc25hcHNob3RzLCBkYXRhIGludGVncml0eSwgb3IgZ2VuZXJhbCBzeXN0ZW0gbWFuYWdlbWVudCByZXF1aXJlbWVudHMuIEknbSBnb2luZyB0byBoYXZlIHRvIGNoZWNrIGluIHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBiZWluZyBkcml2ZW4gYnkgdGhhdCBpbmNsdXNpb24uXG5cblJpZ2h0LCBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgYWxsIG9mIHRoZXNlLCBzbyBJIHdpbGwgbm93IGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4ODYsIk91dHB1dFRva2VucyI6MzI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMDA6MjU6NDIuODQ0NzYzNTc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIyNzY0NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiQlRSRlNfRlNcIixcbiAgICBcIlNITUVNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2htZW1fdW51c2VkX2h1Z2Vfc2hyaW5rXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9zY2FuXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9jb3VudFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfYWRkXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9kZWxcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2lzb2xhdGVcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX3JlcXVldWVcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2Ryb3BcIixcbiAgICBcImlzX3NobWVtX3VudXNlZF9odWdlX21hdGNoXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9hbGxvY19scnVcIixcbiAgICBcInNobWVtX2dldF9hbmRfY2xlYXJfbWVtY2dcIixcbiAgICBcImlzX3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkXCIsXG4gICAgXCJzZXRfc2htZW1fdW51c2VkX2h1Z2VfaXNvbGF0ZWRcIixcbiAgICBcImJ0cmZzX25yX2NhY2hlZF9vYmplY3RzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IHNobWVtIGhhbmRsZXMgdW51c2VkIGh1Z2UgcGFnZXMgd2hlbiBzaHJpbmtpbmcsIGludHJvZHVjaW5nIGxpc3RfbHJ1IGZvciBzaHJpbmtsaXN0IGluIHNobWVtX3NiX2luZm8uIEl0IGFsc28gbW9kaWZpZXMgc3VwZXJfY2FjaGVfc2NhbiBhbmQgc3VwZXJfY2FjaGVfY291bnQgaW4gZnMvc3VwZXIuYyB0byByZW1vdmUgc3VwZXJfZnNfb2JqZWN0c19lbGlnaWJsZSBhbmQgaW5zdGVhZCB1c2VzIG1lbV9jZ3JvdXBfc2hyaW5rX2lzX3Jvb3QgaW4gYnRyZnNfbnJfY2FjaGVkX29iamVjdHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZmlsZXN5c3RlbSBsb2dpYywgbWFraW5nIHRoZW0gaGlnaGx5IHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJUUkZTX0ZTXCIsXG4gICAgXCJTSE1FTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNobWVtX3VudXNlZF9odWdlX3Nocmlua1wiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2Vfc2NhblwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfY291bnRcIixcbiAgICBcInNobWVtX3VudXNlZF9odWdlX2FkZFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfZGVsXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9yZXF1ZXVlXCIsXG4gICAgXCJzaG1lbV91bnVzZWRfaHVnZV9kcm9wXCIsXG4gICAgXCJpc19zaG1lbV91bnVzZWRfaHVnZV9tYXRjaFwiLFxuICAgIFwic2htZW1fdW51c2VkX2h1Z2VfYWxsb2NfbHJ1XCIsXG4gICAgXCJzaG1lbV9nZXRfYW5kX2NsZWFyX21lbWNnXCIsXG4gICAgXCJpc19zaG1lbV91bnVzZWRfaHVnZV9pc29sYXRlZFwiLFxuICAgIFwic2V0X3NobWVtX3VudXNlZF9odWdlX2lzb2xhdGVkXCIsXG4gICAgXCJidHJmc19ucl9jYWNoZWRfb2JqZWN0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBzaG1lbSBoYW5kbGVzIHVudXNlZCBodWdlIHBhZ2VzIHdoZW4gc2hyaW5raW5nLCBpbnRyb2R1Y2luZyBsaXN0X2xydSBmb3Igc2hyaW5rbGlzdCBpbiBzaG1lbV9zYl9pbmZvLiBJdCBhbHNvIG1vZGlmaWVzIHN1cGVyX2NhY2hlX3NjYW4gYW5kIHN1cGVyX2NhY2hlX2NvdW50IGluIGZzL3N1cGVyLmMgdG8gcmVtb3ZlIHN1cGVyX2ZzX29iamVjdHNfZWxpZ2libGUgYW5kIGluc3RlYWQgdXNlcyBtZW1fY2dyb3VwX3Nocmlua19pc19yb290IGluIGJ0cmZzX25yX2NhY2hlZF9vYmplY3RzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGZpbGVzeXN0ZW0gbG9naWMsIG1ha2luZyB0aGVtIGhpZ2hseSByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcrw6[1] Phase: Succeeded StartedAt: 2026-07-22 00:25:55 +0000 UTC FinishedAt: 2026-07-22 00:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 00:25:55 +0000 UTC FinishedAt: 2026-07-22 00:25:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[2] Phase: Succeeded StartedAt: 2026-07-22 00:25:55 +0000 UTC FinishedAt: 2026-07-22 01:58:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-22 00:25:55 +0000 UTC FinishedAt: 2026-07-22 01:58:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-22 00:25:55 +0000 UTC FinishedAt: 2026-07-22 00:26:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-22 00:25:55 +0000 UTC FinishedAt: 2026-07-22 00:25:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowrcrw6/series-workflowrcrw6-convert-artifact-156069139/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-22 00:26:05 +0000 UTC FinishedAt: 2026-07-22 01:24:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-22 00:26:05 +0000 UTC FinishedAt: 2026-07-22 01:24:01 +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:*babaf2a3-019c-455d-ae31-a1f6aabea81c,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-workflowrcrw6/series-workflowrcrw6-convert-artifact-156069139/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": "755555b8-d558-44ef-8dae-87ecb5433c5b", "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-workflowrcrw6/series-workflowrcrw6-build-action-3600910913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-22 00:26:05 +0000 UTC FinishedAt: 2026-07-22 01:23:51 +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:*babaf2a3-019c-455d-ae31-a1f6aabea81c,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-workflowrcrw6/series-workflowrcrw6-convert-artifact-156069139/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": "755555b8-d558-44ef-8dae-87ecb5433c5b", "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-workflowrcrw6/series-workflowrcrw6-build-action-3600910913/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-22 01:24:01 +0000 UTC FinishedAt: 2026-07-22 01:24:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-22 01:24:01 +0000 UTC FinishedAt: 2026-07-22 01:24:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-22 01:24:01 +0000 UTC FinishedAt: 2026-07-22 01:24:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-22 01:24:01 +0000 UTC FinishedAt: 2026-07-22 01:24:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowrcrw6/series-workflowrcrw6-convert-artifact-1571672586/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-22 01:24:11 +0000 UTC FinishedAt: 2026-07-22 01:57:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-22 01:24:11 +0000 UTC FinishedAt: 2026-07-22 01:57:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*755555b8-d558-44ef-8dae-87ecb5433c5b,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-workflowrcrw6/series-workflowrcrw6-build-action-3600910913/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": false },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-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Failed StartedAt: 2026-07-22 01:57:19 +0000 UTC FinishedAt: 2026-07-22 01:58:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcrw6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shmem_unused_huge_shrink","shmem_unused_huge_scan","shmem_unused_huge_count","shmem_unused_huge_add","shmem_unused_huge_del","shmem_unused_huge_isolate","shmem_unused_huge_requeue","shmem_unused_huge_drop","is_shmem_unused_huge_match","shmem_unused_huge_alloc_lru","shmem_get_and_clear_memcg","is_shmem_unused_huge_isolated","set_shmem_unused_huge_isolated","btrfs_nr_cached_objects"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"3fe08b9796f36ef437ab9328e7dd1e5ff2d66603","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","MEMCG","BTRFS_FS","SHMEM"],"series_id":"b7289142-0ccd-4786-b30a-55de36b69ef1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Failed StartedAt: 2026-07-22 01:57:19 +0000 UTC FinishedAt: 2026-07-22 01:58:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}