Name: series-workflowjx6ht Phase: Succeeded StartedAt: 2026-07-24 13:57:24 +0000 UTC FinishedAt: 2026-07-24 18:53:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[0] Phase: Succeeded StartedAt: 2026-07-24 13:57:24 +0000 UTC FinishedAt: 2026-07-24 14:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 13:57:24 +0000 UTC FinishedAt: 2026-07-24 14:16:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "NET" ], "series_id": "4207341f-d6f1-4058-875c-91cf2a50d9bb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sk_lookup_full_sk", "bpf_sk_release", "sk_select_reuseport", "sock_map_lookup", "sock_hash_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrX2xvb2t1cF9mdWxsX3NrJiMzNDssCiAgICAmIzM0O2JwZl9za19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3NrX3NlbGVjdF9yZXVzZXBvcnQmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbG9va3VwJiMzNDssCiAgICAmIzM0O3NvY2tfaGFzaF9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBpbiBCUEYgc29ja2V0IGxvb2t1cCBoZWxwZXJzIChlLmcuLCBicGZfc2tfbG9va3VwX2Z1bGxfc2ssIGJwZl9za19yZWxlYXNlKSBhbmQgc29ja21hcCBsb29rdXAgZnVuY3Rpb25zIChzb2NrX21hcF9sb29rdXAsIHNvY2tfaGFzaF9sb29rdXApLiBJdCBlbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgaXMgYWx3YXlzIHRha2VuIGZvciBzb2NrZXRzIHJldHVybmVkIGJ5IGxvb2t1cHMgYW5kIHByb3Blcmx5IHJlbGVhc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBCUEYgcHJvZ3JhbXMgY2FsbGluZyB0aGVzZSBoZWxwZXJzIG9yIGludGVyYWN0aW5nIHdpdGggc29ja21hcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTQ6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NTRlNTY3ZTBjMWE2MjZmYTgyNTgwZGRlNWQ1OTRlODc1NTBlZDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTQ6MTU6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggYjQ0NmFhOGJlNWMzNzUuLjRiYzBiNTk2NjhmYWU1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtNzAyNyw2ICYjNDM7NzAyNywxMyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXG4gXHRcdFdBUk5fT05DRSgxLCBcJiMzNDtGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwmIzM0Oyk7XG4gXHRcdHNrID0gTlVMTDtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0LyogQWx3YXlzIHRha2UgYSByZWZlcmVuY2UsIGV2ZW4gaWYgdGhlIGxvb2t1cCBza2lwcGVkIG9uZTtcbiYjNDM7XHQgKiBicGZfc2tfcmVsZWFzZSgpIGFsd2F5cyBwdXRzIG9uZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2sgXHUwMDI2XHUwMDI2ICFyZWZjb3VudGVkIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4mIzQzO1x0XHRzayA9IE5VTEw7XG4mIzQzO1xuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbkBAIC03MDc0LDYgJiM0Mzs3MDgxLDMxIEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHJldHVybiBzaztcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc29jayAqXG4mIzQzO2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7XG4mIzQzO1xuJiM0MztcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIHNrLVx1MDAzZXJza19saXN0ZW5lciwgbWFrZSBzdXJlIHRoZSBvcmlnaW5hbFxuJiM0MztcdCAqIHNrIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2syICE9IHNrKSB7XG4mIzQzO1x0XHRzb2NrX2dlbl9wdXQoc2spO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuJiM0MztcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qIHNrMiBpcyBSQ1UtZnJlZSwgYnV0IHRha2UgYSByZWZlcmVuY2UgYW55d2F5O1xuJiM0MztcdFx0ICogYnBmX3NrX3JlbGVhc2UoKSBwdXRzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc2syIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrMi1cdTAwM2Vza19yZWZjbnQpKVxuJiM0MztcdFx0XHRzazIgPSBOVUxMO1xuJiM0MztcdFx0c2sgPSBzazI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2s7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBzb2NrICpcbiBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG5AQCAtNzA4MywyMiAmIzQzOzcxMTUsOCBAQCBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0XHRcdFx0ICAgaWZpbmRleCwgcHJvdG8sIG5ldG5zX2lkLCBmbGFncyxcbiBcdFx0XHRcdFx0ICAgc2RpZik7XG4gXG4tXHRpZiAoc2spIHtcbi1cdFx0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xuLVxuLVx0XHQvKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiAoc2spLVx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xuLVx0XHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXG4tXHRcdCAqL1xuLVx0XHRpZiAoc2syICE9IHNrKSB7XG4tXHRcdFx0c29ja19nZW5fcHV0KHNrKTtcbi1cdFx0XHQvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQgKi9cbi1cdFx0XHRpZiAodW5saWtlbHkoc2syIFx1MDAyNlx1MDAyNiAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7XG4tXHRcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcJiMzNDspO1xuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdFx0fVxuLVx0XHRcdHNrID0gc2syO1xuLVx0XHR9XG4tXHR9XG4mIzQzO1x0aWYgKHNrKVxuJiM0MztcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xuIFxuIFx0cmV0dXJuIHNrO1xuIH1cbkBAIC03MTI5LDIyICYjNDM7NzE0Nyw4IEBAIGJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxuIFx0XHRcdFx0XHQgZmxhZ3MpO1xuIFxuLVx0aWYgKHNrKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbi1cbi1cdFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2tcbi1cdFx0ICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHNrMiAhPSBzaykge1xuLVx0XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4tXHRcdFx0LyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuLVx0XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O0ZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRcdH1cbi1cdFx0XHRzayA9IHNrMjtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmIChzaylcbiYjNDM7XHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbiBcbiBcdHJldHVybiBzaztcbiB9XG5AQCAtNzI4MCw3ICYjNDM7NzI4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XG4gXG4gQlBGX0NBTExfMShicGZfc2tfcmVsZWFzZSwgc3RydWN0IHNvY2sgKiwgc2spXG4ge1xuLVx0aWYgKHNrIFx1MDAyNlx1MDAyNiBza19pc19yZWZjb3VudGVkKHNrKSlcbiYjNDM7XHRpZiAoc2spXG4gXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTE1NzIsMTEgJiM0MzsxMTU3NiwxMyBAQCBCUEZfQ0FMTF80KHNrX3NlbGVjdF9yZXVzZXBvcnQsIHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqLCByZXVzZV9rZXJuLFxuIFx0Ym9vbCBpc19zb2NrYXJyYXkgPSBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JFVVNFUE9SVF9TT0NLQVJSQVk7XG4gXHRzdHJ1Y3Qgc29ja19yZXVzZXBvcnQgKnJldXNlO1xuIFx0c3RydWN0IHNvY2sgKnNlbGVjdGVkX3NrO1xuLVx0aW50IGVycjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbiBcdHNlbGVjdGVkX3NrID0gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFx0aWYgKCFzZWxlY3RlZF9zaylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0aWYgKCFpc19zb2NrYXJyYXkpXG4mIzQzO1x0XHRzb2NrX3B1dChzZWxlY3RlZF9zayk7XG4gXG4gXHRyZXVzZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlY3RlZF9zay1cdTAwM2Vza19yZXVzZXBvcnRfY2IpO1xuIFx0aWYgKCFyZXVzZSkge1xuQEAgLTExNjA2LDEzICYjNDM7MTE2MTIsNyBAQCBCUEZfQ0FMTF80KHNrX3NlbGVjdF9yZXVzZXBvcnQsIHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqLCByZXVzZV9rZXJuLFxuIFx0fVxuIFxuIFx0cmV1c2Vfa2Vybi1cdTAwM2VzZWxlY3RlZF9zayA9IHNlbGVjdGVkX3NrO1xuLVxuLVx0cmV0dXJuIDA7XG4gZXJyb3I6XG4tXHQvKiBMb29rdXAgaW4gc29ja19tYXAgY2FuIHJldHVybiBUQ1AgRVNUQUJMSVNIRUQgc29ja2V0cy4gKi9cbi1cdGlmIChza19pc19yZWZjb3VudGVkKHNlbGVjdGVkX3NrKSlcbi1cdFx0c29ja19wdXQoc2VsZWN0ZWRfc2spO1xuLVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbmluZGV4IDllZmJkOGNhN2RiODMyLi5hZTE4ZGM0ZDYwZjkxNSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC0zOTAsMTAgJiM0MzszOTAsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdHN0cnVjdCBzb2NrICpzaztcbiBcbiBcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbi1cdGlmICghc2spXG4tXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGlmIChzaylcbiYjNDM7XHRcdHNvY2tfaG9sZChzayk7XG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuQEAgLTEyMTYsMTAgJiM0MzsxMjE0LDggQEAgc3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0c3RydWN0IHNvY2sgKnNrO1xuIFxuIFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4tXHRpZiAoIXNrKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRpZiAoc2spXG4mIzQzO1x0XHRzb2NrX2hvbGQoc2spO1xuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfbG9va3VwX2Z1bGxfc2smIzM0OywKICAgICYjMzQ7YnBmX3NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c2tfc2VsZWN0X3JldXNlcG9ydCYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9sb29rdXAmIzM0OywKICAgICYjMzQ7c29ja19oYXNoX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGluIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgKGUuZy4sIGJwZl9za19sb29rdXBfZnVsbF9zaywgYnBmX3NrX3JlbGVhc2UpIGFuZCBzb2NrbWFwIGxvb2t1cCBmdW5jdGlvbnMgKHNvY2tfbWFwX2xvb2t1cCwgc29ja19oYXNoX2xvb2t1cCkuIEl0IGVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBpcyBhbHdheXMgdGFrZW4gZm9yIHNvY2tldHMgcmV0dXJuZWQgYnkgbG9va3VwcyBhbmQgcHJvcGVybHkgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEJQRiBwcm9ncmFtcyBjYWxsaW5nIHRoZXNlIGhlbHBlcnMgb3IgaW50ZXJhY3Rpbmcgd2l0aCBzb2NrbWFwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDU0ZTU2N2UwYzFhNjI2ZmE4MjU4MGRkZTVkNTk0ZTg3NTUwZWQyMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDE0OjE1OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCBiNDQ2YWE4YmU1YzM3NS4uNGJjMGI1OTY2OGZhZTUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC03MDI3LDYgJiM0Mzs3MDI3LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwKIAkJV0FSTl9PTkNFKDEsICYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCEmIzM0Oyk7CiAJCXNrID0gTlVMTDsKIAl9CiYjNDM7CiYjNDM7CS8qIEFsd2F5cyB0YWtlIGEgcmVmZXJlbmNlLCBldmVuIGlmIHRoZSBsb29rdXAgc2tpcHBlZCBvbmU7CiYjNDM7CSAqIGJwZl9za19yZWxlYXNlKCkgYWx3YXlzIHB1dHMgb25lLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrICZhbXA7JmFtcDsgIXJlZmNvdW50ZWQgJmFtcDsmYW1wOyAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpCiYjNDM7CQlzayA9IE5VTEw7CiYjNDM7CiAJcmV0dXJuIHNrOwogfQogCkBAIC03MDc0LDYgJiM0Mzs3MDgxLDMxIEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbiwKIAlyZXR1cm4gc2s7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHNvY2sgKgomIzQzO2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7CiYjNDM7CiYjNDM7CS8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIHNrLSZndDtyc2tfbGlzdGVuZXIsIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwKJiM0MzsJICogc2sgc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrMiAhPSBzaykgewomIzQzOwkJc29ja19nZW5fcHV0KHNrKTsKJiM0MzsJCWlmICh1bmxpa2VseShzazIgJmFtcDsmYW1wOyAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7CiYjNDM7CQkJV0FSTl9PTkNFKDEsICYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCEmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiYjNDM7CQkvKiBzazIgaXMgUkNVLWZyZWUsIGJ1dCB0YWtlIGEgcmVmZXJlbmNlIGFueXdheTsKJiM0MzsJCSAqIGJwZl9za19yZWxlYXNlKCkgcHV0cy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNrMiAmYW1wOyZhbXA7ICFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtzazItJmd0O3NrX3JlZmNudCkpCiYjNDM7CQkJc2syID0gTlVMTDsKJiM0MzsJCXNrID0gc2syOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzazsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHNvY2sgKgogX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sCiAJCXN0cnVjdCBuZXQgKmNhbGxlcl9uZXQsIHUzMiBpZmluZGV4LCB1OCBwcm90bywgdTY0IG5ldG5zX2lkLApAQCAtNzA4MywyMiAmIzQzOzcxMTUsOCBAQCBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbiwKIAkJCQkJICAgaWZpbmRleCwgcHJvdG8sIG5ldG5zX2lkLCBmbGFncywKIAkJCQkJICAgc2RpZik7CiAKLQlpZiAoc2spIHsKLQkJc3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spOwotCi0JCS8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktJmd0O3Jza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBzawotCQkgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuCi0JCSAqLwotCQlpZiAoc2syICE9IHNrKSB7Ci0JCQlzb2NrX2dlbl9wdXQoc2spOwotCQkJLyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovCi0JCQlpZiAodW5saWtlbHkoc2syICZhbXA7JmFtcDsgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkgewotCQkJCVdBUk5fT05DRSgxLCAmIzM0O0ZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhJiMzNDspOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJc2sgPSBzazI7Ci0JCX0KLQl9CiYjNDM7CWlmIChzaykKJiM0MzsJCXNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTsKIAogCXJldHVybiBzazsKIH0KQEAgLTcxMjksMjIgJiM0Mzs3MTQ3LDggQEAgYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLAogCXN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLAogCQkJCQkgZmxhZ3MpOwogCi0JaWYgKHNrKSB7Ci0JCXN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTsKLQotCQkvKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiAoc2spLSZndDtyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2sKLQkJICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLgotCQkgKi8KLQkJaWYgKHNrMiAhPSBzaykgewotCQkJc29ja19nZW5fcHV0KHNrKTsKLQkJCS8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqLwotCQkJaWYgKHVubGlrZWx5KHNrMiAmYW1wOyZhbXA7ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHsKLQkJCQlXQVJOX09OQ0UoMSwgJiMzNDtGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0ISYjMzQ7KTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJCXNrID0gc2syOwotCQl9Ci0JfQomIzQzOwlpZiAoc2spCiYjNDM7CQlzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7CiAKIAlyZXR1cm4gc2s7CiB9CkBAIC03MjgwLDcgJiM0Mzs3Mjg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3VkcF9wcm90byA9IHsKIAogQlBGX0NBTExfMShicGZfc2tfcmVsZWFzZSwgc3RydWN0IHNvY2sgKiwgc2spCiB7Ci0JaWYgKHNrICZhbXA7JmFtcDsgc2tfaXNfcmVmY291bnRlZChzaykpCiYjNDM7CWlmIChzaykKIAkJc29ja19nZW5fcHV0KHNrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExNTcyLDExICYjNDM7MTE1NzYsMTMgQEAgQlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2VybiwKIAlib29sIGlzX3NvY2thcnJheSA9IG1hcC0mZ3Q7bWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JFVVNFUE9SVF9TT0NLQVJSQVk7CiAJc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZTsKIAlzdHJ1Y3Qgc29jayAqc2VsZWN0ZWRfc2s7Ci0JaW50IGVycjsKJiM0MzsJaW50IGVyciA9IDA7CiAKIAlzZWxlY3RlZF9zayA9IG1hcC0mZ3Q7b3BzLSZndDttYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCWlmICghc2VsZWN0ZWRfc2spCiAJCXJldHVybiAtRU5PRU5UOwomIzQzOwlpZiAoIWlzX3NvY2thcnJheSkKJiM0MzsJCXNvY2tfcHV0KHNlbGVjdGVkX3NrKTsKIAogCXJldXNlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVjdGVkX3NrLSZndDtza19yZXVzZXBvcnRfY2IpOwogCWlmICghcmV1c2UpIHsKQEAgLTExNjA2LDEzICYjNDM7MTE2MTIsNyBAQCBCUEZfQ0FMTF80KHNrX3NlbGVjdF9yZXVzZXBvcnQsIHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqLCByZXVzZV9rZXJuLAogCX0KIAogCXJldXNlX2tlcm4tJmd0O3NlbGVjdGVkX3NrID0gc2VsZWN0ZWRfc2s7Ci0KLQlyZXR1cm4gMDsKIGVycm9yOgotCS8qIExvb2t1cCBpbiBzb2NrX21hcCBjYW4gcmV0dXJuIFRDUCBFU1RBQkxJU0hFRCBzb2NrZXRzLiAqLwotCWlmIChza19pc19yZWZjb3VudGVkKHNlbGVjdGVkX3NrKSkKLQkJc29ja19wdXQoc2VsZWN0ZWRfc2spOwotCiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKaW5kZXggOWVmYmQ4Y2E3ZGI4MzIuLmFlMThkYzRkNjBmOTE1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKQEAgLTM5MCwxMCAmIzQzOzM5MCw4IEBAIHN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogCXN0cnVjdCBzb2NrICpzazsKIAogCXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTsKLQlpZiAoIXNrKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoc2tfaXNfcmVmY291bnRlZChzaykgJmFtcDsmYW1wOyAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpCi0JCXJldHVybiBOVUxMOwomIzQzOwlpZiAoc2spCiYjNDM7CQlzb2NrX2hvbGQoc2spOwogCXJldHVybiBzazsKIH0KIApAQCAtMTIxNiwxMCAmIzQzOzEyMTQsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiAJc3RydWN0IHNvY2sgKnNrOwogCiAJc2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7Ci0JaWYgKCFzaykKLQkJcmV0dXJuIE5VTEw7Ci0JaWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spICZhbXA7JmFtcDsgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3NrLSZndDtza19yZWZjbnQpKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJaWYgKHNrKQomIzQzOwkJc29ja19ob2xkKHNrKTsKIAlyZXR1cm4gc2s7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTb2NrZXQgUmVmZXJlbmNlIE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyBzb2NrZXQgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIEJQRiBzb2NrZXQgbG9va3VwIGZ1bmN0aW9ucy4gVGhpcyBhZmZlY3RzIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGBuZXQvY29yZS9zb2NrX21hcC5jYCwgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIEJQRiBuZXR3b3JraW5nIGxvZ2ljLiBUaGUga2V5IHNlZW1zIHRvIGJlIGEgY29uc2lzdGVudCBhcHByb2FjaCB0byByZWZlcmVuY2UgY291bnRpbmcuCgpFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGZvcmNlcyBhIHJlZmVyZW5jZSB0byBiZSB0YWtlbiBvbiAqZXZlcnkqIHNvY2tldCByZXR1cm5lZCBieSBgc2tfbG9va3VwYCBhbmQgYGJwZl9za19sb29rdXBfZnVsbF9za2AsIGFuZCBgYnBmX3NrX3JlbGVhc2VgIGFsd2F5cyAqcmVsZWFzZXMqIHRoYXQgcmVmZXJlbmNlIHdpdGhvdXQgYW55IGNvbmRpdGlvbmFsIGNoZWNrcyBhbnltb3JlLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlLiBUaGVuIHRoZXJlIGFyZSBvdGhlciBjaGFuZ2VzIHdoaWNoIGFsd2F5cyBjYWxsIGBzb2NrX2hvbGQoc2spYCBvbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLCBhbmQgZG9lc24mIzM5O3QgY2hlY2sgYHNrX2lzX3JlZmNvdW50ZWQoc2spYC4KCkZ1bmN0aW9uLXdpc2UsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzcGVjaWZpYyBCUEYtcmVsYXRlZCBlbnRyeSBwb2ludHM6IGBza19sb29rdXBgLCBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYF9fYnBmX3NrX2xvb2t1cGAsIGBicGZfc2tfbG9va3VwYCwgYGJwZl9za19yZWxlYXNlYCwgYHNrX3NlbGVjdF9yZXVzZXBvcnRgLCBgc29ja19tYXBfbG9va3VwYCwgYW5kIGBzb2NrX2hhc2hfbG9va3VwYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZvciBob3cgc29ja2V0cyBhcmUgZm91bmQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgb2J2aW91cywgYW5kIEkgc3VzcGVjdCBgQ09ORklHX0JQRl9TT0NLX0FERFJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsaWtlbHkgaW4gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGBuZXQvY29yZS9zb2NrX21hcC5jYCBmaWxlcyB0aGVtc2VsdmVzLCBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpPdmVyYWxsLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFpbXMgdG8gc29saWRpZnkgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBzdHJhdGVneSwgcG90ZW50aWFsbHkgaW1wcm92aW5nIHN0YWJpbGl0eSBvciBwcmV2ZW50aW5nIHN1YnRsZSByZXNvdXJjZSBsZWFrcyB3aXRoaW4gdGhlIEJQRiBzb2NrZXQgbWFuYWdlbWVudC4gSSYjMzk7bGwgZGlnIGludG8gdGhlIGNvZGUgbW9yZSB0aG9yb3VnaGx5IHRvIHNlZSB0aGUgZGlyZWN0IGltcGFjdCBhbmQgcmF0aW9uYWxlIGZvciB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTY5Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTg5LSNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmM6Njk5MDpzdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXG5uZXQvY29yZS9maWx0ZXIuYy02OTkxLVx0XHRcdCAgICAgIGludCBkaWYsIGludCBzZGlmLCB1OCBmYW1pbHksIHU4IHByb3RvKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwNDQ9X19icGZfc2tjX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzAtXHRcdG5ldCA9IGNhbGxlcl9uZXQ7XG5uZXQvY29yZS9maWx0ZXIuYzo3MDcxOlx0XHRzayA9IHNrX2xvb2t1cChuZXQsIHR1cGxlLCBpZmluZGV4LCBzZGlmLCBmYW1pbHksIHByb3RvKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzItXHR9IGVsc2Uge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzUtXHRcdFx0Z290byBvdXQ7XG5uZXQvY29yZS9maWx0ZXIuYzo3MDc2Olx0XHRzayA9IHNrX2xvb2t1cChuZXQsIHR1cGxlLCBpZmluZGV4LCBzZGlmLCBmYW1pbHksIHByb3RvKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzctXHRcdHB1dF9uZXQobmV0KTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MDg0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqXG5uZXQvY29yZS9maWx0ZXIuYzo3MDg1OmJwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9maWx0ZXIuYy03MDg2LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTA5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqXG5uZXQvY29yZS9maWx0ZXIuYzo3MTEwOl9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtNzExMS1cdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzExOC1cdGlmIChzaylcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTk6XHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMjAtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzE0Mz1zdGF0aWMgc3RydWN0IHNvY2sgKlxubmV0L2NvcmUvZmlsdGVyLmM6NzE0NDpicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXG5uZXQvY29yZS9maWx0ZXIuYy03MTQ1LVx0ICAgICAgdTggcHJvdG8sIHU2NCBuZXRuc19pZCwgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNTAtXHRpZiAoc2spXG5uZXQvY29yZS9maWx0ZXIuYzo3MTUxOlx0XHRzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7XG5uZXQvY29yZS9maWx0ZXIuYy03MTUyLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcxNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE3NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjcxNzU6QlBGX0NBTExfNShicGZfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtNzE3Ni1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy03MTc3LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNzg6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIElQUFJPVE9fVENQLFxubmV0L2NvcmUvZmlsdGVyLmMtNzE3OS1cdFx0XHRcdFx0ICAgIG5ldG5zX2lkLCBmbGFncyk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE4MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjcxODI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjcxODM6XHQuZnVuY1x0XHQ9IGJwZl9za19sb29rdXBfdGNwLFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTkzLVxubmV0L2NvcmUvZmlsdGVyLmM6NzE5NDpCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdWRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03MTk1LVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTYte1xubmV0L2NvcmUvZmlsdGVyLmM6NzE5NzpcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgSVBQUk9UT19VRFAsXG5uZXQvY29yZS9maWx0ZXIuYy03MTk4LVx0XHRcdFx0XHQgICAgbmV0bnNfaWQsIGZsYWdzKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjAwLVxubmV0L2NvcmUvZmlsdGVyLmM6NzIwMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzIwMjpcdC5mdW5jXHRcdD0gYnBmX3NrX2xvb2t1cF91ZHAsXG5uZXQvY29yZS9maWx0ZXIuYy03MjAzLVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcyMjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzIzNi1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyMzc6QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtNzIzOC1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI0My1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNDQ6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNDUtXHRcdFx0XHRcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVENQLCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjQ4LVxubmV0L2NvcmUvZmlsdGVyLmM6NzI0OTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdGNwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzI1MDpcdC5mdW5jXHRcdD0gYnBmX3RjX3NrX2xvb2t1cF90Y3AsXG5uZXQvY29yZS9maWx0ZXIuYy03MjUxLVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjAtXG5uZXQvY29yZS9maWx0ZXIuYzo3MjYxOkJQRl9DQUxMXzUoYnBmX3RjX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBza19idWZmICosIHNrYixcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjItXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjctXG5uZXQvY29yZS9maWx0ZXIuYzo3MjY4Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXG5uZXQvY29yZS9maWx0ZXIuYy03MjY5LVx0XHRcdFx0XHQgICAgICBpZmluZGV4LCBJUFBST1RPX1VEUCwgbmV0bnNfaWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI3Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNzM6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNzQ6XHQuZnVuY1x0XHQ9IGJwZl90Y19za19sb29rdXBfdWRwLFxubmV0L2NvcmUvZmlsdGVyLmMtNzI3NS1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MjkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3JlbGVhc2VfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI5OC1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyOTk6QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy03MzAwLVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTMyLCBuZXRuc19pZCwgdTY0LCBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzA1LVxubmV0L2NvcmUvZmlsdGVyLmM6NzMwNjpcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMDctXHRcdFx0XHRcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzEwLVxubmV0L2NvcmUvZmlsdGVyLmM6NzMxMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjczMTI6XHQuZnVuYyAgICAgICAgICAgPSBicGZfeGRwX3NrX2xvb2t1cF91ZHAsXG5uZXQvY29yZS9maWx0ZXIuYy03MzEzLVx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzMzNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzM0Ni1cbm5ldC9jb3JlL2ZpbHRlci5jOjczNDc6QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy03MzQ4LVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTMyLCBuZXRuc19pZCwgdTY0LCBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzUzLVxubmV0L2NvcmUvZmlsdGVyLmM6NzM1NDpcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNTUtXHRcdFx0XHRcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVENQLCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzU4LVxubmV0L2NvcmUvZmlsdGVyLmM6NzM1OTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjczNjA6XHQuZnVuYyAgICAgICAgICAgPSBicGZfeGRwX3NrX2xvb2t1cF90Y3AsXG5uZXQvY29yZS9maWx0ZXIuYy03MzYxLVx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzM4MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzM5MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjczOTE6QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5Mi1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy03MzkzLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjczOTQ6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKE5VTEwsIHR1cGxlLCBsZW4sXG5uZXQvY29yZS9maWx0ZXIuYy03Mzk1LVx0XHRcdFx0XHQgICAgICBzb2NrX25ldChjdHgtXHUwMDNlc2spLCAwLCBJUFBST1RPX1RDUCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03Mzk4LVxubmV0L2NvcmUvZmlsdGVyLmM6NzM5OTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MDA6XHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MDEtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQwOS1cbm5ldC9jb3JlL2ZpbHRlci5jOjc0MTA6QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxubmV0L2NvcmUvZmlsdGVyLmMtNzQxMS1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy03NDEyLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MTM6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKE5VTEwsIHR1cGxlLCBsZW4sXG5uZXQvY29yZS9maWx0ZXIuYy03NDE0LVx0XHRcdFx0XHQgICAgICBzb2NrX25ldChjdHgtXHUwMDNlc2spLCAwLCBJUFBST1RPX1VEUCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03NDE3LVxubmV0L2NvcmUvZmlsdGVyLmM6NzQxODpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MTk6XHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MjAtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODMwMD1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MzIzLSNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNDpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjgzMjU6XHRcdHJldHVybiBcdTAwMjZicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4MzI2Olx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNzpcdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjgtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQxMz1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NDQwLSNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MTpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDI6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3RjcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDM6XHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XG5uZXQvY29yZS9maWx0ZXIuYzo4NDQ0Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2xvb2t1cF91ZHBfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy04NDQ1LVx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg0NjI9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg1NTktI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo4NTYwOlx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MTpcdFx0cmV0dXJuIFx1MDAyNmJwZl90Y19za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODU2MjpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg1NjM6XHRcdHJldHVybiBcdTAwMjZicGZfdGNfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg1NjQtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODU5OT14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NjI4LSNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmM6ODYyOTpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg2MzA6XHRcdHJldHVybiBcdTAwMjZicGZfeGRwX3NrX2xvb2t1cF91ZHBfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NjMxOlx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMjpcdFx0cmV0dXJuIFx1MDAyNmJwZl94ZHBfc2tfbG9va3VwX3RjcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MzMtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODc1Nj1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzgxLSNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MjpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODM6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3RjcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODQ6XHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XG5uZXQvY29yZS9maWx0ZXIuYzo4Nzg1Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2xvb2t1cF91ZHBfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy04Nzg2LVx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExODA4PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfcmV1c2Vwb3J0X3Byb2dfb3BzID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODEwLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTE6REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYnBmX3NrX2xvb2t1cF9lbmFibGVkKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjExODEyOkVYUE9SVF9TWU1CT0woYnBmX3NrX2xvb2t1cF9lbmFibGVkKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExODEzLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTQ6QlBGX0NBTExfMyhicGZfc2tfbG9va3VwX2Fzc2lnbiwgc3RydWN0IGJwZl9za19sb29rdXBfa2VybiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy0xMTgxNS1cdCAgIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODQyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NDM6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExODQ0Olx0LmZ1bmNcdFx0PSBicGZfc2tfbG9va3VwX2Fzc2lnbixcbm5ldC9jb3JlL2ZpbHRlci5jLTExODQ1LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExODUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTM6c2tfbG9va3VwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg1NC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NTgtXHRjYXNlIEJQRl9GVU5DX3NrX2Fzc2lnbjpcbm5ldC9jb3JlL2ZpbHRlci5jOjExODU5Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2xvb2t1cF9hc3NpZ25fcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2MC1cdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2Ni1cbm5ldC9jb3JlL2ZpbHRlci5jOjExODY3OnN0YXRpYyBib29sIHNrX2xvb2t1cF9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2OC1cdFx0XHRcdCAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzEte1xubmV0L2NvcmUvZmlsdGVyLmM6MTE4NzI6XHRpZiAob2ZmIFx1MDAzYyAwIHx8IG9mZiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCkpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg3My1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODc5LVx0c3dpdGNoIChvZmYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExODgwOlx0Y2FzZSBicGZfY3R4X3JhbmdlX3B0cihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgc2spOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE4ODEtXHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fU09DS0VUX09SX05VTEw7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4ODMtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NDpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgZmFtaWx5KTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg1Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NjpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNCk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NzpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg4Olx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODk6XHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA2WzBdLCBsb2NhbF9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTA6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX3BvcnQpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTE6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGluZ3Jlc3NfaWZpbmRleCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTg5Mi1cdFx0YnBmX2N0eF9yZWNvcmRfZmllbGRfc2l6ZShpbmZvLCBzaXplb2YoX191MzIpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg5NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExODk1Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTg5Ni1cdFx0LyogQWxsb3cgNC1ieXRlIGFjY2VzcyB0byAyLWJ5dGUgZmllbGQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkwMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTAyOlx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpIC4uLlxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MDM6XHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDQpIC0gMTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTA0LVx0XHQvKiBBbGxvdyBhY2Nlc3MgdG8gemVybyBwYWRkaW5nIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTItXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkxMzpzdGF0aWMgdTMyIHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTE0LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnNpLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTIxLVx0c3dpdGNoIChzaS1cdTAwM2VvZmYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTIyOlx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgc2spOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjMtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9TSVpFT0Yodm9pZCAqKSwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTI0Olx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybiwgc2VsZWN0ZWRfc2spKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTI1LVx0XHRicmVhaztcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTI2LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5Mjc6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjgtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5Mjk6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzAtXHRcdFx0XHRcdFx0ICAgICBmYW1pbHksIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzItXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkzMzpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHByb3RvY29sKTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTM0LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTM1Olx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTM2LVx0XHRcdFx0XHRcdCAgICAgcHJvdG9jb2wsIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzgtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkzOTpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDQpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDAtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDE6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDItXHRcdFx0XHRcdFx0ICAgICB2NC5zYWRkciwgNCwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTQ1Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ2LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfVywgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTQ3Olx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ4LVx0XHRcdFx0XHRcdCAgICAgdjQuZGFkZHIsIDQsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk1MTpcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTItXHRcdFx0XHRyZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKToge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTU1LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTY6XHRcdG9mZiAtPSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNlswXSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Ny1cdFx0b2ZmICYjNDM7PSBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgaW42X2FkZHIsIHM2X2FkZHIzMlswXSwgNCwgdGFyZ2V0X3NpemUpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTgtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9TSVpFT0Yodm9pZCAqKSwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTU5Olx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2VybiwgdjYuc2FkZHIpKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTYwLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBzaS1cdTAwM2Vkc3RfcmVnLCAwLCAxKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2Ni1cdH1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTY3Olx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2OC1cdFx0XHRcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTcxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzI6XHRcdG9mZiAtPSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA2WzBdKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTczLVx0XHRvZmYgJiM0Mzs9IGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBpbjZfYWRkciwgczZfYWRkcjMyWzBdLCA0LCB0YXJnZXRfc2l6ZSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk3NC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzU6XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5kYWRkcikpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzYtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHNpLVx1MDAzZWRzdF9yZWcsIDAsIDEpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTgyLVx0fVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODM6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk4NC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0gsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4NTpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk4Ni1cdFx0XHRcdFx0XHQgICAgIHNwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg4LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODk6XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5MC1cdFx0KnRhcmdldF9zaXplID0gMjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5My1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTk0Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5NS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0gsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk5NjpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5Ny1cdFx0XHRcdFx0XHQgICAgIGRwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTk5LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMDA6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBpbmdyZXNzX2lmaW5kZXgpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMDEtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMDI6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMDMtXHRcdFx0XHRcdFx0ICAgICBpbmdyZXNzX2lmaW5kZXgsIDQsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMDktXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxMDpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2xvb2t1cF9wcm9nX29wcyA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDExOlx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTItfTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDEzLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTQ6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc2tfbG9va3VwX3ZlcmlmaWVyX29wcyA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE1Olx0LmdldF9mdW5jX3Byb3RvXHRcdD0gc2tfbG9va3VwX2Z1bmNfcHJvdG8sXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxNjpcdC5pc192YWxpZF9hY2Nlc3NcdD0gc2tfbG9va3VwX2lzX3ZhbGlkX2FjY2Vzcyxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE3Olx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBza19sb29rdXBfY29udmVydF9jdHhfYWNjZXNzLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTgtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ5NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjb3BlIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIHByZXR0eSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc29ja2V0IGxvb2t1cCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBgc2tfbG9va3VwYCBhbmQgYGJwZl9za19sb29rdXBfZnVsbF9za2AgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb29rdXAgbG9naWMgbGl2ZXMsIGFuZCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1bHRpbWF0ZWx5IGNhbGxlZCBieSB0aGUgQlBGLWV4cG9zZWQgaGVscGVyczogYF9fYnBmX3NrX2xvb2t1cGAgYW5kIGBicGZfc2tfbG9va3VwYC4gVGhlc2UgYXJlLCBpbiB0dXJuLCBjYWxsZWQgYnkgYWxsIHRob3NlIEJQRiBoZWxwZXJzIHdlIHVzZSBmb3IgZmluZGluZyBzb2NrZXRzIGxpa2UgYGJwZl9za19sb29rdXBfdGNwYCwgYGJwZl9za19sb29rdXBfdWRwYCwgYW5kIHRoZSBvdGhlcnMgdXNlZCBmb3IgdGMgYW5kIHhkcCwgYXMgd2VsbCBhcyB0aGUgc29ja2V0IGFkZHJlc3MgdmVyc2lvbnMuIEFuZCBsZXQmIzM5O3Mgbm90IGZvcmdldCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBicGZfc2tfcmVsZWFzZWAuIFRoaXMgaXMgYWxsIHN1Z2dlc3RpbmcgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgQlBGIGludGVyYWN0cyB3aXRoIHNvY2tldCBsb29rdXBzIGFuZCBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIEl0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSwgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIG9uIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4KClRoZW4gSSBzZWUgaXQgYWxzbyB0b3VjaGVzIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGF0JiMzOTtzIHRoZSBzb2NrZXQgbWFwIGFuZCBzb2NrZXQgaGFzaCBtYXAgY29kZS4gRGVmaW5pdGVseSBnb2luZyB0byBjaGVjayB0aGF0IGFyZWEuIE5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0L2NvcmUvc29ja19tYXAuY2AgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB0d2Vha2VkIGFuZCB3aGF0IGl0IG1lYW5zIGZvciBob3cgQlBGIGludGVyYWN0cyB3aXRoIHRoZXNlIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF9sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9MzcyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3Ni1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzgte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg3LVxubmV0L2NvcmUvc29ja19tYXAuYzozODg6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4OS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zOTEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM5MjpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkzLVx0aWYgKHNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk3LVxubmV0L2NvcmUvc29ja19tYXAuYzozOTg6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0zOTkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA0LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDU6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQwNi1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NDU9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02NTItXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1MzpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTY1NC1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3Mz1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4MC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgxOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjgyLVx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzIxPXN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI1LVxubmV0L2NvcmUvc29ja19tYXAuYzo3MjY6XHRpbmZvLVx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVx1MDAzZW1hcCwgaW5mby1cdTAwM2VpbmRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNy1cbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgyOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODMzLVx0Lm1hcF9nZXRfbmV4dF9rZXlcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzQ6XHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM1LVx0Lm1hcF91cGRhdGVfZWxlbVx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM2LVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM3Olx0Lm1hcF9sb29rdXBfZWxlbVx0PSBzb2NrX21hcF9sb29rdXAsXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzOC1cdC5tYXBfcmVsZWFzZV91cmVmXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0IE1hcCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBoaXR0aW5nIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgYG1hcF9sb29rdXBfZWxlbWAgb3BlcmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgYW5kIGBCUEZfTUFQX1RZUEVfU09DS0hBU0hgLiAgR2l2ZW4gbXkgZXhwZXJ0aXNlLCB0aGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaG93IHNvY2tldHMgYXJlIGJlaW5nIG1hbmFnZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrIGF0IHRoZSBjb3JlIGxldmVsLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgYW5kIGJlaGF2aW9yIG9mIGFueSBzb2NrZXQtcmVsYXRlZCBCUEYgcHJvZ3JhbS4gSXQmIzM5O3MgdGhlIHBsdW1iaW5nIHRoYXQgbWFrZXMgZXZlcnl0aGluZyB3b3JrLgoKSSBzZWUgdGhhdCBpdCBhbHNvIG1vZGlmaWVzIGBza19zZWxlY3RfcmV1c2Vwb3J0YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCBsaWtlbHkgYWZmZWN0cyBob3cgcmV1c2Vwb3J0IHNvY2tldHMgYXJlIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVzZSBtYXBzLiBBIGNoYW5nZSB0aGVyZSB1c3VhbGx5IGluZGljYXRlcyBpbXByb3ZlbWVudHMgb3IgdHdlYWtzIGluIGhvdyB0aGUga2VybmVsIHBpY2tzIHRoZSBjb3JyZWN0IHNvY2tldCB3aGVuIG11bHRpcGxlIHNvY2tldHMgYXJlIGJvdW5kIHRvIHRoZSBzYW1lIHBvcnQuCgpNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIGBzb2NrX2hhc2hfbG9va3VwYCBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgbG9va3VwIHByb2Nlc3MgZm9yIHNvY2tldHMgYm91bmQgdG8gdGhlc2UgaGFzaCBtYXBzIGlzIGNoYW5naW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfaGFzaF9sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9ODc4PXN0YXRpYyBzdHJ1Y3QgYnBmX3NodGFiX2VsZW0gKlxubmV0L2NvcmUvc29ja19tYXAuYzo4Nzk6c29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgdTMyIGhhc2gsIHZvaWQgKmtleSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODgwLVx0XHRcdCAgdTMyIGtleV9zaXplKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODkyLVxubmV0L2NvcmUvc29ja19tYXAuYzo4OTM6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTg5NC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05MDMtXHRidWNrZXQgPSBzb2NrX2hhc2hfc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTA0Olx0ZWxlbSA9IHNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoXHUwMDI2YnVja2V0LVx1MDAzZWhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xubmV0L2NvcmUvc29ja19tYXAuYy05MDUtXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz05MTY9c3RhdGljIHZvaWQgc29ja19oYXNoX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTMwLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTMxOlx0ZWxlbV9wcm9iZSA9IHNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoXHUwMDI2YnVja2V0LVx1MDAzZWhlYWQsIGVsZW0tXHUwMDNlaGFzaCxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTMyLVx0XHRcdFx0XHQgICAgICAgZWxlbS1cdTAwM2VrZXksIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz05NDE9c3RhdGljIGxvbmcgc29ja19oYXNoX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTk1Mi1cdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjk1MzpcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFx1MDAyNmJ1Y2tldC1cdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTU0LVx0aWYgKGVsZW0pIHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTk5MT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMjAtXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMDIxOlx0ZWxlbSA9IHNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoXHUwMDI2YnVja2V0LVx1MDAzZWhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMDIyLVx0aWYgKGVsZW0gXHUwMDI2XHUwMDI2IGZsYWdzID09IEJQRl9OT0VYSVNUKSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMDU2PXN0YXRpYyBpbnQgc29ja19oYXNoX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDY4LVx0aGVhZCA9IFx1MDAyNnNvY2tfaGFzaF9zZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpLVx1MDAzZWhlYWQ7XG5uZXQvY29yZS9zb2NrX21hcC5jOjEwNjk6XHRlbGVtID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA3MC1cdGlmICghZWxlbSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTExNDQ9c3RhdGljIHZvaWQgc29ja19oYXNoX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExOTYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjExOTc6c3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXBfc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE5OC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjAzLVxubmV0L2NvcmUvc29ja19tYXAuYzoxMjA0Olx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMDUtXHRpZiAoIXNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxMS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIxMjpzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMTMte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIxNjpcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMjE3LVx0aWYgKHNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTI0OT1CUEZfQ0FMTF80KGJwZl9za19yZWRpcmVjdF9oYXNoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjU2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMjU3Olx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNTgtXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMjc3PUJQRl9DQUxMXzQoYnBmX21zZ19yZWRpcmVjdF9oYXNoLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyODQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyODU6XHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI4Ni1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE0NDM9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfaGFzaF9vcHMgPSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDQ5LVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX2hhc2hfZGVsZXRlX2VsZW0sXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTA6XHQubWFwX2xvb2t1cF9lbGVtXHQ9IHNvY2tfaGFzaF9sb29rdXAsXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTE6XHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19oYXNoX2xvb2t1cF9zeXMsXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTItXHQubWFwX3JlbGVhc2VfdXJlZlx0PSBzb2NrX2hhc2hfcmVsZWFzZV9wcm9ncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA0NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiBlY29zeXN0ZW0uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdHdlYWtpbmcgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCwgd2hpY2gsIGFzIHlvdSBrbm93LCBhcmUgY3JpdGljYWwgZm9yIHRoZSBgbWFwX2xvb2t1cF9lbGVtYCBvcGVyYXRpb25zIGZvciBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCBgQlBGX01BUF9UWVBFX1NPQ0tIQVNIYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpbXBhY3Qgb24gaG93IHdlIGludGVyYWN0IHdpdGggYW5kIG1hbmFnZSBzb2NrZXRzIHVzaW5nIEJQRiBtYXBzLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBjaGFuZ2VzIHRvIGBza19zZWxlY3RfcmV1c2Vwb3J0YCwgd2hpY2ggaXMgYSBCUEYgaGVscGVyLiBUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgYmVjYXVzZSBhbnkgY2hhbmdlIGluIGhlbHBlcnMgaGFzIHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgQlBGIHByb2dyYW1zLgoKVGhlIGF1dGhvciBtZW50aW9ucyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3M6IGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVGAuIEl0JiMzOTtzIHdvcnRoIGNvbnNpZGVyaW5nIHdoZXRoZXIgYENPTkZJR19CUEZfU1lTQ0FMTGAgKmFsb25lKiBpcyBzdWZmaWNpZW50IGZvciB0aGUgY2hhbmdlcy4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIEkga25vdyB0aGF0IGBuZXQvY29yZS9zb2NrX21hcC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGFuZCB0aGF0IGZpbGUgaXMgd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZS4gQnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayBieSBwb2tpbmcgYXJvdW5kIGluIGBuZXQvY29yZS9NYWtlZmlsZWAganVzdCB0byBiZSBjZXJ0YWluIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfTkVUYCB0aGF0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gQlBGLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG5uZXQvY29yZS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG5uZXQvY29yZS9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc2tfc3RvcmFnZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjIyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQlBGIGFuZCBSZXVzZXBvcnQgQ29tcGF0aWJpbGl0eSoqCgpBbHJpZ2h0LCB0aGUgcmVxdWlyZW1lbnQgZm9yIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4g4oCTIHRoYXQmIzM5O3MgZnVuZGFtZW50YWwgZm9yIGFueSBzZXJpb3VzIEJQRiBhcHBsaWNhdGlvbi4gQnV0IG5vdyBJIG5lZWQgdG8gZGl2ZSBhIGxpdHRsZSBkZWVwZXIsIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCBtZXNoZXMgd2l0aCBzb21lIG90aGVyIGFzcGVjdHMgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgYHNrX3NlbGVjdF9yZXVzZXBvcnRgLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgaGFzIHRvIGJlIGluIHBsYXkgaGVyZSwgc2luY2UgdGhpcyBpcyBhbGwgYWJvdXQgc29ja2V0LWxldmVsIHN0dWZmLiBMZXQgbWUgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCBhZ2Fpbi4uLiBhaCwgcmlnaHQsIGl0JiMzOTtzIHNpdHRpbmcgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCBmaWxlIGxvY2F0aW9uIG1ha2VzIHNlbnNlLiBUaGlzIGlzIGdvb2QsIGl0JiMzOTtzIGEgY3JpdGljYWwgcGF0aCB0byBleHBsb3JlLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBjb25maXJtIGFzc3VtcHRpb25zIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBvZiB0aG9zZSB0d28gZWxlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3NlbGVjdF9yZXVzZXBvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMTU1Nj1zdHJ1Y3Qgc29jayAqYnBmX3J1bl9za19yZXVzZXBvcnQoc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExNTcyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE1NzM6QlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTc0LVx0ICAgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB2b2lkICosIGtleSwgdTMyLCBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTYxOC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNjE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfc2VsZWN0X3JldXNlcG9ydF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjIwOlx0LmZ1bmMgICAgICAgICAgID0gc2tfc2VsZWN0X3JldXNlcG9ydCxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjIxLVx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE2NjY9c2tfcmV1c2Vwb3J0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExNjY5LVx0c3dpdGNoIChmdW5jX2lkKSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMTY3MDpcdGNhc2UgQlBGX0ZVTkNfc2tfc2VsZWN0X3JldXNlcG9ydDpcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjcxOlx0XHRyZXR1cm4gXHUwMDI2c2tfc2VsZWN0X3JldXNlcG9ydF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjcyLVx0Y2FzZSBCUEZfRlVOQ19za2JfbG9hZF9ieXRlczpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0tfUkVVU0VQT1JUIEJQRiBIZWxwZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBza19zZWxlY3RfcmV1c2Vwb3J0YCDigJMgdGhhdCYjMzk7cyB0aGUgQlBGIGhlbHBlciBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVGAgcHJvZ3JhbXMuIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgdGhpcyB0byBmdW5jdGlvbiBjb3JyZWN0bHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBSaWdodCBhd2F5LCBJIHNlZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19ORVRgIGFyZSBjcnVjaWFsLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHNvdXJjZSBhbmQgY3Jvc3MgcmVmZXJlbmNlIHRoZSBjb25maWcgb3B0aW9ucywgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2UgZnJvbSBsb29raW5nIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYC4gR2l2ZW4gdGhhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIGdldHMgY29tcGlsZWQgb25seSB3aGVuIGBDT05GSUdfTkVUYCBpcyBzZXQsIHRoYXQmIzM5O3MgYSBnb29kIHNpZ24uIEZ1cnRoZXJtb3JlLCBJIHNlZSB0aGF0IHRoZSBgc2tfbG9va3VwYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGAjaWZkZWYgQ09ORklHX0lORVRgLiBUaGlzIGltcGxpZXMgdGhhdCBgc2tfbG9va3VwYCBhbmQsIHBvdGVudGlhbGx5LCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgYXJlIHRpZWQgaW50byB0aGUgYnJvYWRlciBUQ1AvSVAgc3RhY2sgY29uZmlndXJhdGlvbiwgd2hpY2ggaXNuJiMzOTt0IGVudGlyZWx5IHN1cnByaXNpbmcgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBzb2NrZXQtYmFzZWQgcmV1c2Vwb3J0IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9Njk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5ODktI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo2OTkwOnN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5OTEtXHRcdFx0ICAgICAgaW50IGRpZiwgaW50IHNkaWYsIHU4IGZhbWlseSwgdTggcHJvdG8pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzA0ND1fX2JwZl9za2NfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA3MC1cdFx0bmV0ID0gY2FsbGVyX25ldDtcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNzE6XHRcdHNrID0gc2tfbG9va3VwKG5ldCwgdHVwbGUsIGlmaW5kZXgsIHNkaWYsIGZhbWlseSwgcHJvdG8pO1xubmV0L2NvcmUvZmlsdGVyLmMtNzA3Mi1cdH0gZWxzZSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA3NS1cdFx0XHRnb3RvIG91dDtcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNzY6XHRcdHNrID0gc2tfbG9va3VwKG5ldCwgdHVwbGUsIGlmaW5kZXgsIHNkaWYsIGZhbWlseSwgcHJvdG8pO1xubmV0L2NvcmUvZmlsdGVyLmMtNzA3Ny1cdFx0cHV0X25ldChuZXQpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwODQ9c3RhdGljIHN0cnVjdCBzb2NrICpcbm5ldC9jb3JlL2ZpbHRlci5jOjcwODU6YnBmX3NrX2xvb2t1cF9mdWxsX3NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL2ZpbHRlci5jLTcwODYte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcxMDk9c3RhdGljIHN0cnVjdCBzb2NrICpcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTA6X19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXG5uZXQvY29yZS9maWx0ZXIuYy03MTExLVx0XHRzdHJ1Y3QgbmV0ICpjYWxsZXJfbmV0LCB1MzIgaWZpbmRleCwgdTggcHJvdG8sIHU2NCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTE4LVx0aWYgKHNrKVxubmV0L2NvcmUvZmlsdGVyLmM6NzExOTpcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xubmV0L2NvcmUvZmlsdGVyLmMtNzEyMC1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTQzPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXG5uZXQvY29yZS9maWx0ZXIuYzo3MTQ0OmJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNDUtXHQgICAgICB1OCBwcm90bywgdTY0IG5ldG5zX2lkLCB1NjQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE1MC1cdGlmIChzaylcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNTE6XHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNTItXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzE2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTc0LVxubmV0L2NvcmUvZmlsdGVyLmM6NzE3NTpCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03MTc2LVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzcte1xubmV0L2NvcmUvZmlsdGVyLmM6NzE3ODpcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgSVBQUk9UT19UQ1AsXG5uZXQvY29yZS9maWx0ZXIuYy03MTc5LVx0XHRcdFx0XHQgICAgbmV0bnNfaWQsIGZsYWdzKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTgxLVxubmV0L2NvcmUvZmlsdGVyLmM6NzE4MjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzE4MzpcdC5mdW5jXHRcdD0gYnBmX3NrX2xvb2t1cF90Y3AsXG5uZXQvY29yZS9maWx0ZXIuYy03MTg0LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTMtXG5uZXQvY29yZS9maWx0ZXIuYzo3MTk0OkJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBza19idWZmICosIHNrYixcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTUtXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxubmV0L2NvcmUvZmlsdGVyLmMtNzE5Ni17XG5uZXQvY29yZS9maWx0ZXIuYzo3MTk3Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWJwZl9za19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBJUFBST1RPX1VEUCxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTgtXHRcdFx0XHRcdCAgICBuZXRuc19pZCwgZmxhZ3MpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyMDAtXG5uZXQvY29yZS9maWx0ZXIuYzo3MjAxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzo3MjAyOlx0LmZ1bmNcdFx0PSBicGZfc2tfbG9va3VwX3VkcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyMDMtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzIyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjM2LVxubmV0L2NvcmUvZmlsdGVyLmM6NzIzNzpCUEZfQ0FMTF81KGJwZl90Y19za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03MjM4LVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjQzLVxubmV0L2NvcmUvZmlsdGVyLmM6NzI0NDpcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxubmV0L2NvcmUvZmlsdGVyLmMtNzI0NS1cdFx0XHRcdFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyNDgtXG5uZXQvY29yZS9maWx0ZXIuYzo3MjQ5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzo3MjUwOlx0LmZ1bmNcdFx0PSBicGZfdGNfc2tfbG9va3VwX3RjcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNTEtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI2MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjE6QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3VkcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtNzI2Mi1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI2Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjg6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjktXHRcdFx0XHRcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjcyLVxubmV0L2NvcmUvZmlsdGVyLmM6NzI3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzI3NDpcdC5mdW5jXHRcdD0gYnBmX3RjX3NrX2xvb2t1cF91ZHAsXG5uZXQvY29yZS9maWx0ZXIuYy03Mjc1LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcyOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfcmVsZWFzZV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03Mjk4LVxubmV0L2NvcmUvZmlsdGVyLmM6NzI5OTpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3VkcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMDAtXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1MzIsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczMDUtXG5uZXQvY29yZS9maWx0ZXIuYzo3MzA2Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxubmV0L2NvcmUvZmlsdGVyLmMtNzMwNy1cdFx0XHRcdFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19VRFAsIG5ldG5zX2lkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczMTAtXG5uZXQvY29yZS9maWx0ZXIuYzo3MzExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdWRwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzMxMjpcdC5mdW5jICAgICAgICAgICA9IGJwZl94ZHBfc2tfbG9va3VwX3VkcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMTMtXHQuZ3BsX29ubHkgICAgICAgPSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzQ2LVxubmV0L2NvcmUvZmlsdGVyLmM6NzM0NzpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3RjcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNDgtXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1MzIsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczNTMtXG5uZXQvY29yZS9maWx0ZXIuYzo3MzU0Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxubmV0L2NvcmUvZmlsdGVyLmMtNzM1NS1cdFx0XHRcdFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczNTgtXG5uZXQvY29yZS9maWx0ZXIuYzo3MzU5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzM2MDpcdC5mdW5jICAgICAgICAgICA9IGJwZl94ZHBfc2tfbG9va3VwX3RjcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNjEtXHQuZ3BsX29ubHkgICAgICAgPSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzkwLVxubmV0L2NvcmUvZmlsdGVyLmM6NzM5MTpCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy03MzkyLVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTMte1xubmV0L2NvcmUvZmlsdGVyLmM6NzM5NDpcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbixcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTUtXHRcdFx0XHRcdCAgICAgIHNvY2tfbmV0KGN0eC1cdTAwM2VzayksIDAsIElQUFJPVE9fVENQLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczOTgtXG5uZXQvY29yZS9maWx0ZXIuYzo3Mzk5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzQwMDpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwLFxubmV0L2NvcmUvZmlsdGVyLmMtNzQwMS1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03NDA5LVxubmV0L2NvcmUvZmlsdGVyLmM6NzQxMDpCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy03NDExLVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTIte1xubmV0L2NvcmUvZmlsdGVyLmM6NzQxMzpcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbixcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTQtXHRcdFx0XHRcdCAgICAgIHNvY2tfbmV0KGN0eC1cdTAwM2VzayksIDAsIElQUFJPVE9fVURQLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTctXG5uZXQvY29yZS9maWx0ZXIuYzo3NDE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzQxOTpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwLFxubmV0L2NvcmUvZmlsdGVyLmMtNzQyMC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04MzAwPXNvY2tfYWRkcl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjMtI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo4MzI0Olx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNTpcdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjgzMjY6XHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XG5uZXQvY29yZS9maWx0ZXIuYzo4MzI3Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODMyOC1cdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NDEzPWNnX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg0NDAtI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo4NDQxOlx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MjpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MzpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDQ6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg0NDUtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ2Mj10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODU1OS0jaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jOjg1NjA6XHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG5uZXQvY29yZS9maWx0ZXIuYzo4NTYxOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NTYyOlx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MzpcdFx0cmV0dXJuIFx1MDAyNmJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODU2NC1cdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NTk5PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg2MjgtI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo4NjI5Olx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMDpcdFx0cmV0dXJuIFx1MDAyNmJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg2MzE6XHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG5uZXQvY29yZS9maWx0ZXIuYzo4NjMyOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODYzMy1cdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NzU2PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODEtI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo4NzgyOlx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MzpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODc4NDpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODU6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODYtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE4MDg9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19yZXVzZXBvcnRfcHJvZ19vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTgxMTpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShicGZfc2tfbG9va3VwX2VuYWJsZWQpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTI6RVhQT1JUX1NZTUJPTChicGZfc2tfbG9va3VwX2VuYWJsZWQpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTMtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTgxNDpCUEZfQ0FMTF8zKGJwZl9za19sb29rdXBfYXNzaWduLCBzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuICosIGN0eCxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODE1LVx0ICAgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NDItXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg0MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE4NDQ6XHQuZnVuY1x0XHQ9IGJwZl9za19sb29rdXBfYXNzaWduLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NDUtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE4NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg1Mzpza19sb29rdXBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL2ZpbHRlci5jLTExODU0LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg1OC1cdGNhc2UgQlBGX0ZVTkNfc2tfYXNzaWduOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTk6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTExODYwLVx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODY2LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE4Njc6c3RhdGljIGJvb2wgc2tfbG9va3VwX2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODY4LVx0XHRcdFx0ICAgICAgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg3MS17XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg3MjpcdGlmIChvZmYgXHUwMDNjIDAgfHwgb2ZmIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBicGZfc2tfbG9va3VwKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTExODczLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzktXHRzd2l0Y2ggKG9mZikge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODA6XHRjYXNlIGJwZl9jdHhfcmFuZ2VfcHRyKHN0cnVjdCBicGZfc2tfbG9va3VwLCBzayk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTg4MS1cdFx0aW5mby1cdTAwM2VyZWdfdHlwZSA9IFBUUl9UT19TT0NLRVRfT1JfTlVMTDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg4My1cbm5ldC9jb3JlL2ZpbHRlci5jOjExODg0Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODU6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIHByb3RvY29sKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg2Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA0KTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg3Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDQpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODg6XHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNlswXSwgcmVtb3RlX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4OTpcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0sIGxvY2FsX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5MDpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5MTpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgaW5ncmVzc19pZmluZGV4KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExODkyLVx0XHRicGZfY3R4X3JlY29yZF9maWVsZF9zaXplKGluZm8sIHNpemVvZihfX3UzMikpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODk0LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTU6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExODk2LVx0XHQvKiBBbGxvdyA0LWJ5dGUgYWNjZXNzIHRvIDItYnl0ZSBmaWVsZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTAxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MDI6XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCkgLi4uXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkwMzpcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNCkgLSAxOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MDQtXHRcdC8qIEFsbG93IGFjY2VzcyB0byB6ZXJvIHBhZGRpbmcgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkxMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTEzOnN0YXRpYyB1MzIgc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTQtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqc2ksXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjEtXHRzd2l0Y2ggKHNpLVx1MDAzZW9mZikge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE5MjI6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBzayk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyMy1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MjQ6XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCBzZWxlY3RlZF9zaykpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjUtXHRcdGJyZWFrO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjYtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkyNzpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIGZhbWlseSk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyOC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0gsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkyOTpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzMC1cdFx0XHRcdFx0XHQgICAgIGZhbWlseSwgMiwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTMzOlx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcHJvdG9jb2wpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzQtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MzU6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzYtXHRcdFx0XHRcdFx0ICAgICBwcm90b2NvbCwgMiwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzOC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTM5Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0MC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk0MTpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Mi1cdFx0XHRcdFx0XHQgICAgIHY0LnNhZGRyLCA0LCB0YXJnZXRfc2l6ZSkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ0LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDU6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDQpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDYtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDc6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDgtXHRcdFx0XHRcdFx0ICAgICB2NC5kYWRkciwgNCwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTUxOlx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Mi1cdFx0XHRcdHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOiB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk1NjpcdFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA2WzBdKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTU3LVx0XHRvZmYgJiM0Mzs9IGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBpbjZfYWRkciwgczZfYWRkcjMyWzBdLCA0LCB0YXJnZXRfc2l6ZSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1OC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTk6XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5zYWRkcikpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5NjAtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHNpLVx1MDAzZWRzdF9yZWcsIDAsIDEpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTY2LVx0fVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5Njc6XHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTY4LVx0XHRcdFx0bG9jYWxfaXA2WzBdLCBsb2NhbF9pcDZbM10pOiB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzEtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3MjpcdFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0pO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzMtXHRcdG9mZiAmIzQzOz0gYnBmX3RhcmdldF9vZmYoc3RydWN0IGluNl9hZGRyLCBzNl9hZGRyMzJbMF0sIDQsIHRhcmdldF9zaXplKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTc0LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHZvaWQgKiksIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NTpcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sIHY2LmRhZGRyKSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk3Ni1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgc2ktXHUwMDNlZHN0X3JlZywgMCwgMSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODItXHR9XG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4MzpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg0LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg1Olx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg2LVx0XHRcdFx0XHRcdCAgICAgc3BvcnQsIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODgtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4OTpcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTkwLVx0XHQqdGFyZ2V0X3NpemUgPSAyO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTkzLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5OTQ6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9wb3J0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTk1LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTk2Olx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTk3LVx0XHRcdFx0XHRcdCAgICAgZHBvcnQsIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTktXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAwMDpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIGluZ3Jlc3NfaWZpbmRleCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMjAwMS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAwMjpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAwMy1cdFx0XHRcdFx0XHQgICAgIGluZ3Jlc3NfaWZpbmRleCwgNCwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAwOS1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDEwOmNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfbG9va3VwX3Byb2dfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTE6XHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxMi19O1xubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTMtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxNDpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBza19sb29rdXBfdmVyaWZpZXJfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTU6XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBza19sb29rdXBfZnVuY19wcm90byxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE2Olx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBza19sb29rdXBfaXNfdmFsaWRfYWNjZXNzLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTc6XHQuY29udmVydF9jdHhfYWNjZXNzXHQ9IHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxOC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU1NgoJCQkJCQkJb3V0cHV0OiAxOTMKCQkJCQkJCXRob3VnaHRzOiA3NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBTb2NrZXQgTG9va3VwIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBDT05GSUdfSU5FVGAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBza19sb29rdXBgLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlczogYGJwZl9za19sb29rdXBfdGNwYCwgYGJwZl9za19sb29rdXBfdWRwYCwgYGJwZl90Y19za19sb29rdXBfdGNwYCwgYGJwZl90Y19za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAsIGBicGZfeGRwX3NrX2xvb2t1cF91ZHBgLCBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCwgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcGAsIGFuZCBgYnBmX3NrX3JlbGVhc2VgLiBUaGVzZSBhcmUgYWxsIEJQRiBoZWxwZXJzLCBzbyBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBzeW1ib2xzLiBJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBgc2tfbG9va3VwYCwgYGJwZl9za19sb29rdXBfZnVsbF9za2AsIGBfX2JwZl9za19sb29rdXBgLCBgYnBmX3NrX2xvb2t1cGAsIGBicGZfc2tfcmVsZWFzZWAsIGBza19zZWxlY3RfcmV1c2Vwb3J0YCwgYHNvY2tfbWFwX2xvb2t1cGAsIGFuZCBgc29ja19oYXNoX2xvb2t1cGAuCgpIYW5nIG9uLCBgc2tfbG9va3VwYCBpcyBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgYHNrX2xvb2t1cGAgaW1wbGVtZW50YXRpb25zIGluIHRoZSBrZXJuZWwuLi4geWVwLCB0aGVyZSBhcmUgcXVpdGUgYSBmZXcuIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgIG1pZ2h0IGJlIGJldHRlci4gQW5kIGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAgYXJlIGFsc28gc3RhdGljIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIGBicGZfc2tfcmVsZWFzZWAgaXMgYSBCUEYgaGVscGVyLCBhbmQgYHNrX3NlbGVjdF9yZXVzZXBvcnRgIGlzIGFsc28gYSBCUEYgaGVscGVyLiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBzdGF0aWMgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLgoKT2theSwgbGV0JiMzOTtzIHNlZSBpZiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBzdWZmaWNpZW50bHkgdW5pcXVlIHRvIHJlcHJlc2VudCB0aGUgc29ja21hcCBhc3BlY3Qgb2YgdGhpcyBwYXRjaD8gR29vZCwgdGhleSBhcmUuIEFuZCBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYD8gWWVzLCBpdCBhcHBlYXJzIHRvIGJlIGEgdW5pcXVlIGZ1bmN0aW9uLCBwcm9iYWJseSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgdmVyeSBwYXRjaC4gQW5kIHdoYXQgYWJvdXQgYHNrX3NlbGVjdF9yZXVzZXBvcnRgPyBZZXAsIGl0JiMzOTtzIGEgdW5pcXVlIEJQRiBoZWxwZXIuCgpTbywgdGhlIGRlZmluaXRpdmUgZm9jdXMgc3ltYm9scyBmb3IgYW5hbHlzaXMgYXJlOgoKKiAgIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgCiogICBgYnBmX3NrX3JlbGVhc2VgCiogICBgc2tfc2VsZWN0X3JldXNlcG9ydGAKKiAgIGBzb2NrX21hcF9sb29rdXBgCiogICBgc29ja19oYXNoX2xvb2t1cGAKCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gc2VlaW5nOiBgQlBGX1NZU0NBTExgLCBgTkVUYCwgYW5kIGBJTkVUYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjay4uLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbm91Z2ggZm9yIGBzb2NrX21hcC5jYC4gYENPTkZJR19JTkVUYCBjb3ZlcnMgYHNrX2xvb2t1cGAgYW5kIHRoZSBCUEYgaGVscGVycyBpbiBgZmlsdGVyLmNgLiBBbmQgbmF0dXJhbGx5LCBgQ09ORklHX05FVGAgaXMgcmVxdWlyZWQgZm9yIG5ldHdvcmtpbmcuCgpMZXQgbWUgc3VtbWFyaXplIG15IHJlYXNvbmluZyBzdWNjaW5jdGx5OiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIHdpdGhpbiBCUEYgc29ja2V0IGxvb2t1cCBoZWxwZXJzIChgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYGJwZl9za19yZWxlYXNlYCksIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzb2NrbWFwIGxvb2t1cHMgKGBzb2NrX21hcF9sb29rdXBgLCBgc29ja19oYXNoX2xvb2t1cGApLiBJdCBhcHBlYXJzIHRvIGd1YXJhbnRlZSBjb3JyZWN0IHNvY2tldCByZWZlcmVuY2UgaGFuZGxpbmcgZHVyaW5nIGxvb2t1cHMgYW5kIHJlbGVhc2VzLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMsIHBvdGVudGlhbGx5IHJlYWNoZWQgdGhyb3VnaCBwcm9ncmFtcyBjYWxsaW5nIHRoZXNlIGhlbHBlcnMgb3IgaW50ZXJhY3Rpbmcgd2l0aCBzb2NrbWFwcy4KCk5vdywgbGV0JiMzOTtzIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za19sb29rdXBfZnVsbF9zayYjMzQ7LAogICAgJiMzNDticGZfc2tfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtza19zZWxlY3RfcmV1c2Vwb3J0JiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtzb2NrX2hhc2hfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgaW4gQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyAoZS5nLiwgYnBmX3NrX2xvb2t1cF9mdWxsX3NrLCBicGZfc2tfcmVsZWFzZSkgYW5kIHNvY2ttYXAgbG9va3VwIGZ1bmN0aW9ucyAoc29ja19tYXBfbG9va3VwLCBzb2NrX2hhc2hfbG9va3VwKS4gSXQgZW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIGlzIGFsd2F5cyB0YWtlbiBmb3Igc29ja2V0cyByZXR1cm5lZCBieSBsb29rdXBzIGFuZCBwcm9wZXJseSByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgdGhlc2UgaGVscGVycyBvciBpbnRlcmFjdGluZyB3aXRoIHNvY2ttYXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za19sb29rdXBfZnVsbF9zayYjMzQ7LAogICAgJiMzNDticGZfc2tfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtza19zZWxlY3RfcmV1c2Vwb3J0JiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtzb2NrX2hhc2hfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgaW4gQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyAoZS5nLiwgYnBmX3NrX2xvb2t1cF9mdWxsX3NrLCBicGZfc2tfcmVsZWFzZSkgYW5kIHNvY2ttYXAgbG9va3VwIGZ1bmN0aW9ucyAoc29ja19tYXBfbG9va3VwLCBzb2NrX2hhc2hfbG9va3VwKS4gSXQgZW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIGlzIGFsd2F5cyB0YWtlbiBmb3Igc29ja2V0cyByZXR1cm5lZCBieSBsb29rdXBzIGFuZCBwcm9wZXJseSByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgdGhlc2UgaGVscGVycyBvciBpbnRlcmFjdGluZyB3aXRoIHNvY2ttYXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjRUMTQ6MTU6MjMuNjgxMzQwNjgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzNjc2NzU0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za19sb29rdXBfZnVsbF9za1wiLFxuICAgIFwiYnBmX3NrX3JlbGVhc2VcIixcbiAgICBcInNrX3NlbGVjdF9yZXVzZXBvcnRcIixcbiAgICBcInNvY2tfbWFwX2xvb2t1cFwiLFxuICAgIFwic29ja19oYXNoX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgaW4gQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyAoZS5nLiwgYnBmX3NrX2xvb2t1cF9mdWxsX3NrLCBicGZfc2tfcmVsZWFzZSkgYW5kIHNvY2ttYXAgbG9va3VwIGZ1bmN0aW9ucyAoc29ja19tYXBfbG9va3VwLCBzb2NrX2hhc2hfbG9va3VwKS4gSXQgZW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIGlzIGFsd2F5cyB0YWtlbiBmb3Igc29ja2V0cyByZXR1cm5lZCBieSBsb29rdXBzIGFuZCBwcm9wZXJseSByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgdGhlc2UgaGVscGVycyBvciBpbnRlcmFjdGluZyB3aXRoIHNvY2ttYXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNToyMy42ODEzNDYwNDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NDg2NTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ1NGU1NjdlMGMxYTYyNmZhODI1ODBkZGU1ZDU5NGU4NzU1MGVkMjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTQ6MTU6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IGI0NDZhYThiZTVjMzc1Li40YmMwYjU5NjY4ZmFlNSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTcwMjcsNiArNzAyNywxMyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXFxuIFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiRm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcXFwiKTtcXG4gXFx0XFx0c2sgPSBOVUxMO1xcbiBcXHR9XFxuK1xcbitcXHQvKiBBbHdheXMgdGFrZSBhIHJlZmVyZW5jZSwgZXZlbiBpZiB0aGUgbG9va3VwIHNraXBwZWQgb25lO1xcbitcXHQgKiBicGZfc2tfcmVsZWFzZSgpIGFsd2F5cyBwdXRzIG9uZS5cXG4rXFx0ICovXFxuK1xcdGlmIChzayBcXHUwMDI2XFx1MDAyNiAhcmVmY291bnRlZCBcXHUwMDI2XFx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVmY250KSlcXG4rXFx0XFx0c2sgPSBOVUxMO1xcbitcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuIFxcbkBAIC03MDc0LDYgKzcwODEsMzEgQEAgX19icGZfc2tjX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxcbiBcXHRyZXR1cm4gc2s7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qgc29jayAqXFxuK2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xcbitcXG4rXFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gc2stXFx1MDAzZXJza19saXN0ZW5lciwgbWFrZSBzdXJlIHRoZSBvcmlnaW5hbFxcbitcXHQgKiBzayBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2syICE9IHNrKSB7XFxuK1xcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuK1xcdFxcdGlmICh1bmxpa2VseShzazIgXFx1MDAyNlxcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xcbitcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIkZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIHNrMiBpcyBSQ1UtZnJlZSwgYnV0IHRha2UgYSByZWZlcmVuY2UgYW55d2F5O1xcbitcXHRcXHQgKiBicGZfc2tfcmVsZWFzZSgpIHB1dHMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2syIFxcdTAwMjZcXHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrMi1cXHUwMDNlc2tfcmVmY250KSlcXG4rXFx0XFx0XFx0c2syID0gTlVMTDtcXG4rXFx0XFx0c2sgPSBzazI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaztcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBzb2NrICpcXG4gX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdFxcdHN0cnVjdCBuZXQgKmNhbGxlcl9uZXQsIHUzMiBpZmluZGV4LCB1OCBwcm90bywgdTY0IG5ldG5zX2lkLFxcbkBAIC03MDgzLDIyICs3MTE1LDggQEAgX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGlmaW5kZXgsIHByb3RvLCBuZXRuc19pZCwgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNkaWYpO1xcbiBcXG4tXFx0aWYgKHNrKSB7XFxuLVxcdFxcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcXG4tXFxuLVxcdFxcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXFx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xcbi1cXHRcXHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoc2syICE9IHNrKSB7XFxuLVxcdFxcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuLVxcdFxcdFxcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xcbi1cXHRcXHRcXHRpZiAodW5saWtlbHkoc2syIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzayA9IHNrMjtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdGlmIChzaylcXG4rXFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbiBcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuQEAgLTcxMjksMjIgKzcxNDcsOCBAQCBicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxcbiBcXHRcXHRcXHRcXHRcXHQgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKHNrKSB7XFxuLVxcdFxcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcXG4tXFxuLVxcdFxcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXFx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xcbi1cXHRcXHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoc2syICE9IHNrKSB7XFxuLVxcdFxcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuLVxcdFxcdFxcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xcbi1cXHRcXHRcXHRpZiAodW5saWtlbHkoc2syIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzayA9IHNrMjtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdGlmIChzaylcXG4rXFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbiBcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuQEAgLTcyODAsNyArNzI4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XFxuIFxcbiBCUEZfQ0FMTF8xKGJwZl9za19yZWxlYXNlLCBzdHJ1Y3Qgc29jayAqLCBzaylcXG4ge1xcbi1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2tfaXNfcmVmY291bnRlZChzaykpXFxuK1xcdGlmIChzaylcXG4gXFx0XFx0c29ja19nZW5fcHV0KHNrKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTE1NzIsMTEgKzExNTc2LDEzIEBAIEJQRl9DQUxMXzQoc2tfc2VsZWN0X3JldXNlcG9ydCwgc3RydWN0IHNrX3JldXNlcG9ydF9rZXJuICosIHJldXNlX2tlcm4sXFxuIFxcdGJvb2wgaXNfc29ja2FycmF5ID0gbWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkVVU0VQT1JUX1NPQ0tBUlJBWTtcXG4gXFx0c3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZTtcXG4gXFx0c3RydWN0IHNvY2sgKnNlbGVjdGVkX3NrO1xcbi1cXHRpbnQgZXJyO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdHNlbGVjdGVkX3NrID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxuIFxcdGlmICghc2VsZWN0ZWRfc2spXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRpZiAoIWlzX3NvY2thcnJheSlcXG4rXFx0XFx0c29ja19wdXQoc2VsZWN0ZWRfc2spO1xcbiBcXG4gXFx0cmV1c2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZWN0ZWRfc2stXFx1MDAzZXNrX3JldXNlcG9ydF9jYik7XFxuIFxcdGlmICghcmV1c2UpIHtcXG5AQCAtMTE2MDYsMTMgKzExNjEyLDcgQEAgQlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2VybixcXG4gXFx0fVxcbiBcXG4gXFx0cmV1c2Vfa2Vybi1cXHUwMDNlc2VsZWN0ZWRfc2sgPSBzZWxlY3RlZF9zaztcXG4tXFxuLVxcdHJldHVybiAwO1xcbiBlcnJvcjpcXG4tXFx0LyogTG9va3VwIGluIHNvY2tfbWFwIGNhbiByZXR1cm4gVENQIEVTVEFCTElTSEVEIHNvY2tldHMuICovXFxuLVxcdGlmIChza19pc19yZWZjb3VudGVkKHNlbGVjdGVkX3NrKSlcXG4tXFx0XFx0c29ja19wdXQoc2VsZWN0ZWRfc2spO1xcbi1cXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5pbmRleCA5ZWZiZDhjYTdkYjgzMi4uYWUxOGRjNGQ2MGY5MTUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5AQCAtMzkwLDEwICszOTAsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFx0c3RydWN0IHNvY2sgKnNrO1xcbiBcXG4gXFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbi1cXHRpZiAoIXNrKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFxcdTAwMjZcXHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrLVxcdTAwM2Vza19yZWZjbnQpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0aWYgKHNrKVxcbitcXHRcXHRzb2NrX2hvbGQoc2spO1xcbiBcXHRyZXR1cm4gc2s7XFxuIH1cXG4gXFxuQEAgLTEyMTYsMTAgKzEyMTQsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIFxcdHN0cnVjdCBzb2NrICpzaztcXG4gXFxuIFxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbi1cXHRpZiAoIXNrKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFxcdTAwMjZcXHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrLVxcdTAwM2Vza19yZWZjbnQpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0aWYgKHNrKVxcbitcXHRcXHRzb2NrX2hvbGQoc2spO1xcbiBcXHRyZXR1cm4gc2s7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjI0LjA2Njg0ODI4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5OTgyMTU5NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tfbG9va3VwX2Z1bGxfc2tcIixcbiAgICBcImJwZl9za19yZWxlYXNlXCIsXG4gICAgXCJza19zZWxlY3RfcmV1c2Vwb3J0XCIsXG4gICAgXCJzb2NrX21hcF9sb29rdXBcIixcbiAgICBcInNvY2tfaGFzaF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGluIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgKGUuZy4sIGJwZl9za19sb29rdXBfZnVsbF9zaywgYnBmX3NrX3JlbGVhc2UpIGFuZCBzb2NrbWFwIGxvb2t1cCBmdW5jdGlvbnMgKHNvY2tfbWFwX2xvb2t1cCwgc29ja19oYXNoX2xvb2t1cCkuIEl0IGVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBpcyBhbHdheXMgdGFrZW4gZm9yIHNvY2tldHMgcmV0dXJuZWQgYnkgbG9va3VwcyBhbmQgcHJvcGVybHkgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEJQRiBwcm9ncmFtcyBjYWxsaW5nIHRoZXNlIGhlbHBlcnMgb3IgaW50ZXJhY3Rpbmcgd2l0aCBzb2NrbWFwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTRlNTY3ZTBjMWE2MjZmYTgyNTgwZGRlNWQ1OTRlODc1NTBlZDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTQ6MTU6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCBiNDQ2YWE4YmU1YzM3NS4uNGJjMGI1OTY2OGZhZTUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC03MDI3LDYgKzcwMjcsMTMgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpza19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLFxuIFx0XHRXQVJOX09OQ0UoMSwgXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwiKTtcbiBcdFx0c2sgPSBOVUxMO1xuIFx0fVxuK1xuK1x0LyogQWx3YXlzIHRha2UgYSByZWZlcmVuY2UsIGV2ZW4gaWYgdGhlIGxvb2t1cCBza2lwcGVkIG9uZTtcbitcdCAqIGJwZl9za19yZWxlYXNlKCkgYWx3YXlzIHB1dHMgb25lLlxuK1x0ICovXG4rXHRpZiAoc2sgXHUwMDI2XHUwMDI2ICFyZWZjb3VudGVkIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4rXHRcdHNrID0gTlVMTDtcbitcbiBcdHJldHVybiBzaztcbiB9XG4gXG5AQCAtNzA3NCw2ICs3MDgxLDMxIEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHJldHVybiBzaztcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBzb2NrICpcbiticGZfc2tfbG9va3VwX2Z1bGxfc2soc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbitcbitcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIHNrLVx1MDAzZXJza19saXN0ZW5lciwgbWFrZSBzdXJlIHRoZSBvcmlnaW5hbFxuK1x0ICogc2sgc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuK1x0ICovXG4rXHRpZiAoc2syICE9IHNrKSB7XG4rXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4rXHRcdGlmICh1bmxpa2VseShzazIgXHUwMDI2XHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcbitcdFx0XHRXQVJOX09OQ0UoMSwgXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwiKTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0fVxuK1x0XHQvKiBzazIgaXMgUkNVLWZyZWUsIGJ1dCB0YWtlIGEgcmVmZXJlbmNlIGFueXdheTtcbitcdFx0ICogYnBmX3NrX3JlbGVhc2UoKSBwdXRzLlxuK1x0XHQgKi9cbitcdFx0aWYgKHNrMiBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzazItXHUwMDNlc2tfcmVmY250KSlcbitcdFx0XHRzazIgPSBOVUxMO1xuK1x0XHRzayA9IHNrMjtcbitcdH1cbitcbitcdHJldHVybiBzaztcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBzb2NrICpcbiBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG5AQCAtNzA4MywyMiArNzExNSw4IEBAIF9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuIFx0XHRcdFx0XHQgICBpZmluZGV4LCBwcm90bywgbmV0bnNfaWQsIGZsYWdzLFxuIFx0XHRcdFx0XHQgICBzZGlmKTtcbiBcbi1cdGlmIChzaykge1xuLVx0XHRzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7XG4tXG4tXHRcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXHUwMDNlcnNrX2xpc3RlbmVyLCBzbyBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsIHNrXG4tXHRcdCAqIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay5cbi1cdFx0ICovXG4tXHRcdGlmIChzazIgIT0gc2spIHtcbi1cdFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuLVx0XHRcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xuLVx0XHRcdGlmICh1bmxpa2VseShzazIgXHUwMDI2XHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcbi1cdFx0XHRcdFdBUk5fT05DRSgxLCBcIkZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXCIpO1xuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdFx0fVxuLVx0XHRcdHNrID0gc2syO1xuLVx0XHR9XG4tXHR9XG4rXHRpZiAoc2spXG4rXHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbiBcbiBcdHJldHVybiBzaztcbiB9XG5AQCAtNzEyOSwyMiArNzE0Nyw4IEBAIGJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxuIFx0XHRcdFx0XHQgZmxhZ3MpO1xuIFxuLVx0aWYgKHNrKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbi1cbi1cdFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2tcbi1cdFx0ICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHNrMiAhPSBzaykge1xuLVx0XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4tXHRcdFx0LyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuLVx0XHRcdFx0V0FSTl9PTkNFKDEsIFwiRm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcIik7XG4tXHRcdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0XHR9XG4tXHRcdFx0c2sgPSBzazI7XG4tXHRcdH1cbi1cdH1cbitcdGlmIChzaylcbitcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xuIFxuIFx0cmV0dXJuIHNrO1xuIH1cbkBAIC03MjgwLDcgKzcyODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xuIFxuIEJQRl9DQUxMXzEoYnBmX3NrX3JlbGVhc2UsIHN0cnVjdCBzb2NrICosIHNrKVxuIHtcbi1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2tfaXNfcmVmY291bnRlZChzaykpXG4rXHRpZiAoc2spXG4gXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTE1NzIsMTEgKzExNTc2LDEzIEBAIEJQRl9DQUxMXzQoc2tfc2VsZWN0X3JldXNlcG9ydCwgc3RydWN0IHNrX3JldXNlcG9ydF9rZXJuICosIHJldXNlX2tlcm4sXG4gXHRib29sIGlzX3NvY2thcnJheSA9IG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkVVU0VQT1JUX1NPQ0tBUlJBWTtcbiBcdHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2U7XG4gXHRzdHJ1Y3Qgc29jayAqc2VsZWN0ZWRfc2s7XG4tXHRpbnQgZXJyO1xuK1x0aW50IGVyciA9IDA7XG4gXG4gXHRzZWxlY3RlZF9zayA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmICghc2VsZWN0ZWRfc2spXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0aWYgKCFpc19zb2NrYXJyYXkpXG4rXHRcdHNvY2tfcHV0KHNlbGVjdGVkX3NrKTtcbiBcbiBcdHJldXNlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVjdGVkX3NrLVx1MDAzZXNrX3JldXNlcG9ydF9jYik7XG4gXHRpZiAoIXJldXNlKSB7XG5AQCAtMTE2MDYsMTMgKzExNjEyLDcgQEAgQlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2VybixcbiBcdH1cbiBcbiBcdHJldXNlX2tlcm4tXHUwMDNlc2VsZWN0ZWRfc2sgPSBzZWxlY3RlZF9zaztcbi1cbi1cdHJldHVybiAwO1xuIGVycm9yOlxuLVx0LyogTG9va3VwIGluIHNvY2tfbWFwIGNhbiByZXR1cm4gVENQIEVTVEFCTElTSEVEIHNvY2tldHMuICovXG4tXHRpZiAoc2tfaXNfcmVmY291bnRlZChzZWxlY3RlZF9zaykpXG4tXHRcdHNvY2tfcHV0KHNlbGVjdGVkX3NrKTtcbi1cbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5pbmRleCA5ZWZiZDhjYTdkYjgzMi4uYWUxOGRjNGQ2MGY5MTUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jXG4rKysgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5AQCAtMzkwLDEwICszOTAsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdHN0cnVjdCBzb2NrICpzaztcbiBcbiBcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbi1cdGlmICghc2spXG4tXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0aWYgKHNrKVxuK1x0XHRzb2NrX2hvbGQoc2spO1xuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbkBAIC0xMjE2LDEwICsxMjE0LDggQEAgc3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0c3RydWN0IHNvY2sgKnNrO1xuIFxuIFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4tXHRpZiAoIXNrKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdGlmIChzaylcbitcdFx0c29ja19ob2xkKHNrKTtcbiBcdHJldHVybiBzaztcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNToyNC4wNjY4NDk3NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODAxMDY2Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFNvY2tldCBSZWZlcmVuY2UgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IHNvY2tldCByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgQlBGIHNvY2tldCBsb29rdXAgZnVuY3Rpb25zLiBUaGlzIGFmZmVjdHMgYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgLCByaWdodCBhdCB0aGUgaGVhcnQgb2YgQlBGIG5ldHdvcmtpbmcgbG9naWMuIFRoZSBrZXkgc2VlbXMgdG8gYmUgYSBjb25zaXN0ZW50IGFwcHJvYWNoIHRvIHJlZmVyZW5jZSBjb3VudGluZy5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBmb3JjZXMgYSByZWZlcmVuY2UgdG8gYmUgdGFrZW4gb24gKmV2ZXJ5KiBzb2NrZXQgcmV0dXJuZWQgYnkgYHNrX2xvb2t1cGAgYW5kIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCBhbmQgYGJwZl9za19yZWxlYXNlYCBhbHdheXMgKnJlbGVhc2VzKiB0aGF0IHJlZmVyZW5jZSB3aXRob3V0IGFueSBjb25kaXRpb25hbCBjaGVja3MgYW55bW9yZS4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGNoYW5nZS4gVGhlbiB0aGVyZSBhcmUgb3RoZXIgY2hhbmdlcyB3aGljaCBhbHdheXMgY2FsbCBgc29ja19ob2xkKHNrKWAgb24gYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCwgYW5kIGRvZXNuJ3QgY2hlY2sgYHNrX2lzX3JlZmNvdW50ZWQoc2spYC5cblxuRnVuY3Rpb24td2lzZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHNwZWNpZmljIEJQRi1yZWxhdGVkIGVudHJ5IHBvaW50czogYHNrX2xvb2t1cGAsIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCBgX19icGZfc2tfbG9va3VwYCwgYGJwZl9za19sb29rdXBgLCBgYnBmX3NrX3JlbGVhc2VgLCBgc2tfc2VsZWN0X3JldXNlcG9ydGAsIGBzb2NrX21hcF9sb29rdXBgLCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZm9yIGhvdyBzb2NrZXRzIGFyZSBmb3VuZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVGAgYXJlIG9idmlvdXMsIGFuZCBJIHN1c3BlY3QgYENPTkZJR19CUEZfU09DS19BRERSYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5IGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBgbmV0L2NvcmUvc29ja19tYXAuY2AgZmlsZXMgdGhlbXNlbHZlcywgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cbk92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWltcyB0byBzb2xpZGlmeSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIHN0cmF0ZWd5LCBwb3RlbnRpYWxseSBpbXByb3Zpbmcgc3RhYmlsaXR5IG9yIHByZXZlbnRpbmcgc3VidGxlIHJlc291cmNlIGxlYWtzIHdpdGhpbiB0aGUgQlBGIHNvY2tldCBtYW5hZ2VtZW50LiBJJ2xsIGRpZyBpbnRvIHRoZSBjb2RlIG1vcmUgdGhvcm91Z2hseSB0byBzZWUgdGhlIGRpcmVjdCBpbXBhY3QgYW5kIHJhdGlvbmFsZSBmb3IgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc0OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjMwLjg2NzkxODM5OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA2ODQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9Njk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk4OS0jaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTkwOnN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSxcXG5uZXQvY29yZS9maWx0ZXIuYy02OTkxLVxcdFxcdFxcdCAgICAgIGludCBkaWYsIGludCBzZGlmLCB1OCBmYW1pbHksIHU4IHByb3RvKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzA0ND1fX2JwZl9za2NfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDcwLVxcdFxcdG5ldCA9IGNhbGxlcl9uZXQ7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzA3MTpcXHRcXHRzayA9IHNrX2xvb2t1cChuZXQsIHR1cGxlLCBpZmluZGV4LCBzZGlmLCBmYW1pbHksIHByb3RvKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MDcyLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDc1LVxcdFxcdFxcdGdvdG8gb3V0O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNzY6XFx0XFx0c2sgPSBza19sb29rdXAobmV0LCB0dXBsZSwgaWZpbmRleCwgc2RpZiwgZmFtaWx5LCBwcm90byk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzA3Ny1cXHRcXHRwdXRfbmV0KG5ldCk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MDg0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NzA4NTpicGZfc2tfbG9va3VwX2Z1bGxfc2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwODYte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzEwOT1zdGF0aWMgc3RydWN0IHNvY2sgKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTA6X19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzExMS1cXHRcXHRzdHJ1Y3QgbmV0ICpjYWxsZXJfbmV0LCB1MzIgaWZpbmRleCwgdTggcHJvdG8sIHU2NCBuZXRuc19pZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTgtXFx0aWYgKHNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTk6XFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMjAtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTQzPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE0NDpicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE0NS1cXHQgICAgICB1OCBwcm90bywgdTY0IG5ldG5zX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTUwLVxcdGlmIChzaylcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTUxOlxcdFxcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MTUyLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzE2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzQtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE3NTpCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE3Ni1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzcte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNzg6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWJwZl9za19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBJUFBST1RPX1RDUCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MTc5LVxcdFxcdFxcdFxcdFxcdCAgICBuZXRuc19pZCwgZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTgyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE4MzpcXHQuZnVuY1xcdFxcdD0gYnBmX3NrX2xvb2t1cF90Y3AsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE5My1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTk0OkJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy03MTk1LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE5Ni17XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE5NzpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIElQUFJPVE9fVURQLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTgtXFx0XFx0XFx0XFx0XFx0ICAgIG5ldG5zX2lkLCBmbGFncyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjAwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyMDE6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjAyOlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfbG9va3VwX3VkcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjAzLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MjI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzIzNi1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MjM3OkJQRl9DQUxMXzUoYnBmX3RjX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBza19idWZmICosIHNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy03MjM4LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjQzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNDQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzI0NS1cXHRcXHRcXHRcXHRcXHQgICAgICBpZmluZGV4LCBJUFBST1RPX1RDUCwgbmV0bnNfaWQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjQ4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNDk6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjUwOlxcdC5mdW5jXFx0XFx0PSBicGZfdGNfc2tfbG9va3VwX3RjcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjUxLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjYwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjE6QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3VkcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjItXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjctXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI2ODpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjY5LVxcdFxcdFxcdFxcdFxcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzItXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNzQ6XFx0LmZ1bmNcXHRcXHQ9IGJwZl90Y19za19sb29rdXBfdWRwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzUtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcyOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfcmVsZWFzZV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyOTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI5OTpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3VkcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MzAwLVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHUzMiwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MzA1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjczMDY6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMDctXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19VRFAsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzMxMC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MzExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczMTI6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3hkcF9za19sb29rdXBfdWRwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMTMtXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNDYtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzM0NzpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3RjcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MzQ4LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHUzMiwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MzUzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjczNTQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM1OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MzU5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczNjA6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3hkcF9za19sb29rdXBfdGNwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNjEtXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzM5MTpCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5Mi1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTMte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczOTQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc29ja19uZXQoY3R4LVxcdTAwM2VzayksIDAsIElQUFJPVE9fVENQLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3Mzk5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MDA6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03NDAxLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03NDA5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MTA6QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTEtXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG5uZXQvY29yZS9maWx0ZXIuYy03NDEyLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3NDEzOlxcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbixcXG5uZXQvY29yZS9maWx0ZXIuYy03NDE0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNvY2tfbmV0KGN0eC1cXHUwMDNlc2spLCAwLCBJUFBST1RPX1VEUCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTctXFxubmV0L2NvcmUvZmlsdGVyLmM6NzQxODpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3NDE5OlxcdC5mdW5jXFx0XFx0PSBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQyMC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODMwMD1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjMtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNDpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzI2OlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzI3OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjgtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODQxMz1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0NDAtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MTpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MjpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDM6XFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDQ6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NDQ1LVxcdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg0NjI9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODU1OS0jaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTYwOlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTYxOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MjpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MzpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg1NjQtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODU5OT14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MjgtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODYyOTpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMDpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4NjMxOlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NjMyOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MzMtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODc1Nj1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODEtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MjpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MzpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODQ6XFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg2LVxcdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExODA4PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfcmV1c2Vwb3J0X3Byb2dfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTE6REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYnBmX3NrX2xvb2t1cF9lbmFibGVkKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTgxMjpFWFBPUlRfU1lNQk9MKGJwZl9za19sb29rdXBfZW5hYmxlZCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTQ6QlBGX0NBTExfMyhicGZfc2tfbG9va3VwX2Fzc2lnbiwgc3RydWN0IGJwZl9za19sb29rdXBfa2VybiAqLCBjdHgsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTUtXFx0ICAgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg0Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg0MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExODQ0OlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfbG9va3VwX2Fzc2lnbixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg0NS1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE4NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTM6c2tfbG9va3VwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NTQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NTgtXFx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTk6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2MC1cXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg2NzpzdGF0aWMgYm9vbCBza19sb29rdXBfaXNfdmFsaWRfYWNjZXNzKGludCBvZmYsIGludCBzaXplLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODY4LVxcdFxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg3MS17XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NzI6XFx0aWYgKG9mZiBcXHUwMDNjIDAgfHwgb2ZmIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCkpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzktXFx0c3dpdGNoIChvZmYpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4MDpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfcHRyKHN0cnVjdCBicGZfc2tfbG9va3VwLCBzayk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4ODEtXFx0XFx0aW5mby1cXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fU09DS0VUX09SX05VTEw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg4My1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NDpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGZhbWlseSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODU6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODY6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NzpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNCk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODg6XFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg5OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0sIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTA6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9wb3J0KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5MTpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGluZ3Jlc3NfaWZpbmRleCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4OTItXFx0XFx0YnBmX2N0eF9yZWNvcmRfZmllbGRfc2l6ZShpbmZvLCBzaXplb2YoX191MzIpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExODk1OlxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODk2LVxcdFxcdC8qIEFsbG93IDQtYnl0ZSBhY2Nlc3MgdG8gMi1ieXRlIGZpZWxkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkwMS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkwMjpcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCkgLi4uXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MDM6XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KSAtIDE6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MDQtXFx0XFx0LyogQWxsb3cgYWNjZXNzIHRvIHplcm8gcGFkZGluZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MTM6c3RhdGljIHUzMiBza19sb29rdXBfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTQtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTIxLVxcdHN3aXRjaCAoc2ktXFx1MDAzZW9mZikge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTIyOlxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHNrKTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyMy1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MjQ6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybiwgc2VsZWN0ZWRfc2spKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyNS1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyNi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkyNzpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTI4LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTI5OlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYW1pbHksIDIsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzMi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkzMzpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzQtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MzU6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHByb3RvY29sLCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5Mzk6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDAtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDE6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHY0LnNhZGRyLCA0LCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDU6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Ni1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk0NzpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdjQuZGFkZHIsIDQsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1MC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk1MTpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Mi1cXHRcXHRcXHRcXHRyZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTY6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA2WzBdKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Ny1cXHRcXHRvZmYgKz0gYnBmX3RhcmdldF9vZmYoc3RydWN0IGluNl9hZGRyLCBzNl9hZGRyMzJbMF0sIDQsIHRhcmdldF9zaXplKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1OC1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTk6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2VybiwgdjYuc2FkZHIpKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2MC1cXHRcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgc2ktXFx1MDAzZWRzdF9yZWcsIDAsIDEpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NjYtXFx0fVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTY3OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTY4LVxcdFxcdFxcdFxcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzI6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTczLVxcdFxcdG9mZiArPSBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgaW42X2FkZHIsIHM2X2FkZHIzMlswXSwgNCwgdGFyZ2V0X3NpemUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTc0LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHZvaWQgKiksIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NTpcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5kYWRkcikpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTc2LVxcdFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBzaS1cXHUwMDNlZHN0X3JlZywgMCwgMSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk4Mi1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODM6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg0LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg1OlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzcG9ydCwgMiwgdGFyZ2V0X3NpemUpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg5OlxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5MC1cXHRcXHQqdGFyZ2V0X3NpemUgPSAyO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5OTQ6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTUtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5OTY6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTktXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMDA6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgaW5ncmVzc19pZmluZGV4KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAwMS1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAwMjpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDAzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW5ncmVzc19pZmluZGV4LCA0LCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMDktXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTA6Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19sb29rdXBfcHJvZ19vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTE6XFx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDEyLX07XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTQ6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc2tfbG9va3VwX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxNTpcXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IHNrX2xvb2t1cF9mdW5jX3Byb3RvLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE2OlxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IHNrX2xvb2t1cF9pc192YWxpZF9hY2Nlc3MsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTc6XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxOC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTozMC45MjY5OTA0MDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjYyOTYyNzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBwcmV0dHkga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNvY2tldCBsb29rdXAgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIGBza19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9va3VwIGxvZ2ljIGxpdmVzLCBhbmQgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgdWx0aW1hdGVseSBjYWxsZWQgYnkgdGhlIEJQRi1leHBvc2VkIGhlbHBlcnM6IGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAuIFRoZXNlIGFyZSwgaW4gdHVybiwgY2FsbGVkIGJ5IGFsbCB0aG9zZSBCUEYgaGVscGVycyB3ZSB1c2UgZm9yIGZpbmRpbmcgc29ja2V0cyBsaWtlIGBicGZfc2tfbG9va3VwX3RjcGAsIGBicGZfc2tfbG9va3VwX3VkcGAsIGFuZCB0aGUgb3RoZXJzIHVzZWQgZm9yIHRjIGFuZCB4ZHAsIGFzIHdlbGwgYXMgdGhlIHNvY2tldCBhZGRyZXNzIHZlcnNpb25zLiBBbmQgbGV0J3Mgbm90IGZvcmdldCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBicGZfc2tfcmVsZWFzZWAuIFRoaXMgaXMgYWxsIHN1Z2dlc3RpbmcgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgQlBGIGludGVyYWN0cyB3aXRoIHNvY2tldCBsb29rdXBzIGFuZCBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIEl0J3MgYSBjcml0aWNhbCBhcmVhLCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgb24gcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LlxuXG5UaGVuIEkgc2VlIGl0IGFsc28gdG91Y2hlcyBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gVGhhdCdzIHRoZSBzb2NrZXQgbWFwIGFuZCBzb2NrZXQgaGFzaCBtYXAgY29kZS4gRGVmaW5pdGVseSBnb2luZyB0byBjaGVjayB0aGF0IGFyZWEuIE5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHR3ZWFrZWQgYW5kIHdoYXQgaXQgbWVhbnMgZm9yIGhvdyBCUEYgaW50ZXJhY3RzIHdpdGggdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ5NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTozNi4xODk5NTUxOTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0OTg4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zNzI9c3RhdGljIHZvaWQgc29ja19tYXBfcmVsZWFzZV9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzYtXFxubmV0L2NvcmUvc29ja19tYXAuYzozNzc6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzgte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXFxubmV0L2NvcmUvc29ja19tYXAuYzozODg6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTEtXFxubmV0L2NvcmUvc29ja19tYXAuYzozOTI6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkzLVxcdGlmIChzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk4OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXBfc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5OS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwNC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQwNTpcXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy00MDYtXFx0aWYgKCFzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NjQ1PUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02NTItXFxubmV0L2NvcmUvc29ja19tYXAuYzo2NTM6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY1NC1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3Mz1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjgwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgxOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy02ODItXFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz03MjE9c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNjpcXHRpbmZvLVxcdTAwM2VzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0oaW5mby1cXHUwMDNlbWFwLCBpbmZvLVxcdTAwM2VpbmRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy03MjctXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTgyOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MzMtXFx0Lm1hcF9nZXRfbmV4dF9rZXlcXHQ9IHNvY2tfbWFwX2dldF9uZXh0X2tleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNDpcXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNS1cXHQubWFwX3VwZGF0ZV9lbGVtXFx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNi1cXHQubWFwX2RlbGV0ZV9lbGVtXFx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNzpcXHQubWFwX2xvb2t1cF9lbGVtXFx0PSBzb2NrX21hcF9sb29rdXAsXFxubmV0L2NvcmUvc29ja19tYXAuYy04MzgtXFx0Lm1hcF9yZWxlYXNlX3VyZWZcXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjM2LjI1MjQ1NzYxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDg4MzY4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0IE1hcCBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBoaXR0aW5nIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgYG1hcF9sb29rdXBfZWxlbWAgb3BlcmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgYW5kIGBCUEZfTUFQX1RZUEVfU09DS0hBU0hgLiAgR2l2ZW4gbXkgZXhwZXJ0aXNlLCB0aGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBob3cgc29ja2V0cyBhcmUgYmVpbmcgbWFuYWdlZCB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsgYXQgdGhlIGNvcmUgbGV2ZWwsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3Igb2YgYW55IHNvY2tldC1yZWxhdGVkIEJQRiBwcm9ncmFtLiBJdCdzIHRoZSBwbHVtYmluZyB0aGF0IG1ha2VzIGV2ZXJ5dGhpbmcgd29yay5cblxuSSBzZWUgdGhhdCBpdCBhbHNvIG1vZGlmaWVzIGBza19zZWxlY3RfcmV1c2Vwb3J0YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCBsaWtlbHkgYWZmZWN0cyBob3cgcmV1c2Vwb3J0IHNvY2tldHMgYXJlIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVzZSBtYXBzLiBBIGNoYW5nZSB0aGVyZSB1c3VhbGx5IGluZGljYXRlcyBpbXByb3ZlbWVudHMgb3IgdHdlYWtzIGluIGhvdyB0aGUga2VybmVsIHBpY2tzIHRoZSBjb3JyZWN0IHNvY2tldCB3aGVuIG11bHRpcGxlIHNvY2tldHMgYXJlIGJvdW5kIHRvIHRoZSBzYW1lIHBvcnQuXG5cbk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHNvY2tfaGFzaF9sb29rdXBgIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBsb29rdXAgcHJvY2VzcyBmb3Igc29ja2V0cyBib3VuZCB0byB0aGVzZSBoYXNoIG1hcHMgaXMgY2hhbmdpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDg1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjQwLjM2MTI5NzQ2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTUwOTgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX2hhc2hfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz04Nzg9c3RhdGljIHN0cnVjdCBicGZfc2h0YWJfZWxlbSAqXFxubmV0L2NvcmUvc29ja19tYXAuYzo4Nzk6c29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgdTMyIGhhc2gsIHZvaWQgKmtleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg4MC1cXHRcXHRcXHQgIHUzMiBrZXlfc2l6ZSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODkyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODkzOnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX2hhc2hfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODk0LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTAzLVxcdGJ1Y2tldCA9IHNvY2tfaGFzaF9zZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTA0OlxcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFxcdTAwMjZidWNrZXQtXFx1MDAzZWhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTA1LVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz05MTY9c3RhdGljIHZvaWQgc29ja19oYXNoX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy05MzAtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTMxOlxcdGVsZW1fcHJvYmUgPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFxcdTAwMjZidWNrZXQtXFx1MDAzZWhlYWQsIGVsZW0tXFx1MDAzZWhhc2gsXFxubmV0L2NvcmUvc29ja19tYXAuYy05MzItXFx0XFx0XFx0XFx0XFx0ICAgICAgIGVsZW0tXFx1MDAzZWtleSwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTk0MT1zdGF0aWMgbG9uZyBzb2NrX2hhc2hfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy05NTItXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTUzOlxcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFxcdTAwMjZidWNrZXQtXFx1MDAzZWhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTU0LVxcdGlmIChlbGVtKSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTk5MT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAyMC1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxMDIxOlxcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFxcdTAwMjZidWNrZXQtXFx1MDAzZWhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAyMi1cXHRpZiAoZWxlbSBcXHUwMDI2XFx1MDAyNiBmbGFncyA9PSBCUEZfTk9FWElTVCkge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xMDU2PXN0YXRpYyBpbnQgc29ja19oYXNoX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwNjgtXFx0aGVhZCA9IFxcdTAwMjZzb2NrX2hhc2hfc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKS1cXHUwMDNlaGVhZDtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjEwNjk6XFx0ZWxlbSA9IHNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMDcwLVxcdGlmICghZWxlbSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTE0ND1zdGF0aWMgdm9pZCBzb2NrX2hhc2hfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTk2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTE5NzpzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE5OC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMDMtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjA0OlxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIwNS1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjExLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIxMjpzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjEzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMTY6XFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjE3LVxcdGlmIChzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTI0OT1CUEZfQ0FMTF80KGJwZl9za19yZWRpcmVjdF9oYXNoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNTYtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjU3OlxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI1OC1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTEyNzc9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjg0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI4NTpcXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyODYtXFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNDQzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX2hhc2hfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDQ5LVxcdC5tYXBfZGVsZXRlX2VsZW1cXHQ9IHNvY2tfaGFzaF9kZWxldGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTA6XFx0Lm1hcF9sb29rdXBfZWxlbVxcdD0gc29ja19oYXNoX2xvb2t1cCxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTE6XFx0Lm1hcF9sb29rdXBfZWxlbV9zeXNfb25seSA9IHNvY2tfaGFzaF9sb29rdXBfc3lzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1Mi1cXHQubWFwX3JlbGVhc2VfdXJlZlxcdD0gc29ja19oYXNoX3JlbGVhc2VfcHJvZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjQwLjQyMDgwOTk0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjE0NTYwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiBlY29zeXN0ZW0uIEl0IGxvb2tzIGxpa2UgaXQncyB0d2Vha2luZyBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLCB3aGljaCwgYXMgeW91IGtub3csIGFyZSBjcml0aWNhbCBmb3IgdGhlIGBtYXBfbG9va3VwX2VsZW1gIG9wZXJhdGlvbnMgZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgYW5kIGBCUEZfTUFQX1RZUEVfU09DS0hBU0hgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGltcGFjdCBvbiBob3cgd2UgaW50ZXJhY3Qgd2l0aCBhbmQgbWFuYWdlIHNvY2tldHMgdXNpbmcgQlBGIG1hcHMuIEl0J3MgYWxzbyBtYWtpbmcgY2hhbmdlcyB0byBgc2tfc2VsZWN0X3JldXNlcG9ydGAsIHdoaWNoIGlzIGEgQlBGIGhlbHBlci4gVGhpcyBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nIGJlY2F1c2UgYW55IGNoYW5nZSBpbiBoZWxwZXJzIGhhcyByaXBwbGUgZWZmZWN0cyB0aHJvdWdob3V0IEJQRiBwcm9ncmFtcy5cblxuVGhlIGF1dGhvciBtZW50aW9ucyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3M6IGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVGAuIEl0J3Mgd29ydGggY29uc2lkZXJpbmcgd2hldGhlciBgQ09ORklHX0JQRl9TWVNDQUxMYCAqYWxvbmUqIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBjaGFuZ2VzLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdC4gSSBrbm93IHRoYXQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgYW5kIHRoYXQgZmlsZSBpcyB3aGVyZSB0aG9zZSBmdW5jdGlvbnMgYXJlLiBCdXQgSSdsbCBkb3VibGUtY2hlY2sgYnkgcG9raW5nIGFyb3VuZCBpbiBgbmV0L2NvcmUvTWFrZWZpbGVgIGp1c3QgdG8gYmUgY2VydGFpbiB0aGVyZSdzIG5vIHN1YnRsZSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfTkVUYCB0aGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIEJldHRlciB0byBiZSB0aG9yb3VnaCB3aGVuIGRlYWxpbmcgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBCUEYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQ1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjQ1LjA0MjI2Nzc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI0OTA0MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTo0NS4zNTQ3Nzk3MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5MjU2NTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgYW5kIFJldXNlcG9ydCBDb21wYXRpYmlsaXR5KipcblxuQWxyaWdodCwgdGhlIHJlcXVpcmVtZW50IGZvciBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuIOKAkyB0aGF0J3MgZnVuZGFtZW50YWwgZm9yIGFueSBzZXJpb3VzIEJQRiBhcHBsaWNhdGlvbi4gQnV0IG5vdyBJIG5lZWQgdG8gZGl2ZSBhIGxpdHRsZSBkZWVwZXIsIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCBtZXNoZXMgd2l0aCBzb21lIG90aGVyIGFzcGVjdHMgb2YgdGhlIHN5c3RlbS4gSSdtIHdvbmRlcmluZyBhYm91dCBgc2tfc2VsZWN0X3JldXNlcG9ydGAuIEknbSBwcmV0dHkgc3VyZSB0aGF0IGhhcyB0byBiZSBpbiBwbGF5IGhlcmUsIHNpbmNlIHRoaXMgaXMgYWxsIGFib3V0IHNvY2tldC1sZXZlbCBzdHVmZi4gTGV0IG1lIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYWdhaW4uLi4gYWgsIHJpZ2h0LCBpdCdzIHNpdHRpbmcgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCBmaWxlIGxvY2F0aW9uIG1ha2VzIHNlbnNlLiBUaGlzIGlzIGdvb2QsIGl0J3MgYSBjcml0aWNhbCBwYXRoIHRvIGV4cGxvcmUuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIGNvbmZpcm0gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGludGVyYWN0aW9uIG9mIHRob3NlIHR3byBlbGVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTo0OC41NDczNDg2ODlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDkyMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3NlbGVjdF9yZXVzZXBvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTE1NTY9c3RydWN0IHNvY2sgKmJwZl9ydW5fc2tfcmV1c2Vwb3J0KHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTcyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTczOkJQRl9DQUxMXzQoc2tfc2VsZWN0X3JldXNlcG9ydCwgc3RydWN0IHNrX3JldXNlcG9ydF9rZXJuICosIHJldXNlX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1NzQtXFx0ICAgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB2b2lkICosIGtleSwgdTMyLCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjE4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfc2VsZWN0X3JldXNlcG9ydF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTYyMDpcXHQuZnVuYyAgICAgICAgICAgPSBza19zZWxlY3RfcmV1c2Vwb3J0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjIxLVxcdC5ncGxfb25seSAgICAgICA9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE2NjY9c2tfcmV1c2Vwb3J0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE2NjktXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE2NzA6XFx0Y2FzZSBCUEZfRlVOQ19za19zZWxlY3RfcmV1c2Vwb3J0Olxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjcxOlxcdFxcdHJldHVybiBcXHUwMDI2c2tfc2VsZWN0X3JldXNlcG9ydF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTY3Mi1cXHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTo0OC42MDY0NDQ3OTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0OTAwOTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTS19SRVVTRVBPUlQgQlBGIEhlbHBlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBza19zZWxlY3RfcmV1c2Vwb3J0YCDigJMgdGhhdCdzIHRoZSBCUEYgaGVscGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgYEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUYCBwcm9ncmFtcy4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gUmlnaHQgYXdheSwgSSBzZWUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgY3J1Y2lhbC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc291cmNlIGFuZCBjcm9zcyByZWZlcmVuY2UgdGhlIGNvbmZpZyBvcHRpb25zLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBzZW5zZSBmcm9tIGxvb2tpbmcgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiB0aGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgZ2V0cyBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19ORVRgIGlzIHNldCwgdGhhdCdzIGEgZ29vZCBzaWduLiBGdXJ0aGVybW9yZSwgSSBzZWUgdGhhdCB0aGUgYHNrX2xvb2t1cGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgI2lmZGVmIENPTkZJR19JTkVUYC4gVGhpcyBpbXBsaWVzIHRoYXQgYHNrX2xvb2t1cGAgYW5kLCBwb3RlbnRpYWxseSwgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGFyZSB0aWVkIGludG8gdGhlIGJyb2FkZXIgVENQL0lQIHN0YWNrIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzbid0IGVudGlyZWx5IHN1cnByaXNpbmcgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBzb2NrZXQtYmFzZWQgcmV1c2Vwb3J0IHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNzUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTQ6MTU6NTIuNTU1NDU3ODk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTI2MDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9Njk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk4OS0jaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTkwOnN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSxcXG5uZXQvY29yZS9maWx0ZXIuYy02OTkxLVxcdFxcdFxcdCAgICAgIGludCBkaWYsIGludCBzZGlmLCB1OCBmYW1pbHksIHU4IHByb3RvKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzA0ND1fX2JwZl9za2NfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDcwLVxcdFxcdG5ldCA9IGNhbGxlcl9uZXQ7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzA3MTpcXHRcXHRzayA9IHNrX2xvb2t1cChuZXQsIHR1cGxlLCBpZmluZGV4LCBzZGlmLCBmYW1pbHksIHByb3RvKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MDcyLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDc1LVxcdFxcdFxcdGdvdG8gb3V0O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNzY6XFx0XFx0c2sgPSBza19sb29rdXAobmV0LCB0dXBsZSwgaWZpbmRleCwgc2RpZiwgZmFtaWx5LCBwcm90byk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzA3Ny1cXHRcXHRwdXRfbmV0KG5ldCk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MDg0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NzA4NTpicGZfc2tfbG9va3VwX2Z1bGxfc2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwODYte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzEwOT1zdGF0aWMgc3RydWN0IHNvY2sgKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTA6X19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzExMS1cXHRcXHRzdHJ1Y3QgbmV0ICpjYWxsZXJfbmV0LCB1MzIgaWZpbmRleCwgdTggcHJvdG8sIHU2NCBuZXRuc19pZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTgtXFx0aWYgKHNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTk6XFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMjAtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTQzPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE0NDpicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE0NS1cXHQgICAgICB1OCBwcm90bywgdTY0IG5ldG5zX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTUwLVxcdGlmIChzaylcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTUxOlxcdFxcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MTUyLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzE2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzQtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE3NTpCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE3Ni1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzcte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNzg6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWJwZl9za19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBJUFBST1RPX1RDUCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MTc5LVxcdFxcdFxcdFxcdFxcdCAgICBuZXRuc19pZCwgZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTgyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE4MzpcXHQuZnVuY1xcdFxcdD0gYnBmX3NrX2xvb2t1cF90Y3AsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE5My1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTk0OkJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy03MTk1LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE5Ni17XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE5NzpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIElQUFJPVE9fVURQLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTgtXFx0XFx0XFx0XFx0XFx0ICAgIG5ldG5zX2lkLCBmbGFncyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjAwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyMDE6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjAyOlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfbG9va3VwX3VkcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjAzLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MjI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzIzNi1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MjM3OkJQRl9DQUxMXzUoYnBmX3RjX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBza19idWZmICosIHNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy03MjM4LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjQzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNDQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzI0NS1cXHRcXHRcXHRcXHRcXHQgICAgICBpZmluZGV4LCBJUFBST1RPX1RDUCwgbmV0bnNfaWQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjQ4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNDk6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjUwOlxcdC5mdW5jXFx0XFx0PSBicGZfdGNfc2tfbG9va3VwX3RjcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjUxLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjYwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjE6QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3VkcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjItXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjctXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI2ODpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjY5LVxcdFxcdFxcdFxcdFxcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzItXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNzQ6XFx0LmZ1bmNcXHRcXHQ9IGJwZl90Y19za19sb29rdXBfdWRwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzUtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcyOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfcmVsZWFzZV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyOTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI5OTpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3VkcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MzAwLVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHUzMiwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MzA1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjczMDY6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMDctXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19VRFAsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzMxMC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MzExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczMTI6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3hkcF9za19sb29rdXBfdWRwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMTMtXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNDYtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzM0NzpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3RjcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MzQ4LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHUzMiwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MzUzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjczNTQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM1OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MzU5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczNjA6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3hkcF9za19sb29rdXBfdGNwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNjEtXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzM5MTpCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5Mi1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTMte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczOTQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc29ja19uZXQoY3R4LVxcdTAwM2VzayksIDAsIElQUFJPVE9fVENQLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3Mzk5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MDA6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03NDAxLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03NDA5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MTA6QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTEtXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG5uZXQvY29yZS9maWx0ZXIuYy03NDEyLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3NDEzOlxcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbixcXG5uZXQvY29yZS9maWx0ZXIuYy03NDE0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNvY2tfbmV0KGN0eC1cXHUwMDNlc2spLCAwLCBJUFBST1RPX1VEUCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTctXFxubmV0L2NvcmUvZmlsdGVyLmM6NzQxODpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3NDE5OlxcdC5mdW5jXFx0XFx0PSBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQyMC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODMwMD1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjMtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNDpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzI2OlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzI3OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjgtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODQxMz1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0NDAtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MTpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MjpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDM6XFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDQ6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NDQ1LVxcdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg0NjI9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODU1OS0jaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTYwOlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTYxOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MjpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MzpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg1NjQtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODU5OT14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MjgtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODYyOTpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMDpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4NjMxOlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NjMyOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MzMtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODc1Nj1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODEtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MjpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MzpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODQ6XFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg2LVxcdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExODA4PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfcmV1c2Vwb3J0X3Byb2dfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTE6REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYnBmX3NrX2xvb2t1cF9lbmFibGVkKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTgxMjpFWFBPUlRfU1lNQk9MKGJwZl9za19sb29rdXBfZW5hYmxlZCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTQ6QlBGX0NBTExfMyhicGZfc2tfbG9va3VwX2Fzc2lnbiwgc3RydWN0IGJwZl9za19sb29rdXBfa2VybiAqLCBjdHgsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTUtXFx0ICAgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg0Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg0MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExODQ0OlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfbG9va3VwX2Fzc2lnbixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg0NS1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE4NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTM6c2tfbG9va3VwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NTQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NTgtXFx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTk6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2MC1cXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg2NzpzdGF0aWMgYm9vbCBza19sb29rdXBfaXNfdmFsaWRfYWNjZXNzKGludCBvZmYsIGludCBzaXplLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODY4LVxcdFxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg3MS17XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NzI6XFx0aWYgKG9mZiBcXHUwMDNjIDAgfHwgb2ZmIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCkpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzktXFx0c3dpdGNoIChvZmYpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4MDpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfcHRyKHN0cnVjdCBicGZfc2tfbG9va3VwLCBzayk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4ODEtXFx0XFx0aW5mby1cXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fU09DS0VUX09SX05VTEw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg4My1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NDpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGZhbWlseSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODU6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODY6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NzpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNCk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODg6XFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg5OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0sIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTA6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9wb3J0KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5MTpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGluZ3Jlc3NfaWZpbmRleCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4OTItXFx0XFx0YnBmX2N0eF9yZWNvcmRfZmllbGRfc2l6ZShpbmZvLCBzaXplb2YoX191MzIpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExODk1OlxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODk2LVxcdFxcdC8qIEFsbG93IDQtYnl0ZSBhY2Nlc3MgdG8gMi1ieXRlIGZpZWxkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkwMS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkwMjpcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCkgLi4uXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MDM6XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KSAtIDE6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MDQtXFx0XFx0LyogQWxsb3cgYWNjZXNzIHRvIHplcm8gcGFkZGluZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MTM6c3RhdGljIHUzMiBza19sb29rdXBfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTQtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTIxLVxcdHN3aXRjaCAoc2ktXFx1MDAzZW9mZikge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTIyOlxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHNrKTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyMy1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MjQ6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybiwgc2VsZWN0ZWRfc2spKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyNS1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyNi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkyNzpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTI4LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTI5OlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYW1pbHksIDIsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzMi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkzMzpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzQtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MzU6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHByb3RvY29sLCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5Mzk6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDAtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDE6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHY0LnNhZGRyLCA0LCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDU6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Ni1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk0NzpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdjQuZGFkZHIsIDQsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1MC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk1MTpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Mi1cXHRcXHRcXHRcXHRyZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTY6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA2WzBdKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Ny1cXHRcXHRvZmYgKz0gYnBmX3RhcmdldF9vZmYoc3RydWN0IGluNl9hZGRyLCBzNl9hZGRyMzJbMF0sIDQsIHRhcmdldF9zaXplKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1OC1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTk6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2VybiwgdjYuc2FkZHIpKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2MC1cXHRcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgc2ktXFx1MDAzZWRzdF9yZWcsIDAsIDEpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NjYtXFx0fVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTY3OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTY4LVxcdFxcdFxcdFxcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzI6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTczLVxcdFxcdG9mZiArPSBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgaW42X2FkZHIsIHM2X2FkZHIzMlswXSwgNCwgdGFyZ2V0X3NpemUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTc0LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHZvaWQgKiksIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NTpcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5kYWRkcikpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTc2LVxcdFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBzaS1cXHUwMDNlZHN0X3JlZywgMCwgMSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk4Mi1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODM6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg0LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg1OlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzcG9ydCwgMiwgdGFyZ2V0X3NpemUpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg5OlxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5MC1cXHRcXHQqdGFyZ2V0X3NpemUgPSAyO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5OTQ6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTUtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5OTY6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTktXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMDA6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgaW5ncmVzc19pZmluZGV4KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAwMS1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAwMjpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDAzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW5ncmVzc19pZmluZGV4LCA0LCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMDktXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTA6Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19sb29rdXBfcHJvZ19vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTE6XFx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDEyLX07XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTQ6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc2tfbG9va3VwX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxNTpcXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IHNrX2xvb2t1cF9mdW5jX3Byb3RvLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE2OlxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IHNrX2xvb2t1cF9pc192YWxpZF9hY2Nlc3MsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTc6XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxOC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTo1Mi42MTY3MjQ1NTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzNDYwMzkyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTb2NrZXQgTG9va3VwIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgQ09ORklHX0lORVRgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBgc2tfbG9va3VwYC4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXM6IGBicGZfc2tfbG9va3VwX3RjcGAsIGBicGZfc2tfbG9va3VwX3VkcGAsIGBicGZfdGNfc2tfbG9va3VwX3RjcGAsIGBicGZfdGNfc2tfbG9va3VwX3VkcGAsIGBicGZfeGRwX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3hkcF9za19sb29rdXBfdWRwYCwgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcGAsIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBgLCBhbmQgYGJwZl9za19yZWxlYXNlYC4gVGhlc2UgYXJlIGFsbCBCUEYgaGVscGVycywgc28gSSBuZWVkIHRvIGhvbmUgaW4gb24gdGhlIGNvcmUgc3ltYm9scy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgYHNrX2xvb2t1cGAsIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCBgX19icGZfc2tfbG9va3VwYCwgYGJwZl9za19sb29rdXBgLCBgYnBmX3NrX3JlbGVhc2VgLCBgc2tfc2VsZWN0X3JldXNlcG9ydGAsIGBzb2NrX21hcF9sb29rdXBgLCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLlxuXG5IYW5nIG9uLCBgc2tfbG9va3VwYCBpcyBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCdzIG5vdCBpZGVhbCBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGBza19sb29rdXBgIGltcGxlbWVudGF0aW9ucyBpbiB0aGUga2VybmVsLi4uIHllcCwgdGhlcmUgYXJlIHF1aXRlIGEgZmV3LiBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCBtaWdodCBiZSBiZXR0ZXIuIEFuZCBgX19icGZfc2tfbG9va3VwYCBhbmQgYGJwZl9za19sb29rdXBgIGFyZSBhbHNvIHN0YXRpYyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBgYnBmX3NrX3JlbGVhc2VgIGlzIGEgQlBGIGhlbHBlciwgYW5kIGBza19zZWxlY3RfcmV1c2Vwb3J0YCBpcyBhbHNvIGEgQlBGIGhlbHBlci4gYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBhcmUgc3RhdGljIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC5cblxuT2theSwgbGV0J3Mgc2VlIGlmIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgYXJlIHN1ZmZpY2llbnRseSB1bmlxdWUgdG8gcmVwcmVzZW50IHRoZSBzb2NrbWFwIGFzcGVjdCBvZiB0aGlzIHBhdGNoPyBHb29kLCB0aGV5IGFyZS4gQW5kIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgPyBZZXMsIGl0IGFwcGVhcnMgdG8gYmUgYSB1bmlxdWUgZnVuY3Rpb24sIHByb2JhYmx5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyB2ZXJ5IHBhdGNoLiBBbmQgd2hhdCBhYm91dCBgc2tfc2VsZWN0X3JldXNlcG9ydGA/IFllcCwgaXQncyBhIHVuaXF1ZSBCUEYgaGVscGVyLlxuXG5TbywgdGhlIGRlZmluaXRpdmUgZm9jdXMgc3ltYm9scyBmb3IgYW5hbHlzaXMgYXJlOlxuXG4qICAgYGJwZl9za19sb29rdXBfZnVsbF9za2BcbiogICBgYnBmX3NrX3JlbGVhc2VgXG4qICAgYHNrX3NlbGVjdF9yZXVzZXBvcnRgXG4qICAgYHNvY2tfbWFwX2xvb2t1cGBcbiogICBgc29ja19oYXNoX2xvb2t1cGBcblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJJ20gc2VlaW5nOiBgQlBGX1NZU0NBTExgLCBgTkVUYCwgYW5kIGBJTkVUYC5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2suLi4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5vdWdoIGZvciBgc29ja19tYXAuY2AuIGBDT05GSUdfSU5FVGAgY292ZXJzIGBza19sb29rdXBgIGFuZCB0aGUgQlBGIGhlbHBlcnMgaW4gYGZpbHRlci5jYC4gQW5kIG5hdHVyYWxseSwgYENPTkZJR19ORVRgIGlzIHJlcXVpcmVkIGZvciBuZXR3b3JraW5nLlxuXG5MZXQgbWUgc3VtbWFyaXplIG15IHJlYXNvbmluZyBzdWNjaW5jdGx5OiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIHdpdGhpbiBCUEYgc29ja2V0IGxvb2t1cCBoZWxwZXJzIChgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYGJwZl9za19yZWxlYXNlYCksIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzb2NrbWFwIGxvb2t1cHMgKGBzb2NrX21hcF9sb29rdXBgLCBgc29ja19oYXNoX2xvb2t1cGApLiBJdCBhcHBlYXJzIHRvIGd1YXJhbnRlZSBjb3JyZWN0IHNvY2tldCByZWZlcmVuY2UgaGFuZGxpbmcgZHVyaW5nIGxvb2t1cHMgYW5kIHJlbGVhc2VzLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMsIHBvdGVudGlhbGx5IHJlYWNoZWQgdGhyb3VnaCBwcm9ncmFtcyBjYWxsaW5nIHRoZXNlIGhlbHBlcnMgb3IgaW50ZXJhY3Rpbmcgd2l0aCBzb2NrbWFwcy5cblxuTm93LCBsZXQncyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU1NiwiT3V0cHV0VG9rZW5zIjoxOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTQ6MTY6MDMuOTYyNzY1ODY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyMzkyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tfbG9va3VwX2Z1bGxfc2tcIixcbiAgICBcImJwZl9za19yZWxlYXNlXCIsXG4gICAgXCJza19zZWxlY3RfcmV1c2Vwb3J0XCIsXG4gICAgXCJzb2NrX21hcF9sb29rdXBcIixcbiAgICBcInNvY2tfaGFzaF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGluIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgKGUuZy4sIGJwZl9za19sb29rdXBfZnVsbF9zaywgYnBmX3NrX3JlbGVhc2UpIGFuZCBzb2NrbWFwIGxvb2t1cCBmdW5jdGlvbnMgKHNvY2tfbWFwX2xvb2t1cCwgc29ja19oYXNoX2xvb2t1cCkuIEl0IGVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBpcyBhbHdheXMgdGFrZW4gZm9yIHNvY2tldHMgcmV0dXJuZWQgYnkgbG9va3VwcyBhbmQgcHJvcGVybHkgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEJQRiBwcm9ncmFtcyBjYWxsaW5nIHRoZXNlIGhlbHBlcnMgb3IgaW50ZXJhY3Rpbmcgd2l0aCBzb2NrbWFwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2xvb2t1cF9mdWxsX3NrXCIsXG4gICAgXCJicGZfc2tfcmVsZWFzZVwiLFxuICAgIFwic2tfc2VsZWN0X3JldXNlcG9ydFwiLFxuICAgIFwic29ja19tYXBfbG9va3VwXCIsXG4gICAgXCJzb2NrX2hhc2hfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBpbiBCUEYgc29ja2V0IGxvb2t1cCBoZWxwZXJzIChlLmcuLCBicGZfc2tfbG9va3VwX2Z1bGxfc2ssIGJwZl9za19yZWxlYXNlKSBhbmQgc29ja21hcCBsb29rdXAgZnVuY3Rpb25zIChzb2NrX21hcF9sb29rdXAsIHNvY2tfaGFzaF9sb29rdXApLiBJdCBlbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgaXMgYWx3YXlzIHRha2VuIGZvciBzb2NrZXRzIHJldHVybmVkIGJ5IGxvb2t1cHMgYW5kIHByb3Blcmx5IHJlbGVhc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBCUEYgcHJvZ3JhbXMgY2FsbGluZyB0aGVzZSBoZWxwZXJzIG9yIGludGVyYWN0aW5nIHdpdGggc29ja21hcHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjx6ht[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 13:57:24 +0000 UTC FinishedAt: 2026-07-24 14:16:06 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "INET", "NET" ], "series_id": "4207341f-d6f1-4058-875c-91cf2a50d9bb" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_sk_lookup_full_sk", "bpf_sk_release", "sk_select_reuseport", "sock_map_lookup", "sock_hash_lookup" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX3NrX2xvb2t1cF9mdWxsX3NrJiMzNDssCiAgICAmIzM0O2JwZl9za19yZWxlYXNlJiMzNDssCiAgICAmIzM0O3NrX3NlbGVjdF9yZXVzZXBvcnQmIzM0OywKICAgICYjMzQ7c29ja19tYXBfbG9va3VwJiMzNDssCiAgICAmIzM0O3NvY2tfaGFzaF9sb29rdXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBpbiBCUEYgc29ja2V0IGxvb2t1cCBoZWxwZXJzIChlLmcuLCBicGZfc2tfbG9va3VwX2Z1bGxfc2ssIGJwZl9za19yZWxlYXNlKSBhbmQgc29ja21hcCBsb29rdXAgZnVuY3Rpb25zIChzb2NrX21hcF9sb29rdXAsIHNvY2tfaGFzaF9sb29rdXApLiBJdCBlbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgaXMgYWx3YXlzIHRha2VuIGZvciBzb2NrZXRzIHJldHVybmVkIGJ5IGxvb2t1cHMgYW5kIHByb3Blcmx5IHJlbGVhc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBCUEYgcHJvZ3JhbXMgY2FsbGluZyB0aGVzZSBoZWxwZXJzIG9yIGludGVyYWN0aW5nIHdpdGggc29ja21hcHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTQ6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NTRlNTY3ZTBjMWE2MjZmYTgyNTgwZGRlNWQ1OTRlODc1NTBlZDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTQ6MTU6MjIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xuaW5kZXggYjQ0NmFhOGJlNWMzNzUuLjRiYzBiNTk2NjhmYWU1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZmlsdGVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jXG5AQCAtNzAyNyw2ICYjNDM7NzAyNywxMyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXG4gXHRcdFdBUk5fT05DRSgxLCBcJiMzNDtGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwmIzM0Oyk7XG4gXHRcdHNrID0gTlVMTDtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0LyogQWx3YXlzIHRha2UgYSByZWZlcmVuY2UsIGV2ZW4gaWYgdGhlIGxvb2t1cCBza2lwcGVkIG9uZTtcbiYjNDM7XHQgKiBicGZfc2tfcmVsZWFzZSgpIGFsd2F5cyBwdXRzIG9uZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2sgXHUwMDI2XHUwMDI2ICFyZWZjb3VudGVkIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4mIzQzO1x0XHRzayA9IE5VTEw7XG4mIzQzO1xuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbkBAIC03MDc0LDYgJiM0Mzs3MDgxLDMxIEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHJldHVybiBzaztcbiB9XG4gXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc29jayAqXG4mIzQzO2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7XG4mIzQzO1xuJiM0MztcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIHNrLVx1MDAzZXJza19saXN0ZW5lciwgbWFrZSBzdXJlIHRoZSBvcmlnaW5hbFxuJiM0MztcdCAqIHNrIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc2syICE9IHNrKSB7XG4mIzQzO1x0XHRzb2NrX2dlbl9wdXQoc2spO1xuJiM0MztcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuJiM0MztcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qIHNrMiBpcyBSQ1UtZnJlZSwgYnV0IHRha2UgYSByZWZlcmVuY2UgYW55d2F5O1xuJiM0MztcdFx0ICogYnBmX3NrX3JlbGVhc2UoKSBwdXRzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoc2syIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrMi1cdTAwM2Vza19yZWZjbnQpKVxuJiM0MztcdFx0XHRzazIgPSBOVUxMO1xuJiM0MztcdFx0c2sgPSBzazI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2s7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBzb2NrICpcbiBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG5AQCAtNzA4MywyMiAmIzQzOzcxMTUsOCBAQCBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0XHRcdFx0ICAgaWZpbmRleCwgcHJvdG8sIG5ldG5zX2lkLCBmbGFncyxcbiBcdFx0XHRcdFx0ICAgc2RpZik7XG4gXG4tXHRpZiAoc2spIHtcbi1cdFx0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xuLVxuLVx0XHQvKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiAoc2spLVx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xuLVx0XHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXG4tXHRcdCAqL1xuLVx0XHRpZiAoc2syICE9IHNrKSB7XG4tXHRcdFx0c29ja19nZW5fcHV0KHNrKTtcbi1cdFx0XHQvKiBFbnN1cmUgdGhlcmUgaXMgbm8gbmVlZCB0byBidW1wIHNrMiByZWZjbnQgKi9cbi1cdFx0XHRpZiAodW5saWtlbHkoc2syIFx1MDAyNlx1MDAyNiAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7XG4tXHRcdFx0XHRXQVJOX09OQ0UoMSwgXCYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcJiMzNDspO1xuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdFx0fVxuLVx0XHRcdHNrID0gc2syO1xuLVx0XHR9XG4tXHR9XG4mIzQzO1x0aWYgKHNrKVxuJiM0MztcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xuIFxuIFx0cmV0dXJuIHNrO1xuIH1cbkBAIC03MTI5LDIyICYjNDM7NzE0Nyw4IEBAIGJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxuIFx0XHRcdFx0XHQgZmxhZ3MpO1xuIFxuLVx0aWYgKHNrKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbi1cbi1cdFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2tcbi1cdFx0ICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHNrMiAhPSBzaykge1xuLVx0XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4tXHRcdFx0LyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuLVx0XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O0ZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXCYjMzQ7KTtcbi1cdFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRcdH1cbi1cdFx0XHRzayA9IHNrMjtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdGlmIChzaylcbiYjNDM7XHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbiBcbiBcdHJldHVybiBzaztcbiB9XG5AQCAtNzI4MCw3ICYjNDM7NzI4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XG4gXG4gQlBGX0NBTExfMShicGZfc2tfcmVsZWFzZSwgc3RydWN0IHNvY2sgKiwgc2spXG4ge1xuLVx0aWYgKHNrIFx1MDAyNlx1MDAyNiBza19pc19yZWZjb3VudGVkKHNrKSlcbiYjNDM7XHRpZiAoc2spXG4gXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTE1NzIsMTEgJiM0MzsxMTU3NiwxMyBAQCBCUEZfQ0FMTF80KHNrX3NlbGVjdF9yZXVzZXBvcnQsIHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqLCByZXVzZV9rZXJuLFxuIFx0Ym9vbCBpc19zb2NrYXJyYXkgPSBtYXAtXHUwMDNlbWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JFVVNFUE9SVF9TT0NLQVJSQVk7XG4gXHRzdHJ1Y3Qgc29ja19yZXVzZXBvcnQgKnJldXNlO1xuIFx0c3RydWN0IHNvY2sgKnNlbGVjdGVkX3NrO1xuLVx0aW50IGVycjtcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiBcbiBcdHNlbGVjdGVkX3NrID0gbWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFx0aWYgKCFzZWxlY3RlZF9zaylcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0aWYgKCFpc19zb2NrYXJyYXkpXG4mIzQzO1x0XHRzb2NrX3B1dChzZWxlY3RlZF9zayk7XG4gXG4gXHRyZXVzZSA9IHJjdV9kZXJlZmVyZW5jZShzZWxlY3RlZF9zay1cdTAwM2Vza19yZXVzZXBvcnRfY2IpO1xuIFx0aWYgKCFyZXVzZSkge1xuQEAgLTExNjA2LDEzICYjNDM7MTE2MTIsNyBAQCBCUEZfQ0FMTF80KHNrX3NlbGVjdF9yZXVzZXBvcnQsIHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqLCByZXVzZV9rZXJuLFxuIFx0fVxuIFxuIFx0cmV1c2Vfa2Vybi1cdTAwM2VzZWxlY3RlZF9zayA9IHNlbGVjdGVkX3NrO1xuLVxuLVx0cmV0dXJuIDA7XG4gZXJyb3I6XG4tXHQvKiBMb29rdXAgaW4gc29ja19tYXAgY2FuIHJldHVybiBUQ1AgRVNUQUJMSVNIRUQgc29ja2V0cy4gKi9cbi1cdGlmIChza19pc19yZWZjb3VudGVkKHNlbGVjdGVkX3NrKSlcbi1cdFx0c29ja19wdXQoc2VsZWN0ZWRfc2spO1xuLVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbmluZGV4IDllZmJkOGNhN2RiODMyLi5hZTE4ZGM0ZDYwZjkxNSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL3NvY2tfbWFwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcbkBAIC0zOTAsMTAgJiM0MzszOTAsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdHN0cnVjdCBzb2NrICpzaztcbiBcbiBcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbi1cdGlmICghc2spXG4tXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuJiM0MztcdGlmIChzaylcbiYjNDM7XHRcdHNvY2tfaG9sZChzayk7XG4gXHRyZXR1cm4gc2s7XG4gfVxuIFxuQEAgLTEyMTYsMTAgJiM0MzsxMjE0LDggQEAgc3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0c3RydWN0IHNvY2sgKnNrO1xuIFxuIFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4tXHRpZiAoIXNrKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRpZiAoc2spXG4mIzQzO1x0XHRzb2NrX2hvbGQoc2spO1xuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfc2tfbG9va3VwX2Z1bGxfc2smIzM0OywKICAgICYjMzQ7YnBmX3NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7c2tfc2VsZWN0X3JldXNlcG9ydCYjMzQ7LAogICAgJiMzNDtzb2NrX21hcF9sb29rdXAmIzM0OywKICAgICYjMzQ7c29ja19oYXNoX2xvb2t1cCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGluIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgKGUuZy4sIGJwZl9za19sb29rdXBfZnVsbF9zaywgYnBmX3NrX3JlbGVhc2UpIGFuZCBzb2NrbWFwIGxvb2t1cCBmdW5jdGlvbnMgKHNvY2tfbWFwX2xvb2t1cCwgc29ja19oYXNoX2xvb2t1cCkuIEl0IGVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBpcyBhbHdheXMgdGFrZW4gZm9yIHNvY2tldHMgcmV0dXJuZWQgYnkgbG9va3VwcyBhbmQgcHJvcGVybHkgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEJQRiBwcm9ncmFtcyBjYWxsaW5nIHRoZXNlIGhlbHBlcnMgb3IgaW50ZXJhY3Rpbmcgd2l0aCBzb2NrbWFwcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDU0ZTU2N2UwYzFhNjI2ZmE4MjU4MGRkZTVkNTk0ZTg3NTUwZWQyMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDI0IDE0OjE1OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCBiNDQ2YWE4YmU1YzM3NS4uNGJjMGI1OTY2OGZhZTUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC03MDI3LDYgJiM0Mzs3MDI3LDEzIEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwKIAkJV0FSTl9PTkNFKDEsICYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCEmIzM0Oyk7CiAJCXNrID0gTlVMTDsKIAl9CiYjNDM7CiYjNDM7CS8qIEFsd2F5cyB0YWtlIGEgcmVmZXJlbmNlLCBldmVuIGlmIHRoZSBsb29rdXAgc2tpcHBlZCBvbmU7CiYjNDM7CSAqIGJwZl9za19yZWxlYXNlKCkgYWx3YXlzIHB1dHMgb25lLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrICZhbXA7JmFtcDsgIXJlZmNvdW50ZWQgJmFtcDsmYW1wOyAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpCiYjNDM7CQlzayA9IE5VTEw7CiYjNDM7CiAJcmV0dXJuIHNrOwogfQogCkBAIC03MDc0LDYgJiM0Mzs3MDgxLDMxIEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbiwKIAlyZXR1cm4gc2s7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHNvY2sgKgomIzQzO2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7CiYjNDM7CiYjNDM7CS8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIHNrLSZndDtyc2tfbGlzdGVuZXIsIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwKJiM0MzsJICogc2sgc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLgomIzQzOwkgKi8KJiM0MzsJaWYgKHNrMiAhPSBzaykgewomIzQzOwkJc29ja19nZW5fcHV0KHNrKTsKJiM0MzsJCWlmICh1bmxpa2VseShzazIgJmFtcDsmYW1wOyAhc29ja19mbGFnKHNrMiwgU09DS19SQ1VfRlJFRSkpKSB7CiYjNDM7CQkJV0FSTl9PTkNFKDEsICYjMzQ7Rm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCEmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIE5VTEw7CiYjNDM7CQl9CiYjNDM7CQkvKiBzazIgaXMgUkNVLWZyZWUsIGJ1dCB0YWtlIGEgcmVmZXJlbmNlIGFueXdheTsKJiM0MzsJCSAqIGJwZl9za19yZWxlYXNlKCkgcHV0cy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKHNrMiAmYW1wOyZhbXA7ICFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtzazItJmd0O3NrX3JlZmNudCkpCiYjNDM7CQkJc2syID0gTlVMTDsKJiM0MzsJCXNrID0gc2syOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBzazsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IHNvY2sgKgogX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sCiAJCXN0cnVjdCBuZXQgKmNhbGxlcl9uZXQsIHUzMiBpZmluZGV4LCB1OCBwcm90bywgdTY0IG5ldG5zX2lkLApAQCAtNzA4MywyMiAmIzQzOzcxMTUsOCBAQCBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbiwKIAkJCQkJICAgaWZpbmRleCwgcHJvdG8sIG5ldG5zX2lkLCBmbGFncywKIAkJCQkJICAgc2RpZik7CiAKLQlpZiAoc2spIHsKLQkJc3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spOwotCi0JCS8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktJmd0O3Jza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBzawotCQkgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuCi0JCSAqLwotCQlpZiAoc2syICE9IHNrKSB7Ci0JCQlzb2NrX2dlbl9wdXQoc2spOwotCQkJLyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovCi0JCQlpZiAodW5saWtlbHkoc2syICZhbXA7JmFtcDsgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkgewotCQkJCVdBUk5fT05DRSgxLCAmIzM0O0ZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhJiMzNDspOwotCQkJCXJldHVybiBOVUxMOwotCQkJfQotCQkJc2sgPSBzazI7Ci0JCX0KLQl9CiYjNDM7CWlmIChzaykKJiM0MzsJCXNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTsKIAogCXJldHVybiBzazsKIH0KQEAgLTcxMjksMjIgJiM0Mzs3MTQ3LDggQEAgYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLAogCXN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLAogCQkJCQkgZmxhZ3MpOwogCi0JaWYgKHNrKSB7Ci0JCXN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTsKLQotCQkvKiBza190b19mdWxsX3NrKCkgbWF5IHJldHVybiAoc2spLSZndDtyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2sKLQkJICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLgotCQkgKi8KLQkJaWYgKHNrMiAhPSBzaykgewotCQkJc29ja19nZW5fcHV0KHNrKTsKLQkJCS8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqLwotCQkJaWYgKHVubGlrZWx5KHNrMiAmYW1wOyZhbXA7ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHsKLQkJCQlXQVJOX09OQ0UoMSwgJiMzNDtGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0ISYjMzQ7KTsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJCXNrID0gc2syOwotCQl9Ci0JfQomIzQzOwlpZiAoc2spCiYjNDM7CQlzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7CiAKIAlyZXR1cm4gc2s7CiB9CkBAIC03MjgwLDcgJiM0Mzs3Mjg0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3VkcF9wcm90byA9IHsKIAogQlBGX0NBTExfMShicGZfc2tfcmVsZWFzZSwgc3RydWN0IHNvY2sgKiwgc2spCiB7Ci0JaWYgKHNrICZhbXA7JmFtcDsgc2tfaXNfcmVmY291bnRlZChzaykpCiYjNDM7CWlmIChzaykKIAkJc29ja19nZW5fcHV0KHNrKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExNTcyLDExICYjNDM7MTE1NzYsMTMgQEAgQlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2VybiwKIAlib29sIGlzX3NvY2thcnJheSA9IG1hcC0mZ3Q7bWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1JFVVNFUE9SVF9TT0NLQVJSQVk7CiAJc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZTsKIAlzdHJ1Y3Qgc29jayAqc2VsZWN0ZWRfc2s7Ci0JaW50IGVycjsKJiM0MzsJaW50IGVyciA9IDA7CiAKIAlzZWxlY3RlZF9zayA9IG1hcC0mZ3Q7b3BzLSZndDttYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCWlmICghc2VsZWN0ZWRfc2spCiAJCXJldHVybiAtRU5PRU5UOwomIzQzOwlpZiAoIWlzX3NvY2thcnJheSkKJiM0MzsJCXNvY2tfcHV0KHNlbGVjdGVkX3NrKTsKIAogCXJldXNlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVjdGVkX3NrLSZndDtza19yZXVzZXBvcnRfY2IpOwogCWlmICghcmV1c2UpIHsKQEAgLTExNjA2LDEzICYjNDM7MTE2MTIsNyBAQCBCUEZfQ0FMTF80KHNrX3NlbGVjdF9yZXVzZXBvcnQsIHN0cnVjdCBza19yZXVzZXBvcnRfa2VybiAqLCByZXVzZV9rZXJuLAogCX0KIAogCXJldXNlX2tlcm4tJmd0O3NlbGVjdGVkX3NrID0gc2VsZWN0ZWRfc2s7Ci0KLQlyZXR1cm4gMDsKIGVycm9yOgotCS8qIExvb2t1cCBpbiBzb2NrX21hcCBjYW4gcmV0dXJuIFRDUCBFU1RBQkxJU0hFRCBzb2NrZXRzLiAqLwotCWlmIChza19pc19yZWZjb3VudGVkKHNlbGVjdGVkX3NrKSkKLQkJc29ja19wdXQoc2VsZWN0ZWRfc2spOwotCiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKaW5kZXggOWVmYmQ4Y2E3ZGI4MzIuLmFlMThkYzRkNjBmOTE1IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL3NvY2tfbWFwLmMKQEAgLTM5MCwxMCAmIzQzOzM5MCw4IEBAIHN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogCXN0cnVjdCBzb2NrICpzazsKIAogCXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTsKLQlpZiAoIXNrKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoc2tfaXNfcmVmY291bnRlZChzaykgJmFtcDsmYW1wOyAhcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7c2stJmd0O3NrX3JlZmNudCkpCi0JCXJldHVybiBOVUxMOwomIzQzOwlpZiAoc2spCiYjNDM7CQlzb2NrX2hvbGQoc2spOwogCXJldHVybiBzazsKIH0KIApAQCAtMTIxNiwxMCAmIzQzOzEyMTQsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiAJc3RydWN0IHNvY2sgKnNrOwogCiAJc2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7Ci0JaWYgKCFzaykKLQkJcmV0dXJuIE5VTEw7Ci0JaWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spICZhbXA7JmFtcDsgIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO3NrLSZndDtza19yZWZjbnQpKQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJaWYgKHNrKQomIzQzOwkJc29ja19ob2xkKHNrKTsKIAlyZXR1cm4gc2s7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBTb2NrZXQgUmVmZXJlbmNlIE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGFsdGVyaW5nIGhvdyBzb2NrZXQgcmVmZXJlbmNlcyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIEJQRiBzb2NrZXQgbG9va3VwIGZ1bmN0aW9ucy4gVGhpcyBhZmZlY3RzIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGBuZXQvY29yZS9zb2NrX21hcC5jYCwgcmlnaHQgYXQgdGhlIGhlYXJ0IG9mIEJQRiBuZXR3b3JraW5nIGxvZ2ljLiBUaGUga2V5IHNlZW1zIHRvIGJlIGEgY29uc2lzdGVudCBhcHByb2FjaCB0byByZWZlcmVuY2UgY291bnRpbmcuCgpFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGZvcmNlcyBhIHJlZmVyZW5jZSB0byBiZSB0YWtlbiBvbiAqZXZlcnkqIHNvY2tldCByZXR1cm5lZCBieSBgc2tfbG9va3VwYCBhbmQgYGJwZl9za19sb29rdXBfZnVsbF9za2AsIGFuZCBgYnBmX3NrX3JlbGVhc2VgIGFsd2F5cyAqcmVsZWFzZXMqIHRoYXQgcmVmZXJlbmNlIHdpdGhvdXQgYW55IGNvbmRpdGlvbmFsIGNoZWNrcyBhbnltb3JlLiBUaGlzIGlzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgY2hhbmdlLiBUaGVuIHRoZXJlIGFyZSBvdGhlciBjaGFuZ2VzIHdoaWNoIGFsd2F5cyBjYWxsIGBzb2NrX2hvbGQoc2spYCBvbiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLCBhbmQgZG9lc24mIzM5O3QgY2hlY2sgYHNrX2lzX3JlZmNvdW50ZWQoc2spYC4KCkZ1bmN0aW9uLXdpc2UsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzcGVjaWZpYyBCUEYtcmVsYXRlZCBlbnRyeSBwb2ludHM6IGBza19sb29rdXBgLCBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYF9fYnBmX3NrX2xvb2t1cGAsIGBicGZfc2tfbG9va3VwYCwgYGJwZl9za19yZWxlYXNlYCwgYHNrX3NlbGVjdF9yZXVzZXBvcnRgLCBgc29ja19tYXBfbG9va3VwYCwgYW5kIGBzb2NrX2hhc2hfbG9va3VwYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIGZvciBob3cgc29ja2V0cyBhcmUgZm91bmQgYW5kIG1hbmFnZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgb2J2aW91cywgYW5kIEkgc3VzcGVjdCBgQ09ORklHX0JQRl9TT0NLX0FERFJgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsaWtlbHkgaW4gdGhlIGBuZXQvY29yZS9maWx0ZXIuY2AgYW5kIGBuZXQvY29yZS9zb2NrX21hcC5jYCBmaWxlcyB0aGVtc2VsdmVzLCBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpPdmVyYWxsLCB0aGlzIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFpbXMgdG8gc29saWRpZnkgdGhlIHJlZmVyZW5jZSBjb3VudGluZyBzdHJhdGVneSwgcG90ZW50aWFsbHkgaW1wcm92aW5nIHN0YWJpbGl0eSBvciBwcmV2ZW50aW5nIHN1YnRsZSByZXNvdXJjZSBsZWFrcyB3aXRoaW4gdGhlIEJQRiBzb2NrZXQgbWFuYWdlbWVudC4gSSYjMzk7bGwgZGlnIGludG8gdGhlIGNvZGUgbW9yZSB0aG9yb3VnaGx5IHRvIHNlZSB0aGUgZGlyZWN0IGltcGFjdCBhbmQgcmF0aW9uYWxlIGZvciB0aGVzZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX2xvb2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2ZpbHRlci5jPTY5Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfbHd0X3NlZzZfYWRqdXN0X3NyaF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy02OTg5LSNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmM6Njk5MDpzdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXG5uZXQvY29yZS9maWx0ZXIuYy02OTkxLVx0XHRcdCAgICAgIGludCBkaWYsIGludCBzZGlmLCB1OCBmYW1pbHksIHU4IHByb3RvKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwNDQ9X19icGZfc2tjX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzAtXHRcdG5ldCA9IGNhbGxlcl9uZXQ7XG5uZXQvY29yZS9maWx0ZXIuYzo3MDcxOlx0XHRzayA9IHNrX2xvb2t1cChuZXQsIHR1cGxlLCBpZmluZGV4LCBzZGlmLCBmYW1pbHksIHByb3RvKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzItXHR9IGVsc2Uge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzUtXHRcdFx0Z290byBvdXQ7XG5uZXQvY29yZS9maWx0ZXIuYzo3MDc2Olx0XHRzayA9IHNrX2xvb2t1cChuZXQsIHR1cGxlLCBpZmluZGV4LCBzZGlmLCBmYW1pbHksIHByb3RvKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcwNzctXHRcdHB1dF9uZXQobmV0KTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MDg0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqXG5uZXQvY29yZS9maWx0ZXIuYzo3MDg1OmJwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXG5uZXQvY29yZS9maWx0ZXIuYy03MDg2LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTA5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqXG5uZXQvY29yZS9maWx0ZXIuYzo3MTEwOl9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxubmV0L2NvcmUvZmlsdGVyLmMtNzExMS1cdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzExOC1cdGlmIChzaylcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTk6XHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMjAtXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzE0Mz1zdGF0aWMgc3RydWN0IHNvY2sgKlxubmV0L2NvcmUvZmlsdGVyLmM6NzE0NDpicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXG5uZXQvY29yZS9maWx0ZXIuYy03MTQ1LVx0ICAgICAgdTggcHJvdG8sIHU2NCBuZXRuc19pZCwgdTY0IGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxNTAtXHRpZiAoc2spXG5uZXQvY29yZS9maWx0ZXIuYzo3MTUxOlx0XHRzayA9IGJwZl9za19sb29rdXBfZnVsbF9zayhzayk7XG5uZXQvY29yZS9maWx0ZXIuYy03MTUyLVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcxNjM9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE3NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjcxNzU6QlBGX0NBTExfNShicGZfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtNzE3Ni1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy03MTc3LXtcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNzg6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIElQUFJPVE9fVENQLFxubmV0L2NvcmUvZmlsdGVyLmMtNzE3OS1cdFx0XHRcdFx0ICAgIG5ldG5zX2lkLCBmbGFncyk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE4MS1cbm5ldC9jb3JlL2ZpbHRlci5jOjcxODI6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjcxODM6XHQuZnVuY1x0XHQ9IGJwZl9za19sb29rdXBfdGNwLFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTkzLVxubmV0L2NvcmUvZmlsdGVyLmM6NzE5NDpCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdWRwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03MTk1LVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTYte1xubmV0L2NvcmUvZmlsdGVyLmM6NzE5NzpcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgSVBQUk9UT19VRFAsXG5uZXQvY29yZS9maWx0ZXIuYy03MTk4LVx0XHRcdFx0XHQgICAgbmV0bnNfaWQsIGZsYWdzKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjAwLVxubmV0L2NvcmUvZmlsdGVyLmM6NzIwMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzIwMjpcdC5mdW5jXHRcdD0gYnBmX3NrX2xvb2t1cF91ZHAsXG5uZXQvY29yZS9maWx0ZXIuYy03MjAzLVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcyMjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzIzNi1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyMzc6QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3RjcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtNzIzOC1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI0My1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNDQ6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNDUtXHRcdFx0XHRcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVENQLCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjQ4LVxubmV0L2NvcmUvZmlsdGVyLmM6NzI0OTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdGNwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzI1MDpcdC5mdW5jXHRcdD0gYnBmX3RjX3NrX2xvb2t1cF90Y3AsXG5uZXQvY29yZS9maWx0ZXIuYy03MjUxLVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjAtXG5uZXQvY29yZS9maWx0ZXIuYzo3MjYxOkJQRl9DQUxMXzUoYnBmX3RjX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBza19idWZmICosIHNrYixcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjItXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjctXG5uZXQvY29yZS9maWx0ZXIuYzo3MjY4Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXG5uZXQvY29yZS9maWx0ZXIuYy03MjY5LVx0XHRcdFx0XHQgICAgICBpZmluZGV4LCBJUFBST1RPX1VEUCwgbmV0bnNfaWQsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI3Mi1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNzM6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNzQ6XHQuZnVuY1x0XHQ9IGJwZl90Y19za19sb29rdXBfdWRwLFxubmV0L2NvcmUvZmlsdGVyLmMtNzI3NS1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MjkyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX3JlbGVhc2VfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI5OC1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyOTk6QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy03MzAwLVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTMyLCBuZXRuc19pZCwgdTY0LCBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzA1LVxubmV0L2NvcmUvZmlsdGVyLmM6NzMwNjpcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMDctXHRcdFx0XHRcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzEwLVxubmV0L2NvcmUvZmlsdGVyLmM6NzMxMTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjczMTI6XHQuZnVuYyAgICAgICAgICAgPSBicGZfeGRwX3NrX2xvb2t1cF91ZHAsXG5uZXQvY29yZS9maWx0ZXIuYy03MzEzLVx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzMzNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzM0Ni1cbm5ldC9jb3JlL2ZpbHRlci5jOjczNDc6QlBGX0NBTExfNShicGZfeGRwX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCB4ZHBfYnVmZiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy03MzQ4LVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTMyLCBuZXRuc19pZCwgdTY0LCBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzUzLVxubmV0L2NvcmUvZmlsdGVyLmM6NzM1NDpcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNTUtXHRcdFx0XHRcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVENQLCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzU4LVxubmV0L2NvcmUvZmlsdGVyLmM6NzM1OTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl94ZHBfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjczNjA6XHQuZnVuYyAgICAgICAgICAgPSBicGZfeGRwX3NrX2xvb2t1cF90Y3AsXG5uZXQvY29yZS9maWx0ZXIuYy03MzYxLVx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzM4MD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tjX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzM5MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjczOTE6QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5Mi1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy03MzkzLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjczOTQ6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKE5VTEwsIHR1cGxlLCBsZW4sXG5uZXQvY29yZS9maWx0ZXIuYy03Mzk1LVx0XHRcdFx0XHQgICAgICBzb2NrX25ldChjdHgtXHUwMDNlc2spLCAwLCBJUFBST1RPX1RDUCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03Mzk4LVxubmV0L2NvcmUvZmlsdGVyLmM6NzM5OTpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MDA6XHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MDEtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzQwOS1cbm5ldC9jb3JlL2ZpbHRlci5jOjc0MTA6QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxubmV0L2NvcmUvZmlsdGVyLmMtNzQxMS1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG5uZXQvY29yZS9maWx0ZXIuYy03NDEyLXtcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MTM6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKE5VTEwsIHR1cGxlLCBsZW4sXG5uZXQvY29yZS9maWx0ZXIuYy03NDE0LVx0XHRcdFx0XHQgICAgICBzb2NrX25ldChjdHgtXHUwMDNlc2spLCAwLCBJUFBST1RPX1VEUCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03NDE3LVxubmV0L2NvcmUvZmlsdGVyLmM6NzQxODpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MTk6XHQuZnVuY1x0XHQ9IGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MjAtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODMwMD1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04MzIzLSNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNDpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjgzMjU6XHRcdHJldHVybiBcdTAwMjZicGZfc29ja19hZGRyX3NrX2xvb2t1cF90Y3BfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4MzI2Olx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNzpcdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjgtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQxMz1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NDQwLSNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MTpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDI6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3RjcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDM6XHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XG5uZXQvY29yZS9maWx0ZXIuYzo4NDQ0Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2xvb2t1cF91ZHBfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy04NDQ1LVx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTg0NjI9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg1NTktI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo4NTYwOlx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MTpcdFx0cmV0dXJuIFx1MDAyNmJwZl90Y19za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODU2MjpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg1NjM6XHRcdHJldHVybiBcdTAwMjZicGZfdGNfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg1NjQtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODU5OT14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NjI4LSNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmM6ODYyOTpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg2MzA6XHRcdHJldHVybiBcdTAwMjZicGZfeGRwX3NrX2xvb2t1cF91ZHBfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NjMxOlx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMjpcdFx0cmV0dXJuIFx1MDAyNmJwZl94ZHBfc2tfbG9va3VwX3RjcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MzMtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODc1Nj1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy04NzgxLSNpZmRlZiBDT05GSUdfSU5FVFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MjpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODM6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3RjcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODQ6XHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XG5uZXQvY29yZS9maWx0ZXIuYzo4Nzg1Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2xvb2t1cF91ZHBfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy04Nzg2LVx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExODA4PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfcmV1c2Vwb3J0X3Byb2dfb3BzID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODEwLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTE6REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYnBmX3NrX2xvb2t1cF9lbmFibGVkKTtcbm5ldC9jb3JlL2ZpbHRlci5jOjExODEyOkVYUE9SVF9TWU1CT0woYnBmX3NrX2xvb2t1cF9lbmFibGVkKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExODEzLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTQ6QlBGX0NBTExfMyhicGZfc2tfbG9va3VwX2Fzc2lnbiwgc3RydWN0IGJwZl9za19sb29rdXBfa2VybiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy0xMTgxNS1cdCAgIHN0cnVjdCBzb2NrICosIHNrLCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODQyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NDM6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExODQ0Olx0LmZ1bmNcdFx0PSBicGZfc2tfbG9va3VwX2Fzc2lnbixcbm5ldC9jb3JlL2ZpbHRlci5jLTExODQ1LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTExODUyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gKlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTM6c2tfbG9va3VwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg1NC17XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NTgtXHRjYXNlIEJQRl9GVU5DX3NrX2Fzc2lnbjpcbm5ldC9jb3JlL2ZpbHRlci5jOjExODU5Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NrX2xvb2t1cF9hc3NpZ25fcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2MC1cdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2Ni1cbm5ldC9jb3JlL2ZpbHRlci5jOjExODY3OnN0YXRpYyBib29sIHNrX2xvb2t1cF9pc192YWxpZF9hY2Nlc3MoaW50IG9mZiwgaW50IHNpemUsXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2OC1cdFx0XHRcdCAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzEte1xubmV0L2NvcmUvZmlsdGVyLmM6MTE4NzI6XHRpZiAob2ZmIFx1MDAzYyAwIHx8IG9mZiBcdTAwM2U9IHNpemVvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCkpXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg3My1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODc5LVx0c3dpdGNoIChvZmYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExODgwOlx0Y2FzZSBicGZfY3R4X3JhbmdlX3B0cihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgc2spOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE4ODEtXHRcdGluZm8tXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fU09DS0VUX09SX05VTEw7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4ODMtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NDpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgZmFtaWx5KTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg1Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NjpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNCk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NzpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg4Olx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODk6XHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA2WzBdLCBsb2NhbF9pcDZbM10pOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTA6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX3BvcnQpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTE6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGluZ3Jlc3NfaWZpbmRleCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTg5Mi1cdFx0YnBmX2N0eF9yZWNvcmRfZmllbGRfc2l6ZShpbmZvLCBzaXplb2YoX191MzIpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg5NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExODk1Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTg5Ni1cdFx0LyogQWxsb3cgNC1ieXRlIGFjY2VzcyB0byAyLWJ5dGUgZmllbGQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkwMS1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTAyOlx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpIC4uLlxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MDM6XHQgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDQpIC0gMTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTA0LVx0XHQvKiBBbGxvdyBhY2Nlc3MgdG8gemVybyBwYWRkaW5nIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTItXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkxMzpzdGF0aWMgdTMyIHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MoZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTE0LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgYnBmX2luc24gKnNpLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTIxLVx0c3dpdGNoIChzaS1cdTAwM2VvZmYpIHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTIyOlx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgc2spOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjMtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9TSVpFT0Yodm9pZCAqKSwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTI0Olx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybiwgc2VsZWN0ZWRfc2spKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTI1LVx0XHRicmVhaztcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTI2LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5Mjc6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjgtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5Mjk6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzAtXHRcdFx0XHRcdFx0ICAgICBmYW1pbHksIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzItXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkzMzpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHByb3RvY29sKTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTM0LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTM1Olx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTM2LVx0XHRcdFx0XHRcdCAgICAgcHJvdG9jb2wsIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzgtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkzOTpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDQpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDAtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDE6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDItXHRcdFx0XHRcdFx0ICAgICB2NC5zYWRkciwgNCwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0NC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTQ1Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ2LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfVywgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTQ3Olx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ4LVx0XHRcdFx0XHRcdCAgICAgdjQuZGFkZHIsIDQsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk1MTpcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTItXHRcdFx0XHRyZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKToge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTU1LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTY6XHRcdG9mZiAtPSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNlswXSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Ny1cdFx0b2ZmICYjNDM7PSBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgaW42X2FkZHIsIHM2X2FkZHIzMlswXSwgNCwgdGFyZ2V0X3NpemUpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTgtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9TSVpFT0Yodm9pZCAqKSwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTU5Olx0XHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2VybiwgdjYuc2FkZHIpKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTYwLVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBzaS1cdTAwM2Vkc3RfcmVnLCAwLCAxKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2Ni1cdH1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTY3Olx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2OC1cdFx0XHRcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTcxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzI6XHRcdG9mZiAtPSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA2WzBdKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTczLVx0XHRvZmYgJiM0Mzs9IGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBpbjZfYWRkciwgczZfYWRkcjMyWzBdLCA0LCB0YXJnZXRfc2l6ZSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk3NC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzU6XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5kYWRkcikpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzYtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHNpLVx1MDAzZWRzdF9yZWcsIDAsIDEpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTgyLVx0fVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODM6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk4NC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0gsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4NTpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk4Ni1cdFx0XHRcdFx0XHQgICAgIHNwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg4LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODk6XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5MC1cdFx0KnRhcmdldF9zaXplID0gMjtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5My1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTk0Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5NS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0gsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk5NjpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5Ny1cdFx0XHRcdFx0XHQgICAgIGRwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTk5LVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMDA6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBpbmdyZXNzX2lmaW5kZXgpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMDEtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMDI6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMDMtXHRcdFx0XHRcdFx0ICAgICBpbmdyZXNzX2lmaW5kZXgsIDQsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMDktXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxMDpjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfb3BzIHNrX2xvb2t1cF9wcm9nX29wcyA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDExOlx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTItfTtcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDEzLVxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTQ6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc2tfbG9va3VwX3ZlcmlmaWVyX29wcyA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE1Olx0LmdldF9mdW5jX3Byb3RvXHRcdD0gc2tfbG9va3VwX2Z1bmNfcHJvdG8sXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxNjpcdC5pc192YWxpZF9hY2Nlc3NcdD0gc2tfbG9va3VwX2lzX3ZhbGlkX2FjY2Vzcyxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE3Olx0LmNvbnZlcnRfY3R4X2FjY2Vzc1x0PSBza19sb29rdXBfY29udmVydF9jdHhfYWNjZXNzLFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTgtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ5NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNjb3BlIG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIHByZXR0eSBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc29ja2V0IGxvb2t1cCB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBgc2tfbG9va3VwYCBhbmQgYGJwZl9za19sb29rdXBfZnVsbF9za2AgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb29rdXAgbG9naWMgbGl2ZXMsIGFuZCB0aGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1bHRpbWF0ZWx5IGNhbGxlZCBieSB0aGUgQlBGLWV4cG9zZWQgaGVscGVyczogYF9fYnBmX3NrX2xvb2t1cGAgYW5kIGBicGZfc2tfbG9va3VwYC4gVGhlc2UgYXJlLCBpbiB0dXJuLCBjYWxsZWQgYnkgYWxsIHRob3NlIEJQRiBoZWxwZXJzIHdlIHVzZSBmb3IgZmluZGluZyBzb2NrZXRzIGxpa2UgYGJwZl9za19sb29rdXBfdGNwYCwgYGJwZl9za19sb29rdXBfdWRwYCwgYW5kIHRoZSBvdGhlcnMgdXNlZCBmb3IgdGMgYW5kIHhkcCwgYXMgd2VsbCBhcyB0aGUgc29ja2V0IGFkZHJlc3MgdmVyc2lvbnMuIEFuZCBsZXQmIzM5O3Mgbm90IGZvcmdldCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBicGZfc2tfcmVsZWFzZWAuIFRoaXMgaXMgYWxsIHN1Z2dlc3RpbmcgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgQlBGIGludGVyYWN0cyB3aXRoIHNvY2tldCBsb29rdXBzIGFuZCBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIEl0JiMzOTtzIGEgY3JpdGljYWwgYXJlYSwgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIG9uIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eS4KClRoZW4gSSBzZWUgaXQgYWxzbyB0b3VjaGVzIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGF0JiMzOTtzIHRoZSBzb2NrZXQgbWFwIGFuZCBzb2NrZXQgaGFzaCBtYXAgY29kZS4gRGVmaW5pdGVseSBnb2luZyB0byBjaGVjayB0aGF0IGFyZWEuIE5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbmV0L2NvcmUvc29ja19tYXAuY2AgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhvc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB0d2Vha2VkIGFuZCB3aGF0IGl0IG1lYW5zIGZvciBob3cgQlBGIGludGVyYWN0cyB3aXRoIHRoZXNlIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcF9sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9MzcyPXN0YXRpYyB2b2lkIHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3Moc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTM3Ni1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzc3OnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB1MzIga2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0zNzgte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzg3LVxubmV0L2NvcmUvc29ja19tYXAuYzozODg6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTM4OS17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0zOTEtXG5uZXQvY29yZS9zb2NrX21hcC5jOjM5MjpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkzLVx0aWYgKHNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk3LVxubmV0L2NvcmUvc29ja19tYXAuYzozOTg6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxubmV0L2NvcmUvc29ja19tYXAuYy0zOTkte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNDA0LVxubmV0L2NvcmUvc29ja19tYXAuYzo0MDU6XHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTQwNi1cdGlmICghc2spXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz02NDU9QlBGX0NBTExfNChicGZfc2tfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy02NTItXG5uZXQvY29yZS9zb2NrX21hcC5jOjY1MzpcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTY1NC1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3Mz1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTY4MC1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgxOlx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjgyLVx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9NzIxPXN0YXRpYyB2b2lkICpzb2NrX21hcF9zZXFfbG9va3VwX2VsZW0oc3RydWN0IHNvY2tfbWFwX3NlcV9pbmZvICppbmZvKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtNzI1LVxubmV0L2NvcmUvc29ja19tYXAuYzo3MjY6XHRpbmZvLVx1MDAzZXNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShpbmZvLVx1MDAzZW1hcCwgaW5mby1cdTAwM2VpbmRleCk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNy1cbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTgyOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODMzLVx0Lm1hcF9nZXRfbmV4dF9rZXlcdD0gc29ja19tYXBfZ2V0X25leHRfa2V5LFxubmV0L2NvcmUvc29ja19tYXAuYzo4MzQ6XHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM1LVx0Lm1hcF91cGRhdGVfZWxlbVx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODM2LVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODM3Olx0Lm1hcF9sb29rdXBfZWxlbVx0PSBzb2NrX21hcF9sb29rdXAsXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzOC1cdC5tYXBfcmVsZWFzZV91cmVmXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwODUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0IE1hcCBDaGFuZ2VzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBoaXR0aW5nIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgYG1hcF9sb29rdXBfZWxlbWAgb3BlcmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgYW5kIGBCUEZfTUFQX1RZUEVfU09DS0hBU0hgLiAgR2l2ZW4gbXkgZXhwZXJ0aXNlLCB0aGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaG93IHNvY2tldHMgYXJlIGJlaW5nIG1hbmFnZWQgd2l0aGluIHRoZSBCUEYgZnJhbWV3b3JrIGF0IHRoZSBjb3JlIGxldmVsLCB3aGljaCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgYW5kIGJlaGF2aW9yIG9mIGFueSBzb2NrZXQtcmVsYXRlZCBCUEYgcHJvZ3JhbS4gSXQmIzM5O3MgdGhlIHBsdW1iaW5nIHRoYXQgbWFrZXMgZXZlcnl0aGluZyB3b3JrLgoKSSBzZWUgdGhhdCBpdCBhbHNvIG1vZGlmaWVzIGBza19zZWxlY3RfcmV1c2Vwb3J0YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCBsaWtlbHkgYWZmZWN0cyBob3cgcmV1c2Vwb3J0IHNvY2tldHMgYXJlIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVzZSBtYXBzLiBBIGNoYW5nZSB0aGVyZSB1c3VhbGx5IGluZGljYXRlcyBpbXByb3ZlbWVudHMgb3IgdHdlYWtzIGluIGhvdyB0aGUga2VybmVsIHBpY2tzIHRoZSBjb3JyZWN0IHNvY2tldCB3aGVuIG11bHRpcGxlIHNvY2tldHMgYXJlIGJvdW5kIHRvIHRoZSBzYW1lIHBvcnQuCgpNeSBwcmltYXJ5IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBtb2RpZmljYXRpb25zIHRvIGBzb2NrX2hhc2hfbG9va3VwYCBpbiBgbmV0L2NvcmUvc29ja19tYXAuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGUgbG9va3VwIHByb2Nlc3MgZm9yIHNvY2tldHMgYm91bmQgdG8gdGhlc2UgaGFzaCBtYXBzIGlzIGNoYW5naW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvY2tfaGFzaF9sb29rdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9zb2NrX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL3NvY2tfbWFwLmM9ODc4PXN0YXRpYyBzdHJ1Y3QgYnBmX3NodGFiX2VsZW0gKlxubmV0L2NvcmUvc29ja19tYXAuYzo4Nzk6c29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgdTMyIGhhc2gsIHZvaWQgKmtleSxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODgwLVx0XHRcdCAgdTMyIGtleV9zaXplKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtODkyLVxubmV0L2NvcmUvc29ja19tYXAuYzo4OTM6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTg5NC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy05MDMtXHRidWNrZXQgPSBzb2NrX2hhc2hfc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTA0Olx0ZWxlbSA9IHNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoXHUwMDI2YnVja2V0LVx1MDAzZWhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xubmV0L2NvcmUvc29ja19tYXAuYy05MDUtXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz05MTY9c3RhdGljIHZvaWQgc29ja19oYXNoX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTMwLVx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJ1Y2tldC1cdTAwM2Vsb2NrKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTMxOlx0ZWxlbV9wcm9iZSA9IHNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoXHUwMDI2YnVja2V0LVx1MDAzZWhlYWQsIGVsZW0tXHUwMDNlaGFzaCxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTMyLVx0XHRcdFx0XHQgICAgICAgZWxlbS1cdTAwM2VrZXksIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz05NDE9c3RhdGljIGxvbmcgc29ja19oYXNoX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTk1Mi1cdHNwaW5fbG9ja19iaChcdTAwMjZidWNrZXQtXHUwMDNlbG9jayk7XG5uZXQvY29yZS9zb2NrX21hcC5jOjk1MzpcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFx1MDAyNmJ1Y2tldC1cdTAwM2VoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTU0LVx0aWYgKGVsZW0pIHtcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTk5MT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwMjAtXHRzcGluX2xvY2tfYmgoXHUwMDI2YnVja2V0LVx1MDAzZWxvY2spO1xubmV0L2NvcmUvc29ja19tYXAuYzoxMDIxOlx0ZWxlbSA9IHNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoXHUwMDI2YnVja2V0LVx1MDAzZWhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMDIyLVx0aWYgKGVsZW0gXHUwMDI2XHUwMDI2IGZsYWdzID09IEJQRl9OT0VYSVNUKSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMDU2PXN0YXRpYyBpbnQgc29ja19oYXNoX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMDY4LVx0aGVhZCA9IFx1MDAyNnNvY2tfaGFzaF9zZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpLVx1MDAzZWhlYWQ7XG5uZXQvY29yZS9zb2NrX21hcC5jOjEwNjk6XHRlbGVtID0gc29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTA3MC1cdGlmICghZWxlbSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTExNDQ9c3RhdGljIHZvaWQgc29ja19oYXNoX2ZyZWUoc3RydWN0IGJwZl9tYXAgKm1hcClcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTExOTYtXG5uZXQvY29yZS9zb2NrX21hcC5jOjExOTc6c3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXBfc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE5OC17XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjAzLVxubmV0L2NvcmUvc29ja19tYXAuYzoxMjA0Olx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMDUtXHRpZiAoIXNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxMS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIxMjpzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMTMte1xuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxNS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIxNjpcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xubmV0L2NvcmUvc29ja19tYXAuYy0xMjE3LVx0aWYgKHNrKVxuLS1cbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTI0OT1CUEZfQ0FMTF80KGJwZl9za19yZWRpcmVjdF9oYXNoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xMjU2LVxubmV0L2NvcmUvc29ja19tYXAuYzoxMjU3Olx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNTgtXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXG4tLVxubmV0L2NvcmUvc29ja19tYXAuYz0xMjc3PUJQRl9DQUxMXzQoYnBmX21zZ19yZWRpcmVjdF9oYXNoLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyODQtXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyODU6XHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI4Ni1cdGlmICh1bmxpa2VseSghc2sgfHwgIXNvY2tfbWFwX3JlZGlyZWN0X2FsbG93ZWQoc2spKSlcbi0tXG5uZXQvY29yZS9zb2NrX21hcC5jPTE0NDM9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHNvY2tfaGFzaF9vcHMgPSB7XG4tLVxubmV0L2NvcmUvc29ja19tYXAuYy0xNDQ5LVx0Lm1hcF9kZWxldGVfZWxlbVx0PSBzb2NrX2hhc2hfZGVsZXRlX2VsZW0sXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTA6XHQubWFwX2xvb2t1cF9lbGVtXHQ9IHNvY2tfaGFzaF9sb29rdXAsXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTE6XHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19oYXNoX2xvb2t1cF9zeXMsXG5uZXQvY29yZS9zb2NrX21hcC5jLTE0NTItXHQubWFwX3JlbGVhc2VfdXJlZlx0PSBzb2NrX2hhc2hfcmVsZWFzZV9wcm9ncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjA0NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiBlY29zeXN0ZW0uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdHdlYWtpbmcgYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCwgd2hpY2gsIGFzIHlvdSBrbm93LCBhcmUgY3JpdGljYWwgZm9yIHRoZSBgbWFwX2xvb2t1cF9lbGVtYCBvcGVyYXRpb25zIGZvciBgQlBGX01BUF9UWVBFX1NPQ0tNQVBgIGFuZCBgQlBGX01BUF9UWVBFX1NPQ0tIQVNIYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpbXBhY3Qgb24gaG93IHdlIGludGVyYWN0IHdpdGggYW5kIG1hbmFnZSBzb2NrZXRzIHVzaW5nIEJQRiBtYXBzLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBjaGFuZ2VzIHRvIGBza19zZWxlY3RfcmV1c2Vwb3J0YCwgd2hpY2ggaXMgYSBCUEYgaGVscGVyLiBUaGlzIGlzIHdvcnRoIGludmVzdGlnYXRpbmcgYmVjYXVzZSBhbnkgY2hhbmdlIGluIGhlbHBlcnMgaGFzIHJpcHBsZSBlZmZlY3RzIHRocm91Z2hvdXQgQlBGIHByb2dyYW1zLgoKVGhlIGF1dGhvciBtZW50aW9ucyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3M6IGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVGAuIEl0JiMzOTtzIHdvcnRoIGNvbnNpZGVyaW5nIHdoZXRoZXIgYENPTkZJR19CUEZfU1lTQ0FMTGAgKmFsb25lKiBpcyBzdWZmaWNpZW50IGZvciB0aGUgY2hhbmdlcy4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoYXQuIEkga25vdyB0aGF0IGBuZXQvY29yZS9zb2NrX21hcC5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIGFuZCB0aGF0IGZpbGUgaXMgd2hlcmUgdGhvc2UgZnVuY3Rpb25zIGFyZS4gQnV0IEkmIzM5O2xsIGRvdWJsZS1jaGVjayBieSBwb2tpbmcgYXJvdW5kIGluIGBuZXQvY29yZS9NYWtlZmlsZWAganVzdCB0byBiZSBjZXJ0YWluIHRoZXJlJiMzOTtzIG5vIHN1YnRsZSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfTkVUYCB0aGF0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLiBCZXR0ZXIgdG8gYmUgdGhvcm91Z2ggd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gQlBGLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2NrX21hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQ0PW9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG5uZXQvY29yZS9NYWtlZmlsZTo0NTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vXG5uZXQvY29yZS9NYWtlZmlsZS00Ni1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfc2tfc3RvcmFnZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjIyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgQlBGIGFuZCBSZXVzZXBvcnQgQ29tcGF0aWJpbGl0eSoqCgpBbHJpZ2h0LCB0aGUgcmVxdWlyZW1lbnQgZm9yIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGEgZ2l2ZW4g4oCTIHRoYXQmIzM5O3MgZnVuZGFtZW50YWwgZm9yIGFueSBzZXJpb3VzIEJQRiBhcHBsaWNhdGlvbi4gQnV0IG5vdyBJIG5lZWQgdG8gZGl2ZSBhIGxpdHRsZSBkZWVwZXIsIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCBtZXNoZXMgd2l0aCBzb21lIG90aGVyIGFzcGVjdHMgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgYHNrX3NlbGVjdF9yZXVzZXBvcnRgLiBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQgaGFzIHRvIGJlIGluIHBsYXkgaGVyZSwgc2luY2UgdGhpcyBpcyBhbGwgYWJvdXQgc29ja2V0LWxldmVsIHN0dWZmLiBMZXQgbWUgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgZGVmaW5lZCBhZ2Fpbi4uLiBhaCwgcmlnaHQsIGl0JiMzOTtzIHNpdHRpbmcgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCBmaWxlIGxvY2F0aW9uIG1ha2VzIHNlbnNlLiBUaGlzIGlzIGdvb2QsIGl0JiMzOTtzIGEgY3JpdGljYWwgcGF0aCB0byBleHBsb3JlLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byBjb25maXJtIGFzc3VtcHRpb25zIGFib3V0IHRoZSBpbnRlcmFjdGlvbiBvZiB0aG9zZSB0d28gZWxlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrX3NlbGVjdF9yZXVzZXBvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9maWx0ZXIuYz0xMTU1Nj1zdHJ1Y3Qgc29jayAqYnBmX3J1bl9za19yZXVzZXBvcnQoc3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZSwgc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExNTcyLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE1NzM6QlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTc0LVx0ICAgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB2b2lkICosIGtleSwgdTMyLCBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTYxOC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExNjE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfc2VsZWN0X3JldXNlcG9ydF9wcm90byA9IHtcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjIwOlx0LmZ1bmMgICAgICAgICAgID0gc2tfc2VsZWN0X3JldXNlcG9ydCxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjIxLVx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE2NjY9c2tfcmV1c2Vwb3J0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExNjY5LVx0c3dpdGNoIChmdW5jX2lkKSB7XG5uZXQvY29yZS9maWx0ZXIuYzoxMTY3MDpcdGNhc2UgQlBGX0ZVTkNfc2tfc2VsZWN0X3JldXNlcG9ydDpcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjcxOlx0XHRyZXR1cm4gXHUwMDI2c2tfc2VsZWN0X3JldXNlcG9ydF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjcyLVx0Y2FzZSBCUEZfRlVOQ19za2JfbG9hZF9ieXRlczpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyNzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU0tfUkVVU0VQT1JUIEJQRiBIZWxwZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBza19zZWxlY3RfcmV1c2Vwb3J0YCDigJMgdGhhdCYjMzk7cyB0aGUgQlBGIGhlbHBlciBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIGBCUEZfUFJPR19UWVBFX1NLX1JFVVNFUE9SVGAgcHJvZ3JhbXMuIFRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gdW5kZXJzdGFuZCB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgdGhpcyB0byBmdW5jdGlvbiBjb3JyZWN0bHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBSaWdodCBhd2F5LCBJIHNlZSBgQ09ORklHX0JQRl9TWVNDQUxMYCBhbmQgYENPTkZJR19ORVRgIGFyZSBjcnVjaWFsLgoKTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHNvdXJjZSBhbmQgY3Jvc3MgcmVmZXJlbmNlIHRoZSBjb25maWcgb3B0aW9ucywgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBiZXR0ZXIgc2Vuc2UgZnJvbSBsb29raW5nIGludG8gYG5ldC9jb3JlL2ZpbHRlci5jYC4gR2l2ZW4gdGhhdCBgbmV0L2NvcmUvZmlsdGVyLmNgIGdldHMgY29tcGlsZWQgb25seSB3aGVuIGBDT05GSUdfTkVUYCBpcyBzZXQsIHRoYXQmIzM5O3MgYSBnb29kIHNpZ24uIEZ1cnRoZXJtb3JlLCBJIHNlZSB0aGF0IHRoZSBgc2tfbG9va3VwYCBmdW5jdGlvbiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYCBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGAjaWZkZWYgQ09ORklHX0lORVRgLiBUaGlzIGltcGxpZXMgdGhhdCBgc2tfbG9va3VwYCBhbmQsIHBvdGVudGlhbGx5LCByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgYXJlIHRpZWQgaW50byB0aGUgYnJvYWRlciBUQ1AvSVAgc3RhY2sgY29uZmlndXJhdGlvbiwgd2hpY2ggaXNuJiMzOTt0IGVudGlyZWx5IHN1cnByaXNpbmcgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBzb2NrZXQtYmFzZWQgcmV1c2Vwb3J0IHNjZW5hcmlvcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2tfbG9va3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZmlsdGVyLmM9Njk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTY5ODktI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo2OTkwOnN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTY5OTEtXHRcdFx0ICAgICAgaW50IGRpZiwgaW50IHNkaWYsIHU4IGZhbWlseSwgdTggcHJvdG8pXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzA0ND1fX2JwZl9za2NfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA3MC1cdFx0bmV0ID0gY2FsbGVyX25ldDtcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNzE6XHRcdHNrID0gc2tfbG9va3VwKG5ldCwgdHVwbGUsIGlmaW5kZXgsIHNkaWYsIGZhbWlseSwgcHJvdG8pO1xubmV0L2NvcmUvZmlsdGVyLmMtNzA3Mi1cdH0gZWxzZSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzA3NS1cdFx0XHRnb3RvIG91dDtcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNzY6XHRcdHNrID0gc2tfbG9va3VwKG5ldCwgdHVwbGUsIGlmaW5kZXgsIHNkaWYsIGZhbWlseSwgcHJvdG8pO1xubmV0L2NvcmUvZmlsdGVyLmMtNzA3Ny1cdFx0cHV0X25ldChuZXQpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcwODQ9c3RhdGljIHN0cnVjdCBzb2NrICpcbm5ldC9jb3JlL2ZpbHRlci5jOjcwODU6YnBmX3NrX2xvb2t1cF9mdWxsX3NrKHN0cnVjdCBzb2NrICpzaylcbm5ldC9jb3JlL2ZpbHRlci5jLTcwODYte1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcxMDk9c3RhdGljIHN0cnVjdCBzb2NrICpcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTA6X19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXG5uZXQvY29yZS9maWx0ZXIuYy03MTExLVx0XHRzdHJ1Y3QgbmV0ICpjYWxsZXJfbmV0LCB1MzIgaWZpbmRleCwgdTggcHJvdG8sIHU2NCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTE4LVx0aWYgKHNrKVxubmV0L2NvcmUvZmlsdGVyLmM6NzExOTpcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xubmV0L2NvcmUvZmlsdGVyLmMtNzEyMC1cbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MTQzPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXG5uZXQvY29yZS9maWx0ZXIuYzo3MTQ0OmJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNDUtXHQgICAgICB1OCBwcm90bywgdTY0IG5ldG5zX2lkLCB1NjQgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzE1MC1cdGlmIChzaylcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNTE6XHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNTItXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzE2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTc0LVxubmV0L2NvcmUvZmlsdGVyLmM6NzE3NTpCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03MTc2LVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzcte1xubmV0L2NvcmUvZmlsdGVyLmM6NzE3ODpcdHJldHVybiAodW5zaWduZWQgbG9uZylicGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgSVBQUk9UT19UQ1AsXG5uZXQvY29yZS9maWx0ZXIuYy03MTc5LVx0XHRcdFx0XHQgICAgbmV0bnNfaWQsIGZsYWdzKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MTgxLVxubmV0L2NvcmUvZmlsdGVyLmM6NzE4MjpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzE4MzpcdC5mdW5jXHRcdD0gYnBmX3NrX2xvb2t1cF90Y3AsXG5uZXQvY29yZS9maWx0ZXIuYy03MTg0LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTMtXG5uZXQvY29yZS9maWx0ZXIuYzo3MTk0OkJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBza19idWZmICosIHNrYixcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTUtXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxubmV0L2NvcmUvZmlsdGVyLmMtNzE5Ni17XG5uZXQvY29yZS9maWx0ZXIuYzo3MTk3Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWJwZl9za19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBJUFBST1RPX1VEUCxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTgtXHRcdFx0XHRcdCAgICBuZXRuc19pZCwgZmxhZ3MpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyMDAtXG5uZXQvY29yZS9maWx0ZXIuYzo3MjAxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzo3MjAyOlx0LmZ1bmNcdFx0PSBicGZfc2tfbG9va3VwX3VkcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyMDMtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9NzIyNT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjM2LVxubmV0L2NvcmUvZmlsdGVyLmM6NzIzNzpCUEZfQ0FMTF81KGJwZl90Y19za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXG5uZXQvY29yZS9maWx0ZXIuYy03MjM4LVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjQzLVxubmV0L2NvcmUvZmlsdGVyLmM6NzI0NDpcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxubmV0L2NvcmUvZmlsdGVyLmMtNzI0NS1cdFx0XHRcdFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTcyNDgtXG5uZXQvY29yZS9maWx0ZXIuYzo3MjQ5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XG5uZXQvY29yZS9maWx0ZXIuYzo3MjUwOlx0LmZ1bmNcdFx0PSBicGZfdGNfc2tfbG9va3VwX3RjcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNTEtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI2MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjE6QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3VkcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxubmV0L2NvcmUvZmlsdGVyLmMtNzI2Mi1cdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtNzI2Ny1cbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjg6XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjktXHRcdFx0XHRcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MjcyLVxubmV0L2NvcmUvZmlsdGVyLmM6NzI3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzI3NDpcdC5mdW5jXHRcdD0gYnBmX3RjX3NrX2xvb2t1cF91ZHAsXG5uZXQvY29yZS9maWx0ZXIuYy03Mjc1LVx0LmdwbF9vbmx5XHQ9IGZhbHNlLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jPTcyOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfcmVsZWFzZV9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03Mjk4LVxubmV0L2NvcmUvZmlsdGVyLmM6NzI5OTpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3VkcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMDAtXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1MzIsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczMDUtXG5uZXQvY29yZS9maWx0ZXIuYzo3MzA2Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxubmV0L2NvcmUvZmlsdGVyLmMtNzMwNy1cdFx0XHRcdFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19VRFAsIG5ldG5zX2lkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczMTAtXG5uZXQvY29yZS9maWx0ZXIuYzo3MzExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdWRwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzMxMjpcdC5mdW5jICAgICAgICAgICA9IGJwZl94ZHBfc2tfbG9va3VwX3VkcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMTMtXHQuZ3BsX29ubHkgICAgICAgPSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzQ2LVxubmV0L2NvcmUvZmlsdGVyLmM6NzM0NzpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3RjcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNDgtXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1MzIsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczNTMtXG5uZXQvY29yZS9maWx0ZXIuYzo3MzU0Olx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxubmV0L2NvcmUvZmlsdGVyLmMtNzM1NS1cdFx0XHRcdFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczNTgtXG5uZXQvY29yZS9maWx0ZXIuYzo3MzU5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzM2MDpcdC5mdW5jICAgICAgICAgICA9IGJwZl94ZHBfc2tfbG9va3VwX3RjcCxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNjEtXHQuZ3BsX29ubHkgICAgICAgPSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz03MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03MzkwLVxubmV0L2NvcmUvZmlsdGVyLmM6NzM5MTpCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy03MzkyLVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTMte1xubmV0L2NvcmUvZmlsdGVyLmM6NzM5NDpcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbixcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTUtXHRcdFx0XHRcdCAgICAgIHNvY2tfbmV0KGN0eC1cdTAwM2VzayksIDAsIElQUFJPVE9fVENQLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTczOTgtXG5uZXQvY29yZS9maWx0ZXIuYzo3Mzk5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzQwMDpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwLFxubmV0L2NvcmUvZmlsdGVyLmMtNzQwMS1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy03NDA5LVxubmV0L2NvcmUvZmlsdGVyLmM6NzQxMDpCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXG5uZXQvY29yZS9maWx0ZXIuYy03NDExLVx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTIte1xubmV0L2NvcmUvZmlsdGVyLmM6NzQxMzpcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbixcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTQtXHRcdFx0XHRcdCAgICAgIHNvY2tfbmV0KGN0eC1cdTAwM2VzayksIDAsIElQUFJPVE9fVURQLFxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTctXG5uZXQvY29yZS9maWx0ZXIuYzo3NDE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6NzQxOTpcdC5mdW5jXHRcdD0gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwLFxubmV0L2NvcmUvZmlsdGVyLmMtNzQyMC1cdC5ncGxfb25seVx0PSBmYWxzZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04MzAwPXNvY2tfYWRkcl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjMtI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo4MzI0Olx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNTpcdFx0cmV0dXJuIFx1MDAyNmJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjgzMjY6XHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XG5uZXQvY29yZS9maWx0ZXIuYzo4MzI3Olx0XHRyZXR1cm4gXHUwMDI2YnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODMyOC1cdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NDEzPWNnX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg0NDAtI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo4NDQxOlx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MjpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MzpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDQ6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg0NDUtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9ODQ2Mj10Y19jbHNfYWN0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtODU1OS0jaWZkZWYgQ09ORklHX0lORVRcbm5ldC9jb3JlL2ZpbHRlci5jOjg1NjA6XHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG5uZXQvY29yZS9maWx0ZXIuYzo4NTYxOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG87XG5uZXQvY29yZS9maWx0ZXIuYzo4NTYyOlx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MzpcdFx0cmV0dXJuIFx1MDAyNmJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODU2NC1cdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NTk5PXhkcF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg2MjgtI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo4NjI5Olx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMDpcdFx0cmV0dXJuIFx1MDAyNmJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jOjg2MzE6XHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XG5uZXQvY29yZS9maWx0ZXIuYzo4NjMyOlx0XHRyZXR1cm4gXHUwMDI2YnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmMtODYzMy1cdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcbi0tXG5uZXQvY29yZS9maWx0ZXIuYz04NzU2PXNrX3NrYl9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODEtI2lmZGVmIENPTkZJR19JTkVUXG5uZXQvY29yZS9maWx0ZXIuYzo4NzgyOlx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdGNwOlxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MzpcdFx0cmV0dXJuIFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xubmV0L2NvcmUvZmlsdGVyLmM6ODc4NDpcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODU6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODYtXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE4MDg9Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19yZXVzZXBvcnRfcHJvZ19vcHMgPSB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTAtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTgxMTpERUZJTkVfU1RBVElDX0tFWV9GQUxTRShicGZfc2tfbG9va3VwX2VuYWJsZWQpO1xubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTI6RVhQT1JUX1NZTUJPTChicGZfc2tfbG9va3VwX2VuYWJsZWQpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTMtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTgxNDpCUEZfQ0FMTF8zKGJwZl9za19sb29rdXBfYXNzaWduLCBzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuICosIGN0eCxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODE1LVx0ICAgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NDItXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg0MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE4NDQ6XHQuZnVuY1x0XHQ9IGJwZl9za19sb29rdXBfYXNzaWduLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NDUtXHQuZ3BsX29ubHlcdD0gZmFsc2UsXG4tLVxubmV0L2NvcmUvZmlsdGVyLmM9MTE4NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg1Mzpza19sb29rdXBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL2ZpbHRlci5jLTExODU0LXtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg1OC1cdGNhc2UgQlBGX0ZVTkNfc2tfYXNzaWduOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTk6XHRcdHJldHVybiBcdTAwMjZicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90bztcbm5ldC9jb3JlL2ZpbHRlci5jLTExODYwLVx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODY2LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE4Njc6c3RhdGljIGJvb2wgc2tfbG9va3VwX2lzX3ZhbGlkX2FjY2VzcyhpbnQgb2ZmLCBpbnQgc2l6ZSxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODY4LVx0XHRcdFx0ICAgICAgZW51bSBicGZfYWNjZXNzX3R5cGUgdHlwZSxcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg3MS17XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg3MjpcdGlmIChvZmYgXHUwMDNjIDAgfHwgb2ZmIFx1MDAzZT0gc2l6ZW9mKHN0cnVjdCBicGZfc2tfbG9va3VwKSlcbm5ldC9jb3JlL2ZpbHRlci5jLTExODczLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzktXHRzd2l0Y2ggKG9mZikge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODA6XHRjYXNlIGJwZl9jdHhfcmFuZ2VfcHRyKHN0cnVjdCBicGZfc2tfbG9va3VwLCBzayk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTg4MS1cdFx0aW5mby1cdTAwM2VyZWdfdHlwZSA9IFBUUl9UT19TT0NLRVRfT1JfTlVMTDtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg4My1cbm5ldC9jb3JlL2ZpbHRlci5jOjExODg0Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODU6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIHByb3RvY29sKTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg2Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA0KTpcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg3Olx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDQpOlxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODg6XHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNlswXSwgcmVtb3RlX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4OTpcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0sIGxvY2FsX2lwNlszXSk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5MDpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5MTpcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgaW5ncmVzc19pZmluZGV4KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExODkyLVx0XHRicGZfY3R4X3JlY29yZF9maWVsZF9zaXplKGluZm8sIHNpemVvZihfX3UzMikpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExODk0LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTU6XHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExODk2LVx0XHQvKiBBbGxvdyA0LWJ5dGUgYWNjZXNzIHRvIDItYnl0ZSBmaWVsZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTAxLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MDI6XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCkgLi4uXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkwMzpcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNCkgLSAxOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MDQtXHRcdC8qIEFsbG93IGFjY2VzcyB0byB6ZXJvIHBhZGRpbmcgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi9cbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkxMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTEzOnN0YXRpYyB1MzIgc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyhlbnVtIGJwZl9hY2Nlc3NfdHlwZSB0eXBlLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTQtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBicGZfaW5zbiAqc2ksXG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjEtXHRzd2l0Y2ggKHNpLVx1MDAzZW9mZikge1xubmV0L2NvcmUvZmlsdGVyLmM6MTE5MjI6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBzayk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyMy1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MjQ6XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCBzZWxlY3RlZF9zaykpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjUtXHRcdGJyZWFrO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5MjYtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkyNzpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIGZhbWlseSk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyOC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0gsIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkyOTpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzMC1cdFx0XHRcdFx0XHQgICAgIGZhbWlseSwgMiwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzMi1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTMzOlx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcHJvdG9jb2wpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzQtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MzU6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzYtXHRcdFx0XHRcdFx0ICAgICBwcm90b2NvbCwgMiwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzOC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTM5Olx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0MC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk0MTpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Mi1cdFx0XHRcdFx0XHQgICAgIHY0LnNhZGRyLCA0LCB0YXJnZXRfc2l6ZSkpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ0LVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDU6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDQpOlxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDYtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDc6XHRcdFx0XHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDgtXHRcdFx0XHRcdFx0ICAgICB2NC5kYWRkciwgNCwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1MC1cbm5ldC9jb3JlL2ZpbHRlci5jOjExOTUxOlx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Mi1cdFx0XHRcdHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOiB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTUtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk1NjpcdFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA2WzBdKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTU3LVx0XHRvZmYgJiM0Mzs9IGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBpbjZfYWRkciwgczZfYWRkcjMyWzBdLCA0LCB0YXJnZXRfc2l6ZSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1OC1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cdTAwM2Vkc3RfcmVnLCBzaS1cdTAwM2VzcmNfcmVnLFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTk6XHRcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5zYWRkcikpO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5NjAtXHRcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHNpLVx1MDAzZWRzdF9yZWcsIDAsIDEpO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTY2LVx0fVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5Njc6XHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTY4LVx0XHRcdFx0bG9jYWxfaXA2WzBdLCBsb2NhbF9pcDZbM10pOiB7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzEtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3MjpcdFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0pO1xubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzMtXHRcdG9mZiAmIzQzOz0gYnBmX3RhcmdldF9vZmYoc3RydWN0IGluNl9hZGRyLCBzNl9hZGRyMzJbMF0sIDQsIHRhcmdldF9zaXplKTtcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTc0LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHZvaWQgKiksIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NTpcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sIHY2LmRhZGRyKSk7XG5uZXQvY29yZS9maWx0ZXIuYy0xMTk3Ni1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgc2ktXHUwMDNlZHN0X3JlZywgMCwgMSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODItXHR9XG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4MzpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg0LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg1Olx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg2LVx0XHRcdFx0XHRcdCAgICAgc3BvcnQsIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODgtXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk4OTpcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTkwLVx0XHQqdGFyZ2V0X3NpemUgPSAyO1xuLS1cbm5ldC9jb3JlL2ZpbHRlci5jLTExOTkzLVxubmV0L2NvcmUvZmlsdGVyLmM6MTE5OTQ6XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9wb3J0KTpcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTk1LVx0XHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXHUwMDNlZHN0X3JlZywgc2ktXHUwMDNlc3JjX3JlZyxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTk2Olx0XHRcdFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybixcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTk3LVx0XHRcdFx0XHRcdCAgICAgZHBvcnQsIDIsIHRhcmdldF9zaXplKSk7XG4tLVxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTktXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAwMDpcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIGluZ3Jlc3NfaWZpbmRleCk6XG5uZXQvY29yZS9maWx0ZXIuYy0xMjAwMS1cdFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVx1MDAzZWRzdF9yZWcsIHNpLVx1MDAzZXNyY19yZWcsXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAwMjpcdFx0XHRcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAwMy1cdFx0XHRcdFx0XHQgICAgIGluZ3Jlc3NfaWZpbmRleCwgNCwgdGFyZ2V0X3NpemUpKTtcbi0tXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAwOS1cbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDEwOmNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfbG9va3VwX3Byb2dfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTE6XHQudGVzdF9ydW4gPSBicGZfcHJvZ190ZXN0X3J1bl9za19sb29rdXAsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxMi19O1xubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTMtXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxNDpjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBza19sb29rdXBfdmVyaWZpZXJfb3BzID0ge1xubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTU6XHQuZ2V0X2Z1bmNfcHJvdG9cdFx0PSBza19sb29rdXBfZnVuY19wcm90byxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE2Olx0LmlzX3ZhbGlkX2FjY2Vzc1x0PSBza19sb29rdXBfaXNfdmFsaWRfYWNjZXNzLFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTc6XHQuY29udmVydF9jdHhfYWNjZXNzXHQ9IHNrX2xvb2t1cF9jb252ZXJ0X2N0eF9hY2Nlc3MsXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxOC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTU1NgoJCQkJCQkJb3V0cHV0OiAxOTMKCQkJCQkJCXRob3VnaHRzOiA3NzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEJQRiBTb2NrZXQgTG9va3VwIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSB0aGF0IGBDT05GSUdfSU5FVGAgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBza19sb29rdXBgLiBNeSBmb2N1cyBpcyBvbiB0aGUgZnVuY3Rpb25zIHRoaXMgcGF0Y2ggdG91Y2hlczogYGJwZl9za19sb29rdXBfdGNwYCwgYGJwZl9za19sb29rdXBfdWRwYCwgYGJwZl90Y19za19sb29rdXBfdGNwYCwgYGJwZl90Y19za19sb29rdXBfdWRwYCwgYGJwZl94ZHBfc2tfbG9va3VwX3RjcGAsIGBicGZfeGRwX3NrX2xvb2t1cF91ZHBgLCBgYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwYCwgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcGAsIGFuZCBgYnBmX3NrX3JlbGVhc2VgLiBUaGVzZSBhcmUgYWxsIEJQRiBoZWxwZXJzLCBzbyBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBzeW1ib2xzLiBJbml0aWFsbHksIEkgdGhvdWdodCBhYm91dCBgc2tfbG9va3VwYCwgYGJwZl9za19sb29rdXBfZnVsbF9za2AsIGBfX2JwZl9za19sb29rdXBgLCBgYnBmX3NrX2xvb2t1cGAsIGBicGZfc2tfcmVsZWFzZWAsIGBza19zZWxlY3RfcmV1c2Vwb3J0YCwgYHNvY2tfbWFwX2xvb2t1cGAsIGFuZCBgc29ja19oYXNoX2xvb2t1cGAuCgpIYW5nIG9uLCBgc2tfbG9va3VwYCBpcyBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIHVuaXF1ZSBpZGVudGlmaWNhdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgYHNrX2xvb2t1cGAgaW1wbGVtZW50YXRpb25zIGluIHRoZSBrZXJuZWwuLi4geWVwLCB0aGVyZSBhcmUgcXVpdGUgYSBmZXcuIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgIG1pZ2h0IGJlIGJldHRlci4gQW5kIGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAgYXJlIGFsc28gc3RhdGljIGluIGBuZXQvY29yZS9maWx0ZXIuY2AuIGBicGZfc2tfcmVsZWFzZWAgaXMgYSBCUEYgaGVscGVyLCBhbmQgYHNrX3NlbGVjdF9yZXVzZXBvcnRgIGlzIGFsc28gYSBCUEYgaGVscGVyLiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBzdGF0aWMgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLgoKT2theSwgbGV0JiMzOTtzIHNlZSBpZiBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGFyZSBzdWZmaWNpZW50bHkgdW5pcXVlIHRvIHJlcHJlc2VudCB0aGUgc29ja21hcCBhc3BlY3Qgb2YgdGhpcyBwYXRjaD8gR29vZCwgdGhleSBhcmUuIEFuZCBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYD8gWWVzLCBpdCBhcHBlYXJzIHRvIGJlIGEgdW5pcXVlIGZ1bmN0aW9uLCBwcm9iYWJseSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgdmVyeSBwYXRjaC4gQW5kIHdoYXQgYWJvdXQgYHNrX3NlbGVjdF9yZXVzZXBvcnRgPyBZZXAsIGl0JiMzOTtzIGEgdW5pcXVlIEJQRiBoZWxwZXIuCgpTbywgdGhlIGRlZmluaXRpdmUgZm9jdXMgc3ltYm9scyBmb3IgYW5hbHlzaXMgYXJlOgoKKiAgIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgCiogICBgYnBmX3NrX3JlbGVhc2VgCiogICBgc2tfc2VsZWN0X3JldXNlcG9ydGAKKiAgIGBzb2NrX21hcF9sb29rdXBgCiogICBgc29ja19oYXNoX2xvb2t1cGAKCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gc2VlaW5nOiBgQlBGX1NZU0NBTExgLCBgTkVUYCwgYW5kIGBJTkVUYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGRvdWJsZS1jaGVjay4uLiBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBlbm91Z2ggZm9yIGBzb2NrX21hcC5jYC4gYENPTkZJR19JTkVUYCBjb3ZlcnMgYHNrX2xvb2t1cGAgYW5kIHRoZSBCUEYgaGVscGVycyBpbiBgZmlsdGVyLmNgLiBBbmQgbmF0dXJhbGx5LCBgQ09ORklHX05FVGAgaXMgcmVxdWlyZWQgZm9yIG5ldHdvcmtpbmcuCgpMZXQgbWUgc3VtbWFyaXplIG15IHJlYXNvbmluZyBzdWNjaW5jdGx5OiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIHdpdGhpbiBCUEYgc29ja2V0IGxvb2t1cCBoZWxwZXJzIChgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYGJwZl9za19yZWxlYXNlYCksIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzb2NrbWFwIGxvb2t1cHMgKGBzb2NrX21hcF9sb29rdXBgLCBgc29ja19oYXNoX2xvb2t1cGApLiBJdCBhcHBlYXJzIHRvIGd1YXJhbnRlZSBjb3JyZWN0IHNvY2tldCByZWZlcmVuY2UgaGFuZGxpbmcgZHVyaW5nIGxvb2t1cHMgYW5kIHJlbGVhc2VzLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMsIHBvdGVudGlhbGx5IHJlYWNoZWQgdGhyb3VnaCBwcm9ncmFtcyBjYWxsaW5nIHRoZXNlIGhlbHBlcnMgb3IgaW50ZXJhY3Rpbmcgd2l0aCBzb2NrbWFwcy4KCk5vdywgbGV0JiMzOTtzIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDE0OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za19sb29rdXBfZnVsbF9zayYjMzQ7LAogICAgJiMzNDticGZfc2tfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtza19zZWxlY3RfcmV1c2Vwb3J0JiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtzb2NrX2hhc2hfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgaW4gQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyAoZS5nLiwgYnBmX3NrX2xvb2t1cF9mdWxsX3NrLCBicGZfc2tfcmVsZWFzZSkgYW5kIHNvY2ttYXAgbG9va3VwIGZ1bmN0aW9ucyAoc29ja19tYXBfbG9va3VwLCBzb2NrX2hhc2hfbG9va3VwKS4gSXQgZW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIGlzIGFsd2F5cyB0YWtlbiBmb3Igc29ja2V0cyByZXR1cm5lZCBieSBsb29rdXBzIGFuZCBwcm9wZXJseSByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgdGhlc2UgaGVscGVycyBvciBpbnRlcmFjdGluZyB3aXRoIHNvY2ttYXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9za19sb29rdXBfZnVsbF9zayYjMzQ7LAogICAgJiMzNDticGZfc2tfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtza19zZWxlY3RfcmV1c2Vwb3J0JiMzNDssCiAgICAmIzM0O3NvY2tfbWFwX2xvb2t1cCYjMzQ7LAogICAgJiMzNDtzb2NrX2hhc2hfbG9va3VwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgaW4gQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyAoZS5nLiwgYnBmX3NrX2xvb2t1cF9mdWxsX3NrLCBicGZfc2tfcmVsZWFzZSkgYW5kIHNvY2ttYXAgbG9va3VwIGZ1bmN0aW9ucyAoc29ja19tYXBfbG9va3VwLCBzb2NrX2hhc2hfbG9va3VwKS4gSXQgZW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIGlzIGFsd2F5cyB0YWtlbiBmb3Igc29ja2V0cyByZXR1cm5lZCBieSBsb29rdXBzIGFuZCBwcm9wZXJseSByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgdGhlc2UgaGVscGVycyBvciBpbnRlcmFjdGluZyB3aXRoIHNvY2ttYXBzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjRUMTQ6MTU6MjMuNjgxMzQwNjgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDAzNjc2NzU0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIklORVRcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9za19sb29rdXBfZnVsbF9za1wiLFxuICAgIFwiYnBmX3NrX3JlbGVhc2VcIixcbiAgICBcInNrX3NlbGVjdF9yZXVzZXBvcnRcIixcbiAgICBcInNvY2tfbWFwX2xvb2t1cFwiLFxuICAgIFwic29ja19oYXNoX2xvb2t1cFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcgbG9naWMgaW4gQlBGIHNvY2tldCBsb29rdXAgaGVscGVycyAoZS5nLiwgYnBmX3NrX2xvb2t1cF9mdWxsX3NrLCBicGZfc2tfcmVsZWFzZSkgYW5kIHNvY2ttYXAgbG9va3VwIGZ1bmN0aW9ucyAoc29ja19tYXBfbG9va3VwLCBzb2NrX2hhc2hfbG9va3VwKS4gSXQgZW5zdXJlcyB0aGF0IGEgcmVmZXJlbmNlIGlzIGFsd2F5cyB0YWtlbiBmb3Igc29ja2V0cyByZXR1cm5lZCBieSBsb29rdXBzIGFuZCBwcm9wZXJseSByZWxlYXNlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCB2aWEgQlBGIHByb2dyYW1zIGNhbGxpbmcgdGhlc2UgaGVscGVycyBvciBpbnRlcmFjdGluZyB3aXRoIHNvY2ttYXBzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNToyMy42ODEzNDYwNDNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NDg2NTU2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ1NGU1NjdlMGMxYTYyNmZhODI1ODBkZGU1ZDU5NGU4NzU1MGVkMjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTQ6MTU6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuY1xcbmluZGV4IGI0NDZhYThiZTVjMzc1Li40YmMwYjU5NjY4ZmFlNSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xcbisrKyBiL25ldC9jb3JlL2ZpbHRlci5jXFxuQEAgLTcwMjcsNiArNzAyNywxMyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKnNrX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsXFxuIFxcdFxcdFdBUk5fT05DRSgxLCBcXFwiRm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcXFwiKTtcXG4gXFx0XFx0c2sgPSBOVUxMO1xcbiBcXHR9XFxuK1xcbitcXHQvKiBBbHdheXMgdGFrZSBhIHJlZmVyZW5jZSwgZXZlbiBpZiB0aGUgbG9va3VwIHNraXBwZWQgb25lO1xcbitcXHQgKiBicGZfc2tfcmVsZWFzZSgpIGFsd2F5cyBwdXRzIG9uZS5cXG4rXFx0ICovXFxuK1xcdGlmIChzayBcXHUwMDI2XFx1MDAyNiAhcmVmY291bnRlZCBcXHUwMDI2XFx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFxcdTAwMjZzay1cXHUwMDNlc2tfcmVmY250KSlcXG4rXFx0XFx0c2sgPSBOVUxMO1xcbitcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuIFxcbkBAIC03MDc0LDYgKzcwODEsMzEgQEAgX19icGZfc2tjX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxcbiBcXHRyZXR1cm4gc2s7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qgc29jayAqXFxuK2JwZl9za19sb29rdXBfZnVsbF9zayhzdHJ1Y3Qgc29jayAqc2spXFxuK3tcXG4rXFx0c3RydWN0IHNvY2sgKnNrMiA9IHNrX3RvX2Z1bGxfc2soc2spO1xcbitcXG4rXFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gc2stXFx1MDAzZXJza19saXN0ZW5lciwgbWFrZSBzdXJlIHRoZSBvcmlnaW5hbFxcbitcXHQgKiBzayBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2syICE9IHNrKSB7XFxuK1xcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuK1xcdFxcdGlmICh1bmxpa2VseShzazIgXFx1MDAyNlxcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xcbitcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIkZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHR9XFxuK1xcdFxcdC8qIHNrMiBpcyBSQ1UtZnJlZSwgYnV0IHRha2UgYSByZWZlcmVuY2UgYW55d2F5O1xcbitcXHRcXHQgKiBicGZfc2tfcmVsZWFzZSgpIHB1dHMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoc2syIFxcdTAwMjZcXHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrMi1cXHUwMDNlc2tfcmVmY250KSlcXG4rXFx0XFx0XFx0c2syID0gTlVMTDtcXG4rXFx0XFx0c2sgPSBzazI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBzaztcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBzb2NrICpcXG4gX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdFxcdHN0cnVjdCBuZXQgKmNhbGxlcl9uZXQsIHUzMiBpZmluZGV4LCB1OCBwcm90bywgdTY0IG5ldG5zX2lkLFxcbkBAIC03MDgzLDIyICs3MTE1LDggQEAgX19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGlmaW5kZXgsIHByb3RvLCBuZXRuc19pZCwgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNkaWYpO1xcbiBcXG4tXFx0aWYgKHNrKSB7XFxuLVxcdFxcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcXG4tXFxuLVxcdFxcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXFx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xcbi1cXHRcXHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoc2syICE9IHNrKSB7XFxuLVxcdFxcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuLVxcdFxcdFxcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xcbi1cXHRcXHRcXHRpZiAodW5saWtlbHkoc2syIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzayA9IHNrMjtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdGlmIChzaylcXG4rXFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbiBcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuQEAgLTcxMjksMjIgKzcxNDcsOCBAQCBicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuIFxcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxcbiBcXHRcXHRcXHRcXHRcXHQgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKHNrKSB7XFxuLVxcdFxcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcXG4tXFxuLVxcdFxcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXFx1MDAzZXJza19saXN0ZW5lciwgc28gbWFrZSBzdXJlIHRoZSBvcmlnaW5hbCBza1xcbi1cXHRcXHQgKiBzb2NrIHJlZmNudCBpcyBkZWNyZW1lbnRlZCB0byBwcmV2ZW50IGEgcmVxdWVzdF9zb2NrIGxlYWsuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoc2syICE9IHNrKSB7XFxuLVxcdFxcdFxcdHNvY2tfZ2VuX3B1dChzayk7XFxuLVxcdFxcdFxcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xcbi1cXHRcXHRcXHRpZiAodW5saWtlbHkoc2syIFxcdTAwMjZcXHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcXG4tXFx0XFx0XFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVxcXCIpO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRzayA9IHNrMjtcXG4tXFx0XFx0fVxcbi1cXHR9XFxuK1xcdGlmIChzaylcXG4rXFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbiBcXG4gXFx0cmV0dXJuIHNrO1xcbiB9XFxuQEAgLTcyODAsNyArNzI4NCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrX2xvb2t1cF91ZHBfcHJvdG8gPSB7XFxuIFxcbiBCUEZfQ0FMTF8xKGJwZl9za19yZWxlYXNlLCBzdHJ1Y3Qgc29jayAqLCBzaylcXG4ge1xcbi1cXHRpZiAoc2sgXFx1MDAyNlxcdTAwMjYgc2tfaXNfcmVmY291bnRlZChzaykpXFxuK1xcdGlmIChzaylcXG4gXFx0XFx0c29ja19nZW5fcHV0KHNrKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTE1NzIsMTEgKzExNTc2LDEzIEBAIEJQRl9DQUxMXzQoc2tfc2VsZWN0X3JldXNlcG9ydCwgc3RydWN0IHNrX3JldXNlcG9ydF9rZXJuICosIHJldXNlX2tlcm4sXFxuIFxcdGJvb2wgaXNfc29ja2FycmF5ID0gbWFwLVxcdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkVVU0VQT1JUX1NPQ0tBUlJBWTtcXG4gXFx0c3RydWN0IHNvY2tfcmV1c2Vwb3J0ICpyZXVzZTtcXG4gXFx0c3RydWN0IHNvY2sgKnNlbGVjdGVkX3NrO1xcbi1cXHRpbnQgZXJyO1xcbitcXHRpbnQgZXJyID0gMDtcXG4gXFxuIFxcdHNlbGVjdGVkX3NrID0gbWFwLVxcdTAwM2VvcHMtXFx1MDAzZW1hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxuIFxcdGlmICghc2VsZWN0ZWRfc2spXFxuIFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRpZiAoIWlzX3NvY2thcnJheSlcXG4rXFx0XFx0c29ja19wdXQoc2VsZWN0ZWRfc2spO1xcbiBcXG4gXFx0cmV1c2UgPSByY3VfZGVyZWZlcmVuY2Uoc2VsZWN0ZWRfc2stXFx1MDAzZXNrX3JldXNlcG9ydF9jYik7XFxuIFxcdGlmICghcmV1c2UpIHtcXG5AQCAtMTE2MDYsMTMgKzExNjEyLDcgQEAgQlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2VybixcXG4gXFx0fVxcbiBcXG4gXFx0cmV1c2Vfa2Vybi1cXHUwMDNlc2VsZWN0ZWRfc2sgPSBzZWxlY3RlZF9zaztcXG4tXFxuLVxcdHJldHVybiAwO1xcbiBlcnJvcjpcXG4tXFx0LyogTG9va3VwIGluIHNvY2tfbWFwIGNhbiByZXR1cm4gVENQIEVTVEFCTElTSEVEIHNvY2tldHMuICovXFxuLVxcdGlmIChza19pc19yZWZjb3VudGVkKHNlbGVjdGVkX3NrKSlcXG4tXFx0XFx0c29ja19wdXQoc2VsZWN0ZWRfc2spO1xcbi1cXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29ja19tYXAuYyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5pbmRleCA5ZWZiZDhjYTdkYjgzMi4uYWUxOGRjNGQ2MGY5MTUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvc29ja19tYXAuY1xcbisrKyBiL25ldC9jb3JlL3NvY2tfbWFwLmNcXG5AQCAtMzkwLDEwICszOTAsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFx0c3RydWN0IHNvY2sgKnNrO1xcbiBcXG4gXFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbi1cXHRpZiAoIXNrKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFxcdTAwMjZcXHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrLVxcdTAwM2Vza19yZWZjbnQpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0aWYgKHNrKVxcbitcXHRcXHRzb2NrX2hvbGQoc2spO1xcbiBcXHRyZXR1cm4gc2s7XFxuIH1cXG4gXFxuQEAgLTEyMTYsMTAgKzEyMTQsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIFxcdHN0cnVjdCBzb2NrICpzaztcXG4gXFxuIFxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbi1cXHRpZiAoIXNrKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tXFx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFxcdTAwMjZcXHUwMDI2ICFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNrLVxcdTAwM2Vza19yZWZjbnQpKVxcbi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFx0aWYgKHNrKVxcbitcXHRcXHRzb2NrX2hvbGQoc2spO1xcbiBcXHRyZXR1cm4gc2s7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjI0LjA2Njg0ODI4MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjM5OTgyMTU5NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tfbG9va3VwX2Z1bGxfc2tcIixcbiAgICBcImJwZl9za19yZWxlYXNlXCIsXG4gICAgXCJza19zZWxlY3RfcmV1c2Vwb3J0XCIsXG4gICAgXCJzb2NrX21hcF9sb29rdXBcIixcbiAgICBcInNvY2tfaGFzaF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGluIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgKGUuZy4sIGJwZl9za19sb29rdXBfZnVsbF9zaywgYnBmX3NrX3JlbGVhc2UpIGFuZCBzb2NrbWFwIGxvb2t1cCBmdW5jdGlvbnMgKHNvY2tfbWFwX2xvb2t1cCwgc29ja19oYXNoX2xvb2t1cCkuIEl0IGVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBpcyBhbHdheXMgdGFrZW4gZm9yIHNvY2tldHMgcmV0dXJuZWQgYnkgbG9va3VwcyBhbmQgcHJvcGVybHkgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEJQRiBwcm9ncmFtcyBjYWxsaW5nIHRoZXNlIGhlbHBlcnMgb3IgaW50ZXJhY3Rpbmcgd2l0aCBzb2NrbWFwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0NTRlNTY3ZTBjMWE2MjZmYTgyNTgwZGRlNWQ1OTRlODc1NTBlZDIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMTQ6MTU6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jXG5pbmRleCBiNDQ2YWE4YmU1YzM3NS4uNGJjMGI1OTY2OGZhZTUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9maWx0ZXIuY1xuKysrIGIvbmV0L2NvcmUvZmlsdGVyLmNcbkBAIC03MDI3LDYgKzcwMjcsMTMgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpza19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLFxuIFx0XHRXQVJOX09OQ0UoMSwgXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwiKTtcbiBcdFx0c2sgPSBOVUxMO1xuIFx0fVxuK1xuK1x0LyogQWx3YXlzIHRha2UgYSByZWZlcmVuY2UsIGV2ZW4gaWYgdGhlIGxvb2t1cCBza2lwcGVkIG9uZTtcbitcdCAqIGJwZl9za19yZWxlYXNlKCkgYWx3YXlzIHB1dHMgb25lLlxuK1x0ICovXG4rXHRpZiAoc2sgXHUwMDI2XHUwMDI2ICFyZWZjb3VudGVkIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4rXHRcdHNrID0gTlVMTDtcbitcbiBcdHJldHVybiBzaztcbiB9XG4gXG5AQCAtNzA3NCw2ICs3MDgxLDMxIEBAIF9fYnBmX3NrY19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHJldHVybiBzaztcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBzb2NrICpcbiticGZfc2tfbG9va3VwX2Z1bGxfc2soc3RydWN0IHNvY2sgKnNrKVxuK3tcbitcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbitcbitcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIHNrLVx1MDAzZXJza19saXN0ZW5lciwgbWFrZSBzdXJlIHRoZSBvcmlnaW5hbFxuK1x0ICogc2sgc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuK1x0ICovXG4rXHRpZiAoc2syICE9IHNrKSB7XG4rXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4rXHRcdGlmICh1bmxpa2VseShzazIgXHUwMDI2XHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcbitcdFx0XHRXQVJOX09OQ0UoMSwgXCJGb3VuZCBub24tUkNVLCB1bnJlZmVyZW5jZWQgc29ja2V0IVwiKTtcbitcdFx0XHRyZXR1cm4gTlVMTDtcbitcdFx0fVxuK1x0XHQvKiBzazIgaXMgUkNVLWZyZWUsIGJ1dCB0YWtlIGEgcmVmZXJlbmNlIGFueXdheTtcbitcdFx0ICogYnBmX3NrX3JlbGVhc2UoKSBwdXRzLlxuK1x0XHQgKi9cbitcdFx0aWYgKHNrMiBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzazItXHUwMDNlc2tfcmVmY250KSlcbitcdFx0XHRzazIgPSBOVUxMO1xuK1x0XHRzayA9IHNrMjtcbitcdH1cbitcbitcdHJldHVybiBzaztcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBzb2NrICpcbiBfX2JwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdFx0c3RydWN0IG5ldCAqY2FsbGVyX25ldCwgdTMyIGlmaW5kZXgsIHU4IHByb3RvLCB1NjQgbmV0bnNfaWQsXG5AQCAtNzA4MywyMiArNzExNSw4IEBAIF9fYnBmX3NrX2xvb2t1cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKnR1cGxlLCB1MzIgbGVuLFxuIFx0XHRcdFx0XHQgICBpZmluZGV4LCBwcm90bywgbmV0bnNfaWQsIGZsYWdzLFxuIFx0XHRcdFx0XHQgICBzZGlmKTtcbiBcbi1cdGlmIChzaykge1xuLVx0XHRzdHJ1Y3Qgc29jayAqc2syID0gc2tfdG9fZnVsbF9zayhzayk7XG4tXG4tXHRcdC8qIHNrX3RvX2Z1bGxfc2soKSBtYXkgcmV0dXJuIChzayktXHUwMDNlcnNrX2xpc3RlbmVyLCBzbyBtYWtlIHN1cmUgdGhlIG9yaWdpbmFsIHNrXG4tXHRcdCAqIHNvY2sgcmVmY250IGlzIGRlY3JlbWVudGVkIHRvIHByZXZlbnQgYSByZXF1ZXN0X3NvY2sgbGVhay5cbi1cdFx0ICovXG4tXHRcdGlmIChzazIgIT0gc2spIHtcbi1cdFx0XHRzb2NrX2dlbl9wdXQoc2spO1xuLVx0XHRcdC8qIEVuc3VyZSB0aGVyZSBpcyBubyBuZWVkIHRvIGJ1bXAgc2syIHJlZmNudCAqL1xuLVx0XHRcdGlmICh1bmxpa2VseShzazIgXHUwMDI2XHUwMDI2ICFzb2NrX2ZsYWcoc2syLCBTT0NLX1JDVV9GUkVFKSkpIHtcbi1cdFx0XHRcdFdBUk5fT05DRSgxLCBcIkZvdW5kIG5vbi1SQ1UsIHVucmVmZXJlbmNlZCBzb2NrZXQhXCIpO1xuLVx0XHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdFx0fVxuLVx0XHRcdHNrID0gc2syO1xuLVx0XHR9XG4tXHR9XG4rXHRpZiAoc2spXG4rXHRcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcbiBcbiBcdHJldHVybiBzaztcbiB9XG5AQCAtNzEyOSwyMiArNzE0Nyw4IEBAIGJwZl9za19sb29rdXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSwgdTMyIGxlbixcbiBcdHN0cnVjdCBzb2NrICpzayA9IGJwZl9za2NfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgcHJvdG8sIG5ldG5zX2lkLFxuIFx0XHRcdFx0XHQgZmxhZ3MpO1xuIFxuLVx0aWYgKHNrKSB7XG4tXHRcdHN0cnVjdCBzb2NrICpzazIgPSBza190b19mdWxsX3NrKHNrKTtcbi1cbi1cdFx0Lyogc2tfdG9fZnVsbF9zaygpIG1heSByZXR1cm4gKHNrKS1cdTAwM2Vyc2tfbGlzdGVuZXIsIHNvIG1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgc2tcbi1cdFx0ICogc29jayByZWZjbnQgaXMgZGVjcmVtZW50ZWQgdG8gcHJldmVudCBhIHJlcXVlc3Rfc29jayBsZWFrLlxuLVx0XHQgKi9cbi1cdFx0aWYgKHNrMiAhPSBzaykge1xuLVx0XHRcdHNvY2tfZ2VuX3B1dChzayk7XG4tXHRcdFx0LyogRW5zdXJlIHRoZXJlIGlzIG5vIG5lZWQgdG8gYnVtcCBzazIgcmVmY250ICovXG4tXHRcdFx0aWYgKHVubGlrZWx5KHNrMiBcdTAwMjZcdTAwMjYgIXNvY2tfZmxhZyhzazIsIFNPQ0tfUkNVX0ZSRUUpKSkge1xuLVx0XHRcdFx0V0FSTl9PTkNFKDEsIFwiRm91bmQgbm9uLVJDVSwgdW5yZWZlcmVuY2VkIHNvY2tldCFcIik7XG4tXHRcdFx0XHRyZXR1cm4gTlVMTDtcbi1cdFx0XHR9XG4tXHRcdFx0c2sgPSBzazI7XG4tXHRcdH1cbi1cdH1cbitcdGlmIChzaylcbitcdFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xuIFxuIFx0cmV0dXJuIHNrO1xuIH1cbkBAIC03MjgwLDcgKzcyODQsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xuIFxuIEJQRl9DQUxMXzEoYnBmX3NrX3JlbGVhc2UsIHN0cnVjdCBzb2NrICosIHNrKVxuIHtcbi1cdGlmIChzayBcdTAwMjZcdTAwMjYgc2tfaXNfcmVmY291bnRlZChzaykpXG4rXHRpZiAoc2spXG4gXHRcdHNvY2tfZ2VuX3B1dChzayk7XG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMTE1NzIsMTEgKzExNTc2LDEzIEBAIEJQRl9DQUxMXzQoc2tfc2VsZWN0X3JldXNlcG9ydCwgc3RydWN0IHNrX3JldXNlcG9ydF9rZXJuICosIHJldXNlX2tlcm4sXG4gXHRib29sIGlzX3NvY2thcnJheSA9IG1hcC1cdTAwM2VtYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUkVVU0VQT1JUX1NPQ0tBUlJBWTtcbiBcdHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2U7XG4gXHRzdHJ1Y3Qgc29jayAqc2VsZWN0ZWRfc2s7XG4tXHRpbnQgZXJyO1xuK1x0aW50IGVyciA9IDA7XG4gXG4gXHRzZWxlY3RlZF9zayA9IG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmICghc2VsZWN0ZWRfc2spXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0aWYgKCFpc19zb2NrYXJyYXkpXG4rXHRcdHNvY2tfcHV0KHNlbGVjdGVkX3NrKTtcbiBcbiBcdHJldXNlID0gcmN1X2RlcmVmZXJlbmNlKHNlbGVjdGVkX3NrLVx1MDAzZXNrX3JldXNlcG9ydF9jYik7XG4gXHRpZiAoIXJldXNlKSB7XG5AQCAtMTE2MDYsMTMgKzExNjEyLDcgQEAgQlBGX0NBTExfNChza19zZWxlY3RfcmV1c2Vwb3J0LCBzdHJ1Y3Qgc2tfcmV1c2Vwb3J0X2tlcm4gKiwgcmV1c2Vfa2VybixcbiBcdH1cbiBcbiBcdHJldXNlX2tlcm4tXHUwMDNlc2VsZWN0ZWRfc2sgPSBzZWxlY3RlZF9zaztcbi1cbi1cdHJldHVybiAwO1xuIGVycm9yOlxuLVx0LyogTG9va3VwIGluIHNvY2tfbWFwIGNhbiByZXR1cm4gVENQIEVTVEFCTElTSEVEIHNvY2tldHMuICovXG4tXHRpZiAoc2tfaXNfcmVmY291bnRlZChzZWxlY3RlZF9zaykpXG4tXHRcdHNvY2tfcHV0KHNlbGVjdGVkX3NrKTtcbi1cbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2tfbWFwLmMgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5pbmRleCA5ZWZiZDhjYTdkYjgzMi4uYWUxOGRjNGQ2MGY5MTUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9zb2NrX21hcC5jXG4rKysgYi9uZXQvY29yZS9zb2NrX21hcC5jXG5AQCAtMzkwLDEwICszOTAsOCBAQCBzdGF0aWMgdm9pZCAqc29ja19tYXBfbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdHN0cnVjdCBzb2NrICpzaztcbiBcbiBcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsICoodTMyICopa2V5KTtcbi1cdGlmICghc2spXG4tXHRcdHJldHVybiBOVUxMO1xuLVx0aWYgKHNrX2lzX3JlZmNvdW50ZWQoc2spIFx1MDAyNlx1MDAyNiAhcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNrLVx1MDAzZXNrX3JlZmNudCkpXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0aWYgKHNrKVxuK1x0XHRzb2NrX2hvbGQoc2spO1xuIFx0cmV0dXJuIHNrO1xuIH1cbiBcbkBAIC0xMjE2LDEwICsxMjE0LDggQEAgc3RhdGljIHZvaWQgKnNvY2tfaGFzaF9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0c3RydWN0IHNvY2sgKnNrO1xuIFxuIFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4tXHRpZiAoIXNrKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cdGlmIChza19pc19yZWZjb3VudGVkKHNrKSBcdTAwMjZcdTAwMjYgIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzay1cdTAwM2Vza19yZWZjbnQpKVxuLVx0XHRyZXR1cm4gTlVMTDtcbitcdGlmIChzaylcbitcdFx0c29ja19ob2xkKHNrKTtcbiBcdHJldHVybiBzaztcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNToyNC4wNjY4NDk3NjJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODAxMDY2Mzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIFNvY2tldCBSZWZlcmVuY2UgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCdzIGZ1bmRhbWVudGFsbHkgYWx0ZXJpbmcgaG93IHNvY2tldCByZWZlcmVuY2VzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgQlBGIHNvY2tldCBsb29rdXAgZnVuY3Rpb25zLiBUaGlzIGFmZmVjdHMgYG5ldC9jb3JlL2ZpbHRlci5jYCBhbmQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgLCByaWdodCBhdCB0aGUgaGVhcnQgb2YgQlBGIG5ldHdvcmtpbmcgbG9naWMuIFRoZSBrZXkgc2VlbXMgdG8gYmUgYSBjb25zaXN0ZW50IGFwcHJvYWNoIHRvIHJlZmVyZW5jZSBjb3VudGluZy5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBmb3JjZXMgYSByZWZlcmVuY2UgdG8gYmUgdGFrZW4gb24gKmV2ZXJ5KiBzb2NrZXQgcmV0dXJuZWQgYnkgYHNrX2xvb2t1cGAgYW5kIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCBhbmQgYGJwZl9za19yZWxlYXNlYCBhbHdheXMgKnJlbGVhc2VzKiB0aGF0IHJlZmVyZW5jZSB3aXRob3V0IGFueSBjb25kaXRpb25hbCBjaGVja3MgYW55bW9yZS4gVGhpcyBpcyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgaW1wYWN0ZnVsIGNoYW5nZS4gVGhlbiB0aGVyZSBhcmUgb3RoZXIgY2hhbmdlcyB3aGljaCBhbHdheXMgY2FsbCBgc29ja19ob2xkKHNrKWAgb24gYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCwgYW5kIGRvZXNuJ3QgY2hlY2sgYHNrX2lzX3JlZmNvdW50ZWQoc2spYC5cblxuRnVuY3Rpb24td2lzZSwgSSBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHNwZWNpZmljIEJQRi1yZWxhdGVkIGVudHJ5IHBvaW50czogYHNrX2xvb2t1cGAsIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCBgX19icGZfc2tfbG9va3VwYCwgYGJwZl9za19sb29rdXBgLCBgYnBmX3NrX3JlbGVhc2VgLCBgc2tfc2VsZWN0X3JldXNlcG9ydGAsIGBzb2NrX21hcF9sb29rdXBgLCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLiBUaGVzZSBhcmUgYWxsIGNydWNpYWwgZm9yIGhvdyBzb2NrZXRzIGFyZSBmb3VuZCBhbmQgbWFuYWdlZCB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVGAgYXJlIG9idmlvdXMsIGFuZCBJIHN1c3BlY3QgYENPTkZJR19CUEZfU09DS19BRERSYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5IGluIHRoZSBgbmV0L2NvcmUvZmlsdGVyLmNgIGFuZCBgbmV0L2NvcmUvc29ja19tYXAuY2AgZmlsZXMgdGhlbXNlbHZlcywgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gdXNlIG15IHVzdWFsIHRvb2xzIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cbk92ZXJhbGwsIHRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWltcyB0byBzb2xpZGlmeSB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIHN0cmF0ZWd5LCBwb3RlbnRpYWxseSBpbXByb3Zpbmcgc3RhYmlsaXR5IG9yIHByZXZlbnRpbmcgc3VidGxlIHJlc291cmNlIGxlYWtzIHdpdGhpbiB0aGUgQlBGIHNvY2tldCBtYW5hZ2VtZW50LiBJJ2xsIGRpZyBpbnRvIHRoZSBjb2RlIG1vcmUgdGhvcm91Z2hseSB0byBzZWUgdGhlIGRpcmVjdCBpbXBhY3QgYW5kIHJhdGlvbmFsZSBmb3IgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc0OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjMwLjg2NzkxODM5OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTA2ODQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9Njk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk4OS0jaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTkwOnN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSxcXG5uZXQvY29yZS9maWx0ZXIuYy02OTkxLVxcdFxcdFxcdCAgICAgIGludCBkaWYsIGludCBzZGlmLCB1OCBmYW1pbHksIHU4IHByb3RvKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzA0ND1fX2JwZl9za2NfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDcwLVxcdFxcdG5ldCA9IGNhbGxlcl9uZXQ7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzA3MTpcXHRcXHRzayA9IHNrX2xvb2t1cChuZXQsIHR1cGxlLCBpZmluZGV4LCBzZGlmLCBmYW1pbHksIHByb3RvKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MDcyLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDc1LVxcdFxcdFxcdGdvdG8gb3V0O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNzY6XFx0XFx0c2sgPSBza19sb29rdXAobmV0LCB0dXBsZSwgaWZpbmRleCwgc2RpZiwgZmFtaWx5LCBwcm90byk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzA3Ny1cXHRcXHRwdXRfbmV0KG5ldCk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MDg0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NzA4NTpicGZfc2tfbG9va3VwX2Z1bGxfc2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwODYte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzEwOT1zdGF0aWMgc3RydWN0IHNvY2sgKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTA6X19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzExMS1cXHRcXHRzdHJ1Y3QgbmV0ICpjYWxsZXJfbmV0LCB1MzIgaWZpbmRleCwgdTggcHJvdG8sIHU2NCBuZXRuc19pZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTgtXFx0aWYgKHNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTk6XFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMjAtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTQzPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE0NDpicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE0NS1cXHQgICAgICB1OCBwcm90bywgdTY0IG5ldG5zX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTUwLVxcdGlmIChzaylcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTUxOlxcdFxcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MTUyLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzE2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzQtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE3NTpCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE3Ni1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzcte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNzg6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWJwZl9za19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBJUFBST1RPX1RDUCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MTc5LVxcdFxcdFxcdFxcdFxcdCAgICBuZXRuc19pZCwgZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTgyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE4MzpcXHQuZnVuY1xcdFxcdD0gYnBmX3NrX2xvb2t1cF90Y3AsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE5My1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTk0OkJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy03MTk1LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE5Ni17XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE5NzpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIElQUFJPVE9fVURQLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTgtXFx0XFx0XFx0XFx0XFx0ICAgIG5ldG5zX2lkLCBmbGFncyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjAwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyMDE6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjAyOlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfbG9va3VwX3VkcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjAzLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MjI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzIzNi1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MjM3OkJQRl9DQUxMXzUoYnBmX3RjX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBza19idWZmICosIHNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy03MjM4LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjQzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNDQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzI0NS1cXHRcXHRcXHRcXHRcXHQgICAgICBpZmluZGV4LCBJUFBST1RPX1RDUCwgbmV0bnNfaWQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjQ4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNDk6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjUwOlxcdC5mdW5jXFx0XFx0PSBicGZfdGNfc2tfbG9va3VwX3RjcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjUxLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjYwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjE6QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3VkcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjItXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjctXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI2ODpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjY5LVxcdFxcdFxcdFxcdFxcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzItXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNzQ6XFx0LmZ1bmNcXHRcXHQ9IGJwZl90Y19za19sb29rdXBfdWRwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzUtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcyOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfcmVsZWFzZV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyOTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI5OTpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3VkcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MzAwLVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHUzMiwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MzA1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjczMDY6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMDctXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19VRFAsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzMxMC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MzExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczMTI6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3hkcF9za19sb29rdXBfdWRwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMTMtXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNDYtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzM0NzpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3RjcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MzQ4LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHUzMiwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MzUzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjczNTQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM1OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MzU5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczNjA6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3hkcF9za19sb29rdXBfdGNwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNjEtXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzM5MTpCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5Mi1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTMte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczOTQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc29ja19uZXQoY3R4LVxcdTAwM2VzayksIDAsIElQUFJPVE9fVENQLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3Mzk5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MDA6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03NDAxLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03NDA5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MTA6QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTEtXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG5uZXQvY29yZS9maWx0ZXIuYy03NDEyLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3NDEzOlxcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbixcXG5uZXQvY29yZS9maWx0ZXIuYy03NDE0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNvY2tfbmV0KGN0eC1cXHUwMDNlc2spLCAwLCBJUFBST1RPX1VEUCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTctXFxubmV0L2NvcmUvZmlsdGVyLmM6NzQxODpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3NDE5OlxcdC5mdW5jXFx0XFx0PSBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQyMC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODMwMD1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjMtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNDpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzI2OlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzI3OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjgtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODQxMz1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0NDAtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MTpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MjpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDM6XFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDQ6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NDQ1LVxcdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg0NjI9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODU1OS0jaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTYwOlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTYxOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MjpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MzpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg1NjQtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODU5OT14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MjgtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODYyOTpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMDpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4NjMxOlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NjMyOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MzMtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODc1Nj1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODEtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MjpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MzpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODQ6XFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg2LVxcdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExODA4PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfcmV1c2Vwb3J0X3Byb2dfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTE6REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYnBmX3NrX2xvb2t1cF9lbmFibGVkKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTgxMjpFWFBPUlRfU1lNQk9MKGJwZl9za19sb29rdXBfZW5hYmxlZCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTQ6QlBGX0NBTExfMyhicGZfc2tfbG9va3VwX2Fzc2lnbiwgc3RydWN0IGJwZl9za19sb29rdXBfa2VybiAqLCBjdHgsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTUtXFx0ICAgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg0Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg0MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExODQ0OlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfbG9va3VwX2Fzc2lnbixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg0NS1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE4NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTM6c2tfbG9va3VwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NTQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NTgtXFx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTk6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2MC1cXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg2NzpzdGF0aWMgYm9vbCBza19sb29rdXBfaXNfdmFsaWRfYWNjZXNzKGludCBvZmYsIGludCBzaXplLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODY4LVxcdFxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg3MS17XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NzI6XFx0aWYgKG9mZiBcXHUwMDNjIDAgfHwgb2ZmIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCkpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzktXFx0c3dpdGNoIChvZmYpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4MDpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfcHRyKHN0cnVjdCBicGZfc2tfbG9va3VwLCBzayk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4ODEtXFx0XFx0aW5mby1cXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fU09DS0VUX09SX05VTEw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg4My1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NDpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGZhbWlseSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODU6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODY6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NzpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNCk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODg6XFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg5OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0sIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTA6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9wb3J0KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5MTpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGluZ3Jlc3NfaWZpbmRleCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4OTItXFx0XFx0YnBmX2N0eF9yZWNvcmRfZmllbGRfc2l6ZShpbmZvLCBzaXplb2YoX191MzIpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExODk1OlxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODk2LVxcdFxcdC8qIEFsbG93IDQtYnl0ZSBhY2Nlc3MgdG8gMi1ieXRlIGZpZWxkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkwMS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkwMjpcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCkgLi4uXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MDM6XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KSAtIDE6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MDQtXFx0XFx0LyogQWxsb3cgYWNjZXNzIHRvIHplcm8gcGFkZGluZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MTM6c3RhdGljIHUzMiBza19sb29rdXBfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTQtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTIxLVxcdHN3aXRjaCAoc2ktXFx1MDAzZW9mZikge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTIyOlxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHNrKTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyMy1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MjQ6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybiwgc2VsZWN0ZWRfc2spKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyNS1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyNi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkyNzpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTI4LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTI5OlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYW1pbHksIDIsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzMi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkzMzpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzQtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MzU6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHByb3RvY29sLCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5Mzk6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDAtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDE6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHY0LnNhZGRyLCA0LCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDU6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Ni1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk0NzpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdjQuZGFkZHIsIDQsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1MC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk1MTpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Mi1cXHRcXHRcXHRcXHRyZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTY6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA2WzBdKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Ny1cXHRcXHRvZmYgKz0gYnBmX3RhcmdldF9vZmYoc3RydWN0IGluNl9hZGRyLCBzNl9hZGRyMzJbMF0sIDQsIHRhcmdldF9zaXplKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1OC1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTk6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2VybiwgdjYuc2FkZHIpKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2MC1cXHRcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgc2ktXFx1MDAzZWRzdF9yZWcsIDAsIDEpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NjYtXFx0fVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTY3OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTY4LVxcdFxcdFxcdFxcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzI6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTczLVxcdFxcdG9mZiArPSBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgaW42X2FkZHIsIHM2X2FkZHIzMlswXSwgNCwgdGFyZ2V0X3NpemUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTc0LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHZvaWQgKiksIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NTpcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5kYWRkcikpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTc2LVxcdFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBzaS1cXHUwMDNlZHN0X3JlZywgMCwgMSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk4Mi1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODM6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg0LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg1OlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzcG9ydCwgMiwgdGFyZ2V0X3NpemUpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg5OlxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5MC1cXHRcXHQqdGFyZ2V0X3NpemUgPSAyO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5OTQ6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTUtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5OTY6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTktXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMDA6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgaW5ncmVzc19pZmluZGV4KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAwMS1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAwMjpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDAzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW5ncmVzc19pZmluZGV4LCA0LCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMDktXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTA6Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19sb29rdXBfcHJvZ19vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTE6XFx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDEyLX07XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTQ6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc2tfbG9va3VwX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxNTpcXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IHNrX2xvb2t1cF9mdW5jX3Byb3RvLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE2OlxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IHNrX2xvb2t1cF9pc192YWxpZF9hY2Nlc3MsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTc6XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxOC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTozMC45MjY5OTA0MDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjYyOTYyNzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2NvcGUgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBwcmV0dHkga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHNvY2tldCBsb29rdXAgd2l0aGluIHRoZSBrZXJuZWwncyBuZXR3b3JraW5nIHN0YWNrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgaW1wbGljYXRpb25zLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIGBza19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9va3VwIGxvZ2ljIGxpdmVzLCBhbmQgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgdWx0aW1hdGVseSBjYWxsZWQgYnkgdGhlIEJQRi1leHBvc2VkIGhlbHBlcnM6IGBfX2JwZl9za19sb29rdXBgIGFuZCBgYnBmX3NrX2xvb2t1cGAuIFRoZXNlIGFyZSwgaW4gdHVybiwgY2FsbGVkIGJ5IGFsbCB0aG9zZSBCUEYgaGVscGVycyB3ZSB1c2UgZm9yIGZpbmRpbmcgc29ja2V0cyBsaWtlIGBicGZfc2tfbG9va3VwX3RjcGAsIGBicGZfc2tfbG9va3VwX3VkcGAsIGFuZCB0aGUgb3RoZXJzIHVzZWQgZm9yIHRjIGFuZCB4ZHAsIGFzIHdlbGwgYXMgdGhlIHNvY2tldCBhZGRyZXNzIHZlcnNpb25zLiBBbmQgbGV0J3Mgbm90IGZvcmdldCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBicGZfc2tfcmVsZWFzZWAuIFRoaXMgaXMgYWxsIHN1Z2dlc3RpbmcgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgQlBGIGludGVyYWN0cyB3aXRoIHNvY2tldCBsb29rdXBzIGFuZCBzb2NrZXQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuIEl0J3MgYSBjcml0aWNhbCBhcmVhLCBwb3RlbnRpYWxseSBpbXBhY3RmdWwgb24gcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5LlxuXG5UaGVuIEkgc2VlIGl0IGFsc28gdG91Y2hlcyBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gVGhhdCdzIHRoZSBzb2NrZXQgbWFwIGFuZCBzb2NrZXQgaGFzaCBtYXAgY29kZS4gRGVmaW5pdGVseSBnb2luZyB0byBjaGVjayB0aGF0IGFyZWEuIE5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBuZXQvY29yZS9zb2NrX21hcC5jYCBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aG9zZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHR3ZWFrZWQgYW5kIHdoYXQgaXQgbWVhbnMgZm9yIGhvdyBCUEYgaW50ZXJhY3RzIHdpdGggdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ5NCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTozNi4xODk5NTUxOTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI0OTg4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz0zNzI9c3RhdGljIHZvaWQgc29ja19tYXBfcmVsZWFzZV9wcm9ncyhzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzYtXFxubmV0L2NvcmUvc29ja19tYXAuYzozNzc6c3RhdGljIHN0cnVjdCBzb2NrICpfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHUzMiBrZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zNzgte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODctXFxubmV0L2NvcmUvc29ja19tYXAuYzozODg6c3RhdGljIHZvaWQgKnNvY2tfbWFwX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0zODkte1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0zOTEtXFxubmV0L2NvcmUvc29ja19tYXAuYzozOTI6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwgKih1MzIgKilrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzkzLVxcdGlmIChzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMzk3LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6Mzk4OnN0YXRpYyB2b2lkICpzb2NrX21hcF9sb29rdXBfc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG5uZXQvY29yZS9zb2NrX21hcC5jLTM5OS17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTQwNC1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjQwNTpcXHRzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0obWFwLCAqKHUzMiAqKWtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy00MDYtXFx0aWYgKCFzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9NjQ1PUJQRl9DQUxMXzQoYnBmX3NrX3JlZGlyZWN0X21hcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy02NTItXFxubmV0L2NvcmUvc29ja19tYXAuYzo2NTM6XFx0c2sgPSBfX3NvY2tfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTY1NC1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTY3Mz1CUEZfQ0FMTF80KGJwZl9tc2dfcmVkaXJlY3RfbWFwLCBzdHJ1Y3Qgc2tfbXNnICosIG1zZyxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtNjgwLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6NjgxOlxcdHNrID0gX19zb2NrX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy02ODItXFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz03MjE9c3RhdGljIHZvaWQgKnNvY2tfbWFwX3NlcV9sb29rdXBfZWxlbShzdHJ1Y3Qgc29ja19tYXBfc2VxX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTcyNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjcyNjpcXHRpbmZvLVxcdTAwM2VzayA9IF9fc29ja19tYXBfbG9va3VwX2VsZW0oaW5mby1cXHUwMDNlbWFwLCBpbmZvLVxcdTAwM2VpbmRleCk7XFxubmV0L2NvcmUvc29ja19tYXAuYy03MjctXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTgyOT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgc29ja19tYXBfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy04MzMtXFx0Lm1hcF9nZXRfbmV4dF9rZXlcXHQ9IHNvY2tfbWFwX2dldF9uZXh0X2tleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNDpcXHQubWFwX2xvb2t1cF9lbGVtX3N5c19vbmx5ID0gc29ja19tYXBfbG9va3VwX3N5cyxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNS1cXHQubWFwX3VwZGF0ZV9lbGVtXFx0PSBzb2NrX21hcF91cGRhdGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTgzNi1cXHQubWFwX2RlbGV0ZV9lbGVtXFx0PSBzb2NrX21hcF9kZWxldGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjgzNzpcXHQubWFwX2xvb2t1cF9lbGVtXFx0PSBzb2NrX21hcF9sb29rdXAsXFxubmV0L2NvcmUvc29ja19tYXAuYy04MzgtXFx0Lm1hcF9yZWxlYXNlX3VyZWZcXHQ9IHNvY2tfbWFwX3JlbGVhc2VfcHJvZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjM2LjI1MjQ1NzYxM1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMDg4MzY4MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBCUEYgU29ja2V0IE1hcCBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBoaXR0aW5nIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgaW4gYG5ldC9jb3JlL3NvY2tfbWFwLmNgLiBUaGVzZSBhcmUgdGhlIGNydWNpYWwgYG1hcF9sb29rdXBfZWxlbWAgb3BlcmF0aW9ucyBzcGVjaWZpY2FsbHkgZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgYW5kIGBCUEZfTUFQX1RZUEVfU09DS0hBU0hgLiAgR2l2ZW4gbXkgZXhwZXJ0aXNlLCB0aGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBob3cgc29ja2V0cyBhcmUgYmVpbmcgbWFuYWdlZCB3aXRoaW4gdGhlIEJQRiBmcmFtZXdvcmsgYXQgdGhlIGNvcmUgbGV2ZWwsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwZXJmb3JtYW5jZSBhbmQgYmVoYXZpb3Igb2YgYW55IHNvY2tldC1yZWxhdGVkIEJQRiBwcm9ncmFtLiBJdCdzIHRoZSBwbHVtYmluZyB0aGF0IG1ha2VzIGV2ZXJ5dGhpbmcgd29yay5cblxuSSBzZWUgdGhhdCBpdCBhbHNvIG1vZGlmaWVzIGBza19zZWxlY3RfcmV1c2Vwb3J0YCBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBUaGlzIHN1Z2dlc3RzIHRoZSBwYXRjaCBsaWtlbHkgYWZmZWN0cyBob3cgcmV1c2Vwb3J0IHNvY2tldHMgYXJlIGhhbmRsZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVzZSBtYXBzLiBBIGNoYW5nZSB0aGVyZSB1c3VhbGx5IGluZGljYXRlcyBpbXByb3ZlbWVudHMgb3IgdHdlYWtzIGluIGhvdyB0aGUga2VybmVsIHBpY2tzIHRoZSBjb3JyZWN0IHNvY2tldCB3aGVuIG11bHRpcGxlIHNvY2tldHMgYXJlIGJvdW5kIHRvIHRoZSBzYW1lIHBvcnQuXG5cbk15IHByaW1hcnkgZm9jdXMgcmlnaHQgbm93IGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHNvY2tfaGFzaF9sb29rdXBgIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZSBsb29rdXAgcHJvY2VzcyBmb3Igc29ja2V0cyBib3VuZCB0byB0aGVzZSBoYXNoIG1hcHMgaXMgY2hhbmdpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDg1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjQwLjM2MTI5NzQ2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTUwOTgyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2NrX2hhc2hfbG9va3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL3NvY2tfbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc29ja19tYXAuYz04Nzg9c3RhdGljIHN0cnVjdCBicGZfc2h0YWJfZWxlbSAqXFxubmV0L2NvcmUvc29ja19tYXAuYzo4Nzk6c29ja19oYXNoX2xvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgdTMyIGhhc2gsIHZvaWQgKmtleSxcXG5uZXQvY29yZS9zb2NrX21hcC5jLTg4MC1cXHRcXHRcXHQgIHUzMiBrZXlfc2l6ZSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODkyLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6ODkzOnN0YXRpYyBzdHJ1Y3Qgc29jayAqX19zb2NrX2hhc2hfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtODk0LXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTAzLVxcdGJ1Y2tldCA9IHNvY2tfaGFzaF9zZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTA0OlxcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFxcdTAwMjZidWNrZXQtXFx1MDAzZWhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTA1LVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz05MTY9c3RhdGljIHZvaWQgc29ja19oYXNoX2RlbGV0ZV9mcm9tX2xpbmsoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy05MzAtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTMxOlxcdGVsZW1fcHJvYmUgPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFxcdTAwMjZidWNrZXQtXFx1MDAzZWhlYWQsIGVsZW0tXFx1MDAzZWhhc2gsXFxubmV0L2NvcmUvc29ja19tYXAuYy05MzItXFx0XFx0XFx0XFx0XFx0ICAgICAgIGVsZW0tXFx1MDAzZWtleSwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTk0MT1zdGF0aWMgbG9uZyBzb2NrX2hhc2hfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy05NTItXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZidWNrZXQtXFx1MDAzZWxvY2spO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmM6OTUzOlxcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFxcdTAwMjZidWNrZXQtXFx1MDAzZWhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtOTU0LVxcdGlmIChlbGVtKSB7XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTk5MT1zdGF0aWMgaW50IHNvY2tfaGFzaF91cGRhdGVfY29tbW9uKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAyMC1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJ1Y2tldC1cXHUwMDNlbG9jayk7XFxubmV0L2NvcmUvc29ja19tYXAuYzoxMDIxOlxcdGVsZW0gPSBzb2NrX2hhc2hfbG9va3VwX2VsZW1fcmF3KFxcdTAwMjZidWNrZXQtXFx1MDAzZWhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTAyMi1cXHRpZiAoZWxlbSBcXHUwMDI2XFx1MDAyNiBmbGFncyA9PSBCUEZfTk9FWElTVCkge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xMDU2PXN0YXRpYyBpbnQgc29ja19oYXNoX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEwNjgtXFx0aGVhZCA9IFxcdTAwMjZzb2NrX2hhc2hfc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKS1cXHUwMDNlaGVhZDtcXG5uZXQvY29yZS9zb2NrX21hcC5jOjEwNjk6XFx0ZWxlbSA9IHNvY2tfaGFzaF9sb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMDcwLVxcdGlmICghZWxlbSlcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTE0ND1zdGF0aWMgdm9pZCBzb2NrX2hhc2hfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMTk2LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTE5NzpzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cF9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTE5OC17XFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyMDMtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjA0OlxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIwNS1cXHRpZiAoIXNrKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjExLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTIxMjpzdGF0aWMgdm9pZCAqc29ja19oYXNoX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjEzLXtcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTIxNS1cXG5uZXQvY29yZS9zb2NrX21hcC5jOjEyMTY6XFx0c2sgPSBfX3NvY2tfaGFzaF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjE3LVxcdGlmIChzaylcXG4tLVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM9MTI0OT1CUEZfQ0FMTF80KGJwZl9za19yZWRpcmVjdF9oYXNoLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyNTYtXFxubmV0L2NvcmUvc29ja19tYXAuYzoxMjU3OlxcdHNrID0gX19zb2NrX2hhc2hfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTI1OC1cXHRpZiAodW5saWtlbHkoIXNrIHx8ICFzb2NrX21hcF9yZWRpcmVjdF9hbGxvd2VkKHNrKSkpXFxuLS1cXG5uZXQvY29yZS9zb2NrX21hcC5jPTEyNzc9QlBGX0NBTExfNChicGZfbXNnX3JlZGlyZWN0X2hhc2gsIHN0cnVjdCBza19tc2cgKiwgbXNnLFxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xMjg0LVxcbm5ldC9jb3JlL3NvY2tfbWFwLmM6MTI4NTpcXHRzayA9IF9fc29ja19oYXNoX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG5uZXQvY29yZS9zb2NrX21hcC5jLTEyODYtXFx0aWYgKHVubGlrZWx5KCFzayB8fCAhc29ja19tYXBfcmVkaXJlY3RfYWxsb3dlZChzaykpKVxcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYz0xNDQzPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBzb2NrX2hhc2hfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvc29ja19tYXAuYy0xNDQ5LVxcdC5tYXBfZGVsZXRlX2VsZW1cXHQ9IHNvY2tfaGFzaF9kZWxldGVfZWxlbSxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTA6XFx0Lm1hcF9sb29rdXBfZWxlbVxcdD0gc29ja19oYXNoX2xvb2t1cCxcXG5uZXQvY29yZS9zb2NrX21hcC5jOjE0NTE6XFx0Lm1hcF9sb29rdXBfZWxlbV9zeXNfb25seSA9IHNvY2tfaGFzaF9sb29rdXBfc3lzLFxcbm5ldC9jb3JlL3NvY2tfbWFwLmMtMTQ1Mi1cXHQubWFwX3JlbGVhc2VfdXJlZlxcdD0gc29ja19oYXNoX3JlbGVhc2VfcHJvZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjQwLjQyMDgwOTk0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjE0NTYwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgc29tZSBrZXkgYXJlYXMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiBlY29zeXN0ZW0uIEl0IGxvb2tzIGxpa2UgaXQncyB0d2Vha2luZyBgc29ja19tYXBfbG9va3VwYCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLCB3aGljaCwgYXMgeW91IGtub3csIGFyZSBjcml0aWNhbCBmb3IgdGhlIGBtYXBfbG9va3VwX2VsZW1gIG9wZXJhdGlvbnMgZm9yIGBCUEZfTUFQX1RZUEVfU09DS01BUGAgYW5kIGBCUEZfTUFQX1RZUEVfU09DS0hBU0hgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGltcGFjdCBvbiBob3cgd2UgaW50ZXJhY3Qgd2l0aCBhbmQgbWFuYWdlIHNvY2tldHMgdXNpbmcgQlBGIG1hcHMuIEl0J3MgYWxzbyBtYWtpbmcgY2hhbmdlcyB0byBgc2tfc2VsZWN0X3JldXNlcG9ydGAsIHdoaWNoIGlzIGEgQlBGIGhlbHBlci4gVGhpcyBpcyB3b3J0aCBpbnZlc3RpZ2F0aW5nIGJlY2F1c2UgYW55IGNoYW5nZSBpbiBoZWxwZXJzIGhhcyByaXBwbGUgZWZmZWN0cyB0aHJvdWdob3V0IEJQRiBwcm9ncmFtcy5cblxuVGhlIGF1dGhvciBtZW50aW9ucyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3M6IGBDT05GSUdfQlBGX1NZU0NBTExgIGFuZCBgQ09ORklHX05FVGAuIEl0J3Mgd29ydGggY29uc2lkZXJpbmcgd2hldGhlciBgQ09ORklHX0JQRl9TWVNDQUxMYCAqYWxvbmUqIGlzIHN1ZmZpY2llbnQgZm9yIHRoZSBjaGFuZ2VzLiBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgdGhhdC4gSSBrbm93IHRoYXQgYG5ldC9jb3JlL3NvY2tfbWFwLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgYW5kIHRoYXQgZmlsZSBpcyB3aGVyZSB0aG9zZSBmdW5jdGlvbnMgYXJlLiBCdXQgSSdsbCBkb3VibGUtY2hlY2sgYnkgcG9raW5nIGFyb3VuZCBpbiBgbmV0L2NvcmUvTWFrZWZpbGVgIGp1c3QgdG8gYmUgY2VydGFpbiB0aGVyZSdzIG5vIHN1YnRsZSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfTkVUYCB0aGF0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMuIEJldHRlciB0byBiZSB0aG9yb3VnaCB3aGVuIGRlYWxpbmcgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbnMsIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBCUEYuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDQ1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDE0OjE1OjQ1LjA0MjI2Nzc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI0OTA0MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29ja19tYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9NDQ9b2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbm5ldC9jb3JlL01ha2VmaWxlOjQ1Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQ2LW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTo0NS4zNTQ3Nzk3MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5MjU2NTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBCUEYgYW5kIFJldXNlcG9ydCBDb21wYXRpYmlsaXR5KipcblxuQWxyaWdodCwgdGhlIHJlcXVpcmVtZW50IGZvciBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBhIGdpdmVuIOKAkyB0aGF0J3MgZnVuZGFtZW50YWwgZm9yIGFueSBzZXJpb3VzIEJQRiBhcHBsaWNhdGlvbi4gQnV0IG5vdyBJIG5lZWQgdG8gZGl2ZSBhIGxpdHRsZSBkZWVwZXIsIGFuZCBmaWd1cmUgb3V0IGhvdyBpdCBtZXNoZXMgd2l0aCBzb21lIG90aGVyIGFzcGVjdHMgb2YgdGhlIHN5c3RlbS4gSSdtIHdvbmRlcmluZyBhYm91dCBgc2tfc2VsZWN0X3JldXNlcG9ydGAuIEknbSBwcmV0dHkgc3VyZSB0aGF0IGhhcyB0byBiZSBpbiBwbGF5IGhlcmUsIHNpbmNlIHRoaXMgaXMgYWxsIGFib3V0IHNvY2tldC1sZXZlbCBzdHVmZi4gTGV0IG1lIHNlZSB3aGVyZSB0aGF0IGZ1bmN0aW9uIGlzIGRlZmluZWQgYWdhaW4uLi4gYWgsIHJpZ2h0LCBpdCdzIHNpdHRpbmcgaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCBmaWxlIGxvY2F0aW9uIG1ha2VzIHNlbnNlLiBUaGlzIGlzIGdvb2QsIGl0J3MgYSBjcml0aWNhbCBwYXRoIHRvIGV4cGxvcmUuIEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIGNvbmZpcm0gYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGludGVyYWN0aW9uIG9mIHRob3NlIHR3byBlbGVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MjIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTo0OC41NDczNDg2ODlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MDkyMTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNrX3NlbGVjdF9yZXVzZXBvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9MTE1NTY9c3RydWN0IHNvY2sgKmJwZl9ydW5fc2tfcmV1c2Vwb3J0KHN0cnVjdCBzb2NrX3JldXNlcG9ydCAqcmV1c2UsIHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNTcyLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNTczOkJQRl9DQUxMXzQoc2tfc2VsZWN0X3JldXNlcG9ydCwgc3RydWN0IHNrX3JldXNlcG9ydF9rZXJuICosIHJldXNlX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE1NzQtXFx0ICAgc3RydWN0IGJwZl9tYXAgKiwgbWFwLCB2b2lkICosIGtleSwgdTMyLCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjE4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjE5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gc2tfc2VsZWN0X3JldXNlcG9ydF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTYyMDpcXHQuZnVuYyAgICAgICAgICAgPSBza19zZWxlY3RfcmV1c2Vwb3J0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExNjIxLVxcdC5ncGxfb25seSAgICAgICA9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE2NjY9c2tfcmV1c2Vwb3J0X2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE2NjktXFx0c3dpdGNoIChmdW5jX2lkKSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE2NzA6XFx0Y2FzZSBCUEZfRlVOQ19za19zZWxlY3RfcmV1c2Vwb3J0Olxcbm5ldC9jb3JlL2ZpbHRlci5jOjExNjcxOlxcdFxcdHJldHVybiBcXHUwMDI2c2tfc2VsZWN0X3JldXNlcG9ydF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTY3Mi1cXHRjYXNlIEJQRl9GVU5DX3NrYl9sb2FkX2J5dGVzOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTo0OC42MDY0NDQ3OTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0OTAwOTQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTS19SRVVTRVBPUlQgQlBGIEhlbHBlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBza19zZWxlY3RfcmV1c2Vwb3J0YCDigJMgdGhhdCdzIHRoZSBCUEYgaGVscGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgYEJQRl9QUk9HX1RZUEVfU0tfUkVVU0VQT1JUYCBwcm9ncmFtcy4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoaXMgdG8gZnVuY3Rpb24gY29ycmVjdGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gUmlnaHQgYXdheSwgSSBzZWUgYENPTkZJR19CUEZfU1lTQ0FMTGAgYW5kIGBDT05GSUdfTkVUYCBhcmUgY3J1Y2lhbC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgc291cmNlIGFuZCBjcm9zcyByZWZlcmVuY2UgdGhlIGNvbmZpZyBvcHRpb25zLCBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIGJldHRlciBzZW5zZSBmcm9tIGxvb2tpbmcgaW50byBgbmV0L2NvcmUvZmlsdGVyLmNgLiBHaXZlbiB0aGF0IGBuZXQvY29yZS9maWx0ZXIuY2AgZ2V0cyBjb21waWxlZCBvbmx5IHdoZW4gYENPTkZJR19ORVRgIGlzIHNldCwgdGhhdCdzIGEgZ29vZCBzaWduLiBGdXJ0aGVybW9yZSwgSSBzZWUgdGhhdCB0aGUgYHNrX2xvb2t1cGAgZnVuY3Rpb24gd2l0aGluIGBuZXQvY29yZS9maWx0ZXIuY2AgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgI2lmZGVmIENPTkZJR19JTkVUYC4gVGhpcyBpbXBsaWVzIHRoYXQgYHNrX2xvb2t1cGAgYW5kLCBwb3RlbnRpYWxseSwgcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGFyZSB0aWVkIGludG8gdGhlIGJyb2FkZXIgVENQL0lQIHN0YWNrIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzbid0IGVudGlyZWx5IHN1cnByaXNpbmcgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBzb2NrZXQtYmFzZWQgcmV1c2Vwb3J0IHNjZW5hcmlvcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNzUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTQ6MTU6NTIuNTU1NDU3ODk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTI2MDI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza19sb29rdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZmlsdGVyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZmlsdGVyLmM9Njk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9sd3Rfc2VnNl9hZGp1c3Rfc3JoX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNjk4OS0jaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYzo2OTkwOnN0YXRpYyBzdHJ1Y3Qgc29jayAqc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGJwZl9zb2NrX3R1cGxlICp0dXBsZSxcXG5uZXQvY29yZS9maWx0ZXIuYy02OTkxLVxcdFxcdFxcdCAgICAgIGludCBkaWYsIGludCBzZGlmLCB1OCBmYW1pbHksIHU4IHByb3RvKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzA0ND1fX2JwZl9za2NfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDcwLVxcdFxcdG5ldCA9IGNhbGxlcl9uZXQ7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzA3MTpcXHRcXHRzayA9IHNrX2xvb2t1cChuZXQsIHR1cGxlLCBpZmluZGV4LCBzZGlmLCBmYW1pbHksIHByb3RvKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MDcyLVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MDc1LVxcdFxcdFxcdGdvdG8gb3V0O1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcwNzY6XFx0XFx0c2sgPSBza19sb29rdXAobmV0LCB0dXBsZSwgaWZpbmRleCwgc2RpZiwgZmFtaWx5LCBwcm90byk7XFxubmV0L2NvcmUvZmlsdGVyLmMtNzA3Ny1cXHRcXHRwdXRfbmV0KG5ldCk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MDg0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NzA4NTpicGZfc2tfbG9va3VwX2Z1bGxfc2soc3RydWN0IHNvY2sgKnNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcwODYte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzEwOT1zdGF0aWMgc3RydWN0IHNvY2sgKlxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTA6X19icGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzExMS1cXHRcXHRzdHJ1Y3QgbmV0ICpjYWxsZXJfbmV0LCB1MzIgaWZpbmRleCwgdTggcHJvdG8sIHU2NCBuZXRuc19pZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMTgtXFx0aWYgKHNrKVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcxMTk6XFx0XFx0c2sgPSBicGZfc2tfbG9va3VwX2Z1bGxfc2soc2spO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTcxMjAtXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MTQzPXN0YXRpYyBzdHJ1Y3Qgc29jayAqXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE0NDpicGZfc2tfbG9va3VwKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBicGZfc29ja190dXBsZSAqdHVwbGUsIHUzMiBsZW4sXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE0NS1cXHQgICAgICB1OCBwcm90bywgdTY0IG5ldG5zX2lkLCB1NjQgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MTUwLVxcdGlmIChzaylcXG5uZXQvY29yZS9maWx0ZXIuYzo3MTUxOlxcdFxcdHNrID0gYnBmX3NrX2xvb2t1cF9mdWxsX3NrKHNrKTtcXG5uZXQvY29yZS9maWx0ZXIuYy03MTUyLVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9NzE2Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzQtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzE3NTpCUEZfQ0FMTF81KGJwZl9za19sb29rdXBfdGNwLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBza2IsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE3Ni1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxNzcte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcxNzg6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKWJwZl9za19sb29rdXAoc2tiLCB0dXBsZSwgbGVuLCBJUFBST1RPX1RDUCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MTc5LVxcdFxcdFxcdFxcdFxcdCAgICBuZXRuc19pZCwgZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4MS1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTgyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NrX2xvb2t1cF90Y3BfcHJvdG8gPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE4MzpcXHQuZnVuY1xcdFxcdD0gYnBmX3NrX2xvb2t1cF90Y3AsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE4NC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE5My1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MTk0OkJQRl9DQUxMXzUoYnBmX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBza19idWZmICosIHNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy03MTk1LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxubmV0L2NvcmUvZmlsdGVyLmMtNzE5Ni17XFxubmV0L2NvcmUvZmlsdGVyLmM6NzE5NzpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIElQUFJPVE9fVURQLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcxOTgtXFx0XFx0XFx0XFx0XFx0ICAgIG5ldG5zX2lkLCBmbGFncyk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjAwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyMDE6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjAyOlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfbG9va3VwX3VkcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjAzLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MjI1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3RjX3NrY19sb29rdXBfdGNwX3Byb3RvID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzIzNi1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MjM3OkJQRl9DQUxMXzUoYnBmX3RjX3NrX2xvb2t1cF90Y3AsIHN0cnVjdCBza19idWZmICosIHNrYixcXG5uZXQvY29yZS9maWx0ZXIuYy03MjM4LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHU2NCwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjQzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNDQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChza2IsIHR1cGxlLCBsZW4sIGNhbGxlcl9uZXQsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzI0NS1cXHRcXHRcXHRcXHRcXHQgICAgICBpZmluZGV4LCBJUFBST1RPX1RDUCwgbmV0bnNfaWQsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjQ4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNDk6c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfdGNfc2tfbG9va3VwX3RjcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3MjUwOlxcdC5mdW5jXFx0XFx0PSBicGZfdGNfc2tfbG9va3VwX3RjcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjUxLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MjYwLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNjE6QlBGX0NBTExfNShicGZfdGNfc2tfbG9va3VwX3VkcCwgc3RydWN0IHNrX2J1ZmYgKiwgc2tiLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjItXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNjctXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI2ODpcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX19icGZfc2tfbG9va3VwKHNrYiwgdHVwbGUsIGxlbiwgY2FsbGVyX25ldCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MjY5LVxcdFxcdFxcdFxcdFxcdCAgICAgIGlmaW5kZXgsIElQUFJPVE9fVURQLCBuZXRuc19pZCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzItXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI3MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjcyNzQ6XFx0LmZ1bmNcXHRcXHQ9IGJwZl90Y19za19sb29rdXBfdWRwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyNzUtXFx0LmdwbF9vbmx5XFx0PSBmYWxzZSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTcyOTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byBicGZfc2tfcmVsZWFzZV9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTcyOTgtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzI5OTpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3VkcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MzAwLVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHUzMiwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MzA1LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjczMDY6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMDctXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19VRFAsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzMxMC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MzExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdWRwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczMTI6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3hkcF9za19sb29rdXBfdWRwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczMTMtXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MzM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNDYtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzM0NzpCUEZfQ0FMTF81KGJwZl94ZHBfc2tfbG9va3VwX3RjcCwgc3RydWN0IHhkcF9idWZmICosIGN0eCxcXG5uZXQvY29yZS9maWx0ZXIuYy03MzQ4LVxcdCAgIHN0cnVjdCBicGZfc29ja190dXBsZSAqLCB0dXBsZSwgdTMyLCBsZW4sIHUzMiwgbmV0bnNfaWQsIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03MzUzLVxcbm5ldC9jb3JlL2ZpbHRlci5jOjczNTQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLCBjYWxsZXJfbmV0LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgaWZpbmRleCwgSVBQUk9UT19UQ1AsIG5ldG5zX2lkLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM1OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3MzU5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczNjA6XFx0LmZ1bmMgICAgICAgICAgID0gYnBmX3hkcF9za19sb29rdXBfdGNwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczNjEtXFx0LmdwbF9vbmx5ICAgICAgID0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYz03MzgwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za2NfbG9va3VwX3RjcF9wcm90byA9IHtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6NzM5MTpCUEZfQ0FMTF81KGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCwgc3RydWN0IGJwZl9zb2NrX2FkZHJfa2VybiAqLCBjdHgsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5Mi1cXHQgICBzdHJ1Y3QgYnBmX3NvY2tfdHVwbGUgKiwgdHVwbGUsIHUzMiwgbGVuLCB1NjQsIG5ldG5zX2lkLCB1NjQsIGZsYWdzKVxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTMte1xcbm5ldC9jb3JlL2ZpbHRlci5jOjczOTQ6XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKV9fYnBmX3NrX2xvb2t1cChOVUxMLCB0dXBsZSwgbGVuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTczOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc29ja19uZXQoY3R4LVxcdTAwM2VzayksIDAsIElQUFJPVE9fVENQLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtNzM5OC1cXG5uZXQvY29yZS9maWx0ZXIuYzo3Mzk5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2Z1bmNfcHJvdG8gYnBmX3NvY2tfYWRkcl9za19sb29rdXBfdGNwX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MDA6XFx0LmZ1bmNcXHRcXHQ9IGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcCxcXG5uZXQvY29yZS9maWx0ZXIuYy03NDAxLVxcdC5ncGxfb25seVxcdD0gZmFsc2UsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy03NDA5LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjc0MTA6QlBGX0NBTExfNShicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsIHN0cnVjdCBicGZfc29ja19hZGRyX2tlcm4gKiwgY3R4LFxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTEtXFx0ICAgc3RydWN0IGJwZl9zb2NrX3R1cGxlICosIHR1cGxlLCB1MzIsIGxlbiwgdTY0LCBuZXRuc19pZCwgdTY0LCBmbGFncylcXG5uZXQvY29yZS9maWx0ZXIuYy03NDEyLXtcXG5uZXQvY29yZS9maWx0ZXIuYzo3NDEzOlxcdHJldHVybiAodW5zaWduZWQgbG9uZylfX2JwZl9za19sb29rdXAoTlVMTCwgdHVwbGUsIGxlbixcXG5uZXQvY29yZS9maWx0ZXIuYy03NDE0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNvY2tfbmV0KGN0eC1cXHUwMDNlc2spLCAwLCBJUFBST1RPX1VEUCxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTc0MTctXFxubmV0L2NvcmUvZmlsdGVyLmM6NzQxODpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3VkcF9wcm90byA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzo3NDE5OlxcdC5mdW5jXFx0XFx0PSBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHAsXFxubmV0L2NvcmUvZmlsdGVyLmMtNzQyMC1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODMwMD1zb2NrX2FkZHJfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjMtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNDpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODMyNTpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzI2OlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3VkcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4MzI3OlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3NvY2tfYWRkcl9za19sb29rdXBfdWRwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTgzMjgtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODQxMz1jZ19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg0NDAtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MTpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODQ0MjpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDM6XFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg0NDQ6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04NDQ1LVxcdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTg0NjI9dGNfY2xzX2FjdF9mdW5jX3Byb3RvKGVudW0gYnBmX2Z1bmNfaWQgZnVuY19pZCwgY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtODU1OS0jaWZkZWYgQ09ORklHX0lORVRcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTYwOlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NTYxOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3RjX3NrX2xvb2t1cF90Y3BfcHJvdG87XFxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MjpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODU2MzpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl90Y19za19sb29rdXBfdWRwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg1NjQtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODU5OT14ZHBfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MjgtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODYyOTpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF91ZHA6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODYzMDpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl94ZHBfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYzo4NjMxOlxcdGNhc2UgQlBGX0ZVTkNfc2tfbG9va3VwX3RjcDpcXG5uZXQvY29yZS9maWx0ZXIuYzo4NjMyOlxcdFxcdHJldHVybiBcXHUwMDI2YnBmX3hkcF9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTg2MzMtXFx0Y2FzZSBCUEZfRlVOQ19za19yZWxlYXNlOlxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9ODc1Nj1za19za2JfZnVuY19wcm90byhlbnVtIGJwZl9mdW5jX2lkIGZ1bmNfaWQsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTg3ODEtI2lmZGVmIENPTkZJR19JTkVUXFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MjpcXHRjYXNlIEJQRl9GVU5DX3NrX2xvb2t1cF90Y3A6XFxubmV0L2NvcmUvZmlsdGVyLmM6ODc4MzpcXHRcXHRyZXR1cm4gXFx1MDAyNmJwZl9za19sb29rdXBfdGNwX3Byb3RvO1xcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODQ6XFx0Y2FzZSBCUEZfRlVOQ19za19sb29rdXBfdWRwOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjg3ODU6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX3VkcF9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy04Nzg2LVxcdGNhc2UgQlBGX0ZVTkNfc2tfcmVsZWFzZTpcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jPTExODA4PWNvbnN0IHN0cnVjdCBicGZfcHJvZ19vcHMgc2tfcmV1c2Vwb3J0X3Byb2dfb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTAtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTE6REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UoYnBmX3NrX2xvb2t1cF9lbmFibGVkKTtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTgxMjpFWFBPUlRfU1lNQk9MKGJwZl9za19sb29rdXBfZW5hYmxlZCk7XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4MTQ6QlBGX0NBTExfMyhicGZfc2tfbG9va3VwX2Fzc2lnbiwgc3RydWN0IGJwZl9za19sb29rdXBfa2VybiAqLCBjdHgsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4MTUtXFx0ICAgc3RydWN0IHNvY2sgKiwgc2ssIHU2NCwgZmxhZ3MpXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg0Mi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg0MzpzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9mdW5jX3Byb3RvIGJwZl9za19sb29rdXBfYXNzaWduX3Byb3RvID0ge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExODQ0OlxcdC5mdW5jXFx0XFx0PSBicGZfc2tfbG9va3VwX2Fzc2lnbixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg0NS1cXHQuZ3BsX29ubHlcXHQ9IGZhbHNlLFxcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmM9MTE4NTI9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfZnVuY19wcm90byAqXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTM6c2tfbG9va3VwX2Z1bmNfcHJvdG8oZW51bSBicGZfZnVuY19pZCBmdW5jX2lkLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NTQte1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NTgtXFx0Y2FzZSBCUEZfRlVOQ19za19hc3NpZ246XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NTk6XFx0XFx0cmV0dXJuIFxcdTAwMjZicGZfc2tfbG9va3VwX2Fzc2lnbl9wcm90bztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2MC1cXHRjYXNlIEJQRl9GVU5DX3NrX3JlbGVhc2U6XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg2Ni1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg2NzpzdGF0aWMgYm9vbCBza19sb29rdXBfaXNfdmFsaWRfYWNjZXNzKGludCBvZmYsIGludCBzaXplLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODY4LVxcdFxcdFxcdFxcdCAgICAgIGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg3MS17XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4NzI6XFx0aWYgKG9mZiBcXHUwMDNjIDAgfHwgb2ZmIFxcdTAwM2U9IHNpemVvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCkpXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzMtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4NzktXFx0c3dpdGNoIChvZmYpIHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4MDpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfcHRyKHN0cnVjdCBicGZfc2tfbG9va3VwLCBzayk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4ODEtXFx0XFx0aW5mby1cXHUwMDNlcmVnX3R5cGUgPSBQVFJfVE9fU09DS0VUX09SX05VTEw7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTg4My1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NDpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGZhbWlseSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODU6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODY6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg4NzpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGxvY2FsX2lwNCk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4ODg6XFx0Y2FzZSBicGZfY3R4X3JhbmdlX3RpbGwoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9pcDZbMF0sIHJlbW90ZV9pcDZbM10pOlxcbm5ldC9jb3JlL2ZpbHRlci5jOjExODg5OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0sIGxvY2FsX2lwNlszXSk6XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE4OTA6XFx0Y2FzZSBicGZfY3R4X3JhbmdlKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9wb3J0KTpcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTg5MTpcXHRjYXNlIGJwZl9jdHhfcmFuZ2Uoc3RydWN0IGJwZl9za19sb29rdXAsIGluZ3Jlc3NfaWZpbmRleCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE4OTItXFx0XFx0YnBmX2N0eF9yZWNvcmRfZmllbGRfc2l6ZShpbmZvLCBzaXplb2YoX191MzIpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODk0LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExODk1OlxcdGNhc2UgYnBmX2N0eF9yYW5nZShzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExODk2LVxcdFxcdC8qIEFsbG93IDQtYnl0ZSBhY2Nlc3MgdG8gMi1ieXRlIGZpZWxkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovXFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkwMS1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkwMjpcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfcG9ydCkgLi4uXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MDM6XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KSAtIDE6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MDQtXFx0XFx0LyogQWxsb3cgYWNjZXNzIHRvIHplcm8gcGFkZGluZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqL1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTItXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MTM6c3RhdGljIHUzMiBza19sb29rdXBfY29udmVydF9jdHhfYWNjZXNzKGVudW0gYnBmX2FjY2Vzc190eXBlIHR5cGUsXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MTQtXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGJwZl9pbnNuICpzaSxcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTIxLVxcdHN3aXRjaCAoc2ktXFx1MDAzZW9mZikge1xcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTIyOlxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXAsIHNrKTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyMy1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MjQ6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2Vybiwgc2VsZWN0ZWRfc2spKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyNS1cXHRcXHRicmVhaztcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkyNi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkyNzpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBmYW1pbHkpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTI4LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTI5OlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYW1pbHksIDIsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzMi1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTkzMzpcXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBwcm90b2NvbCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzQtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5MzU6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTkzNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHByb3RvY29sLCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5MzgtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5Mzk6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX2lwNCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDAtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9XLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDE6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIHY0LnNhZGRyLCA0LCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NDQtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NDU6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfaXA0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk0Ni1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk0NzpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTQ4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdjQuZGFkZHIsIDQsIHRhcmdldF9zaXplKSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1MC1cXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk1MTpcXHRjYXNlIGJwZl9jdHhfcmFuZ2VfdGlsbChzdHJ1Y3QgYnBmX3NrX2xvb2t1cCxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Mi1cXHRcXHRcXHRcXHRyZW1vdGVfaXA2WzBdLCByZW1vdGVfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NTUtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTY6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCByZW1vdGVfaXA2WzBdKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1Ny1cXHRcXHRvZmYgKz0gYnBmX3RhcmdldF9vZmYoc3RydWN0IGluNl9hZGRyLCBzNl9hZGRyMzJbMF0sIDQsIHRhcmdldF9zaXplKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk1OC1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1NJWkVPRih2b2lkICopLCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NTk6XFx0XFx0XFx0XFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9za19sb29rdXBfa2VybiwgdjYuc2FkZHIpKTtcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk2MC1cXHRcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgc2ktXFx1MDAzZWRzdF9yZWcsIDAsIDEpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NjYtXFx0fVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTY3OlxcdGNhc2UgYnBmX2N0eF9yYW5nZV90aWxsKHN0cnVjdCBicGZfc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTY4LVxcdFxcdFxcdFxcdGxvY2FsX2lwNlswXSwgbG9jYWxfaXA2WzNdKToge1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5NzEtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5NzI6XFx0XFx0b2ZmIC09IG9mZnNldG9mKHN0cnVjdCBicGZfc2tfbG9va3VwLCBsb2NhbF9pcDZbMF0pO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTczLVxcdFxcdG9mZiArPSBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgaW42X2FkZHIsIHM2X2FkZHIzMlswXSwgNCwgdGFyZ2V0X3NpemUpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTc0LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfU0laRU9GKHZvaWQgKiksIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMTk3NTpcXHRcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLCB2Ni5kYWRkcikpO1xcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTc2LVxcdFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBzaS1cXHUwMDNlZHN0X3JlZywgMCwgMSk7XFxuLS1cXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk4Mi1cXHR9XFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5ODM6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgcmVtb3RlX3BvcnQpOlxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg0LVxcdFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfSCwgc2ktXFx1MDAzZWRzdF9yZWcsIHNpLVxcdTAwM2VzcmNfcmVnLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg1OlxcdFxcdFxcdFxcdCAgICAgIGJwZl90YXJnZXRfb2ZmKHN0cnVjdCBicGZfc2tfbG9va3VwX2tlcm4sXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5ODYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzcG9ydCwgMiwgdGFyZ2V0X3NpemUpKTtcXG4tLVxcbm5ldC9jb3JlL2ZpbHRlci5jLTExOTg4LVxcbm5ldC9jb3JlL2ZpbHRlci5jOjExOTg5OlxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IGJwZl9za19sb29rdXAsIHJlbW90ZV9wb3J0KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5MC1cXHRcXHQqdGFyZ2V0X3NpemUgPSAyO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5OTQ6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgbG9jYWxfcG9ydCk6XFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTUtXFx0XFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9ILCBzaS1cXHUwMDNlZHN0X3JlZywgc2ktXFx1MDAzZXNyY19yZWcsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTE5OTY6XFx0XFx0XFx0XFx0ICAgICAgYnBmX3RhcmdldF9vZmYoc3RydWN0IGJwZl9za19sb29rdXBfa2VybixcXG5uZXQvY29yZS9maWx0ZXIuYy0xMTk5Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRwb3J0LCAyLCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTE5OTktXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMDA6XFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cCwgaW5ncmVzc19pZmluZGV4KTpcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAwMS1cXHRcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX1csIHNpLVxcdTAwM2Vkc3RfcmVnLCBzaS1cXHUwMDNlc3JjX3JlZyxcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAwMjpcXHRcXHRcXHRcXHQgICAgICBicGZfdGFyZ2V0X29mZihzdHJ1Y3QgYnBmX3NrX2xvb2t1cF9rZXJuLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDAzLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW5ncmVzc19pZmluZGV4LCA0LCB0YXJnZXRfc2l6ZSkpO1xcbi0tXFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMDktXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTA6Y29uc3Qgc3RydWN0IGJwZl9wcm9nX29wcyBza19sb29rdXBfcHJvZ19vcHMgPSB7XFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTE6XFx0LnRlc3RfcnVuID0gYnBmX3Byb2dfdGVzdF9ydW5fc2tfbG9va3VwLFxcbm5ldC9jb3JlL2ZpbHRlci5jLTEyMDEyLX07XFxubmV0L2NvcmUvZmlsdGVyLmMtMTIwMTMtXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTQ6Y29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgc2tfbG9va3VwX3ZlcmlmaWVyX29wcyA9IHtcXG5uZXQvY29yZS9maWx0ZXIuYzoxMjAxNTpcXHQuZ2V0X2Z1bmNfcHJvdG9cXHRcXHQ9IHNrX2xvb2t1cF9mdW5jX3Byb3RvLFxcbm5ldC9jb3JlL2ZpbHRlci5jOjEyMDE2OlxcdC5pc192YWxpZF9hY2Nlc3NcXHQ9IHNrX2xvb2t1cF9pc192YWxpZF9hY2Nlc3MsXFxubmV0L2NvcmUvZmlsdGVyLmM6MTIwMTc6XFx0LmNvbnZlcnRfY3R4X2FjY2Vzc1xcdD0gc2tfbG9va3VwX2NvbnZlcnRfY3R4X2FjY2VzcyxcXG5uZXQvY29yZS9maWx0ZXIuYy0xMjAxOC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQxNDoxNTo1Mi42MTY3MjQ1NTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEzNDYwMzkyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBTb2NrZXQgTG9va3VwIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgdGhhdCBgQ09ORklHX0lORVRgIGlzIGEgcHJlcmVxdWlzaXRlIGZvciBgc2tfbG9va3VwYC4gTXkgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyB0aGlzIHBhdGNoIHRvdWNoZXM6IGBicGZfc2tfbG9va3VwX3RjcGAsIGBicGZfc2tfbG9va3VwX3VkcGAsIGBicGZfdGNfc2tfbG9va3VwX3RjcGAsIGBicGZfdGNfc2tfbG9va3VwX3VkcGAsIGBicGZfeGRwX3NrX2xvb2t1cF90Y3BgLCBgYnBmX3hkcF9za19sb29rdXBfdWRwYCwgYGJwZl9zb2NrX2FkZHJfc2tfbG9va3VwX3RjcGAsIGBicGZfc29ja19hZGRyX3NrX2xvb2t1cF91ZHBgLCBhbmQgYGJwZl9za19yZWxlYXNlYC4gVGhlc2UgYXJlIGFsbCBCUEYgaGVscGVycywgc28gSSBuZWVkIHRvIGhvbmUgaW4gb24gdGhlIGNvcmUgc3ltYm9scy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgYWJvdXQgYHNrX2xvb2t1cGAsIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgLCBgX19icGZfc2tfbG9va3VwYCwgYGJwZl9za19sb29rdXBgLCBgYnBmX3NrX3JlbGVhc2VgLCBgc2tfc2VsZWN0X3JldXNlcG9ydGAsIGBzb2NrX21hcF9sb29rdXBgLCBhbmQgYHNvY2tfaGFzaF9sb29rdXBgLlxuXG5IYW5nIG9uLCBgc2tfbG9va3VwYCBpcyBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYG5ldC9jb3JlL2ZpbHRlci5jYC4gVGhhdCdzIG5vdCBpZGVhbCBmb3IgdW5pcXVlIGlkZW50aWZpY2F0aW9uLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGBza19sb29rdXBgIGltcGxlbWVudGF0aW9ucyBpbiB0aGUga2VybmVsLi4uIHllcCwgdGhlcmUgYXJlIHF1aXRlIGEgZmV3LiBgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCBtaWdodCBiZSBiZXR0ZXIuIEFuZCBgX19icGZfc2tfbG9va3VwYCBhbmQgYGJwZl9za19sb29rdXBgIGFyZSBhbHNvIHN0YXRpYyBpbiBgbmV0L2NvcmUvZmlsdGVyLmNgLiBgYnBmX3NrX3JlbGVhc2VgIGlzIGEgQlBGIGhlbHBlciwgYW5kIGBza19zZWxlY3RfcmV1c2Vwb3J0YCBpcyBhbHNvIGEgQlBGIGhlbHBlci4gYHNvY2tfbWFwX2xvb2t1cGAgYW5kIGBzb2NrX2hhc2hfbG9va3VwYCBhcmUgc3RhdGljIGluIGBuZXQvY29yZS9zb2NrX21hcC5jYC5cblxuT2theSwgbGV0J3Mgc2VlIGlmIGBzb2NrX21hcF9sb29rdXBgIGFuZCBgc29ja19oYXNoX2xvb2t1cGAgYXJlIHN1ZmZpY2llbnRseSB1bmlxdWUgdG8gcmVwcmVzZW50IHRoZSBzb2NrbWFwIGFzcGVjdCBvZiB0aGlzIHBhdGNoPyBHb29kLCB0aGV5IGFyZS4gQW5kIGBicGZfc2tfbG9va3VwX2Z1bGxfc2tgPyBZZXMsIGl0IGFwcGVhcnMgdG8gYmUgYSB1bmlxdWUgZnVuY3Rpb24sIHByb2JhYmx5IGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyB2ZXJ5IHBhdGNoLiBBbmQgd2hhdCBhYm91dCBgc2tfc2VsZWN0X3JldXNlcG9ydGA/IFllcCwgaXQncyBhIHVuaXF1ZSBCUEYgaGVscGVyLlxuXG5TbywgdGhlIGRlZmluaXRpdmUgZm9jdXMgc3ltYm9scyBmb3IgYW5hbHlzaXMgYXJlOlxuXG4qICAgYGJwZl9za19sb29rdXBfZnVsbF9za2BcbiogICBgYnBmX3NrX3JlbGVhc2VgXG4qICAgYHNrX3NlbGVjdF9yZXVzZXBvcnRgXG4qICAgYHNvY2tfbWFwX2xvb2t1cGBcbiogICBgc29ja19oYXNoX2xvb2t1cGBcblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBJJ20gc2VlaW5nOiBgQlBGX1NZU0NBTExgLCBgTkVUYCwgYW5kIGBJTkVUYC5cblxuTGV0J3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2suLi4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5vdWdoIGZvciBgc29ja19tYXAuY2AuIGBDT05GSUdfSU5FVGAgY292ZXJzIGBza19sb29rdXBgIGFuZCB0aGUgQlBGIGhlbHBlcnMgaW4gYGZpbHRlci5jYC4gQW5kIG5hdHVyYWxseSwgYENPTkZJR19ORVRgIGlzIHJlcXVpcmVkIGZvciBuZXR3b3JraW5nLlxuXG5MZXQgbWUgc3VtbWFyaXplIG15IHJlYXNvbmluZyBzdWNjaW5jdGx5OiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIHdpdGhpbiBCUEYgc29ja2V0IGxvb2t1cCBoZWxwZXJzIChgYnBmX3NrX2xvb2t1cF9mdWxsX3NrYCwgYGJwZl9za19yZWxlYXNlYCksIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzb2NrbWFwIGxvb2t1cHMgKGBzb2NrX21hcF9sb29rdXBgLCBgc29ja19oYXNoX2xvb2t1cGApLiBJdCBhcHBlYXJzIHRvIGd1YXJhbnRlZSBjb3JyZWN0IHNvY2tldCByZWZlcmVuY2UgaGFuZGxpbmcgZHVyaW5nIGxvb2t1cHMgYW5kIHJlbGVhc2VzLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvcmUgQlBGIG5ldHdvcmtpbmcgbG9naWMsIHBvdGVudGlhbGx5IHJlYWNoZWQgdGhyb3VnaCBwcm9ncmFtcyBjYWxsaW5nIHRoZXNlIGhlbHBlcnMgb3IgaW50ZXJhY3Rpbmcgd2l0aCBzb2NrbWFwcy5cblxuTm93LCBsZXQncyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTU1NiwiT3V0cHV0VG9rZW5zIjoxOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMTQ6MTY6MDMuOTYyNzY1ODY1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyMzkyOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJJTkVUXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfc2tfbG9va3VwX2Z1bGxfc2tcIixcbiAgICBcImJwZl9za19yZWxlYXNlXCIsXG4gICAgXCJza19zZWxlY3RfcmV1c2Vwb3J0XCIsXG4gICAgXCJzb2NrX21hcF9sb29rdXBcIixcbiAgICBcInNvY2tfaGFzaF9sb29rdXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nIGxvZ2ljIGluIEJQRiBzb2NrZXQgbG9va3VwIGhlbHBlcnMgKGUuZy4sIGJwZl9za19sb29rdXBfZnVsbF9zaywgYnBmX3NrX3JlbGVhc2UpIGFuZCBzb2NrbWFwIGxvb2t1cCBmdW5jdGlvbnMgKHNvY2tfbWFwX2xvb2t1cCwgc29ja19oYXNoX2xvb2t1cCkuIEl0IGVuc3VyZXMgdGhhdCBhIHJlZmVyZW5jZSBpcyBhbHdheXMgdGFrZW4gZm9yIHNvY2tldHMgcmV0dXJuZWQgYnkgbG9va3VwcyBhbmQgcHJvcGVybHkgcmVsZWFzZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIEJQRiBuZXR3b3JraW5nIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgdmlhIEJQRiBwcm9ncmFtcyBjYWxsaW5nIHRoZXNlIGhlbHBlcnMgb3IgaW50ZXJhY3Rpbmcgd2l0aCBzb2NrbWFwcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiSU5FVFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX3NrX2xvb2t1cF9mdWxsX3NrXCIsXG4gICAgXCJicGZfc2tfcmVsZWFzZVwiLFxuICAgIFwic2tfc2VsZWN0X3JldXNlcG9ydFwiLFxuICAgIFwic29ja19tYXBfbG9va3VwXCIsXG4gICAgXCJzb2NrX2hhc2hfbG9va3VwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc29ja2V0IHJlZmVyZW5jZSBjb3VudGluZyBsb2dpYyBpbiBCUEYgc29ja2V0IGxvb2t1cCBoZWxwZXJzIChlLmcuLCBicGZfc2tfbG9va3VwX2Z1bGxfc2ssIGJwZl9za19yZWxlYXNlKSBhbmQgc29ja21hcCBsb29rdXAgZnVuY3Rpb25zIChzb2NrX21hcF9sb29rdXAsIHNvY2tfaGFzaF9sb29rdXApLiBJdCBlbnN1cmVzIHRoYXQgYSByZWZlcmVuY2UgaXMgYWx3YXlzIHRha2VuIGZvciBzb2NrZXRzIHJldHVybmVkIGJ5IGxvb2t1cHMgYW5kIHByb3Blcmx5IHJlbGVhc2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBCUEYgbmV0d29ya2luZyBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIHZpYSBCUEYgcHJvZ3JhbXMgY2FsbGluZyB0aGVzZSBoZWxwZXJzIG9yIGludGVyYWN0aW5nIHdpdGggc29ja21hcHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowjx6ht[1] Phase: Succeeded StartedAt: 2026-07-24 14:16:16 +0000 UTC FinishedAt: 2026-07-24 14:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 14:16:16 +0000 UTC FinishedAt: 2026-07-24 14:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2] Phase: Succeeded StartedAt: 2026-07-24 14:16:16 +0000 UTC FinishedAt: 2026-07-24 18:53:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 14:16:16 +0000 UTC FinishedAt: 2026-07-24 18:53:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 14:16:16 +0000 UTC FinishedAt: 2026-07-24 14:16:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 14:16:16 +0000 UTC FinishedAt: 2026-07-24 14:16:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjx6ht/series-workflowjx6ht-convert-artifact-3675950516/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 14:16:26 +0000 UTC FinishedAt: 2026-07-24 15:12:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 14:16:26 +0000 UTC FinishedAt: 2026-07-24 15:12:35 +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:*adf91f45-708c-4c7c-95fa-1e476a48b2d3,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-workflowjx6ht/series-workflowjx6ht-convert-artifact-3675950516/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": "d7daf35e-4e8e-4986-92d8-e4b99dc72d0e", "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-workflowjx6ht/series-workflowjx6ht-build-action-931021746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 14:16:26 +0000 UTC FinishedAt: 2026-07-24 15:12:08 +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:*adf91f45-708c-4c7c-95fa-1e476a48b2d3,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-workflowjx6ht/series-workflowjx6ht-convert-artifact-3675950516/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": "d7daf35e-4e8e-4986-92d8-e4b99dc72d0e", "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-workflowjx6ht/series-workflowjx6ht-build-action-931021746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 15:12:35 +0000 UTC FinishedAt: 2026-07-24 15:12:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 15:12:35 +0000 UTC FinishedAt: 2026-07-24 15:12:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 15:12:35 +0000 UTC FinishedAt: 2026-07-24 15:12:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 15:12:35 +0000 UTC FinishedAt: 2026-07-24 15:12:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjx6ht/series-workflowjx6ht-convert-artifact-1300769395/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 15:12:45 +0000 UTC FinishedAt: 2026-07-24 15:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 15:12:45 +0000 UTC FinishedAt: 2026-07-24 15:15:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d7daf35e-4e8e-4986-92d8-e4b99dc72d0e,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-workflowjx6ht/series-workflowjx6ht-build-action-931021746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 15:15:20 +0000 UTC FinishedAt: 2026-07-24 15:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 15:15:20 +0000 UTC FinishedAt: 2026-07-24 15:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 15:15:20 +0000 UTC FinishedAt: 2026-07-24 15:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 15:15:20 +0000 UTC FinishedAt: 2026-07-24 15:48:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*adf91f45-708c-4c7c-95fa-1e476a48b2d3,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-workflowjx6ht/series-workflowjx6ht-convert-artifact-1300769395/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": "ec78a417-8550-4a09-bf17-562b3e318081", "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-workflowjx6ht/series-workflowjx6ht-build-action-2997805607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 15:15:20 +0000 UTC FinishedAt: 2026-07-24 15:48:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*adf91f45-708c-4c7c-95fa-1e476a48b2d3,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-workflowjx6ht/series-workflowjx6ht-convert-artifact-1300769395/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": "ec78a417-8550-4a09-bf17-562b3e318081", "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-workflowjx6ht/series-workflowjx6ht-build-action-2997805607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 15:48:50 +0000 UTC FinishedAt: 2026-07-24 15:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 15:48:50 +0000 UTC FinishedAt: 2026-07-24 15:48:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 15:48:50 +0000 UTC FinishedAt: 2026-07-24 15:50:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 15:48:50 +0000 UTC FinishedAt: 2026-07-24 15:50:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec78a417-8550-4a09-bf17-562b3e318081,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjx6ht/series-workflowjx6ht-build-action-2997805607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 15:50:55 +0000 UTC FinishedAt: 2026-07-24 18:53:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 15:50:55 +0000 UTC FinishedAt: 2026-07-24 18:53:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*d7daf35e-4e8e-4986-92d8-e4b99dc72d0e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec78a417-8550-4a09-bf17-562b3e318081,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjx6ht/series-workflowjx6ht-build-action-931021746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjx6ht/series-workflowjx6ht-build-action-2997805607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 15:50:55 +0000 UTC FinishedAt: 2026-07-24 15:51:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 15:50:55 +0000 UTC FinishedAt: 2026-07-24 15:50:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjx6ht/series-workflowjx6ht-convert-artifact-3007199852/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 15:50:55 +0000 UTC FinishedAt: 2026-07-24 15:50:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 15:50:55 +0000 UTC FinishedAt: 2026-07-24 15:50:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 15:50:55 +0000 UTC FinishedAt: 2026-07-24 15:50:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 15:51:05 +0000 UTC FinishedAt: 2026-07-24 18:53:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjx6ht[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_sk_lookup_full_sk","bpf_sk_release","sk_select_reuseport","sock_map_lookup","sock_hash_lookup"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","INET","NET"],"series_id":"4207341f-d6f1-4058-875c-91cf2a50d9bb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 15:51:05 +0000 UTC FinishedAt: 2026-07-24 18:53:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d7daf35e-4e8e-4986-92d8-e4b99dc72d0e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec78a417-8550-4a09-bf17-562b3e318081,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjx6ht/series-workflowjx6ht-build-action-931021746/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjx6ht/series-workflowjx6ht-build-action-2997805607/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjx6ht/series-workflowjx6ht-convert-artifact-3007199852/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}