Name: series-workflowfbzk9 Phase: Succeeded StartedAt: 2026-09-04 09:42:58 +0000 UTC FinishedAt: 2026-09-04 13:46:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[0] Phase: Succeeded StartedAt: 2026-09-04 09:42:58 +0000 UTC FinishedAt: 2026-09-04 10:00:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 09:42:58 +0000 UTC FinishedAt: 2026-09-04 10:00:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dc41e961a269f2ca4196e669d6d8e05480899cd4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dc41e961a269f2ca4196e669d6d8e05480899cd4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG" ], "series_id": "b3096cd7-afee-426e-bb64-e0c698302ea3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_alloc_folio", "alloc_hugetlb_folio", "mem_cgroup_charge_hugetlb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBtZW1jZyBjaGFyZ2luZyByb3V0aW5lcyAoYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2ApIHRvIHBhc3MgYSB0YXJnZXQgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBwb2ludGVyIGFuZCBjaGFyZ2UgdGhlIGh1Z2V0bGIgZm9saW8gdG8gdGhlIGNncm91cCBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCBtbSAoYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYCkgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgdGFzayAoYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCkuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHBvaW50ZXIgcGFzc2luZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcGF0aHMgKGh1Z2V0bGJfYWxsb2NfZm9saW8sIGFsbG9jX2h1Z2V0bGJfZm9saW8sIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIpIHRvIGFzc29jaWF0ZSBhbmQgY2hhcmdlIGh1Z2UgZm9saW9zIGFnYWluc3QgdGhlIHRhcmdldCBtbV9zdHJ1Y3QgcmF0aGVyIHRoYW4gY3VycmVudC4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgY29ycmVjdCBjZ3JvdXAgYWNjb3VudGluZyBhbmQgYXZvaWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDk6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzODY3NjY0Y2QxYjJmYTc3OWI0MjQ1NzMyMGY0ZWVhMGUzMjNjMjg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwOTo1OTowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAxNmM0YzRjYWExMjZjLi40NWFkYTc1ZGMwNGU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtNjk5LDcgJiM0Mzs2OTksOCBAQCBlbnVtIGh1Z2V0bGJfYWxsb2NfZmxhZyB7XG4gI2RlZmluZSBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TIEJJVChIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TX0JJVClcbiBcbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKTtcbiYjNDM7XHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdHU4IGFsbG9jX2ZsYWdzKTtcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xuIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li4zNjJhZjU4ZTUwYTQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjYyLDcgJiM0Mzs2NjIsOCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTtcbiB9XG4gXG4taW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdCAgICAgIGdmcF90IGdmcCk7XG4gXG4gaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuQEAgLTExNTYsOSAmIzQzOzExNTcsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4ge1xuLSAgICAgICAgcmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNzg1NzcyODQ1Nzk1Mi4uNWFiNWE1MTQxNTc0OCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtMjgxNiw2ICYjNDM7MjgxNiw3IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKiBodWdldGxiX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgYSBodWdldGxiIGZvbGlvLlxuICAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXG4gICogQG1wb2xpOiBJbnRlcnByZXRlZCBtZW1vcnkgcG9saWN5IHRvIHVzZSBmb3IgYWxsb2NhdGlvbi5cbiYjNDM7ICogQG1tOiBNZW1vcnkgZGVzY3JpcHRvciBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXQuXG4gICogQGFsbG9jX2ZsYWdzOiBGbGFncyBjb250cm9sbGluZyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvci5cbiAgKlxuICAqIEFsbG9jYXRlcyBhIGh1Z2V0bGIgZm9saW8gYW5kIGhhbmRsZXMgY2dyb3VwIGNoYXJnaW5nIGFuZCBnbG9iYWwgaHN0YXRlXG5AQCAtMjgyNiw3ICYjNDM7MjgyNyw4IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy5cbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuJiM0MztcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0dTggYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Ym9vbCBjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCA9IGFsbG9jX2ZsYWdzIFx1MDAyNlxuIFx0XHRcdFx0XHQgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG5AQCAtMjg4MSw3ICYjNDM7Mjg4Myw4IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuIFxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXG4tXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbiYjNDM7XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBtbSxcbiYjNDM7XHRcdFx0XHRcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuIFx0LypcbiBcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcbiBcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcbkBAIC0zMDIwLDcgJiM0MzszMDIzLDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQubm9kZW1hc2sgPSBub2RlbWFzayxcbiBcdH07XG4gXG4tXHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcbiYjNDM7XHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXHUwMDI2bXBvbGksIHZtYS1cdTAwM2V2bV9tbSwgYWxsb2NfZmxhZ3MpO1xuIFxuIFx0bXBvbF9jb25kX3B1dChtcG9sKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjBiNzk1YmYxZTZjZjEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUyMzMsNiAmIzQzOzUyMzMsNyBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuIC8qKlxuICAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cbiAgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbiYjNDM7ICogQG1tOiBtbSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldFxuICAqIEBnZnA6IHJlY2xhaW0gbW9kZVxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbGxvY2F0aW5nIGEgaHVnZSBwYWdlIGZvbGlvLCBhZnRlciB0aGUgcGFnZSBoYXNcbkBAIC01MjQyLDkgJiM0Mzs1MjQzLDEwIEBAIGludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4gICogUmV0dXJucyBFTk9NRU0gaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgZnVsbC5cbiAgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLlxuICAqL1xuLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdCAgICAgIGdmcF90IGdmcClcbiB7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIHBhdGhzIChodWdldGxiX2FsbG9jX2ZvbGlvLCBhbGxvY19odWdldGxiX2ZvbGlvLCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKSB0byBhc3NvY2lhdGUgYW5kIGNoYXJnZSBodWdlIGZvbGlvcyBhZ2FpbnN0IHRoZSB0YXJnZXQgbW1fc3RydWN0IHJhdGhlciB0aGFuIGN1cnJlbnQuIFRoaXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcgdG8gdmVyaWZ5IGNvcnJlY3QgY2dyb3VwIGFjY291bnRpbmcgYW5kIGF2b2lkIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzg2NzY2NGNkMWIyZmE3NzliNDI0NTczMjBmNGVlYTBlMzIzYzI4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDk6NTk6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1YWRhNzVkYzA0ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC02OTksNyAmIzQzOzY5OSw4IEBAIGVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHsKICNkZWZpbmUgSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUyBCSVQoSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OU19CSVQpCiAKIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLAotCQlzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpOwomIzQzOwkJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJdTggYWxsb2NfZmxhZ3MpOwogc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcik7CiBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdkMWMwY2UxODlhODguLjM2MmFmNThlNTBhNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC02NjIsNyAmIzQzOzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTsKIH0KIAotaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTsKJiM0MztpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCQkgICAgICBnZnBfdCBnZnApOwogCiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLAogCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApOwpAQCAtMTE1Niw5ICYjNDM7MTE1NywxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCQkgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCkKIHsKLSAgICAgICAgcmV0dXJuIDA7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi41YWI1YTUxNDE1NzQ4IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0yODE2LDYgJiM0MzsyODE2LDcgQEAgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKQogICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby4KICAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suCiAgKiBAbXBvbGk6IEludGVycHJldGVkIG1lbW9yeSBwb2xpY3kgdG8gdXNlIGZvciBhbGxvY2F0aW9uLgomIzQzOyAqIEBtbTogTWVtb3J5IGRlc2NyaXB0b3Igb2YgdGhlIGFsbG9jYXRpb24gdGFyZ2V0LgogICogQGFsbG9jX2ZsYWdzOiBGbGFncyBjb250cm9sbGluZyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvci4KICAqCiAgKiBBbGxvY2F0ZXMgYSBodWdldGxiIGZvbGlvIGFuZCBoYW5kbGVzIGNncm91cCBjaGFyZ2luZyBhbmQgZ2xvYmFsIGhzdGF0ZQpAQCAtMjgyNiw3ICYjNDM7MjgyNyw4IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZCkKICAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLgogICovCiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKLQkJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKQomIzQzOwkJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJdTggYWxsb2NfZmxhZ3MpCiB7CiAJYm9vbCBjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCA9IGFsbG9jX2ZsYWdzICZhbXA7CiAJCQkJCSAgSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDsKQEAgLTI4ODEsNyAmIzQzOzI4ODMsOCBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAogCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAKLQlyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTsKJiM0MzsJcmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgbW0sCiYjNDM7CQkJCQlnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTsKIAkvKgogCSAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWYKIAkgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsCkBAIC0zMDIwLDcgJiM0MzszMDIzLDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkubm9kZW1hc2sgPSBub2RlbWFzaywKIAl9OwogCi0JZm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsICZhbXA7bXBvbGksIGFsbG9jX2ZsYWdzKTsKJiM0MzsJZm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsICZhbXA7bXBvbGksIHZtYS0mZ3Q7dm1fbW0sIGFsbG9jX2ZsYWdzKTsKIAogCW1wb2xfY29uZF9wdXQobXBvbCk7CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxMjcxZDM5MGI2MTdlLi4wYjc5NWJmMWU2Y2YxIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC01MjMzLDYgJiM0Mzs1MjMzLDcgQEAgaW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCkKIC8qKgogICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpbwogICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkCiYjNDM7ICogQG1tOiBtbSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldAogICogQGdmcDogcmVjbGFpbSBtb2RlCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbGxvY2F0aW5nIGEgaHVnZSBwYWdlIGZvbGlvLCBhZnRlciB0aGUgcGFnZSBoYXMKQEAgLTUyNDIsOSAmIzQzOzUyNDMsMTAgQEAgaW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCkKICAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuCiAgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLgogICovCi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApCiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJICAgICAgZ2ZwX3QgZ2ZwKQogewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTsKIAlpbnQgcmV0ID0gMDsKIAogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGhpdHRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgcHJldHR5IGhhcmQsIHNwZWNpZmljYWxseSBhcm91bmQgaHVnZXRsYmZzIGFuZCBtZW1vcnkgY2dyb3Vwcy4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vaHVnZXRsYi5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYWRkaW5nIGEgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBwYXJhbWV0ZXIgdG8gYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKWAgd2l0aCBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgLiBBaGEsIHNvIGl0JiMzOTtzIHRyYW5zaXRpb25pbmcgZnJvbSB1c2luZyB0aGUgY3VycmVudCB0YXNrJiMzOTtzIG1lbW9yeSBjb250ZXh0IHRvIHVzaW5nIGEgc3BlY2lmaWVkIG9uZS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AgaXMgbm93IGNhbGxpbmcgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHdpdGggdGhhdCBgbW1gIHBhcmFtZXRlciwgYW5kIHdpdGhpbiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIGl0JiMzOTtzIHBhc3NpbmcgYHZtYS0mZ3Q7dm1fbW1gIHRvIGBodWdldGxiX2FsbG9jX2ZvbGlvYC4gTWFrZXMgc2Vuc2U7IGB2bWEtJmd0O3ZtX21tYCBpcyB0aGUgcmVsZXZhbnQgbWVtb3J5IG1hcHBpbmcuCgpJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGZvciBvdGhlciBjYWxsIHNpdGVzIG9mIHRob3NlIHR3byBmdW5jdGlvbnMsIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBjb25zaXN0ZW50IGFjcm9zcyB0aGUga2VybmVsLiBCZXR0ZXIgcnVuIGBncmVwcGVyYCBhbmQgZG91YmxlLWNoZWNrLCBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueXRoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIGVzcGVjaWFsbHkgaW4gY29udGV4dHMgdGhhdCBtaWdodCBoYXZlIHN1YnRseSBkaWZmZXJlbnQgbWVtb3J5IGNvbnRleHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW98bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02OTM9ZW51bSBodWdldGxiX2FsbG9jX2ZsYWcge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwMTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMi1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjYtXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTU0PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNjA6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE2MS1cdFx0XHRcdFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vaHVnZXRsYi5jPTI4MDc9dm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy0yODE1LS8qKlxubW0vaHVnZXRsYi5jOjI4MTY6ICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cbm1tL2h1Z2V0bGIuYy0yODE3LSAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXG4tLVxubW0vaHVnZXRsYi5jLTI4MjgtICovXG5tbS9odWdldGxiLmM6MjgyOTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGIuYy0yODMwLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vaHVnZXRsYi5jLTI4ODUtXG5tbS9odWdldGxiLmM6Mjg4NjpcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIG1tLFxubW0vaHVnZXRsYi5jLTI4ODctXHRcdFx0XHRcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuLS1cbm1tL2h1Z2V0bGIuYy0yODg5LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxubW0vaHVnZXRsYi5jOjI4OTA6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG5tbS9odWdldGxiLmMtMjg5MS1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAyNS1cbm1tL2h1Z2V0bGIuYzozMDI2Olx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCB2bWEtXHUwMDNldm1fbW0sIGFsbG9jX2ZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0zMDI3LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjIxPWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMzMtLyoqXG5tbS9tZW1jb250cm9sLmM6NTIzNDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTIzNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjQ2OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0vbWVtY29udHJvbC5jLTUyNDctXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMzgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIENhbGxzIHRvIGBodWdldGxiX2FsbG9jX2ZvbGlvYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyB1c2VkLiBJJiMzOTt2ZSBnb3QgYSBzcGVjaWZpYyBjb25jZXJuIGFuZCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIGxpbWl0ZWQgdG8gdGhlIGtub3duIGluc3RhbmNlcy4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSwgc28gYSBnbG9iYWwgc2VhcmNoIGlzIGluIG9yZGVyLiBMZXQmIzM5O3MgZmlyZSB1cCBhIGBncmVwYCBhbmQgaHVudCBmb3IgZXZlcnkgc2luZ2xlIGluc3RhbmNlIG9mIGBodWdldGxiX2FsbG9jX2ZvbGlvYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmF3IGRhdGEgSSBuZWVkIHRvIHN0YXJ0IG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDAtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDItXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9odWdldGxiLmM9MjgwNz12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXG4tLVxubW0vaHVnZXRsYi5jLTI4MTUtLyoqXG5tbS9odWdldGxiLmM6MjgxNjogKiBodWdldGxiX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgYSBodWdldGxiIGZvbGlvLlxubW0vaHVnZXRsYi5jLTI4MTctICogQGg6IEh1Z2V0bGIgc3RhdGUgY29udHJvbCBibG9jay5cbi0tXG5tbS9odWdldGxiLmMtMjgyOC0gKi9cbm1tL2h1Z2V0bGIuYzoyODI5OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYi5jLTI4MzAtXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9odWdldGxiLmM9Mjk0Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTMwMjUtXG5tbS9odWdldGxiLmM6MzAyNjpcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcdTAwMjZtcG9saSwgdm1hLVx1MDAzZXZtX21tLCBhbGxvY19mbGFncyk7XG5tbS9odWdldGxiLmMtMzAyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjU4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqSW52ZXN0aWdhdGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEh1Z2V0bGIgbWVtb3J5IGFjY291bnRpbmcgaXMgd29ya2luZyB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgZnJhbWV3b3JrLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgaW50ZXJhY3Rpb24gb3IgZWRnZSBjYXNlIEkmIzM5O20gbWlzc2luZy4gVGltZSB0byBqdW1wIGludG8gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBtbS9tZW1jb250cm9sLmNgLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgZGlyZWN0bHkgdG8gdGhlIHZpY2luaXR5IG9mIGxpbmUgNTIzMy4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gSG9wZWZ1bGx5LCB0aGF0IGxpbmUgYW5kIGl0cyBzdXJyb3VuZGluZyBjb250ZXh0IGNhbiBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjMwOlx0XHRyZXR1cm4gcmV0O1xuNTIzMTpcdH1cbjUyMzI6XHRcbjUyMzM6XHQvKipcbjUyMzQ6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG41MjM1Olx0ICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG41MjM2Olx0ICogQG1tOiBtbSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldFxuNTIzNzpcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxuNTIzODpcdCAqXG41MjM5Olx0ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbGxvY2F0aW5nIGEgaHVnZSBwYWdlIGZvbGlvLCBhZnRlciB0aGUgcGFnZSBoYXNcbjUyNDA6XHQgKiBhbHJlYWR5IGJlZW4gb2J0YWluZWQgYW5kIGNoYXJnZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGh1Z2V0bGIgY2dyb3VwXG41MjQxOlx0ICogY29udHJvbGxlciAoaWYgaXQgaXMgZW5hYmxlZCkuXG41MjQyOlx0ICpcbjUyNDM6XHQgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLlxuNTI0NDpcdCAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCB0aGUgY2hhcmdpbmcuXG41MjQ1Olx0ICovXG41MjQ2Olx0aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG41MjQ3Olx0XHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuNTI0ODpcdHtcbjUyNDk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xuNTI1MDpcdFx0aW50IHJldCA9IDA7XG41MjUxOlx0XG41MjUyOlx0XHQvKlxuNTI1MzpcdFx0ICogRXZlbiBtZW1jZyBkb2VzIG5vdCBhY2NvdW50IGZvciBodWdldGxiLCB3ZSBzdGlsbCB3YW50IHRvIHVwZGF0ZVxuNTI1NDpcdFx0ICogc3lzdGVtLWxldmVsIHN0YXRzIHZpYSBscnV2ZWNfc3RhdF9tb2RfZm9saW8uIFJldHVybiAwLCBhbmQgc2tpcFxuNTI1NTpcdFx0ICogY2hhcmdpbmcgdGhlIG1lbWNnLlxuNTI1NjpcdFx0ICovXG41MjU3Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcbjUyNTg6XHRcdFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuNTI1OTpcdFx0XHRnb3RvIG91dDtcbjUyNjA6XHRcbjUyNjE6XHRcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxuNTI2MjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuNTI2MzpcdFxuNTI2NDpcdG91dDpcbjUyNjU6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbjUyNjY6XHRcdHJldHVybiByZXQ7XG41MjY3Olx0fVxuNTI2ODpcdFxuNTI2OTpcdC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTWVtb3J5IENncm91cCBSZXRyaWV2YWwgTWV0aG9kcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSB0d28gZnVuY3Rpb25zOiBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgIGFuZCBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgLiBUaGUgY29yZSBvZiBteSBpbnRlcmVzdCBsaWVzIGluIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZSBiZXR3ZWVuIHRoZXNlIHR3byBtZXRob2RzIG9mIGZldGNoaW5nIHRoZSBtZW1vcnkgY2dyb3VwLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSBJJiMzOTtkIGNob29zZSBvbmUgb3ZlciB0aGUgb3RoZXIuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpc3NlY3QgdGhlIGJlaGF2aW9yIG9mIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tYC4gSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBpdHMgZGVmaW5pdGlvbiwgdHJhY2UgaXRzIGltcGxlbWVudGF0aW9uLCBhbmQgZXNzZW50aWFsbHkgbWFwIG91dCBpdHMgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQmIzM5O3MgKmRvaW5nKiB1bmRlciB0aGUgaG9vZCAtIHdoaWNoIGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBhY2Nlc3NpbmcsIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgb3IgZWRnZSBjYXNlcywgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBkaWZmZXJzIGluIGl0cyBhcHByb2FjaCBmcm9tIHRoZSBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgIGZ1bmN0aW9uLiBUaGlzIGFuYWx5c2lzIGlzIGNyaXRpY2FsIHRvIGVuc3VyaW5nIEkgYW0gY29ycmVjdGx5IGludGVycHJldGluZyBhbmQgdXNpbmcgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgZ2l2ZW4gY29udGV4dC4gVGhpcyBpcywgYWZ0ZXIgYWxsLCB0aGUgZm91bmRhdGlvbiBmb3IgbWFraW5nIGluZm9ybWVkIGRlY2lzaW9ucyBhYm91dCB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbWVtX2Nncm91cF9mcm9tX21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYz0xMDAxPXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2d4X2VuY2xfZ2V0X21lbV9jZ3JvdXAoc3RydWN0IHNneF9lbmNsICplbmNsKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDEyLVx0aWYgKCFjdXJyZW50X2lzX2tzZ3hkKCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTAxMzpcdFx0cmV0dXJuIGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cdTAwM2VtbSk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAxNC1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAyNC1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYzoxMDI1Olx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oZW5jbF9tbS1cdTAwM2VtbSk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAyNi1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA0MC1cdGlmICghbWVtY2cpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTA0MTpcdFx0cmV0dXJuIGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oTlVMTCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA0Mi1cbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTE1ODk9U1lTQ0FMTF9ERUZJTkUyKGZhbm90aWZ5X2luaXQsIHVuc2lnbmVkIGludCwgZmxhZ3MsIHVuc2lnbmVkIGludCwgZXZlbnRfZl9mbGFncylcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTE2ODQtXHRncm91cC1cdTAwM2VmYW5vdGlmeV9kYXRhLmZsYWdzID0gZmxhZ3MgfCBpbnRlcm5hbF9mbGFncztcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM6MTY4NTpcdGdyb3VwLVx1MDAzZW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVx1MDAzZW1tKTtcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtMTY4Ni1cdGdyb3VwLVx1MDAzZXVzZXJfbnMgPSBnZXRfdXNlcl9ucyh1c2VyX25zKTtcbi0tXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYz02NDE9c3RhdGljIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqaW5vdGlmeV9uZXdfZ3JvdXAodW5zaWduZWQgaW50IG1heF9ldmVudHMpXG4tLVxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMtNjYzLVx0Z3JvdXAtXHUwMDNlbWF4X2V2ZW50cyA9IG1heF9ldmVudHM7XG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYzo2NjQ6XHRncm91cC1cdTAwM2VtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cdTAwM2VtbSk7XG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYy02NjUtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NzU1PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzU2LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NzU3OnN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTc1OC1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMjA2PXN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTIxMS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEyMTI6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyMTMte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTM4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmFjdGl2ZV9tZW1jZyh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTQ2LS8qKlxubW0vbWVtY29udHJvbC5jOjExNDc6ICogZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbTogT2J0YWluIGEgcmVmZXJlbmNlIG9uIGdpdmVuIG1tX3N0cnVjdCYjMzk7cyBtZW1jZy5cbm1tL21lbWNvbnRyb2wuYy0xMTQ4LSAqIEBtbTogbW0gZnJvbSB3aGljaCBtZW1jZyBzaG91bGQgYmUgZXh0cmFjdGVkLiBJdCBjYW4gYmUgTlVMTC5cbi0tXG5tbS9tZW1jb250cm9sLmMtMTE1Ni0gKi9cbm1tL21lbWNvbnRyb2wuYzoxMTU3OnN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vbWVtY29udHJvbC5jLTExNTgte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTkzLX1cbm1tL21lbWNvbnRyb2wuYzoxMTk0OkVYUE9SVF9TWU1CT0woZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbSk7XG5tbS9tZW1jb250cm9sLmMtMTE5NS1cbi0tXG5tbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTY0LVxubW0vbWVtY29udHJvbC5jOjI1NjU6XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cdTAwM2VtbSk7XG5tbS9tZW1jb250cm9sLmMtMjU2Ni1cdGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoID0gMDtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjI1LVxubW0vbWVtY29udHJvbC5jOjUyMjY6XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xubW0vbWVtY29udHJvbC5jLTUyMjctXHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjQ2PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjQ4LXtcbm1tL21lbWNvbnRyb2wuYzo1MjQ5Olx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS9tZW1jb250cm9sLmMtNTI1MC1cdGludCByZXQgPSAwO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjgxPWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4tLVxubW0vbWVtY29udHJvbC5jLTUyOTItXHRpZiAoIW1lbWNnIHx8ICFjc3NfdHJ5Z2V0X29ubGluZShcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpKVxubW0vbWVtY29udHJvbC5jOjUyOTM6XHRcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS9tZW1jb250cm9sLmMtNTI5NC1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI5NDI9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTQ0LVx0aW50IG5pZDtcbm1tL3Ztc2Nhbi5jOjI5NDU6XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbm1tL3Ztc2Nhbi5jLTI5NDYtXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTU0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmb3IgQ29uc2lzdGVuY3kqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgYF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClgLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgcmlnaHQgb2ZmIHRoZSBiYXQsIGVmZmljaWVudGx5IHVzZXMgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYC4gVGhpcyBpcyBhIGdvb2Qgc2lnbiwgYSBjbGVhbiBkZXNpZ24gZGVjaXNpb24uIEkmIzM5O20gbm90aW5nIHRoaXMgc3BlY2lmaWNhbGx5IGJlY2F1c2UgSSYjMzk7dmUgYmVlbiBjb21wYXJpbmcgaXQgdG8gaG93IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCAqdXNlZCogdG8gb3BlcmF0ZSwgYW5kIEkgc2VlIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZS4gSXQgd2FzIHByZXZpb3VzbHkgdXNpbmcgYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCwgd2hpY2gsIGZyYW5rbHksIHN0cmlrZXMgbWUgYXMgbGVzcyBlbGVnYW50IGluIHRoaXMgY29udGV4dCwgZXNwZWNpYWxseSB3aGVuIHdlIGNvbnNpZGVyIHRoZSBub3cgYXZhaWxhYmxlIGBtbWAgYXJndW1lbnQuCgpUaGUga2V5IGNoYW5nZSwgYW5kIHdoYXQgSSYjMzk7bSBmb2N1c2luZyBvbiwgaXMgdGhhdCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgKm5vdyogdGFrZXMgYG1tYCBkaXJlY3RseSBhbmQgc3Vic2VxdWVudGx5IGNoYXJnZXMgYmFzZWQgb24gYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYC4gVGhpcyBzZWVtcyBsaWtlIGEgbW92ZSB0b3dhcmRzIGNvbnNpc3RlbmN5IGFuZCBsaWtlbHkgYSBiZXR0ZXIsIG1vcmUgYWNjdXJhdGUgbW9kZWwuIFRoZSBmYWN0IHRoYXQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gICphbHNvKiB0YWtlcyB0aGUgYG1tYCBzdHJ1Y3R1cmUgZnVydGhlciBzb2xpZGlmaWVzIG15IHRob3VnaHQgcHJvY2VzcyBhbmQgbWFrZXMgdGhpcyBhIHZlcnkgaW50ZXJlc3RpbmcgcmVmYWN0b3JpbmcsIGlmIHRoYXQgaXMgaW4gZmFjdCB0aGUgY2FzZS4KCk5vdyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0FyZSB0aGVyZSBvdGhlciBwbGFjZXMgaW4gdGhlIGNvZGUgdGhhdCBhcmUgc2ltaWxhcj8gTWF5YmUgc29tZSB0aGF0IGhhdmUgbm90IGJlZW4gbW9kaWZpZWQgeWV0PyYjMzQ7IFRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgaW1wcm92ZW1lbnQsIEkgbmVlZCBhIGJyb2FkZXIgdmlldy4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb2RlYmFzZSBmb3IgYWxsIGluc3RhbmNlcyBvZiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuIExldCYjMzk7cyBzZWUgd2hhdCB0dXJucyB1cCBpbiB0aGUgZ3JlcC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzZW5zZSBvZiB0aGUgYmVmb3JlLWFuZC1hZnRlciBhbmQgYW55IGZ1cnRoZXIgcG90ZW50aWFsIG9wcG9ydHVuaXRpZXMgZm9yIHRoaXMgdHlwZSBvZiBjbGVhbi11cCBhbmQgY29kZSBpbXByb3ZlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE4MT1hcmUgYWxsb2NhdGVkIGFuZCBpbnN0YW50aWF0ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgbWFwcGluZy4gIFRoZSBhbGxvY2F0aW9uXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4MjppcyBwZXJmb3JtZWQgd2l0aGluIHRoZSByb3V0aW5lIGFsbG9jX2h1Z2V0bGJfZm9saW8oKTo6XG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4My1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg0Olx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODUtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGF2b2lkX3Jlc2VydmUpXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4Ni1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg3OmFsbG9jX2h1Z2V0bGJfZm9saW8gaXMgcGFzc2VkIGEgVk1BIHBvaW50ZXIgYW5kIGEgdmlydHVhbCBhZGRyZXNzLCBzbyBpdCBjYW5cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg4LWNvbnN1bHQgdGhlIHJlc2VydmF0aW9uIG1hcCB0byBkZXRlcm1pbmUgaWYgYSByZXNlcnZhdGlvbiBleGlzdHMuICBJbiBhZGRpdGlvbixcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg5OmFsbG9jX2h1Z2V0bGJfZm9saW8gdGFrZXMgdGhlIGFyZ3VtZW50IGF2b2lkX3Jlc2VydmUgd2hpY2ggaW5kaWNhdGVzIHJlc2VydmVzXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE5MC1zaG91bGQgbm90IGJlIHVzZWQgZXZlbiBpZiBpdCBhcHBlYXJzIHRoZXkgaGF2ZSBiZWVuIHNldCBhc2lkZSBmb3IgdGhlXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0yMDc9aXMgY2FsbGVkLiAgVGhpcyByb3V0aW5lIHRha2VzIHR3byBhcmd1bWVudHMgcmVsYXRlZCB0byByZXNlcnZhdGlvbnM6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDktLSBhdm9pZF9yZXNlcnZlLCB0aGlzIGlzIHRoZSBzYW1lIHZhbHVlL2FyZ3VtZW50IHBhc3NlZCB0b1xuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMTA6ICBhbGxvY19odWdldGxiX2ZvbGlvKCkuXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIxMS0tIGNoZywgZXZlbiB0aG91Z2ggdGhpcyBhcmd1bWVudCBpcyBvZiB0eXBlIGxvbmcgb25seSB0aGUgdmFsdWVzIDAgb3IgMSBhcmVcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTI0Nz1JdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSByZXNlcnZlIG1hcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRoZSBjYWxsXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjI0ODp0byB2bWFfbmVlZHNfcmVzZXJ2YXRpb24oKSBhdCB0aGUgYmVnaW5uaW5nIG9mIGFsbG9jX2h1Z2V0bGJfZm9saW8oKSBhbmQgdGhlXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTI0OS1jYWxsIHRvIHZtYV9jb21taXRfcmVzZXJ2YXRpb24oKSBhZnRlciB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZC4gIFRoaXMgd291bGRcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMTY9SFBBR0VfUkVTVl9PV05FUuagh+W/l+iiq+iuvue9ru+8jOS7peihqOaYjuivpVZNQeaLpeaciemihOeVmeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0NS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE0NjrlvZPkuI7pooTnlZnnm7jlhbPnmoTlt6jpobXlnKjnm7jlupTnmoTmmKDlsITkuK3ooqvliIbphY3lkozlrp7kvovljJbml7bvvIzpooTnlZnlsLHooqvmtojogJfkuobjgILor6XliIbphY3mmK/lnKjlh73mlbBhbGxvY19odWdldGxiX2ZvbGlvLi4uXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDct5Lit6L+b6KGM55qEOjpcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0OC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE0OTpcdHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1MC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgYXZvaWRfcmVzZXJ2ZSlcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1MS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MjphbGxvY19odWdldGxiX2ZvbGlv6KKr5Lyg6YCS57uZ5LiA5LiqVk1B5oyH6ZKI5ZKM5LiA5Liq6Jma5ouf5Zyw5Z2A77yM5Zug5q2k5a6D5Y+v5Lul5p+l6ZiF6aKE55WZ5pig5bCE5Lul56Gu5a6a5piv5ZCm5a2Y5Zyo6aKE55WZ44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTM65q2k5aSW77yMYWxsb2NfaHVnZXRsYl9mb2xpb+mcgOimgeS4gOS4quWPguaVsGF2b2lkX3Jlc2VydmXvvIzor6Xlj4LmlbDooajnpLrljbPkvb/nnIvotbfmnaXlt7Lnu4/kuLrmjIflrprnmoTlnLDlnYDpooTnlZnkuoZcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1NC3pooTnlZnvvIzkuZ/kuI3lupTor6Xkvb/nlKjpooTnlZnjgIJhdm9pZF9yZXNlcnZl5Y+C5pWw5pyA5bi46KKr55So5LqO5YaZ5pe25ou36LSd5ZKM6aG16Z2i6L+B56e755qE5oOF5Ya15LiL77yM5Y2z546w5pyJ6aG16Z2i55qE6aKdXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTYwPXZtYV9uZWVkc19yZXNlcnZhdGlvbigp6L+U5Zue55qE5YC86YCa5bi45Li6MOaIljHjgILlpoLmnpzor6XlnLDlnYDlrZjlnKjpooTnlZnvvIzliJnkuLow77yM5aaC5p6c5LiN5a2Y5Zyo6aKE55WZ77yM5YiZ5Li6MeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2NS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE2NjotIGF2b2lkX3Jlc2VydmXvvIzov5nmmK/kvKDpgJLnu5lhbGxvY19odWdldGxiX2ZvbGlvKCnnmoTlkIzkuIDkuKrlgLwv5Y+C5pWw44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNjctLSBjaGfvvIzlsL3nrqHov5nkuKrlj4LmlbDnmoTnsbvlnovmmK9sb25n77yM5L2G5Y+q5pyJMOaIljHnmoTlgLzooqvkvKDpgJLnu5lkZXF1ZXVlX2h1Z2VfcGFnZV92bWHjgILlpoLmnpzor6XlgLzkuLow77yMXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTkzPVNldFBhZ2VQcml2YXRlKHBhZ2Up5ZKMcmVzdl9odWdlX3BhZ2VzLeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwMi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjIwMzrlnKhhbGxvY19odWdldGxiX2ZvbGlvKCnlvIDlp4vosIPnlKh2bWFfbmVlZHNfcmVzZXJ2YXRpb24oKeWSjOmhtemdouWIhumFjeWQjuiwg+eUqFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjA0LXZtYV9jb21taXRfcmVzZXJ2YXRpb24oKeS5i+mXtO+8jOmihOeVmeaYoOWwhOacieWPr+iDveiiq+aUueWPmOOAguWmguaenGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc+WcqOWFsVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTcwMD1zdGF0aWMgbG9uZyBodWdldGxiZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTItXHRcdCAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzkzOlx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oXHUwMDI2cHNldWRvX3ZtYSwgYWRkciwgZmFsc2UpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk0LVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgxMy1cdFx0ICogZm9saW9fdW5sb2NrIGJlY2F1c2UgbG9ja2VkIGJ5IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODE0Olx0XHQgKiBmb2xpb19wdXQoKSBkdWUgdG8gcmVmZXJlbmNlIGZyb20gYWxsb2NfaHVnZXRsYl9mb2xpbygpXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MTUtXHRcdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwMT1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDMtXHRcdHU4IGFsbG9jX2ZsYWdzKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwNDpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDUtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA2OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNy1cdFx0XHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwOC1cdFx0XHRcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA5OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzEwLVx0XHRcdFx0XHQgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEyMz1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTI2LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMjgtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTM0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzU6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEzNi1cdFx0XHQgICAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExNDE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTE0MjphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTE0My1cdFx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jPTIxNDI9c3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTIxNjUtXG5tbS9odWdldGxiLmM6MjE2NjpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbm1tL2h1Z2V0bGIuYy0yMTY3LVx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vaHVnZXRsYi5jLTIxODYtLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXG5tbS9odWdldGxiLmM6MjE4NzpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9odWdldGxiLmMtMjE4OC1cdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLCBib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKVxuLS1cbm1tL2h1Z2V0bGIuYz0yNTIwPXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjUyNy0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHJlc3RvcmUgcmVzZXJ2YXRpb24gaW5mb3JtYXRpb24gb24gZXJyb3IgcGF0aHMuXG5tbS9odWdldGxiLmM6MjUyODogKiBJdCBzaG91bGQgT05MWSBiZSBjYWxsZWQgZm9yIGZvbGlvcyBhbGxvY2F0ZWQgdmlhIGFsbG9jX2h1Z2V0bGJfZm9saW8oKSxcbm1tL2h1Z2V0bGIuYy0yNTI5LSAqIGFuZCB0aGUgaHVnZXRsYiBtdXRleCBzaG91bGQgcmVtYWluIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgcm91dGluZS5cbi0tXG5tbS9odWdldGxiLmMtMjUzNC0gKiAyKSBObyByZXNlcnZhdGlvbiB3YXMgaW4gcGxhY2UgZm9yIHRoZSBwYWdlLCBzbyBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBpc1xubW0vaHVnZXRsYi5jOjI1MzU6ICogICAgbm90IHNldC4gIEhvd2V2ZXIsIGFsbG9jX2h1Z2V0bGJfZm9saW8gYWx3YXlzIHVwZGF0ZXMgdGhlIHJlc2VydmUgbWFwLlxubW0vaHVnZXRsYi5jLTI1MzYtICpcbi0tXG5tbS9odWdldGxiLmMtMjU0My0gKlxubW0vaHVnZXRsYi5jOjI1NDQ6ICogSW4gY2FzZSAyLCBzaW1wbHkgdW5kbyByZXNlcnZlIG1hcCBtb2RpZmljYXRpb25zIGRvbmUgYnkgYWxsb2NfaHVnZXRsYl9mb2xpby5cbm1tL2h1Z2V0bGIuYy0yNTQ1LSAqL1xubW0vaHVnZXRsYi5jPTI1NDY9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTI1NzItXHRcdFx0ICogVGhpcyBpbmRpY2F0ZXMgdGhlcmUgaXMgYW4gZW50cnkgaW4gdGhlIHJlc2VydmUgbWFwXG5tbS9odWdldGxiLmM6MjU3MzpcdFx0XHQgKiBub3QgYWRkZWQgYnkgYWxsb2NfaHVnZXRsYl9mb2xpby4gIFdlIGtub3cgaXQgd2FzIGFkZGVkXG5tbS9odWdldGxiLmM6MjU3NDpcdFx0XHQgKiBiZWZvcmUgdGhlIGFsbG9jX2h1Z2V0bGJfZm9saW8gY2FsbCwgb3RoZXJ3aXNlXG5tbS9odWdldGxiLmMtMjU3NS1cdFx0XHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxuLS1cbm1tL2h1Z2V0bGIuYz0yOTE2PXR5cGVkZWYgZW51bSB7XG4tLVxubW0vaHVnZXRsYi5jLTI5NDEtICovXG5tbS9odWdldGxiLmM6Mjk0MjpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtMjk0My1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpXG4tLVxubW0vaHVnZXRsYi5jPTQ4ODc9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxuLS1cbm1tL2h1Z2V0bGIuYy01MDA4LVx0XHRcdFx0LyogRG8gbm90IHVzZSByZXNlcnZlIGFzIGl0JiMzOTtzIHByaXZhdGUgb3duZWQgKi9cbm1tL2h1Z2V0bGIuYzo1MDA5Olx0XHRcdFx0bmV3X2ZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBhZGRyLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNTAxMC1cdFx0XHRcdGlmIChJU19FUlIobmV3X2ZvbGlvKSkge1xuLS1cbm1tL2h1Z2V0bGIuYz01NDgwPXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfd3Aoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZXRsYi5jLTU1NjEtXHRzcGluX3VubG9jayh2bWYtXHUwMDNlcHRsKTtcbm1tL2h1Z2V0bGIuYzo1NTYyOlx0bmV3X2ZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBjb3dfZnJvbV9vd25lcik7XG5tbS9odWdldGxiLmMtNTU2My1cbi0tXG5tbS9odWdldGxiLmM9NTc1Mj1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vaHVnZXRsYi5jLTU4MjEtXG5tbS9odWdldGxiLmM6NTgyMjpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy01ODIzLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLS1cbm1tL2h1Z2V0bGIuYz02MDAyPXZtX2ZhdWx0X3QgaHVnZXRsYl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTYyMzctICovXG5tbS9odWdldGxiLmM6NjIzODpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYi5jLTYyMzktXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4tLVxubW0vaHVnZXRsYi5jLTYyNTQtXHQgKi9cbm1tL2h1Z2V0bGIuYzo2MjU1Olx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5vZGUsIG5vZGVtYXNrLCBnZnBfbWFzaywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTYyNTYtXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xuLS1cbm1tL2h1Z2V0bGIuYz02MjY1PWludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG4tLVxubW0vaHVnZXRsYi5jLTYzMjEtXG5tbS9odWdldGxiLmM6NjMyMjpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGRzdF9hZGRyLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNjMyMy1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5tbS9odWdldGxiLmMtNjM0Ny1cdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo2MzQ4Olx0XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoaCwgZHN0X3ZtYSwgZHN0X2FkZHIpO1xubW0vaHVnZXRsYi5jLTYzNDktXHRcdFx0aWYgKCFmb2xpbykge1xuLS1cbm1tL2h1Z2V0bGIuYy02MzY4LVxubW0vaHVnZXRsYi5jOjYzNjk6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTYzNzAtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jPTY2NjI9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9odWdldGxiLmMtNjc4Mi1cdFx0XHQgKiBtYXAgYmV0d2VlbiByZWdpb25fY2hnIGFuZCByZWdpb25fYWRkLiAgVGhpc1xubW0vaHVnZXRsYi5jOjY3ODM6XHRcdFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3Rcbm1tL2h1Z2V0bGIuYy02Nzg0LVx0XHRcdCAqIHRoZSBzdWJwb29sIGFuZCByZXNlcnZlIGNvdW50cyBtb2RpZmllZCBhYm92ZVxuLS1cbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuLS1cbm1tL21lbWZkLmMtOTMtXG5tbS9tZW1mZC5jOjk0Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxubW0vbWVtZmQuYy05NS1cdFx0XHRcdFx0XHQgICAgbnVtYV9ub2RlX2lkKCksXG4tLVxubW0vbWVtcG9saWN5LmM9MTQzNz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0X2J5X21wb2woc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vbWVtcG9saWN5LmMtMTQ1Ni1cdFx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIGlseCwgXHUwMDI2bmlkKTtcbm1tL21lbXBvbGljeS5jOjE0NTc6XHRcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCwgbm9kZW1hc2ssIGdmcCxcbm1tL21lbXBvbGljeS5jLTE0NTgtXHRcdFx0XHRodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKE1SX01FTVBPTElDWV9NQklORCkpO1xuLS1cbm1tL21pZ3JhdGUuYz0yMTk3PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxuLS1cbm1tL21pZ3JhdGUuYy0yMjE0LVx0XHRnZnBfbWFzayA9IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soaCwgZ2ZwX21hc2spO1xubW0vbWlncmF0ZS5jOjIyMTU6XHRcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCxcbm1tL21pZ3JhdGUuYy0yMjE2LVx0XHRcdFx0XHRcdG10Yy1cdTAwM2VubWFzaywgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGh1Z2V0bGJmc19mYWxsb2NhdGUqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBodWdldGxiZnNfZmFsbG9jYXRlYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHNvIEkmIzM5O2xsIHplcm8gaW4gb24gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgZ3JhYiBsaW5lcyA3NzAgdGhyb3VnaCA4MDUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGNodW5rIG9mIGNvbnRleHQgYXJvdW5kIGl0cyBjb3JlIGxvZ2ljLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIHByZS1hbGxvY2F0aW5nIHNwYWNlIHdpdGhpbiB0aGUgaHVnZSBwYWdlIGZpbGUgc3lzdGVtIOKAkyBwYXJ0aWN1bGFybHkgd2hlcmUgaXQgaGFuZGxlcyBibG9jayBhbGxvY2F0aW9uIGFuZCBwb3RlbnRpYWwgZXJyb3Igc2NlbmFyaW9zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbiBtZWNoYW5pc21zIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgY2xldmVybmVzcyBpbiBob3cgaXQgYWRkcmVzc2VzIGZyYWdtZW50YXRpb24gaXNzdWVzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc2VjdGlvbiByZXZlYWxzIHRoZSBrZXkgb3BlcmF0aW9uYWwgcGF0dGVybnMgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBmYWlsdXJlcyBlbGVnYW50bHksIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlc2UgbGFyZ2UgcGFnZXMuIEkgYW50aWNpcGF0ZSBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBwdXJwb3NlIGZyb20gdGhpcyBzZWdtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcdFx0LyogYWRkciBpcyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgZmlsZSAoemVybyBiYXNlZCkgKi9cbiA3NzE6XHRcdFx0YWRkciA9IGluZGV4ICogaHBhZ2Vfc2l6ZTtcbiA3NzI6XHRcbiA3NzM6XHRcdFx0LyogbXV0ZXggdGFrZW4gaGVyZSwgZmF1bHQgcGF0aCBhbmQgaG9sZSBwdW5jaCAqL1xuIDc3NDpcdFx0XHRoYXNoID0gaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKG1hcHBpbmcsIGluZGV4KTtcbiA3NzU6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbiA3NzY6XHRcbiA3Nzc6XHRcdFx0LyogU2VlIGlmIGFscmVhZHkgcHJlc2VudCBpbiBtYXBwaW5nIHRvIGF2b2lkIGFsbG9jL2ZyZWUgKi9cbiA3Nzg6XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCBcdTAwM2NcdTAwM2MgaHVnZV9wYWdlX29yZGVyKGgpKTtcbiA3Nzk6XHRcdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4gNzgwOlx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA3ODE6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gNzgyOlx0XHRcdFx0Y29udGludWU7XG4gNzgzOlx0XHRcdH1cbiA3ODQ6XHRcbiA3ODU6XHRcdFx0LypcbiA3ODY6XHRcdFx0ICogQWxsb2NhdGUgZm9saW8gd2l0aG91dCBzZXR0aW5nIHRoZSBhdm9pZF9yZXNlcnZlIGFyZ3VtZW50LlxuIDc4NzpcdFx0XHQgKiBUaGVyZSBjZXJ0YWlubHkgYXJlIG5vIHJlc2VydmVzIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiA3ODg6XHRcdFx0ICogcHNldWRvX3ZtYS4gIEhvd2V2ZXIsIHRoZXJlIGNvdWxkIGJlIHNoYXJlZCBtYXBwaW5ncyB3aXRoXG4gNzg5Olx0XHRcdCAqIHJlc2VydmVzIGZvciB0aGUgZmlsZSBhdCB0aGUgaW5vZGUgbGV2ZWwuICBJZiB3ZSBmYWxsb2NhdGVcbiA3OTA6XHRcdFx0ICogZm9saW9zIGluIHRoZXNlIGFyZWFzLCB3ZSBuZWVkIHRvIGNvbnN1bWUgdGhlIHJlc2VydmVzXG4gNzkxOlx0XHRcdCAqIHRvIGtlZXAgcmVzZXJ2YXRpb24gYWNjb3VudGluZyBjb25zaXN0ZW50LlxuIDc5MjpcdFx0XHQgKi9cbiA3OTM6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKFx1MDAyNnBzZXVkb192bWEsIGFkZHIsIGZhbHNlKTtcbiA3OTQ6XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbiA3OTU6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gNzk2Olx0XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKGZvbGlvKTtcbiA3OTc6XHRcdFx0XHRnb3RvIG91dDtcbiA3OTg6XHRcdFx0fVxuIDc5OTpcdFx0XHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIGFkZHIpO1xuIDgwMDpcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIDgwMTpcdFx0XHRlcnJvciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sIG1hcHBpbmcsIGluZGV4KTtcbiA4MDI6XHRcdFx0aWYgKHVubGlrZWx5KGVycm9yKSkge1xuIDgwMzpcdFx0XHRcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBcdTAwMjZwc2V1ZG9fdm1hLCBhZGRyLCBmb2xpbyk7XG4gODA0Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA4MDU6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gODA2Olx0XHRcdFx0Z290byBvdXQ7XG4gODA3Olx0XHRcdH1cbiA4MDg6XHRcbiA4MDk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM5MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIGh1Z2V0bGJmcyBhbmQgZmFsbG9jYXRlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBgaHVnZXRsYmZzYCBjb2RlIGFnYWluLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmYWxsb2NhdGVgLiBJIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGEgYHBzZXVkb192bWFgIHdpdGhpbiBgaHVnZXRsYmZzX2ZhbGxvY2F0ZWAgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zLiBUaW1lIHRvIHplcm8gaW4gb24gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHBzZXVkb192bWFgIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCB3aGF0IHJvbGUgaXQgcGxheXMgaW4gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0JiMzOTtzIGp1bXAgdG8gbGluZXMgNzIwLTc3MCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgIGFuZCBzZWUgd2hhdCB0aGUgY29kZSBpcyB0ZWxsaW5nIG1lIGRpcmVjdGx5LiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGludGVyZXN0aW5nIGluaXRpYWxpemF0aW9uIGxvZ2ljIGhlcmUsIGFuZCBob3BlZnVsbHksIGl0JiMzOTtsbCBwcm92aWRlIGluc2lnaHRzIGludG8gdGhlIHNwZWNpZmljIG1lbW9yeSBtYXBwaW5nIHRlY2huaXF1ZXMgdGhhdCBgaHVnZXRsYmZzYCB1c2VzIGR1cmluZyBgZmFsbG9jYXRlYC4gSSYjMzk7bSByZWFkeSB0byBwYXJzZSB0aGUgc3BlY2lmaWNzIGFuZCBzdGFydCBwaWVjaW5nIHRvZ2V0aGVyIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdFx0Z290byBvdXRfbm9sb2NrO1xuIDcyMTpcdFx0fVxuIDcyMjpcdFxuIDcyMzpcdFx0LypcbiA3MjQ6XHRcdCAqIERlZmF1bHQgcHJlYWxsb2NhdGUgY2FzZS5cbiA3MjU6XHRcdCAqIEZvciB0aGlzIHJhbmdlLCBzdGFydCBpcyByb3VuZGVkIGRvd24gYW5kIGVuZCBpcyByb3VuZGVkIHVwXG4gNzI2Olx0XHQgKiBhcyB3ZWxsIGFzIGJlaW5nIGNvbnZlcnRlZCB0byBwYWdlIG9mZnNldHMuXG4gNzI3Olx0XHQgKi9cbiA3Mjg6XHRcdHN0YXJ0ID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBocGFnZV9zaGlmdDtcbiA3Mjk6XHRcdGVuZCA9IChvZmZzZXQgJiM0MzsgbGVuICYjNDM7IGhwYWdlX3NpemUgLSAxKSBcdTAwM2VcdTAwM2UgaHBhZ2Vfc2hpZnQ7XG4gNzMwOlx0XG4gNzMxOlx0XHRpbm9kZV9sb2NrKGlub2RlKTtcbiA3MzI6XHRcbiA3MzM6XHRcdC8qIFdlIG5lZWQgdG8gY2hlY2sgcmxpbWl0IGV2ZW4gd2hlbiBGQUxMT0NfRkxfS0VFUF9TSVpFICovXG4gNzM0Olx0XHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIG9mZnNldCAmIzQzOyBsZW4pO1xuIDczNTpcdFx0aWYgKGVycm9yKVxuIDczNjpcdFx0XHRnb3RvIG91dDtcbiA3Mzc6XHRcbiA3Mzg6XHRcdGlmICgoaW5mby1cdTAwM2VzZWFscyBcdTAwMjYgRl9TRUFMX0dST1cpIFx1MDAyNlx1MDAyNiBvZmZzZXQgJiM0MzsgbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbiA3Mzk6XHRcdFx0ZXJyb3IgPSAtRVBFUk07XG4gNzQwOlx0XHRcdGdvdG8gb3V0O1xuIDc0MTpcdFx0fVxuIDc0MjpcdFxuIDc0MzpcdFx0LypcbiA3NDQ6XHRcdCAqIEluaXRpYWxpemUgYSBwc2V1ZG8gdm1hIGFzIHRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGh1Z2UgcGFnZVxuIDc0NTpcdFx0ICogYWxsb2NhdGlvbiByb3V0aW5lcy5cbiA3NDY6XHRcdCAqL1xuIDc0NzpcdFx0dm1hX2luaXQoXHUwMDI2cHNldWRvX3ZtYSwgbW0pO1xuIDc0ODpcdFx0dm1fZmxhZ3NfaW5pdChcdTAwMjZwc2V1ZG9fdm1hLCBWTV9IVUdFVExCIHwgVk1fTUFZU0hBUkUgfCBWTV9TSEFSRUQpO1xuIDc0OTpcdFx0cHNldWRvX3ZtYS52bV9maWxlID0gZmlsZTtcbiA3NTA6XHRcbiA3NTE6XHRcdGZvciAoaW5kZXggPSBzdGFydDsgaW5kZXggXHUwMDNjIGVuZDsgaW5kZXgmIzQzOyYjNDM7KSB7XG4gNzUyOlx0XHRcdC8qXG4gNzUzOlx0XHRcdCAqIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHZhZGRyIHdoZXJlIHRoZSBwYWdlIGlzIGJlaW5nXG4gNzU0Olx0XHRcdCAqIGZhdWx0ZWQgaW4sIGJ1dCB3ZSBoYXZlIG5vIHZhZGRyIGhlcmUuXG4gNzU1Olx0XHRcdCAqL1xuIDc1NjpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIDc1NzpcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gNzU4Olx0XG4gNzU5Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEh1Z2V0bGJmcyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBodWdldGxiZnNfZmFsbG9jYXRlYCBhbmQgdGhlIGNhbGwgdG8gYHZtYV9pbml0KCZhbXA7cHNldWRvX3ZtYSwgbW0pYC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBgbW1gIGluIHRoYXQgY29udGV4dCBpcyBgY3VycmVudC0mZ3Q7bW1gLCBhbmQgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgcXVlc3Rpb25zIGluIG15IG1pbmQuIFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgY2FsbGluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIHdoYXQgdmlydHVhbCBtZW1vcnkgYXJlYXMgKFZNQXMpIGFyZSBwYXNzZWQ/IExldCYjMzk7cyBkaWcgaW50byBgbW0vaHVnZXRsYi5jYC4KClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgY29weV9odWdldGxiX3BhZ2VfcmFuZ2VgIGR1cmluZyBhIGZvcmsgcGFzc2VzIGBkc3Rfdm1hYCDigJMgbWVhbmluZyBgdm1hLSZndDt2bV9tbWAgaXMgdGhlIGRlc3RpbmF0aW9uIG1lbW9yeSBtYXAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIHdlJiMzOTt2ZSBnb3QgYGh1Z2V0bGJfd3BgIGR1cmluZyBhIHdyaXRlIGZhdWx0LCB3aGljaCBwYXNzZXMgYSBgdm1hYCwgc28gYWdhaW4sIGB2bWEtJmd0O3ZtX21tYCBpcyByZWxldmFudC4gYGh1Z2V0bGJfbm9fcGFnZWAgZHVyaW5nIGEgZmF1bHQgYWxzbyB0YWtlcyBhIGB2bWFgLCBzYW1lIHNpdHVhdGlvbi4gYGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZWAgaXMgdHJpZ2dlcmVkIGJ5IHVzZXJmYXVsdGZkIGFuZCBwYXNzZXMgYGRzdF92bWFgLCBhbmQgZmluYWxseSwgdGhlIG9yaWdpbmFsIGBodWdldGxiZnNfZmFsbG9jYXRlYCBjYWxsLCB1c2luZyBgJmFtcDtwc2V1ZG9fdm1hYCwgd2hvc2UgYHZtX21tYCBpcyBgY3VycmVudC0mZ3Q7bW1gLiBUaGF0JiMzOTtzIGEgZ29vZCBvdmVydmlldy4KCk5vdywgbXkgZm9jdXMgc2hpZnRzLiBHaXZlbiB0aGVzZSBkaWZmZXJlbnQgY29udGV4dHMgYW5kIHRoZSBjcnVjaWFsIHJvbGUgb2YgdGhlIG1lbW9yeSBtYXAgKGBtbWApLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW1gIGhhbmRsZXMgYE5VTExgIG9yIG5vbi1gTlVMTGAgbWVtb3J5IG1hcHMuIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaW4gdGVybXMgb2YgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzPyBMZXQmIzM5O3MgZ28gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW1gIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIHdpbGwgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0ICogT2J0YWluIGEgcmVmZXJlbmNlIG9uIG1tLVx1MDAzZW1lbWNnIGFuZCByZXR1cm5zIGl0IGlmIHN1Y2Nlc3NmdWwuIElmIG1tXG4xMTUxOlx0ICogaXMgTlVMTCwgdGhlbiB0aGUgbWVtY2cgaXMgY2hvc2VuIGFzIGZvbGxvd3M6XG4xMTUyOlx0ICogMSkgVGhlIGFjdGl2ZSBtZW1jZywgaWYgc2V0LlxuMTE1MzpcdCAqIDIpIGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlbWVtY2csIGlmIGF2YWlsYWJsZVxuMTE1NDpcdCAqIDMpIHJvb3QgbWVtY2dcbjExNTU6XHQgKiBJZiBtZW1fY2dyb3VwIGlzIGRpc2FibGVkLCBOVUxMIGlzIHJldHVybmVkLlxuMTE1NjpcdCAqL1xuMTE1NzpcdHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuMTE1ODpcdHtcbjExNTk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjExNjA6XHRcbjExNjE6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4xMTYyOlx0XHRcdHJldHVybiBOVUxMO1xuMTE2MzpcdFxuMTE2NDpcdFx0LypcbjExNjU6XHRcdCAqIFBhZ2UgY2FjaGUgaW5zZXJ0aW9ucyBjYW4gaGFwcGVuIHdpdGhvdXQgYW5cbjExNjY6XHRcdCAqIGFjdHVhbCBtbSBjb250ZXh0LCBlLmcuIGR1cmluZyBkaXNrIHByb2JpbmdcbjExNjc6XHRcdCAqIG9uIGJvb3QsIGxvb3BiYWNrIElPLCBhY2N0KCkgd3JpdGVzIGV0Yy5cbjExNjg6XHRcdCAqXG4xMTY5Olx0XHQgKiBObyBuZWVkIHRvIGNzc19nZXQgb24gcm9vdCBtZW1jZyBhcyB0aGUgcmVmZXJlbmNlXG4xMTcwOlx0XHQgKiBjb3VudGluZyBpcyBkaXNhYmxlZCBvbiB0aGUgcm9vdCBsZXZlbCBpbiB0aGVcbjExNzE6XHRcdCAqIGNncm91cCBjb3JlLiBTZWUgQ1NTX05PX1JFRi5cbjExNzI6XHRcdCAqL1xuMTE3MzpcdFx0aWYgKHVubGlrZWx5KCFtbSkpIHtcbjExNzQ6XHRcdFx0bWVtY2cgPSBhY3RpdmVfbWVtY2coKTtcbjExNzU6XHRcdFx0aWYgKHVubGlrZWx5KG1lbWNnKSkge1xuMTE3NjpcdFx0XHRcdC8qIHJlbW90ZSBtZW1jZyBtdXN0IGhvbGQgYSByZWYgKi9cbjExNzc6XHRcdFx0XHRjc3NfZ2V0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4xMTc4Olx0XHRcdFx0cmV0dXJuIG1lbWNnO1xuMTE3OTpcdFx0XHR9XG4xMTgwOlx0XHRcdG1tID0gY3VycmVudC1cdTAwM2VtbTtcbjExODE6XHRcdFx0aWYgKHVubGlrZWx5KCFtbSkpXG4xMTgyOlx0XHRcdFx0cmV0dXJuIHJvb3RfbWVtX2Nncm91cDtcbjExODM6XHRcdH1cbjExODQ6XHRcbjExODU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjExODY6XHRcdGRvIHtcbjExODc6XHRcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fdGFzayhyY3VfZGVyZWZlcmVuY2UobW0tXHUwMDNlb3duZXIpKTtcbjExODg6XHRcdFx0aWYgKHVubGlrZWx5KCFtZW1jZykpXG4xMTg5Olx0XHRcdFx0bWVtY2cgPSByb290X21lbV9jZ3JvdXA7XG4xMTkwOlx0XHR9IHdoaWxlICghY3NzX3RyeWdldChcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpKTtcbjExOTE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTE5MjpcdFx0cmV0dXJuIG1lbWNnO1xuMTE5MzpcdH1cbjExOTQ6XHRFWFBPUlRfU1lNQk9MKGdldF9tZW1fY2dyb3VwX2Zyb21fbW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBUaGUga2V5IGlzc3VlIGFwcGVhcnMgdG8gYmUgaW5jb3JyZWN0IGFjY291bnRpbmcgaW4gaHVnZSBwYWdlIG1lbW9yeSBjaGFyZ2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIFByZXZpb3VzbHksIHRoaXMgZnVuY3Rpb24gd2FzIHRpZWQgdG8gdGhlIGBjdXJyZW50YCB0YXNrLCB3aGljaCB3b3JrcyBmaW5lIGluIG1hbnkgY2FzZXMuIEhvd2V2ZXIsIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgYGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlYCB3aXRoaW4gYSBmb3JrIChgZHVwX21tYXBgKSBvciB3aXRoIHVzZXJmYXVsdGZkLCB0aGUgYWxsb2NhdGlvbiBpcyBmb3IgYSAqZGlmZmVyZW50KiBtZW1vcnkgc3BhY2UgKGNoaWxkIHByb2Nlc3Mgb3IgdXNlciBzcGFjZSksIG5vdCB0aGUgb3JpZ2luYWwgYGN1cnJlbnRgIHRhc2suIFNvIGNoYXJnaW5nIHRoZSBgY3VycmVudGAgdGFzayBpcyBsb2dpY2FsbHkgd3JvbmcuIFRoZSBwYXRjaCBzaGlmdHMgdGhlIGNoYXJnaW5nIHJlc3BvbnNpYmlsaXR5IHRvIHRoZSBtZW1vcnkgbWFwIChgbW1gKSBvd25lciwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZSwgYWxpZ25pbmcgd2l0aCB0aGUgYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGZ1bmN0aW9uLiBUaGlzIGNvcnJlY3RzIHRoZSBvd25lciBvZiB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIHdpdGggdGhlIG1lbW9yeSBzcGFjZSB0aGF0JiMzOTtzIHVzaW5nIHRoZSBodWdlIHBhZ2UsIGFuZCBub3QgdGhlIHRhc2sgcGVyZm9ybWluZyB0aGUgaW5pdGlhbCBzeXN0ZW0gY2FsbC4KCk5vdywgc2hvdWxkIHdlIGJvdGhlciBmdXp6aW5nIHRoaXM/IEFic29sdXRlbHkhIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgLSBgbW0vaHVnZXRsYi5jYCBhbmQgYG1tL21lbWNvbnRyb2wuY2AgLSBhbmQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvZGUuIEh1Z2UgcGFnZSBhbGxvY2F0aW9uIGFuZCBtZW1jZyBjaGFyZ2luZyBhcmUgc3RhbmRhcmQsIGVhc2lseSB0cmlnZ2VyZWQgd2l0aGluIHN0YW5kYXJkIFZNL1FFTVUga2VybmVsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBEZWZpbml0ZWx5IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIHRvIHRhcmdldCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBzZWFyY2ggZm9yIHJlbGV2YW50IG9wdGlvbnMgcmVsYXRlZCB0byBgaHVnZXRsYmAsIGBtZW1jb250cm9sYCwgYW5kIGFueSBjb25maWd1cmF0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBjZ3JvdXAgaHVnZSBwYWdlIGNoYXJnaW5nLiBUaGlzIHdpbGwgaGVscCByZWZpbmUgdGhlIGZ1enppbmcgdGFyZ2V0IGFuZCBmb2N1cyBvbiB0aGUgaW1wb3J0YW50IGNvZGUgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hVR0VUTEImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NDcwPWNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcbi0tXG5tbS9LY29uZmlnLTQ3Mi1cbm1tL0tjb25maWc6NDczOmNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXG5tbS9LY29uZmlnLTQ3NC1cdGJvb2xcbm1tL0tjb25maWctNDc1LVxubW0vS2NvbmZpZzo0NzY6Y29uZmlnIEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVFxubW0vS2NvbmZpZy00NzctXHRib29sXG4tLVxubW0vS2NvbmZpZz02OTQ9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4tLVxubW0vS2NvbmZpZy02OTYtXG5tbS9LY29uZmlnOjY5Nzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNjk4LVx0ZGVmX2Jvb2wgblxuLS1cbm1tL0tjb25maWctNzAwLVx0ICBBbGxvd3MgdGhlIHBhZ2VibG9ja19vcmRlciB2YWx1ZSB0byBiZSBkeW5hbWljIGluc3RlYWQgb2YganVzdCBzdGFuZGFyZFxubW0vS2NvbmZpZzo3MDE6XHQgIEhVR0VUTEJfUEFHRV9PUkRFUiB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBIdWdlVExCIHBhZ2Ugc2l6ZXMgYXZhaWxhYmxlXG5tbS9LY29uZmlnLTcwMi1cdCAgb24gYSBwbGF0Zm9ybS5cbi0tXG5tbS9LY29uZmlnPTc4Mj1jb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xuLS1cbm1tL0tjb25maWctODA5LVxubW0vS2NvbmZpZzo4MTA6Y29uZmlnIEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcbm1tL0tjb25maWctODExLVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9MTAwMz1jb25maWcgUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVNcbm1tL0tjb25maWc6MTAwNDpcdGRlZl9ib29sIFRSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IEhVR0VUTEJfUEFHRVxubW0vS2NvbmZpZy0xMDA1LVxuLS1cbm1tL0tjb25maWc9MTAwOT1jb25maWcgSEFWRV9HSUdBTlRJQ19GT0xJT1Ncbm1tL0tjb25maWc6MTAxMDpcdGRlZl9ib29sIChIVUdFVExCX1BBR0UgXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIHx8IFxcXG5tbS9LY29uZmlnLTEwMTEtXHRcdCAoWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODU5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaHVnZSBwYWdlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgc3RhcnRpbmcgd2l0aCBgbW0vS2NvbmZpZ2AsIGBpbml0L0tjb25maWdgLCBhbmQgYGZzL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgaW5pdGlhbGl6YXRpb24sIGFuZCBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGFuZCBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBgSFVHRVRMQl9QQUdFYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBfSFVHRVRMQmAgb3B0aW9ucyBpbiB0aGVzZSBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLgoKVGhlbiwgSSYjMzk7bGwgdXNlIGBncmVwYCBhcyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gc2NhbiB0aHJvdWdoIGBmcy9LY29uZmlnYCBhbmQgYGluaXQvS2NvbmZpZ2AgZm9yIGFueSBtZW50aW9ucyBvZiBgSFVHRVRMQmAuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIG9yIGNvbnRleHRzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lLCBhdCBsZWFzdC4gSSYjMzk7bSBob3BpbmcgSSBjYW4gcGllY2UgdG9nZXRoZXIgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IG1vZHVsZXMgYW5kIHdoZXJlIHRoZXkgbGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SFVHRVRMQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yMzU9Y29uZmlnIFRNUEZTX1FVT1RBXG4tLVxuZnMvS2NvbmZpZy0yNDYtXG5mcy9LY29uZmlnOjI0Nzpjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbmZzL0tjb25maWctMjQ4LVx0ZGVmX2Jvb2wgblxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvS2NvbmZpZzoyNTI6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1My1cdHNlbGVjdCBNRU1GRF9DUkVBVEVcbi0tXG5mcy9LY29uZmlnLTI2MS1cbmZzL0tjb25maWc6MjYyOmlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG5mcy9LY29uZmlnLTI2NS1cdGRlZmF1bHQgblxuZnMvS2NvbmZpZzoyNjY6XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI2Ny1cdGhlbHBcbi0tXG5mcy9LY29uZmlnLTI3MC1cdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXG5mcy9LY29uZmlnOjI3MTplbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnOjI3NDpcdGRlZl9ib29sIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzUtXHRzZWxlY3QgWEFSUkFZX01VTFRJXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZzoyNzg6XHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbmZzL0tjb25maWc6Mjc5Olx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXG5mcy9LY29uZmlnLTI4MC1cdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbmZzL0tjb25maWc6MjgxOlx0c2VsZWN0IFNQQVJTRU1FTV9WTUVNTUFQX1BSRUlOSVQgaWYgQVJDSF9XQU5UX0hVR0VUTEJfVk1FTU1BUF9QUkVJTklUXG5mcy9LY29uZmlnLTI4Mi1cbmZzL0tjb25maWc6MjgzOmNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbmZzL0tjb25maWc6Mjg0Olx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI4NS1cdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFx1MDAyNlx1MDAyNiBTUExJVF9QTURfUFRMT0NLU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc5NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgTUVNQ0dgIGlzIGJlaW5nIGNvbmZpZ3VyZWQgaW4gdGhpcyBzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBmb3VuZGF0aW9uYWwgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBwbGFjZSB3aGVyZSB0aGUgbWFqb3Iga2VybmVsIGZlYXR1cmVzLCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBidWlsZC10aW1lIG9wdGlvbnMsIGFyZSBkZWZpbmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBhbmQgaG93LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIGRlZmluaXRpb24sIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4NC1cbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODYtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTMtXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA3LVxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwOS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIwNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBjdXJyZW50IHRyYWluIG9mIHRob3VnaHQgbGVhZHMgbWUgdG8gY29uc2lkZXIgYWxsIHJlbGV2YW50IGZhY3RvcnMuIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gWCwgWSwgYW5kIFosIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoIGFuZCBub3QgbWlzcyBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgYENHUk9VUF9IVUdFVExCYCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgYXQgaGFuZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gaW50ZWdyYXRlIHRoaXMgY29uc2lkZXJhdGlvbiBpbnRvIHRoZSBvdmVyYWxsIGFuYWx5c2lzIGFuZCBlbnN1cmUgdGhhdCB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXMgYWxzbyBhc3Nlc3NlZCBhbG9uZ3NpZGUgdGhlIG90aGVyIGNvbnNpZGVyYXRpb25zIHRvIHByb3ZpZGUgdGhlIG1vc3QgY29tcGxldGUgYW5kIGFjY3VyYXRlIGV2YWx1YXRpb24uIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9IVUdFVExCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMjgyPWNvbmZpZyBDR1JPVVBfRlJFRVpFUlxuLS1cbmluaXQvS2NvbmZpZy0xMjkyLVxuaW5pdC9LY29uZmlnOjEyOTM6Y29uZmlnIENHUk9VUF9IVUdFVExCXG5pbml0L0tjb25maWctMTI5NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQ29tcGlsYXRpb24gb2YgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBjb21waWxhdGlvbiBvZiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEZpcnN0LCBJJiMzOTtsbCBjb25zdWx0IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIEFoLCB0aGVyZSBpdCBpczogYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBgQ09ORklHX01FTUNHYC4gSWYgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5lZCwgd2UgaGF2ZSBhIHJlYWwgZnVuY3Rpb24gZGVjbGFyYXRpb24uIE90aGVyd2lzZSwgaXQmIzM5O3MganVzdCBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBpbW1lZGlhdGVseSByZXR1cm5zIHplcm8uIFRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLiBOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGBNYWtlZmlsZWAgZW50cmllcy4KCkkmIzM5O2xsIGNoZWNrIGBtbS9NYWtlZmlsZWAuIEFoLCB5ZXMuIGBodWdldGxiLm9gIGlzIG9ubHkgaW5jbHVkZWQgaWYgYENPTkZJR19IVUdFVExCRlNgIGlzIHNldCwgYW5kIGBtZW1jb250cm9sLm9gIGlzIGluY2x1ZGVkIGlmIGBDT05GSUdfTUVNQ0dgIGlzIHNldC4gVGhpcyBjb25maXJtcyB0aGF0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBpcyBpbmRlZWQgdGllZCB0byB0aGUgbWVtb3J5IGNncm91cCBjb25maWd1cmF0aW9uLiBFeGNlbGxlbnQuIE15IGluaXRpYWwgYW5hbHlzaXMgaXMgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJcXC5vfG1lbWNvbnRyb2xcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXHQmIzQzOz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXG5tbS9NYWtlZmlsZS04Mi1pZmRlZiBDT05GSUdfQ01BXG4tLVxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBicGZfbWVtY29udHJvbC5vXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMzUKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogNjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBhYm91dCBIdWdlVExCIGFuZCBtZW1vcnkgY2dyb3VwIGludGVncmF0aW9uLiAgVGhlIGNvcmUgY29tcG9uZW50cyBhcmUgY2xlYXJseSBgSFVHRVRMQkZTYCBhbmQgYE1FTUNHYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4KCk15IGZpcnN0IHN0ZXAgaXMgdG8gaXNvbGF0ZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJIHdhbnQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIHBhdGNoJiMzOTtzIGNvcmUgbG9naWMgaXMgaW1wbGVtZW50ZWQgYW5kIG1vZGlmaWVkLiBJIHNlZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvYCBpbiBgbW0vaHVnZXRsYi5jYCwgYW5kIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhcmUgZGlyZWN0bHkgYWx0ZXJlZC4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlc2UgZnVuY3Rpb25zIHViaXF1aXRvdXM/IERvIHRoZXkgdG91Y2ggYSB2YXN0IGFtb3VudCBvZiBrZXJuZWwgY29kZSwgb3IgYXJlIHRoZXkgc3BlY2lmaWMgdG8gYSBmZWF0dXJlPyAgVGhhbmtmdWxseSwgdGhlc2UgYXJlIHNwZWNpZmljIGVudHJ5IHBvaW50cyBmb3IgSHVnZVRMQiBhbGxvY2F0aW9uIGFuZCBNZW1jZyBjaGFyZ2luZy4gVGhleSBhcmUgKm5vdCogY2FsbGVkIGJ5IGV2ZXJ5IHNpbmdsZSBwcm9jZXNzLiBUaGlzIGlzIGdvb2QsIGl0IGdpdmVzIG1lIGZvY3VzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aG9zZSBmdW5jdGlvbnM6IGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuICBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYW55dGhpbmcgZWxzZSBpbiB0aGUgZGlmZiwgYW5kIEkgY29uZmlybSB0aGUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGFsb25nIHdpdGggdGhlIGAuY2AgZmlsZXMgbWVudGlvbmVkIHByZXZpb3VzbHkuCgpJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYW5kIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBhcmUgbm9uLXN0YXRpYyBzeW1ib2xzIGluIGB2bWxpbnV4YC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBleHBvc2VkIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhbmQgaXMgZGVjbGFyZWQgYWNjb3JkaW5nbHkgaW4gdGhlIGhlYWRlcnMsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuCgpUaGVuLCBjb25maXJtaW5nIHRoZSBjb25maWdzOiBgSFVHRVRMQkZTYCBhbmQgYE1FTUNHYCwgbGlrZSBJIHNhaWQuCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudDoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgIC0gYmVjYXVzZSB3ZSYjMzk7dmUgaWRlbnRpZmllZCBzcGVjaWZpYyBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aCBIdWdlVExCIGFuZCBNZW1jZyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkLgoqICAgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0hVR0VUTEJGUyYjMzQ7LCAmIzM0O01FTUNHJiMzNDtdYCAtIGJlY2F1c2UgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIHRvIHRoZSBwYXRjaCYjMzk7cyBmdW5jdGlvbi4KKiAgIGBGb2N1c1N5bWJvbHM6IFsmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7XWAgLSB0aGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0ZXN0LgoqICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgYW5kIGNvbXBsZXRlLgoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcGF0aHMgKGh1Z2V0bGJfYWxsb2NfZm9saW8sIGFsbG9jX2h1Z2V0bGJfZm9saW8sIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIpIHRvIGFzc29jaWF0ZSBhbmQgY2hhcmdlIGh1Z2UgZm9saW9zIGFnYWluc3QgdGhlIHRhcmdldCBtbV9zdHJ1Y3QgcmF0aGVyIHRoYW4gY3VycmVudC4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgY29ycmVjdCBjZ3JvdXAgYWNjb3VudGluZyBhbmQgYXZvaWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcGF0aHMgKGh1Z2V0bGJfYWxsb2NfZm9saW8sIGFsbG9jX2h1Z2V0bGJfZm9saW8sIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIpIHRvIGFzc29jaWF0ZSBhbmQgY2hhcmdlIGh1Z2UgZm9saW9zIGFnYWluc3QgdGhlIHRhcmdldCBtbV9zdHJ1Y3QgcmF0aGVyIHRoYW4gY3VycmVudC4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgY29ycmVjdCBjZ3JvdXAgYWNjb3VudGluZyBhbmQgYXZvaWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIHJvdXRpbmVzIChgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvYCkgdG8gcGFzcyBhIHRhcmdldCBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIHBvaW50ZXIgYW5kIGNoYXJnZSB0aGUgaHVnZXRsYiBmb2xpbyB0byB0aGUgY2dyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0IG1tIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgKSByYXRoZXIgdGhhbiB0aGUgY3VycmVudCB0YXNrIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgKS5cblxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgcG9pbnRlciBwYXNzaW5nIGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYnVmZmVycywgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM4Njc2NjRjZDFiMmZhNzc5YjQyNDU3MzIwZjRlZWEwZTMyM2MyODUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA5OjU5OjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAxNmM0YzRjYWExMjZjLi40NWFkYTc1ZGMwNGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtNjk5LDcgJiM0Mzs2OTksOCBAQCBlbnVtIGh1Z2V0bGJfYWxsb2NfZmxhZyB7CiAjZGVmaW5lIEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlMgQklUKEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlNfQklUKQogCiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKLQkJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKTsKJiM0MzsJCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXU4IGFsbG9jX2ZsYWdzKTsKIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpOwogc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA3ZDFjMGNlMTg5YTg4Li4zNjJhZjU4ZTUwYTQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtNjYyLDcgJiM0Mzs2NjIsOCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlyZXR1cm4gX19tZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgbW0sIGdmcCk7CiB9CiAKLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7CiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJICAgICAgZ2ZwX3QgZ2ZwKTsKIAogaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCwKIAkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTsKQEAgLTExNTYsOSAmIzQzOzExNTcsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApCiB7Ci0gICAgICAgIHJldHVybiAwOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNzg1NzcyODQ1Nzk1Mi4uNWFiNWE1MTQxNTc0OCAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMjgxNiw2ICYjNDM7MjgxNiw3IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZCkKICAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uCiAgKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLgogICogQG1wb2xpOiBJbnRlcnByZXRlZCBtZW1vcnkgcG9saWN5IHRvIHVzZSBmb3IgYWxsb2NhdGlvbi4KJiM0MzsgKiBAbW06IE1lbW9yeSBkZXNjcmlwdG9yIG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldC4KICAqIEBhbGxvY19mbGFnczogRmxhZ3MgY29udHJvbGxpbmcgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IuCiAgKgogICogQWxsb2NhdGVzIGEgaHVnZXRsYiBmb2xpbyBhbmQgaGFuZGxlcyBjZ3JvdXAgY2hhcmdpbmcgYW5kIGdsb2JhbCBoc3RhdGUKQEAgLTI4MjYsNyAmIzQzOzI4MjcsOCBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpCiAgKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy4KICAqLwogc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCi0JCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncykKJiM0MzsJCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXU4IGFsbG9jX2ZsYWdzKQogewogCWJvb2wgY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgPSBhbGxvY19mbGFncyAmYW1wOwogCQkJCQkgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7CkBAIC0yODgxLDcgJiM0MzsyODgzLDggQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiAKIAlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCi0JcmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7CiYjNDM7CXJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIG1tLAomIzQzOwkJCQkJZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7CiAJLyoKIAkgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmCiAJICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbApAQCAtMzAyMCw3ICYjNDM7MzAyMyw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJLm5vZGVtYXNrID0gbm9kZW1hc2ssCiAJfTsKIAotCWZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCAmYW1wO21wb2xpLCBhbGxvY19mbGFncyk7CiYjNDM7CWZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCAmYW1wO21wb2xpLCB2bWEtJmd0O3ZtX21tLCBhbGxvY19mbGFncyk7CiAKIAltcG9sX2NvbmRfcHV0KG1wb2wpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMGI3OTViZjFlNmNmMSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNTIzMyw2ICYjNDM7NTIzMyw3IEBAIGludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApCiAvKioKICAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW8KICAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZAomIzQzOyAqIEBtbTogbW0gY29udGV4dCBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXQKICAqIEBnZnA6IHJlY2xhaW0gbW9kZQogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzCkBAIC01MjQyLDkgJiM0Mzs1MjQzLDEwIEBAIGludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApCiAgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLgogICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy4KICAqLwotaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKQomIzQzO2ludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCSAgICAgIGdmcF90IGdmcCkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7CiAJaW50IHJldCA9IDA7CiAKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBkaWcgaW4uIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlcyBhcmUgZm9jdXNlZCBhcm91bmQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEludGVyZXN0aW5nLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgaGFzIGJlZW4gdXBkYXRlZDsgaXQgcHJldmlvdXNseSB0b29rIHRoZSBgc3RydWN0IGZvbGlvYCBhbmQgYGdmcF90YCBhcmd1bWVudHMsIGFuZCBnb3QgdGhlIGBzdHJ1Y3QgbWVtX2Nncm91cGAgdXNpbmcgYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYC4gTm93LCBpdCYjMzk7cyB0YWtpbmcgYSBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIGFyZ3VtZW50IGFuZCB1c2luZyBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgIGluc3RlYWQuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdC4gQW5kIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBoYXMgYmVlbiB1cGRhdGVkIHRvIHRha2UgdGhhdCBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIGFuZCBwYXNzIGl0IHRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gUmlnaHQsIGBhbGxvY19odWdldGxiX2ZvbGlvYCB0aGVuIGNhbGxzIGl0IHdpdGggYHZtYS0mZ3Q7dm1fbW1gLgoKQWxyaWdodCwgSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBzY29wZSBvZiB0aGlzIGNoYW5nZS4gQXJlIHRoZXJlIGFueSBvdGhlciBjYWxsZXJzIG9mIGBodWdldGxiX2FsbG9jX2ZvbGlvYD8gSSYjMzk7bSBnb2luZyB0byBydW4gZ3JlcHBlciB0byBzZWUgd2hlcmUgdGhpcyBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wYWN0LiBJIG5lZWQgdG8ga25vdyB0aGUgcmVhY2ggb2YgdGhpcy4gQmFzZWQgb24gdGhvc2UgcmVzdWx0cywgSSBjYW4gbWFrZSBhIGNhbGwgYWJvdXQgZnV6emluZyBuZWVkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02OTM9ZW51bSBodWdldGxiX2FsbG9jX2ZsYWcge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwMTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMi1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5tbS9odWdldGxiLmMtMjgxNS0vKipcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuLS1cbm1tL2h1Z2V0bGIuYy0yODI4LSAqL1xubW0vaHVnZXRsYi5jOjI4Mjk6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMjgzMC1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAyNS1cbm1tL2h1Z2V0bGIuYzozMDI2Olx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCB2bWEtXHUwMDNldm1fbW0sIGFsbG9jX2ZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0zMDI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTgzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgQ2FsbGVycyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIEh1Z2VUTEIgcGFnZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicm9hZGVuIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIGJleW9uZCB3aGF0IHdlJiMzOTt2ZSBiZWVuIGZvY3VzZWQgb24uIFRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IGNvbnN1bXB0aW9uIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgcmVsYXRlZCB0byBIdWdlVExCIHVzYWdlIHdpdGhpbiBjZ3JvdXBzLCB3ZSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgY2FsbCBzaXRlcyBvZiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIFdoYXQgYXJlIHRoZSB2YXJpb3VzIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24/IFRoaXMgd2lsbCBnaXZlIHVzIGEgYmlyZCYjMzk7cy1leWUgdmlldy4gVGhpcyBpcyBrZXkgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGlzc3VlcyBpbiBhY2NvdW50aW5nIG9yIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGFzc29jaWF0ZWQgd2l0aCBIdWdlVExCIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgZXZlcnl0aGluZywgZnJvbSB0aGUgY29yZSBhbGxvY2F0aW9uIHBhdGhzIHRvIHRoZSByZWxlYXNlIG1lY2hhbmlzbXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyByZWFsbHkgZHJpdmluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjYtXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTU0PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNjA6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE2MS1cdFx0XHRcdFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vaHVnZXRsYi5jPTI4Mjk9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTI4ODUtXG5tbS9odWdldGxiLmM6Mjg4NjpcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIG1tLFxubW0vaHVnZXRsYi5jLTI4ODctXHRcdFx0XHRcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuLS1cbm1tL2h1Z2V0bGIuYy0yODg5LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxubW0vaHVnZXRsYi5jOjI4OTA6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG5tbS9odWdldGxiLmMtMjg5MS1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjIxPWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMzMtLyoqXG5tbS9tZW1jb250cm9sLmM6NTIzNDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTIzNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjQ2OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0vbWVtY29udHJvbC5jLTUyNDctXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBDb250cm9sIERldGFpbHMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY2dyb3VwIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMuIExldCYjMzk7cyBkaWcgaW50byBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tYCBpbXBsZW1lbnRhdGlvbi4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBoZXJlLCB0aGUgbWV0aG9kIHVzZWQgdG8gbGluayBhIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAoYG1tYCkgdG8gaXRzIGFzc29jaWF0ZWQgY2dyb3VwLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBob3cgdGhlIGtlcm5lbCB0cmFja3MgbWVtb3J5IHVzYWdlIGFuZCBlbmZvcmNlcyBsaW1pdHMgYmFzZWQgb24gY2dyb3VwIGFzc2lnbm1lbnRzLiBJIGFudGljaXBhdGUgaXQgd2lsbCBlaXRoZXIgZGlyZWN0bHkgYWNjZXNzIGEgZmllbGQgd2l0aGluIHRoZSBgbW1fc3RydWN0YCBvciwgbW9yZSBsaWtlbHksIGZvbGxvdyBhIHBvaW50ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IG1haW50YWlucyB0aGlzIHJlbGF0aW9uc2hpcC4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgY29ycmVjdGx5IGF0dHJpYnV0ZXMgbWVtb3J5IHVzYWdlIHRvIGEgcGFydGljdWxhciBjb250cm9sIGdyb3VwLCB3aGljaCBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcyB3aGVuIGRlYWxpbmcgd2l0aCBjZ3JvdXAgbWVtb3J5IG1hbmFnZW1lbnQuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgcG9pbnRzIG9mIGNvbnRlbnRpb24gaW4gdGhpcyBjcml0aWNhbCBwYXRoLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZXhhbWluZSB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X21lbV9jZ3JvdXBfZnJvbV9tbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM9MTAwMT1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNneF9lbmNsX2dldF9tZW1fY2dyb3VwKHN0cnVjdCBzZ3hfZW5jbCAqZW5jbClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAxMi1cdGlmICghY3VycmVudF9pc19rc2d4ZCgpKVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jOjEwMTM6XHRcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXHUwMDNlbW0pO1xuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwMTQtXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwMjQtXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTAyNTpcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGVuY2xfbW0tXHUwMDNlbW0pO1xuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwMjYtXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNDAtXHRpZiAoIW1lbWNnKVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jOjEwNDE6XHRcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX21tKE5VTEwpO1xuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNDItXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYz0xNTg5PVNZU0NBTExfREVGSU5FMihmYW5vdGlmeV9pbml0LCB1bnNpZ25lZCBpbnQsIGZsYWdzLCB1bnNpZ25lZCBpbnQsIGV2ZW50X2ZfZmxhZ3MpXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xNjg0LVx0Z3JvdXAtXHUwMDNlZmFub3RpZnlfZGF0YS5mbGFncyA9IGZsYWdzIHwgaW50ZXJuYWxfZmxhZ3M7XG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jOjE2ODU6XHRncm91cC1cdTAwM2VtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cdTAwM2VtbSk7XG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTE2ODYtXHRncm91cC1cdTAwM2V1c2VyX25zID0gZ2V0X3VzZXJfbnModXNlcl9ucyk7XG4tLVxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmM9NjQxPXN0YXRpYyBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmlub3RpZnlfbmV3X2dyb3VwKHVuc2lnbmVkIGludCBtYXhfZXZlbnRzKVxuLS1cbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jLTY2My1cdGdyb3VwLVx1MDAzZW1heF9ldmVudHMgPSBtYXhfZXZlbnRzO1xuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmM6NjY0Olx0Z3JvdXAtXHUwMDNlbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXHUwMDNlbW0pO1xuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMtNjY1LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTc1NT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTc1Ni1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjc1NzpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC03NTgtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTIwNj1zdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyMTEtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjEyOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMjEzLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTEzOD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICphY3RpdmVfbWVtY2codm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTE0Ni0vKipcbm1tL21lbWNvbnRyb2wuYzoxMTQ3OiAqIGdldF9tZW1fY2dyb3VwX2Zyb21fbW06IE9idGFpbiBhIHJlZmVyZW5jZSBvbiBnaXZlbiBtbV9zdHJ1Y3QmIzM5O3MgbWVtY2cuXG5tbS9tZW1jb250cm9sLmMtMTE0OC0gKiBAbW06IG1tIGZyb20gd2hpY2ggbWVtY2cgc2hvdWxkIGJlIGV4dHJhY3RlZC4gSXQgY2FuIGJlIE5VTEwuXG4tLVxubW0vbWVtY29udHJvbC5jLTExNTYtICovXG5tbS9tZW1jb250cm9sLmM6MTE1NzpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL21lbWNvbnRyb2wuYy0xMTU4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTE5My19XG5tbS9tZW1jb250cm9sLmM6MTE5NDpFWFBPUlRfU1lNQk9MKGdldF9tZW1fY2dyb3VwX2Zyb21fbW0pO1xubW0vbWVtY29udHJvbC5jLTExOTUtXG4tLVxubW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjU2NC1cbm1tL21lbWNvbnRyb2wuYzoyNTY1Olx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXHUwMDNlbW0pO1xubW0vbWVtY29udHJvbC5jLTI1NjYtXHRjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCA9IDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTUyMjE9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIyNS1cbm1tL21lbWNvbnRyb2wuYzo1MjI2Olx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbm1tL21lbWNvbnRyb2wuYy01MjI3LVx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI0Nj1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0OC17XG5tbS9tZW1jb250cm9sLmM6NTI0OTpcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xubW0vbWVtY29udHJvbC5jLTUyNTAtXHRpbnQgcmV0ID0gMDtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI4MT1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjkyLVx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbm1tL21lbWNvbnRyb2wuYzo1MjkzOlx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xubW0vbWVtY29udHJvbC5jLTUyOTQtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS92bXNjYW4uYz0yOTQyPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjk0NC1cdGludCBuaWQ7XG5tbS92bXNjYW4uYzoyOTQ1Olx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS92bXNjYW4uYy0yOTQ2LVx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQyOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIEhlYXJ0IG9mIEh1Z2VUTEIgTWVtb3J5IEFjY291bnRpbmcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1lbW9yeSBjZ3JvdXAgbWFnaWMgaGFwcGVucywgcmlnaHQ/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEh1Z2VUTEIgbWVtb3J5IGlzIGNoYXJnZWQuIEkgZmlndXJlIGxpbmVzIDUyNDAgdGhyb3VnaCA1MjcwIGFyZSB0aGUga2V5IGFyZWEgZm9yIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRob3NlIHBhZ2VzLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIHRvIGdldCB0aGlzIGNoYXJnaW5nIGxvZ2ljIHJpZ2h0IGZvciBhY2N1cmF0ZSByZXNvdXJjZSBhY2NvdW50aW5nIGFuZCwgdWx0aW1hdGVseSwgZWZmZWN0aXZlIGNncm91cC1iYXNlZCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGhlcmUuIEkgZXhwZWN0IHRoZXJlJiMzOTtzIHByb2JhYmx5IHNvbWUgaW50ZXJwbGF5IHdpdGggdGhlIHBhZ2UgdGFibGUgZW50cmllcyBvciBtYXliZSBzb21lIGFjY291bnRpbmcgc3RydWN0dXJlcyBzcGVjaWZpYyB0byBIdWdlVExCLiBMZXQmIzM5O3Mgc3RhcnQgZGlzc2VjdGluZyB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTIzMDpcdFx0cmV0dXJuIHJldDtcbjUyMzE6XHR9XG41MjMyOlx0XG41MjMzOlx0LyoqXG41MjM0Olx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xuNTIzNTpcdCAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxuNTIzNjpcdCAqIEBtbTogbW0gY29udGV4dCBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXRcbjUyMzc6XHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbjUyMzg6XHQgKlxuNTIzOTpcdCAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzXG41MjQwOlx0ICogYWxyZWFkeSBiZWVuIG9idGFpbmVkIGFuZCBjaGFyZ2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBodWdldGxiIGNncm91cFxuNTI0MTpcdCAqIGNvbnRyb2xsZXIgKGlmIGl0IGlzIGVuYWJsZWQpLlxuNTI0MjpcdCAqXG41MjQzOlx0ICogUmV0dXJucyBFTk9NRU0gaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgZnVsbC5cbjUyNDQ6XHQgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLlxuNTI0NTpcdCAqL1xuNTI0NjpcdGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuNTI0NzpcdFx0XHRcdCAgICAgIGdmcF90IGdmcClcbjUyNDg6XHR7XG41MjQ5Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbjUyNTA6XHRcdGludCByZXQgPSAwO1xuNTI1MTpcdFxuNTI1MjpcdFx0LypcbjUyNTM6XHRcdCAqIEV2ZW4gbWVtY2cgZG9lcyBub3QgYWNjb3VudCBmb3IgaHVnZXRsYiwgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGVcbjUyNTQ6XHRcdCAqIHN5c3RlbS1sZXZlbCBzdGF0cyB2aWEgbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvLiBSZXR1cm4gMCwgYW5kIHNraXBcbjUyNTU6XHRcdCAqIGNoYXJnaW5nIHRoZSBtZW1jZy5cbjUyNTY6XHRcdCAqL1xuNTI1NzpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpIHx8XG41MjU4Olx0XHRcdCFtZW1jZyB8fCAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbjUyNTk6XHRcdFx0Z290byBvdXQ7XG41MjYwOlx0XG41MjYxOlx0XHRpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSlcbjUyNjI6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjUyNjM6XHRcbjUyNjQ6XHRvdXQ6XG41MjY1Olx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG41MjY2Olx0XHRyZXR1cm4gcmV0O1xuNTI2NzpcdH1cbjUyNjg6XHRcbjUyNjk6XHQvKipcbjUyNzA6XHQgKiBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8gLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gZm9yIHN3YXBpbi5cbjUyNzE6XHQgKiBAZm9saW86IHRoZSBmb2xpbyB0byBjaGFyZ2VcbjUyNzI6XHQgKiBAaWQ6IG1lbW9yeSBjZ3JvdXAgaWRcbjUyNzM6XHQgKiBAbW06IG1tIGNvbnRleHQgb2YgdGhlIHZpY3RpbVxuNTI3NDpcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxuNTI3NTpcdCAqXG41Mjc2Olx0ICogVGhpcyBmdW5jdGlvbiBjaGFyZ2VzIGEgZm9saW8gYWxsb2NhdGVkIGZvciBzd2FwaW4uIFBsZWFzZSBjYWxsIHRoaXMgYmVmb3JlXG41Mjc3Olx0ICogYWRkaW5nIHRoZSBmb2xpbyB0byB0aGUgc3dhcGNhY2hlLlxuNTI3ODpcdCAqXG41Mjc5Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIE90aGVyd2lzZSwgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4MAoJCQkJCQkJb3V0cHV0OiAyMDYKCQkJCQkJCXRob3VnaHRzOiA1NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgYW5kIEtNU0FOIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IHJlZmFjdG9yaW5nIGhvdyBIdWdlVExCIG1lbW9yeSBjaGFyZ2VzIGFyZSBoYW5kbGVkIHdpdGhpbiBjZ3JvdXBzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRvIHBhc3MgdGhlIGBtbV9zdHJ1Y3RgIGRvd24gdGhlIGNhbGwgY2hhaW4gaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBgY3VycmVudGAgdGFzayYjMzk7cyBjb250ZXh0LgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGVzZSBrZXkgbW9kaWZpY2F0aW9uczoKCiogICBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgaXMgdXBkYXRlZCB0byB0YWtlIGEgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBhcmd1bWVudC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBzaGlmdC4gSXQgdGhlbiB1c2VzIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWAgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IG1lbW9yeSBjZ3JvdXAgZm9yIHRoZSB0YXJnZXQgbWVtb3J5IHNwYWNlLCByYXRoZXIgdGhhbiBpbXBsaWNpdGx5IHVzaW5nIHRoZSBjdXJyZW50IHRhc2smIzM5O3MgY2dyb3VwLgoqICAgVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2YgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYWNjb21tb2RhdGUgdGhlIGBtbWAgcG9pbnRlciBhbmQgZW5zdXJlIGl0JiMzOTtzIHByb3BhZ2F0ZWQgZG93biB0aGUgc3RhY2suIGBhbGxvY19odWdldGxiX2ZvbGlvYCBub3cgcGFzc2VzIGB2bWEtJmd0O3ZtX21tYCB0byBgaHVnZXRsYl9hbGxvY19mb2xpb2AuCiogICBUaGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMsIGBsaW51eC9odWdldGxiLmhgIGFuZCBgbGludXgvbWVtY29udHJvbC5oYCwgaGF2ZSBoYWQgdGhlaXIgZGVjbGFyYXRpb25zIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogS01TQU4uIEkmIzM5O3ZlIHRob3JvdWdobHkgcmV2aWV3ZWQgdGhlIHBhdGNoIGFnYWluc3QgdGhlIEtNU0FOIGFuZCBLQVNBTiBjcml0ZXJpYS4KCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8sIG5vdGhpbmcgbGlrZSB0aGF0IGhlcmUuIFRoaXMgaXMgcHVyZWx5IGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LCBub3QgZXhwb3Npbmcga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vLCB0aGUgY29kZSBpcyB2ZXJ5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGBtbWAgcG9pbnRlciwgd2hldGhlciBOVUxMIG9yIHZhbGlkLCBpcyBoYW5kbGVkIGNvcnJlY3RseSBieSBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbWAuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOby4gQWdhaW4sIHRoZSBmb2N1cyBpcyBvbiByZWZhY3RvcmluZyBob3cgbWVtb3J5IGFjY291bnRpbmcgaXMgZG9uZSBhbmQgY2dyb3VwIGFzc2lnbm1lbnRzIGFyZSBoYW5kbGVkLgo0LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBOby4gVGhpcyBpcyBub3QgYWJvdXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBvciB2dWxuZXJhYmlsaXRpZXM7IHRoZSBwYXRjaCBpcyBhYm91dCBob3cgdGhlIGtlcm5lbCB0cmFja3MgbWVtb3J5IHVzYWdlIGJ5IHByb2Nlc3Nlcy4KCkdpdmVuIGFsbCBvZiB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gVGhlIHN0YW5kYXJkIGRldGVjdG9ycywgS0FTQU4gYW5kIExPQ0tERVAsIHNob3VsZCBjYXRjaCBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gcG9pbnRlciB2YWxpZGl0eSwgcmVmY291bnRzLCBvciBnZW5lcmFsIG1lbW9yeSBzYWZldHkuIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCkkmIzM5O3ZlIGFsc28gcXVpY2tseSByZS1leGFtaW5lZCBhbGwgdGhlIGFmZmVjdGVkIGZpbGVzOiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgbW0vaHVnZXRsYi5jYCwgYW5kIGBtbS9tZW1jb250cm9sLmNgLiBUaGUgY2hhbmdlcyBhcmUgYWxsIHZlcnkgZm9jdXNlZCBhbmQgc2ltcGx5IGFib3V0IHBhc3NpbmcgdGhlIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgZG93biBpbnRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBhbmQgY2FsbGluZyBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgLgoKU28sIEkmIzM5O20gcmVhZHkgdG8gbWFyayB0aGlzIGFzIGBOZWVkc0tNU0FOOiBmYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgc29saWQsIGFuZCB0aGUgY29kZSBsb29rcyBjbGVhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBtZW1jZyBjaGFyZ2luZyByb3V0aW5lcyAoYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2ApIHRvIHBhc3MgYSB0YXJnZXQgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBwb2ludGVyIGFuZCBjaGFyZ2UgdGhlIGh1Z2V0bGIgZm9saW8gdG8gdGhlIGNncm91cCBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCBtbSAoYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYCkgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgdGFzayAoYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCkuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHBvaW50ZXIgcGFzc2luZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIHJvdXRpbmVzIChgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvYCkgdG8gcGFzcyBhIHRhcmdldCBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIHBvaW50ZXIgYW5kIGNoYXJnZSB0aGUgaHVnZXRsYiBmb2xpbyB0byB0aGUgY2dyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0IG1tIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgKSByYXRoZXIgdGhhbiB0aGUgY3VycmVudCB0YXNrIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgKS5cblxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgcG9pbnRlciBwYXNzaW5nIGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYnVmZmVycywgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MDQuNDY3Mzc2NjU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYzMTA0NzQyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcm91dGluZXMgKGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gKSB0byBwYXNzIGEgdGFyZ2V0IGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgcG9pbnRlciBhbmQgY2hhcmdlIHRoZSBodWdldGxiIGZvbGlvIHRvIHRoZSBjZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgbW0gKGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWApIHJhdGhlciB0aGFuIHRoZSBjdXJyZW50IHRhc2sgKGBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKWApLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHBvaW50ZXIgcGFzc2luZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBtZW1jZyBjaGFyZ2luZyBwYXRocyAoaHVnZXRsYl9hbGxvY19mb2xpbywgYWxsb2NfaHVnZXRsYl9mb2xpbywgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYikgdG8gYXNzb2NpYXRlIGFuZCBjaGFyZ2UgaHVnZSBmb2xpb3MgYWdhaW5zdCB0aGUgdGFyZ2V0IG1tX3N0cnVjdCByYXRoZXIgdGhhbiBjdXJyZW50LiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGxvZ2ljIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nIHRvIHZlcmlmeSBjb3JyZWN0IGNncm91cCBhY2NvdW50aW5nIGFuZCBhdm9pZCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MDQuNDY3MzgxMzE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjI5MjA3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzODY3NjY0Y2QxYjJmYTc3OWI0MjQ1NzMyMGY0ZWVhMGUzMjNjMjg1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDk6NTk6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1YWRhNzVkYzA0ZTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbkBAIC02OTksNyArNjk5LDggQEAgZW51bSBodWdldGxiX2FsbG9jX2ZsYWcge1xcbiAjZGVmaW5lIEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlMgQklUKEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlNfQklUKVxcbiBcXG4gc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XFxuK1xcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0dTggYWxsb2NfZmxhZ3MpO1xcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcik7XFxuIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IDdkMWMwY2UxODlhODguLjM2MmFmNThlNTBhNDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC02NjIsNyArNjYyLDggQEAgc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTtcXG4gfVxcbiBcXG4taW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcXG4raW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdCAgICAgIGdmcF90IGdmcCk7XFxuIFxcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTtcXG5AQCAtMTE1Niw5ICsxMTU3LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4ge1xcbi0gICAgICAgIHJldHVybiAwO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLjVhYjVhNTE0MTU3NDggMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTI4MTYsNiArMjgxNiw3IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4gICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cXG4gICogQGg6IEh1Z2V0bGIgc3RhdGUgY29udHJvbCBibG9jay5cXG4gICogQG1wb2xpOiBJbnRlcnByZXRlZCBtZW1vcnkgcG9saWN5IHRvIHVzZSBmb3IgYWxsb2NhdGlvbi5cXG4rICogQG1tOiBNZW1vcnkgZGVzY3JpcHRvciBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXQuXFxuICAqIEBhbGxvY19mbGFnczogRmxhZ3MgY29udHJvbGxpbmcgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IuXFxuICAqXFxuICAqIEFsbG9jYXRlcyBhIGh1Z2V0bGIgZm9saW8gYW5kIGhhbmRsZXMgY2dyb3VwIGNoYXJnaW5nIGFuZCBnbG9iYWwgaHN0YXRlXFxuQEAgLTI4MjYsNyArMjgyNyw4IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4gICogICAgICAgICAtRU5PTUVNIGlmIG1lbSBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMuXFxuICAqL1xcbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tXFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxcbitcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHU4IGFsbG9jX2ZsYWdzKVxcbiB7XFxuIFxcdGJvb2wgY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgPSBhbGxvY19mbGFncyBcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdFxcdCAgSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcXG5AQCAtMjg4MSw3ICsyODgzLDggQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcbiBcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcbi1cXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcXG4rXFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgbW0sXFxuK1xcdFxcdFxcdFxcdFxcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xcbiBcXHQvKlxcbiBcXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmXFxuIFxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcXG5AQCAtMzAyMCw3ICszMDIzLDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQubm9kZW1hc2sgPSBub2RlbWFzayxcXG4gXFx0fTtcXG4gXFxuLVxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcXG4rXFx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFxcdTAwMjZtcG9saSwgdm1hLVxcdTAwM2V2bV9tbSwgYWxsb2NfZmxhZ3MpO1xcbiBcXG4gXFx0bXBvbF9jb25kX3B1dChtcG9sKTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjBiNzk1YmYxZTZjZjEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTUyMzMsNiArNTIzMyw3IEBAIGludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuIC8qKlxcbiAgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxuICAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbisgKiBAbW06IG1tIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRpb24gdGFyZ2V0XFxuICAqIEBnZnA6IHJlY2xhaW0gbW9kZVxcbiAgKlxcbiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFsbG9jYXRpbmcgYSBodWdlIHBhZ2UgZm9saW8sIGFmdGVyIHRoZSBwYWdlIGhhc1xcbkBAIC01MjQyLDkgKzUyNDMsMTAgQEAgaW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4gICogUmV0dXJucyBFTk9NRU0gaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgZnVsbC5cXG4gICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy5cXG4gICovXFxuLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4raW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdCAgICAgIGdmcF90IGdmcClcXG4ge1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MDQuODkxMDIyNDc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NzU1MzI1NTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcGF0aHMgKGh1Z2V0bGJfYWxsb2NfZm9saW8sIGFsbG9jX2h1Z2V0bGJfZm9saW8sIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIpIHRvIGFzc29jaWF0ZSBhbmQgY2hhcmdlIGh1Z2UgZm9saW9zIGFnYWluc3QgdGhlIHRhcmdldCBtbV9zdHJ1Y3QgcmF0aGVyIHRoYW4gY3VycmVudC4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgY29ycmVjdCBjZ3JvdXAgYWNjb3VudGluZyBhbmQgYXZvaWQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzg2NzY2NGNkMWIyZmE3NzliNDI0NTczMjBmNGVlYTBlMzIzYzI4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDk6NTk6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAxNmM0YzRjYWExMjZjLi40NWFkYTc1ZGMwNGU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtNjk5LDcgKzY5OSw4IEBAIGVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcbiAjZGVmaW5lIEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlMgQklUKEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlNfQklUKVxuIFxuIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpO1xuK1x0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHU4IGFsbG9jX2ZsYWdzKTtcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xuIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li4zNjJhZjU4ZTUwYTQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjYyLDcgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApO1xuIH1cbiBcbi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xuK2ludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRcdCAgICAgIGdmcF90IGdmcCk7XG4gXG4gaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuQEAgLTExNTYsOSArMTE1NywxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4ge1xuLSAgICAgICAgcmV0dXJuIDA7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA3ODU3NzI4NDU3OTUyLi41YWI1YTUxNDE1NzQ4IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0yODE2LDYgKzI4MTYsNyBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXG4gICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cbiAgKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuICAqIEBtcG9saTogSW50ZXJwcmV0ZWQgbWVtb3J5IHBvbGljeSB0byB1c2UgZm9yIGFsbG9jYXRpb24uXG4rICogQG1tOiBNZW1vcnkgZGVzY3JpcHRvciBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXQuXG4gICogQGFsbG9jX2ZsYWdzOiBGbGFncyBjb250cm9sbGluZyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvci5cbiAgKlxuICAqIEFsbG9jYXRlcyBhIGh1Z2V0bGIgZm9saW8gYW5kIGhhbmRsZXMgY2dyb3VwIGNoYXJnaW5nIGFuZCBnbG9iYWwgaHN0YXRlXG5AQCAtMjgyNiw3ICsyODI3LDggQEAgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuICAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLlxuICAqL1xuIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXG4rXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dTggYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Ym9vbCBjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCA9IGFsbG9jX2ZsYWdzIFx1MDAyNlxuIFx0XHRcdFx0XHQgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG5AQCAtMjg4MSw3ICsyODgzLDggQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbi1cdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuK1x0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgbW0sXG4rXHRcdFx0XHRcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuIFx0LypcbiBcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcbiBcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcbkBAIC0zMDIwLDcgKzMwMjMsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC5ub2RlbWFzayA9IG5vZGVtYXNrLFxuIFx0fTtcbiBcbi1cdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xuK1x0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCB2bWEtXHUwMDNldm1fbW0sIGFsbG9jX2ZsYWdzKTtcbiBcbiBcdG1wb2xfY29uZF9wdXQobXBvbCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4wYjc5NWJmMWU2Y2YxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01MjMzLDYgKzUyMzMsNyBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuIC8qKlxuICAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cbiAgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbisgKiBAbW06IG1tIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRpb24gdGFyZ2V0XG4gICogQGdmcDogcmVjbGFpbSBtb2RlXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFsbG9jYXRpbmcgYSBodWdlIHBhZ2UgZm9saW8sIGFmdGVyIHRoZSBwYWdlIGhhc1xuQEAgLTUyNDIsOSArNTI0MywxMCBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuICAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuXG4gICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy5cbiAgKi9cbi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4raW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OTowNC44OTEwMjQ5NjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzYwMjUzMDMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaGl0dGluZyBtZW1vcnkgbWFuYWdlbWVudCBwcmV0dHkgaGFyZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBodWdldGxiZnMgYW5kIG1lbW9yeSBjZ3JvdXBzLiBJIHNlZSBjaGFuZ2VzIGluIGBtbS9odWdldGxiLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYWRkaW5nIGEgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBwYXJhbWV0ZXIgdG8gYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgcmVwbGFjZWQgYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCB3aXRoIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWAuIEFoYSwgc28gaXQncyB0cmFuc2l0aW9uaW5nIGZyb20gdXNpbmcgdGhlIGN1cnJlbnQgdGFzaydzIG1lbW9yeSBjb250ZXh0IHRvIHVzaW5nIGEgc3BlY2lmaWVkIG9uZS4gVGhhdCdzIGludGVyZXN0aW5nLiBUaGVuIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBub3cgY2FsbGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgd2l0aCB0aGF0IGBtbWAgcGFyYW1ldGVyLCBhbmQgd2l0aGluIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgaXQncyBwYXNzaW5nIGB2bWEtXHUwMDNldm1fbW1gIHRvIGBodWdldGxiX2FsbG9jX2ZvbGlvYC4gTWFrZXMgc2Vuc2U7IGB2bWEtXHUwMDNldm1fbW1gIGlzIHRoZSByZWxldmFudCBtZW1vcnkgbWFwcGluZy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBmb3Igb3RoZXIgY2FsbCBzaXRlcyBvZiB0aG9zZSB0d28gZnVuY3Rpb25zLCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGtlcm5lbC4gQmV0dGVyIHJ1biBgZ3JlcHBlcmAgYW5kIGRvdWJsZS1jaGVjaywgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nLiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgZXNwZWNpYWxseSBpbiBjb250ZXh0cyB0aGF0IG1pZ2h0IGhhdmUgc3VidGx5IGRpZmZlcmVudCBtZW1vcnkgY29udGV4dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OToxOC40OTM1NjExNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNjQ4MTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2FsbG9jX2ZvbGlvfG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY2LVxcdFxcdFxcdCAgICAgIGdmcF90IGdmcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTU0PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU5LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNjA6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjEtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9odWdldGxiLmM9MjgwNz12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMjgxNS0vKipcXG5tbS9odWdldGxiLmM6MjgxNjogKiBodWdldGxiX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgYSBodWdldGxiIGZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yODE3LSAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXFxuLS1cXG5tbS9odWdldGxiLmMtMjgyOC0gKi9cXG5tbS9odWdldGxiLmM6MjgyOTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMjgzMC1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9odWdldGxiLmMtMjg4NS1cXG5tbS9odWdldGxiLmM6Mjg4NjpcXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBtbSxcXG5tbS9odWdldGxiLmMtMjg4Ny1cXHRcXHRcXHRcXHRcXHRnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODg5LVxcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcXG5tbS9odWdldGxiLmM6Mjg5MDpcXHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXFxubW0vaHVnZXRsYi5jLTI4OTEtXFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXFxuLS1cXG5tbS9odWdldGxiLmM9Mjk0Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzAyNS1cXG5tbS9odWdldGxiLmM6MzAyNjpcXHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXFx1MDAyNm1wb2xpLCB2bWEtXFx1MDAzZXZtX21tLCBhbGxvY19mbGFncyk7XFxubW0vaHVnZXRsYi5jLTMwMjctXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMzMtLyoqXFxubW0vbWVtY29udHJvbC5jOjUyMzQ6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xcbm1tL21lbWNvbnRyb2wuYy01MjM1LSAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNDUtICovXFxubW0vbWVtY29udHJvbC5jOjUyNDY6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0vbWVtY29udHJvbC5jLTUyNDctXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZ2ZwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OToyMC42MzAwNDkxNDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY5NDc1NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQ2FsbHMgdG8gYGh1Z2V0bGJfYWxsb2NfZm9saW9gKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyB1c2VkLiBJJ3ZlIGdvdCBhIHNwZWNpZmljIGNvbmNlcm4gYW5kIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQncyBsaW1pdGVkIHRvIHRoZSBrbm93biBpbnN0YW5jZXMuIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSwgc28gYSBnbG9iYWwgc2VhcmNoIGlzIGluIG9yZGVyLiBMZXQncyBmaXJlIHVwIGEgYGdyZXBgIGFuZCBodW50IGZvciBldmVyeSBzaW5nbGUgaW5zdGFuY2Ugb2YgYGh1Z2V0bGJfYWxsb2NfZm9saW9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSByYXcgZGF0YSBJIG5lZWQgdG8gc3RhcnQgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OToyMy4zOTk1MjY5NjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MzA4NTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2FsbG9jX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY5Mz1lbnVtIGh1Z2V0bGJfYWxsb2NfZmxhZyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDAtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzAxOnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMi1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9odWdldGxiLmM9MjgwNz12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMjgxNS0vKipcXG5tbS9odWdldGxiLmM6MjgxNjogKiBodWdldGxiX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgYSBodWdldGxiIGZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yODE3LSAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXFxuLS1cXG5tbS9odWdldGxiLmMtMjgyOC0gKi9cXG5tbS9odWdldGxiLmM6MjgyOTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMjgzMC1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9odWdldGxiLmM9Mjk0Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzAyNS1cXG5tbS9odWdldGxiLmM6MzAyNjpcXHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXFx1MDAyNm1wb2xpLCB2bWEtXFx1MDAzZXZtX21tLCBhbGxvY19mbGFncyk7XFxubW0vaHVnZXRsYi5jLTMwMjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjI1LjA1MjYxODI1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODExOTM1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEh1Z2V0bGIgbWVtb3J5IGFjY291bnRpbmcgaXMgd29ya2luZyB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgZnJhbWV3b3JrLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgaW50ZXJhY3Rpb24gb3IgZWRnZSBjYXNlIEknbSBtaXNzaW5nLiBUaW1lIHRvIGp1bXAgaW50byB0aGUgY29kZS4gTGV0J3Mgc2VlLi4uIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBtbS9tZW1jb250cm9sLmNgLiBJJ20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byB0aGUgdmljaW5pdHkgb2YgbGluZSA1MjMzLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBIb3BlZnVsbHksIHRoYXQgbGluZSBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvbnRleHQgY2FuIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjI3LjAzMzgxMzk4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1Mzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTIzMDpcXHRcXHRyZXR1cm4gcmV0O1xcbjUyMzE6XFx0fVxcbjUyMzI6XFx0XFxuNTIzMzpcXHQvKipcXG41MjM0OlxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cXG41MjM1OlxcdCAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbjUyMzY6XFx0ICogQG1tOiBtbSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldFxcbjUyMzc6XFx0ICogQGdmcDogcmVjbGFpbSBtb2RlXFxuNTIzODpcXHQgKlxcbjUyMzk6XFx0ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbGxvY2F0aW5nIGEgaHVnZSBwYWdlIGZvbGlvLCBhZnRlciB0aGUgcGFnZSBoYXNcXG41MjQwOlxcdCAqIGFscmVhZHkgYmVlbiBvYnRhaW5lZCBhbmQgY2hhcmdlZCB0byB0aGUgYXBwcm9wcmlhdGUgaHVnZXRsYiBjZ3JvdXBcXG41MjQxOlxcdCAqIGNvbnRyb2xsZXIgKGlmIGl0IGlzIGVuYWJsZWQpLlxcbjUyNDI6XFx0ICpcXG41MjQzOlxcdCAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuXFxuNTI0NDpcXHQgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLlxcbjUyNDU6XFx0ICovXFxuNTI0NjpcXHRpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG41MjQ3OlxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGdmcClcXG41MjQ4OlxcdHtcXG41MjQ5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbjUyNTA6XFx0XFx0aW50IHJldCA9IDA7XFxuNTI1MTpcXHRcXG41MjUyOlxcdFxcdC8qXFxuNTI1MzpcXHRcXHQgKiBFdmVuIG1lbWNnIGRvZXMgbm90IGFjY291bnQgZm9yIGh1Z2V0bGIsIHdlIHN0aWxsIHdhbnQgdG8gdXBkYXRlXFxuNTI1NDpcXHRcXHQgKiBzeXN0ZW0tbGV2ZWwgc3RhdHMgdmlhIGxydXZlY19zdGF0X21vZF9mb2xpby4gUmV0dXJuIDAsIGFuZCBza2lwXFxuNTI1NTpcXHRcXHQgKiBjaGFyZ2luZyB0aGUgbWVtY2cuXFxuNTI1NjpcXHRcXHQgKi9cXG41MjU3OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxcbjUyNTg6XFx0XFx0XFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbjUyNTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTI2MDpcXHRcXG41MjYxOlxcdFxcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxcbjUyNjI6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG41MjYzOlxcdFxcbjUyNjQ6XFx0b3V0OlxcbjUyNjU6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbjUyNjY6XFx0XFx0cmV0dXJuIHJldDtcXG41MjY3OlxcdH1cXG41MjY4OlxcdFxcbjUyNjk6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjI3LjAzNDA2OTYyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTY1MTMxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIFJldHJpZXZhbCBNZXRob2RzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBsb29raW5nIGF0IHRoZXNlIHR3byBmdW5jdGlvbnM6IGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWAgYW5kIGBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKWAuIFRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlIGJldHdlZW4gdGhlc2UgdHdvIG1ldGhvZHMgb2YgZmV0Y2hpbmcgdGhlIG1lbW9yeSBjZ3JvdXAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IEknZCBjaG9vc2Ugb25lIG92ZXIgdGhlIG90aGVyLlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpc3NlY3QgdGhlIGJlaGF2aW9yIG9mIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tYC4gSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBpdHMgZGVmaW5pdGlvbiwgdHJhY2UgaXRzIGltcGxlbWVudGF0aW9uLCBhbmQgZXNzZW50aWFsbHkgbWFwIG91dCBpdHMgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQncyAqZG9pbmcqIHVuZGVyIHRoZSBob29kIC0gd2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgYWNjZXNzaW5nLCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIG9yIGVkZ2UgY2FzZXMsIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQgZGlmZmVycyBpbiBpdHMgYXBwcm9hY2ggZnJvbSB0aGUgYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCBmdW5jdGlvbi4gVGhpcyBhbmFseXNpcyBpcyBjcml0aWNhbCB0byBlbnN1cmluZyBJIGFtIGNvcnJlY3RseSBpbnRlcnByZXRpbmcgYW5kIHVzaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGdpdmVuIGNvbnRleHQuIFRoaXMgaXMsIGFmdGVyIGFsbCwgdGhlIGZvdW5kYXRpb24gZm9yIG1ha2luZyBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgdGhlIHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTEzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OToyOS40NTA1ODUzNTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzk4MzUyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM9MTAwMT1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNneF9lbmNsX2dldF9tZW1fY2dyb3VwKHN0cnVjdCBzZ3hfZW5jbCAqZW5jbClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDEyLVxcdGlmICghY3VycmVudF9pc19rc2d4ZCgpKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYzoxMDEzOlxcdFxcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAxNC1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDI0LVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYzoxMDI1OlxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShlbmNsX21tLVxcdTAwM2VtbSk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwMjYtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA0MC1cXHRpZiAoIW1lbWNnKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYzoxMDQxOlxcdFxcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX21tKE5VTEwpO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDQyLVxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYz0xNTg5PVNZU0NBTExfREVGSU5FMihmYW5vdGlmeV9pbml0LCB1bnNpZ25lZCBpbnQsIGZsYWdzLCB1bnNpZ25lZCBpbnQsIGV2ZW50X2ZfZmxhZ3MpXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTE2ODQtXFx0Z3JvdXAtXFx1MDAzZWZhbm90aWZ5X2RhdGEuZmxhZ3MgPSBmbGFncyB8IGludGVybmFsX2ZsYWdzO1xcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM6MTY4NTpcXHRncm91cC1cXHUwMDNlbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTE2ODYtXFx0Z3JvdXAtXFx1MDAzZXVzZXJfbnMgPSBnZXRfdXNlcl9ucyh1c2VyX25zKTtcXG4tLVxcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jPTY0MT1zdGF0aWMgc3RydWN0IGZzbm90aWZ5X2dyb3VwICppbm90aWZ5X25ld19ncm91cCh1bnNpZ25lZCBpbnQgbWF4X2V2ZW50cylcXG4tLVxcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jLTY2My1cXHRncm91cC1cXHUwMDNlbWF4X2V2ZW50cyA9IG1heF9ldmVudHM7XFxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmM6NjY0OlxcdGdyb3VwLVxcdTAwM2VtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cXHUwMDNlbW0pO1xcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jLTY2NS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTc1NT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC03NTYtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NzU3OnN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC03NTgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMjA2PXN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMjExLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEyMTI6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMjEzLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMTM4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmFjdGl2ZV9tZW1jZyh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExNDYtLyoqXFxubW0vbWVtY29udHJvbC5jOjExNDc6ICogZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbTogT2J0YWluIGEgcmVmZXJlbmNlIG9uIGdpdmVuIG1tX3N0cnVjdCdzIG1lbWNnLlxcbm1tL21lbWNvbnRyb2wuYy0xMTQ4LSAqIEBtbTogbW0gZnJvbSB3aGljaCBtZW1jZyBzaG91bGQgYmUgZXh0cmFjdGVkLiBJdCBjYW4gYmUgTlVMTC5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTU2LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoxMTU3OnN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL21lbWNvbnRyb2wuYy0xMTU4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTkzLX1cXG5tbS9tZW1jb250cm9sLmM6MTE5NDpFWFBPUlRfU1lNQk9MKGdldF9tZW1fY2dyb3VwX2Zyb21fbW0pO1xcbm1tL21lbWNvbnRyb2wuYy0xMTk1LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTY0LVxcbm1tL21lbWNvbnRyb2wuYzoyNTY1OlxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVxcdTAwM2VtbSk7XFxubW0vbWVtY29udHJvbC5jLTI1NjYtXFx0Y3VycmVudC1cXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoID0gMDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjIxPWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIyNS1cXG5tbS9tZW1jb250cm9sLmM6NTIyNjpcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbm1tL21lbWNvbnRyb2wuYy01MjI3LVxcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI0Nj1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjQ4LXtcXG5tbS9tZW1jb250cm9sLmM6NTI0OTpcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS9tZW1jb250cm9sLmMtNTI1MC1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjgxPWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI5Mi1cXHRpZiAoIW1lbWNnIHx8ICFjc3NfdHJ5Z2V0X29ubGluZShcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcykpXFxubW0vbWVtY29udHJvbC5jOjUyOTM6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS9tZW1jb250cm9sLmMtNTI5NC1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5NDI9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDQtXFx0aW50IG5pZDtcXG5tbS92bXNjYW4uYzoyOTQ1OlxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbm1tL3Ztc2Nhbi5jLTI5NDYtXFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MzAuOTMwNDI5NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1MzM0NDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgZm9yIENvbnNpc3RlbmN5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBsb29raW5nIGF0IGBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApYC4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24sIHJpZ2h0IG9mZiB0aGUgYmF0LCBlZmZpY2llbnRseSB1c2VzIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWAuIFRoaXMgaXMgYSBnb29kIHNpZ24sIGEgY2xlYW4gZGVzaWduIGRlY2lzaW9uLiBJJ20gbm90aW5nIHRoaXMgc3BlY2lmaWNhbGx5IGJlY2F1c2UgSSd2ZSBiZWVuIGNvbXBhcmluZyBpdCB0byBob3cgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgICp1c2VkKiB0byBvcGVyYXRlLCBhbmQgSSBzZWUgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlLiBJdCB3YXMgcHJldmlvdXNseSB1c2luZyBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgLCB3aGljaCwgZnJhbmtseSwgc3RyaWtlcyBtZSBhcyBsZXNzIGVsZWdhbnQgaW4gdGhpcyBjb250ZXh0LCBlc3BlY2lhbGx5IHdoZW4gd2UgY29uc2lkZXIgdGhlIG5vdyBhdmFpbGFibGUgYG1tYCBhcmd1bWVudC5cblxuVGhlIGtleSBjaGFuZ2UsIGFuZCB3aGF0IEknbSBmb2N1c2luZyBvbiwgaXMgdGhhdCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgKm5vdyogdGFrZXMgYG1tYCBkaXJlY3RseSBhbmQgc3Vic2VxdWVudGx5IGNoYXJnZXMgYmFzZWQgb24gYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYC4gVGhpcyBzZWVtcyBsaWtlIGEgbW92ZSB0b3dhcmRzIGNvbnNpc3RlbmN5IGFuZCBsaWtlbHkgYSBiZXR0ZXIsIG1vcmUgYWNjdXJhdGUgbW9kZWwuIFRoZSBmYWN0IHRoYXQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gICphbHNvKiB0YWtlcyB0aGUgYG1tYCBzdHJ1Y3R1cmUgZnVydGhlciBzb2xpZGlmaWVzIG15IHRob3VnaHQgcHJvY2VzcyBhbmQgbWFrZXMgdGhpcyBhIHZlcnkgaW50ZXJlc3RpbmcgcmVmYWN0b3JpbmcsIGlmIHRoYXQgaXMgaW4gZmFjdCB0aGUgY2FzZS5cblxuTm93IEknbSB0aGlua2luZywgXCJBcmUgdGhlcmUgb3RoZXIgcGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgYXJlIHNpbWlsYXI/IE1heWJlIHNvbWUgdGhhdCBoYXZlIG5vdCBiZWVuIG1vZGlmaWVkIHlldD9cIiBUbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGltcHJvdmVtZW50LCBJIG5lZWQgYSBicm9hZGVyIHZpZXcuIEknbSBnb2luZyB0byBzY2FuIHRoZSBjb2RlYmFzZSBmb3IgYWxsIGluc3RhbmNlcyBvZiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuIExldCdzIHNlZSB3aGF0IHR1cm5zIHVwIGluIHRoZSBncmVwLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSBiZWZvcmUtYW5kLWFmdGVyIGFuZCBhbnkgZnVydGhlciBwb3RlbnRpYWwgb3Bwb3J0dW5pdGllcyBmb3IgdGhpcyB0eXBlIG9mIGNsZWFuLXVwIGFuZCBjb2RlIGltcHJvdmVtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjM0LjI4Mzc3NjgxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NjM1MjgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTgxPWFyZSBhbGxvY2F0ZWQgYW5kIGluc3RhbnRpYXRlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBtYXBwaW5nLiAgVGhlIGFsbG9jYXRpb25cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4MjppcyBwZXJmb3JtZWQgd2l0aGluIHRoZSByb3V0aW5lIGFsbG9jX2h1Z2V0bGJfZm9saW8oKTo6XFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODMtXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODQ6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg1LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgYXZvaWRfcmVzZXJ2ZSlcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4Ni1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4NzphbGxvY19odWdldGxiX2ZvbGlvIGlzIHBhc3NlZCBhIFZNQSBwb2ludGVyIGFuZCBhIHZpcnR1YWwgYWRkcmVzcywgc28gaXQgY2FuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODgtY29uc3VsdCB0aGUgcmVzZXJ2YXRpb24gbWFwIHRvIGRldGVybWluZSBpZiBhIHJlc2VydmF0aW9uIGV4aXN0cy4gIEluIGFkZGl0aW9uLFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg5OmFsbG9jX2h1Z2V0bGJfZm9saW8gdGFrZXMgdGhlIGFyZ3VtZW50IGF2b2lkX3Jlc2VydmUgd2hpY2ggaW5kaWNhdGVzIHJlc2VydmVzXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xOTAtc2hvdWxkIG5vdCBiZSB1c2VkIGV2ZW4gaWYgaXQgYXBwZWFycyB0aGV5IGhhdmUgYmVlbiBzZXQgYXNpZGUgZm9yIHRoZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0yMDc9aXMgY2FsbGVkLiAgVGhpcyByb3V0aW5lIHRha2VzIHR3byBhcmd1bWVudHMgcmVsYXRlZCB0byByZXNlcnZhdGlvbnM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwOS0tIGF2b2lkX3Jlc2VydmUsIHRoaXMgaXMgdGhlIHNhbWUgdmFsdWUvYXJndW1lbnQgcGFzc2VkIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMTA6ICBhbGxvY19odWdldGxiX2ZvbGlvKCkuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMTEtLSBjaGcsIGV2ZW4gdGhvdWdoIHRoaXMgYXJndW1lbnQgaXMgb2YgdHlwZSBsb25nIG9ubHkgdGhlIHZhbHVlcyAwIG9yIDEgYXJlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTI0Nz1JdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSByZXNlcnZlIG1hcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRoZSBjYWxsXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyNDg6dG8gdm1hX25lZWRzX3Jlc2VydmF0aW9uKCkgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGxvY19odWdldGxiX2ZvbGlvKCkgYW5kIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ5LWNhbGwgdG8gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigpIGFmdGVyIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLiAgVGhpcyB3b3VsZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTE2PUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDY65b2T5LiO6aKE55WZ55u45YWz55qE5beo6aG15Zyo55u45bqU55qE5pig5bCE5Lit6KKr5YiG6YWN5ZKM5a6e5L6L5YyW5pe277yM6aKE55WZ5bCx6KKr5raI6ICX5LqG44CC6K+l5YiG6YWN5piv5Zyo5Ye95pWwYWxsb2NfaHVnZXRsYl9mb2xpby4uLlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0Ny3kuK3ov5vooYznmoQ6OlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0OC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDk6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1MC1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGF2b2lkX3Jlc2VydmUpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTUxLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MjphbGxvY19odWdldGxiX2ZvbGlv6KKr5Lyg6YCS57uZ5LiA5LiqVk1B5oyH6ZKI5ZKM5LiA5Liq6Jma5ouf5Zyw5Z2A77yM5Zug5q2k5a6D5Y+v5Lul5p+l6ZiF6aKE55WZ5pig5bCE5Lul56Gu5a6a5piv5ZCm5a2Y5Zyo6aKE55WZ44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTUzOuatpOWklu+8jGFsbG9jX2h1Z2V0bGJfZm9saW/pnIDopoHkuIDkuKrlj4LmlbBhdm9pZF9yZXNlcnZl77yM6K+l5Y+C5pWw6KGo56S65Y2z5L2/55yL6LW35p2l5bey57uP5Li65oyH5a6a55qE5Zyw5Z2A6aKE55WZ5LqGXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTU0LemihOeVme+8jOS5n+S4jeW6lOivpeS9v+eUqOmihOeVmeOAgmF2b2lkX3Jlc2VydmXlj4LmlbDmnIDluLjooqvnlKjkuo7lhpnml7bmi7fotJ3lkozpobXpnaLov4Hnp7vnmoTmg4XlhrXkuIvvvIzljbPnjrDmnInpobXpnaLnmoTpop1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE2MD12bWFfbmVlZHNfcmVzZXJ2YXRpb24oKei/lOWbnueahOWAvOmAmuW4uOS4ujDmiJYx44CC5aaC5p6c6K+l5Zyw5Z2A5a2Y5Zyo6aKE55WZ77yM5YiZ5Li6MO+8jOWmguaenOS4jeWtmOWcqOmihOeVme+8jOWImeS4ujHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNjY6LSBhdm9pZF9yZXNlcnZl77yM6L+Z5piv5Lyg6YCS57uZYWxsb2NfaHVnZXRsYl9mb2xpbygp55qE5ZCM5LiA5Liq5YC8L+WPguaVsOOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2Ny0tIGNoZ++8jOWwveeuoei/meS4quWPguaVsOeahOexu+Wei+aYr2xvbmfvvIzkvYblj6rmnIkw5oiWMeeahOWAvOiiq+S8oOmAkue7mWRlcXVldWVfaHVnZV9wYWdlX3ZtYeOAguWmguaenOivpeWAvOS4ujDvvIxcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE5Mz1TZXRQYWdlUHJpdmF0ZShwYWdlKeWSjHJlc3ZfaHVnZV9wYWdlcy3jgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwMi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMDM65ZyoYWxsb2NfaHVnZXRsYl9mb2xpbygp5byA5aeL6LCD55Sodm1hX25lZWRzX3Jlc2VydmF0aW9uKCnlkozpobXpnaLliIbphY3lkI7osIPnlKhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDQtdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigp5LmL6Ze077yM6aKE55WZ5pig5bCE5pyJ5Y+v6IO96KKr5pS55Y+Y44CC5aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2Vz5Zyo5YWxXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz03MDA9c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTItXFx0XFx0ICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzkzOlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhcXHUwMDI2cHNldWRvX3ZtYSwgYWRkciwgZmFsc2UpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5NC1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODEzLVxcdFxcdCAqIGZvbGlvX3VubG9jayBiZWNhdXNlIGxvY2tlZCBieSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MTQ6XFx0XFx0ICogZm9saW9fcHV0KCkgZHVlIHRvIHJlZmVyZW5jZSBmcm9tIGFsbG9jX2h1Z2V0bGJfZm9saW8oKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgxNS1cXHRcXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwMT1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMy1cXHRcXHR1OCBhbGxvY19mbGFncyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA0OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDUtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDY6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNy1cXHRcXHRcXHRcXHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA4LVxcdFxcdFxcdFxcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwOTpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MTAtXFx0XFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEyMz1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMjYtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTI4LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExMzQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzU6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMzYtXFx0XFx0XFx0ICAgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExNDE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExNDI6YWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTQzLVxcdFxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNjUtXFxubW0vaHVnZXRsYi5jOjIxNjY6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxNjctXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIxODYtLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXFxubW0vaHVnZXRsYi5jOjIxODc6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL2h1Z2V0bGIuYy0yMTg4LVxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaywgYm9vbCBhbGxvd19hbGxvY19mYWxsYmFjaylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTIwPXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTI3LSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzdG9yZSByZXNlcnZhdGlvbiBpbmZvcm1hdGlvbiBvbiBlcnJvciBwYXRocy5cXG5tbS9odWdldGxiLmM6MjUyODogKiBJdCBzaG91bGQgT05MWSBiZSBjYWxsZWQgZm9yIGZvbGlvcyBhbGxvY2F0ZWQgdmlhIGFsbG9jX2h1Z2V0bGJfZm9saW8oKSxcXG5tbS9odWdldGxiLmMtMjUyOS0gKiBhbmQgdGhlIGh1Z2V0bGIgbXV0ZXggc2hvdWxkIHJlbWFpbiBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIHJvdXRpbmUuXFxuLS1cXG5tbS9odWdldGxiLmMtMjUzNC0gKiAyKSBObyByZXNlcnZhdGlvbiB3YXMgaW4gcGxhY2UgZm9yIHRoZSBwYWdlLCBzbyBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBpc1xcbm1tL2h1Z2V0bGIuYzoyNTM1OiAqICAgIG5vdCBzZXQuICBIb3dldmVyLCBhbGxvY19odWdldGxiX2ZvbGlvIGFsd2F5cyB1cGRhdGVzIHRoZSByZXNlcnZlIG1hcC5cXG5tbS9odWdldGxiLmMtMjUzNi0gKlxcbi0tXFxubW0vaHVnZXRsYi5jLTI1NDMtICpcXG5tbS9odWdldGxiLmM6MjU0NDogKiBJbiBjYXNlIDIsIHNpbXBseSB1bmRvIHJlc2VydmUgbWFwIG1vZGlmaWNhdGlvbnMgZG9uZSBieSBhbGxvY19odWdldGxiX2ZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yNTQ1LSAqL1xcbm1tL2h1Z2V0bGIuYz0yNTQ2PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1NzItXFx0XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgdGhlcmUgaXMgYW4gZW50cnkgaW4gdGhlIHJlc2VydmUgbWFwXFxubW0vaHVnZXRsYi5jOjI1NzM6XFx0XFx0XFx0ICogbm90IGFkZGVkIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uICBXZSBrbm93IGl0IHdhcyBhZGRlZFxcbm1tL2h1Z2V0bGIuYzoyNTc0OlxcdFxcdFxcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2VcXG5tbS9odWdldGxiLmMtMjU3NS1cXHRcXHRcXHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxcbi0tXFxubW0vaHVnZXRsYi5jPTI5MTY9dHlwZWRlZiBlbnVtIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yOTQxLSAqL1xcbm1tL2h1Z2V0bGIuYzoyOTQyOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtMjk0My1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ4ODc9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUwMDgtXFx0XFx0XFx0XFx0LyogRG8gbm90IHVzZSByZXNlcnZlIGFzIGl0J3MgcHJpdmF0ZSBvd25lZCAqL1xcbm1tL2h1Z2V0bGIuYzo1MDA5OlxcdFxcdFxcdFxcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy01MDEwLVxcdFxcdFxcdFxcdGlmIChJU19FUlIobmV3X2ZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTU0ODA9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NTYxLVxcdHNwaW5fdW5sb2NrKHZtZi1cXHUwMDNlcHRsKTtcXG5tbS9odWdldGxiLmM6NTU2MjpcXHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzLCBjb3dfZnJvbV9vd25lcik7XFxubW0vaHVnZXRsYi5jLTU1NjMtXFxuLS1cXG5tbS9odWdldGxiLmM9NTc1Mj1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTgyMS1cXG5tbS9odWdldGxiLmM6NTgyMjpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNTgyMy1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTYwMDI9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjM3LSAqL1xcbm1tL2h1Z2V0bGIuYzo2MjM4OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTYyMzktXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjU0LVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2MjU1OlxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBub2RlLCBub2RlbWFzaywgZ2ZwX21hc2ssIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjI1Ni1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTYyNjU9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzIxLVxcbm1tL2h1Z2V0bGIuYzo2MzIyOlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy02MzIzLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM0Ny1cXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NjM0ODpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKGgsIGRzdF92bWEsIGRzdF9hZGRyKTtcXG5tbS9odWdldGxiLmMtNjM0OS1cXHRcXHRcXHRpZiAoIWZvbGlvKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM2OC1cXG5tbS9odWdldGxiLmM6NjM2OTpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjM3MC1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTY2NjI9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NzgyLVxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxubW0vaHVnZXRsYi5jOjY3ODM6XFx0XFx0XFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcXG5tbS9odWdldGxiLmMtNjc4NC1cXHRcXHRcXHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy05My1cXG5tbS9tZW1mZC5jOjk0OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXFxubW0vbWVtZmQuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE0NTYtXFx0XFx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIGlseCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6MTQ1NzpcXHRcXHRyZXR1cm4gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBuaWQsIG5vZGVtYXNrLCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMTQ1OC1cXHRcXHRcXHRcXHRodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKE1SX01FTVBPTElDWV9NQklORCkpO1xcbi0tXFxubW0vbWlncmF0ZS5jPTIxOTc9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjIxNC1cXHRcXHRnZnBfbWFzayA9IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soaCwgZ2ZwX21hc2spO1xcbm1tL21pZ3JhdGUuYzoyMjE1OlxcdFxcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCxcXG5tbS9taWdyYXRlLmMtMjIxNi1cXHRcXHRcXHRcXHRcXHRcXHRtdGMtXFx1MDAzZW5tYXNrLCBnZnBfbWFzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MzUuNzgwMTM0ODI3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0ODcxNzQxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGh1Z2V0bGJmc19mYWxsb2NhdGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGh1Z2V0bGJmc19mYWxsb2NhdGVgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBzbyBJJ2xsIHplcm8gaW4gb24gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gU3BlY2lmaWNhbGx5LCBsZXQncyBncmFiIGxpbmVzIDc3MCB0aHJvdWdoIDgwNS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY2h1bmsgb2YgY29udGV4dCBhcm91bmQgaXRzIGNvcmUgbG9naWMuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBwcmUtYWxsb2NhdGluZyBzcGFjZSB3aXRoaW4gdGhlIGh1Z2UgcGFnZSBmaWxlIHN5c3RlbSDigJMgcGFydGljdWxhcmx5IHdoZXJlIGl0IGhhbmRsZXMgYmxvY2sgYWxsb2NhdGlvbiBhbmQgcG90ZW50aWFsIGVycm9yIHNjZW5hcmlvcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbiBtZWNoYW5pc21zIGFuZCBpZiB0aGVyZSdzIGFueSBjbGV2ZXJuZXNzIGluIGhvdyBpdCBhZGRyZXNzZXMgZnJhZ21lbnRhdGlvbiBpc3N1ZXMuIExldCdzIHNlZSBpZiB0aGlzIHNlY3Rpb24gcmV2ZWFscyB0aGUga2V5IG9wZXJhdGlvbmFsIHBhdHRlcm5zIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZmFpbHVyZXMgZWxlZ2FudGx5LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZXNlIGxhcmdlIHBhZ2VzLiBJIGFudGljaXBhdGUgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBpdHMgcHVycG9zZSBmcm9tIHRoaXMgc2VnbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OTozOC4yNjczMTE4OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXHRcXHQvKiBhZGRyIGlzIHRoZSBvZmZzZXQgd2l0aGluIHRoZSBmaWxlICh6ZXJvIGJhc2VkKSAqL1xcbiA3NzE6XFx0XFx0XFx0YWRkciA9IGluZGV4ICogaHBhZ2Vfc2l6ZTtcXG4gNzcyOlxcdFxcbiA3NzM6XFx0XFx0XFx0LyogbXV0ZXggdGFrZW4gaGVyZSwgZmF1bHQgcGF0aCBhbmQgaG9sZSBwdW5jaCAqL1xcbiA3NzQ6XFx0XFx0XFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtYXBwaW5nLCBpbmRleCk7XFxuIDc3NTpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0XFx0LyogU2VlIGlmIGFscmVhZHkgcHJlc2VudCBpbiBtYXBwaW5nIHRvIGF2b2lkIGFsbG9jL2ZyZWUgKi9cXG4gNzc4OlxcdFxcdFxcdGZvbGlvID0gZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXggXFx1MDAzY1xcdTAwM2MgaHVnZV9wYWdlX29yZGVyKGgpKTtcXG4gNzc5OlxcdFxcdFxcdGlmICghSVNfRVJSKGZvbGlvKSkge1xcbiA3ODA6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gNzgxOlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XFxuIDc4MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzgzOlxcdFxcdFxcdH1cXG4gNzg0OlxcdFxcbiA3ODU6XFx0XFx0XFx0LypcXG4gNzg2OlxcdFxcdFxcdCAqIEFsbG9jYXRlIGZvbGlvIHdpdGhvdXQgc2V0dGluZyB0aGUgYXZvaWRfcmVzZXJ2ZSBhcmd1bWVudC5cXG4gNzg3OlxcdFxcdFxcdCAqIFRoZXJlIGNlcnRhaW5seSBhcmUgbm8gcmVzZXJ2ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZVxcbiA3ODg6XFx0XFx0XFx0ICogcHNldWRvX3ZtYS4gIEhvd2V2ZXIsIHRoZXJlIGNvdWxkIGJlIHNoYXJlZCBtYXBwaW5ncyB3aXRoXFxuIDc4OTpcXHRcXHRcXHQgKiByZXNlcnZlcyBmb3IgdGhlIGZpbGUgYXQgdGhlIGlub2RlIGxldmVsLiAgSWYgd2UgZmFsbG9jYXRlXFxuIDc5MDpcXHRcXHRcXHQgKiBmb2xpb3MgaW4gdGhlc2UgYXJlYXMsIHdlIG5lZWQgdG8gY29uc3VtZSB0aGUgcmVzZXJ2ZXNcXG4gNzkxOlxcdFxcdFxcdCAqIHRvIGtlZXAgcmVzZXJ2YXRpb24gYWNjb3VudGluZyBjb25zaXN0ZW50LlxcbiA3OTI6XFx0XFx0XFx0ICovXFxuIDc5MzpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oXFx1MDAyNnBzZXVkb192bWEsIGFkZHIsIGZhbHNlKTtcXG4gNzk0OlxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuIDc5NTpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbiA3OTY6XFx0XFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKGZvbGlvKTtcXG4gNzk3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3OTg6XFx0XFx0XFx0fVxcbiA3OTk6XFx0XFx0XFx0Zm9saW9femVyb191c2VyKGZvbGlvLCBhZGRyKTtcXG4gODAwOlxcdFxcdFxcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuIDgwMTpcXHRcXHRcXHRlcnJvciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sIG1hcHBpbmcsIGluZGV4KTtcXG4gODAyOlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnJvcikpIHtcXG4gODAzOlxcdFxcdFxcdFxcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBcXHUwMDI2cHNldWRvX3ZtYSwgYWRkciwgZm9saW8pO1xcbiA4MDQ6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gODA1OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XFxuIDgwNjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gODA3OlxcdFxcdFxcdH1cXG4gODA4OlxcdFxcbiA4MDk6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MzguMjY3NDE4ODAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzc2MTM3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gaHVnZXRsYmZzIGFuZCBmYWxsb2NhdGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBgaHVnZXRsYmZzYCBjb2RlIGFnYWluLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmYWxsb2NhdGVgLiBJIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGEgYHBzZXVkb192bWFgIHdpdGhpbiBgaHVnZXRsYmZzX2ZhbGxvY2F0ZWAgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zLiBUaW1lIHRvIHplcm8gaW4gb24gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgdGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgcHNldWRvX3ZtYWAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgcm9sZSBpdCBwbGF5cyBpbiB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLiBMZXQncyBqdW1wIHRvIGxpbmVzIDcyMC03NzAgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgaXMgdGVsbGluZyBtZSBkaXJlY3RseS4gSSdtIGV4cGVjdGluZyBzb21lIGludGVyZXN0aW5nIGluaXRpYWxpemF0aW9uIGxvZ2ljIGhlcmUsIGFuZCBob3BlZnVsbHksIGl0J2xsIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgdGVjaG5pcXVlcyB0aGF0IGBodWdldGxiZnNgIHVzZXMgZHVyaW5nIGBmYWxsb2NhdGVgLiBJJ20gcmVhZHkgdG8gcGFyc2UgdGhlIHNwZWNpZmljcyBhbmQgc3RhcnQgcGllY2luZyB0b2dldGhlciB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzOTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjQwLjM0NTAzNDkyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzIwOlxcdFxcdFxcdGdvdG8gb3V0X25vbG9jaztcXG4gNzIxOlxcdFxcdH1cXG4gNzIyOlxcdFxcbiA3MjM6XFx0XFx0LypcXG4gNzI0OlxcdFxcdCAqIERlZmF1bHQgcHJlYWxsb2NhdGUgY2FzZS5cXG4gNzI1OlxcdFxcdCAqIEZvciB0aGlzIHJhbmdlLCBzdGFydCBpcyByb3VuZGVkIGRvd24gYW5kIGVuZCBpcyByb3VuZGVkIHVwXFxuIDcyNjpcXHRcXHQgKiBhcyB3ZWxsIGFzIGJlaW5nIGNvbnZlcnRlZCB0byBwYWdlIG9mZnNldHMuXFxuIDcyNzpcXHRcXHQgKi9cXG4gNzI4OlxcdFxcdHN0YXJ0ID0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIGhwYWdlX3NoaWZ0O1xcbiA3Mjk6XFx0XFx0ZW5kID0gKG9mZnNldCArIGxlbiArIGhwYWdlX3NpemUgLSAxKSBcXHUwMDNlXFx1MDAzZSBocGFnZV9zaGlmdDtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuIDczMjpcXHRcXG4gNzMzOlxcdFxcdC8qIFdlIG5lZWQgdG8gY2hlY2sgcmxpbWl0IGV2ZW4gd2hlbiBGQUxMT0NfRkxfS0VFUF9TSVpFICovXFxuIDczNDpcXHRcXHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIG9mZnNldCArIGxlbik7XFxuIDczNTpcXHRcXHRpZiAoZXJyb3IpXFxuIDczNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzM3OlxcdFxcbiA3Mzg6XFx0XFx0aWYgKChpbmZvLVxcdTAwM2VzZWFscyBcXHUwMDI2IEZfU0VBTF9HUk9XKSBcXHUwMDI2XFx1MDAyNiBvZmZzZXQgKyBsZW4gXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuIDczOTpcXHRcXHRcXHRlcnJvciA9IC1FUEVSTTtcXG4gNzQwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NDE6XFx0XFx0fVxcbiA3NDI6XFx0XFxuIDc0MzpcXHRcXHQvKlxcbiA3NDQ6XFx0XFx0ICogSW5pdGlhbGl6ZSBhIHBzZXVkbyB2bWEgYXMgdGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaHVnZSBwYWdlXFxuIDc0NTpcXHRcXHQgKiBhbGxvY2F0aW9uIHJvdXRpbmVzLlxcbiA3NDY6XFx0XFx0ICovXFxuIDc0NzpcXHRcXHR2bWFfaW5pdChcXHUwMDI2cHNldWRvX3ZtYSwgbW0pO1xcbiA3NDg6XFx0XFx0dm1fZmxhZ3NfaW5pdChcXHUwMDI2cHNldWRvX3ZtYSwgVk1fSFVHRVRMQiB8IFZNX01BWVNIQVJFIHwgVk1fU0hBUkVEKTtcXG4gNzQ5OlxcdFxcdHBzZXVkb192bWEudm1fZmlsZSA9IGZpbGU7XFxuIDc1MDpcXHRcXG4gNzUxOlxcdFxcdGZvciAoaW5kZXggPSBzdGFydDsgaW5kZXggXFx1MDAzYyBlbmQ7IGluZGV4KyspIHtcXG4gNzUyOlxcdFxcdFxcdC8qXFxuIDc1MzpcXHRcXHRcXHQgKiBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSB2YWRkciB3aGVyZSB0aGUgcGFnZSBpcyBiZWluZ1xcbiA3NTQ6XFx0XFx0XFx0ICogZmF1bHRlZCBpbiwgYnV0IHdlIGhhdmUgbm8gdmFkZHIgaGVyZS5cXG4gNzU1OlxcdFxcdFxcdCAqL1xcbiA3NTY6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gNzU3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gNzU4OlxcdFxcbiA3NTk6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjQwLjM0NTE0NDQ0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDkxNDk2MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gSHVnZXRsYmZzIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBodWdldGxiZnNfZmFsbG9jYXRlYCBhbmQgdGhlIGNhbGwgdG8gYHZtYV9pbml0KFx1MDAyNnBzZXVkb192bWEsIG1tKWAuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYG1tYCBpbiB0aGF0IGNvbnRleHQgaXMgYGN1cnJlbnQtXHUwMDNlbW1gLCBhbmQgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgcXVlc3Rpb25zIGluIG15IG1pbmQuIFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgY2FsbGluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIHdoYXQgdmlydHVhbCBtZW1vcnkgYXJlYXMgKFZNQXMpIGFyZSBwYXNzZWQ/IExldCdzIGRpZyBpbnRvIGBtbS9odWdldGxiLmNgLlxuXG5SaWdodCwgbGV0J3Mgc2VlLCBgY29weV9odWdldGxiX3BhZ2VfcmFuZ2VgIGR1cmluZyBhIGZvcmsgcGFzc2VzIGBkc3Rfdm1hYCDigJMgbWVhbmluZyBgdm1hLVx1MDAzZXZtX21tYCBpcyB0aGUgZGVzdGluYXRpb24gbWVtb3J5IG1hcCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gd2UndmUgZ290IGBodWdldGxiX3dwYCBkdXJpbmcgYSB3cml0ZSBmYXVsdCwgd2hpY2ggcGFzc2VzIGEgYHZtYWAsIHNvIGFnYWluLCBgdm1hLVx1MDAzZXZtX21tYCBpcyByZWxldmFudC4gYGh1Z2V0bGJfbm9fcGFnZWAgZHVyaW5nIGEgZmF1bHQgYWxzbyB0YWtlcyBhIGB2bWFgLCBzYW1lIHNpdHVhdGlvbi4gYGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZWAgaXMgdHJpZ2dlcmVkIGJ5IHVzZXJmYXVsdGZkIGFuZCBwYXNzZXMgYGRzdF92bWFgLCBhbmQgZmluYWxseSwgdGhlIG9yaWdpbmFsIGBodWdldGxiZnNfZmFsbG9jYXRlYCBjYWxsLCB1c2luZyBgXHUwMDI2cHNldWRvX3ZtYWAsIHdob3NlIGB2bV9tbWAgaXMgYGN1cnJlbnQtXHUwMDNlbW1gLiBUaGF0J3MgYSBnb29kIG92ZXJ2aWV3LlxuXG5Ob3csIG15IGZvY3VzIHNoaWZ0cy4gR2l2ZW4gdGhlc2UgZGlmZmVyZW50IGNvbnRleHRzIGFuZCB0aGUgY3J1Y2lhbCByb2xlIG9mIHRoZSBtZW1vcnkgbWFwIChgbW1gKSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBnZXRfbWVtX2Nncm91cF9mcm9tX21tYCBoYW5kbGVzIGBOVUxMYCBvciBub24tYE5VTExgIG1lbW9yeSBtYXBzLiBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIG1lbW9yeSBjb250cm9sIGdyb3Vwcz8gTGV0J3MgZ28gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW1gIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyOTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OTo0My44MzY2NDM4NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdCAqIE9idGFpbiBhIHJlZmVyZW5jZSBvbiBtbS1cXHUwMDNlbWVtY2cgYW5kIHJldHVybnMgaXQgaWYgc3VjY2Vzc2Z1bC4gSWYgbW1cXG4xMTUxOlxcdCAqIGlzIE5VTEwsIHRoZW4gdGhlIG1lbWNnIGlzIGNob3NlbiBhcyBmb2xsb3dzOlxcbjExNTI6XFx0ICogMSkgVGhlIGFjdGl2ZSBtZW1jZywgaWYgc2V0LlxcbjExNTM6XFx0ICogMikgY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZW1lbWNnLCBpZiBhdmFpbGFibGVcXG4xMTU0OlxcdCAqIDMpIHJvb3QgbWVtY2dcXG4xMTU1OlxcdCAqIElmIG1lbV9jZ3JvdXAgaXMgZGlzYWJsZWQsIE5VTEwgaXMgcmV0dXJuZWQuXFxuMTE1NjpcXHQgKi9cXG4xMTU3OlxcdHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbjExNTg6XFx0e1xcbjExNTk6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjExNjA6XFx0XFxuMTE2MTpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbjExNjI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTE2MzpcXHRcXG4xMTY0OlxcdFxcdC8qXFxuMTE2NTpcXHRcXHQgKiBQYWdlIGNhY2hlIGluc2VydGlvbnMgY2FuIGhhcHBlbiB3aXRob3V0IGFuXFxuMTE2NjpcXHRcXHQgKiBhY3R1YWwgbW0gY29udGV4dCwgZS5nLiBkdXJpbmcgZGlzayBwcm9iaW5nXFxuMTE2NzpcXHRcXHQgKiBvbiBib290LCBsb29wYmFjayBJTywgYWNjdCgpIHdyaXRlcyBldGMuXFxuMTE2ODpcXHRcXHQgKlxcbjExNjk6XFx0XFx0ICogTm8gbmVlZCB0byBjc3NfZ2V0IG9uIHJvb3QgbWVtY2cgYXMgdGhlIHJlZmVyZW5jZVxcbjExNzA6XFx0XFx0ICogY291bnRpbmcgaXMgZGlzYWJsZWQgb24gdGhlIHJvb3QgbGV2ZWwgaW4gdGhlXFxuMTE3MTpcXHRcXHQgKiBjZ3JvdXAgY29yZS4gU2VlIENTU19OT19SRUYuXFxuMTE3MjpcXHRcXHQgKi9cXG4xMTczOlxcdFxcdGlmICh1bmxpa2VseSghbW0pKSB7XFxuMTE3NDpcXHRcXHRcXHRtZW1jZyA9IGFjdGl2ZV9tZW1jZygpO1xcbjExNzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KG1lbWNnKSkge1xcbjExNzY6XFx0XFx0XFx0XFx0LyogcmVtb3RlIG1lbWNnIG11c3QgaG9sZCBhIHJlZiAqL1xcbjExNzc6XFx0XFx0XFx0XFx0Y3NzX2dldChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuMTE3ODpcXHRcXHRcXHRcXHRyZXR1cm4gbWVtY2c7XFxuMTE3OTpcXHRcXHRcXHR9XFxuMTE4MDpcXHRcXHRcXHRtbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbjExODE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFtbSkpXFxuMTE4MjpcXHRcXHRcXHRcXHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xcbjExODM6XFx0XFx0fVxcbjExODQ6XFx0XFxuMTE4NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTE4NjpcXHRcXHRkbyB7XFxuMTE4NzpcXHRcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV90YXNrKHJjdV9kZXJlZmVyZW5jZShtbS1cXHUwMDNlb3duZXIpKTtcXG4xMTg4OlxcdFxcdFxcdGlmICh1bmxpa2VseSghbWVtY2cpKVxcbjExODk6XFx0XFx0XFx0XFx0bWVtY2cgPSByb290X21lbV9jZ3JvdXA7XFxuMTE5MDpcXHRcXHR9IHdoaWxlICghY3NzX3RyeWdldChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcykpO1xcbjExOTE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTE5MjpcXHRcXHRyZXR1cm4gbWVtY2c7XFxuMTE5MzpcXHR9XFxuMTE5NDpcXHRFWFBPUlRfU1lNQk9MKGdldF9tZW1fY2dyb3VwX2Zyb21fbW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OTo0My44MzY5OTAwODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE0MzU3MzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gVGhlIGtleSBpc3N1ZSBhcHBlYXJzIHRvIGJlIGluY29ycmVjdCBhY2NvdW50aW5nIGluIGh1Z2UgcGFnZSBtZW1vcnkgY2hhcmdpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBQcmV2aW91c2x5LCB0aGlzIGZ1bmN0aW9uIHdhcyB0aWVkIHRvIHRoZSBgY3VycmVudGAgdGFzaywgd2hpY2ggd29ya3MgZmluZSBpbiBtYW55IGNhc2VzLiBIb3dldmVyLCBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZWAgd2l0aGluIGEgZm9yayAoYGR1cF9tbWFwYCkgb3Igd2l0aCB1c2VyZmF1bHRmZCwgdGhlIGFsbG9jYXRpb24gaXMgZm9yIGEgKmRpZmZlcmVudCogbWVtb3J5IHNwYWNlIChjaGlsZCBwcm9jZXNzIG9yIHVzZXIgc3BhY2UpLCBub3QgdGhlIG9yaWdpbmFsIGBjdXJyZW50YCB0YXNrLiBTbyBjaGFyZ2luZyB0aGUgYGN1cnJlbnRgIHRhc2sgaXMgbG9naWNhbGx5IHdyb25nLiBUaGUgcGF0Y2ggc2hpZnRzIHRoZSBjaGFyZ2luZyByZXNwb25zaWJpbGl0eSB0byB0aGUgbWVtb3J5IG1hcCAoYG1tYCkgb3duZXIsIHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2UsIGFsaWduaW5nIHdpdGggdGhlIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCBmdW5jdGlvbi4gVGhpcyBjb3JyZWN0cyB0aGUgb3duZXIgb2YgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiB3aXRoIHRoZSBtZW1vcnkgc3BhY2UgdGhhdCdzIHVzaW5nIHRoZSBodWdlIHBhZ2UsIGFuZCBub3QgdGhlIHRhc2sgcGVyZm9ybWluZyB0aGUgaW5pdGlhbCBzeXN0ZW0gY2FsbC5cblxuTm93LCBzaG91bGQgd2UgYm90aGVyIGZ1enppbmcgdGhpcz8gQWJzb2x1dGVseSEgVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAtIGBtbS9odWdldGxiLmNgIGFuZCBgbW0vbWVtY29udHJvbC5jYCAtIGFuZCBtb2RpZmllcyByZWFjaGFibGUgY29kZS4gSHVnZSBwYWdlIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIGFyZSBzdGFuZGFyZCwgZWFzaWx5IHRyaWdnZXJlZCB3aXRoaW4gc3RhbmRhcmQgVk0vUUVNVSBrZXJuZWwgZnV6emluZyBlbnZpcm9ubWVudHMuIERlZmluaXRlbHkgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUuXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgc3ltYm9scyB0byB0YXJnZXQgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgc2VhcmNoIGZvciByZWxldmFudCBvcHRpb25zIHJlbGF0ZWQgdG8gYGh1Z2V0bGJgLCBgbWVtY29udHJvbGAsIGFuZCBhbnkgY29uZmlndXJhdGlvbnMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY2dyb3VwIGh1Z2UgcGFnZSBjaGFyZ2luZy4gVGhpcyB3aWxsIGhlbHAgcmVmaW5lIHRoZSBmdXp6aW5nIHRhcmdldCBhbmQgZm9jdXMgb24gdGhlIGltcG9ydGFudCBjb2RlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjQ3Ljk4MDU2NjA4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MDE4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NDcwPWNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcXG4tLVxcbm1tL0tjb25maWctNDcyLVxcbm1tL0tjb25maWc6NDczOmNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXFxubW0vS2NvbmZpZy00NzQtXFx0Ym9vbFxcbm1tL0tjb25maWctNDc1LVxcbm1tL0tjb25maWc6NDc2OmNvbmZpZyBBUkNIX1dBTlRfSFVHRVRMQl9WTUVNTUFQX1BSRUlOSVRcXG5tbS9LY29uZmlnLTQ3Ny1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTY5ND1jb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG4tLVxcbm1tL0tjb25maWctNjk2LVxcbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNjk4LVxcdGRlZl9ib29sIG5cXG4tLVxcbm1tL0tjb25maWctNzAwLVxcdCAgQWxsb3dzIHRoZSBwYWdlYmxvY2tfb3JkZXIgdmFsdWUgdG8gYmUgZHluYW1pYyBpbnN0ZWFkIG9mIGp1c3Qgc3RhbmRhcmRcXG5tbS9LY29uZmlnOjcwMTpcXHQgIEhVR0VUTEJfUEFHRV9PUkRFUiB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBIdWdlVExCIHBhZ2Ugc2l6ZXMgYXZhaWxhYmxlXFxubW0vS2NvbmZpZy03MDItXFx0ICBvbiBhIHBsYXRmb3JtLlxcbi0tXFxubW0vS2NvbmZpZz03ODI9Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1NcXG4tLVxcbm1tL0tjb25maWctODA5LVxcbm1tL0tjb25maWc6ODEwOmNvbmZpZyBBUkNIX1dBTlRfR0VORVJBTF9IVUdFVExCXFxubW0vS2NvbmZpZy04MTEtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz0xMDAzPWNvbmZpZyBQR1RBQkxFX0hBU19IVUdFX0xFQVZFU1xcbm1tL0tjb25maWc6MTAwNDpcXHRkZWZfYm9vbCBUUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBIVUdFVExCX1BBR0VcXG5tbS9LY29uZmlnLTEwMDUtXFxuLS1cXG5tbS9LY29uZmlnPTEwMDk9Y29uZmlnIEhBVkVfR0lHQU5USUNfRk9MSU9TXFxubW0vS2NvbmZpZzoxMDEwOlxcdGRlZl9ib29sIChIVUdFVExCX1BBR0UgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgfHwgXFxcXFxcbm1tL0tjb25maWctMTAxMS1cXHRcXHQgKFpPTkVfREVWSUNFIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjQ4LjAyNTM3MDg5MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTU4NDU0ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaHVnZSBwYWdlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgc3RhcnRpbmcgd2l0aCBgbW0vS2NvbmZpZ2AsIGBpbml0L0tjb25maWdgLCBhbmQgYGZzL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgaW5pdGlhbGl6YXRpb24sIGFuZCBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGFuZCBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBgSFVHRVRMQl9QQUdFYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBfSFVHRVRMQmAgb3B0aW9ucyBpbiB0aGVzZSBmaWxlcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG5cblRoZW4sIEknbGwgdXNlIGBncmVwYCBhcyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gc2NhbiB0aHJvdWdoIGBmcy9LY29uZmlnYCBhbmQgYGluaXQvS2NvbmZpZ2AgZm9yIGFueSBtZW50aW9ucyBvZiBgSFVHRVRMQmAuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIG9yIGNvbnRleHRzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lLCBhdCBsZWFzdC4gSSdtIGhvcGluZyBJIGNhbiBwaWVjZSB0b2dldGhlciBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgbW9kdWxlcyBhbmQgd2hlcmUgdGhleSBsaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg1OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjUwLjE4MzgyODU2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MzM4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjM1PWNvbmZpZyBUTVBGU19RVU9UQVxcbi0tXFxuZnMvS2NvbmZpZy0yNDYtXFxuZnMvS2NvbmZpZzoyNDc6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNDgtXFx0ZGVmX2Jvb2wgblxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbmZzL0tjb25maWc6MjUyOlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1My1cXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuLS1cXG5mcy9LY29uZmlnLTI2MS1cXG5mcy9LY29uZmlnOjI2MjppZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuZnMvS2NvbmZpZy0yNjUtXFx0ZGVmYXVsdCBuXFxuZnMvS2NvbmZpZzoyNjY6XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjY3LVxcdGhlbHBcXG4tLVxcbmZzL0tjb25maWctMjcwLVxcdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXFxuZnMvS2NvbmZpZzoyNzE6ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZzoyNzQ6XFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzUtXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWc6Mjc4OlxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWc6Mjc5OlxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxcbmZzL0tjb25maWctMjgwLVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG5mcy9LY29uZmlnOjI4MTpcXHRzZWxlY3QgU1BBUlNFTUVNX1ZNRU1NQVBfUFJFSU5JVCBpZiBBUkNIX1dBTlRfSFVHRVRMQl9WTUVNTUFQX1BSRUlOSVRcXG5mcy9LY29uZmlnLTI4Mi1cXG5mcy9LY29uZmlnOjI4Mzpjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuZnMvS2NvbmZpZzoyODQ6XFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yODUtXFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkUgXFx1MDAyNlxcdTAwMjYgU1BMSVRfUE1EX1BUTE9DS1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6NTAuMjI5NTY3Nzc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MzY2MDU3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBNRU1DR2AgaXMgYmVpbmcgY29uZmlndXJlZCBpbiB0aGlzIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGZvdW5kYXRpb25hbCBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgcGxhY2Ugd2hlcmUgdGhlIG1ham9yIGtlcm5lbCBmZWF0dXJlcywgYW5kIHRoZWlyIGFzc29jaWF0ZWQgYnVpbGQtdGltZSBvcHRpb25zLCBhcmUgZGVmaW5lZC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBlbmFibGVkIGFuZCBob3cuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9uLCBkZXBlbmRlbmNpZXMsIGFuZCBwZXJoYXBzIHNvbWUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIG1lbW9yeSBjZ3JvdXAgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc5NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjUxLjg2NjE3NjA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIxOTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjUxLjkxMTM5ODA1OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE5NDUwOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGN1cnJlbnQgdHJhaW4gb2YgdGhvdWdodCBsZWFkcyBtZSB0byBjb25zaWRlciBhbGwgcmVsZXZhbnQgZmFjdG9ycy4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIFgsIFksIGFuZCBaLCBidXQgaXQncyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoIGFuZCBub3QgbWlzcyBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCBgQ0dST1VQX0hVR0VUTEJgIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnRlZ3JhdGUgdGhpcyBjb25zaWRlcmF0aW9uIGludG8gdGhlIG92ZXJhbGwgYW5hbHlzaXMgYW5kIGVuc3VyZSB0aGF0IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyBhbHNvIGFzc2Vzc2VkIGFsb25nc2lkZSB0aGUgb3RoZXIgY29uc2lkZXJhdGlvbnMgdG8gcHJvdmlkZSB0aGUgbW9zdCBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgZXZhbHVhdGlvbi4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjUzLjkzMDg1MzAzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2NTYxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9IVUdFVExCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTI4Mj1jb25maWcgQ0dST1VQX0ZSRUVaRVJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMjkyLVxcbmluaXQvS2NvbmZpZzoxMjkzOmNvbmZpZyBDR1JPVVBfSFVHRVRMQlxcbmluaXQvS2NvbmZpZy0xMjk0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6NTMuOTg0NTE1NzkxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODMxODc3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBDb21waWxhdGlvbiBvZiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZSBjb21waWxhdGlvbiBvZiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEZpcnN0LCBJJ2xsIGNvbnN1bHQgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gQWgsIHRoZXJlIGl0IGlzOiBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dgLiBJZiBgQ09ORklHX01FTUNHYCBpcyBkZWZpbmVkLCB3ZSBoYXZlIGEgcmVhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4gT3RoZXJ3aXNlLCBpdCdzIGp1c3QgYW4gaW5saW5lIGZ1bmN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcmV0dXJucyB6ZXJvLiBUaGF0J3Mgd2hhdCBJIGV4cGVjdGVkLiBOb3csIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBlbnRyaWVzLlxuXG5JJ2xsIGNoZWNrIGBtbS9NYWtlZmlsZWAuIEFoLCB5ZXMuIGBodWdldGxiLm9gIGlzIG9ubHkgaW5jbHVkZWQgaWYgYENPTkZJR19IVUdFVExCRlNgIGlzIHNldCwgYW5kIGBtZW1jb250cm9sLm9gIGlzIGluY2x1ZGVkIGlmIGBDT05GSUdfTUVNQ0dgIGlzIHNldC4gVGhpcyBjb25maXJtcyB0aGF0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBpcyBpbmRlZWQgdGllZCB0byB0aGUgbWVtb3J5IGNncm91cCBjb25maWd1cmF0aW9uLiBFeGNlbGxlbnQuIE15IGluaXRpYWwgYW5hbHlzaXMgaXMgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjU2Ljg2NzcwNjE1OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2NDY4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYlxcXFwub3xtZW1jb250cm9sXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXFxubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA4LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjU2LjkxOTM1NjA1N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDUxMTAzNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhYm91dCBIdWdlVExCIGFuZCBtZW1vcnkgY2dyb3VwIGludGVncmF0aW9uLiAgVGhlIGNvcmUgY29tcG9uZW50cyBhcmUgY2xlYXJseSBgSFVHRVRMQkZTYCBhbmQgYE1FTUNHYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC5cblxuTXkgZmlyc3Qgc3RlcCBpcyB0byBpc29sYXRlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEkgd2FudCB0byBwaW5wb2ludCB3aGVyZSB0aGUgcGF0Y2gncyBjb3JlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGFuZCBtb2RpZmllZC4gSSBzZWUgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaW4gYG1tL2h1Z2V0bGIuY2AsIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgaW4gYG1tL21lbWNvbnRyb2wuY2AgYXJlIGRpcmVjdGx5IGFsdGVyZWQuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlc2UgZnVuY3Rpb25zIHViaXF1aXRvdXM/IERvIHRoZXkgdG91Y2ggYSB2YXN0IGFtb3VudCBvZiBrZXJuZWwgY29kZSwgb3IgYXJlIHRoZXkgc3BlY2lmaWMgdG8gYSBmZWF0dXJlPyAgVGhhbmtmdWxseSwgdGhlc2UgYXJlIHNwZWNpZmljIGVudHJ5IHBvaW50cyBmb3IgSHVnZVRMQiBhbGxvY2F0aW9uIGFuZCBNZW1jZyBjaGFyZ2luZy4gVGhleSBhcmUgKm5vdCogY2FsbGVkIGJ5IGV2ZXJ5IHNpbmdsZSBwcm9jZXNzLiBUaGlzIGlzIGdvb2QsIGl0IGdpdmVzIG1lIGZvY3VzLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb25zOiBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiAgSSdtIGFsc28gbG9va2luZyBmb3IgYW55dGhpbmcgZWxzZSBpbiB0aGUgZGlmZiwgYW5kIEkgY29uZmlybSB0aGUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGFsb25nIHdpdGggdGhlIGAuY2AgZmlsZXMgbWVudGlvbmVkIHByZXZpb3VzbHkuXG5cbkknbSBjb25maXJtaW5nIHRoYXQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgYXJlIG5vbi1zdGF0aWMgc3ltYm9scyBpbiBgdm1saW51eGAuIFRoYXQgbWVhbnMgdGhleSdyZSBleHBvc2VkIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhbmQgaXMgZGVjbGFyZWQgYWNjb3JkaW5nbHkgaW4gdGhlIGhlYWRlcnMsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuXG5cblRoZW4sIGNvbmZpcm1pbmcgdGhlIGNvbmZpZ3M6IGBIVUdFVExCRlNgIGFuZCBgTUVNQ0dgLCBsaWtlIEkgc2FpZC5cblxuU28sIGluIHN1bW1hcnksIEknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudDpcbiogICBgV29ydGhGdXp6aW5nOiB0cnVlYCAtIGJlY2F1c2Ugd2UndmUgaWRlbnRpZmllZCBzcGVjaWZpYyBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aCBIdWdlVExCIGFuZCBNZW1jZyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkLlxuKiAgIGBFbmFibGVDb25maWdzOiBbXCJIVUdFVExCRlNcIiwgXCJNRU1DR1wiXWAgLSBiZWNhdXNlIHRoZXNlIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgcGF0Y2gncyBmdW5jdGlvbi5cbiogICBgRm9jdXNTeW1ib2xzOiBbXCJodWdldGxiX2FsbG9jX2ZvbGlvXCIsIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLCBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIl1gIC0gdGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGVzdC5cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBhbmQgY29tcGxldGUuXG5cbkxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMzUsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAwOjAyLjM3MDQ2MjI5OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODEyNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcGF0aHMgKGh1Z2V0bGJfYWxsb2NfZm9saW8sIGFsbG9jX2h1Z2V0bGJfZm9saW8sIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIpIHRvIGFzc29jaWF0ZSBhbmQgY2hhcmdlIGh1Z2UgZm9saW9zIGFnYWluc3QgdGhlIHRhcmdldCBtbV9zdHJ1Y3QgcmF0aGVyIHRoYW4gY3VycmVudC4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgY29ycmVjdCBjZ3JvdXAgYWNjb3VudGluZyBhbmQgYXZvaWQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIHBhdGhzIChodWdldGxiX2FsbG9jX2ZvbGlvLCBhbGxvY19odWdldGxiX2ZvbGlvLCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKSB0byBhc3NvY2lhdGUgYW5kIGNoYXJnZSBodWdlIGZvbGlvcyBhZ2FpbnN0IHRoZSB0YXJnZXQgbW1fc3RydWN0IHJhdGhlciB0aGFuIGN1cnJlbnQuIFRoaXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcgdG8gdmVyaWZ5IGNvcnJlY3QgY2dyb3VwIGFjY291bnRpbmcgYW5kIGF2b2lkIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMDowMi40NDQyODE1OTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzMzNTYwMjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MDIuNDQ0NzMyNzQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjgzMzMxMDQ2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcm91dGluZXMgKGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gKSB0byBwYXNzIGEgdGFyZ2V0IGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgcG9pbnRlciBhbmQgY2hhcmdlIHRoZSBodWdldGxiIGZvbGlvIHRvIHRoZSBjZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgbW0gKGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWApIHJhdGhlciB0aGFuIHRoZSBjdXJyZW50IHRhc2sgKGBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKWApLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHBvaW50ZXIgcGFzc2luZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzg2NzY2NGNkMWIyZmE3NzliNDI0NTczMjBmNGVlYTBlMzIzYzI4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDk6NTk6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAxNmM0YzRjYWExMjZjLi40NWFkYTc1ZGMwNGU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtNjk5LDcgKzY5OSw4IEBAIGVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcbiAjZGVmaW5lIEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlMgQklUKEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlNfQklUKVxuIFxuIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpO1xuK1x0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHU4IGFsbG9jX2ZsYWdzKTtcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xuIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li4zNjJhZjU4ZTUwYTQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjYyLDcgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApO1xuIH1cbiBcbi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xuK2ludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRcdCAgICAgIGdmcF90IGdmcCk7XG4gXG4gaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuQEAgLTExNTYsOSArMTE1NywxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4ge1xuLSAgICAgICAgcmV0dXJuIDA7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA3ODU3NzI4NDU3OTUyLi41YWI1YTUxNDE1NzQ4IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0yODE2LDYgKzI4MTYsNyBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXG4gICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cbiAgKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuICAqIEBtcG9saTogSW50ZXJwcmV0ZWQgbWVtb3J5IHBvbGljeSB0byB1c2UgZm9yIGFsbG9jYXRpb24uXG4rICogQG1tOiBNZW1vcnkgZGVzY3JpcHRvciBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXQuXG4gICogQGFsbG9jX2ZsYWdzOiBGbGFncyBjb250cm9sbGluZyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvci5cbiAgKlxuICAqIEFsbG9jYXRlcyBhIGh1Z2V0bGIgZm9saW8gYW5kIGhhbmRsZXMgY2dyb3VwIGNoYXJnaW5nIGFuZCBnbG9iYWwgaHN0YXRlXG5AQCAtMjgyNiw3ICsyODI3LDggQEAgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuICAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLlxuICAqL1xuIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXG4rXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dTggYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Ym9vbCBjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCA9IGFsbG9jX2ZsYWdzIFx1MDAyNlxuIFx0XHRcdFx0XHQgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG5AQCAtMjg4MSw3ICsyODgzLDggQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbi1cdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuK1x0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgbW0sXG4rXHRcdFx0XHRcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuIFx0LypcbiBcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcbiBcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcbkBAIC0zMDIwLDcgKzMwMjMsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC5ub2RlbWFzayA9IG5vZGVtYXNrLFxuIFx0fTtcbiBcbi1cdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xuK1x0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCB2bWEtXHUwMDNldm1fbW0sIGFsbG9jX2ZsYWdzKTtcbiBcbiBcdG1wb2xfY29uZF9wdXQobXBvbCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4wYjc5NWJmMWU2Y2YxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01MjMzLDYgKzUyMzMsNyBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuIC8qKlxuICAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cbiAgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbisgKiBAbW06IG1tIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRpb24gdGFyZ2V0XG4gICogQGdmcDogcmVjbGFpbSBtb2RlXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFsbG9jYXRpbmcgYSBodWdlIHBhZ2UgZm9saW8sIGFmdGVyIHRoZSBwYWdlIGhhc1xuQEAgLTUyNDIsOSArNTI0MywxMCBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuICAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuXG4gICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy5cbiAgKi9cbi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4raW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMDowMi40NDQ3MzM5MjVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODc1NjI0ODQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZXMgYXJlIGZvY3VzZWQgYXJvdW5kIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBhbmQgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBJbnRlcmVzdGluZywgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGhhcyBiZWVuIHVwZGF0ZWQ7IGl0IHByZXZpb3VzbHkgdG9vayB0aGUgYHN0cnVjdCBmb2xpb2AgYW5kIGBnZnBfdGAgYXJndW1lbnRzLCBhbmQgZ290IHRoZSBgc3RydWN0IG1lbV9jZ3JvdXBgIHVzaW5nIGBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKWAuIE5vdywgaXQncyB0YWtpbmcgYSBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIGFyZ3VtZW50IGFuZCB1c2luZyBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgIGluc3RlYWQuIFRoYXQncyBhIHNpZ25pZmljYW50IHNoaWZ0LiBBbmQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGF0IGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgYW5kIHBhc3MgaXQgdG8gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBSaWdodCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIHRoZW4gY2FsbHMgaXQgd2l0aCBgdm1hLVx1MDAzZXZtX21tYC5cblxuQWxyaWdodCwgSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBzY29wZSBvZiB0aGlzIGNoYW5nZS4gQXJlIHRoZXJlIGFueSBvdGhlciBjYWxsZXJzIG9mIGBodWdldGxiX2FsbG9jX2ZvbGlvYD8gSSdtIGdvaW5nIHRvIHJ1biBncmVwcGVyIHRvIHNlZSB3aGVyZSB0aGlzIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBhY3QuIEkgbmVlZCB0byBrbm93IHRoZSByZWFjaCBvZiB0aGlzLiBCYXNlZCBvbiB0aG9zZSByZXN1bHRzLCBJIGNhbiBtYWtlIGEgY2FsbCBhYm91dCBmdXp6aW5nIG5lZWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MTEuMjAwOTg0NzA2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2NDA5NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODE1LS8qKlxcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXFxubW0vaHVnZXRsYi5jLTI4MTctICogQGg6IEh1Z2V0bGIgc3RhdGUgY29udHJvbCBibG9jay5cXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODI4LSAqL1xcbm1tL2h1Z2V0bGIuYzoyODI5OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0yODMwLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yOTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDI1LVxcbm1tL2h1Z2V0bGIuYzozMDI2OlxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIHZtYS1cXHUwMDNldm1fbW0sIGFsbG9jX2ZsYWdzKTtcXG5tbS9odWdldGxiLmMtMzAyNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MTIuNjc3Mzk5ODQ0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MTY4NTk5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggSHVnZVRMQiBwYWdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyb2FkZW4gdGhlIHNjb3BlIG9mIGludmVzdGlnYXRpb24gYmV5b25kIHdoYXQgd2UndmUgYmVlbiBmb2N1c2VkIG9uLiBUbyBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBjb25zdW1wdGlvbiBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gSHVnZVRMQiB1c2FnZSB3aXRoaW4gY2dyb3Vwcywgd2UgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMgb2YgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBXaGF0IGFyZSB0aGUgdmFyaW91cyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyBUaGlzIHdpbGwgZ2l2ZSB1cyBhIGJpcmQncy1leWUgdmlldy4gVGhpcyBpcyBrZXkgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGlzc3VlcyBpbiBhY2NvdW50aW5nIG9yIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGFzc29jaWF0ZWQgd2l0aCBIdWdlVExCIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLiBXZSdyZSBsb29raW5nIGZvciBldmVyeXRoaW5nLCBmcm9tIHRoZSBjb3JlIGFsbG9jYXRpb24gcGF0aHMgdG8gdGhlIHJlbGVhc2UgbWVjaGFuaXNtcy4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgZHJpdmluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTgzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MTYuMDk0MjYyMTcxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE3NTE2NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjU3PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY0LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjYtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNTQ9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTktXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE2MDpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE2MS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODI5PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI4ODUtXFxubW0vaHVnZXRsYi5jOjI4ODY6XFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgbW0sXFxubW0vaHVnZXRsYi5jLTI4ODctXFx0XFx0XFx0XFx0XFx0Z2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XFxuLS1cXG5tbS9odWdldGxiLmMtMjg4OS1cXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmXFxubW0vaHVnZXRsYi5jOjI4OTA6XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxcbm1tL2h1Z2V0bGIuYy0yODkxLVxcdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjE9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjMzLS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1MjM0OiAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cXG5tbS9tZW1jb250cm9sLmMtNTIzNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjQ1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MjQ2OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL21lbWNvbnRyb2wuYy01MjQ3LVxcdFxcdFxcdCAgICAgIGdmcF90IGdmcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MTcuNjExNzg1MzU3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MTM5ODgyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDb250cm9sIERldGFpbHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBjZ3JvdXAgaXMgcmV0cmlldmVkIGZyb20gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcy4gTGV0J3MgZGlnIGludG8gYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tYCBpbXBsZW1lbnRhdGlvbi4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBoZXJlLCB0aGUgbWV0aG9kIHVzZWQgdG8gbGluayBhIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAoYG1tYCkgdG8gaXRzIGFzc29jaWF0ZWQgY2dyb3VwLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBob3cgdGhlIGtlcm5lbCB0cmFja3MgbWVtb3J5IHVzYWdlIGFuZCBlbmZvcmNlcyBsaW1pdHMgYmFzZWQgb24gY2dyb3VwIGFzc2lnbm1lbnRzLiBJIGFudGljaXBhdGUgaXQgd2lsbCBlaXRoZXIgZGlyZWN0bHkgYWNjZXNzIGEgZmllbGQgd2l0aGluIHRoZSBgbW1fc3RydWN0YCBvciwgbW9yZSBsaWtlbHksIGZvbGxvdyBhIHBvaW50ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IG1haW50YWlucyB0aGlzIHJlbGF0aW9uc2hpcC4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgY29ycmVjdGx5IGF0dHJpYnV0ZXMgbWVtb3J5IHVzYWdlIHRvIGEgcGFydGljdWxhciBjb250cm9sIGdyb3VwLCB3aGljaCBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcyB3aGVuIGRlYWxpbmcgd2l0aCBjZ3JvdXAgbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBpbiB0aGlzIGNyaXRpY2FsIHBhdGguIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBleGFtaW5lIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDQzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MjAuNDI1Nzc4MTQ4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM0NzQ1OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9tZW1fY2dyb3VwX2Zyb21fbW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jPTEwMDE9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpzZ3hfZW5jbF9nZXRfbWVtX2Nncm91cChzdHJ1Y3Qgc2d4X2VuY2wgKmVuY2wpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAxMi1cXHRpZiAoIWN1cnJlbnRfaXNfa3NneGQoKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTAxMzpcXHRcXHRyZXR1cm4gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVxcdTAwM2VtbSk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwMTQtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAyNC1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTAyNTpcXHRcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oZW5jbF9tbS1cXHUwMDNlbW0pO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDI2LVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNDAtXFx0aWYgKCFtZW1jZylcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTA0MTpcXHRcXHRyZXR1cm4gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShOVUxMKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA0Mi1cXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9MTU4OT1TWVNDQUxMX0RFRklORTIoZmFub3RpZnlfaW5pdCwgdW5zaWduZWQgaW50LCBmbGFncywgdW5zaWduZWQgaW50LCBldmVudF9mX2ZsYWdzKVxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xNjg0LVxcdGdyb3VwLVxcdTAwM2VmYW5vdGlmeV9kYXRhLmZsYWdzID0gZmxhZ3MgfCBpbnRlcm5hbF9mbGFncztcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jOjE2ODU6XFx0Z3JvdXAtXFx1MDAzZW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVxcdTAwM2VtbSk7XFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xNjg2LVxcdGdyb3VwLVxcdTAwM2V1c2VyX25zID0gZ2V0X3VzZXJfbnModXNlcl9ucyk7XFxuLS1cXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYz02NDE9c3RhdGljIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqaW5vdGlmeV9uZXdfZ3JvdXAodW5zaWduZWQgaW50IG1heF9ldmVudHMpXFxuLS1cXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYy02NjMtXFx0Z3JvdXAtXFx1MDAzZW1heF9ldmVudHMgPSBtYXhfZXZlbnRzO1xcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jOjY2NDpcXHRncm91cC1cXHUwMDNlbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYy02NjUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD03NTU9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzU2LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjc1NzpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzU4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTIwNj1zdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTIxMS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjEyOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTIxMy17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEzOD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICphY3RpdmVfbWVtY2codm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTQ2LS8qKlxcbm1tL21lbWNvbnRyb2wuYzoxMTQ3OiAqIGdldF9tZW1fY2dyb3VwX2Zyb21fbW06IE9idGFpbiBhIHJlZmVyZW5jZSBvbiBnaXZlbiBtbV9zdHJ1Y3QncyBtZW1jZy5cXG5tbS9tZW1jb250cm9sLmMtMTE0OC0gKiBAbW06IG1tIGZyb20gd2hpY2ggbWVtY2cgc2hvdWxkIGJlIGV4dHJhY3RlZC4gSXQgY2FuIGJlIE5VTEwuXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE1Ni0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTE1NzpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9tZW1jb250cm9sLmMtMTE1OC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE5My19XFxubW0vbWVtY29udHJvbC5jOjExOTQ6RVhQT1JUX1NZTUJPTChnZXRfbWVtX2Nncm91cF9mcm9tX21tKTtcXG5tbS9tZW1jb250cm9sLmMtMTE5NS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU2NC1cXG5tbS9tZW1jb250cm9sLmM6MjU2NTpcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cXHUwMDNlbW0pO1xcbm1tL21lbWNvbnRyb2wuYy0yNTY2LVxcdGN1cnJlbnQtXFx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCA9IDA7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMjUtXFxubW0vbWVtY29udHJvbC5jOjUyMjY6XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS9tZW1jb250cm9sLmMtNTIyNy1cXHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyNDY9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI0OC17XFxubW0vbWVtY29udHJvbC5jOjUyNDk6XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxubW0vbWVtY29udHJvbC5jLTUyNTAtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI4MT1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyOTItXFx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpKVxcbm1tL21lbWNvbnRyb2wuYzo1MjkzOlxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxubW0vbWVtY29udHJvbC5jLTUyOTQtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS92bXNjYW4uYz0yOTQyPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTQ0LVxcdGludCBuaWQ7XFxubW0vdm1zY2FuLmM6Mjk0NTpcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS92bXNjYW4uYy0yOTQ2LVxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAwOjIxLjk2MDUyOTQ2NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjg5MzQ4NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIZWFydCBvZiBIdWdlVExCIE1lbW9yeSBBY2NvdW50aW5nKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYG1tL21lbWNvbnRyb2wuY2AgZmlsZSDigJMgdGhhdCdzIHdoZXJlIHRoZSBtZW1vcnkgY2dyb3VwIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBIdWdlVExCIG1lbW9yeSBpcyBjaGFyZ2VkLiBJIGZpZ3VyZSBsaW5lcyA1MjQwIHRocm91Z2ggNTI3MCBhcmUgdGhlIGtleSBhcmVhIGZvciBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIExldCdzIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRob3NlIHBhZ2VzLiBJdCdzIGNydWNpYWwsIG9idmlvdXNseSwgdG8gZ2V0IHRoaXMgY2hhcmdpbmcgbG9naWMgcmlnaHQgZm9yIGFjY3VyYXRlIHJlc291cmNlIGFjY291bnRpbmcgYW5kLCB1bHRpbWF0ZWx5LCBlZmZlY3RpdmUgY2dyb3VwLWJhc2VkIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gaGVyZS4gSSBleHBlY3QgdGhlcmUncyBwcm9iYWJseSBzb21lIGludGVycGxheSB3aXRoIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgb3IgbWF5YmUgc29tZSBhY2NvdW50aW5nIHN0cnVjdHVyZXMgc3BlY2lmaWMgdG8gSHVnZVRMQi4gTGV0J3Mgc3RhcnQgZGlzc2VjdGluZyB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MjQuMjQ5ODgyNzQ4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTIzMDpcXHRcXHRyZXR1cm4gcmV0O1xcbjUyMzE6XFx0fVxcbjUyMzI6XFx0XFxuNTIzMzpcXHQvKipcXG41MjM0OlxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cXG41MjM1OlxcdCAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbjUyMzY6XFx0ICogQG1tOiBtbSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldFxcbjUyMzc6XFx0ICogQGdmcDogcmVjbGFpbSBtb2RlXFxuNTIzODpcXHQgKlxcbjUyMzk6XFx0ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbGxvY2F0aW5nIGEgaHVnZSBwYWdlIGZvbGlvLCBhZnRlciB0aGUgcGFnZSBoYXNcXG41MjQwOlxcdCAqIGFscmVhZHkgYmVlbiBvYnRhaW5lZCBhbmQgY2hhcmdlZCB0byB0aGUgYXBwcm9wcmlhdGUgaHVnZXRsYiBjZ3JvdXBcXG41MjQxOlxcdCAqIGNvbnRyb2xsZXIgKGlmIGl0IGlzIGVuYWJsZWQpLlxcbjUyNDI6XFx0ICpcXG41MjQzOlxcdCAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuXFxuNTI0NDpcXHQgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLlxcbjUyNDU6XFx0ICovXFxuNTI0NjpcXHRpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG41MjQ3OlxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGdmcClcXG41MjQ4OlxcdHtcXG41MjQ5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbjUyNTA6XFx0XFx0aW50IHJldCA9IDA7XFxuNTI1MTpcXHRcXG41MjUyOlxcdFxcdC8qXFxuNTI1MzpcXHRcXHQgKiBFdmVuIG1lbWNnIGRvZXMgbm90IGFjY291bnQgZm9yIGh1Z2V0bGIsIHdlIHN0aWxsIHdhbnQgdG8gdXBkYXRlXFxuNTI1NDpcXHRcXHQgKiBzeXN0ZW0tbGV2ZWwgc3RhdHMgdmlhIGxydXZlY19zdGF0X21vZF9mb2xpby4gUmV0dXJuIDAsIGFuZCBza2lwXFxuNTI1NTpcXHRcXHQgKiBjaGFyZ2luZyB0aGUgbWVtY2cuXFxuNTI1NjpcXHRcXHQgKi9cXG41MjU3OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxcbjUyNTg6XFx0XFx0XFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbjUyNTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTI2MDpcXHRcXG41MjYxOlxcdFxcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxcbjUyNjI6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG41MjYzOlxcdFxcbjUyNjQ6XFx0b3V0OlxcbjUyNjU6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbjUyNjY6XFx0XFx0cmV0dXJuIHJldDtcXG41MjY3OlxcdH1cXG41MjY4OlxcdFxcbjUyNjk6XFx0LyoqXFxuNTI3MDpcXHQgKiBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8gLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gZm9yIHN3YXBpbi5cXG41MjcxOlxcdCAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxcbjUyNzI6XFx0ICogQGlkOiBtZW1vcnkgY2dyb3VwIGlkXFxuNTI3MzpcXHQgKiBAbW06IG1tIGNvbnRleHQgb2YgdGhlIHZpY3RpbVxcbjUyNzQ6XFx0ICogQGdmcDogcmVjbGFpbSBtb2RlXFxuNTI3NTpcXHQgKlxcbjUyNzY6XFx0ICogVGhpcyBmdW5jdGlvbiBjaGFyZ2VzIGEgZm9saW8gYWxsb2NhdGVkIGZvciBzd2FwaW4uIFBsZWFzZSBjYWxsIHRoaXMgYmVmb3JlXFxuNTI3NzpcXHQgKiBhZGRpbmcgdGhlIGZvbGlvIHRvIHRoZSBzd2FwY2FjaGUuXFxuNTI3ODpcXHQgKlxcbjUyNzk6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIE90aGVyd2lzZSwgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MjQuMjUwMzE1ODY4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1Mjc1MDA1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEtNU0FOIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSByZWZhY3RvcmluZyBob3cgSHVnZVRMQiBtZW1vcnkgY2hhcmdlcyBhcmUgaGFuZGxlZCB3aXRoaW4gY2dyb3Vwcy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0byBwYXNzIHRoZSBgbW1fc3RydWN0YCBkb3duIHRoZSBjYWxsIGNoYWluIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgYGN1cnJlbnRgIHRhc2sncyBjb250ZXh0LlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIHRoZXNlIGtleSBtb2RpZmljYXRpb25zOlxuXG4qICAgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGlzIHVwZGF0ZWQgdG8gdGFrZSBhIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgYXJndW1lbnQuIFRoaXMgaXMgdGhlIGNydWNpYWwgc2hpZnQuIEl0IHRoZW4gdXNlcyBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBtZW1vcnkgY2dyb3VwIGZvciB0aGUgdGFyZ2V0IG1lbW9yeSBzcGFjZSwgcmF0aGVyIHRoYW4gaW1wbGljaXRseSB1c2luZyB0aGUgY3VycmVudCB0YXNrJ3MgY2dyb3VwLlxuKiAgIFRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIG9mIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGFjY29tbW9kYXRlIHRoZSBgbW1gIHBvaW50ZXIgYW5kIGVuc3VyZSBpdCdzIHByb3BhZ2F0ZWQgZG93biB0aGUgc3RhY2suIGBhbGxvY19odWdldGxiX2ZvbGlvYCBub3cgcGFzc2VzIGB2bWEtXHUwMDNldm1fbW1gIHRvIGBodWdldGxiX2FsbG9jX2ZvbGlvYC5cbiogICBUaGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMsIGBsaW51eC9odWdldGxiLmhgIGFuZCBgbGludXgvbWVtY29udHJvbC5oYCwgaGF2ZSBoYWQgdGhlaXIgZGVjbGFyYXRpb25zIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBLTVNBTi4gSSd2ZSB0aG9yb3VnaGx5IHJldmlld2VkIHRoZSBwYXRjaCBhZ2FpbnN0IHRoZSBLTVNBTiBhbmQgS0FTQU4gY3JpdGVyaWEuXG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8sIG5vdGhpbmcgbGlrZSB0aGF0IGhlcmUuIFRoaXMgaXMgcHVyZWx5IGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LCBub3QgZXhwb3Npbmcga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBObywgdGhlIGNvZGUgaXMgdmVyeSBzdHJhaWdodGZvcndhcmQuIFRoZSBgbW1gIHBvaW50ZXIsIHdoZXRoZXIgTlVMTCBvciB2YWxpZCwgaXMgaGFuZGxlZCBjb3JyZWN0bHkgYnkgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW1gLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBBZ2FpbiwgdGhlIGZvY3VzIGlzIG9uIHJlZmFjdG9yaW5nIGhvdyBtZW1vcnkgYWNjb3VudGluZyBpcyBkb25lIGFuZCBjZ3JvdXAgYXNzaWdubWVudHMgYXJlIGhhbmRsZWQuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBOby4gVGhpcyBpcyBub3QgYWJvdXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBvciB2dWxuZXJhYmlsaXRpZXM7IHRoZSBwYXRjaCBpcyBhYm91dCBob3cgdGhlIGtlcm5lbCB0cmFja3MgbWVtb3J5IHVzYWdlIGJ5IHByb2Nlc3Nlcy5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIEknbSBjb25maWRlbnQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guIFRoZSBzdGFuZGFyZCBkZXRlY3RvcnMsIEtBU0FOIGFuZCBMT0NLREVQLCBzaG91bGQgY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHBvaW50ZXIgdmFsaWRpdHksIHJlZmNvdW50cywgb3IgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5LiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuSSd2ZSBhbHNvIHF1aWNrbHkgcmUtZXhhbWluZWQgYWxsIHRoZSBhZmZlY3RlZCBmaWxlczogYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgYG1tL2h1Z2V0bGIuY2AsIGFuZCBgbW0vbWVtY29udHJvbC5jYC4gVGhlIGNoYW5nZXMgYXJlIGFsbCB2ZXJ5IGZvY3VzZWQgYW5kIHNpbXBseSBhYm91dCBwYXNzaW5nIHRoZSBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIGRvd24gaW50byBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgYW5kIGNhbGxpbmcgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYC5cblxuU28sIEknbSByZWFkeSB0byBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU46IGZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzb2xpZCwgYW5kIHRoZSBjb2RlIGxvb2tzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDgwLCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAwOjMwLjc3NzgxOTQzM1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBtZW1jZyBjaGFyZ2luZyByb3V0aW5lcyAoYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2ApIHRvIHBhc3MgYSB0YXJnZXQgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBwb2ludGVyIGFuZCBjaGFyZ2UgdGhlIGh1Z2V0bGIgZm9saW8gdG8gdGhlIGNncm91cCBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCBtbSAoYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYCkgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgdGFzayAoYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCkuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgcG9pbnRlciBwYXNzaW5nIGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYnVmZmVycywgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIHJvdXRpbmVzIChgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvYCkgdG8gcGFzcyBhIHRhcmdldCBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIHBvaW50ZXIgYW5kIGNoYXJnZSB0aGUgaHVnZXRsYiBmb2xpbyB0byB0aGUgY2dyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0IG1tIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgKSByYXRoZXIgdGhhbiB0aGUgY3VycmVudCB0YXNrIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgKS5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBwb2ludGVyIHBhc3NpbmcgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBvciBib3VuZHMgY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgdmFsaWRpdHkgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowfbzk9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 09:42:58 +0000 UTC FinishedAt: 2026-09-04 10:00:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dc41e961a269f2ca4196e669d6d8e05480899cd4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "dc41e961a269f2ca4196e669d6d8e05480899cd4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MEMCG" ], "series_id": "b3096cd7-afee-426e-bb64-e0c698302ea3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_alloc_folio", "alloc_hugetlb_folio", "mem_cgroup_charge_hugetlb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBtZW1jZyBjaGFyZ2luZyByb3V0aW5lcyAoYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2ApIHRvIHBhc3MgYSB0YXJnZXQgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBwb2ludGVyIGFuZCBjaGFyZ2UgdGhlIGh1Z2V0bGIgZm9saW8gdG8gdGhlIGNncm91cCBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCBtbSAoYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYCkgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgdGFzayAoYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCkuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHBvaW50ZXIgcGFzc2luZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcGF0aHMgKGh1Z2V0bGJfYWxsb2NfZm9saW8sIGFsbG9jX2h1Z2V0bGJfZm9saW8sIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIpIHRvIGFzc29jaWF0ZSBhbmQgY2hhcmdlIGh1Z2UgZm9saW9zIGFnYWluc3QgdGhlIHRhcmdldCBtbV9zdHJ1Y3QgcmF0aGVyIHRoYW4gY3VycmVudC4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgY29ycmVjdCBjZ3JvdXAgYWNjb3VudGluZyBhbmQgYXZvaWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDk6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzODY3NjY0Y2QxYjJmYTc3OWI0MjQ1NzMyMGY0ZWVhMGUzMjNjMjg1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwOTo1OTowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAxNmM0YzRjYWExMjZjLi40NWFkYTc1ZGMwNGU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtNjk5LDcgJiM0Mzs2OTksOCBAQCBlbnVtIGh1Z2V0bGJfYWxsb2NfZmxhZyB7XG4gI2RlZmluZSBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TIEJJVChIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TX0JJVClcbiBcbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKTtcbiYjNDM7XHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiYjNDM7XHRcdHU4IGFsbG9jX2ZsYWdzKTtcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xuIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li4zNjJhZjU4ZTUwYTQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjYyLDcgJiM0Mzs2NjIsOCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTtcbiB9XG4gXG4taW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcbiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdCAgICAgIGdmcF90IGdmcCk7XG4gXG4gaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuQEAgLTExNTYsOSAmIzQzOzExNTcsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4ge1xuLSAgICAgICAgcmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNzg1NzcyODQ1Nzk1Mi4uNWFiNWE1MTQxNTc0OCAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtMjgxNiw2ICYjNDM7MjgxNiw3IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKiBodWdldGxiX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgYSBodWdldGxiIGZvbGlvLlxuICAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXG4gICogQG1wb2xpOiBJbnRlcnByZXRlZCBtZW1vcnkgcG9saWN5IHRvIHVzZSBmb3IgYWxsb2NhdGlvbi5cbiYjNDM7ICogQG1tOiBNZW1vcnkgZGVzY3JpcHRvciBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXQuXG4gICogQGFsbG9jX2ZsYWdzOiBGbGFncyBjb250cm9sbGluZyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvci5cbiAgKlxuICAqIEFsbG9jYXRlcyBhIGh1Z2V0bGIgZm9saW8gYW5kIGhhbmRsZXMgY2dyb3VwIGNoYXJnaW5nIGFuZCBnbG9iYWwgaHN0YXRlXG5AQCAtMjgyNiw3ICYjNDM7MjgyNyw4IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbiAgKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy5cbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxuJiM0MztcdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuJiM0MztcdFx0dTggYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Ym9vbCBjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCA9IGFsbG9jX2ZsYWdzIFx1MDAyNlxuIFx0XHRcdFx0XHQgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG5AQCAtMjg4MSw3ICYjNDM7Mjg4Myw4IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuIFxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXG4tXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcbiYjNDM7XHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBtbSxcbiYjNDM7XHRcdFx0XHRcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuIFx0LypcbiBcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcbiBcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcbkBAIC0zMDIwLDcgJiM0MzszMDIzLDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQubm9kZW1hc2sgPSBub2RlbWFzayxcbiBcdH07XG4gXG4tXHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcbiYjNDM7XHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXHUwMDI2bXBvbGksIHZtYS1cdTAwM2V2bV9tbSwgYWxsb2NfZmxhZ3MpO1xuIFxuIFx0bXBvbF9jb25kX3B1dChtcG9sKTtcbiBcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjBiNzk1YmYxZTZjZjEgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTUyMzMsNiAmIzQzOzUyMzMsNyBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuIC8qKlxuICAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cbiAgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbiYjNDM7ICogQG1tOiBtbSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldFxuICAqIEBnZnA6IHJlY2xhaW0gbW9kZVxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbGxvY2F0aW5nIGEgaHVnZSBwYWdlIGZvbGlvLCBhZnRlciB0aGUgcGFnZSBoYXNcbkBAIC01MjQyLDkgJiM0Mzs1MjQzLDEwIEBAIGludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4gICogUmV0dXJucyBFTk9NRU0gaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgZnVsbC5cbiAgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLlxuICAqL1xuLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcbiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHRcdCAgICAgIGdmcF90IGdmcClcbiB7XG4tXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcbiYjNDM7XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIHBhdGhzIChodWdldGxiX2FsbG9jX2ZvbGlvLCBhbGxvY19odWdldGxiX2ZvbGlvLCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKSB0byBhc3NvY2lhdGUgYW5kIGNoYXJnZSBodWdlIGZvbGlvcyBhZ2FpbnN0IHRoZSB0YXJnZXQgbW1fc3RydWN0IHJhdGhlciB0aGFuIGN1cnJlbnQuIFRoaXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcgdG8gdmVyaWZ5IGNvcnJlY3QgY2dyb3VwIGFjY291bnRpbmcgYW5kIGF2b2lkIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzg2NzY2NGNkMWIyZmE3NzliNDI0NTczMjBmNGVlYTBlMzIzYzI4NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDk6NTk6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1YWRhNzVkYzA0ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oCkBAIC02OTksNyAmIzQzOzY5OSw4IEBAIGVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHsKICNkZWZpbmUgSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUyBCSVQoSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OU19CSVQpCiAKIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLAotCQlzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpOwomIzQzOwkJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJdTggYWxsb2NfZmxhZ3MpOwogc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcik7CiBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdkMWMwY2UxODlhODguLjM2MmFmNThlNTBhNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC02NjIsNyAmIzQzOzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTsKIH0KIAotaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTsKJiM0MztpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCQkgICAgICBnZnBfdCBnZnApOwogCiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLAogCQkJCSAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApOwpAQCAtMTE1Niw5ICYjNDM7MTE1NywxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCkKJiM0MztzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJCQkgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCkKIHsKLSAgICAgICAgcmV0dXJuIDA7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi41YWI1YTUxNDE1NzQ4IDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0yODE2LDYgJiM0MzsyODE2LDcgQEAgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKQogICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby4KICAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suCiAgKiBAbXBvbGk6IEludGVycHJldGVkIG1lbW9yeSBwb2xpY3kgdG8gdXNlIGZvciBhbGxvY2F0aW9uLgomIzQzOyAqIEBtbTogTWVtb3J5IGRlc2NyaXB0b3Igb2YgdGhlIGFsbG9jYXRpb24gdGFyZ2V0LgogICogQGFsbG9jX2ZsYWdzOiBGbGFncyBjb250cm9sbGluZyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvci4KICAqCiAgKiBBbGxvY2F0ZXMgYSBodWdldGxiIGZvbGlvIGFuZCBoYW5kbGVzIGNncm91cCBjaGFyZ2luZyBhbmQgZ2xvYmFsIGhzdGF0ZQpAQCAtMjgyNiw3ICYjNDM7MjgyNyw4IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZCkKICAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLgogICovCiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKLQkJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKQomIzQzOwkJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJdTggYWxsb2NfZmxhZ3MpCiB7CiAJYm9vbCBjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCA9IGFsbG9jX2ZsYWdzICZhbXA7CiAJCQkJCSAgSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDsKQEAgLTI4ODEsNyAmIzQzOzI4ODMsOCBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKIAogCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAKLQlyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTsKJiM0MzsJcmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgbW0sCiYjNDM7CQkJCQlnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTsKIAkvKgogCSAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWYKIAkgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsCkBAIC0zMDIwLDcgJiM0MzszMDIzLDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkubm9kZW1hc2sgPSBub2RlbWFzaywKIAl9OwogCi0JZm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsICZhbXA7bXBvbGksIGFsbG9jX2ZsYWdzKTsKJiM0MzsJZm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsICZhbXA7bXBvbGksIHZtYS0mZ3Q7dm1fbW0sIGFsbG9jX2ZsYWdzKTsKIAogCW1wb2xfY29uZF9wdXQobXBvbCk7CiAKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCAxMjcxZDM5MGI2MTdlLi4wYjc5NWJmMWU2Y2YxIDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtY29udHJvbC5jCkBAIC01MjMzLDYgJiM0Mzs1MjMzLDcgQEAgaW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCkKIC8qKgogICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpbwogICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkCiYjNDM7ICogQG1tOiBtbSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldAogICogQGdmcDogcmVjbGFpbSBtb2RlCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbGxvY2F0aW5nIGEgaHVnZSBwYWdlIGZvbGlvLCBhZnRlciB0aGUgcGFnZSBoYXMKQEAgLTUyNDIsOSAmIzQzOzUyNDMsMTAgQEAgaW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcCkKICAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuCiAgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLgogICovCi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApCiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJICAgICAgZ2ZwX3QgZ2ZwKQogewotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpOwomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTsKIAlpbnQgcmV0ID0gMDsKIAogCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzOTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIGhpdHRpbmcgbWVtb3J5IG1hbmFnZW1lbnQgcHJldHR5IGhhcmQsIHNwZWNpZmljYWxseSBhcm91bmQgaHVnZXRsYmZzIGFuZCBtZW1vcnkgY2dyb3Vwcy4gSSBzZWUgY2hhbmdlcyBpbiBgbW0vaHVnZXRsYi5jYCwgYG1tL21lbWNvbnRyb2wuY2AsIGFuZCB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cy4KClRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYWRkaW5nIGEgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBwYXJhbWV0ZXIgdG8gYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHJlcGxhY2VkIGBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKWAgd2l0aCBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgLiBBaGEsIHNvIGl0JiMzOTtzIHRyYW5zaXRpb25pbmcgZnJvbSB1c2luZyB0aGUgY3VycmVudCB0YXNrJiMzOTtzIG1lbW9yeSBjb250ZXh0IHRvIHVzaW5nIGEgc3BlY2lmaWVkIG9uZS4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gVGhlbiBgaHVnZXRsYl9hbGxvY19mb2xpb2AgaXMgbm93IGNhbGxpbmcgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIHdpdGggdGhhdCBgbW1gIHBhcmFtZXRlciwgYW5kIHdpdGhpbiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIGl0JiMzOTtzIHBhc3NpbmcgYHZtYS0mZ3Q7dm1fbW1gIHRvIGBodWdldGxiX2FsbG9jX2ZvbGlvYC4gTWFrZXMgc2Vuc2U7IGB2bWEtJmd0O3ZtX21tYCBpcyB0aGUgcmVsZXZhbnQgbWVtb3J5IG1hcHBpbmcuCgpJIG5lZWQgdG8gcXVpY2tseSBzY2FuIGZvciBvdGhlciBjYWxsIHNpdGVzIG9mIHRob3NlIHR3byBmdW5jdGlvbnMsIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBjb25zaXN0ZW50IGFjcm9zcyB0aGUga2VybmVsLiBCZXR0ZXIgcnVuIGBncmVwcGVyYCBhbmQgZG91YmxlLWNoZWNrLCBkb24mIzM5O3Qgd2FudCB0byBtaXNzIGFueXRoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMsIGVzcGVjaWFsbHkgaW4gY29udGV4dHMgdGhhdCBtaWdodCBoYXZlIHN1YnRseSBkaWZmZXJlbnQgbWVtb3J5IGNvbnRleHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW98bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02OTM9ZW51bSBodWdldGxiX2FsbG9jX2ZsYWcge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwMTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMi1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjYtXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTU0PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNjA6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE2MS1cdFx0XHRcdFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vaHVnZXRsYi5jPTI4MDc9dm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuLS1cbm1tL2h1Z2V0bGIuYy0yODE1LS8qKlxubW0vaHVnZXRsYi5jOjI4MTY6ICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cbm1tL2h1Z2V0bGIuYy0yODE3LSAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXG4tLVxubW0vaHVnZXRsYi5jLTI4MjgtICovXG5tbS9odWdldGxiLmM6MjgyOTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGIuYy0yODMwLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vaHVnZXRsYi5jLTI4ODUtXG5tbS9odWdldGxiLmM6Mjg4NjpcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIG1tLFxubW0vaHVnZXRsYi5jLTI4ODctXHRcdFx0XHRcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuLS1cbm1tL2h1Z2V0bGIuYy0yODg5LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxubW0vaHVnZXRsYi5jOjI4OTA6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG5tbS9odWdldGxiLmMtMjg5MS1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAyNS1cbm1tL2h1Z2V0bGIuYzozMDI2Olx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCB2bWEtXHUwMDNldm1fbW0sIGFsbG9jX2ZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0zMDI3LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjIxPWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMzMtLyoqXG5tbS9tZW1jb250cm9sLmM6NTIzNDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTIzNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjQ2OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0vbWVtY29udHJvbC5jLTUyNDctXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMzgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgdGhlIENhbGxzIHRvIGBodWdldGxiX2FsbG9jX2ZvbGlvYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyB1c2VkLiBJJiMzOTt2ZSBnb3QgYSBzcGVjaWZpYyBjb25jZXJuIGFuZCBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGl0JiMzOTtzIGxpbWl0ZWQgdG8gdGhlIGtub3duIGluc3RhbmNlcy4gU28sIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSwgc28gYSBnbG9iYWwgc2VhcmNoIGlzIGluIG9yZGVyLiBMZXQmIzM5O3MgZmlyZSB1cCBhIGBncmVwYCBhbmQgaHVudCBmb3IgZXZlcnkgc2luZ2xlIGluc3RhbmNlIG9mIGBodWdldGxiX2FsbG9jX2ZvbGlvYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgcmF3IGRhdGEgSSBuZWVkIHRvIHN0YXJ0IG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDAtXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDItXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9odWdldGxiLmM9MjgwNz12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXG4tLVxubW0vaHVnZXRsYi5jLTI4MTUtLyoqXG5tbS9odWdldGxiLmM6MjgxNjogKiBodWdldGxiX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgYSBodWdldGxiIGZvbGlvLlxubW0vaHVnZXRsYi5jLTI4MTctICogQGg6IEh1Z2V0bGIgc3RhdGUgY29udHJvbCBibG9jay5cbi0tXG5tbS9odWdldGxiLmMtMjgyOC0gKi9cbm1tL2h1Z2V0bGIuYzoyODI5OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYi5jLTI4MzAtXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9odWdldGxiLmM9Mjk0Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTMwMjUtXG5tbS9odWdldGxiLmM6MzAyNjpcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcdTAwMjZtcG9saSwgdm1hLVx1MDAzZXZtX21tLCBhbGxvY19mbGFncyk7XG5tbS9odWdldGxiLmMtMzAyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjU4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqSW52ZXN0aWdhdGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEh1Z2V0bGIgbWVtb3J5IGFjY291bnRpbmcgaXMgd29ya2luZyB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgZnJhbWV3b3JrLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgaW50ZXJhY3Rpb24gb3IgZWRnZSBjYXNlIEkmIzM5O20gbWlzc2luZy4gVGltZSB0byBqdW1wIGludG8gdGhlIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBtbS9tZW1jb250cm9sLmNgLiBJJiMzOTttIGdvaW5nIHRvIGhlYWQgZGlyZWN0bHkgdG8gdGhlIHZpY2luaXR5IG9mIGxpbmUgNTIzMy4gVGhpcyBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gSG9wZWZ1bGx5LCB0aGF0IGxpbmUgYW5kIGl0cyBzdXJyb3VuZGluZyBjb250ZXh0IGNhbiBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjMwOlx0XHRyZXR1cm4gcmV0O1xuNTIzMTpcdH1cbjUyMzI6XHRcbjUyMzM6XHQvKipcbjUyMzQ6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG41MjM1Olx0ICogQGZvbGlvOiBmb2xpbyBiZWluZyBjaGFyZ2VkXG41MjM2Olx0ICogQG1tOiBtbSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldFxuNTIzNzpcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxuNTIzODpcdCAqXG41MjM5Olx0ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbGxvY2F0aW5nIGEgaHVnZSBwYWdlIGZvbGlvLCBhZnRlciB0aGUgcGFnZSBoYXNcbjUyNDA6XHQgKiBhbHJlYWR5IGJlZW4gb2J0YWluZWQgYW5kIGNoYXJnZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGh1Z2V0bGIgY2dyb3VwXG41MjQxOlx0ICogY29udHJvbGxlciAoaWYgaXQgaXMgZW5hYmxlZCkuXG41MjQyOlx0ICpcbjUyNDM6XHQgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLlxuNTI0NDpcdCAqIFJldHVybnMgMCBpZiBlaXRoZXIgdGhlIGNoYXJnZSB3YXMgc3VjY2Vzc2Z1bCwgb3IgaWYgd2Ugc2tpcCB0aGUgY2hhcmdpbmcuXG41MjQ1Olx0ICovXG41MjQ2Olx0aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG41MjQ3Olx0XHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuNTI0ODpcdHtcbjUyNDk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xuNTI1MDpcdFx0aW50IHJldCA9IDA7XG41MjUxOlx0XG41MjUyOlx0XHQvKlxuNTI1MzpcdFx0ICogRXZlbiBtZW1jZyBkb2VzIG5vdCBhY2NvdW50IGZvciBodWdldGxiLCB3ZSBzdGlsbCB3YW50IHRvIHVwZGF0ZVxuNTI1NDpcdFx0ICogc3lzdGVtLWxldmVsIHN0YXRzIHZpYSBscnV2ZWNfc3RhdF9tb2RfZm9saW8uIFJldHVybiAwLCBhbmQgc2tpcFxuNTI1NTpcdFx0ICogY2hhcmdpbmcgdGhlIG1lbWNnLlxuNTI1NjpcdFx0ICovXG41MjU3Olx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpIHx8ICFtZW1jZ19hY2NvdW50c19odWdldGxiKCkgfHxcbjUyNTg6XHRcdFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuNTI1OTpcdFx0XHRnb3RvIG91dDtcbjUyNjA6XHRcbjUyNjE6XHRcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxuNTI2MjpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuNTI2MzpcdFxuNTI2NDpcdG91dDpcbjUyNjU6XHRcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbjUyNjY6XHRcdHJldHVybiByZXQ7XG41MjY3Olx0fVxuNTI2ODpcdFxuNTI2OTpcdC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1MTMKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTWVtb3J5IENncm91cCBSZXRyaWV2YWwgTWV0aG9kcyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSB0d28gZnVuY3Rpb25zOiBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgIGFuZCBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgLiBUaGUgY29yZSBvZiBteSBpbnRlcmVzdCBsaWVzIGluIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZSBiZXR3ZWVuIHRoZXNlIHR3byBtZXRob2RzIG9mIGZldGNoaW5nIHRoZSBtZW1vcnkgY2dyb3VwLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSBJJiMzOTtkIGNob29zZSBvbmUgb3ZlciB0aGUgb3RoZXIuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpc3NlY3QgdGhlIGJlaGF2aW9yIG9mIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tYC4gSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBpdHMgZGVmaW5pdGlvbiwgdHJhY2UgaXRzIGltcGxlbWVudGF0aW9uLCBhbmQgZXNzZW50aWFsbHkgbWFwIG91dCBpdHMgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQmIzM5O3MgKmRvaW5nKiB1bmRlciB0aGUgaG9vZCAtIHdoaWNoIGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBhY2Nlc3NpbmcsIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMgb3IgZWRnZSBjYXNlcywgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBkaWZmZXJzIGluIGl0cyBhcHByb2FjaCBmcm9tIHRoZSBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgIGZ1bmN0aW9uLiBUaGlzIGFuYWx5c2lzIGlzIGNyaXRpY2FsIHRvIGVuc3VyaW5nIEkgYW0gY29ycmVjdGx5IGludGVycHJldGluZyBhbmQgdXNpbmcgdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgZ2l2ZW4gY29udGV4dC4gVGhpcyBpcywgYWZ0ZXIgYWxsLCB0aGUgZm91bmRhdGlvbiBmb3IgbWFraW5nIGluZm9ybWVkIGRlY2lzaW9ucyBhYm91dCB0aGUgc3lzdGVtJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfbWVtX2Nncm91cF9mcm9tX21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYz0xMDAxPXN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqc2d4X2VuY2xfZ2V0X21lbV9jZ3JvdXAoc3RydWN0IHNneF9lbmNsICplbmNsKVxuLS1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDEyLVx0aWYgKCFjdXJyZW50X2lzX2tzZ3hkKCkpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTAxMzpcdFx0cmV0dXJuIGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cdTAwM2VtbSk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAxNC1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAyNC1cbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYzoxMDI1Olx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oZW5jbF9tbS1cdTAwM2VtbSk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAyNi1cbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA0MC1cdGlmICghbWVtY2cpXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTA0MTpcdFx0cmV0dXJuIGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oTlVMTCk7XG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA0Mi1cbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jPTE1ODk9U1lTQ0FMTF9ERUZJTkUyKGZhbm90aWZ5X2luaXQsIHVuc2lnbmVkIGludCwgZmxhZ3MsIHVuc2lnbmVkIGludCwgZXZlbnRfZl9mbGFncylcbi0tXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTE2ODQtXHRncm91cC1cdTAwM2VmYW5vdGlmeV9kYXRhLmZsYWdzID0gZmxhZ3MgfCBpbnRlcm5hbF9mbGFncztcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM6MTY4NTpcdGdyb3VwLVx1MDAzZW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVx1MDAzZW1tKTtcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMtMTY4Ni1cdGdyb3VwLVx1MDAzZXVzZXJfbnMgPSBnZXRfdXNlcl9ucyh1c2VyX25zKTtcbi0tXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYz02NDE9c3RhdGljIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqaW5vdGlmeV9uZXdfZ3JvdXAodW5zaWduZWQgaW50IG1heF9ldmVudHMpXG4tLVxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMtNjYzLVx0Z3JvdXAtXHUwMDNlbWF4X2V2ZW50cyA9IG1heF9ldmVudHM7XG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYzo2NjQ6XHRncm91cC1cdTAwM2VtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cdTAwM2VtbSk7XG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYy02NjUtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NzU1PXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2Zyb21fdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzU2LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NzU3OnN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTc1OC1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMjA2PXN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTIxMS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEyMTI6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyMTMte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTM4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmFjdGl2ZV9tZW1jZyh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTQ2LS8qKlxubW0vbWVtY29udHJvbC5jOjExNDc6ICogZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbTogT2J0YWluIGEgcmVmZXJlbmNlIG9uIGdpdmVuIG1tX3N0cnVjdCYjMzk7cyBtZW1jZy5cbm1tL21lbWNvbnRyb2wuYy0xMTQ4LSAqIEBtbTogbW0gZnJvbSB3aGljaCBtZW1jZyBzaG91bGQgYmUgZXh0cmFjdGVkLiBJdCBjYW4gYmUgTlVMTC5cbi0tXG5tbS9tZW1jb250cm9sLmMtMTE1Ni0gKi9cbm1tL21lbWNvbnRyb2wuYzoxMTU3OnN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vbWVtY29udHJvbC5jLTExNTgte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTkzLX1cbm1tL21lbWNvbnRyb2wuYzoxMTk0OkVYUE9SVF9TWU1CT0woZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbSk7XG5tbS9tZW1jb250cm9sLmMtMTE5NS1cbi0tXG5tbS9tZW1jb250cm9sLmM9MjU1NT12b2lkIF9fbWVtX2Nncm91cF9oYW5kbGVfb3Zlcl9oaWdoKGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTY0LVxubW0vbWVtY29udHJvbC5jOjI1NjU6XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cdTAwM2VtbSk7XG5tbS9tZW1jb250cm9sLmMtMjU2Ni1cdGN1cnJlbnQtXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoID0gMDtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjI1LVxubW0vbWVtY29udHJvbC5jOjUyMjY6XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xubW0vbWVtY29udHJvbC5jLTUyMjctXHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjQ2PWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjQ4LXtcbm1tL21lbWNvbnRyb2wuYzo1MjQ5Olx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS9tZW1jb250cm9sLmMtNTI1MC1cdGludCByZXQgPSAwO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MjgxPWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXG4tLVxubW0vbWVtY29udHJvbC5jLTUyOTItXHRpZiAoIW1lbWNnIHx8ICFjc3NfdHJ5Z2V0X29ubGluZShcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpKVxubW0vbWVtY29udHJvbC5jOjUyOTM6XHRcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS9tZW1jb250cm9sLmMtNTI5NC1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI5NDI9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS92bXNjYW4uYy0yOTQ0LVx0aW50IG5pZDtcbm1tL3Ztc2Nhbi5jOjI5NDU6XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbm1tL3Ztc2Nhbi5jLTI5NDYtXHRzdHJ1Y3QgbHJ1X2dlbl9tbV9saXN0ICptbV9saXN0ID0gZ2V0X21tX2xpc3QobWVtY2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTU0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBmb3IgQ29uc2lzdGVuY3kqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGxvb2tpbmcgYXQgYF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClgLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiwgcmlnaHQgb2ZmIHRoZSBiYXQsIGVmZmljaWVudGx5IHVzZXMgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYC4gVGhpcyBpcyBhIGdvb2Qgc2lnbiwgYSBjbGVhbiBkZXNpZ24gZGVjaXNpb24uIEkmIzM5O20gbm90aW5nIHRoaXMgc3BlY2lmaWNhbGx5IGJlY2F1c2UgSSYjMzk7dmUgYmVlbiBjb21wYXJpbmcgaXQgdG8gaG93IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCAqdXNlZCogdG8gb3BlcmF0ZSwgYW5kIEkgc2VlIGEgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZS4gSXQgd2FzIHByZXZpb3VzbHkgdXNpbmcgYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCwgd2hpY2gsIGZyYW5rbHksIHN0cmlrZXMgbWUgYXMgbGVzcyBlbGVnYW50IGluIHRoaXMgY29udGV4dCwgZXNwZWNpYWxseSB3aGVuIHdlIGNvbnNpZGVyIHRoZSBub3cgYXZhaWxhYmxlIGBtbWAgYXJndW1lbnQuCgpUaGUga2V5IGNoYW5nZSwgYW5kIHdoYXQgSSYjMzk7bSBmb2N1c2luZyBvbiwgaXMgdGhhdCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgKm5vdyogdGFrZXMgYG1tYCBkaXJlY3RseSBhbmQgc3Vic2VxdWVudGx5IGNoYXJnZXMgYmFzZWQgb24gYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYC4gVGhpcyBzZWVtcyBsaWtlIGEgbW92ZSB0b3dhcmRzIGNvbnNpc3RlbmN5IGFuZCBsaWtlbHkgYSBiZXR0ZXIsIG1vcmUgYWNjdXJhdGUgbW9kZWwuIFRoZSBmYWN0IHRoYXQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gICphbHNvKiB0YWtlcyB0aGUgYG1tYCBzdHJ1Y3R1cmUgZnVydGhlciBzb2xpZGlmaWVzIG15IHRob3VnaHQgcHJvY2VzcyBhbmQgbWFrZXMgdGhpcyBhIHZlcnkgaW50ZXJlc3RpbmcgcmVmYWN0b3JpbmcsIGlmIHRoYXQgaXMgaW4gZmFjdCB0aGUgY2FzZS4KCk5vdyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0FyZSB0aGVyZSBvdGhlciBwbGFjZXMgaW4gdGhlIGNvZGUgdGhhdCBhcmUgc2ltaWxhcj8gTWF5YmUgc29tZSB0aGF0IGhhdmUgbm90IGJlZW4gbW9kaWZpZWQgeWV0PyYjMzQ7IFRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgaW1wcm92ZW1lbnQsIEkgbmVlZCBhIGJyb2FkZXIgdmlldy4gSSYjMzk7bSBnb2luZyB0byBzY2FuIHRoZSBjb2RlYmFzZSBmb3IgYWxsIGluc3RhbmNlcyBvZiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuIExldCYjMzk7cyBzZWUgd2hhdCB0dXJucyB1cCBpbiB0aGUgZ3JlcC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzZW5zZSBvZiB0aGUgYmVmb3JlLWFuZC1hZnRlciBhbmQgYW55IGZ1cnRoZXIgcG90ZW50aWFsIG9wcG9ydHVuaXRpZXMgZm9yIHRoaXMgdHlwZSBvZiBjbGVhbi11cCBhbmQgY29kZSBpbXByb3ZlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE4MT1hcmUgYWxsb2NhdGVkIGFuZCBpbnN0YW50aWF0ZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgbWFwcGluZy4gIFRoZSBhbGxvY2F0aW9uXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4MjppcyBwZXJmb3JtZWQgd2l0aGluIHRoZSByb3V0aW5lIGFsbG9jX2h1Z2V0bGJfZm9saW8oKTo6XG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4My1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg0Olx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODUtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGF2b2lkX3Jlc2VydmUpXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4Ni1cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg3OmFsbG9jX2h1Z2V0bGJfZm9saW8gaXMgcGFzc2VkIGEgVk1BIHBvaW50ZXIgYW5kIGEgdmlydHVhbCBhZGRyZXNzLCBzbyBpdCBjYW5cbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg4LWNvbnN1bHQgdGhlIHJlc2VydmF0aW9uIG1hcCB0byBkZXRlcm1pbmUgaWYgYSByZXNlcnZhdGlvbiBleGlzdHMuICBJbiBhZGRpdGlvbixcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg5OmFsbG9jX2h1Z2V0bGJfZm9saW8gdGFrZXMgdGhlIGFyZ3VtZW50IGF2b2lkX3Jlc2VydmUgd2hpY2ggaW5kaWNhdGVzIHJlc2VydmVzXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE5MC1zaG91bGQgbm90IGJlIHVzZWQgZXZlbiBpZiBpdCBhcHBlYXJzIHRoZXkgaGF2ZSBiZWVuIHNldCBhc2lkZSBmb3IgdGhlXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0yMDc9aXMgY2FsbGVkLiAgVGhpcyByb3V0aW5lIHRha2VzIHR3byBhcmd1bWVudHMgcmVsYXRlZCB0byByZXNlcnZhdGlvbnM6XG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDktLSBhdm9pZF9yZXNlcnZlLCB0aGlzIGlzIHRoZSBzYW1lIHZhbHVlL2FyZ3VtZW50IHBhc3NlZCB0b1xuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMTA6ICBhbGxvY19odWdldGxiX2ZvbGlvKCkuXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIxMS0tIGNoZywgZXZlbiB0aG91Z2ggdGhpcyBhcmd1bWVudCBpcyBvZiB0eXBlIGxvbmcgb25seSB0aGUgdmFsdWVzIDAgb3IgMSBhcmVcbi0tXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTI0Nz1JdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSByZXNlcnZlIG1hcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRoZSBjYWxsXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjI0ODp0byB2bWFfbmVlZHNfcmVzZXJ2YXRpb24oKSBhdCB0aGUgYmVnaW5uaW5nIG9mIGFsbG9jX2h1Z2V0bGJfZm9saW8oKSBhbmQgdGhlXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTI0OS1jYWxsIHRvIHZtYV9jb21taXRfcmVzZXJ2YXRpb24oKSBhZnRlciB0aGUgZm9saW8gd2FzIGFsbG9jYXRlZC4gIFRoaXMgd291bGRcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0xMTY9SFBBR0VfUkVTVl9PV05FUuagh+W/l+iiq+iuvue9ru+8jOS7peihqOaYjuivpVZNQeaLpeaciemihOeVmeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0NS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE0NjrlvZPkuI7pooTnlZnnm7jlhbPnmoTlt6jpobXlnKjnm7jlupTnmoTmmKDlsITkuK3ooqvliIbphY3lkozlrp7kvovljJbml7bvvIzpooTnlZnlsLHooqvmtojogJfkuobjgILor6XliIbphY3mmK/lnKjlh73mlbBhbGxvY19odWdldGxiX2ZvbGlvLi4uXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNDct5Lit6L+b6KGM55qEOjpcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0OC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE0OTpcdHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1MC1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgYXZvaWRfcmVzZXJ2ZSlcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1MS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MjphbGxvY19odWdldGxiX2ZvbGlv6KKr5Lyg6YCS57uZ5LiA5LiqVk1B5oyH6ZKI5ZKM5LiA5Liq6Jma5ouf5Zyw5Z2A77yM5Zug5q2k5a6D5Y+v5Lul5p+l6ZiF6aKE55WZ5pig5bCE5Lul56Gu5a6a5piv5ZCm5a2Y5Zyo6aKE55WZ44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNTM65q2k5aSW77yMYWxsb2NfaHVnZXRsYl9mb2xpb+mcgOimgeS4gOS4quWPguaVsGF2b2lkX3Jlc2VydmXvvIzor6Xlj4LmlbDooajnpLrljbPkvb/nnIvotbfmnaXlt7Lnu4/kuLrmjIflrprnmoTlnLDlnYDpooTnlZnkuoZcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1NC3pooTnlZnvvIzkuZ/kuI3lupTor6Xkvb/nlKjpooTnlZnjgIJhdm9pZF9yZXNlcnZl5Y+C5pWw5pyA5bi46KKr55So5LqO5YaZ5pe25ou36LSd5ZKM6aG16Z2i6L+B56e755qE5oOF5Ya15LiL77yM5Y2z546w5pyJ6aG16Z2i55qE6aKdXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTYwPXZtYV9uZWVkc19yZXNlcnZhdGlvbigp6L+U5Zue55qE5YC86YCa5bi45Li6MOaIljHjgILlpoLmnpzor6XlnLDlnYDlrZjlnKjpooTnlZnvvIzliJnkuLow77yM5aaC5p6c5LiN5a2Y5Zyo6aKE55WZ77yM5YiZ5Li6MeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2NS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE2NjotIGF2b2lkX3Jlc2VydmXvvIzov5nmmK/kvKDpgJLnu5lhbGxvY19odWdldGxiX2ZvbGlvKCnnmoTlkIzkuIDkuKrlgLwv5Y+C5pWw44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xNjctLSBjaGfvvIzlsL3nrqHov5nkuKrlj4LmlbDnmoTnsbvlnovmmK9sb25n77yM5L2G5Y+q5pyJMOaIljHnmoTlgLzooqvkvKDpgJLnu5lkZXF1ZXVlX2h1Z2VfcGFnZV92bWHjgILlpoLmnpzor6XlgLzkuLow77yMXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTkzPVNldFBhZ2VQcml2YXRlKHBhZ2Up5ZKMcmVzdl9odWdlX3BhZ2VzLeOAglxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwMi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjIwMzrlnKhhbGxvY19odWdldGxiX2ZvbGlvKCnlvIDlp4vosIPnlKh2bWFfbmVlZHNfcmVzZXJ2YXRpb24oKeWSjOmhtemdouWIhumFjeWQjuiwg+eUqFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjA0LXZtYV9jb21taXRfcmVzZXJ2YXRpb24oKeS5i+mXtO+8jOmihOeVmeaYoOWwhOacieWPr+iDveiiq+aUueWPmOOAguWmguaenGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc+WcqOWFsVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTcwMD1zdGF0aWMgbG9uZyBodWdldGxiZnNfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTItXHRcdCAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzkzOlx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oXHUwMDI2cHNldWRvX3ZtYSwgYWRkciwgZmFsc2UpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzk0LVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgxMy1cdFx0ICogZm9saW9fdW5sb2NrIGJlY2F1c2UgbG9ja2VkIGJ5IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoKVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODE0Olx0XHQgKiBmb2xpb19wdXQoKSBkdWUgdG8gcmVmZXJlbmNlIGZyb20gYWxsb2NfaHVnZXRsYl9mb2xpbygpXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MTUtXHRcdCAqL1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwMT1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDMtXHRcdHU4IGFsbG9jX2ZsYWdzKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwNDpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDUtXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA2OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNy1cdFx0XHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwOC1cdFx0XHRcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA5OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzEwLVx0XHRcdFx0XHQgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEyMz1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTI2LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMjgtXHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMTM0PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzU6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEzNi1cdFx0XHQgICAgbm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExNDE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTE0MjphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTE0My1cdFx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jPTIxNDI9c3RydWN0IGZvbGlvICphbGxvY19idWRkeV9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTIxNjUtXG5tbS9odWdldGxiLmM6MjE2NjpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbm1tL2h1Z2V0bGIuYy0yMTY3LVx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vaHVnZXRsYi5jLTIxODYtLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXG5tbS9odWdldGxiLmM6MjE4NzpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXG5tbS9odWdldGxiLmMtMjE4OC1cdFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrLCBib29sIGFsbG93X2FsbG9jX2ZhbGxiYWNrKVxuLS1cbm1tL2h1Z2V0bGIuYz0yNTIwPXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjUyNy0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHRvIHJlc3RvcmUgcmVzZXJ2YXRpb24gaW5mb3JtYXRpb24gb24gZXJyb3IgcGF0aHMuXG5tbS9odWdldGxiLmM6MjUyODogKiBJdCBzaG91bGQgT05MWSBiZSBjYWxsZWQgZm9yIGZvbGlvcyBhbGxvY2F0ZWQgdmlhIGFsbG9jX2h1Z2V0bGJfZm9saW8oKSxcbm1tL2h1Z2V0bGIuYy0yNTI5LSAqIGFuZCB0aGUgaHVnZXRsYiBtdXRleCBzaG91bGQgcmVtYWluIGhlbGQgd2hlbiBjYWxsaW5nIHRoaXMgcm91dGluZS5cbi0tXG5tbS9odWdldGxiLmMtMjUzNC0gKiAyKSBObyByZXNlcnZhdGlvbiB3YXMgaW4gcGxhY2UgZm9yIHRoZSBwYWdlLCBzbyBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBpc1xubW0vaHVnZXRsYi5jOjI1MzU6ICogICAgbm90IHNldC4gIEhvd2V2ZXIsIGFsbG9jX2h1Z2V0bGJfZm9saW8gYWx3YXlzIHVwZGF0ZXMgdGhlIHJlc2VydmUgbWFwLlxubW0vaHVnZXRsYi5jLTI1MzYtICpcbi0tXG5tbS9odWdldGxiLmMtMjU0My0gKlxubW0vaHVnZXRsYi5jOjI1NDQ6ICogSW4gY2FzZSAyLCBzaW1wbHkgdW5kbyByZXNlcnZlIG1hcCBtb2RpZmljYXRpb25zIGRvbmUgYnkgYWxsb2NfaHVnZXRsYl9mb2xpby5cbm1tL2h1Z2V0bGIuYy0yNTQ1LSAqL1xubW0vaHVnZXRsYi5jPTI1NDY9dm9pZCByZXN0b3JlX3Jlc2VydmVfb25fZXJyb3Ioc3RydWN0IGhzdGF0ZSAqaCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTI1NzItXHRcdFx0ICogVGhpcyBpbmRpY2F0ZXMgdGhlcmUgaXMgYW4gZW50cnkgaW4gdGhlIHJlc2VydmUgbWFwXG5tbS9odWdldGxiLmM6MjU3MzpcdFx0XHQgKiBub3QgYWRkZWQgYnkgYWxsb2NfaHVnZXRsYl9mb2xpby4gIFdlIGtub3cgaXQgd2FzIGFkZGVkXG5tbS9odWdldGxiLmM6MjU3NDpcdFx0XHQgKiBiZWZvcmUgdGhlIGFsbG9jX2h1Z2V0bGJfZm9saW8gY2FsbCwgb3RoZXJ3aXNlXG5tbS9odWdldGxiLmMtMjU3NS1cdFx0XHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxuLS1cbm1tL2h1Z2V0bGIuYz0yOTE2PXR5cGVkZWYgZW51bSB7XG4tLVxubW0vaHVnZXRsYi5jLTI5NDEtICovXG5tbS9odWdldGxiLmM6Mjk0MjpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdldGxiLmMtMjk0My1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpXG4tLVxubW0vaHVnZXRsYi5jPTQ4ODc9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxuLS1cbm1tL2h1Z2V0bGIuYy01MDA4LVx0XHRcdFx0LyogRG8gbm90IHVzZSByZXNlcnZlIGFzIGl0JiMzOTtzIHByaXZhdGUgb3duZWQgKi9cbm1tL2h1Z2V0bGIuYzo1MDA5Olx0XHRcdFx0bmV3X2ZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBhZGRyLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNTAxMC1cdFx0XHRcdGlmIChJU19FUlIobmV3X2ZvbGlvKSkge1xuLS1cbm1tL2h1Z2V0bGIuYz01NDgwPXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfd3Aoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vaHVnZXRsYi5jLTU1NjEtXHRzcGluX3VubG9jayh2bWYtXHUwMDNlcHRsKTtcbm1tL2h1Z2V0bGIuYzo1NTYyOlx0bmV3X2ZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCBjb3dfZnJvbV9vd25lcik7XG5tbS9odWdldGxiLmMtNTU2My1cbi0tXG5tbS9odWdldGxiLmM9NTc1Mj1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vaHVnZXRsYi5jLTU4MjEtXG5tbS9odWdldGxiLmM6NTgyMjpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy01ODIzLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLS1cbm1tL2h1Z2V0bGIuYz02MDAyPXZtX2ZhdWx0X3QgaHVnZXRsYl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTYyMzctICovXG5tbS9odWdldGxiLmM6NjIzODpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3ZtYShzdHJ1Y3QgaHN0YXRlICpoLFxubW0vaHVnZXRsYi5jLTYyMzktXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4tLVxubW0vaHVnZXRsYi5jLTYyNTQtXHQgKi9cbm1tL2h1Z2V0bGIuYzo2MjU1Olx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5vZGUsIG5vZGVtYXNrLCBnZnBfbWFzaywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTYyNTYtXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xuLS1cbm1tL2h1Z2V0bGIuYz02MjY1PWludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG4tLVxubW0vaHVnZXRsYi5jLTYzMjEtXG5tbS9odWdldGxiLmM6NjMyMjpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGRzdF9hZGRyLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNjMyMy1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5tbS9odWdldGxiLmMtNjM0Ny1cdFx0XHQgKi9cbm1tL2h1Z2V0bGIuYzo2MzQ4Olx0XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb192bWEoaCwgZHN0X3ZtYSwgZHN0X2FkZHIpO1xubW0vaHVnZXRsYi5jLTYzNDktXHRcdFx0aWYgKCFmb2xpbykge1xuLS1cbm1tL2h1Z2V0bGIuYy02MzY4LVxubW0vaHVnZXRsYi5jOjYzNjk6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTYzNzAtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jPTY2NjI9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5tbS9odWdldGxiLmMtNjc4Mi1cdFx0XHQgKiBtYXAgYmV0d2VlbiByZWdpb25fY2hnIGFuZCByZWdpb25fYWRkLiAgVGhpc1xubW0vaHVnZXRsYi5jOjY3ODM6XHRcdFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3Rcbm1tL2h1Z2V0bGIuYy02Nzg0LVx0XHRcdCAqIHRoZSBzdWJwb29sIGFuZCByZXNlcnZlIGNvdW50cyBtb2RpZmllZCBhYm92ZVxuLS1cbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuLS1cbm1tL21lbWZkLmMtOTMtXG5tbS9tZW1mZC5jOjk0Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShoLFxubW0vbWVtZmQuYy05NS1cdFx0XHRcdFx0XHQgICAgbnVtYV9ub2RlX2lkKCksXG4tLVxubW0vbWVtcG9saWN5LmM9MTQzNz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0X2J5X21wb2woc3RydWN0IGZvbGlvICpzcmMsXG4tLVxubW0vbWVtcG9saWN5LmMtMTQ1Ni1cdFx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIGlseCwgXHUwMDI2bmlkKTtcbm1tL21lbXBvbGljeS5jOjE0NTc6XHRcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCwgbm9kZW1hc2ssIGdmcCxcbm1tL21lbXBvbGljeS5jLTE0NTgtXHRcdFx0XHRodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKE1SX01FTVBPTElDWV9NQklORCkpO1xuLS1cbm1tL21pZ3JhdGUuYz0yMTk3PXN0cnVjdCBmb2xpbyAqYWxsb2NfbWlncmF0aW9uX3RhcmdldChzdHJ1Y3QgZm9saW8gKnNyYywgdW5zaWduZWQgbG9uZyBwcml2YXRlKVxuLS1cbm1tL21pZ3JhdGUuYy0yMjE0LVx0XHRnZnBfbWFzayA9IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soaCwgZ2ZwX21hc2spO1xubW0vbWlncmF0ZS5jOjIyMTU6XHRcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCxcbm1tL21pZ3JhdGUuYy0yMjE2LVx0XHRcdFx0XHRcdG10Yy1cdTAwM2VubWFzaywgZ2ZwX21hc2ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDE1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGh1Z2V0bGJmc19mYWxsb2NhdGUqKgoKT2theSwgdGltZSB0byBkaXNzZWN0IGBodWdldGxiZnNfZmFsbG9jYXRlYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHNvIEkmIzM5O2xsIHplcm8gaW4gb24gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgZ3JhYiBsaW5lcyA3NzAgdGhyb3VnaCA4MDUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGNodW5rIG9mIGNvbnRleHQgYXJvdW5kIGl0cyBjb3JlIGxvZ2ljLiBJJiMzOTttIGhvcGluZyB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIHByZS1hbGxvY2F0aW5nIHNwYWNlIHdpdGhpbiB0aGUgaHVnZSBwYWdlIGZpbGUgc3lzdGVtIOKAkyBwYXJ0aWN1bGFybHkgd2hlcmUgaXQgaGFuZGxlcyBibG9jayBhbGxvY2F0aW9uIGFuZCBwb3RlbnRpYWwgZXJyb3Igc2NlbmFyaW9zLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbiBtZWNoYW5pc21zIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgY2xldmVybmVzcyBpbiBob3cgaXQgYWRkcmVzc2VzIGZyYWdtZW50YXRpb24gaXNzdWVzLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc2VjdGlvbiByZXZlYWxzIHRoZSBrZXkgb3BlcmF0aW9uYWwgcGF0dGVybnMgYW5kIGhvdyBpdCBoYW5kbGVzIHBvdGVudGlhbCBmYWlsdXJlcyBlbGVnYW50bHksIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlc2UgbGFyZ2UgcGFnZXMuIEkgYW50aWNpcGF0ZSBJIHNob3VsZCBiZSBhYmxlIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIGl0cyBwdXJwb3NlIGZyb20gdGhpcyBzZWdtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NzA6XHRcdFx0LyogYWRkciBpcyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgZmlsZSAoemVybyBiYXNlZCkgKi9cbiA3NzE6XHRcdFx0YWRkciA9IGluZGV4ICogaHBhZ2Vfc2l6ZTtcbiA3NzI6XHRcbiA3NzM6XHRcdFx0LyogbXV0ZXggdGFrZW4gaGVyZSwgZmF1bHQgcGF0aCBhbmQgaG9sZSBwdW5jaCAqL1xuIDc3NDpcdFx0XHRoYXNoID0gaHVnZXRsYl9mYXVsdF9tdXRleF9oYXNoKG1hcHBpbmcsIGluZGV4KTtcbiA3NzU6XHRcdFx0bXV0ZXhfbG9jayhcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcbiA3NzY6XHRcbiA3Nzc6XHRcdFx0LyogU2VlIGlmIGFscmVhZHkgcHJlc2VudCBpbiBtYXBwaW5nIHRvIGF2b2lkIGFsbG9jL2ZyZWUgKi9cbiA3Nzg6XHRcdFx0Zm9saW8gPSBmaWxlbWFwX2dldF9mb2xpbyhtYXBwaW5nLCBpbmRleCBcdTAwM2NcdTAwM2MgaHVnZV9wYWdlX29yZGVyKGgpKTtcbiA3Nzk6XHRcdFx0aWYgKCFJU19FUlIoZm9saW8pKSB7XG4gNzgwOlx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA3ODE6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gNzgyOlx0XHRcdFx0Y29udGludWU7XG4gNzgzOlx0XHRcdH1cbiA3ODQ6XHRcbiA3ODU6XHRcdFx0LypcbiA3ODY6XHRcdFx0ICogQWxsb2NhdGUgZm9saW8gd2l0aG91dCBzZXR0aW5nIHRoZSBhdm9pZF9yZXNlcnZlIGFyZ3VtZW50LlxuIDc4NzpcdFx0XHQgKiBUaGVyZSBjZXJ0YWlubHkgYXJlIG5vIHJlc2VydmVzIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiA3ODg6XHRcdFx0ICogcHNldWRvX3ZtYS4gIEhvd2V2ZXIsIHRoZXJlIGNvdWxkIGJlIHNoYXJlZCBtYXBwaW5ncyB3aXRoXG4gNzg5Olx0XHRcdCAqIHJlc2VydmVzIGZvciB0aGUgZmlsZSBhdCB0aGUgaW5vZGUgbGV2ZWwuICBJZiB3ZSBmYWxsb2NhdGVcbiA3OTA6XHRcdFx0ICogZm9saW9zIGluIHRoZXNlIGFyZWFzLCB3ZSBuZWVkIHRvIGNvbnN1bWUgdGhlIHJlc2VydmVzXG4gNzkxOlx0XHRcdCAqIHRvIGtlZXAgcmVzZXJ2YXRpb24gYWNjb3VudGluZyBjb25zaXN0ZW50LlxuIDc5MjpcdFx0XHQgKi9cbiA3OTM6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKFx1MDAyNnBzZXVkb192bWEsIGFkZHIsIGZhbHNlKTtcbiA3OTQ6XHRcdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbiA3OTU6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gNzk2Olx0XHRcdFx0ZXJyb3IgPSBQVFJfRVJSKGZvbGlvKTtcbiA3OTc6XHRcdFx0XHRnb3RvIG91dDtcbiA3OTg6XHRcdFx0fVxuIDc5OTpcdFx0XHRmb2xpb196ZXJvX3VzZXIoZm9saW8sIGFkZHIpO1xuIDgwMDpcdFx0XHRfX2ZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIDgwMTpcdFx0XHRlcnJvciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sIG1hcHBpbmcsIGluZGV4KTtcbiA4MDI6XHRcdFx0aWYgKHVubGlrZWx5KGVycm9yKSkge1xuIDgwMzpcdFx0XHRcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBcdTAwMjZwc2V1ZG9fdm1hLCBhZGRyLCBmb2xpbyk7XG4gODA0Olx0XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiA4MDU6XHRcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XG4gODA2Olx0XHRcdFx0Z290byBvdXQ7XG4gODA3Olx0XHRcdH1cbiA4MDg6XHRcbiA4MDk6XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM5MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpdmluZyBpbnRvIGh1Z2V0bGJmcyBhbmQgZmFsbG9jYXRlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZSBgaHVnZXRsYmZzYCBjb2RlIGFnYWluLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmYWxsb2NhdGVgLiBJIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGEgYHBzZXVkb192bWFgIHdpdGhpbiBgaHVnZXRsYmZzX2ZhbGxvY2F0ZWAgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zLiBUaW1lIHRvIHplcm8gaW4gb24gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYHBzZXVkb192bWFgIGlzIGJlaW5nIGluaXRpYWxpemVkIGFuZCB3aGF0IHJvbGUgaXQgcGxheXMgaW4gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gTGV0JiMzOTtzIGp1bXAgdG8gbGluZXMgNzIwLTc3MCBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgIGFuZCBzZWUgd2hhdCB0aGUgY29kZSBpcyB0ZWxsaW5nIG1lIGRpcmVjdGx5LiBJJiMzOTttIGV4cGVjdGluZyBzb21lIGludGVyZXN0aW5nIGluaXRpYWxpemF0aW9uIGxvZ2ljIGhlcmUsIGFuZCBob3BlZnVsbHksIGl0JiMzOTtsbCBwcm92aWRlIGluc2lnaHRzIGludG8gdGhlIHNwZWNpZmljIG1lbW9yeSBtYXBwaW5nIHRlY2huaXF1ZXMgdGhhdCBgaHVnZXRsYmZzYCB1c2VzIGR1cmluZyBgZmFsbG9jYXRlYC4gSSYjMzk7bSByZWFkeSB0byBwYXJzZSB0aGUgc3BlY2lmaWNzIGFuZCBzdGFydCBwaWVjaW5nIHRvZ2V0aGVyIHRoZSBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdFx0Z290byBvdXRfbm9sb2NrO1xuIDcyMTpcdFx0fVxuIDcyMjpcdFxuIDcyMzpcdFx0LypcbiA3MjQ6XHRcdCAqIERlZmF1bHQgcHJlYWxsb2NhdGUgY2FzZS5cbiA3MjU6XHRcdCAqIEZvciB0aGlzIHJhbmdlLCBzdGFydCBpcyByb3VuZGVkIGRvd24gYW5kIGVuZCBpcyByb3VuZGVkIHVwXG4gNzI2Olx0XHQgKiBhcyB3ZWxsIGFzIGJlaW5nIGNvbnZlcnRlZCB0byBwYWdlIG9mZnNldHMuXG4gNzI3Olx0XHQgKi9cbiA3Mjg6XHRcdHN0YXJ0ID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBocGFnZV9zaGlmdDtcbiA3Mjk6XHRcdGVuZCA9IChvZmZzZXQgJiM0MzsgbGVuICYjNDM7IGhwYWdlX3NpemUgLSAxKSBcdTAwM2VcdTAwM2UgaHBhZ2Vfc2hpZnQ7XG4gNzMwOlx0XG4gNzMxOlx0XHRpbm9kZV9sb2NrKGlub2RlKTtcbiA3MzI6XHRcbiA3MzM6XHRcdC8qIFdlIG5lZWQgdG8gY2hlY2sgcmxpbWl0IGV2ZW4gd2hlbiBGQUxMT0NfRkxfS0VFUF9TSVpFICovXG4gNzM0Olx0XHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIG9mZnNldCAmIzQzOyBsZW4pO1xuIDczNTpcdFx0aWYgKGVycm9yKVxuIDczNjpcdFx0XHRnb3RvIG91dDtcbiA3Mzc6XHRcbiA3Mzg6XHRcdGlmICgoaW5mby1cdTAwM2VzZWFscyBcdTAwMjYgRl9TRUFMX0dST1cpIFx1MDAyNlx1MDAyNiBvZmZzZXQgJiM0MzsgbGVuIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbiA3Mzk6XHRcdFx0ZXJyb3IgPSAtRVBFUk07XG4gNzQwOlx0XHRcdGdvdG8gb3V0O1xuIDc0MTpcdFx0fVxuIDc0MjpcdFxuIDc0MzpcdFx0LypcbiA3NDQ6XHRcdCAqIEluaXRpYWxpemUgYSBwc2V1ZG8gdm1hIGFzIHRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGh1Z2UgcGFnZVxuIDc0NTpcdFx0ICogYWxsb2NhdGlvbiByb3V0aW5lcy5cbiA3NDY6XHRcdCAqL1xuIDc0NzpcdFx0dm1hX2luaXQoXHUwMDI2cHNldWRvX3ZtYSwgbW0pO1xuIDc0ODpcdFx0dm1fZmxhZ3NfaW5pdChcdTAwMjZwc2V1ZG9fdm1hLCBWTV9IVUdFVExCIHwgVk1fTUFZU0hBUkUgfCBWTV9TSEFSRUQpO1xuIDc0OTpcdFx0cHNldWRvX3ZtYS52bV9maWxlID0gZmlsZTtcbiA3NTA6XHRcbiA3NTE6XHRcdGZvciAoaW5kZXggPSBzdGFydDsgaW5kZXggXHUwMDNjIGVuZDsgaW5kZXgmIzQzOyYjNDM7KSB7XG4gNzUyOlx0XHRcdC8qXG4gNzUzOlx0XHRcdCAqIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHZhZGRyIHdoZXJlIHRoZSBwYWdlIGlzIGJlaW5nXG4gNzU0Olx0XHRcdCAqIGZhdWx0ZWQgaW4sIGJ1dCB3ZSBoYXZlIG5vIHZhZGRyIGhlcmUuXG4gNzU1Olx0XHRcdCAqL1xuIDc1NjpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIDc1NzpcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gNzU4Olx0XG4gNzU5Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEh1Z2V0bGJmcyBhbmQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBodWdldGxiZnNfZmFsbG9jYXRlYCBhbmQgdGhlIGNhbGwgdG8gYHZtYV9pbml0KCZhbXA7cHNldWRvX3ZtYSwgbW0pYC4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBgbW1gIGluIHRoYXQgY29udGV4dCBpcyBgY3VycmVudC0mZ3Q7bW1gLCBhbmQgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgcXVlc3Rpb25zIGluIG15IG1pbmQuIFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgY2FsbGluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIHdoYXQgdmlydHVhbCBtZW1vcnkgYXJlYXMgKFZNQXMpIGFyZSBwYXNzZWQ/IExldCYjMzk7cyBkaWcgaW50byBgbW0vaHVnZXRsYi5jYC4KClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgY29weV9odWdldGxiX3BhZ2VfcmFuZ2VgIGR1cmluZyBhIGZvcmsgcGFzc2VzIGBkc3Rfdm1hYCDigJMgbWVhbmluZyBgdm1hLSZndDt2bV9tbWAgaXMgdGhlIGRlc3RpbmF0aW9uIG1lbW9yeSBtYXAsIHdoaWNoIG1ha2VzIHNlbnNlLiBUaGVuIHdlJiMzOTt2ZSBnb3QgYGh1Z2V0bGJfd3BgIGR1cmluZyBhIHdyaXRlIGZhdWx0LCB3aGljaCBwYXNzZXMgYSBgdm1hYCwgc28gYWdhaW4sIGB2bWEtJmd0O3ZtX21tYCBpcyByZWxldmFudC4gYGh1Z2V0bGJfbm9fcGFnZWAgZHVyaW5nIGEgZmF1bHQgYWxzbyB0YWtlcyBhIGB2bWFgLCBzYW1lIHNpdHVhdGlvbi4gYGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZWAgaXMgdHJpZ2dlcmVkIGJ5IHVzZXJmYXVsdGZkIGFuZCBwYXNzZXMgYGRzdF92bWFgLCBhbmQgZmluYWxseSwgdGhlIG9yaWdpbmFsIGBodWdldGxiZnNfZmFsbG9jYXRlYCBjYWxsLCB1c2luZyBgJmFtcDtwc2V1ZG9fdm1hYCwgd2hvc2UgYHZtX21tYCBpcyBgY3VycmVudC0mZ3Q7bW1gLiBUaGF0JiMzOTtzIGEgZ29vZCBvdmVydmlldy4KCk5vdywgbXkgZm9jdXMgc2hpZnRzLiBHaXZlbiB0aGVzZSBkaWZmZXJlbnQgY29udGV4dHMgYW5kIHRoZSBjcnVjaWFsIHJvbGUgb2YgdGhlIG1lbW9yeSBtYXAgKGBtbWApLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW1gIGhhbmRsZXMgYE5VTExgIG9yIG5vbi1gTlVMTGAgbWVtb3J5IG1hcHMuIFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgaW4gdGVybXMgb2YgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzPyBMZXQmIzM5O3MgZ28gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW1gIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGluc2lnaHRzIHdpbGwgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTUwOlx0ICogT2J0YWluIGEgcmVmZXJlbmNlIG9uIG1tLVx1MDAzZW1lbWNnIGFuZCByZXR1cm5zIGl0IGlmIHN1Y2Nlc3NmdWwuIElmIG1tXG4xMTUxOlx0ICogaXMgTlVMTCwgdGhlbiB0aGUgbWVtY2cgaXMgY2hvc2VuIGFzIGZvbGxvd3M6XG4xMTUyOlx0ICogMSkgVGhlIGFjdGl2ZSBtZW1jZywgaWYgc2V0LlxuMTE1MzpcdCAqIDIpIGN1cnJlbnQtXHUwMDNlbW0tXHUwMDNlbWVtY2csIGlmIGF2YWlsYWJsZVxuMTE1NDpcdCAqIDMpIHJvb3QgbWVtY2dcbjExNTU6XHQgKiBJZiBtZW1fY2dyb3VwIGlzIGRpc2FibGVkLCBOVUxMIGlzIHJldHVybmVkLlxuMTE1NjpcdCAqL1xuMTE1NzpcdHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuMTE1ODpcdHtcbjExNTk6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjExNjA6XHRcbjExNjE6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4xMTYyOlx0XHRcdHJldHVybiBOVUxMO1xuMTE2MzpcdFxuMTE2NDpcdFx0LypcbjExNjU6XHRcdCAqIFBhZ2UgY2FjaGUgaW5zZXJ0aW9ucyBjYW4gaGFwcGVuIHdpdGhvdXQgYW5cbjExNjY6XHRcdCAqIGFjdHVhbCBtbSBjb250ZXh0LCBlLmcuIGR1cmluZyBkaXNrIHByb2JpbmdcbjExNjc6XHRcdCAqIG9uIGJvb3QsIGxvb3BiYWNrIElPLCBhY2N0KCkgd3JpdGVzIGV0Yy5cbjExNjg6XHRcdCAqXG4xMTY5Olx0XHQgKiBObyBuZWVkIHRvIGNzc19nZXQgb24gcm9vdCBtZW1jZyBhcyB0aGUgcmVmZXJlbmNlXG4xMTcwOlx0XHQgKiBjb3VudGluZyBpcyBkaXNhYmxlZCBvbiB0aGUgcm9vdCBsZXZlbCBpbiB0aGVcbjExNzE6XHRcdCAqIGNncm91cCBjb3JlLiBTZWUgQ1NTX05PX1JFRi5cbjExNzI6XHRcdCAqL1xuMTE3MzpcdFx0aWYgKHVubGlrZWx5KCFtbSkpIHtcbjExNzQ6XHRcdFx0bWVtY2cgPSBhY3RpdmVfbWVtY2coKTtcbjExNzU6XHRcdFx0aWYgKHVubGlrZWx5KG1lbWNnKSkge1xuMTE3NjpcdFx0XHRcdC8qIHJlbW90ZSBtZW1jZyBtdXN0IGhvbGQgYSByZWYgKi9cbjExNzc6XHRcdFx0XHRjc3NfZ2V0KFx1MDAyNm1lbWNnLVx1MDAzZWNzcyk7XG4xMTc4Olx0XHRcdFx0cmV0dXJuIG1lbWNnO1xuMTE3OTpcdFx0XHR9XG4xMTgwOlx0XHRcdG1tID0gY3VycmVudC1cdTAwM2VtbTtcbjExODE6XHRcdFx0aWYgKHVubGlrZWx5KCFtbSkpXG4xMTgyOlx0XHRcdFx0cmV0dXJuIHJvb3RfbWVtX2Nncm91cDtcbjExODM6XHRcdH1cbjExODQ6XHRcbjExODU6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjExODY6XHRcdGRvIHtcbjExODc6XHRcdFx0bWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fdGFzayhyY3VfZGVyZWZlcmVuY2UobW0tXHUwMDNlb3duZXIpKTtcbjExODg6XHRcdFx0aWYgKHVubGlrZWx5KCFtZW1jZykpXG4xMTg5Olx0XHRcdFx0bWVtY2cgPSByb290X21lbV9jZ3JvdXA7XG4xMTkwOlx0XHR9IHdoaWxlICghY3NzX3RyeWdldChcdTAwMjZtZW1jZy1cdTAwM2Vjc3MpKTtcbjExOTE6XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuMTE5MjpcdFx0cmV0dXJuIG1lbWNnO1xuMTE5MzpcdH1cbjExOTQ6XHRFWFBPUlRfU1lNQk9MKGdldF9tZW1fY2dyb3VwX2Zyb21fbW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY4OAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDI5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBUaGUga2V5IGlzc3VlIGFwcGVhcnMgdG8gYmUgaW5jb3JyZWN0IGFjY291bnRpbmcgaW4gaHVnZSBwYWdlIG1lbW9yeSBjaGFyZ2luZywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIFByZXZpb3VzbHksIHRoaXMgZnVuY3Rpb24gd2FzIHRpZWQgdG8gdGhlIGBjdXJyZW50YCB0YXNrLCB3aGljaCB3b3JrcyBmaW5lIGluIG1hbnkgY2FzZXMuIEhvd2V2ZXIsIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgYGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlYCB3aXRoaW4gYSBmb3JrIChgZHVwX21tYXBgKSBvciB3aXRoIHVzZXJmYXVsdGZkLCB0aGUgYWxsb2NhdGlvbiBpcyBmb3IgYSAqZGlmZmVyZW50KiBtZW1vcnkgc3BhY2UgKGNoaWxkIHByb2Nlc3Mgb3IgdXNlciBzcGFjZSksIG5vdCB0aGUgb3JpZ2luYWwgYGN1cnJlbnRgIHRhc2suIFNvIGNoYXJnaW5nIHRoZSBgY3VycmVudGAgdGFzayBpcyBsb2dpY2FsbHkgd3JvbmcuIFRoZSBwYXRjaCBzaGlmdHMgdGhlIGNoYXJnaW5nIHJlc3BvbnNpYmlsaXR5IHRvIHRoZSBtZW1vcnkgbWFwIChgbW1gKSBvd25lciwgd2hpY2ggbWFrZXMgbW9yZSBzZW5zZSwgYWxpZ25pbmcgd2l0aCB0aGUgYF9fbWVtX2Nncm91cF9jaGFyZ2VgIGZ1bmN0aW9uLiBUaGlzIGNvcnJlY3RzIHRoZSBvd25lciBvZiB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIHdpdGggdGhlIG1lbW9yeSBzcGFjZSB0aGF0JiMzOTtzIHVzaW5nIHRoZSBodWdlIHBhZ2UsIGFuZCBub3QgdGhlIHRhc2sgcGVyZm9ybWluZyB0aGUgaW5pdGlhbCBzeXN0ZW0gY2FsbC4KCk5vdywgc2hvdWxkIHdlIGJvdGhlciBmdXp6aW5nIHRoaXM/IEFic29sdXRlbHkhIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbXMgLSBgbW0vaHVnZXRsYi5jYCBhbmQgYG1tL21lbWNvbnRyb2wuY2AgLSBhbmQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvZGUuIEh1Z2UgcGFnZSBhbGxvY2F0aW9uIGFuZCBtZW1jZyBjaGFyZ2luZyBhcmUgc3RhbmRhcmQsIGVhc2lseSB0cmlnZ2VyZWQgd2l0aGluIHN0YW5kYXJkIFZNL1FFTVUga2VybmVsIGZ1enppbmcgZW52aXJvbm1lbnRzLiBEZWZpbml0ZWx5IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLgoKTmV4dCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIHRvIHRhcmdldCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBzZWFyY2ggZm9yIHJlbGV2YW50IG9wdGlvbnMgcmVsYXRlZCB0byBgaHVnZXRsYmAsIGBtZW1jb250cm9sYCwgYW5kIGFueSBjb25maWd1cmF0aW9ucyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBjZ3JvdXAgaHVnZSBwYWdlIGNoYXJnaW5nLiBUaGlzIHdpbGwgaGVscCByZWZpbmUgdGhlIGZ1enppbmcgdGFyZ2V0IGFuZCBmb2N1cyBvbiB0aGUgaW1wb3J0YW50IGNvZGUgcGF0aHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0hVR0VUTEImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NDcwPWNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcbi0tXG5tbS9LY29uZmlnLTQ3Mi1cbm1tL0tjb25maWc6NDczOmNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXG5tbS9LY29uZmlnLTQ3NC1cdGJvb2xcbm1tL0tjb25maWctNDc1LVxubW0vS2NvbmZpZzo0NzY6Y29uZmlnIEFSQ0hfV0FOVF9IVUdFVExCX1ZNRU1NQVBfUFJFSU5JVFxubW0vS2NvbmZpZy00NzctXHRib29sXG4tLVxubW0vS2NvbmZpZz02OTQ9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4tLVxubW0vS2NvbmZpZy02OTYtXG5tbS9LY29uZmlnOjY5Nzpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNjk4LVx0ZGVmX2Jvb2wgblxuLS1cbm1tL0tjb25maWctNzAwLVx0ICBBbGxvd3MgdGhlIHBhZ2VibG9ja19vcmRlciB2YWx1ZSB0byBiZSBkeW5hbWljIGluc3RlYWQgb2YganVzdCBzdGFuZGFyZFxubW0vS2NvbmZpZzo3MDE6XHQgIEhVR0VUTEJfUEFHRV9PUkRFUiB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBIdWdlVExCIHBhZ2Ugc2l6ZXMgYXZhaWxhYmxlXG5tbS9LY29uZmlnLTcwMi1cdCAgb24gYSBwbGF0Zm9ybS5cbi0tXG5tbS9LY29uZmlnPTc4Mj1jb25maWcgTk9NTVVfSU5JVElBTF9UUklNX0VYQ0VTU1xuLS1cbm1tL0tjb25maWctODA5LVxubW0vS2NvbmZpZzo4MTA6Y29uZmlnIEFSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEJcbm1tL0tjb25maWctODExLVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9MTAwMz1jb25maWcgUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVNcbm1tL0tjb25maWc6MTAwNDpcdGRlZl9ib29sIFRSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IEhVR0VUTEJfUEFHRVxubW0vS2NvbmZpZy0xMDA1LVxuLS1cbm1tL0tjb25maWc9MTAwOT1jb25maWcgSEFWRV9HSUdBTlRJQ19GT0xJT1Ncbm1tL0tjb25maWc6MTAxMDpcdGRlZl9ib29sIChIVUdFVExCX1BBR0UgXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIHx8IFxcXG5tbS9LY29uZmlnLTEwMTEtXHRcdCAoWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4ODU5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaHVnZSBwYWdlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgc3RhcnRpbmcgd2l0aCBgbW0vS2NvbmZpZ2AsIGBpbml0L0tjb25maWdgLCBhbmQgYGZzL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgaW5pdGlhbGl6YXRpb24sIGFuZCBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGFuZCBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBgSFVHRVRMQl9QQUdFYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBfSFVHRVRMQmAgb3B0aW9ucyBpbiB0aGVzZSBmaWxlcy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlc2UgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLgoKVGhlbiwgSSYjMzk7bGwgdXNlIGBncmVwYCBhcyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gc2NhbiB0aHJvdWdoIGBmcy9LY29uZmlnYCBhbmQgYGluaXQvS2NvbmZpZ2AgZm9yIGFueSBtZW50aW9ucyBvZiBgSFVHRVRMQmAuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIG9yIGNvbnRleHRzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lLCBhdCBsZWFzdC4gSSYjMzk7bSBob3BpbmcgSSBjYW4gcGllY2UgdG9nZXRoZXIgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIHJlbGV2YW50IG1vZHVsZXMgYW5kIHdoZXJlIHRoZXkgbGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SFVHRVRMQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yMzU9Y29uZmlnIFRNUEZTX1FVT1RBXG4tLVxuZnMvS2NvbmZpZy0yNDYtXG5mcy9LY29uZmlnOjI0Nzpjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbmZzL0tjb25maWctMjQ4LVx0ZGVmX2Jvb2wgblxuZnMvS2NvbmZpZy0yNDktXG5mcy9LY29uZmlnOjI1MDptZW51Y29uZmlnIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNTEtXHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuZnMvS2NvbmZpZzoyNTI6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1My1cdHNlbGVjdCBNRU1GRF9DUkVBVEVcbi0tXG5mcy9LY29uZmlnLTI2MS1cbmZzL0tjb25maWc6MjYyOmlmIEhVR0VUTEJGU1xuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbmZzL0tjb25maWctMjY0LVx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG5mcy9LY29uZmlnLTI2NS1cdGRlZmF1bHQgblxuZnMvS2NvbmZpZzoyNjY6XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI2Ny1cdGhlbHBcbi0tXG5mcy9LY29uZmlnLTI3MC1cdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXG5mcy9LY29uZmlnOjI3MTplbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnOjI3NDpcdGRlZl9ib29sIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzUtXHRzZWxlY3QgWEFSUkFZX01VTFRJXG5mcy9LY29uZmlnLTI3Ni1cbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxuZnMvS2NvbmZpZzoyNzg6XHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcbmZzL0tjb25maWc6Mjc5Olx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXG5mcy9LY29uZmlnLTI4MC1cdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbmZzL0tjb25maWc6MjgxOlx0c2VsZWN0IFNQQVJTRU1FTV9WTUVNTUFQX1BSRUlOSVQgaWYgQVJDSF9XQU5UX0hVR0VUTEJfVk1FTU1BUF9QUkVJTklUXG5mcy9LY29uZmlnLTI4Mi1cbmZzL0tjb25maWc6MjgzOmNvbmZpZyBIVUdFVExCX1BNRF9QQUdFX1RBQkxFX1NIQVJJTkdcbmZzL0tjb25maWc6Mjg0Olx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI4NS1cdGRlcGVuZHMgb24gQVJDSF9XQU5UX0hVR0VfUE1EX1NIQVJFIFx1MDAyNlx1MDAyNiBTUExJVF9QTURfUFRMT0NLU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc5NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIEtlcm5lbCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgTUVNQ0dgIGlzIGJlaW5nIGNvbmZpZ3VyZWQgaW4gdGhpcyBzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBmb3VuZGF0aW9uYWwgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBwbGFjZSB3aGVyZSB0aGUgbWFqb3Iga2VybmVsIGZlYXR1cmVzLCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBidWlsZC10aW1lIG9wdGlvbnMsIGFyZSBkZWZpbmVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBhbmQgaG93LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBjb3JlIGRlZmluaXRpb24sIGRlcGVuZGVuY2llcywgYW5kIHBlcmhhcHMgc29tZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgbWVtb3J5IGNncm91cCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IGZpbGUuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4NC1cbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODYtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwOTMtXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMTA3LVxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwOS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIwNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBjdXJyZW50IHRyYWluIG9mIHRob3VnaHQgbGVhZHMgbWUgdG8gY29uc2lkZXIgYWxsIHJlbGV2YW50IGZhY3RvcnMuIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gWCwgWSwgYW5kIFosIGJ1dCBpdCYjMzk7cyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoIGFuZCBub3QgbWlzcyBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgYENHUk9VUF9IVUdFVExCYCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgaXNzdWUgYXQgaGFuZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gaW50ZWdyYXRlIHRoaXMgY29uc2lkZXJhdGlvbiBpbnRvIHRoZSBvdmVyYWxsIGFuYWx5c2lzIGFuZCBlbnN1cmUgdGhhdCB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaXMgYWxzbyBhc3Nlc3NlZCBhbG9uZ3NpZGUgdGhlIG90aGVyIGNvbnNpZGVyYXRpb25zIHRvIHByb3ZpZGUgdGhlIG1vc3QgY29tcGxldGUgYW5kIGFjY3VyYXRlIGV2YWx1YXRpb24uIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgb2YgdGhpcyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUF9IVUdFVExCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMjgyPWNvbmZpZyBDR1JPVVBfRlJFRVpFUlxuLS1cbmluaXQvS2NvbmZpZy0xMjkyLVxuaW5pdC9LY29uZmlnOjEyOTM6Y29uZmlnIENHUk9VUF9IVUdFVExCXG5pbml0L0tjb25maWctMTI5NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgQ29tcGlsYXRpb24gb2YgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgKioKCk9rYXksIGxldCYjMzk7cyBkaXNzZWN0IHRoZSBjb21waWxhdGlvbiBvZiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEZpcnN0LCBJJiMzOTtsbCBjb25zdWx0IGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIEFoLCB0aGVyZSBpdCBpczogYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBiYXNlZCBvbiBgQ09ORklHX01FTUNHYC4gSWYgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5lZCwgd2UgaGF2ZSBhIHJlYWwgZnVuY3Rpb24gZGVjbGFyYXRpb24uIE90aGVyd2lzZSwgaXQmIzM5O3MganVzdCBhbiBpbmxpbmUgZnVuY3Rpb24gdGhhdCBpbW1lZGlhdGVseSByZXR1cm5zIHplcm8uIFRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLiBOb3csIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGBNYWtlZmlsZWAgZW50cmllcy4KCkkmIzM5O2xsIGNoZWNrIGBtbS9NYWtlZmlsZWAuIEFoLCB5ZXMuIGBodWdldGxiLm9gIGlzIG9ubHkgaW5jbHVkZWQgaWYgYENPTkZJR19IVUdFVExCRlNgIGlzIHNldCwgYW5kIGBtZW1jb250cm9sLm9gIGlzIGluY2x1ZGVkIGlmIGBDT05GSUdfTUVNQ0dgIGlzIHNldC4gVGhpcyBjb25maXJtcyB0aGF0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBpcyBpbmRlZWQgdGllZCB0byB0aGUgbWVtb3J5IGNncm91cCBjb25maWd1cmF0aW9uLiBFeGNlbGxlbnQuIE15IGluaXRpYWwgYW5hbHlzaXMgaXMgc291bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJcXC5vfG1lbWNvbnRyb2xcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXHQmIzQzOz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXG5tbS9NYWtlZmlsZS04Mi1pZmRlZiBDT05GSUdfQ01BXG4tLVxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBicGZfbWVtY29udHJvbC5vXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMzUKCQkJCQkJCW91dHB1dDogMTUzCgkJCQkJCQl0aG91Z2h0czogNjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBhYm91dCBIdWdlVExCIGFuZCBtZW1vcnkgY2dyb3VwIGludGVncmF0aW9uLiAgVGhlIGNvcmUgY29tcG9uZW50cyBhcmUgY2xlYXJseSBgSFVHRVRMQkZTYCBhbmQgYE1FTUNHYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4KCk15IGZpcnN0IHN0ZXAgaXMgdG8gaXNvbGF0ZSB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBJIHdhbnQgdG8gcGlucG9pbnQgd2hlcmUgdGhlIHBhdGNoJiMzOTtzIGNvcmUgbG9naWMgaXMgaW1wbGVtZW50ZWQgYW5kIG1vZGlmaWVkLiBJIHNlZSBgaHVnZXRsYl9hbGxvY19mb2xpb2AgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvYCBpbiBgbW0vaHVnZXRsYi5jYCwgYW5kIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBpbiBgbW0vbWVtY29udHJvbC5jYCBhcmUgZGlyZWN0bHkgYWx0ZXJlZC4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlc2UgZnVuY3Rpb25zIHViaXF1aXRvdXM/IERvIHRoZXkgdG91Y2ggYSB2YXN0IGFtb3VudCBvZiBrZXJuZWwgY29kZSwgb3IgYXJlIHRoZXkgc3BlY2lmaWMgdG8gYSBmZWF0dXJlPyAgVGhhbmtmdWxseSwgdGhlc2UgYXJlIHNwZWNpZmljIGVudHJ5IHBvaW50cyBmb3IgSHVnZVRMQiBhbGxvY2F0aW9uIGFuZCBNZW1jZyBjaGFyZ2luZy4gVGhleSBhcmUgKm5vdCogY2FsbGVkIGJ5IGV2ZXJ5IHNpbmdsZSBwcm9jZXNzLiBUaGlzIGlzIGdvb2QsIGl0IGdpdmVzIG1lIGZvY3VzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aG9zZSBmdW5jdGlvbnM6IGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuICBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgYW55dGhpbmcgZWxzZSBpbiB0aGUgZGlmZiwgYW5kIEkgY29uZmlybSB0aGUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGFsb25nIHdpdGggdGhlIGAuY2AgZmlsZXMgbWVudGlvbmVkIHByZXZpb3VzbHkuCgpJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYW5kIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBhcmUgbm9uLXN0YXRpYyBzeW1ib2xzIGluIGB2bWxpbnV4YC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBleHBvc2VkIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhbmQgaXMgZGVjbGFyZWQgYWNjb3JkaW5nbHkgaW4gdGhlIGhlYWRlcnMsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuCgpUaGVuLCBjb25maXJtaW5nIHRoZSBjb25maWdzOiBgSFVHRVRMQkZTYCBhbmQgYE1FTUNHYCwgbGlrZSBJIHNhaWQuCgpTbywgaW4gc3VtbWFyeSwgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudDoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgIC0gYmVjYXVzZSB3ZSYjMzk7dmUgaWRlbnRpZmllZCBzcGVjaWZpYyBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aCBIdWdlVExCIGFuZCBNZW1jZyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkLgoqICAgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0hVR0VUTEJGUyYjMzQ7LCAmIzM0O01FTUNHJiMzNDtdYCAtIGJlY2F1c2UgdGhlc2UgYXJlIGZ1bmRhbWVudGFsIHRvIHRoZSBwYXRjaCYjMzk7cyBmdW5jdGlvbi4KKiAgIGBGb2N1c1N5bWJvbHM6IFsmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssICYjMzQ7bWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiYjMzQ7XWAgLSB0aGVzZSBhcmUgdGhlIGVudHJ5IHBvaW50cyB0byB0ZXN0LgoqICAgYFJlYXNvbmluZ2A6IENvbmNpc2UgYW5kIGNvbXBsZXRlLgoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcGF0aHMgKGh1Z2V0bGJfYWxsb2NfZm9saW8sIGFsbG9jX2h1Z2V0bGJfZm9saW8sIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIpIHRvIGFzc29jaWF0ZSBhbmQgY2hhcmdlIGh1Z2UgZm9saW9zIGFnYWluc3QgdGhlIHRhcmdldCBtbV9zdHJ1Y3QgcmF0aGVyIHRoYW4gY3VycmVudC4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgY29ycmVjdCBjZ3JvdXAgYWNjb3VudGluZyBhbmQgYXZvaWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcGF0aHMgKGh1Z2V0bGJfYWxsb2NfZm9saW8sIGFsbG9jX2h1Z2V0bGJfZm9saW8sIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIpIHRvIGFzc29jaWF0ZSBhbmQgY2hhcmdlIGh1Z2UgZm9saW9zIGFnYWluc3QgdGhlIHRhcmdldCBtbV9zdHJ1Y3QgcmF0aGVyIHRoYW4gY3VycmVudC4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgY29ycmVjdCBjZ3JvdXAgYWNjb3VudGluZyBhbmQgYXZvaWQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIHJvdXRpbmVzIChgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvYCkgdG8gcGFzcyBhIHRhcmdldCBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIHBvaW50ZXIgYW5kIGNoYXJnZSB0aGUgaHVnZXRsYiBmb2xpbyB0byB0aGUgY2dyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0IG1tIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgKSByYXRoZXIgdGhhbiB0aGUgY3VycmVudCB0YXNrIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgKS5cblxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgcG9pbnRlciBwYXNzaW5nIGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYnVmZmVycywgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM4Njc2NjRjZDFiMmZhNzc5YjQyNDU3MzIwZjRlZWEwZTMyM2MyODUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDA5OjU5OjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAxNmM0YzRjYWExMjZjLi40NWFkYTc1ZGMwNGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtNjk5LDcgJiM0Mzs2OTksOCBAQCBlbnVtIGh1Z2V0bGJfYWxsb2NfZmxhZyB7CiAjZGVmaW5lIEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlMgQklUKEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlNfQklUKQogCiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwKLQkJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKTsKJiM0MzsJCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXU4IGFsbG9jX2ZsYWdzKTsKIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpOwogc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCA3ZDFjMGNlMTg5YTg4Li4zNjJhZjU4ZTUwYTQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtNjYyLDcgJiM0Mzs2NjIsOCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAlyZXR1cm4gX19tZW1fY2dyb3VwX2NoYXJnZShmb2xpbywgbW0sIGdmcCk7CiB9CiAKLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcCk7CiYjNDM7aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiYjNDM7CQkJICAgICAgZ2ZwX3QgZ2ZwKTsKIAogaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCwKIAkJCQkgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTsKQEAgLTExNTYsOSAmIzQzOzExNTcsMTAgQEAgc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApCiYjNDM7c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCQkJICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApCiB7Ci0gICAgICAgIHJldHVybiAwOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMKaW5kZXggNzg1NzcyODQ1Nzk1Mi4uNWFiNWE1MTQxNTc0OCAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuYwpAQCAtMjgxNiw2ICYjNDM7MjgxNiw3IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZCkKICAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uCiAgKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLgogICogQG1wb2xpOiBJbnRlcnByZXRlZCBtZW1vcnkgcG9saWN5IHRvIHVzZSBmb3IgYWxsb2NhdGlvbi4KJiM0MzsgKiBAbW06IE1lbW9yeSBkZXNjcmlwdG9yIG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldC4KICAqIEBhbGxvY19mbGFnczogRmxhZ3MgY29udHJvbGxpbmcgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IuCiAgKgogICogQWxsb2NhdGVzIGEgaHVnZXRsYiBmb2xpbyBhbmQgaGFuZGxlcyBjZ3JvdXAgY2hhcmdpbmcgYW5kIGdsb2JhbCBoc3RhdGUKQEAgLTI4MjYsNyAmIzQzOzI4MjcsOCBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpCiAgKiAgICAgICAgIC1FTk9NRU0gaWYgbWVtIGNncm91cCBjaGFyZ2luZyBmYWlscy4KICAqLwogc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCi0JCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncykKJiM0MzsJCXN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXU4IGFsbG9jX2ZsYWdzKQogewogCWJvb2wgY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgPSBhbGxvY19mbGFncyAmYW1wOwogCQkJCQkgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7CkBAIC0yODgxLDcgJiM0MzsyODgzLDggQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsCiAKIAlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwogCi0JcmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7CiYjNDM7CXJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIG1tLAomIzQzOwkJCQkJZ2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7CiAJLyoKIAkgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmCiAJICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbApAQCAtMzAyMCw3ICYjNDM7MzAyMyw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJLm5vZGVtYXNrID0gbm9kZW1hc2ssCiAJfTsKIAotCWZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCAmYW1wO21wb2xpLCBhbGxvY19mbGFncyk7CiYjNDM7CWZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCAmYW1wO21wb2xpLCB2bWEtJmd0O3ZtX21tLCBhbGxvY19mbGFncyk7CiAKIAltcG9sX2NvbmRfcHV0KG1wb2wpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uMGI3OTViZjFlNmNmMSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNTIzMyw2ICYjNDM7NTIzMyw3IEBAIGludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApCiAvKioKICAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW8KICAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZAomIzQzOyAqIEBtbTogbW0gY29udGV4dCBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXQKICAqIEBnZnA6IHJlY2xhaW0gbW9kZQogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzCkBAIC01MjQyLDkgJiM0Mzs1MjQzLDEwIEBAIGludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApCiAgKiBSZXR1cm5zIEVOT01FTSBpZiB0aGUgbWVtY2cgaXMgYWxyZWFkeSBmdWxsLgogICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy4KICAqLwotaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKQomIzQzO2ludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAomIzQzOwkJCSAgICAgIGdmcF90IGdmcCkKIHsKLQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTsKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7CiAJaW50IHJldCA9IDA7CiAKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNgoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCYjMzk7cyBkaWcgaW4uIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlcyBhcmUgZm9jdXNlZCBhcm91bmQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEludGVyZXN0aW5nLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgaGFzIGJlZW4gdXBkYXRlZDsgaXQgcHJldmlvdXNseSB0b29rIHRoZSBgc3RydWN0IGZvbGlvYCBhbmQgYGdmcF90YCBhcmd1bWVudHMsIGFuZCBnb3QgdGhlIGBzdHJ1Y3QgbWVtX2Nncm91cGAgdXNpbmcgYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYC4gTm93LCBpdCYjMzk7cyB0YWtpbmcgYSBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIGFyZ3VtZW50IGFuZCB1c2luZyBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgIGluc3RlYWQuIFRoYXQmIzM5O3MgYSBzaWduaWZpY2FudCBzaGlmdC4gQW5kIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBoYXMgYmVlbiB1cGRhdGVkIHRvIHRha2UgdGhhdCBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIGFuZCBwYXNzIGl0IHRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gUmlnaHQsIGBhbGxvY19odWdldGxiX2ZvbGlvYCB0aGVuIGNhbGxzIGl0IHdpdGggYHZtYS0mZ3Q7dm1fbW1gLgoKQWxyaWdodCwgSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBzY29wZSBvZiB0aGlzIGNoYW5nZS4gQXJlIHRoZXJlIGFueSBvdGhlciBjYWxsZXJzIG9mIGBodWdldGxiX2FsbG9jX2ZvbGlvYD8gSSYjMzk7bSBnb2luZyB0byBydW4gZ3JlcHBlciB0byBzZWUgd2hlcmUgdGhpcyBpcyB1c2VkIHRocm91Z2hvdXQgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW1wYWN0LiBJIG5lZWQgdG8ga25vdyB0aGUgcmVhY2ggb2YgdGhpcy4gQmFzZWQgb24gdGhvc2UgcmVzdWx0cywgSSBjYW4gbWFrZSBhIGNhbGwgYWJvdXQgZnV6emluZyBuZWVkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9hbGxvY19mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02OTM9ZW51bSBodWdldGxiX2FsbG9jX2ZsYWcge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwMTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMi1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcbi0tXG5tbS9odWdldGxiLmMtMjgxNS0vKipcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXG5tbS9odWdldGxiLmMtMjgxNy0gKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuLS1cbm1tL2h1Z2V0bGIuYy0yODI4LSAqL1xubW0vaHVnZXRsYi5jOjI4Mjk6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMjgzMC1cdFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm1tL2h1Z2V0bGIuYz0yOTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMzAyNS1cbm1tL2h1Z2V0bGIuYzozMDI2Olx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCB2bWEtXHUwMDNldm1fbW0sIGFsbG9jX2ZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0zMDI3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTgzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgQ2FsbGVycyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gbWVtb3J5IGNncm91cCBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgaG93IGl0IGludGVyYWN0cyB3aXRoIEh1Z2VUTEIgcGFnZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBicm9hZGVuIHRoZSBzY29wZSBvZiBpbnZlc3RpZ2F0aW9uIGJleW9uZCB3aGF0IHdlJiMzOTt2ZSBiZWVuIGZvY3VzZWQgb24uIFRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IGNvbnN1bXB0aW9uIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MgcmVsYXRlZCB0byBIdWdlVExCIHVzYWdlIHdpdGhpbiBjZ3JvdXBzLCB3ZSBuZWVkIHRvIHRob3JvdWdobHkgZXhhbWluZSB0aGUgY2FsbCBzaXRlcyBvZiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIFdoYXQgYXJlIHRoZSB2YXJpb3VzIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24/IFRoaXMgd2lsbCBnaXZlIHVzIGEgYmlyZCYjMzk7cy1leWUgdmlldy4gVGhpcyBpcyBrZXkgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGlzc3VlcyBpbiBhY2NvdW50aW5nIG9yIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGFzc29jaWF0ZWQgd2l0aCBIdWdlVExCIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgZXZlcnl0aGluZywgZnJvbSB0aGUgY29yZSBhbGxvY2F0aW9uIHBhdGhzIHRvIHRoZSByZWxlYXNlIG1lY2hhbmlzbXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyByZWFsbHkgZHJpdmluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjYtXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTU0PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE1OS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNjA6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE2MS1cdFx0XHRcdFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vaHVnZXRsYi5jPTI4Mjk9c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTI4ODUtXG5tbS9odWdldGxiLmM6Mjg4NjpcdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIG1tLFxubW0vaHVnZXRsYi5jLTI4ODctXHRcdFx0XHRcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuLS1cbm1tL2h1Z2V0bGIuYy0yODg5LVx0ICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCBOUl9IVUdFVExCIGhlcmUgYmVjYXVzZSBpZlxubW0vaHVnZXRsYi5jOjI4OTA6XHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXG5tbS9odWdldGxiLmMtMjg5MS1cdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxuLS1cbm1tL21lbWNvbnRyb2wuYz01MjIxPWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4tLVxubW0vbWVtY29udHJvbC5jLTUyMzMtLyoqXG5tbS9tZW1jb250cm9sLmM6NTIzNDogKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXG5tbS9tZW1jb250cm9sLmMtNTIzNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0NS0gKi9cbm1tL21lbWNvbnRyb2wuYzo1MjQ2OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxubW0vbWVtY29udHJvbC5jLTUyNDctXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDQzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBDb250cm9sIERldGFpbHMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY2dyb3VwIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBkYXRhIHN0cnVjdHVyZXMuIExldCYjMzk7cyBkaWcgaW50byBgbW0vbWVtY29udHJvbC5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tYCBpbXBsZW1lbnRhdGlvbi4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBoZXJlLCB0aGUgbWV0aG9kIHVzZWQgdG8gbGluayBhIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAoYG1tYCkgdG8gaXRzIGFzc29jaWF0ZWQgY2dyb3VwLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBob3cgdGhlIGtlcm5lbCB0cmFja3MgbWVtb3J5IHVzYWdlIGFuZCBlbmZvcmNlcyBsaW1pdHMgYmFzZWQgb24gY2dyb3VwIGFzc2lnbm1lbnRzLiBJIGFudGljaXBhdGUgaXQgd2lsbCBlaXRoZXIgZGlyZWN0bHkgYWNjZXNzIGEgZmllbGQgd2l0aGluIHRoZSBgbW1fc3RydWN0YCBvciwgbW9yZSBsaWtlbHksIGZvbGxvdyBhIHBvaW50ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IG1haW50YWlucyB0aGlzIHJlbGF0aW9uc2hpcC4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgY29ycmVjdGx5IGF0dHJpYnV0ZXMgbWVtb3J5IHVzYWdlIHRvIGEgcGFydGljdWxhciBjb250cm9sIGdyb3VwLCB3aGljaCBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcyB3aGVuIGRlYWxpbmcgd2l0aCBjZ3JvdXAgbWVtb3J5IG1hbmFnZW1lbnQuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgcG9pbnRzIG9mIGNvbnRlbnRpb24gaW4gdGhpcyBjcml0aWNhbCBwYXRoLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgZXhhbWluZSB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2V0X21lbV9jZ3JvdXBfZnJvbV9tbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM9MTAwMT1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNneF9lbmNsX2dldF9tZW1fY2dyb3VwKHN0cnVjdCBzZ3hfZW5jbCAqZW5jbClcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAxMi1cdGlmICghY3VycmVudF9pc19rc2d4ZCgpKVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jOjEwMTM6XHRcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXHUwMDNlbW0pO1xuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwMTQtXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwMjQtXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTAyNTpcdFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGVuY2xfbW0tXHUwMDNlbW0pO1xuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwMjYtXG4tLVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNDAtXHRpZiAoIW1lbWNnKVxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jOjEwNDE6XHRcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX21tKE5VTEwpO1xuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNDItXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYz0xNTg5PVNZU0NBTExfREVGSU5FMihmYW5vdGlmeV9pbml0LCB1bnNpZ25lZCBpbnQsIGZsYWdzLCB1bnNpZ25lZCBpbnQsIGV2ZW50X2ZfZmxhZ3MpXG4tLVxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xNjg0LVx0Z3JvdXAtXHUwMDNlZmFub3RpZnlfZGF0YS5mbGFncyA9IGZsYWdzIHwgaW50ZXJuYWxfZmxhZ3M7XG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jOjE2ODU6XHRncm91cC1cdTAwM2VtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cdTAwM2VtbSk7XG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTE2ODYtXHRncm91cC1cdTAwM2V1c2VyX25zID0gZ2V0X3VzZXJfbnModXNlcl9ucyk7XG4tLVxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmM9NjQxPXN0YXRpYyBzdHJ1Y3QgZnNub3RpZnlfZ3JvdXAgKmlub3RpZnlfbmV3X2dyb3VwKHVuc2lnbmVkIGludCBtYXhfZXZlbnRzKVxuLS1cbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jLTY2My1cdGdyb3VwLVx1MDAzZW1heF9ldmVudHMgPSBtYXhfZXZlbnRzO1xuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmM6NjY0Olx0Z3JvdXAtXHUwMDNlbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXHUwMDNlbW0pO1xuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMtNjY1LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTc1NT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTc1Ni1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjc1NzpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC03NTgtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTIwNj1zdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTEyMTEtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjEyOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMjEzLXtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTEzOD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICphY3RpdmVfbWVtY2codm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtMTE0Ni0vKipcbm1tL21lbWNvbnRyb2wuYzoxMTQ3OiAqIGdldF9tZW1fY2dyb3VwX2Zyb21fbW06IE9idGFpbiBhIHJlZmVyZW5jZSBvbiBnaXZlbiBtbV9zdHJ1Y3QmIzM5O3MgbWVtY2cuXG5tbS9tZW1jb250cm9sLmMtMTE0OC0gKiBAbW06IG1tIGZyb20gd2hpY2ggbWVtY2cgc2hvdWxkIGJlIGV4dHJhY3RlZC4gSXQgY2FuIGJlIE5VTEwuXG4tLVxubW0vbWVtY29udHJvbC5jLTExNTYtICovXG5tbS9tZW1jb250cm9sLmM6MTE1NzpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL21lbWNvbnRyb2wuYy0xMTU4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMTE5My19XG5tbS9tZW1jb250cm9sLmM6MTE5NDpFWFBPUlRfU1lNQk9MKGdldF9tZW1fY2dyb3VwX2Zyb21fbW0pO1xubW0vbWVtY29udHJvbC5jLTExOTUtXG4tLVxubW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9tZW1jb250cm9sLmMtMjU2NC1cbm1tL21lbWNvbnRyb2wuYzoyNTY1Olx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXHUwMDNlbW0pO1xubW0vbWVtY29udHJvbC5jLTI1NjYtXHRjdXJyZW50LVx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCA9IDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTUyMjE9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcbi0tXG5tbS9tZW1jb250cm9sLmMtNTIyNS1cbm1tL21lbWNvbnRyb2wuYzo1MjI2Olx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbm1tL21lbWNvbnRyb2wuYy01MjI3LVx0cmV0ID0gY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI0Nj1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9tZW1jb250cm9sLmMtNTI0OC17XG5tbS9tZW1jb250cm9sLmM6NTI0OTpcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xubW0vbWVtY29udHJvbC5jLTUyNTAtXHRpbnQgcmV0ID0gMDtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTI4MT1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01MjkyLVx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXHUwMDI2bWVtY2ctXHUwMDNlY3NzKSlcbm1tL21lbWNvbnRyb2wuYzo1MjkzOlx0XHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xubW0vbWVtY29udHJvbC5jLTUyOTQtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5tbS92bXNjYW4uYz0yOTQyPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMjk0NC1cdGludCBuaWQ7XG5tbS92bXNjYW4uYzoyOTQ1Olx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG5tbS92bXNjYW4uYy0yOTQ2LVx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQyOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIEhlYXJ0IG9mIEh1Z2VUTEIgTWVtb3J5IEFjY291bnRpbmcqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUg4oCTIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG1lbW9yeSBjZ3JvdXAgbWFnaWMgaGFwcGVucywgcmlnaHQ/IFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEh1Z2VUTEIgbWVtb3J5IGlzIGNoYXJnZWQuIEkgZmlndXJlIGxpbmVzIDUyNDAgdGhyb3VnaCA1MjcwIGFyZSB0aGUga2V5IGFyZWEgZm9yIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRob3NlIHBhZ2VzLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIHRvIGdldCB0aGlzIGNoYXJnaW5nIGxvZ2ljIHJpZ2h0IGZvciBhY2N1cmF0ZSByZXNvdXJjZSBhY2NvdW50aW5nIGFuZCwgdWx0aW1hdGVseSwgZWZmZWN0aXZlIGNncm91cC1iYXNlZCByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGhlcmUuIEkgZXhwZWN0IHRoZXJlJiMzOTtzIHByb2JhYmx5IHNvbWUgaW50ZXJwbGF5IHdpdGggdGhlIHBhZ2UgdGFibGUgZW50cmllcyBvciBtYXliZSBzb21lIGFjY291bnRpbmcgc3RydWN0dXJlcyBzcGVjaWZpYyB0byBIdWdlVExCLiBMZXQmIzM5O3Mgc3RhcnQgZGlzc2VjdGluZyB0aGUgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTIzMDpcdFx0cmV0dXJuIHJldDtcbjUyMzE6XHR9XG41MjMyOlx0XG41MjMzOlx0LyoqXG41MjM0Olx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xuNTIzNTpcdCAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxuNTIzNjpcdCAqIEBtbTogbW0gY29udGV4dCBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXRcbjUyMzc6XHQgKiBAZ2ZwOiByZWNsYWltIG1vZGVcbjUyMzg6XHQgKlxuNTIzOTpcdCAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYWxsb2NhdGluZyBhIGh1Z2UgcGFnZSBmb2xpbywgYWZ0ZXIgdGhlIHBhZ2UgaGFzXG41MjQwOlx0ICogYWxyZWFkeSBiZWVuIG9idGFpbmVkIGFuZCBjaGFyZ2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBodWdldGxiIGNncm91cFxuNTI0MTpcdCAqIGNvbnRyb2xsZXIgKGlmIGl0IGlzIGVuYWJsZWQpLlxuNTI0MjpcdCAqXG41MjQzOlx0ICogUmV0dXJucyBFTk9NRU0gaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgZnVsbC5cbjUyNDQ6XHQgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLlxuNTI0NTpcdCAqL1xuNTI0NjpcdGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuNTI0NzpcdFx0XHRcdCAgICAgIGdmcF90IGdmcClcbjUyNDg6XHR7XG41MjQ5Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcbjUyNTA6XHRcdGludCByZXQgPSAwO1xuNTI1MTpcdFxuNTI1MjpcdFx0LypcbjUyNTM6XHRcdCAqIEV2ZW4gbWVtY2cgZG9lcyBub3QgYWNjb3VudCBmb3IgaHVnZXRsYiwgd2Ugc3RpbGwgd2FudCB0byB1cGRhdGVcbjUyNTQ6XHRcdCAqIHN5c3RlbS1sZXZlbCBzdGF0cyB2aWEgbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvLiBSZXR1cm4gMCwgYW5kIHNraXBcbjUyNTU6XHRcdCAqIGNoYXJnaW5nIHRoZSBtZW1jZy5cbjUyNTY6XHRcdCAqL1xuNTI1NzpcdFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSB8fCAhbWVtY2dfYWNjb3VudHNfaHVnZXRsYigpIHx8XG41MjU4Olx0XHRcdCFtZW1jZyB8fCAhY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbjUyNTk6XHRcdFx0Z290byBvdXQ7XG41MjYwOlx0XG41MjYxOlx0XHRpZiAoY2hhcmdlX21lbWNnKGZvbGlvLCBtZW1jZywgZ2ZwKSlcbjUyNjI6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjUyNjM6XHRcbjUyNjQ6XHRvdXQ6XG41MjY1Olx0XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG41MjY2Olx0XHRyZXR1cm4gcmV0O1xuNTI2NzpcdH1cbjUyNjg6XHRcbjUyNjk6XHQvKipcbjUyNzA6XHQgKiBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8gLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gZm9yIHN3YXBpbi5cbjUyNzE6XHQgKiBAZm9saW86IHRoZSBmb2xpbyB0byBjaGFyZ2VcbjUyNzI6XHQgKiBAaWQ6IG1lbW9yeSBjZ3JvdXAgaWRcbjUyNzM6XHQgKiBAbW06IG1tIGNvbnRleHQgb2YgdGhlIHZpY3RpbVxuNTI3NDpcdCAqIEBnZnA6IHJlY2xhaW0gbW9kZVxuNTI3NTpcdCAqXG41Mjc2Olx0ICogVGhpcyBmdW5jdGlvbiBjaGFyZ2VzIGEgZm9saW8gYWxsb2NhdGVkIGZvciBzd2FwaW4uIFBsZWFzZSBjYWxsIHRoaXMgYmVmb3JlXG41Mjc3Olx0ICogYWRkaW5nIHRoZSBmb2xpbyB0byB0aGUgc3dhcGNhY2hlLlxuNTI3ODpcdCAqXG41Mjc5Olx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIE90aGVyd2lzZSwgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ4MAoJCQkJCQkJb3V0cHV0OiAyMDYKCQkJCQkJCXRob3VnaHRzOiA1NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXMgYW5kIEtNU0FOIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IHJlZmFjdG9yaW5nIGhvdyBIdWdlVExCIG1lbW9yeSBjaGFyZ2VzIGFyZSBoYW5kbGVkIHdpdGhpbiBjZ3JvdXBzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHRvIHBhc3MgdGhlIGBtbV9zdHJ1Y3RgIGRvd24gdGhlIGNhbGwgY2hhaW4gaW5zdGVhZCBvZiByZWx5aW5nIG9uIHRoZSBgY3VycmVudGAgdGFzayYjMzk7cyBjb250ZXh0LgoKU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGVzZSBrZXkgbW9kaWZpY2F0aW9uczoKCiogICBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgaXMgdXBkYXRlZCB0byB0YWtlIGEgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBhcmd1bWVudC4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBzaGlmdC4gSXQgdGhlbiB1c2VzIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWAgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IG1lbW9yeSBjZ3JvdXAgZm9yIHRoZSB0YXJnZXQgbWVtb3J5IHNwYWNlLCByYXRoZXIgdGhhbiBpbXBsaWNpdGx5IHVzaW5nIHRoZSBjdXJyZW50IHRhc2smIzM5O3MgY2dyb3VwLgoqICAgVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMgb2YgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYWNjb21tb2RhdGUgdGhlIGBtbWAgcG9pbnRlciBhbmQgZW5zdXJlIGl0JiMzOTtzIHByb3BhZ2F0ZWQgZG93biB0aGUgc3RhY2suIGBhbGxvY19odWdldGxiX2ZvbGlvYCBub3cgcGFzc2VzIGB2bWEtJmd0O3ZtX21tYCB0byBgaHVnZXRsYl9hbGxvY19mb2xpb2AuCiogICBUaGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMsIGBsaW51eC9odWdldGxiLmhgIGFuZCBgbGludXgvbWVtY29udHJvbC5oYCwgaGF2ZSBoYWQgdGhlaXIgZGVjbGFyYXRpb25zIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogS01TQU4uIEkmIzM5O3ZlIHRob3JvdWdobHkgcmV2aWV3ZWQgdGhlIHBhdGNoIGFnYWluc3QgdGhlIEtNU0FOIGFuZCBLQVNBTiBjcml0ZXJpYS4KCjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8sIG5vdGhpbmcgbGlrZSB0aGF0IGhlcmUuIFRoaXMgaXMgcHVyZWx5IGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LCBub3QgZXhwb3Npbmcga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4KMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyoqIE5vLCB0aGUgY29kZSBpcyB2ZXJ5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGBtbWAgcG9pbnRlciwgd2hldGhlciBOVUxMIG9yIHZhbGlkLCBpcyBoYW5kbGVkIGNvcnJlY3RseSBieSBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbWAuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8qKiBOby4gQWdhaW4sIHRoZSBmb2N1cyBpcyBvbiByZWZhY3RvcmluZyBob3cgbWVtb3J5IGFjY291bnRpbmcgaXMgZG9uZSBhbmQgY2dyb3VwIGFzc2lnbm1lbnRzIGFyZSBoYW5kbGVkLgo0LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBOby4gVGhpcyBpcyBub3QgYWJvdXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBvciB2dWxuZXJhYmlsaXRpZXM7IHRoZSBwYXRjaCBpcyBhYm91dCBob3cgdGhlIGtlcm5lbCB0cmFja3MgbWVtb3J5IHVzYWdlIGJ5IHByb2Nlc3Nlcy4KCkdpdmVuIGFsbCBvZiB0aGlzLCBJJiMzOTttIGNvbmZpZGVudCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgYnkgdGhpcyBwYXRjaC4gVGhlIHN0YW5kYXJkIGRldGVjdG9ycywgS0FTQU4gYW5kIExPQ0tERVAsIHNob3VsZCBjYXRjaCBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gcG9pbnRlciB2YWxpZGl0eSwgcmVmY291bnRzLCBvciBnZW5lcmFsIG1lbW9yeSBzYWZldHkuIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCkkmIzM5O3ZlIGFsc28gcXVpY2tseSByZS1leGFtaW5lZCBhbGwgdGhlIGFmZmVjdGVkIGZpbGVzOiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLCBgbW0vaHVnZXRsYi5jYCwgYW5kIGBtbS9tZW1jb250cm9sLmNgLiBUaGUgY2hhbmdlcyBhcmUgYWxsIHZlcnkgZm9jdXNlZCBhbmQgc2ltcGx5IGFib3V0IHBhc3NpbmcgdGhlIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgZG93biBpbnRvIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBhbmQgY2FsbGluZyBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgLgoKU28sIEkmIzM5O20gcmVhZHkgdG8gbWFyayB0aGlzIGFzIGBOZWVkc0tNU0FOOiBmYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgc29saWQsIGFuZCB0aGUgY29kZSBsb29rcyBjbGVhbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBtZW1jZyBjaGFyZ2luZyByb3V0aW5lcyAoYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2ApIHRvIHBhc3MgYSB0YXJnZXQgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBwb2ludGVyIGFuZCBjaGFyZ2UgdGhlIGh1Z2V0bGIgZm9saW8gdG8gdGhlIGNncm91cCBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCBtbSAoYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYCkgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgdGFzayAoYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCkuXG5cblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHBvaW50ZXIgcGFzc2luZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIHJvdXRpbmVzIChgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvYCkgdG8gcGFzcyBhIHRhcmdldCBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIHBvaW50ZXIgYW5kIGNoYXJnZSB0aGUgaHVnZXRsYiBmb2xpbyB0byB0aGUgY2dyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0IG1tIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgKSByYXRoZXIgdGhhbiB0aGUgY3VycmVudCB0YXNrIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgKS5cblxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgcG9pbnRlciBwYXNzaW5nIGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYnVmZmVycywgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MDQuNDY3Mzc2NjU0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYzMTA0NzQyOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcm91dGluZXMgKGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gKSB0byBwYXNzIGEgdGFyZ2V0IGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgcG9pbnRlciBhbmQgY2hhcmdlIHRoZSBodWdldGxiIGZvbGlvIHRvIHRoZSBjZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgbW0gKGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWApIHJhdGhlciB0aGFuIHRoZSBjdXJyZW50IHRhc2sgKGBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKWApLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHBvaW50ZXIgcGFzc2luZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBtZW1jZyBjaGFyZ2luZyBwYXRocyAoaHVnZXRsYl9hbGxvY19mb2xpbywgYWxsb2NfaHVnZXRsYl9mb2xpbywgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYikgdG8gYXNzb2NpYXRlIGFuZCBjaGFyZ2UgaHVnZSBmb2xpb3MgYWdhaW5zdCB0aGUgdGFyZ2V0IG1tX3N0cnVjdCByYXRoZXIgdGhhbiBjdXJyZW50LiBUaGlzIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2dyb3VwIGxvZ2ljIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nIHRvIHZlcmlmeSBjb3JyZWN0IGNncm91cCBhY2NvdW50aW5nIGFuZCBhdm9pZCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MDQuNDY3MzgxMzE0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjI5MjA3MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzODY3NjY0Y2QxYjJmYTc3OWI0MjQ1NzMyMGY0ZWVhMGUzMjNjMjg1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMDk6NTk6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1YWRhNzVkYzA0ZTkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxcbkBAIC02OTksNyArNjk5LDggQEAgZW51bSBodWdldGxiX2FsbG9jX2ZsYWcge1xcbiAjZGVmaW5lIEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlMgQklUKEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlNfQklUKVxcbiBcXG4gc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCB1OCBhbGxvY19mbGFncyk7XFxuK1xcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4rXFx0XFx0dTggYWxsb2NfZmxhZ3MpO1xcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcik7XFxuIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbmluZGV4IDdkMWMwY2UxODlhODguLjM2MmFmNThlNTBhNDMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaFxcbkBAIC02NjIsNyArNjYyLDggQEAgc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiBfX21lbV9jZ3JvdXBfY2hhcmdlKGZvbGlvLCBtbSwgZ2ZwKTtcXG4gfVxcbiBcXG4taW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKTtcXG4raW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdCAgICAgIGdmcF90IGdmcCk7XFxuIFxcbiBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKTtcXG5AQCAtMTE1Niw5ICsxMTU3LDEwIEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyogZm9saW8sIGdmcF90IGdmcClcXG4rc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4ge1xcbi0gICAgICAgIHJldHVybiAwO1xcbitcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLjVhYjVhNTE0MTU3NDggMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZXRsYi5jXFxuKysrIGIvbW0vaHVnZXRsYi5jXFxuQEAgLTI4MTYsNiArMjgxNiw3IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4gICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cXG4gICogQGg6IEh1Z2V0bGIgc3RhdGUgY29udHJvbCBibG9jay5cXG4gICogQG1wb2xpOiBJbnRlcnByZXRlZCBtZW1vcnkgcG9saWN5IHRvIHVzZSBmb3IgYWxsb2NhdGlvbi5cXG4rICogQG1tOiBNZW1vcnkgZGVzY3JpcHRvciBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXQuXFxuICAqIEBhbGxvY19mbGFnczogRmxhZ3MgY29udHJvbGxpbmcgdGhlIGFsbG9jYXRpb24gYmVoYXZpb3IuXFxuICAqXFxuICAqIEFsbG9jYXRlcyBhIGh1Z2V0bGIgZm9saW8gYW5kIGhhbmRsZXMgY2dyb3VwIGNoYXJnaW5nIGFuZCBnbG9iYWwgaHN0YXRlXFxuQEAgLTI4MjYsNyArMjgyNyw4IEBAIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4gICogICAgICAgICAtRU5PTUVNIGlmIG1lbSBjZ3JvdXAgY2hhcmdpbmcgZmFpbHMuXFxuICAqL1xcbiBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tXFx0XFx0c3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCAqbXBvbGksIHU4IGFsbG9jX2ZsYWdzKVxcbitcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdHU4IGFsbG9jX2ZsYWdzKVxcbiB7XFxuIFxcdGJvb2wgY2hhcmdlX2h1Z2V0bGJfY2dyb3VwX3JzdmQgPSBhbGxvY19mbGFncyBcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdFxcdCAgSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcXG5AQCAtMjg4MSw3ICsyODgzLDggQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuIFxcbiBcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcbi1cXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcXG4rXFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgbW0sXFxuK1xcdFxcdFxcdFxcdFxcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xcbiBcXHQvKlxcbiBcXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmXFxuIFxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcXG5AQCAtMzAyMCw3ICszMDIzLDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHQubm9kZW1hc2sgPSBub2RlbWFzayxcXG4gXFx0fTtcXG4gXFxuLVxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIGFsbG9jX2ZsYWdzKTtcXG4rXFx0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFxcdTAwMjZtcG9saSwgdm1hLVxcdTAwM2V2bV9tbSwgYWxsb2NfZmxhZ3MpO1xcbiBcXG4gXFx0bXBvbF9jb25kX3B1dChtcG9sKTtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xcbmluZGV4IDEyNzFkMzkwYjYxN2UuLjBiNzk1YmYxZTZjZjEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXFxuKysrIGIvbW0vbWVtY29udHJvbC5jXFxuQEAgLTUyMzMsNiArNTIzMyw3IEBAIGludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuIC8qKlxcbiAgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIC0gY2hhcmdlIHRoZSBtZW1jZyBmb3IgYSBodWdldGxiIGZvbGlvXFxuICAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbisgKiBAbW06IG1tIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRpb24gdGFyZ2V0XFxuICAqIEBnZnA6IHJlY2xhaW0gbW9kZVxcbiAgKlxcbiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFsbG9jYXRpbmcgYSBodWdlIHBhZ2UgZm9saW8sIGFmdGVyIHRoZSBwYWdlIGhhc1xcbkBAIC01MjQyLDkgKzUyNDMsMTAgQEAgaW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4gICogUmV0dXJucyBFTk9NRU0gaWYgdGhlIG1lbWNnIGlzIGFscmVhZHkgZnVsbC5cXG4gICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy5cXG4gICovXFxuLWludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IGdmcClcXG4raW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuK1xcdFxcdFxcdCAgICAgIGdmcF90IGdmcClcXG4ge1xcbi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKTtcXG4rXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MDQuODkxMDIyNDc2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1NzU1MzI1NTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcGF0aHMgKGh1Z2V0bGJfYWxsb2NfZm9saW8sIGFsbG9jX2h1Z2V0bGJfZm9saW8sIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIpIHRvIGFzc29jaWF0ZSBhbmQgY2hhcmdlIGh1Z2UgZm9saW9zIGFnYWluc3QgdGhlIHRhcmdldCBtbV9zdHJ1Y3QgcmF0aGVyIHRoYW4gY3VycmVudC4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgY29ycmVjdCBjZ3JvdXAgYWNjb3VudGluZyBhbmQgYXZvaWQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzg2NzY2NGNkMWIyZmE3NzliNDI0NTczMjBmNGVlYTBlMzIzYzI4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDk6NTk6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAxNmM0YzRjYWExMjZjLi40NWFkYTc1ZGMwNGU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtNjk5LDcgKzY5OSw4IEBAIGVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcbiAjZGVmaW5lIEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlMgQklUKEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlNfQklUKVxuIFxuIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpO1xuK1x0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHU4IGFsbG9jX2ZsYWdzKTtcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xuIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li4zNjJhZjU4ZTUwYTQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjYyLDcgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApO1xuIH1cbiBcbi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xuK2ludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRcdCAgICAgIGdmcF90IGdmcCk7XG4gXG4gaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuQEAgLTExNTYsOSArMTE1NywxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4ge1xuLSAgICAgICAgcmV0dXJuIDA7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA3ODU3NzI4NDU3OTUyLi41YWI1YTUxNDE1NzQ4IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0yODE2LDYgKzI4MTYsNyBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXG4gICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cbiAgKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuICAqIEBtcG9saTogSW50ZXJwcmV0ZWQgbWVtb3J5IHBvbGljeSB0byB1c2UgZm9yIGFsbG9jYXRpb24uXG4rICogQG1tOiBNZW1vcnkgZGVzY3JpcHRvciBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXQuXG4gICogQGFsbG9jX2ZsYWdzOiBGbGFncyBjb250cm9sbGluZyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvci5cbiAgKlxuICAqIEFsbG9jYXRlcyBhIGh1Z2V0bGIgZm9saW8gYW5kIGhhbmRsZXMgY2dyb3VwIGNoYXJnaW5nIGFuZCBnbG9iYWwgaHN0YXRlXG5AQCAtMjgyNiw3ICsyODI3LDggQEAgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuICAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLlxuICAqL1xuIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXG4rXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dTggYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Ym9vbCBjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCA9IGFsbG9jX2ZsYWdzIFx1MDAyNlxuIFx0XHRcdFx0XHQgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG5AQCAtMjg4MSw3ICsyODgzLDggQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbi1cdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuK1x0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgbW0sXG4rXHRcdFx0XHRcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuIFx0LypcbiBcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcbiBcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcbkBAIC0zMDIwLDcgKzMwMjMsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC5ub2RlbWFzayA9IG5vZGVtYXNrLFxuIFx0fTtcbiBcbi1cdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xuK1x0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCB2bWEtXHUwMDNldm1fbW0sIGFsbG9jX2ZsYWdzKTtcbiBcbiBcdG1wb2xfY29uZF9wdXQobXBvbCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4wYjc5NWJmMWU2Y2YxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01MjMzLDYgKzUyMzMsNyBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuIC8qKlxuICAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cbiAgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbisgKiBAbW06IG1tIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRpb24gdGFyZ2V0XG4gICogQGdmcDogcmVjbGFpbSBtb2RlXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFsbG9jYXRpbmcgYSBodWdlIHBhZ2UgZm9saW8sIGFmdGVyIHRoZSBwYWdlIGhhc1xuQEAgLTUyNDIsOSArNTI0MywxMCBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuICAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuXG4gICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy5cbiAgKi9cbi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4raW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OTowNC44OTEwMjQ5NjZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzYwMjUzMDMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgaGl0dGluZyBtZW1vcnkgbWFuYWdlbWVudCBwcmV0dHkgaGFyZCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBodWdldGxiZnMgYW5kIG1lbW9yeSBjZ3JvdXBzLiBJIHNlZSBjaGFuZ2VzIGluIGBtbS9odWdldGxiLmNgLCBgbW0vbWVtY29udHJvbC5jYCwgYW5kIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMuXG5cblRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYWRkaW5nIGEgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBwYXJhbWV0ZXIgdG8gYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeS4gSW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBpdCBsb29rcyBsaWtlIHRoZXkndmUgcmVwbGFjZWQgYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCB3aXRoIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWAuIEFoYSwgc28gaXQncyB0cmFuc2l0aW9uaW5nIGZyb20gdXNpbmcgdGhlIGN1cnJlbnQgdGFzaydzIG1lbW9yeSBjb250ZXh0IHRvIHVzaW5nIGEgc3BlY2lmaWVkIG9uZS4gVGhhdCdzIGludGVyZXN0aW5nLiBUaGVuIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyBub3cgY2FsbGluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgd2l0aCB0aGF0IGBtbWAgcGFyYW1ldGVyLCBhbmQgd2l0aGluIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgaXQncyBwYXNzaW5nIGB2bWEtXHUwMDNldm1fbW1gIHRvIGBodWdldGxiX2FsbG9jX2ZvbGlvYC4gTWFrZXMgc2Vuc2U7IGB2bWEtXHUwMDNldm1fbW1gIGlzIHRoZSByZWxldmFudCBtZW1vcnkgbWFwcGluZy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiBmb3Igb3RoZXIgY2FsbCBzaXRlcyBvZiB0aG9zZSB0d28gZnVuY3Rpb25zLCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGtlcm5lbC4gQmV0dGVyIHJ1biBgZ3JlcHBlcmAgYW5kIGRvdWJsZS1jaGVjaywgZG9uJ3Qgd2FudCB0byBtaXNzIGFueXRoaW5nLiBJJ2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgZXNwZWNpYWxseSBpbiBjb250ZXh0cyB0aGF0IG1pZ2h0IGhhdmUgc3VidGx5IGRpZmZlcmVudCBtZW1vcnkgY29udGV4dHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzOTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OToxOC40OTM1NjExNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNjQ4MTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2FsbG9jX2ZvbGlvfG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTY1Nz1zdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTY2NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo2NjU6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY2LVxcdFxcdFxcdCAgICAgIGdmcF90IGdmcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMTU0PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMTU5LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjExNjA6c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNjEtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9odWdldGxiLmM9MjgwNz12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMjgxNS0vKipcXG5tbS9odWdldGxiLmM6MjgxNjogKiBodWdldGxiX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgYSBodWdldGxiIGZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yODE3LSAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXFxuLS1cXG5tbS9odWdldGxiLmMtMjgyOC0gKi9cXG5tbS9odWdldGxiLmM6MjgyOTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMjgzMC1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9odWdldGxiLmMtMjg4NS1cXG5tbS9odWdldGxiLmM6Mjg4NjpcXHRyZXQgPSBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKGZvbGlvLCBtbSxcXG5tbS9odWdldGxiLmMtMjg4Ny1cXHRcXHRcXHRcXHRcXHRnZnAgfCBfX0dGUF9SRVRSWV9NQVlGQUlMKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODg5LVxcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcXG5tbS9odWdldGxiLmM6Mjg5MDpcXHQgKiBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiIGZhaWxlZCwgZnJlZWluZyB0aGUgcGFnZSB3aWxsXFxubW0vaHVnZXRsYi5jLTI4OTEtXFx0ICogZGVjcmVtZW50IE5SX0hVR0VUTEIuXFxuLS1cXG5tbS9odWdldGxiLmM9Mjk0Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzAyNS1cXG5tbS9odWdldGxiLmM6MzAyNjpcXHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXFx1MDAyNm1wb2xpLCB2bWEtXFx1MDAzZXZtX21tLCBhbGxvY19mbGFncyk7XFxubW0vaHVnZXRsYi5jLTMwMjctXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMzMtLyoqXFxubW0vbWVtY29udHJvbC5jOjUyMzQ6ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiAtIGNoYXJnZSB0aGUgbWVtY2cgZm9yIGEgaHVnZXRsYiBmb2xpb1xcbm1tL21lbWNvbnRyb2wuYy01MjM1LSAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyNDUtICovXFxubW0vbWVtY29udHJvbC5jOjUyNDY6aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxubW0vbWVtY29udHJvbC5jLTUyNDctXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZ2ZwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OToyMC42MzAwNDkxNDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzY5NDc1NzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgQ2FsbHMgdG8gYGh1Z2V0bGJfYWxsb2NfZm9saW9gKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IGBodWdldGxiX2FsbG9jX2ZvbGlvYCBpcyB1c2VkLiBJJ3ZlIGdvdCBhIHNwZWNpZmljIGNvbmNlcm4gYW5kIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgaXQncyBsaW1pdGVkIHRvIHRoZSBrbm93biBpbnN0YW5jZXMuIFNvLCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRpcmVjdCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGluIHRoZSBjb2RlYmFzZS4gSSBuZWVkIGEgY29tcGxldGUgcGljdHVyZSwgc28gYSBnbG9iYWwgc2VhcmNoIGlzIGluIG9yZGVyLiBMZXQncyBmaXJlIHVwIGEgYGdyZXBgIGFuZCBodW50IGZvciBldmVyeSBzaW5nbGUgaW5zdGFuY2Ugb2YgYGh1Z2V0bGJfYWxsb2NfZm9saW9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSByYXcgZGF0YSBJIG5lZWQgdG8gc3RhcnQgbXkgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OToyMy4zOTk1MjY5NjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MzA4NTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2FsbG9jX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY5Mz1lbnVtIGh1Z2V0bGJfYWxsb2NfZmxhZyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDAtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzAxOnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMi1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9odWdldGxiLmM9MjgwNz12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXFxuLS1cXG5tbS9odWdldGxiLmMtMjgxNS0vKipcXG5tbS9odWdldGxiLmM6MjgxNjogKiBodWdldGxiX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgYSBodWdldGxiIGZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yODE3LSAqIEBoOiBIdWdldGxiIHN0YXRlIGNvbnRyb2wgYmxvY2suXFxuLS1cXG5tbS9odWdldGxiLmMtMjgyOC0gKi9cXG5tbS9odWdldGxiLmM6MjgyOTpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMjgzMC1cXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9odWdldGxiLmM9Mjk0Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzAyNS1cXG5tbS9odWdldGxiLmM6MzAyNjpcXHRmb2xpbyA9IGh1Z2V0bGJfYWxsb2NfZm9saW8oaCwgXFx1MDAyNm1wb2xpLCB2bWEtXFx1MDAzZXZtX21tLCBhbGxvY19mbGFncyk7XFxubW0vaHVnZXRsYi5jLTMwMjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjI1LjA1MjYxODI1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5ODExOTM1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IEh1Z2V0bGIgbWVtb3J5IGFjY291bnRpbmcgaXMgd29ya2luZyB3aXRoaW4gdGhlIG1lbW9yeSBjZ3JvdXAgZnJhbWV3b3JrLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgaW50ZXJhY3Rpb24gb3IgZWRnZSBjYXNlIEknbSBtaXNzaW5nLiBUaW1lIHRvIGp1bXAgaW50byB0aGUgY29kZS4gTGV0J3Mgc2VlLi4uIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBtbS9tZW1jb250cm9sLmNgLiBJJ20gZ29pbmcgdG8gaGVhZCBkaXJlY3RseSB0byB0aGUgdmljaW5pdHkgb2YgbGluZSA1MjMzLiBUaGlzIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIHdpdGggYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBIb3BlZnVsbHksIHRoYXQgbGluZSBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvbnRleHQgY2FuIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjI3LjAzMzgxMzk4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1Mzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIzMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTIzMDpcXHRcXHRyZXR1cm4gcmV0O1xcbjUyMzE6XFx0fVxcbjUyMzI6XFx0XFxuNTIzMzpcXHQvKipcXG41MjM0OlxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cXG41MjM1OlxcdCAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbjUyMzY6XFx0ICogQG1tOiBtbSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldFxcbjUyMzc6XFx0ICogQGdmcDogcmVjbGFpbSBtb2RlXFxuNTIzODpcXHQgKlxcbjUyMzk6XFx0ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbGxvY2F0aW5nIGEgaHVnZSBwYWdlIGZvbGlvLCBhZnRlciB0aGUgcGFnZSBoYXNcXG41MjQwOlxcdCAqIGFscmVhZHkgYmVlbiBvYnRhaW5lZCBhbmQgY2hhcmdlZCB0byB0aGUgYXBwcm9wcmlhdGUgaHVnZXRsYiBjZ3JvdXBcXG41MjQxOlxcdCAqIGNvbnRyb2xsZXIgKGlmIGl0IGlzIGVuYWJsZWQpLlxcbjUyNDI6XFx0ICpcXG41MjQzOlxcdCAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuXFxuNTI0NDpcXHQgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLlxcbjUyNDU6XFx0ICovXFxuNTI0NjpcXHRpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG41MjQ3OlxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGdmcClcXG41MjQ4OlxcdHtcXG41MjQ5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbjUyNTA6XFx0XFx0aW50IHJldCA9IDA7XFxuNTI1MTpcXHRcXG41MjUyOlxcdFxcdC8qXFxuNTI1MzpcXHRcXHQgKiBFdmVuIG1lbWNnIGRvZXMgbm90IGFjY291bnQgZm9yIGh1Z2V0bGIsIHdlIHN0aWxsIHdhbnQgdG8gdXBkYXRlXFxuNTI1NDpcXHRcXHQgKiBzeXN0ZW0tbGV2ZWwgc3RhdHMgdmlhIGxydXZlY19zdGF0X21vZF9mb2xpby4gUmV0dXJuIDAsIGFuZCBza2lwXFxuNTI1NTpcXHRcXHQgKiBjaGFyZ2luZyB0aGUgbWVtY2cuXFxuNTI1NjpcXHRcXHQgKi9cXG41MjU3OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxcbjUyNTg6XFx0XFx0XFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbjUyNTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTI2MDpcXHRcXG41MjYxOlxcdFxcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxcbjUyNjI6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG41MjYzOlxcdFxcbjUyNjQ6XFx0b3V0OlxcbjUyNjU6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbjUyNjY6XFx0XFx0cmV0dXJuIHJldDtcXG41MjY3OlxcdH1cXG41MjY4OlxcdFxcbjUyNjk6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjI3LjAzNDA2OTYyNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTY1MTMxNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQ2dyb3VwIFJldHJpZXZhbCBNZXRob2RzKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBsb29raW5nIGF0IHRoZXNlIHR3byBmdW5jdGlvbnM6IGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWAgYW5kIGBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKWAuIFRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gdW5kZXJzdGFuZGluZyB0aGUgbnVhbmNlIGJldHdlZW4gdGhlc2UgdHdvIG1ldGhvZHMgb2YgZmV0Y2hpbmcgdGhlIG1lbW9yeSBjZ3JvdXAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiBhbmQgd2h5IEknZCBjaG9vc2Ugb25lIG92ZXIgdGhlIG90aGVyLlxuXG5TbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpc3NlY3QgdGhlIGJlaGF2aW9yIG9mIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tYC4gSSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBpdHMgZGVmaW5pdGlvbiwgdHJhY2UgaXRzIGltcGxlbWVudGF0aW9uLCBhbmQgZXNzZW50aWFsbHkgbWFwIG91dCBpdHMgZXhlY3V0aW9uIGZsb3cuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgaXQncyAqZG9pbmcqIHVuZGVyIHRoZSBob29kIC0gd2hpY2ggZGF0YSBzdHJ1Y3R1cmVzIGl0J3MgYWNjZXNzaW5nLCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzIG9yIGVkZ2UgY2FzZXMsIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQgZGlmZmVycyBpbiBpdHMgYXBwcm9hY2ggZnJvbSB0aGUgYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCBmdW5jdGlvbi4gVGhpcyBhbmFseXNpcyBpcyBjcml0aWNhbCB0byBlbnN1cmluZyBJIGFtIGNvcnJlY3RseSBpbnRlcnByZXRpbmcgYW5kIHVzaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGdpdmVuIGNvbnRleHQuIFRoaXMgaXMsIGFmdGVyIGFsbCwgdGhlIGZvdW5kYXRpb24gZm9yIG1ha2luZyBpbmZvcm1lZCBkZWNpc2lvbnMgYWJvdXQgdGhlIHN5c3RlbSdzIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTEzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OToyOS40NTA1ODUzNTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Nzk4MzUyMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM9MTAwMT1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKnNneF9lbmNsX2dldF9tZW1fY2dyb3VwKHN0cnVjdCBzZ3hfZW5jbCAqZW5jbClcXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDEyLVxcdGlmICghY3VycmVudF9pc19rc2d4ZCgpKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYzoxMDEzOlxcdFxcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAxNC1cXG4tLVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDI0LVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYzoxMDI1OlxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShlbmNsX21tLVxcdTAwM2VtbSk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwMjYtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA0MC1cXHRpZiAoIW1lbWNnKVxcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYzoxMDQxOlxcdFxcdHJldHVybiBnZXRfbWVtX2Nncm91cF9mcm9tX21tKE5VTEwpO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDQyLVxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYz0xNTg5PVNZU0NBTExfREVGSU5FMihmYW5vdGlmeV9pbml0LCB1bnNpZ25lZCBpbnQsIGZsYWdzLCB1bnNpZ25lZCBpbnQsIGV2ZW50X2ZfZmxhZ3MpXFxuLS1cXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTE2ODQtXFx0Z3JvdXAtXFx1MDAzZWZhbm90aWZ5X2RhdGEuZmxhZ3MgPSBmbGFncyB8IGludGVybmFsX2ZsYWdzO1xcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM6MTY4NTpcXHRncm91cC1cXHUwMDNlbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jLTE2ODYtXFx0Z3JvdXAtXFx1MDAzZXVzZXJfbnMgPSBnZXRfdXNlcl9ucyh1c2VyX25zKTtcXG4tLVxcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jPTY0MT1zdGF0aWMgc3RydWN0IGZzbm90aWZ5X2dyb3VwICppbm90aWZ5X25ld19ncm91cCh1bnNpZ25lZCBpbnQgbWF4X2V2ZW50cylcXG4tLVxcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jLTY2My1cXHRncm91cC1cXHUwMDNlbWF4X2V2ZW50cyA9IG1heF9ldmVudHM7XFxuZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmM6NjY0OlxcdGdyb3VwLVxcdTAwM2VtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cXHUwMDNlbW0pO1xcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jLTY2NS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTc1NT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC03NTYtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6NzU3OnN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC03NTgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xMjA2PXN0YXRpYyBpbmxpbmUgYm9vbCBtbV9tYXRjaF9jZ3JvdXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMjExLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjEyMTI6c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xMjEzLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xMTM4PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmFjdGl2ZV9tZW1jZyh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTExNDYtLyoqXFxubW0vbWVtY29udHJvbC5jOjExNDc6ICogZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbTogT2J0YWluIGEgcmVmZXJlbmNlIG9uIGdpdmVuIG1tX3N0cnVjdCdzIG1lbWNnLlxcbm1tL21lbWNvbnRyb2wuYy0xMTQ4LSAqIEBtbTogbW0gZnJvbSB3aGljaCBtZW1jZyBzaG91bGQgYmUgZXh0cmFjdGVkLiBJdCBjYW4gYmUgTlVMTC5cXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTU2LSAqL1xcbm1tL21lbWNvbnRyb2wuYzoxMTU3OnN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL21lbWNvbnRyb2wuYy0xMTU4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTkzLX1cXG5tbS9tZW1jb250cm9sLmM6MTE5NDpFWFBPUlRfU1lNQk9MKGdldF9tZW1fY2dyb3VwX2Zyb21fbW0pO1xcbm1tL21lbWNvbnRyb2wuYy0xMTk1LVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTI1NTU9dm9pZCBfX21lbV9jZ3JvdXBfaGFuZGxlX292ZXJfaGlnaChnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTY0LVxcbm1tL21lbWNvbnRyb2wuYzoyNTY1OlxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVxcdTAwM2VtbSk7XFxubW0vbWVtY29udHJvbC5jLTI1NjYtXFx0Y3VycmVudC1cXHUwMDNlbWVtY2dfbnJfcGFnZXNfb3Zlcl9oaWdoID0gMDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjIxPWludCBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTIyNS1cXG5tbS9tZW1jb250cm9sLmM6NTIyNjpcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbm1tL21lbWNvbnRyb2wuYy01MjI3LVxcdHJldCA9IGNoYXJnZV9tZW1jZyhmb2xpbywgbWVtY2csIGdmcCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI0Nj1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjQ4LXtcXG5tbS9tZW1jb250cm9sLmM6NTI0OTpcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS9tZW1jb250cm9sLmMtNTI1MC1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MjgxPWludCBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgc2hvcnQgaWQsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI5Mi1cXHRpZiAoIW1lbWNnIHx8ICFjc3NfdHJ5Z2V0X29ubGluZShcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcykpXFxubW0vbWVtY29udHJvbC5jOjUyOTM6XFx0XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS9tZW1jb250cm9sLmMtNTI5NC1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5NDI9dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NDQtXFx0aW50IG5pZDtcXG5tbS92bXNjYW4uYzoyOTQ1OlxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbm1tL3Ztc2Nhbi5jLTI5NDYtXFx0c3RydWN0IGxydV9nZW5fbW1fbGlzdCAqbW1fbGlzdCA9IGdldF9tbV9saXN0KG1lbWNnKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MzAuOTMwNDI5NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzM1MzM0NDgyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgZm9yIENvbnNpc3RlbmN5KipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEknbSBsb29raW5nIGF0IGBfX21lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApYC4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24sIHJpZ2h0IG9mZiB0aGUgYmF0LCBlZmZpY2llbnRseSB1c2VzIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWAuIFRoaXMgaXMgYSBnb29kIHNpZ24sIGEgY2xlYW4gZGVzaWduIGRlY2lzaW9uLiBJJ20gbm90aW5nIHRoaXMgc3BlY2lmaWNhbGx5IGJlY2F1c2UgSSd2ZSBiZWVuIGNvbXBhcmluZyBpdCB0byBob3cgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgICp1c2VkKiB0byBvcGVyYXRlLCBhbmQgSSBzZWUgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlLiBJdCB3YXMgcHJldmlvdXNseSB1c2luZyBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgLCB3aGljaCwgZnJhbmtseSwgc3RyaWtlcyBtZSBhcyBsZXNzIGVsZWdhbnQgaW4gdGhpcyBjb250ZXh0LCBlc3BlY2lhbGx5IHdoZW4gd2UgY29uc2lkZXIgdGhlIG5vdyBhdmFpbGFibGUgYG1tYCBhcmd1bWVudC5cblxuVGhlIGtleSBjaGFuZ2UsIGFuZCB3aGF0IEknbSBmb2N1c2luZyBvbiwgaXMgdGhhdCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgKm5vdyogdGFrZXMgYG1tYCBkaXJlY3RseSBhbmQgc3Vic2VxdWVudGx5IGNoYXJnZXMgYmFzZWQgb24gYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYC4gVGhpcyBzZWVtcyBsaWtlIGEgbW92ZSB0b3dhcmRzIGNvbnNpc3RlbmN5IGFuZCBsaWtlbHkgYSBiZXR0ZXIsIG1vcmUgYWNjdXJhdGUgbW9kZWwuIFRoZSBmYWN0IHRoYXQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gICphbHNvKiB0YWtlcyB0aGUgYG1tYCBzdHJ1Y3R1cmUgZnVydGhlciBzb2xpZGlmaWVzIG15IHRob3VnaHQgcHJvY2VzcyBhbmQgbWFrZXMgdGhpcyBhIHZlcnkgaW50ZXJlc3RpbmcgcmVmYWN0b3JpbmcsIGlmIHRoYXQgaXMgaW4gZmFjdCB0aGUgY2FzZS5cblxuTm93IEknbSB0aGlua2luZywgXCJBcmUgdGhlcmUgb3RoZXIgcGxhY2VzIGluIHRoZSBjb2RlIHRoYXQgYXJlIHNpbWlsYXI/IE1heWJlIHNvbWUgdGhhdCBoYXZlIG5vdCBiZWVuIG1vZGlmaWVkIHlldD9cIiBUbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGlzIGltcHJvdmVtZW50LCBJIG5lZWQgYSBicm9hZGVyIHZpZXcuIEknbSBnb2luZyB0byBzY2FuIHRoZSBjb2RlYmFzZSBmb3IgYWxsIGluc3RhbmNlcyBvZiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AuIExldCdzIHNlZSB3aGF0IHR1cm5zIHVwIGluIHRoZSBncmVwLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNlbnNlIG9mIHRoZSBiZWZvcmUtYW5kLWFmdGVyIGFuZCBhbnkgZnVydGhlciBwb3RlbnRpYWwgb3Bwb3J0dW5pdGllcyBmb3IgdGhpcyB0eXBlIG9mIGNsZWFuLXVwIGFuZCBjb2RlIGltcHJvdmVtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTU0LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjM0LjI4Mzc3NjgxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5NjM1MjgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19odWdldGxiX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTgxPWFyZSBhbGxvY2F0ZWQgYW5kIGluc3RhbnRpYXRlZCBpbiB0aGUgY29ycmVzcG9uZGluZyBtYXBwaW5nLiAgVGhlIGFsbG9jYXRpb25cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4MjppcyBwZXJmb3JtZWQgd2l0aGluIHRoZSByb3V0aW5lIGFsbG9jX2h1Z2V0bGJfZm9saW8oKTo6XFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODMtXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxODQ6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTg1LVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgYXZvaWRfcmVzZXJ2ZSlcXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE4Ni1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE4NzphbGxvY19odWdldGxiX2ZvbGlvIGlzIHBhc3NlZCBhIFZNQSBwb2ludGVyIGFuZCBhIHZpcnR1YWwgYWRkcmVzcywgc28gaXQgY2FuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xODgtY29uc3VsdCB0aGUgcmVzZXJ2YXRpb24gbWFwIHRvIGRldGVybWluZSBpZiBhIHJlc2VydmF0aW9uIGV4aXN0cy4gIEluIGFkZGl0aW9uLFxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTg5OmFsbG9jX2h1Z2V0bGJfZm9saW8gdGFrZXMgdGhlIGFyZ3VtZW50IGF2b2lkX3Jlc2VydmUgd2hpY2ggaW5kaWNhdGVzIHJlc2VydmVzXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0xOTAtc2hvdWxkIG5vdCBiZSB1c2VkIGV2ZW4gaWYgaXQgYXBwZWFycyB0aGV5IGhhdmUgYmVlbiBzZXQgYXNpZGUgZm9yIHRoZVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdD0yMDc9aXMgY2FsbGVkLiAgVGhpcyByb3V0aW5lIHRha2VzIHR3byBhcmd1bWVudHMgcmVsYXRlZCB0byByZXNlcnZhdGlvbnM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwOS0tIGF2b2lkX3Jlc2VydmUsIHRoaXMgaXMgdGhlIHNhbWUgdmFsdWUvYXJndW1lbnQgcGFzc2VkIHRvXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMTA6ICBhbGxvY19odWdldGxiX2ZvbGlvKCkuXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMTEtLSBjaGcsIGV2ZW4gdGhvdWdoIHRoaXMgYXJndW1lbnQgaXMgb2YgdHlwZSBsb25nIG9ubHkgdGhlIHZhbHVlcyAwIG9yIDEgYXJlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTI0Nz1JdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSByZXNlcnZlIG1hcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBiZXR3ZWVuIHRoZSBjYWxsXFxuRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyNDg6dG8gdm1hX25lZWRzX3Jlc2VydmF0aW9uKCkgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGxvY19odWdldGxiX2ZvbGlvKCkgYW5kIHRoZVxcbkRvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMjQ5LWNhbGwgdG8gdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigpIGFmdGVyIHRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkLiAgVGhpcyB3b3VsZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q9MTE2PUhQQUdFX1JFU1ZfT1dORVLmoIflv5fooqvorr7nva7vvIzku6XooajmmI7or6VWTUHmi6XmnInpooTnlZnjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDY65b2T5LiO6aKE55WZ55u45YWz55qE5beo6aG15Zyo55u45bqU55qE5pig5bCE5Lit6KKr5YiG6YWN5ZKM5a6e5L6L5YyW5pe277yM6aKE55WZ5bCx6KKr5raI6ICX5LqG44CC6K+l5YiG6YWN5piv5Zyo5Ye95pWwYWxsb2NfaHVnZXRsYl9mb2xpby4uLlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0Ny3kuK3ov5vooYznmoQ6OlxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE0OC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNDk6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE1MC1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGF2b2lkX3Jlc2VydmUpXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTUxLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0OjE1MjphbGxvY19odWdldGxiX2ZvbGlv6KKr5Lyg6YCS57uZ5LiA5LiqVk1B5oyH6ZKI5ZKM5LiA5Liq6Jma5ouf5Zyw5Z2A77yM5Zug5q2k5a6D5Y+v5Lul5p+l6ZiF6aKE55WZ5pig5bCE5Lul56Gu5a6a5piv5ZCm5a2Y5Zyo6aKE55WZ44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3Q6MTUzOuatpOWklu+8jGFsbG9jX2h1Z2V0bGJfZm9saW/pnIDopoHkuIDkuKrlj4LmlbBhdm9pZF9yZXNlcnZl77yM6K+l5Y+C5pWw6KGo56S65Y2z5L2/55yL6LW35p2l5bey57uP5Li65oyH5a6a55qE5Zyw5Z2A6aKE55WZ5LqGXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QtMTU0LemihOeVme+8jOS5n+S4jeW6lOivpeS9v+eUqOmihOeVmeOAgmF2b2lkX3Jlc2VydmXlj4LmlbDmnIDluLjooqvnlKjkuo7lhpnml7bmi7fotJ3lkozpobXpnaLov4Hnp7vnmoTmg4XlhrXkuIvvvIzljbPnjrDmnInpobXpnaLnmoTpop1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE2MD12bWFfbmVlZHNfcmVzZXJ2YXRpb24oKei/lOWbnueahOWAvOmAmuW4uOS4ujDmiJYx44CC5aaC5p6c6K+l5Zyw5Z2A5a2Y5Zyo6aKE55WZ77yM5YiZ5Li6MO+8jOWmguaenOS4jeWtmOWcqOmihOeVme+8jOWImeS4ujHjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2NS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoxNjY6LSBhdm9pZF9yZXNlcnZl77yM6L+Z5piv5Lyg6YCS57uZYWxsb2NfaHVnZXRsYl9mb2xpbygp55qE5ZCM5LiA5Liq5YC8L+WPguaVsOOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTE2Ny0tIGNoZ++8jOWwveeuoei/meS4quWPguaVsOeahOexu+Wei+aYr2xvbmfvvIzkvYblj6rmnIkw5oiWMeeahOWAvOiiq+S8oOmAkue7mWRlcXVldWVfaHVnZV9wYWdlX3ZtYeOAguWmguaenOivpeWAvOS4ujDvvIxcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0PTE5Mz1TZXRQYWdlUHJpdmF0ZShwYWdlKeWSjHJlc3ZfaHVnZV9wYWdlcy3jgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0LTIwMi1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdDoyMDM65ZyoYWxsb2NfaHVnZXRsYl9mb2xpbygp5byA5aeL6LCD55Sodm1hX25lZWRzX3Jlc2VydmF0aW9uKCnlkozpobXpnaLliIbphY3lkI7osIPnlKhcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdC0yMDQtdm1hX2NvbW1pdF9yZXNlcnZhdGlvbigp5LmL6Ze077yM6aKE55WZ5pig5bCE5pyJ5Y+v6IO96KKr5pS55Y+Y44CC5aaC5p6caHVnZXRsYl9yZXNlcnZlX3BhZ2Vz5Zyo5YWxXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz03MDA9c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03OTItXFx0XFx0ICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzkzOlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhcXHUwMDI2cHNldWRvX3ZtYSwgYWRkciwgZmFsc2UpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTc5NC1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODEzLVxcdFxcdCAqIGZvbGlvX3VubG9jayBiZWNhdXNlIGxvY2tlZCBieSBodWdldGxiX2FkZF90b19wYWdlX2NhY2hlKClcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MTQ6XFx0XFx0ICogZm9saW9fcHV0KCkgZHVlIHRvIHJlZmVyZW5jZSBmcm9tIGFsbG9jX2h1Z2V0bGJfZm9saW8oKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgxNS1cXHRcXHQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTcwMT1zdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfYWxsb2NfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMy1cXHRcXHR1OCBhbGxvY19mbGFncyk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NzA0OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MDUtXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDY6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwNy1cXHRcXHRcXHRcXHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzA4LVxcdFxcdFxcdFxcdGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjcwOTpzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fcmVzZXJ2ZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC03MTAtXFx0XFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2spO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEyMz1zdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMjYtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTEyNzpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTI4LVxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExMzQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMzU6YWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMzYtXFx0XFx0XFx0ICAgIG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTExNDE9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExNDI6YWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTQzLVxcdFxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yMTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNjUtXFxubW0vaHVnZXRsYi5jOjIxNjY6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxNjctXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIxODYtLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXFxubW0vaHVnZXRsYi5jOjIxODc6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL2h1Z2V0bGIuYy0yMTg4LVxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaywgYm9vbCBhbGxvd19hbGxvY19mYWxsYmFjaylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTIwPXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTI3LSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzdG9yZSByZXNlcnZhdGlvbiBpbmZvcm1hdGlvbiBvbiBlcnJvciBwYXRocy5cXG5tbS9odWdldGxiLmM6MjUyODogKiBJdCBzaG91bGQgT05MWSBiZSBjYWxsZWQgZm9yIGZvbGlvcyBhbGxvY2F0ZWQgdmlhIGFsbG9jX2h1Z2V0bGJfZm9saW8oKSxcXG5tbS9odWdldGxiLmMtMjUyOS0gKiBhbmQgdGhlIGh1Z2V0bGIgbXV0ZXggc2hvdWxkIHJlbWFpbiBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIHJvdXRpbmUuXFxuLS1cXG5tbS9odWdldGxiLmMtMjUzNC0gKiAyKSBObyByZXNlcnZhdGlvbiB3YXMgaW4gcGxhY2UgZm9yIHRoZSBwYWdlLCBzbyBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBpc1xcbm1tL2h1Z2V0bGIuYzoyNTM1OiAqICAgIG5vdCBzZXQuICBIb3dldmVyLCBhbGxvY19odWdldGxiX2ZvbGlvIGFsd2F5cyB1cGRhdGVzIHRoZSByZXNlcnZlIG1hcC5cXG5tbS9odWdldGxiLmMtMjUzNi0gKlxcbi0tXFxubW0vaHVnZXRsYi5jLTI1NDMtICpcXG5tbS9odWdldGxiLmM6MjU0NDogKiBJbiBjYXNlIDIsIHNpbXBseSB1bmRvIHJlc2VydmUgbWFwIG1vZGlmaWNhdGlvbnMgZG9uZSBieSBhbGxvY19odWdldGxiX2ZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yNTQ1LSAqL1xcbm1tL2h1Z2V0bGIuYz0yNTQ2PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1NzItXFx0XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgdGhlcmUgaXMgYW4gZW50cnkgaW4gdGhlIHJlc2VydmUgbWFwXFxubW0vaHVnZXRsYi5jOjI1NzM6XFx0XFx0XFx0ICogbm90IGFkZGVkIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uICBXZSBrbm93IGl0IHdhcyBhZGRlZFxcbm1tL2h1Z2V0bGIuYzoyNTc0OlxcdFxcdFxcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2VcXG5tbS9odWdldGxiLmMtMjU3NS1cXHRcXHRcXHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxcbi0tXFxubW0vaHVnZXRsYi5jPTI5MTY9dHlwZWRlZiBlbnVtIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yOTQxLSAqL1xcbm1tL2h1Z2V0bGIuYzoyOTQyOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtMjk0My1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ4ODc9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUwMDgtXFx0XFx0XFx0XFx0LyogRG8gbm90IHVzZSByZXNlcnZlIGFzIGl0J3MgcHJpdmF0ZSBvd25lZCAqL1xcbm1tL2h1Z2V0bGIuYzo1MDA5OlxcdFxcdFxcdFxcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy01MDEwLVxcdFxcdFxcdFxcdGlmIChJU19FUlIobmV3X2ZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTU0ODA9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NTYxLVxcdHNwaW5fdW5sb2NrKHZtZi1cXHUwMDNlcHRsKTtcXG5tbS9odWdldGxiLmM6NTU2MjpcXHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzLCBjb3dfZnJvbV9vd25lcik7XFxubW0vaHVnZXRsYi5jLTU1NjMtXFxuLS1cXG5tbS9odWdldGxiLmM9NTc1Mj1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTgyMS1cXG5tbS9odWdldGxiLmM6NTgyMjpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNTgyMy1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTYwMDI9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjM3LSAqL1xcbm1tL2h1Z2V0bGIuYzo2MjM4OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTYyMzktXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjU0LVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2MjU1OlxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBub2RlLCBub2RlbWFzaywgZ2ZwX21hc2ssIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjI1Ni1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTYyNjU9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzIxLVxcbm1tL2h1Z2V0bGIuYzo2MzIyOlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy02MzIzLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM0Ny1cXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NjM0ODpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKGgsIGRzdF92bWEsIGRzdF9hZGRyKTtcXG5tbS9odWdldGxiLmMtNjM0OS1cXHRcXHRcXHRpZiAoIWZvbGlvKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM2OC1cXG5tbS9odWdldGxiLmM6NjM2OTpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjM3MC1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTY2NjI9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NzgyLVxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxubW0vaHVnZXRsYi5jOjY3ODM6XFx0XFx0XFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcXG5tbS9odWdldGxiLmMtNjc4NC1cXHRcXHRcXHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy05My1cXG5tbS9tZW1mZC5jOjk0OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXFxubW0vbWVtZmQuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE0NTYtXFx0XFx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIGlseCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6MTQ1NzpcXHRcXHRyZXR1cm4gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBuaWQsIG5vZGVtYXNrLCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMTQ1OC1cXHRcXHRcXHRcXHRodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKE1SX01FTVBPTElDWV9NQklORCkpO1xcbi0tXFxubW0vbWlncmF0ZS5jPTIxOTc9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjIxNC1cXHRcXHRnZnBfbWFzayA9IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soaCwgZ2ZwX21hc2spO1xcbm1tL21pZ3JhdGUuYzoyMjE1OlxcdFxcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCxcXG5tbS9taWdyYXRlLmMtMjIxNi1cXHRcXHRcXHRcXHRcXHRcXHRtdGMtXFx1MDAzZW5tYXNrLCBnZnBfbWFzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MzUuNzgwMTM0ODI3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0ODcxNzQxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGh1Z2V0bGJmc19mYWxsb2NhdGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgYGh1Z2V0bGJmc19mYWxsb2NhdGVgLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLCBzbyBJJ2xsIHplcm8gaW4gb24gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gU3BlY2lmaWNhbGx5LCBsZXQncyBncmFiIGxpbmVzIDc3MCB0aHJvdWdoIDgwNS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgY2h1bmsgb2YgY29udGV4dCBhcm91bmQgaXRzIGNvcmUgbG9naWMuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgaXQgaGFuZGxlcyBwcmUtYWxsb2NhdGluZyBzcGFjZSB3aXRoaW4gdGhlIGh1Z2UgcGFnZSBmaWxlIHN5c3RlbSDigJMgcGFydGljdWxhcmx5IHdoZXJlIGl0IGhhbmRsZXMgYmxvY2sgYWxsb2NhdGlvbiBhbmQgcG90ZW50aWFsIGVycm9yIHNjZW5hcmlvcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2UgYWxsb2NhdGlvbiBtZWNoYW5pc21zIGFuZCBpZiB0aGVyZSdzIGFueSBjbGV2ZXJuZXNzIGluIGhvdyBpdCBhZGRyZXNzZXMgZnJhZ21lbnRhdGlvbiBpc3N1ZXMuIExldCdzIHNlZSBpZiB0aGlzIHNlY3Rpb24gcmV2ZWFscyB0aGUga2V5IG9wZXJhdGlvbmFsIHBhdHRlcm5zIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZmFpbHVyZXMgZWxlZ2FudGx5LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHRoZXNlIGxhcmdlIHBhZ2VzLiBJIGFudGljaXBhdGUgSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBzb2xpZCBncmFzcCBvZiBpdHMgcHVycG9zZSBmcm9tIHRoaXMgc2VnbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OTozOC4yNjczMTE4OTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc3MDpcXHRcXHRcXHQvKiBhZGRyIGlzIHRoZSBvZmZzZXQgd2l0aGluIHRoZSBmaWxlICh6ZXJvIGJhc2VkKSAqL1xcbiA3NzE6XFx0XFx0XFx0YWRkciA9IGluZGV4ICogaHBhZ2Vfc2l6ZTtcXG4gNzcyOlxcdFxcbiA3NzM6XFx0XFx0XFx0LyogbXV0ZXggdGFrZW4gaGVyZSwgZmF1bHQgcGF0aCBhbmQgaG9sZSBwdW5jaCAqL1xcbiA3NzQ6XFx0XFx0XFx0aGFzaCA9IGh1Z2V0bGJfZmF1bHRfbXV0ZXhfaGFzaChtYXBwaW5nLCBpbmRleCk7XFxuIDc3NTpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcXG4gNzc2OlxcdFxcbiA3Nzc6XFx0XFx0XFx0LyogU2VlIGlmIGFscmVhZHkgcHJlc2VudCBpbiBtYXBwaW5nIHRvIGF2b2lkIGFsbG9jL2ZyZWUgKi9cXG4gNzc4OlxcdFxcdFxcdGZvbGlvID0gZmlsZW1hcF9nZXRfZm9saW8obWFwcGluZywgaW5kZXggXFx1MDAzY1xcdTAwM2MgaHVnZV9wYWdlX29yZGVyKGgpKTtcXG4gNzc5OlxcdFxcdFxcdGlmICghSVNfRVJSKGZvbGlvKSkge1xcbiA3ODA6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gNzgxOlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XFxuIDc4MjpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzgzOlxcdFxcdFxcdH1cXG4gNzg0OlxcdFxcbiA3ODU6XFx0XFx0XFx0LypcXG4gNzg2OlxcdFxcdFxcdCAqIEFsbG9jYXRlIGZvbGlvIHdpdGhvdXQgc2V0dGluZyB0aGUgYXZvaWRfcmVzZXJ2ZSBhcmd1bWVudC5cXG4gNzg3OlxcdFxcdFxcdCAqIFRoZXJlIGNlcnRhaW5seSBhcmUgbm8gcmVzZXJ2ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZVxcbiA3ODg6XFx0XFx0XFx0ICogcHNldWRvX3ZtYS4gIEhvd2V2ZXIsIHRoZXJlIGNvdWxkIGJlIHNoYXJlZCBtYXBwaW5ncyB3aXRoXFxuIDc4OTpcXHRcXHRcXHQgKiByZXNlcnZlcyBmb3IgdGhlIGZpbGUgYXQgdGhlIGlub2RlIGxldmVsLiAgSWYgd2UgZmFsbG9jYXRlXFxuIDc5MDpcXHRcXHRcXHQgKiBmb2xpb3MgaW4gdGhlc2UgYXJlYXMsIHdlIG5lZWQgdG8gY29uc3VtZSB0aGUgcmVzZXJ2ZXNcXG4gNzkxOlxcdFxcdFxcdCAqIHRvIGtlZXAgcmVzZXJ2YXRpb24gYWNjb3VudGluZyBjb25zaXN0ZW50LlxcbiA3OTI6XFx0XFx0XFx0ICovXFxuIDc5MzpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oXFx1MDAyNnBzZXVkb192bWEsIGFkZHIsIGZhbHNlKTtcXG4gNzk0OlxcdFxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuIDc5NTpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmh1Z2V0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pO1xcbiA3OTY6XFx0XFx0XFx0XFx0ZXJyb3IgPSBQVFJfRVJSKGZvbGlvKTtcXG4gNzk3OlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3OTg6XFx0XFx0XFx0fVxcbiA3OTk6XFx0XFx0XFx0Zm9saW9femVyb191c2VyKGZvbGlvLCBhZGRyKTtcXG4gODAwOlxcdFxcdFxcdF9fZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XFxuIDgwMTpcXHRcXHRcXHRlcnJvciA9IGh1Z2V0bGJfYWRkX3RvX3BhZ2VfY2FjaGUoZm9saW8sIG1hcHBpbmcsIGluZGV4KTtcXG4gODAyOlxcdFxcdFxcdGlmICh1bmxpa2VseShlcnJvcikpIHtcXG4gODAzOlxcdFxcdFxcdFxcdHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihoLCBcXHUwMDI2cHNldWRvX3ZtYSwgYWRkciwgZm9saW8pO1xcbiA4MDQ6XFx0XFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gODA1OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aHVnZXRsYl9mYXVsdF9tdXRleF90YWJsZVtoYXNoXSk7XFxuIDgwNjpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gODA3OlxcdFxcdFxcdH1cXG4gODA4OlxcdFxcbiA4MDk6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZodWdldGxiX2ZhdWx0X211dGV4X3RhYmxlW2hhc2hdKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6MzguMjY3NDE4ODAyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzc2MTM3NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGl2aW5nIGludG8gaHVnZXRsYmZzIGFuZCBmYWxsb2NhdGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBgaHVnZXRsYmZzYCBjb2RlIGFnYWluLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBmYWxsb2NhdGVgLiBJIHJlY2FsbCBzZWVpbmcgc29tZXRoaW5nIGFib3V0IGEgYHBzZXVkb192bWFgIHdpdGhpbiBgaHVnZXRsYmZzX2ZhbGxvY2F0ZWAgYW5kIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50ZXJhY3Rpb25zLiBUaW1lIHRvIHplcm8gaW4gb24gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgdGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgcHNldWRvX3ZtYWAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgYW5kIHdoYXQgcm9sZSBpdCBwbGF5cyBpbiB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLiBMZXQncyBqdW1wIHRvIGxpbmVzIDcyMC03NzAgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgaXMgdGVsbGluZyBtZSBkaXJlY3RseS4gSSdtIGV4cGVjdGluZyBzb21lIGludGVyZXN0aW5nIGluaXRpYWxpemF0aW9uIGxvZ2ljIGhlcmUsIGFuZCBob3BlZnVsbHksIGl0J2xsIHByb3ZpZGUgaW5zaWdodHMgaW50byB0aGUgc3BlY2lmaWMgbWVtb3J5IG1hcHBpbmcgdGVjaG5pcXVlcyB0aGF0IGBodWdldGxiZnNgIHVzZXMgZHVyaW5nIGBmYWxsb2NhdGVgLiBJJ20gcmVhZHkgdG8gcGFyc2UgdGhlIHNwZWNpZmljcyBhbmQgc3RhcnQgcGllY2luZyB0b2dldGhlciB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzOTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjQwLjM0NTAzNDkyNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzIwOlxcdFxcdFxcdGdvdG8gb3V0X25vbG9jaztcXG4gNzIxOlxcdFxcdH1cXG4gNzIyOlxcdFxcbiA3MjM6XFx0XFx0LypcXG4gNzI0OlxcdFxcdCAqIERlZmF1bHQgcHJlYWxsb2NhdGUgY2FzZS5cXG4gNzI1OlxcdFxcdCAqIEZvciB0aGlzIHJhbmdlLCBzdGFydCBpcyByb3VuZGVkIGRvd24gYW5kIGVuZCBpcyByb3VuZGVkIHVwXFxuIDcyNjpcXHRcXHQgKiBhcyB3ZWxsIGFzIGJlaW5nIGNvbnZlcnRlZCB0byBwYWdlIG9mZnNldHMuXFxuIDcyNzpcXHRcXHQgKi9cXG4gNzI4OlxcdFxcdHN0YXJ0ID0gb2Zmc2V0IFxcdTAwM2VcXHUwMDNlIGhwYWdlX3NoaWZ0O1xcbiA3Mjk6XFx0XFx0ZW5kID0gKG9mZnNldCArIGxlbiArIGhwYWdlX3NpemUgLSAxKSBcXHUwMDNlXFx1MDAzZSBocGFnZV9zaGlmdDtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0aW5vZGVfbG9jayhpbm9kZSk7XFxuIDczMjpcXHRcXG4gNzMzOlxcdFxcdC8qIFdlIG5lZWQgdG8gY2hlY2sgcmxpbWl0IGV2ZW4gd2hlbiBGQUxMT0NfRkxfS0VFUF9TSVpFICovXFxuIDczNDpcXHRcXHRlcnJvciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIG9mZnNldCArIGxlbik7XFxuIDczNTpcXHRcXHRpZiAoZXJyb3IpXFxuIDczNjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzM3OlxcdFxcbiA3Mzg6XFx0XFx0aWYgKChpbmZvLVxcdTAwM2VzZWFscyBcXHUwMDI2IEZfU0VBTF9HUk9XKSBcXHUwMDI2XFx1MDAyNiBvZmZzZXQgKyBsZW4gXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zaXplKSB7XFxuIDczOTpcXHRcXHRcXHRlcnJvciA9IC1FUEVSTTtcXG4gNzQwOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3NDE6XFx0XFx0fVxcbiA3NDI6XFx0XFxuIDc0MzpcXHRcXHQvKlxcbiA3NDQ6XFx0XFx0ICogSW5pdGlhbGl6ZSBhIHBzZXVkbyB2bWEgYXMgdGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaHVnZSBwYWdlXFxuIDc0NTpcXHRcXHQgKiBhbGxvY2F0aW9uIHJvdXRpbmVzLlxcbiA3NDY6XFx0XFx0ICovXFxuIDc0NzpcXHRcXHR2bWFfaW5pdChcXHUwMDI2cHNldWRvX3ZtYSwgbW0pO1xcbiA3NDg6XFx0XFx0dm1fZmxhZ3NfaW5pdChcXHUwMDI2cHNldWRvX3ZtYSwgVk1fSFVHRVRMQiB8IFZNX01BWVNIQVJFIHwgVk1fU0hBUkVEKTtcXG4gNzQ5OlxcdFxcdHBzZXVkb192bWEudm1fZmlsZSA9IGZpbGU7XFxuIDc1MDpcXHRcXG4gNzUxOlxcdFxcdGZvciAoaW5kZXggPSBzdGFydDsgaW5kZXggXFx1MDAzYyBlbmQ7IGluZGV4KyspIHtcXG4gNzUyOlxcdFxcdFxcdC8qXFxuIDc1MzpcXHRcXHRcXHQgKiBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSB2YWRkciB3aGVyZSB0aGUgcGFnZSBpcyBiZWluZ1xcbiA3NTQ6XFx0XFx0XFx0ICogZmF1bHRlZCBpbiwgYnV0IHdlIGhhdmUgbm8gdmFkZHIgaGVyZS5cXG4gNzU1OlxcdFxcdFxcdCAqL1xcbiA3NTY6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gNzU3OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4gNzU4OlxcdFxcbiA3NTk6XFx0XFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjQwLjM0NTE0NDQ0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDkxNDk2MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gSHVnZXRsYmZzIGFuZCBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBodWdldGxiZnNfZmFsbG9jYXRlYCBhbmQgdGhlIGNhbGwgdG8gYHZtYV9pbml0KFx1MDAyNnBzZXVkb192bWEsIG1tKWAuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYG1tYCBpbiB0aGF0IGNvbnRleHQgaXMgYGN1cnJlbnQtXHUwMDNlbW1gLCBhbmQgdGhhdCBpbW1lZGlhdGVseSByYWlzZXMgYSBmZXcgcXVlc3Rpb25zIGluIG15IG1pbmQuIFdoYXQgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgY2FsbGluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIHdoYXQgdmlydHVhbCBtZW1vcnkgYXJlYXMgKFZNQXMpIGFyZSBwYXNzZWQ/IExldCdzIGRpZyBpbnRvIGBtbS9odWdldGxiLmNgLlxuXG5SaWdodCwgbGV0J3Mgc2VlLCBgY29weV9odWdldGxiX3BhZ2VfcmFuZ2VgIGR1cmluZyBhIGZvcmsgcGFzc2VzIGBkc3Rfdm1hYCDigJMgbWVhbmluZyBgdm1hLVx1MDAzZXZtX21tYCBpcyB0aGUgZGVzdGluYXRpb24gbWVtb3J5IG1hcCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gd2UndmUgZ290IGBodWdldGxiX3dwYCBkdXJpbmcgYSB3cml0ZSBmYXVsdCwgd2hpY2ggcGFzc2VzIGEgYHZtYWAsIHNvIGFnYWluLCBgdm1hLVx1MDAzZXZtX21tYCBpcyByZWxldmFudC4gYGh1Z2V0bGJfbm9fcGFnZWAgZHVyaW5nIGEgZmF1bHQgYWxzbyB0YWtlcyBhIGB2bWFgLCBzYW1lIHNpdHVhdGlvbi4gYGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZWAgaXMgdHJpZ2dlcmVkIGJ5IHVzZXJmYXVsdGZkIGFuZCBwYXNzZXMgYGRzdF92bWFgLCBhbmQgZmluYWxseSwgdGhlIG9yaWdpbmFsIGBodWdldGxiZnNfZmFsbG9jYXRlYCBjYWxsLCB1c2luZyBgXHUwMDI2cHNldWRvX3ZtYWAsIHdob3NlIGB2bV9tbWAgaXMgYGN1cnJlbnQtXHUwMDNlbW1gLiBUaGF0J3MgYSBnb29kIG92ZXJ2aWV3LlxuXG5Ob3csIG15IGZvY3VzIHNoaWZ0cy4gR2l2ZW4gdGhlc2UgZGlmZmVyZW50IGNvbnRleHRzIGFuZCB0aGUgY3J1Y2lhbCByb2xlIG9mIHRoZSBtZW1vcnkgbWFwIChgbW1gKSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBnZXRfbWVtX2Nncm91cF9mcm9tX21tYCBoYW5kbGVzIGBOVUxMYCBvciBub24tYE5VTExgIG1lbW9yeSBtYXBzLiBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGluIHRlcm1zIG9mIG1lbW9yeSBjb250cm9sIGdyb3Vwcz8gTGV0J3MgZ28gY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW1gIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyOTUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OTo0My44MzY2NDM4NTdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyMTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTUwOlxcdCAqIE9idGFpbiBhIHJlZmVyZW5jZSBvbiBtbS1cXHUwMDNlbWVtY2cgYW5kIHJldHVybnMgaXQgaWYgc3VjY2Vzc2Z1bC4gSWYgbW1cXG4xMTUxOlxcdCAqIGlzIE5VTEwsIHRoZW4gdGhlIG1lbWNnIGlzIGNob3NlbiBhcyBmb2xsb3dzOlxcbjExNTI6XFx0ICogMSkgVGhlIGFjdGl2ZSBtZW1jZywgaWYgc2V0LlxcbjExNTM6XFx0ICogMikgY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZW1lbWNnLCBpZiBhdmFpbGFibGVcXG4xMTU0OlxcdCAqIDMpIHJvb3QgbWVtY2dcXG4xMTU1OlxcdCAqIElmIG1lbV9jZ3JvdXAgaXMgZGlzYWJsZWQsIE5VTEwgaXMgcmV0dXJuZWQuXFxuMTE1NjpcXHQgKi9cXG4xMTU3OlxcdHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbWVtX2Nncm91cF9mcm9tX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbjExNTg6XFx0e1xcbjExNTk6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjExNjA6XFx0XFxuMTE2MTpcXHRcXHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxcbjExNjI6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTE2MzpcXHRcXG4xMTY0OlxcdFxcdC8qXFxuMTE2NTpcXHRcXHQgKiBQYWdlIGNhY2hlIGluc2VydGlvbnMgY2FuIGhhcHBlbiB3aXRob3V0IGFuXFxuMTE2NjpcXHRcXHQgKiBhY3R1YWwgbW0gY29udGV4dCwgZS5nLiBkdXJpbmcgZGlzayBwcm9iaW5nXFxuMTE2NzpcXHRcXHQgKiBvbiBib290LCBsb29wYmFjayBJTywgYWNjdCgpIHdyaXRlcyBldGMuXFxuMTE2ODpcXHRcXHQgKlxcbjExNjk6XFx0XFx0ICogTm8gbmVlZCB0byBjc3NfZ2V0IG9uIHJvb3QgbWVtY2cgYXMgdGhlIHJlZmVyZW5jZVxcbjExNzA6XFx0XFx0ICogY291bnRpbmcgaXMgZGlzYWJsZWQgb24gdGhlIHJvb3QgbGV2ZWwgaW4gdGhlXFxuMTE3MTpcXHRcXHQgKiBjZ3JvdXAgY29yZS4gU2VlIENTU19OT19SRUYuXFxuMTE3MjpcXHRcXHQgKi9cXG4xMTczOlxcdFxcdGlmICh1bmxpa2VseSghbW0pKSB7XFxuMTE3NDpcXHRcXHRcXHRtZW1jZyA9IGFjdGl2ZV9tZW1jZygpO1xcbjExNzU6XFx0XFx0XFx0aWYgKHVubGlrZWx5KG1lbWNnKSkge1xcbjExNzY6XFx0XFx0XFx0XFx0LyogcmVtb3RlIG1lbWNnIG11c3QgaG9sZCBhIHJlZiAqL1xcbjExNzc6XFx0XFx0XFx0XFx0Y3NzX2dldChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcyk7XFxuMTE3ODpcXHRcXHRcXHRcXHRyZXR1cm4gbWVtY2c7XFxuMTE3OTpcXHRcXHRcXHR9XFxuMTE4MDpcXHRcXHRcXHRtbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbjExODE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFtbSkpXFxuMTE4MjpcXHRcXHRcXHRcXHRyZXR1cm4gcm9vdF9tZW1fY2dyb3VwO1xcbjExODM6XFx0XFx0fVxcbjExODQ6XFx0XFxuMTE4NTpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTE4NjpcXHRcXHRkbyB7XFxuMTE4NzpcXHRcXHRcXHRtZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV90YXNrKHJjdV9kZXJlZmVyZW5jZShtbS1cXHUwMDNlb3duZXIpKTtcXG4xMTg4OlxcdFxcdFxcdGlmICh1bmxpa2VseSghbWVtY2cpKVxcbjExODk6XFx0XFx0XFx0XFx0bWVtY2cgPSByb290X21lbV9jZ3JvdXA7XFxuMTE5MDpcXHRcXHR9IHdoaWxlICghY3NzX3RyeWdldChcXHUwMDI2bWVtY2ctXFx1MDAzZWNzcykpO1xcbjExOTE6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTE5MjpcXHRcXHRyZXR1cm4gbWVtY2c7XFxuMTE5MzpcXHR9XFxuMTE5NDpcXHRFWFBPUlRfU1lNQk9MKGdldF9tZW1fY2dyb3VwX2Zyb21fbW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwOTo1OTo0My44MzY5OTAwODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDE0MzU3MzgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gVGhlIGtleSBpc3N1ZSBhcHBlYXJzIHRvIGJlIGluY29ycmVjdCBhY2NvdW50aW5nIGluIGh1Z2UgcGFnZSBtZW1vcnkgY2hhcmdpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBQcmV2aW91c2x5LCB0aGlzIGZ1bmN0aW9uIHdhcyB0aWVkIHRvIHRoZSBgY3VycmVudGAgdGFzaywgd2hpY2ggd29ya3MgZmluZSBpbiBtYW55IGNhc2VzLiBIb3dldmVyLCBkdXJpbmcgb3BlcmF0aW9ucyBsaWtlIGBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZWAgd2l0aGluIGEgZm9yayAoYGR1cF9tbWFwYCkgb3Igd2l0aCB1c2VyZmF1bHRmZCwgdGhlIGFsbG9jYXRpb24gaXMgZm9yIGEgKmRpZmZlcmVudCogbWVtb3J5IHNwYWNlIChjaGlsZCBwcm9jZXNzIG9yIHVzZXIgc3BhY2UpLCBub3QgdGhlIG9yaWdpbmFsIGBjdXJyZW50YCB0YXNrLiBTbyBjaGFyZ2luZyB0aGUgYGN1cnJlbnRgIHRhc2sgaXMgbG9naWNhbGx5IHdyb25nLiBUaGUgcGF0Y2ggc2hpZnRzIHRoZSBjaGFyZ2luZyByZXNwb25zaWJpbGl0eSB0byB0aGUgbWVtb3J5IG1hcCAoYG1tYCkgb3duZXIsIHdoaWNoIG1ha2VzIG1vcmUgc2Vuc2UsIGFsaWduaW5nIHdpdGggdGhlIGBfX21lbV9jZ3JvdXBfY2hhcmdlYCBmdW5jdGlvbi4gVGhpcyBjb3JyZWN0cyB0aGUgb3duZXIgb2YgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiB3aXRoIHRoZSBtZW1vcnkgc3BhY2UgdGhhdCdzIHVzaW5nIHRoZSBodWdlIHBhZ2UsIGFuZCBub3QgdGhlIHRhc2sgcGVyZm9ybWluZyB0aGUgaW5pdGlhbCBzeXN0ZW0gY2FsbC5cblxuTm93LCBzaG91bGQgd2UgYm90aGVyIGZ1enppbmcgdGhpcz8gQWJzb2x1dGVseSEgVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcyAtIGBtbS9odWdldGxiLmNgIGFuZCBgbW0vbWVtY29udHJvbC5jYCAtIGFuZCBtb2RpZmllcyByZWFjaGFibGUgY29kZS4gSHVnZSBwYWdlIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIGFyZSBzdGFuZGFyZCwgZWFzaWx5IHRyaWdnZXJlZCB3aXRoaW4gc3RhbmRhcmQgVk0vUUVNVSBrZXJuZWwgZnV6emluZyBlbnZpcm9ubWVudHMuIERlZmluaXRlbHkgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUuXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgc3ltYm9scyB0byB0YXJnZXQgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLiBUaW1lIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgc2VhcmNoIGZvciByZWxldmFudCBvcHRpb25zIHJlbGF0ZWQgdG8gYGh1Z2V0bGJgLCBgbWVtY29udHJvbGAsIGFuZCBhbnkgY29uZmlndXJhdGlvbnMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gY2dyb3VwIGh1Z2UgcGFnZSBjaGFyZ2luZy4gVGhpcyB3aWxsIGhlbHAgcmVmaW5lIHRoZSBmdXp6aW5nIHRhcmdldCBhbmQgZm9jdXMgb24gdGhlIGltcG9ydGFudCBjb2RlIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY4OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjQ3Ljk4MDU2NjA4M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MDE4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NDcwPWNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfREFYX1ZNRU1NQVBcXG4tLVxcbm1tL0tjb25maWctNDcyLVxcbm1tL0tjb25maWc6NDczOmNvbmZpZyBBUkNIX1dBTlRfT1BUSU1JWkVfSFVHRVRMQl9WTUVNTUFQXFxubW0vS2NvbmZpZy00NzQtXFx0Ym9vbFxcbm1tL0tjb25maWctNDc1LVxcbm1tL0tjb25maWc6NDc2OmNvbmZpZyBBUkNIX1dBTlRfSFVHRVRMQl9WTUVNTUFQX1BSRUlOSVRcXG5tbS9LY29uZmlnLTQ3Ny1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTY5ND1jb25maWcgQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVNcXG4tLVxcbm1tL0tjb25maWctNjk2LVxcbm1tL0tjb25maWc6Njk3OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbm1tL0tjb25maWctNjk4LVxcdGRlZl9ib29sIG5cXG4tLVxcbm1tL0tjb25maWctNzAwLVxcdCAgQWxsb3dzIHRoZSBwYWdlYmxvY2tfb3JkZXIgdmFsdWUgdG8gYmUgZHluYW1pYyBpbnN0ZWFkIG9mIGp1c3Qgc3RhbmRhcmRcXG5tbS9LY29uZmlnOjcwMTpcXHQgIEhVR0VUTEJfUEFHRV9PUkRFUiB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBIdWdlVExCIHBhZ2Ugc2l6ZXMgYXZhaWxhYmxlXFxubW0vS2NvbmZpZy03MDItXFx0ICBvbiBhIHBsYXRmb3JtLlxcbi0tXFxubW0vS2NvbmZpZz03ODI9Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1NcXG4tLVxcbm1tL0tjb25maWctODA5LVxcbm1tL0tjb25maWc6ODEwOmNvbmZpZyBBUkNIX1dBTlRfR0VORVJBTF9IVUdFVExCXFxubW0vS2NvbmZpZy04MTEtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz0xMDAzPWNvbmZpZyBQR1RBQkxFX0hBU19IVUdFX0xFQVZFU1xcbm1tL0tjb25maWc6MTAwNDpcXHRkZWZfYm9vbCBUUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBIVUdFVExCX1BBR0VcXG5tbS9LY29uZmlnLTEwMDUtXFxuLS1cXG5tbS9LY29uZmlnPTEwMDk9Y29uZmlnIEhBVkVfR0lHQU5USUNfRk9MSU9TXFxubW0vS2NvbmZpZzoxMDEwOlxcdGRlZl9ib29sIChIVUdFVExCX1BBR0UgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgfHwgXFxcXFxcbm1tL0tjb25maWctMTAxMS1cXHRcXHQgKFpPTkVfREVWSUNFIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjQ4LjAyNTM3MDg5MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTU4NDU0ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaHVnZSBwYWdlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBrZXJuZWwuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcywgc3RhcnRpbmcgd2l0aCBgbW0vS2NvbmZpZ2AsIGBpbml0L0tjb25maWdgLCBhbmQgYGZzL0tjb25maWdgLiBUaGVzZSBhcmUgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBtZW1vcnkgbWFuYWdlbWVudCwgaW5pdGlhbGl6YXRpb24sIGFuZCBmaWxlc3lzdGVtLXJlbGF0ZWQgY29uZmlndXJhdGlvbnMsIGFuZCBJIGV4cGVjdCB0byBmaW5kIHRoZSByZWxldmFudCBgSFVHRVRMQl9QQUdFYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBfSFVHRVRMQmAgb3B0aW9ucyBpbiB0aGVzZSBmaWxlcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG5cblRoZW4sIEknbGwgdXNlIGBncmVwYCBhcyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gc2NhbiB0aHJvdWdoIGBmcy9LY29uZmlnYCBhbmQgYGluaXQvS2NvbmZpZ2AgZm9yIGFueSBtZW50aW9ucyBvZiBgSFVHRVRMQmAuIFRoaXMgc2hvdWxkIGhlbHAgbWUgcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIG9yIGNvbnRleHRzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lLCBhdCBsZWFzdC4gSSdtIGhvcGluZyBJIGNhbiBwaWVjZSB0b2dldGhlciBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGUgcmVsZXZhbnQgbW9kdWxlcyBhbmQgd2hlcmUgdGhleSBsaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODg1OSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjUwLjE4MzgyODU2MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MzM4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjM1PWNvbmZpZyBUTVBGU19RVU9UQVxcbi0tXFxuZnMvS2NvbmZpZy0yNDYtXFxuZnMvS2NvbmZpZzoyNDc6Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNDgtXFx0ZGVmX2Jvb2wgblxcbmZzL0tjb25maWctMjQ5LVxcbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNTEtXFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbmZzL0tjb25maWc6MjUyOlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1My1cXHRzZWxlY3QgTUVNRkRfQ1JFQVRFXFxuLS1cXG5mcy9LY29uZmlnLTI2MS1cXG5mcy9LY29uZmlnOjI2MjppZiBIVUdFVExCRlNcXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbmZzL0tjb25maWctMjY0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cXFwiXFxuZnMvS2NvbmZpZy0yNjUtXFx0ZGVmYXVsdCBuXFxuZnMvS2NvbmZpZzoyNjY6XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWctMjY3LVxcdGhlbHBcXG4tLVxcbmZzL0tjb25maWctMjcwLVxcdCAgKGJvb3QgY29tbWFuZCBsaW5lKSBvciBodWdldGxiX29wdGltaXplX3ZtZW1tYXAgKHN5c2N0bCkuXFxuZnMvS2NvbmZpZzoyNzE6ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZzoyNzQ6XFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZy0yNzUtXFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbmZzL0tjb25maWctMjc2LVxcbmZzL0tjb25maWc6Mjc3OmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbmZzL0tjb25maWc6Mjc4OlxcdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxcbmZzL0tjb25maWc6Mjc5OlxcdGRlcGVuZHMgb24gQVJDSF9XQU5UX09QVElNSVpFX0hVR0VUTEJfVk1FTU1BUFxcbmZzL0tjb25maWctMjgwLVxcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcXG5mcy9LY29uZmlnOjI4MTpcXHRzZWxlY3QgU1BBUlNFTUVNX1ZNRU1NQVBfUFJFSU5JVCBpZiBBUkNIX1dBTlRfSFVHRVRMQl9WTUVNTUFQX1BSRUlOSVRcXG5mcy9LY29uZmlnLTI4Mi1cXG5mcy9LY29uZmlnOjI4Mzpjb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuZnMvS2NvbmZpZzoyODQ6XFx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yODUtXFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRfSFVHRV9QTURfU0hBUkUgXFx1MDAyNlxcdTAwMjYgU1BMSVRfUE1EX1BUTE9DS1NcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6NTAuMjI5NTY3Nzc5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MzY2MDU3MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBNRU1DR2AgaXMgYmVpbmcgY29uZmlndXJlZCBpbiB0aGlzIHN5c3RlbS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGZvdW5kYXRpb25hbCBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgcGxhY2Ugd2hlcmUgdGhlIG1ham9yIGtlcm5lbCBmZWF0dXJlcywgYW5kIHRoZWlyIGFzc29jaWF0ZWQgYnVpbGQtdGltZSBvcHRpb25zLCBhcmUgZGVmaW5lZC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBlbmFibGVkIGFuZCBob3cuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkZWZpbml0aW9uLCBkZXBlbmRlbmNpZXMsIGFuZCBwZXJoYXBzIHNvbWUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlIG1lbW9yeSBjZ3JvdXAgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhhdCBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc5NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjUxLjg2NjE3NjA4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTIxOTMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjUxLjkxMTM5ODA1OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE5NDUwOTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUuIE15IGN1cnJlbnQgdHJhaW4gb2YgdGhvdWdodCBsZWFkcyBtZSB0byBjb25zaWRlciBhbGwgcmVsZXZhbnQgZmFjdG9ycy4gSSd2ZSBiZWVuIGZvY3VzaW5nIG9uIFgsIFksIGFuZCBaLCBidXQgaXQncyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoIGFuZCBub3QgbWlzcyBhbnkgcG90ZW50aWFsIGFyZWFzIG9mIGNvbmNlcm4uIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCBgQ0dST1VQX0hVR0VUTEJgIG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBpc3N1ZSBhdCBoYW5kLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBpbnRlZ3JhdGUgdGhpcyBjb25zaWRlcmF0aW9uIGludG8gdGhlIG92ZXJhbGwgYW5hbHlzaXMgYW5kIGVuc3VyZSB0aGF0IHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyBhbHNvIGFzc2Vzc2VkIGFsb25nc2lkZSB0aGUgb3RoZXIgY29uc2lkZXJhdGlvbnMgdG8gcHJvdmlkZSB0aGUgbW9zdCBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgZXZhbHVhdGlvbi4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBvZiB0aGlzIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIwNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjUzLjkzMDg1MzAzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM2NTYxODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUF9IVUdFVExCXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTI4Mj1jb25maWcgQ0dST1VQX0ZSRUVaRVJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMjkyLVxcbmluaXQvS2NvbmZpZzoxMjkzOmNvbmZpZyBDR1JPVVBfSFVHRVRMQlxcbmluaXQvS2NvbmZpZy0xMjk0LVxcdGJvb2wgXFxcIkh1Z2VUTEIgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDk6NTk6NTMuOTg0NTE1NzkxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4ODMxODc3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBDb21waWxhdGlvbiBvZiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZSBjb21waWxhdGlvbiBvZiBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIEZpcnN0LCBJJ2xsIGNvbnN1bHQgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYC4gQWgsIHRoZXJlIGl0IGlzOiBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dgLiBJZiBgQ09ORklHX01FTUNHYCBpcyBkZWZpbmVkLCB3ZSBoYXZlIGEgcmVhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4gT3RoZXJ3aXNlLCBpdCdzIGp1c3QgYW4gaW5saW5lIGZ1bmN0aW9uIHRoYXQgaW1tZWRpYXRlbHkgcmV0dXJucyB6ZXJvLiBUaGF0J3Mgd2hhdCBJIGV4cGVjdGVkLiBOb3csIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgYE1ha2VmaWxlYCBlbnRyaWVzLlxuXG5JJ2xsIGNoZWNrIGBtbS9NYWtlZmlsZWAuIEFoLCB5ZXMuIGBodWdldGxiLm9gIGlzIG9ubHkgaW5jbHVkZWQgaWYgYENPTkZJR19IVUdFVExCRlNgIGlzIHNldCwgYW5kIGBtZW1jb250cm9sLm9gIGlzIGluY2x1ZGVkIGlmIGBDT05GSUdfTUVNQ0dgIGlzIHNldC4gVGhpcyBjb25maXJtcyB0aGF0IGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCBpcyBpbmRlZWQgdGllZCB0byB0aGUgbWVtb3J5IGNncm91cCBjb25maWd1cmF0aW9uLiBFeGNlbGxlbnQuIE15IGluaXRpYWwgYW5hbHlzaXMgaXMgc291bmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjU2Ljg2NzcwNjE1OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE2NDY4NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYlxcXFwub3xtZW1jb250cm9sXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXFxubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxcbi0tXFxubW0vTWFrZWZpbGU9MTA0PW9iai0kKENPTkZJR19NRU1DR19WMSkgKz0gbWVtY29udHJvbC12MS5vXFxubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgKz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xcbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcXG5tbS9NYWtlZmlsZToxMDc6b2JqLSQoQ09ORklHX01FTUNHKSArPSBicGZfbWVtY29udHJvbC5vXFxubW0vTWFrZWZpbGUtMTA4LWVuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDA5OjU5OjU2LjkxOTM1NjA1N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDUxMTAzNzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgSSBzZWUgaXQncyBhYm91dCBIdWdlVExCIGFuZCBtZW1vcnkgY2dyb3VwIGludGVncmF0aW9uLiAgVGhlIGNvcmUgY29tcG9uZW50cyBhcmUgY2xlYXJseSBgSFVHRVRMQkZTYCBhbmQgYE1FTUNHYCwgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC5cblxuTXkgZmlyc3Qgc3RlcCBpcyB0byBpc29sYXRlIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMuIEkgd2FudCB0byBwaW5wb2ludCB3aGVyZSB0aGUgcGF0Y2gncyBjb3JlIGxvZ2ljIGlzIGltcGxlbWVudGVkIGFuZCBtb2RpZmllZC4gSSBzZWUgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaW4gYG1tL2h1Z2V0bGIuY2AsIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgaW4gYG1tL21lbWNvbnRyb2wuY2AgYXJlIGRpcmVjdGx5IGFsdGVyZWQuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlc2UgZnVuY3Rpb25zIHViaXF1aXRvdXM/IERvIHRoZXkgdG91Y2ggYSB2YXN0IGFtb3VudCBvZiBrZXJuZWwgY29kZSwgb3IgYXJlIHRoZXkgc3BlY2lmaWMgdG8gYSBmZWF0dXJlPyAgVGhhbmtmdWxseSwgdGhlc2UgYXJlIHNwZWNpZmljIGVudHJ5IHBvaW50cyBmb3IgSHVnZVRMQiBhbGxvY2F0aW9uIGFuZCBNZW1jZyBjaGFyZ2luZy4gVGhleSBhcmUgKm5vdCogY2FsbGVkIGJ5IGV2ZXJ5IHNpbmdsZSBwcm9jZXNzLiBUaGlzIGlzIGdvb2QsIGl0IGdpdmVzIG1lIGZvY3VzLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhvc2UgZnVuY3Rpb25zOiBgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiAgSSdtIGFsc28gbG9va2luZyBmb3IgYW55dGhpbmcgZWxzZSBpbiB0aGUgZGlmZiwgYW5kIEkgY29uZmlybSB0aGUgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGFsb25nIHdpdGggdGhlIGAuY2AgZmlsZXMgbWVudGlvbmVkIHByZXZpb3VzbHkuXG5cbkknbSBjb25maXJtaW5nIHRoYXQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIGFuZCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgYXJlIG5vbi1zdGF0aWMgc3ltYm9scyBpbiBgdm1saW51eGAuIFRoYXQgbWVhbnMgdGhleSdyZSBleHBvc2VkIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhbmQgaXMgZGVjbGFyZWQgYWNjb3JkaW5nbHkgaW4gdGhlIGhlYWRlcnMsIHdoaWNoIGlzIHdoYXQgSSBleHBlY3QuXG5cblRoZW4sIGNvbmZpcm1pbmcgdGhlIGNvbmZpZ3M6IGBIVUdFVExCRlNgIGFuZCBgTUVNQ0dgLCBsaWtlIEkgc2FpZC5cblxuU28sIGluIHN1bW1hcnksIEknbSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudDpcbiogICBgV29ydGhGdXp6aW5nOiB0cnVlYCAtIGJlY2F1c2Ugd2UndmUgaWRlbnRpZmllZCBzcGVjaWZpYyBwb2ludHMgb2YgaW50ZXJhY3Rpb24gd2l0aCBIdWdlVExCIGFuZCBNZW1jZyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkLlxuKiAgIGBFbmFibGVDb25maWdzOiBbXCJIVUdFVExCRlNcIiwgXCJNRU1DR1wiXWAgLSBiZWNhdXNlIHRoZXNlIGFyZSBmdW5kYW1lbnRhbCB0byB0aGUgcGF0Y2gncyBmdW5jdGlvbi5cbiogICBgRm9jdXNTeW1ib2xzOiBbXCJodWdldGxiX2FsbG9jX2ZvbGlvXCIsIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLCBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIl1gIC0gdGhlc2UgYXJlIHRoZSBlbnRyeSBwb2ludHMgdG8gdGVzdC5cbiogICBgUmVhc29uaW5nYDogQ29uY2lzZSBhbmQgY29tcGxldGUuXG5cbkxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMzUsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAwOjAyLjM3MDQ2MjI5OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczODEyNjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9hbGxvY19mb2xpb1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwibWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcGF0aHMgKGh1Z2V0bGJfYWxsb2NfZm9saW8sIGFsbG9jX2h1Z2V0bGJfZm9saW8sIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIpIHRvIGFzc29jaWF0ZSBhbmQgY2hhcmdlIGh1Z2UgZm9saW9zIGFnYWluc3QgdGhlIHRhcmdldCBtbV9zdHJ1Y3QgcmF0aGVyIHRoYW4gY3VycmVudC4gVGhpcyByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNncm91cCBsb2dpYyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZyB0byB2ZXJpZnkgY29ycmVjdCBjZ3JvdXAgYWNjb3VudGluZyBhbmQgYXZvaWQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIHBhdGhzIChodWdldGxiX2FsbG9jX2ZvbGlvLCBhbGxvY19odWdldGxiX2ZvbGlvLCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKSB0byBhc3NvY2lhdGUgYW5kIGNoYXJnZSBodWdlIGZvbGlvcyBhZ2FpbnN0IHRoZSB0YXJnZXQgbW1fc3RydWN0IHJhdGhlciB0aGFuIGN1cnJlbnQuIFRoaXMgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgbG9naWMgY2hhbmdlIHdhcnJhbnRzIGZ1enppbmcgdG8gdmVyaWZ5IGNvcnJlY3QgY2dyb3VwIGFjY291bnRpbmcgYW5kIGF2b2lkIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMDowMi40NDQyODE1OTVaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MzMzNTYwMjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MDIuNDQ0NzMyNzQ1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjgzMzMxMDQ2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGh1Z2V0bGIgYWxsb2NhdGlvbiBhbmQgbWVtY2cgY2hhcmdpbmcgcm91dGluZXMgKGBodWdldGxiX2FsbG9jX2ZvbGlvYCwgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gKSB0byBwYXNzIGEgdGFyZ2V0IGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgcG9pbnRlciBhbmQgY2hhcmdlIHRoZSBodWdldGxiIGZvbGlvIHRvIHRoZSBjZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YXJnZXQgbW0gKGBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKWApIHJhdGhlciB0aGFuIHRoZSBjdXJyZW50IHRhc2sgKGBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKWApLlxcblxcblRoaXMgY2hhbmdlIG9ubHkgYWx0ZXJzIHBvaW50ZXIgcGFzc2luZyBhbmQgbWVtY2cgYWNjb3VudGluZyBsb2dpYy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1hbmlwdWxhdGUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIGJ1ZmZlcnMsIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbGVuZ3RoIG9yIGJvdW5kcyBjYWxjdWxhdGlvbnMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggcG9pbnRlciB2YWxpZGl0eSBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRldGVjdG9ycyBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzg2NzY2NGNkMWIyZmE3NzliNDI0NTczMjBmNGVlYTBlMzIzYzI4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDk6NTk6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAxNmM0YzRjYWExMjZjLi40NWFkYTc1ZGMwNGU5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtNjk5LDcgKzY5OSw4IEBAIGVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcbiAjZGVmaW5lIEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlMgQklUKEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlNfQklUKVxuIFxuIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpO1xuK1x0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHU4IGFsbG9jX2ZsYWdzKTtcbiBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIGJvb2wgY293X2Zyb21fb3duZXIpO1xuIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5pbmRleCA3ZDFjMGNlMTg5YTg4Li4zNjJhZjU4ZTUwYTQzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oXG5AQCAtNjYyLDcgKzY2Miw4IEBAIHN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0cmV0dXJuIF9fbWVtX2Nncm91cF9jaGFyZ2UoZm9saW8sIG1tLCBnZnApO1xuIH1cbiBcbi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8qIGZvbGlvLCBnZnBfdCBnZnApO1xuK2ludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuK1x0XHRcdCAgICAgIGdmcF90IGdmcCk7XG4gXG4gaW50IG1lbV9jZ3JvdXBfc3dhcGluX2NoYXJnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCB1bnNpZ25lZCBzaG9ydCBpZCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApO1xuQEAgLTExNTYsOSArMTE1NywxMCBAQCBzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvKiBmb2xpbywgZ2ZwX3QgZ2ZwKVxuK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHRcdFx0ICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBnZnBfdCBnZnApXG4ge1xuLSAgICAgICAgcmV0dXJuIDA7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA3ODU3NzI4NDU3OTUyLi41YWI1YTUxNDE1NzQ4IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0yODE2LDYgKzI4MTYsNyBAQCB2b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpXG4gICogaHVnZXRsYl9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGEgaHVnZXRsYiBmb2xpby5cbiAgKiBAaDogSHVnZXRsYiBzdGF0ZSBjb250cm9sIGJsb2NrLlxuICAqIEBtcG9saTogSW50ZXJwcmV0ZWQgbWVtb3J5IHBvbGljeSB0byB1c2UgZm9yIGFsbG9jYXRpb24uXG4rICogQG1tOiBNZW1vcnkgZGVzY3JpcHRvciBvZiB0aGUgYWxsb2NhdGlvbiB0YXJnZXQuXG4gICogQGFsbG9jX2ZsYWdzOiBGbGFncyBjb250cm9sbGluZyB0aGUgYWxsb2NhdGlvbiBiZWhhdmlvci5cbiAgKlxuICAqIEFsbG9jYXRlcyBhIGh1Z2V0bGIgZm9saW8gYW5kIGhhbmRsZXMgY2dyb3VwIGNoYXJnaW5nIGFuZCBnbG9iYWwgaHN0YXRlXG5AQCAtMjgyNiw3ICsyODI3LDggQEAgdm9pZCB3YWl0X2Zvcl9mcmVlZF9odWdldGxiX2ZvbGlvcyh2b2lkKVxuICAqICAgICAgICAgLUVOT01FTSBpZiBtZW0gY2dyb3VwIGNoYXJnaW5nIGZhaWxzLlxuICAqL1xuIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLVx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkICptcG9saSwgdTggYWxsb2NfZmxhZ3MpXG4rXHRcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dTggYWxsb2NfZmxhZ3MpXG4ge1xuIFx0Ym9vbCBjaGFyZ2VfaHVnZXRsYl9jZ3JvdXBfcnN2ZCA9IGFsbG9jX2ZsYWdzIFx1MDAyNlxuIFx0XHRcdFx0XHQgIEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XG5AQCAtMjg4MSw3ICsyODgzLDggQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4gXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbiBcbi1cdHJldCA9IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoZm9saW8sIGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuK1x0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgbW0sXG4rXHRcdFx0XHRcdGdmcCB8IF9fR0ZQX1JFVFJZX01BWUZBSUwpO1xuIFx0LypcbiBcdCAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgTlJfSFVHRVRMQiBoZXJlIGJlY2F1c2UgaWZcbiBcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgZmFpbGVkLCBmcmVlaW5nIHRoZSBwYWdlIHdpbGxcbkBAIC0zMDIwLDcgKzMwMjMsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdC5ub2RlbWFzayA9IG5vZGVtYXNrLFxuIFx0fTtcbiBcbi1cdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcdTAwMjZtcG9saSwgYWxsb2NfZmxhZ3MpO1xuK1x0Zm9saW8gPSBodWdldGxiX2FsbG9jX2ZvbGlvKGgsIFx1MDAyNm1wb2xpLCB2bWEtXHUwMDNldm1fbW0sIGFsbG9jX2ZsYWdzKTtcbiBcbiBcdG1wb2xfY29uZF9wdXQobXBvbCk7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXG5pbmRleCAxMjcxZDM5MGI2MTdlLi4wYjc5NWJmMWU2Y2YxIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC5jXG4rKysgYi9tbS9tZW1jb250cm9sLmNcbkBAIC01MjMzLDYgKzUyMzMsNyBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuIC8qKlxuICAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cbiAgKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcbisgKiBAbW06IG1tIGNvbnRleHQgb2YgdGhlIGFsbG9jYXRpb24gdGFyZ2V0XG4gICogQGdmcDogcmVjbGFpbSBtb2RlXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFsbG9jYXRpbmcgYSBodWdlIHBhZ2UgZm9saW8sIGFmdGVyIHRoZSBwYWdlIGhhc1xuQEAgLTUyNDIsOSArNTI0MywxMCBAQCBpbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxuICAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuXG4gICogUmV0dXJucyAwIGlmIGVpdGhlciB0aGUgY2hhcmdlIHdhcyBzdWNjZXNzZnVsLCBvciBpZiB3ZSBza2lwIHRoZSBjaGFyZ2luZy5cbiAgKi9cbi1pbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnApXG4raW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdFx0ICAgICAgZ2ZwX3QgZ2ZwKVxuIHtcbi1cdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpO1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbiBcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMDowMi40NDQ3MzM5MjVaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODc1NjI0ODQ1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgZGlnIGluLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZXMgYXJlIGZvY3VzZWQgYXJvdW5kIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBhbmQgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBJbnRlcmVzdGluZywgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGhhcyBiZWVuIHVwZGF0ZWQ7IGl0IHByZXZpb3VzbHkgdG9vayB0aGUgYHN0cnVjdCBmb2xpb2AgYW5kIGBnZnBfdGAgYXJndW1lbnRzLCBhbmQgZ290IHRoZSBgc3RydWN0IG1lbV9jZ3JvdXBgIHVzaW5nIGBnZXRfbWVtX2Nncm91cF9mcm9tX2N1cnJlbnQoKWAuIE5vdywgaXQncyB0YWtpbmcgYSBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIGFyZ3VtZW50IGFuZCB1c2luZyBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgIGluc3RlYWQuIFRoYXQncyBhIHNpZ25pZmljYW50IHNoaWZ0LiBBbmQgYGh1Z2V0bGJfYWxsb2NfZm9saW9gIGhhcyBiZWVuIHVwZGF0ZWQgdG8gdGFrZSB0aGF0IGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgYW5kIHBhc3MgaXQgdG8gYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBSaWdodCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIHRoZW4gY2FsbHMgaXQgd2l0aCBgdm1hLVx1MDAzZXZtX21tYC5cblxuQWxyaWdodCwgSSBuZWVkIHRvIHNlZSB0aGUgZnVsbCBzY29wZSBvZiB0aGlzIGNoYW5nZS4gQXJlIHRoZXJlIGFueSBvdGhlciBjYWxsZXJzIG9mIGBodWdldGxiX2FsbG9jX2ZvbGlvYD8gSSdtIGdvaW5nIHRvIHJ1biBncmVwcGVyIHRvIHNlZSB3aGVyZSB0aGlzIGlzIHVzZWQgdGhyb3VnaG91dCB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBhY3QuIEkgbmVlZCB0byBrbm93IHRoZSByZWFjaCBvZiB0aGlzLiBCYXNlZCBvbiB0aG9zZSByZXN1bHRzLCBJIGNhbiBtYWtlIGEgY2FsbCBhYm91dCBmdXp6aW5nIG5lZWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MTEuMjAwOTg0NzA2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2NDA5NDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWVudW0gaHVnZXRsYl9hbGxvY19mbGFnIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTcwMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo3MDE6c3RydWN0IGZvbGlvICpodWdldGxiX2FsbG9jX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNzAyLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODA3PXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODE1LS8qKlxcbm1tL2h1Z2V0bGIuYzoyODE2OiAqIGh1Z2V0bGJfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBhIGh1Z2V0bGIgZm9saW8uXFxubW0vaHVnZXRsYi5jLTI4MTctICogQGg6IEh1Z2V0bGIgc3RhdGUgY29udHJvbCBibG9jay5cXG4tLVxcbm1tL2h1Z2V0bGIuYy0yODI4LSAqL1xcbm1tL2h1Z2V0bGIuYzoyODI5OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0yODMwLVxcdFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgKm1wb2xpLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yOTQyPXN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDI1LVxcbm1tL2h1Z2V0bGIuYzozMDI2OlxcdGZvbGlvID0gaHVnZXRsYl9hbGxvY19mb2xpbyhoLCBcXHUwMDI2bXBvbGksIHZtYS1cXHUwMDNldm1fbW0sIGFsbG9jX2ZsYWdzKTtcXG5tbS9odWdldGxiLmMtMzAyNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MTIuNjc3Mzk5ODQ0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0MTY4NTk5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkaXZpbmcgaW50byBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcsIHNwZWNpZmljYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggSHVnZVRMQiBwYWdlcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyb2FkZW4gdGhlIHNjb3BlIG9mIGludmVzdGlnYXRpb24gYmV5b25kIHdoYXQgd2UndmUgYmVlbiBmb2N1c2VkIG9uLiBUbyBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIG1lbW9yeSBjb25zdW1wdGlvbiBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gSHVnZVRMQiB1c2FnZSB3aXRoaW4gY2dyb3Vwcywgd2UgbmVlZCB0byB0aG9yb3VnaGx5IGV4YW1pbmUgdGhlIGNhbGwgc2l0ZXMgb2YgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgLiBXaGF0IGFyZSB0aGUgdmFyaW91cyBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyBUaGlzIHdpbGwgZ2l2ZSB1cyBhIGJpcmQncy1leWUgdmlldy4gVGhpcyBpcyBrZXkgdG8gaWRlbnRpZnlpbmcgcG90ZW50aWFsIGlzc3VlcyBpbiBhY2NvdW50aW5nIG9yIGFueSB1bmV4cGVjdGVkIGJlaGF2aW9yIGFzc29jaWF0ZWQgd2l0aCBIdWdlVExCIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gY29uc3RyYWluZWQgZW52aXJvbm1lbnRzLiBXZSdyZSBsb29raW5nIGZvciBldmVyeXRoaW5nLCBmcm9tIHRoZSBjb3JlIGFsbG9jYXRpb24gcGF0aHMgdG8gdGhlIHJlbGVhc2UgbWVjaGFuaXNtcy4gTGV0J3Mgc2VlIHdoYXQncyByZWFsbHkgZHJpdmluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTgzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MTYuMDk0MjYyMTcxWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE3NTE2NjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9NjU3PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNjY0LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjY2NTppbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC02NjYtXFx0XFx0XFx0ICAgICAgZ2ZwX3QgZ2ZwKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTExNTQ9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTExNTktXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTE2MDpzdGF0aWMgaW5saW5lIGludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTE2MS1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yODI5PXN0cnVjdCBmb2xpbyAqaHVnZXRsYl9hbGxvY19mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI4ODUtXFxubW0vaHVnZXRsYi5jOjI4ODY6XFx0cmV0ID0gbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihmb2xpbywgbW0sXFxubW0vaHVnZXRsYi5jLTI4ODctXFx0XFx0XFx0XFx0XFx0Z2ZwIHwgX19HRlBfUkVUUllfTUFZRkFJTCk7XFxuLS1cXG5tbS9odWdldGxiLmMtMjg4OS1cXHQgKiBVbmNvbmRpdGlvbmFsbHkgaW5jcmVtZW50IE5SX0hVR0VUTEIgaGVyZSBiZWNhdXNlIGlmXFxubW0vaHVnZXRsYi5jOjI4OTA6XFx0ICogbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYiBmYWlsZWQsIGZyZWVpbmcgdGhlIHBhZ2Ugd2lsbFxcbm1tL2h1Z2V0bGIuYy0yODkxLVxcdCAqIGRlY3JlbWVudCBOUl9IVUdFVExCLlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjE9aW50IF9fbWVtX2Nncm91cF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGdmcF90IGdmcClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjMzLS8qKlxcbm1tL21lbWNvbnRyb2wuYzo1MjM0OiAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cXG5tbS9tZW1jb250cm9sLmMtNTIzNS0gKiBAZm9saW86IGZvbGlvIGJlaW5nIGNoYXJnZWRcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MjQ1LSAqL1xcbm1tL21lbWNvbnRyb2wuYzo1MjQ2OmludCBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL21lbWNvbnRyb2wuYy01MjQ3LVxcdFxcdFxcdCAgICAgIGdmcF90IGdmcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MTcuNjExNzg1MzU3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4MTM5ODgyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDb250cm9sIERldGFpbHMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1lbW9yeSBjZ3JvdXAgaXMgcmV0cmlldmVkIGZyb20gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGRhdGEgc3RydWN0dXJlcy4gTGV0J3MgZGlnIGludG8gYG1tL21lbWNvbnRyb2wuY2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGBnZXRfbWVtX2Nncm91cF9mcm9tX21tYCBpbXBsZW1lbnRhdGlvbi4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBoZXJlLCB0aGUgbWV0aG9kIHVzZWQgdG8gbGluayBhIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZSAoYG1tYCkgdG8gaXRzIGFzc29jaWF0ZWQgY2dyb3VwLiBUaGlzIGlzIGZ1bmRhbWVudGFsIGZvciBob3cgdGhlIGtlcm5lbCB0cmFja3MgbWVtb3J5IHVzYWdlIGFuZCBlbmZvcmNlcyBsaW1pdHMgYmFzZWQgb24gY2dyb3VwIGFzc2lnbm1lbnRzLiBJIGFudGljaXBhdGUgaXQgd2lsbCBlaXRoZXIgZGlyZWN0bHkgYWNjZXNzIGEgZmllbGQgd2l0aGluIHRoZSBgbW1fc3RydWN0YCBvciwgbW9yZSBsaWtlbHksIGZvbGxvdyBhIHBvaW50ZXIgdG8gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IG1haW50YWlucyB0aGlzIHJlbGF0aW9uc2hpcC4gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBrZXJuZWwgY29ycmVjdGx5IGF0dHJpYnV0ZXMgbWVtb3J5IHVzYWdlIHRvIGEgcGFydGljdWxhciBjb250cm9sIGdyb3VwLCB3aGljaCBoYXMgZGlyZWN0IGltcGxpY2F0aW9ucyBmb3IgZGVidWdnaW5nIGFuZCBwZXJmb3JtYW5jZSBhbmFseXNpcyB3aGVuIGRlYWxpbmcgd2l0aCBjZ3JvdXAgbWVtb3J5IG1hbmFnZW1lbnQuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBpbiB0aGlzIGNyaXRpY2FsIHBhdGguIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBleGFtaW5lIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDQzLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MjAuNDI1Nzc4MTQ4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM0NzQ1OTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9tZW1fY2dyb3VwX2Zyb21fbW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jPTEwMDE9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpzZ3hfZW5jbF9nZXRfbWVtX2Nncm91cChzdHJ1Y3Qgc2d4X2VuY2wgKmVuY2wpXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAxMi1cXHRpZiAoIWN1cnJlbnRfaXNfa3NneGQoKSlcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTAxMzpcXHRcXHRyZXR1cm4gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVxcdTAwM2VtbSk7XFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwMTQtXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTAyNC1cXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTAyNTpcXHRcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oZW5jbF9tbS1cXHUwMDNlbW0pO1xcbmFyY2gveDg2L2tlcm5lbC9jcHUvc2d4L2VuY2wuYy0xMDI2LVxcbi0tXFxuYXJjaC94ODYva2VybmVsL2NwdS9zZ3gvZW5jbC5jLTEwNDAtXFx0aWYgKCFtZW1jZylcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmM6MTA0MTpcXHRcXHRyZXR1cm4gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShOVUxMKTtcXG5hcmNoL3g4Ni9rZXJuZWwvY3B1L3NneC9lbmNsLmMtMTA0Mi1cXG4tLVxcbmZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmM9MTU4OT1TWVNDQUxMX0RFRklORTIoZmFub3RpZnlfaW5pdCwgdW5zaWduZWQgaW50LCBmbGFncywgdW5zaWduZWQgaW50LCBldmVudF9mX2ZsYWdzKVxcbi0tXFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xNjg0LVxcdGdyb3VwLVxcdTAwM2VmYW5vdGlmeV9kYXRhLmZsYWdzID0gZmxhZ3MgfCBpbnRlcm5hbF9mbGFncztcXG5mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jOjE2ODU6XFx0Z3JvdXAtXFx1MDAzZW1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShjdXJyZW50LVxcdTAwM2VtbSk7XFxuZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYy0xNjg2LVxcdGdyb3VwLVxcdTAwM2V1c2VyX25zID0gZ2V0X3VzZXJfbnModXNlcl9ucyk7XFxuLS1cXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYz02NDE9c3RhdGljIHN0cnVjdCBmc25vdGlmeV9ncm91cCAqaW5vdGlmeV9uZXdfZ3JvdXAodW5zaWduZWQgaW50IG1heF9ldmVudHMpXFxuLS1cXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYy02NjMtXFx0Z3JvdXAtXFx1MDAzZW1heF9ldmVudHMgPSBtYXhfZXZlbnRzO1xcbmZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jOjY2NDpcXHRncm91cC1cXHUwMDNlbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYy02NjUtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD03NTU9c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfZnJvbV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzU2LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjc1NzpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtNzU4LVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTIwNj1zdGF0aWMgaW5saW5lIGJvb2wgbW1fbWF0Y2hfY2dyb3VwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTIxMS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxMjEyOnN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9tZW1fY2dyb3VwX2Zyb21fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTIxMy17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEzOD1zdGF0aWMgX19hbHdheXNfaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICphY3RpdmVfbWVtY2codm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTQ2LS8qKlxcbm1tL21lbWNvbnRyb2wuYzoxMTQ3OiAqIGdldF9tZW1fY2dyb3VwX2Zyb21fbW06IE9idGFpbiBhIHJlZmVyZW5jZSBvbiBnaXZlbiBtbV9zdHJ1Y3QncyBtZW1jZy5cXG5tbS9tZW1jb250cm9sLmMtMTE0OC0gKiBAbW06IG1tIGZyb20gd2hpY2ggbWVtY2cgc2hvdWxkIGJlIGV4dHJhY3RlZC4gSXQgY2FuIGJlIE5VTEwuXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE1Ni0gKi9cXG5tbS9tZW1jb250cm9sLmM6MTE1NzpzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS9tZW1jb250cm9sLmMtMTE1OC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE5My19XFxubW0vbWVtY29udHJvbC5jOjExOTQ6RVhQT1JUX1NZTUJPTChnZXRfbWVtX2Nncm91cF9mcm9tX21tKTtcXG5tbS9tZW1jb250cm9sLmMtMTE5NS1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yNTU1PXZvaWQgX19tZW1fY2dyb3VwX2hhbmRsZV9vdmVyX2hpZ2goZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU2NC1cXG5tbS9tZW1jb250cm9sLmM6MjU2NTpcXHRtZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0oY3VycmVudC1cXHUwMDNlbW0pO1xcbm1tL21lbWNvbnRyb2wuYy0yNTY2LVxcdGN1cnJlbnQtXFx1MDAzZW1lbWNnX25yX3BhZ2VzX292ZXJfaGlnaCA9IDA7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTIyMT1pbnQgX19tZW1fY2dyb3VwX2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMjUtXFxubW0vbWVtY29udHJvbC5jOjUyMjY6XFx0bWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS9tZW1jb250cm9sLmMtNTIyNy1cXHRyZXQgPSBjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyNDY9aW50IG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTI0OC17XFxubW0vbWVtY29udHJvbC5jOjUyNDk6XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxubW0vbWVtY29udHJvbC5jLTUyNTAtXFx0aW50IHJldCA9IDA7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTI4MT1pbnQgbWVtX2Nncm91cF9zd2FwaW5fY2hhcmdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIHNob3J0IGlkLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyOTItXFx0aWYgKCFtZW1jZyB8fCAhY3NzX3RyeWdldF9vbmxpbmUoXFx1MDAyNm1lbWNnLVxcdTAwM2Vjc3MpKVxcbm1tL21lbWNvbnRyb2wuYzo1MjkzOlxcdFxcdG1lbWNnID0gZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSk7XFxubW0vbWVtY29udHJvbC5jLTUyOTQtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5tbS92bXNjYW4uYz0yOTQyPXZvaWQgbHJ1X2dlbl9hZGRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS92bXNjYW4uYy0yOTQ0LVxcdGludCBuaWQ7XFxubW0vdm1zY2FuLmM6Mjk0NTpcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBnZXRfbWVtX2Nncm91cF9mcm9tX21tKG1tKTtcXG5tbS92bXNjYW4uYy0yOTQ2LVxcdHN0cnVjdCBscnVfZ2VuX21tX2xpc3QgKm1tX2xpc3QgPSBnZXRfbW1fbGlzdChtZW1jZyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAwOjIxLjk2MDUyOTQ2NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjg5MzQ4NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIZWFydCBvZiBIdWdlVExCIE1lbW9yeSBBY2NvdW50aW5nKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBkaWcgaW50byB0aGUgYG1tL21lbWNvbnRyb2wuY2AgZmlsZSDigJMgdGhhdCdzIHdoZXJlIHRoZSBtZW1vcnkgY2dyb3VwIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBIdWdlVExCIG1lbW9yeSBpcyBjaGFyZ2VkLiBJIGZpZ3VyZSBsaW5lcyA1MjQwIHRocm91Z2ggNTI3MCBhcmUgdGhlIGtleSBhcmVhIGZvciBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAuIExldCdzIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRob3NlIHBhZ2VzLiBJdCdzIGNydWNpYWwsIG9idmlvdXNseSwgdG8gZ2V0IHRoaXMgY2hhcmdpbmcgbG9naWMgcmlnaHQgZm9yIGFjY3VyYXRlIHJlc291cmNlIGFjY291bnRpbmcgYW5kLCB1bHRpbWF0ZWx5LCBlZmZlY3RpdmUgY2dyb3VwLWJhc2VkIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gaGVyZS4gSSBleHBlY3QgdGhlcmUncyBwcm9iYWJseSBzb21lIGludGVycGxheSB3aXRoIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgb3IgbWF5YmUgc29tZSBhY2NvdW50aW5nIHN0cnVjdHVyZXMgc3BlY2lmaWMgdG8gSHVnZVRMQi4gTGV0J3Mgc3RhcnQgZGlzc2VjdGluZyB0aGUgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDI5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MjQuMjQ5ODgyNzQ4WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTE3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTIzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTIzMDpcXHRcXHRyZXR1cm4gcmV0O1xcbjUyMzE6XFx0fVxcbjUyMzI6XFx0XFxuNTIzMzpcXHQvKipcXG41MjM0OlxcdCAqIG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGIgLSBjaGFyZ2UgdGhlIG1lbWNnIGZvciBhIGh1Z2V0bGIgZm9saW9cXG41MjM1OlxcdCAqIEBmb2xpbzogZm9saW8gYmVpbmcgY2hhcmdlZFxcbjUyMzY6XFx0ICogQG1tOiBtbSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uIHRhcmdldFxcbjUyMzc6XFx0ICogQGdmcDogcmVjbGFpbSBtb2RlXFxuNTIzODpcXHQgKlxcbjUyMzk6XFx0ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhbGxvY2F0aW5nIGEgaHVnZSBwYWdlIGZvbGlvLCBhZnRlciB0aGUgcGFnZSBoYXNcXG41MjQwOlxcdCAqIGFscmVhZHkgYmVlbiBvYnRhaW5lZCBhbmQgY2hhcmdlZCB0byB0aGUgYXBwcm9wcmlhdGUgaHVnZXRsYiBjZ3JvdXBcXG41MjQxOlxcdCAqIGNvbnRyb2xsZXIgKGlmIGl0IGlzIGVuYWJsZWQpLlxcbjUyNDI6XFx0ICpcXG41MjQzOlxcdCAqIFJldHVybnMgRU5PTUVNIGlmIHRoZSBtZW1jZyBpcyBhbHJlYWR5IGZ1bGwuXFxuNTI0NDpcXHQgKiBSZXR1cm5zIDAgaWYgZWl0aGVyIHRoZSBjaGFyZ2Ugd2FzIHN1Y2Nlc3NmdWwsIG9yIGlmIHdlIHNraXAgdGhlIGNoYXJnaW5nLlxcbjUyNDU6XFx0ICovXFxuNTI0NjpcXHRpbnQgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG41MjQ3OlxcdFxcdFxcdFxcdCAgICAgIGdmcF90IGdmcClcXG41MjQ4OlxcdHtcXG41MjQ5OlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pO1xcbjUyNTA6XFx0XFx0aW50IHJldCA9IDA7XFxuNTI1MTpcXHRcXG41MjUyOlxcdFxcdC8qXFxuNTI1MzpcXHRcXHQgKiBFdmVuIG1lbWNnIGRvZXMgbm90IGFjY291bnQgZm9yIGh1Z2V0bGIsIHdlIHN0aWxsIHdhbnQgdG8gdXBkYXRlXFxuNTI1NDpcXHRcXHQgKiBzeXN0ZW0tbGV2ZWwgc3RhdHMgdmlhIGxydXZlY19zdGF0X21vZF9mb2xpby4gUmV0dXJuIDAsIGFuZCBza2lwXFxuNTI1NTpcXHRcXHQgKiBjaGFyZ2luZyB0aGUgbWVtY2cuXFxuNTI1NjpcXHRcXHQgKi9cXG41MjU3OlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkgfHwgIW1lbWNnX2FjY291bnRzX2h1Z2V0bGIoKSB8fFxcbjUyNTg6XFx0XFx0XFx0IW1lbWNnIHx8ICFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbjUyNTk6XFx0XFx0XFx0Z290byBvdXQ7XFxuNTI2MDpcXHRcXG41MjYxOlxcdFxcdGlmIChjaGFyZ2VfbWVtY2coZm9saW8sIG1lbWNnLCBnZnApKVxcbjUyNjI6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG41MjYzOlxcdFxcbjUyNjQ6XFx0b3V0OlxcbjUyNjU6XFx0XFx0bWVtX2Nncm91cF9wdXQobWVtY2cpO1xcbjUyNjY6XFx0XFx0cmV0dXJuIHJldDtcXG41MjY3OlxcdH1cXG41MjY4OlxcdFxcbjUyNjk6XFx0LyoqXFxuNTI3MDpcXHQgKiBtZW1fY2dyb3VwX3N3YXBpbl9jaGFyZ2VfZm9saW8gLSBDaGFyZ2UgYSBuZXdseSBhbGxvY2F0ZWQgZm9saW8gZm9yIHN3YXBpbi5cXG41MjcxOlxcdCAqIEBmb2xpbzogdGhlIGZvbGlvIHRvIGNoYXJnZVxcbjUyNzI6XFx0ICogQGlkOiBtZW1vcnkgY2dyb3VwIGlkXFxuNTI3MzpcXHQgKiBAbW06IG1tIGNvbnRleHQgb2YgdGhlIHZpY3RpbVxcbjUyNzQ6XFx0ICogQGdmcDogcmVjbGFpbSBtb2RlXFxuNTI3NTpcXHQgKlxcbjUyNzY6XFx0ICogVGhpcyBmdW5jdGlvbiBjaGFyZ2VzIGEgZm9saW8gYWxsb2NhdGVkIGZvciBzd2FwaW4uIFBsZWFzZSBjYWxsIHRoaXMgYmVmb3JlXFxuNTI3NzpcXHQgKiBhZGRpbmcgdGhlIGZvbGlvIHRvIHRoZSBzd2FwY2FjaGUuXFxuNTI3ODpcXHQgKlxcbjUyNzk6XFx0ICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIE90aGVyd2lzZSwgYW4gZXJyb3IgY29kZSBpcyByZXR1cm5lZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDA6MjQuMjUwMzE1ODY4WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1Mjc1MDA1NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXMgYW5kIEtNU0FOIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSByZWZhY3RvcmluZyBob3cgSHVnZVRMQiBtZW1vcnkgY2hhcmdlcyBhcmUgaGFuZGxlZCB3aXRoaW4gY2dyb3Vwcy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyB0byBwYXNzIHRoZSBgbW1fc3RydWN0YCBkb3duIHRoZSBjYWxsIGNoYWluIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgYGN1cnJlbnRgIHRhc2sncyBjb250ZXh0LlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIHRoZXNlIGtleSBtb2RpZmljYXRpb25zOlxuXG4qICAgYG1lbV9jZ3JvdXBfY2hhcmdlX2h1Z2V0bGJgIGlzIHVwZGF0ZWQgdG8gdGFrZSBhIGBzdHJ1Y3QgbW1fc3RydWN0ICptbWAgYXJndW1lbnQuIFRoaXMgaXMgdGhlIGNydWNpYWwgc2hpZnQuIEl0IHRoZW4gdXNlcyBgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBtZW1vcnkgY2dyb3VwIGZvciB0aGUgdGFyZ2V0IG1lbW9yeSBzcGFjZSwgcmF0aGVyIHRoYW4gaW1wbGljaXRseSB1c2luZyB0aGUgY3VycmVudCB0YXNrJ3MgY2dyb3VwLlxuKiAgIFRoZSBmdW5jdGlvbiBzaWduYXR1cmVzIG9mIGBodWdldGxiX2FsbG9jX2ZvbGlvYCBhbmQgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGhhdmUgYmVlbiB1cGRhdGVkIHRvIGFjY29tbW9kYXRlIHRoZSBgbW1gIHBvaW50ZXIgYW5kIGVuc3VyZSBpdCdzIHByb3BhZ2F0ZWQgZG93biB0aGUgc3RhY2suIGBhbGxvY19odWdldGxiX2ZvbGlvYCBub3cgcGFzc2VzIGB2bWEtXHUwMDNldm1fbW1gIHRvIGBodWdldGxiX2FsbG9jX2ZvbGlvYC5cbiogICBUaGUgY29ycmVzcG9uZGluZyBoZWFkZXIgZmlsZXMsIGBsaW51eC9odWdldGxiLmhgIGFuZCBgbGludXgvbWVtY29udHJvbC5oYCwgaGF2ZSBoYWQgdGhlaXIgZGVjbGFyYXRpb25zIHVwZGF0ZWQgYWNjb3JkaW5nbHkuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiBLTVNBTi4gSSd2ZSB0aG9yb3VnaGx5IHJldmlld2VkIHRoZSBwYXRjaCBhZ2FpbnN0IHRoZSBLTVNBTiBhbmQgS0FTQU4gY3JpdGVyaWEuXG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8sIG5vdGhpbmcgbGlrZSB0aGF0IGhlcmUuIFRoaXMgaXMgcHVyZWx5IGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LCBub3QgZXhwb3Npbmcga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBObywgdGhlIGNvZGUgaXMgdmVyeSBzdHJhaWdodGZvcndhcmQuIFRoZSBgbW1gIHBvaW50ZXIsIHdoZXRoZXIgTlVMTCBvciB2YWxpZCwgaXMgaGFuZGxlZCBjb3JyZWN0bHkgYnkgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW1gLlxuMy4gICoqQ29tcGxleCBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBBZ2FpbiwgdGhlIGZvY3VzIGlzIG9uIHJlZmFjdG9yaW5nIGhvdyBtZW1vcnkgYWNjb3VudGluZyBpcyBkb25lIGFuZCBjZ3JvdXAgYXNzaWdubWVudHMgYXJlIGhhbmRsZWQuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBOby4gVGhpcyBpcyBub3QgYWJvdXQgYnVmZmVyIG1hbmlwdWxhdGlvbiBvciB2dWxuZXJhYmlsaXRpZXM7IHRoZSBwYXRjaCBpcyBhYm91dCBob3cgdGhlIGtlcm5lbCB0cmFja3MgbWVtb3J5IHVzYWdlIGJ5IHByb2Nlc3Nlcy5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIEknbSBjb25maWRlbnQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGJ5IHRoaXMgcGF0Y2guIFRoZSBzdGFuZGFyZCBkZXRlY3RvcnMsIEtBU0FOIGFuZCBMT0NLREVQLCBzaG91bGQgY2F0Y2ggYW55IGlzc3VlcyByZWxhdGVkIHRvIHBvaW50ZXIgdmFsaWRpdHksIHJlZmNvdW50cywgb3IgZ2VuZXJhbCBtZW1vcnkgc2FmZXR5LiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuSSd2ZSBhbHNvIHF1aWNrbHkgcmUtZXhhbWluZWQgYWxsIHRoZSBhZmZlY3RlZCBmaWxlczogYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYGluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oYCwgYG1tL2h1Z2V0bGIuY2AsIGFuZCBgbW0vbWVtY29udHJvbC5jYC4gVGhlIGNoYW5nZXMgYXJlIGFsbCB2ZXJ5IGZvY3VzZWQgYW5kIHNpbXBseSBhYm91dCBwYXNzaW5nIHRoZSBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIGRvd24gaW50byBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAgYW5kIGNhbGxpbmcgYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYC5cblxuU28sIEknbSByZWFkeSB0byBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU46IGZhbHNlYC4gVGhlIHJhdGlvbmFsZSBpcyBzb2xpZCwgYW5kIHRoZSBjb2RlIGxvb2tzIGNsZWFuLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDgwLCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAwOjMwLjc3NzgxOTQzM1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaHVnZXRsYiBhbGxvY2F0aW9uIGFuZCBtZW1jZyBjaGFyZ2luZyByb3V0aW5lcyAoYGh1Z2V0bGJfYWxsb2NfZm9saW9gLCBgbWVtX2Nncm91cF9jaGFyZ2VfaHVnZXRsYmAsIGFuZCBgYWxsb2NfaHVnZXRsYl9mb2xpb2ApIHRvIHBhc3MgYSB0YXJnZXQgYHN0cnVjdCBtbV9zdHJ1Y3QgKm1tYCBwb2ludGVyIGFuZCBjaGFyZ2UgdGhlIGh1Z2V0bGIgZm9saW8gdG8gdGhlIGNncm91cCBhc3NvY2lhdGVkIHdpdGggdGhlIHRhcmdldCBtbSAoYGdldF9tZW1fY2dyb3VwX2Zyb21fbW0obW0pYCkgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgdGFzayAoYGdldF9tZW1fY2dyb3VwX2Zyb21fY3VycmVudCgpYCkuXFxuXFxuVGhpcyBjaGFuZ2Ugb25seSBhbHRlcnMgcG9pbnRlciBwYXNzaW5nIGFuZCBtZW1jZyBhY2NvdW50aW5nIGxvZ2ljLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbWFuaXB1bGF0ZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgYnVmZmVycywgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBsZW5ndGggb3IgYm91bmRzIGNhbGN1bGF0aW9ucy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBwb2ludGVyIHZhbGlkaXR5IG9yIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBodWdldGxiIGFsbG9jYXRpb24gYW5kIG1lbWNnIGNoYXJnaW5nIHJvdXRpbmVzIChgaHVnZXRsYl9hbGxvY19mb2xpb2AsIGBtZW1fY2dyb3VwX2NoYXJnZV9odWdldGxiYCwgYW5kIGBhbGxvY19odWdldGxiX2ZvbGlvYCkgdG8gcGFzcyBhIHRhcmdldCBgc3RydWN0IG1tX3N0cnVjdCAqbW1gIHBvaW50ZXIgYW5kIGNoYXJnZSB0aGUgaHVnZXRsYiBmb2xpbyB0byB0aGUgY2dyb3VwIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0IG1tIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9tbShtbSlgKSByYXRoZXIgdGhhbiB0aGUgY3VycmVudCB0YXNrIChgZ2V0X21lbV9jZ3JvdXBfZnJvbV9jdXJyZW50KClgKS5cXG5cXG5UaGlzIGNoYW5nZSBvbmx5IGFsdGVycyBwb2ludGVyIHBhc3NpbmcgYW5kIG1lbWNnIGFjY291bnRpbmcgbG9naWMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtYW5pcHVsYXRlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBidWZmZXJzLCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIGxlbmd0aCBvciBib3VuZHMgY2FsY3VsYXRpb25zLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHBvaW50ZXIgdmFsaWRpdHkgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZXRlY3RvcnMgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowfbzk9[1] Phase: Succeeded StartedAt: 2026-09-04 10:00:42 +0000 UTC FinishedAt: 2026-09-04 10:00:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 10:00:42 +0000 UTC FinishedAt: 2026-09-04 10:00:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2] Phase: Succeeded StartedAt: 2026-09-04 10:00:42 +0000 UTC FinishedAt: 2026-09-04 13:46:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 10:00:42 +0000 UTC FinishedAt: 2026-09-04 13:46:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 10:00:42 +0000 UTC FinishedAt: 2026-09-04 10:00:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 10:00:42 +0000 UTC FinishedAt: 2026-09-04 10:00:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfbzk9/series-workflowfbzk9-convert-artifact-2423661459/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 10:00:52 +0000 UTC FinishedAt: 2026-09-04 10:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 10:00:52 +0000 UTC FinishedAt: 2026-09-04 10:19:54 +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:*cb4452d1-e195-4e77-8175-fdabcfebf6c6,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-workflowfbzk9/series-workflowfbzk9-convert-artifact-2423661459/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": "f2919b97-4460-41ba-8e52-29e61cb3f020", "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-workflowfbzk9/series-workflowfbzk9-build-action-1573535937/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 10:00:52 +0000 UTC FinishedAt: 2026-09-04 10:19:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*cb4452d1-e195-4e77-8175-fdabcfebf6c6,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-workflowfbzk9/series-workflowfbzk9-convert-artifact-2423661459/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": "f2919b97-4460-41ba-8e52-29e61cb3f020", "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-workflowfbzk9/series-workflowfbzk9-build-action-1573535937/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 10:19:54 +0000 UTC FinishedAt: 2026-09-04 10:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 10:19:54 +0000 UTC FinishedAt: 2026-09-04 10:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 10:19:54 +0000 UTC FinishedAt: 2026-09-04 10:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 10:19:54 +0000 UTC FinishedAt: 2026-09-04 10:20:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfbzk9/series-workflowfbzk9-convert-artifact-1698089354/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 10:20:04 +0000 UTC FinishedAt: 2026-09-04 10:22:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 10:20:04 +0000 UTC FinishedAt: 2026-09-04 10:22:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f2919b97-4460-41ba-8e52-29e61cb3f020,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-workflowfbzk9/series-workflowfbzk9-build-action-1573535937/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-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 10:22:16 +0000 UTC FinishedAt: 2026-09-04 10:22:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 10:22:16 +0000 UTC FinishedAt: 2026-09-04 10:22:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 10:22:16 +0000 UTC FinishedAt: 2026-09-04 10:41:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 10:22:16 +0000 UTC FinishedAt: 2026-09-04 10:41:49 +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:*cb4452d1-e195-4e77-8175-fdabcfebf6c6,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-workflowfbzk9/series-workflowfbzk9-convert-artifact-1698089354/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": "4fe6b344-11ad-4938-bc9f-8831339dd695", "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-workflowfbzk9/series-workflowfbzk9-build-action-1886783406/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 10:22:16 +0000 UTC FinishedAt: 2026-09-04 10:41:39 +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:*cb4452d1-e195-4e77-8175-fdabcfebf6c6,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-workflowfbzk9/series-workflowfbzk9-convert-artifact-1698089354/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": "4fe6b344-11ad-4938-bc9f-8831339dd695", "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-workflowfbzk9/series-workflowfbzk9-build-action-1886783406/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 10:41:49 +0000 UTC FinishedAt: 2026-09-04 10:41:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 10:41:49 +0000 UTC FinishedAt: 2026-09-04 10:41:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 10:41:49 +0000 UTC FinishedAt: 2026-09-04 10:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 10:41:49 +0000 UTC FinishedAt: 2026-09-04 10:43:37 +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:*4fe6b344-11ad-4938-bc9f-8831339dd695,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-workflowfbzk9/series-workflowfbzk9-build-action-1886783406/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-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 10:43:47 +0000 UTC FinishedAt: 2026-09-04 13:46:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 10:43:47 +0000 UTC FinishedAt: 2026-09-04 13:46:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f2919b97-4460-41ba-8e52-29e61cb3f020,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4fe6b344-11ad-4938-bc9f-8831339dd695,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-workflowfbzk9/series-workflowfbzk9-build-action-1573535937/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-workflowfbzk9/series-workflowfbzk9-build-action-1886783406/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 10:43:47 +0000 UTC FinishedAt: 2026-09-04 10:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 10:43:47 +0000 UTC FinishedAt: 2026-09-04 10:44:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfbzk9/series-workflowfbzk9-convert-artifact-1433983519/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 10:43:47 +0000 UTC FinishedAt: 2026-09-04 10:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 10:43:47 +0000 UTC FinishedAt: 2026-09-04 10:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 10:43:47 +0000 UTC FinishedAt: 2026-09-04 10:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 10:44:11 +0000 UTC FinishedAt: 2026-09-04 13:46:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfbzk9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["hugetlb_alloc_folio","alloc_hugetlb_folio","mem_cgroup_charge_hugetlb"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc41e961a269f2ca4196e669d6d8e05480899cd4","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MEMCG"],"series_id":"b3096cd7-afee-426e-bb64-e0c698302ea3","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 10:44:11 +0000 UTC FinishedAt: 2026-09-04 13:46:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f2919b97-4460-41ba-8e52-29e61cb3f020,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4fe6b344-11ad-4938-bc9f-8831339dd695,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-workflowfbzk9/series-workflowfbzk9-build-action-1573535937/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-workflowfbzk9/series-workflowfbzk9-build-action-1886783406/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-workflowfbzk9/series-workflowfbzk9-convert-artifact-1433983519/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,}