Name: series-workflowtkr4z Phase: Succeeded StartedAt: 2026-07-25 05:46:57 +0000 UTC FinishedAt: 2026-07-25 10:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[0] Phase: Succeeded StartedAt: 2026-07-25 05:46:57 +0000 UTC FinishedAt: 2026-07-25 06:02:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 05:46:57 +0000 UTC FinishedAt: 2026-07-25 06:02:17 +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": "fbae93ac88a26f1a36e5861d6f76ed9594b2c93a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "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": "fbae93ac88a26f1a36e5861d6f76ed9594b2c93a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "19204fbb-6129-4faa-aa21-e06ec7fb2896" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__thp_vma_allowable_orders", "shmem_allowable_huge_orders", "do_set_pmd" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7c2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzJiMzNDssCiAgICAmIzM0O2RvX3NldF9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IFRIUCBzdXBwb3J0IGlzIGNoZWNrZWQgYW5kIGluaXRpYWxpemVkLCByZXBsYWNpbmcgYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB3aXRoIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBJdCBtb2RpZmllcyBjb3JlIE1NIGxvZ2ljIChUSFAsIHNobWVtLCBkYXgsIG52ZGltbSkgdG8gZmlsdGVyIG91dCBQTUQgYW5kIFBVRCBvcmRlcnMgaWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGZkNjU2NDkzMGI1ODM4NTU5YzMwZDUxZDhhMGE2ZWU4N2MyNTIwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDA2OjAwOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3RcbmluZGV4IGQ2NzdlMDQyOGMzZjY4Li40NmZjOTg2YzMzODhhYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdFxuQEAgLTEwOSw5ICYjNDM7MTA5LDggQEAgbm9zd2FwICBEaXNhYmxlcyBzd2FwLiBSZW1vdW50cyBtdXN0IHJlc3BlY3QgdGhlIG9yaWdpbmFsIHNldHRpbmdzLlxuID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiB0bXBmcyBhbHNvIHN1cHBvcnRzIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgd2hpY2ggcmVxdWlyZXMgYSBrZXJuZWxcbi1jb25maWd1cmVkIHdpdGggQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGFuZCB3aXRoIGh1Z2Ugc3VwcG9ydGVkIGZvclxuLXlvdXIgc3lzdGVtIChoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSwgd2hpY2ggaXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljKS5cbi1UaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6XG4mIzQzO2NvbmZpZ3VyZWQgd2l0aCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYW5kIHdpdGggaHVnZSBwYWdlc1xuJiM0MztzdXBwb3J0ZWQgZm9yIHlvdXIgc3lzdGVtLiBUaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6XG4gXG4gPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIGh1Z2U9bmV2ZXIgICAgICAgRG8gbm90IGFsbG9jYXRlIGh1Z2UgcGFnZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LlxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBmYTdiOTM1Zjk0N2NhMC4uMmEwYTdkZGY4YmVlN2UgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtNjE1LDkgJiM0Mzs2MTUsNiBAQCB1bnNpZ25lZCBsb25nIGlvX3JlbWFwX3Bmbl9yYW5nZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gLyogV2UgZG9uJiMzOTt0IGhhdmUgaGFyZHdhcmUgZGlydHkvYWNjZXNzZWQgYml0cywgZ2VuZXJpY19wbWRwX2VzdGFibGlzaCBpcyBmaW5lLiovXG4gI2RlZmluZSBwbWRwX2VzdGFibGlzaCBnZW5lcmljX3BtZHBfZXN0YWJsaXNoXG4gXG4tI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXG4tZXh0ZXJuIGludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCk7XG4tXG4gc3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxuIHtcbiBcdHJldHVybiAhIShwbWRfdmFsKHBtZCkgXHUwMDI2IF9QQUdFX0hVR0UpO1xuQEAgLTc0Myw2ICYjNDM7NzQwLDkgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4mIzQzOyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXG4mIzQzO2V4dGVybiBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcbiYjNDM7XG4gI2lmZGVmIF9QQUdFX0hVR0VcbiAjZGVmaW5lIHBtZF9sZWFmKHBtZClcdCgocG1kX3ZhbChwbWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuICNkZWZpbmUgcHVkX2xlYWYocHVkKVx0KChwdWRfdmFsKHB1ZCkgXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmNcbmluZGV4IDI0ZmU4NWZhMTY5ZDE2Li45MzM5ZWJiMDgxNWYyMyAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmNcbkBAIC00MzIsOSAmIzQzOzQzMiw3IEBAIHZvaWQgYWRkX3dpcmVkX2VudHJ5KHVuc2lnbmVkIGxvbmcgZW50cnlsbzAsIHVuc2lnbmVkIGxvbmcgZW50cnlsbzEsXG4gI2VuZGlmXG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbi1cbi1pbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4mIzQzO2ludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4ge1xuIFx0c3RhdGljIHVuc2lnbmVkIGludCBtYXNrID0gLTE7XG4gXG5AQCAtNDUwLDkgJiM0Mzs0NDgsNyBAQCBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4gXHR9XG4gXHRyZXR1cm4gbWFzayA9PSBQTV9IVUdFX01BU0s7XG4gfVxuLUVYUE9SVF9TWU1CT0woaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKTtcbi1cbi0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICAqL1xuJiM0MztFWFBPUlRfU1lNQk9MKGFyY2hfaGFzX3BtZF9sZWF2ZXMpO1xuIFxuIC8qXG4gICogVXNlZCBmb3IgbG9hZGluZyBUTEIgZW50cmllcyBiZWZvcmUgdHJhcF9pbml0KCkgaGFzIHN0YXJ0ZWQsIHdoZW4gd2VcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC00ay5oXG5pbmRleCA4ZTViZDk5MDJiZWQ0ZS4uZDUzMmUzZjBkZmMzYjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTRrLmhcbkBAIC0xNjUsOSAmIzQzOzE2NSw5IEBAIGV4dGVybiB2b2lkIGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV9kZXBvc2l0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCxcbiBleHRlcm4gcGd0YWJsZV90IGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHApO1xuIGV4dGVybiBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKTtcbi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcbiAjZW5kaWZcbiBcbiYjNDM7ZXh0ZXJuIGludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpO1xuICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqL1xuIFxuICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQk9PSzNTXzY0X0hBU0hfNEtfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaFxuaW5kZXggN2RlYjNhNjY4OTBiY2QuLmQ1MjNjODBmNDRmNzE3IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmhcbkBAIC0yNzgsOSAmIzQzOzI3OCw5IEBAIGV4dGVybiB2b2lkIGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV9kZXBvc2l0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCxcbiBleHRlcm4gcGd0YWJsZV90IGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHApO1xuIGV4dGVybiBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKTtcbi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcbiAjZW5kaWYgLyogIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuJiM0MztleHRlcm4gaW50IGhhc2hfX2FyY2hfaGFzX3BtZF9sZWF2ZXModm9pZCk7XG4gI2VuZGlmXHQvKiBfX0FTU0VNQkxFUl9fICovXG4gXG4gI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19CT09LM1NfNjRfSEFTSF82NEtfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbmluZGV4IGY0ZGI3ZDdmYmQ1YzYyLi40MTE2NmQ0NGZhNzU2ZSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuQEAgLTExMjEsMTUgJiM0MzsxMTIxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHtcbiB9XG4gXG4tZXh0ZXJuIGludCBoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCk7XG4tc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4te1xuLVx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcbi1cdFx0cmV0dXJuIHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKTtcbi1cdHJldHVybiBoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKTtcbi19XG4tI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXG4tXG4gc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxuIHtcbiBcdGlmIChyYWRpeF9lbmFibGVkKCkpXG5AQCAtMTQ0MSw2ICYjNDM7MTQzMiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9uZWVkc19wZ3RhYmxlX2RlcG9zaXQodm9pZClcbiBcbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4mIzQzO2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHJhZGl4X2VuYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybiByYWRpeF9fYXJjaF9oYXNfcG1kX2xlYXZlcygpO1xuJiM0MztcdHJldHVybiBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKCk7XG4mIzQzO31cbiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcbiYjNDM7XG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX01PRElGWV9QUk9UX1RSQU5TQUNUSU9OXG4gcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7XG4gdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmhcbmluZGV4IGRhOTU0ZTc3OTc0NDFmLi5lOGI3NDUyODk1M2ZkYyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oXG5AQCAtMjk4LDIyICYjNDM7Mjk4LDIyIEBAIGV4dGVybiBwbWRfdCByYWRpeF9fcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gcHVkX3QgcmFkaXhfX3B1ZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwKTtcbiBcbi1zdGF0aWMgaW5saW5lIGludCByYWRpeF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKHZvaWQpXG4ge1xuLVx0LyogRm9yIHJhZGl4IDJNIGF0IFBNRCBsZXZlbCBtZWFucyB0aHAgKi9cbi1cdGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8yTV0uc2hpZnQgPT0gUE1EX1NISUZUKVxuJiM0MztcdC8qIEZvciByYWRpeCAxRyBhdCBQVUQgbGV2ZWwgbWVhbnMgcHVkIGh1Z2VwYWdlIHN1cHBvcnQgKi9cbiYjNDM7XHRpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMUddLnNoaWZ0ID09IFBVRF9TSElGVClcbiBcdFx0cmV0dXJuIDE7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzOyNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKHZvaWQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4ge1xuLVx0LyogRm9yIHJhZGl4IDFHIGF0IFBVRCBsZXZlbCBtZWFucyBwdWQgaHVnZXBhZ2Ugc3VwcG9ydCAqL1xuLVx0aWYgKG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzFHXS5zaGlmdCA9PSBQVURfU0hJRlQpXG4mIzQzO1x0LyogRm9yIHJhZGl4IDJNIGF0IFBNRCBsZXZlbCBtZWFucyB0aHAgKi9cbiYjNDM7XHRpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMk1dLnNoaWZ0ID09IFBNRF9TSElGVClcbiBcdFx0cmV0dXJuIDE7XG4gXHRyZXR1cm4gMDtcbiB9XG4tI2VuZGlmXG4gXG4gc3RydWN0IHZtZW1fYWx0bWFwO1xuIHN0cnVjdCBkZXZfcGFnZW1hcDtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmNcbmluZGV4IGQ5YjViNzUxZDdiNzViLi5hNjdiYzE3MjM0MDRjMiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jXG5AQCAtMzkxLDcgJiM0MzszOTEsOSBAQCBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBvbGRfcG1kO1xuIH1cbiBcbi1pbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiYjNDM7XG4mIzQzO2ludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4ge1xuIFxuIFx0aWYgKCFtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xNk1fUEFHRSkpXG5AQCAtNDIwLDkgJiM0Mzs0MjIsNyBAQCBpbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4gXG4gXHRyZXR1cm4gMTtcbiB9XG4tRVhQT1JUX1NZTUJPTF9HUEwoaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKTtcbi1cbi0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGhhc2hfX2FyY2hfaGFzX3BtZF9sZWF2ZXMpO1xuIFxuICNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggZTg4MjY2M2E1OGU3NzYuLjI0ZWU5MGM3ZTliZjZiIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTE4MjUsMTMgJiM0MzsxODI1LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcbiB7XG4gXHRyZXR1cm4gcG1kX2xlYWYocG1kKTtcbiB9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbi0jZGVmaW5lIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Vcbi1zdGF0aWMgaW5saW5lIGludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZClcbiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuIHtcbiBcdHJldHVybiBjcHVfaGFzX2VkYXQxKCkgPyAxIDogMDtcbiB9XG4tI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9UQUJMRV9DSEVDS1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggOGUwMDE4ZmFkZDE0ZTYuLjNjNmE2NDFlNmMyMTFkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0zMDYsMTIgJiM0MzszMDYsNiBAQCBzdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXG4gfVxuICNlbmRpZlxuIFxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxuLXN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxuLXtcbi1cdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUFNFKTtcbi19XG4tXG4gI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcbiBzdGF0aWMgaW5saW5lIGJvb2wgcG1kX3NwZWNpYWwocG1kX3QgcG1kKVxuIHtcbkBAIC0zMzcsNiAmIzQzOzMzMSwxMiBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9ta3NwZWNpYWwocHVkX3QgcHVkKVxuICNlbmRpZlx0LyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUCAqL1xuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QU0UpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3NldF9mbGFncyhwdGVfdCBwdGUsIHB0ZXZhbF90IHNldClcbiB7XG4gXHRwdGV2YWxfdCB2ID0gbmF0aXZlX3B0ZV92YWwocHRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oIGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuaW5kZXggODFlNGFmNDllMzljMTAuLjM1NzQ0ZmY2NTkyYWM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuQEAgLTEyMyw3ICYjNDM7MTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxuIHtcbiBcdGlmIChhbGlnbiA9PSBQVURfU0laRSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCkpXG4gXHRcdHJldHVybiB0cnVlO1xuLVx0aWYgKGFsaWduID09IFBNRF9TSVpFIFx1MDAyNlx1MDAyNiBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbiYjNDM7XHRpZiAoYWxpZ24gPT0gUE1EX1NJWkUgXHUwMDI2XHUwMDI2IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRpZiAoYWxpZ24gPT0gUEFHRV9TSVpFKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jIGIvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY1xuaW5kZXggOGZhOWMxNmFiYTdlYTAuLjQ1N2ViNTRlN2FiNmZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY1xuQEAgLTk0LDcgJiM0Mzs5NCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nICpuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHModW5zaWduZWQgbG9uZyAqYWxpZ25tZW50cylcbiBcbiBcdGFsaWdubWVudHNbMF0gPSBQQUdFX1NJWkU7XG4gXG4tXHRpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpIHtcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpIHtcbiBcdFx0YWxpZ25tZW50c1sxXSA9IEhQQUdFX1BNRF9TSVpFO1xuIFx0XHRpZiAoaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpKVxuIFx0XHRcdGFsaWdubWVudHNbMl0gPSBIUEFHRV9QVURfU0laRTtcbkBAIC0xMDksNyAmIzQzOzExMCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nICpuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHModW5zaWduZWQgbG9uZyAqYWxpZ25tZW50cylcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuZF9wZm5fZGVmYXVsdF9hbGlnbm1lbnQodm9pZClcbiB7XG4gXG4tXHRpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm4gSFBBR0VfUE1EX1NJWkU7XG4gXHRyZXR1cm4gUEFHRV9TSVpFO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG5pbmRleCBjNzQ1ZjdhZDIyOTg3Zi4uNTI1YWNlYTJlYjU5Y2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbkBAIC00Nyw3ICYjNDM7NDcsNiBAQCB2bV9mYXVsdF90IHZtZl9pbnNlcnRfZm9saW9fcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0Ym9vbCB3cml0ZSk7XG4gXG4gZW51bSB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFnIHtcbi1cdFRSQU5TUEFSRU5UX0hVR0VQQUdFX1VOU1VQUE9SVEVELFxuIFx0VFJBTlNQQVJFTlRfSFVHRVBBR0VfRkxBRyxcbiBcdFRSQU5TUEFSRU5UX0hVR0VQQUdFX1JFUV9NQURWX0ZMQUcsXG4gXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUcsXG5AQCAtMzgzLDEyICYjNDM7MzgyLDYgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gbW1fZmxhZ3NfdGVzdChNTUZfRElTQUJMRV9USFBfRVhDRVBUX0FEVklTRUQsIHZtYS1cdTAwM2V2bV9tbSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfZGlzYWJsZWRfYnlfaHcodm9pZClcbi17XG4tXHQvKiBJZiB0aGUgaGFyZHdhcmUvZmlybXdhcmUgbWFya2VkIGh1Z2VwYWdlIHN1cHBvcnQgZGlzYWJsZWQuICovXG4tXHRyZXR1cm4gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRCk7XG4tfVxuLVxuIHVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbmluZGV4IDhjMDkzYzExOWU1YTgyLi5kNTcxZDE2MWE4NGIzYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9qdW1wX2xhYmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaFx1MDAzZVxuIFxuQEAgLTIzMTMsNiAmIzQzOzIzMTQsMjEgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwZ3RhYmxlX2xldmVsX3RvX3N0cihlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gXHR9XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX01NVVxuJiM0MztERUNMQVJFX1NUQVRJQ19LRVlfVFJVRShfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBndGFibGVfaGFzX3BtZF9sZWF2ZXModm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcbiYjNDM7fVxuJiM0Mzt2b2lkIF9faW5pdCBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KHZvaWQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqL1xuIFxuICNpZiAhZGVmaW5lZChNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQ09ORklHXzY0QklUKVxuQEAgLTIzMjgsOCAmIzQzOzIzNDQsOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBndGFibGVfbGV2ZWxfdG9fc3RyKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAjZW5kaWZcbiAjZW5kaWZcbiBcbi0jaWZuZGVmIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgSVNfQlVJTFRJTihDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4mIzQzOyNpZm5kZWYgYXJjaF9oYXNfcG1kX2xlYXZlc1xuJiM0MzsjZGVmaW5lIGFyY2hfaGFzX3BtZF9sZWF2ZXMoKSBJU19CVUlMVElOKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4gI2VuZGlmXG4gXG4gI2lmbmRlZiBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlXG5kaWZmIC0tZ2l0IGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jIGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jXG5pbmRleCAyODc1ZmQyMmQ3YmIwMi4uMjUwMzhiNzRjN2JjNjcgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RlYnVnX3ZtX3BndGFibGUuY1xuQEAgLTE3Nyw3ICYjNDM7MTc3LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KVxuIFx0dW5zaWduZWQgbG9uZyB2YWwgPSBpZHgsICpwdHIgPSBcdTAwMjZ2YWw7XG4gXHRwbWRfdCBwbWQ7XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuJiM0MztcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBiYXNpYyAoJXBHdilcXG5cJiMzNDssIHB0cik7XG5AQCAtMjIyLDcgJiM0MzsyMjIsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRwbWRfdCBwbWQ7XG4gXHR1bnNpZ25lZCBsb25nIHZhZGRyID0gYXJncy1cdTAwM2V2YWRkcjtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4mIzQzO1x0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHBhZ2UgPSAoYXJncy1cdTAwM2VwbWRfcGZuICE9IFVMT05HX01BWCkgPyBwZm5fdG9fcGFnZShhcmdzLVx1MDAzZXBtZF9wZm4pIDogTlVMTDtcbkBAIC0yODMsNyAmIzQzOzI4Myw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIHtcbiBcdHBtZF90IHBtZDtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4mIzQzO1x0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O1ZhbGlkYXRpbmcgUE1EIGxlYWZcXG5cJiMzNDspO1xuQEAgLTY4OCw3ICYjNDM7Njg4LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuJiM0MztcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBwcm90bm9uZVxcblwmIzM0Oyk7XG5AQCAtNzM3LDcgJiM0Mzs3MzcsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdGlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4mIzQzO1x0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O1ZhbGlkYXRpbmcgUE1EIHNvZnQgZGlydHlcXG5cJiMzNDspO1xuQEAgLTc1NCw3ICYjNDM7NzU0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdCAgICAhSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuJiM0MztcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBzd2FwIHNvZnQgZGlydHlcXG5cJiMzNDspO1xuQEAgLTgyNSw3ICYjNDM7ODI1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0c3dwX2VudHJ5X3QgYXJjaF9lbnRyeTtcbiBcdHBtZF90IHBtZDEsIHBtZDI7XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuJiM0MztcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBzd2FwXFxuXCYjMzQ7KTtcbkBAIC05MDYsNyAmIzQzOzkwNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4ge1xuIFx0cG1kX3QgcG1kO1xuIFxuLVx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbiYjNDM7XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7VmFsaWRhdGluZyBQTUQgYmFzZWQgVEhQXFxuXCYjMzQ7KTtcbkBAIC05OTcsNyAmIzQzOzk5Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBkZXN0cm95X2FyZ3Moc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdH1cbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBhcmdzLVx1MDAzZXBtZF9wZm4gIT0gVUxPTkdfTUFYKSB7XG4gXHRcdGRlYnVnX3ZtX3BndGFibGVfZnJlZV9odWdlX3BhZ2UoYXJncywgYXJncy1cdTAwM2VwbWRfcGZuLCBIUEFHRV9QTURfT1JERVIpO1xuIFx0XHRhcmdzLVx1MDAzZXBtZF9wZm4gPSBVTE9OR19NQVg7XG5AQCAtMTI0OSw3ICYjNDM7MTI0OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkge1xuJiM0MztcdCAgICBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpIHtcbiBcdFx0cGFnZSA9IGRlYnVnX3ZtX3BndGFibGVfYWxsb2NfaHVnZV9wYWdlKGFyZ3MsIEhQQUdFX1BNRF9PUkRFUik7XG4gXHRcdGlmIChwYWdlKSB7XG4gXHRcdFx0YXJncy1cdTAwM2VwbWRfcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDA0ZThhNmI1NTM0MzVmLi4zODVhMzA1ZTdhZjY1MSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xMjksNiAmIzQzOzEyOSwxNSBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ZWxzZVxuIFx0XHRzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfRklMRV9ERUZBVUxUO1xuIFxuJiM0MztcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMsIGFzc3VtZSBmb3JcbiYjNDM7XHRcdCAqIG5vdyB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQgUFVEIGxlYXZlcyBhbmQgZGlzYWJsZVxuJiM0MztcdFx0ICogYm90aCBmb2xpbyBvcmRlcnMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN1cHBvcnRlZF9vcmRlcnMgXHUwMDI2PSB+KEJJVChQTURfT1JERVIpIHwgQklUKFBVRF9PUkRFUikpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvcmRlcnMgXHUwMDI2PSBzdXBwb3J0ZWRfb3JkZXJzO1xuIFx0aWYgKCFvcmRlcnMpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEzNiw3ICYjNDM7MTQ1LDcgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmICghdm1hLVx1MDAzZXZtX21tKVx0XHQvKiB2ZHNvICovXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHRocF9kaXNhYmxlZF9ieV9odygpIHx8IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgZm9yY2VkX2NvbGxhcHNlKSlcbiYjNDM7XHRpZiAodm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBmb3JjZWRfY29sbGFwc2UpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIGtodWdlcGFnZWQgZG9lc24mIzM5O3QgY29sbGFwc2UgREFYIHZtYSwgYnV0IHBhZ2UgZmF1bHQgaXMgZmluZS4gKi9cbkBAIC04NzQsNyAmIzQzOzg4Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxuIFx0ICogZGlzYWJsZSBhbGwgb3RoZXIgc2l6ZXMuIHBvd2VycGMmIzM5O3MgUE1EX09SREVSIGlzbiYjMzk7dCBhIGNvbXBpbGUtdGltZVxuIFx0ICogY29uc3RhbnQgc28gd2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUuXG4gXHQgKi9cbi1cdGlmICghYW5vbl9vcmRlcnNfY29uZmlndXJlZClcbiYjNDM7XHRpZiAoIWFub25fb3JkZXJzX2NvbmZpZ3VyZWQgXHUwMDI2XHUwMDI2IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0aHVnZV9hbm9uX29yZGVyc19pbmhlcml0ID0gQklUKFBNRF9PUkRFUik7XG4gXG4gXHQqaHVnZXBhZ2Vfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoXCYjMzQ7dHJhbnNwYXJlbnRfaHVnZXBhZ2VcJiMzNDssIG1tX2tvYmopO1xuQEAgLTg5Niw2ICYjNDM7OTA1LDE1IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxuIFx0fVxuIFxuIFx0b3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTiB8IFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVDtcbiYjNDM7XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBQTUQgbGVhdmVzLCBhc3N1bWUgZm9yXG4mIzQzO1x0XHQgKiBub3cgdGhhdCBpdCBkb2VzIG5vdCBzdXBwb3J0IFBVRCBsZWF2ZXMgYW5kIGRpc2FibGVcbiYjNDM7XHRcdCAqIGJvdGggZm9saW8gb3JkZXJzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRvcmRlcnMgXHUwMDI2PSB+KEJJVChQTURfT1JERVIpIHwgQklUKFBVRF9PUkRFUikpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvcmRlciA9IGhpZ2hlc3Rfb3JkZXIob3JkZXJzKTtcbiBcdHdoaWxlIChvcmRlcnMpIHtcbiBcdFx0dGhwc2l6ZSA9IHRocHNpemVfY3JlYXRlKG9yZGVyLCAqaHVnZXBhZ2Vfa29iaik7XG5AQCAtMTAxMCwxMSAmIzQzOzEwMjgsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXG4gXHRpbnQgZXJyO1xuIFx0c3RydWN0IGtvYmplY3QgKmh1Z2VwYWdlX2tvYmo7XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XG4tXHRcdHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzID0gMSBcdTAwM2NcdTAwM2MgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVU5TVVBQT1JURUQ7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuIFx0LypcbiBcdCAqIGh1Z2VwYWdlcyBjYW4mIzM5O3QgYmUgYWxsb2NhdGVkIGJ5IHRoZSBidWRkeSBhbGxvY2F0b3JcbiBcdCAqL1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDU2YjI0NDU1MmYxMzk0Li5mMzlkOTM4MzQ5NGU2OSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTE2NCw2ICYjNDM7MTY0LDE1IEBAIF9fc2V0dXAoXCYjMzQ7bm9yYW5kbWFwc1wmIzM0OywgZGlzYWJsZV9yYW5kbWFwcyk7XG4gXG4gdW5zaWduZWQgbG9uZyBoaWdoZXN0X21lbW1hcF9wZm4gX19yZWFkX21vc3RseTtcbiBcbiYjNDM7REVGSU5FX1NUQVRJQ19LRVlfVFJVRShfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcbiYjNDM7RVhQT1JUX1NZTUJPTChfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghYXJjaF9oYXNfcG1kX2xlYXZlcygpKVxuJiM0MztcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNl9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgbW1fdHJhY2VfcnNzX3N0YXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpXG4ge1xuIFx0dHJhY2VfcnNzX3N0YXQobW0sIG1lbWJlcik7XG5AQCAtNTU2Nyw3ICYjNDM7NTU3Niw3IEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhXG4gXHQgKiBQTUQgbWFwcGluZ3MgaWYgVEhQcyBhcmUgZGlzYWJsZWQuIEFzIHdlIGFscmVhZHkgaGF2ZSBhIFRIUCxcbiBcdCAqIGJlaGF2ZSBhcyBpZiB3ZSBhcmUgZm9yY2luZyBhIGNvbGxhcHNlLlxuIFx0ICovXG4tXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncyxcbiYjNDM7XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSB8fCB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLFxuIFx0XHRcdFx0XHRcdCAgICAgLyogZm9yY2VkX2NvbGxhcHNlPSovIHRydWUpKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggNzExZjgyMWY3YjNjNzIuLmRjYzA3MmRiNDU1ODcyIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmNcbkBAIC0yNjk5LDYgJiM0MzsyNjk5LDcgQEAgdm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4ge1xuIFx0YXJjaF9tbV9wcmVpbml0KCk7XG4gXHRpbml0X3plcm9fcGFnZV9wZm4oKTtcbiYjNDM7XHRwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KCk7XG4gXG4gXHQvKiBJbml0aWFsaXphdGlvbnMgcmVseWluZyBvbiBTTVAgc2V0dXAgKi9cbiBcdEJVSUxEX0JVR19PTihNQVhfWk9ORUxJU1RTIFx1MDAzZSAyKTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTA3MTE3NzA1OWE5NjQuLjAwOGRmNTU4YWYyMzdlIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTY4OSw3ICYjNDM7Njg5LDcgQEAgc3RhdGljIGludCBzaG1lbV9wYXJzZV9odWdlKGNvbnN0IGNoYXIgKnN0cilcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcdTAwMjZcdTAwMjYgaHVnZSAhPSBTSE1FTV9IVUdFX0RFTlkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTEyODcsNiAmIzQzOzEyODcsNyBAQCBzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4gXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlcnM7XG4gXG4gXHQvKiBGYXN0LXBhdGggaGludDsgcmVjYWxjIHVuZGVyIGluZm8tXHUwMDNlbG9jayBjb3JyZWN0cyBhbnkgc3RhbGUgcmVhZC4gKi9cbiBcdGlmIChkYXRhX3JhY2UoaW5mby1cdTAwM2VhbGxvY2VkIC0gaW5mby1cdTAwM2Vzd2FwcGVkICE9IGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VucnBhZ2VzKSlcbkBAIC0xMzAzLDggJiM0MzsxMzA0LDExIEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRTVEFUWF9BVFRSX05PRFVNUCk7XG4gXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcbiBcbi1cdGlmIChzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKGlub2RlLCAwLCAwLCBmYWxzZSwgTlVMTCwgMCkpXG4tXHRcdHN0YXQtXHUwMDNlYmxrc2l6ZSA9IEhQQUdFX1BNRF9TSVpFO1xuJiM0MztcdG9yZGVycyA9IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoaW5vZGUsIDAsIDAsIGZhbHNlLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiYjNDM7XHRcdG9yZGVycyBcdTAwMjY9IH5CSVQoUE1EX09SREVSKTtcbiYjNDM7XHRpZiAob3JkZXJzKVxuJiM0MztcdFx0c3RhdC1cdTAwM2VibGtzaXplID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBoaWdoZXN0X29yZGVyKG9yZGVycyk7XG4gXG4gXHRpZiAocmVxdWVzdF9tYXNrIFx1MDAyNiBTVEFUWF9CVElNRSkge1xuIFx0XHRzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0JUSU1FO1xuQEAgLTE4MjYsMTYgJiM0MzsxODMwLDE5IEBAIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzKTtcbiBcdHVuc2lnbmVkIGxvbmcgd2l0aGluX3NpemVfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX3dpdGhpbl9zaXplKTtcbiBcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwO1xuLVx0dW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnMsIGRpc2FibGVkX29yZGVycyA9IDA7XG4gXG4tXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSBcdTAwMjZcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSkpXG4mIzQzO1x0aWYgKHZtYSBcdTAwMjZcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4mIzQzO1x0XHRkaXNhYmxlZF9vcmRlcnMgPSBCSVQoUE1EX09SREVSKTtcbiYjNDM7XG4gXHRnbG9iYWxfb3JkZXJzID0gc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChpbm9kZSwgaW5kZXgsIHdyaXRlX2VuZCxcbiBcdFx0XHRcdFx0XHQgIHNobWVtX2h1Z2VfZm9yY2UsIHZtYSwgdm1fZmxhZ3MpO1xuIFx0LyogVG1wZnMgaHVnZSBwYWdlcyBhbGxvY2F0aW9uICovXG4gXHRpZiAoIXZtYSB8fCAhdm1hX2lzX2Fub25fc2htZW0odm1hKSlcbi1cdFx0cmV0dXJuIGdsb2JhbF9vcmRlcnM7XG4mIzQzO1x0XHRyZXR1cm4gZ2xvYmFsX29yZGVycyBcdTAwMjYgfmRpc2FibGVkX29yZGVycztcbiBcbiBcdC8qXG4gXHQgKiBGb2xsb3dpbmcgdGhlICYjMzk7ZGVueSYjMzk7IHNlbWFudGljcyBvZiB0aGUgdG9wIGxldmVsLCBmb3JjZSB0aGUgaHVnZVxuQEAgLTE4NDksNyAmIzQzOzE4NTYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0ICogbWVhbnMgbm9uLVBNRCBzaXplZCBUSFAgY2FuIG5vdCBvdmVycmlkZSAmIzM5O2h1Z2UmIzM5OyBtb3VudCBvcHRpb24gbm93LlxuIFx0ICovXG4gXHRpZiAoc2htZW1faHVnZSA9PSBTSE1FTV9IVUdFX0ZPUkNFKVxuLVx0XHRyZXR1cm4gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQpO1xuJiM0MztcdFx0cmV0dXJuIFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19pbmhlcml0KSBcdTAwMjYgfmRpc2FibGVkX29yZGVycztcbiBcbiBcdC8qIEFsbG93IG1USFAgdGhhdCB3aWxsIGJlIGZ1bGx5IHdpdGhpbiBpX3NpemUuICovXG4gXHRtYXNrIHw9IHNobWVtX2dldF9vcmRlcnNfd2l0aGluX3NpemUoaW5vZGUsIHdpdGhpbl9zaXplX29yZGVycywgaW5kZXgsIDApO1xuQEAgLTE4NjAsNiAmIzQzOzE4NjcsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKGdsb2JhbF9vcmRlcnMgXHUwMDNlIDApXG4gXHRcdG1hc2sgfD0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQpO1xuIFxuJiM0MztcdG1hc2sgXHUwMDI2PSB+ZGlzYWJsZWRfb3JkZXJzO1xuIFx0cmV0dXJuIFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVCBcdTAwMjYgbWFzaztcbiB9XG4gXG5AQCAtNDU4Nyw4ICYjNDM7NDU5NSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fcGFyc2Vfb25lKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4gXHRjYXNlIE9wdF9odWdlOlxuIFx0XHRjdHgtXHUwMDNlaHVnZSA9IHJlc3VsdC51aW50XzMyO1xuIFx0XHRpZiAoY3R4LVx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICEoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkpXG4mIzQzO1x0XHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiBcdFx0XHRnb3RvIHVuc3VwcG9ydGVkX3BhcmFtZXRlcjtcbiBcdFx0Y3R4LVx1MDAzZXNlZW4gfD0gU0hNRU1fU0VFTl9IVUdFO1xuIFx0XHRicmVhaztcbkBAIC01MzgzLDcgJiM0Mzs1MzkwLDcgQEAgdm9pZCBfX2luaXQgc2htZW1faW5pdCh2b2lkKVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbi1cdGlmIChoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBcdTAwMjZcdTAwMjYgc2htZW1faHVnZSBcdTAwM2UgU0hNRU1fSFVHRV9ERU5ZKVxuJiM0MztcdGlmIChzaG1lbV9odWdlIFx1MDAzZSBTSE1FTV9IVUdFX0RFTlkpXG4gXHRcdFNITUVNX1NCKHNobV9tbnQtXHUwMDNlbW50X3NiKS1cdTAwM2VodWdlID0gc2htZW1faHVnZTtcbiBcdGVsc2VcbiBcdFx0c2htZW1faHVnZSA9IFNITUVNX0hVR0VfTkVWRVI7IC8qIGp1c3QgaW4gY2FzZSBpdCB3YXMgcGF0Y2hlZCAqL1xuQEAgLTUzOTIsNyAmIzQzOzUzOTksNyBAQCB2b2lkIF9faW5pdCBzaG1lbV9pbml0KHZvaWQpXG4gXHQgKiBEZWZhdWx0IHRvIHNldHRpbmcgUE1ELXNpemVkIFRIUCB0byBpbmhlcml0IHRoZSBnbG9iYWwgc2V0dGluZyBhbmRcbiBcdCAqIGRpc2FibGUgYWxsIG90aGVyIG11bHRpLXNpemUgVEhQcy5cbiBcdCAqL1xuLVx0aWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZClcbiYjNDM7XHRpZiAoIXNobWVtX29yZGVyc19jb25maWd1cmVkIFx1MDAyNlx1MDAyNiBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQgPSBCSVQoSFBBR0VfUE1EX09SREVSKTtcbiAjZW5kaWZcbiBcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7LAogICAgJiMzNDtzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7ZG9fc2V0X3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgVEhQIHN1cHBvcnQgaXMgY2hlY2tlZCBhbmQgaW5pdGlhbGl6ZWQsIHJlcGxhY2luZyBgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKClgIHdpdGggYHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKWAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gbG9naWMgKFRIUCwgc2htZW0sIGRheCwgbnZkaW1tKSB0byBmaWx0ZXIgb3V0IFBNRCBhbmQgUFVEIG9yZGVycyBpZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgUE1EIGxlYXZlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZmQ2NTY0OTMwYjU4Mzg1NTljMzBkNTFkOGEwYTZlZTg3YzI1MjAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMDY6MDA6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0CmluZGV4IGQ2NzdlMDQyOGMzZjY4Li40NmZjOTg2YzMzODhhYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3QKQEAgLTEwOSw5ICYjNDM7MTA5LDggQEAgbm9zd2FwICBEaXNhYmxlcyBzd2FwLiBSZW1vdW50cyBtdXN0IHJlc3BlY3QgdGhlIG9yaWdpbmFsIHNldHRpbmdzLgogPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiB0bXBmcyBhbHNvIHN1cHBvcnRzIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgd2hpY2ggcmVxdWlyZXMgYSBrZXJuZWwKLWNvbmZpZ3VyZWQgd2l0aCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYW5kIHdpdGggaHVnZSBzdXBwb3J0ZWQgZm9yCi15b3VyIHN5c3RlbSAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCksIHdoaWNoIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYykuCi1UaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6CiYjNDM7Y29uZmlndXJlZCB3aXRoIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhbmQgd2l0aCBodWdlIHBhZ2VzCiYjNDM7c3VwcG9ydGVkIGZvciB5b3VyIHN5c3RlbS4gVGhlIG1vdW50IG9wdGlvbnMgZm9yIHRoaXMgYXJlOgogCiA9PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBodWdlPW5ldmVyICAgICAgIERvIG5vdCBhbGxvY2F0ZSBodWdlIHBhZ2VzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGZhN2I5MzVmOTQ3Y2EwLi4yYTBhN2RkZjhiZWU3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC02MTUsOSAmIzQzOzYxNSw2IEBAIHVuc2lnbmVkIGxvbmcgaW9fcmVtYXBfcGZuX3JhbmdlX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplKTsKIC8qIFdlIGRvbiYjMzk7dCBoYXZlIGhhcmR3YXJlIGRpcnR5L2FjY2Vzc2VkIGJpdHMsIGdlbmVyaWNfcG1kcF9lc3RhYmxpc2ggaXMgZmluZS4qLwogI2RlZmluZSBwbWRwX2VzdGFibGlzaCBnZW5lcmljX3BtZHBfZXN0YWJsaXNoCiAKLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZQotZXh0ZXJuIGludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCk7Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZCkKIHsKIAlyZXR1cm4gISEocG1kX3ZhbChwbWQpICZhbXA7IF9QQUdFX0hVR0UpOwpAQCAtNzQzLDYgJiM0Mzs3NDAsOSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAKJiM0MzsjZGVmaW5lIGFyY2hfaGFzX3BtZF9sZWF2ZXMgYXJjaF9oYXNfcG1kX2xlYXZlcwomIzQzO2V4dGVybiBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTsKJiM0MzsKICNpZmRlZiBfUEFHRV9IVUdFCiAjZGVmaW5lIHBtZF9sZWFmKHBtZCkJKChwbWRfdmFsKHBtZCkgJmFtcDsgX1BBR0VfSFVHRSkgIT0gMCkKICNkZWZpbmUgcHVkX2xlYWYocHVkKQkoKHB1ZF92YWwocHVkKSAmYW1wOyBfUEFHRV9IVUdFKSAhPSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggMjRmZTg1ZmExNjlkMTYuLjkzMzllYmIwODE1ZjIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKQEAgLTQzMiw5ICYjNDM7NDMyLDcgQEAgdm9pZCBhZGRfd2lyZWRfZW50cnkodW5zaWduZWQgbG9uZyBlbnRyeWxvMCwgdW5zaWduZWQgbG9uZyBlbnRyeWxvMSwKICNlbmRpZgogfQogCi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCi0KLWludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCkKJiM0MztpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKQogewogCXN0YXRpYyB1bnNpZ25lZCBpbnQgbWFzayA9IC0xOwogCkBAIC00NTAsOSAmIzQzOzQ0OCw3IEBAIGludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCkKIAl9CiAJcmV0dXJuIG1hc2sgPT0gUE1fSFVHRV9NQVNLOwogfQotRVhQT1JUX1NZTUJPTChoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UpOwotCi0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICAqLwomIzQzO0VYUE9SVF9TWU1CT0woYXJjaF9oYXNfcG1kX2xlYXZlcyk7CiAKIC8qCiAgKiBVc2VkIGZvciBsb2FkaW5nIFRMQiBlbnRyaWVzIGJlZm9yZSB0cmFwX2luaXQoKSBoYXMgc3RhcnRlZCwgd2hlbiB3ZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaAppbmRleCA4ZTViZDk5MDJiZWQ0ZS4uZDUzMmUzZjBkZmMzYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC00ay5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC00ay5oCkBAIC0xNjUsOSAmIzQzOzE2NSw5IEBAIGV4dGVybiB2b2lkIGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV9kZXBvc2l0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwKIGV4dGVybiBwZ3RhYmxlX3QgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCk7CiBleHRlcm4gcG1kX3QgaGFzaF9fcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApOwotZXh0ZXJuIGludCBoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCk7CiAjZW5kaWYKIAomIzQzO2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTsKICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0JPT0szU182NF9IQVNIXzRLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaAppbmRleCA3ZGViM2E2Njg5MGJjZC4uZDUyM2M4MGY0NGY3MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmgKQEAgLTI3OCw5ICYjNDM7Mjc4LDkgQEAgZXh0ZXJuIHZvaWQgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX2RlcG9zaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLAogZXh0ZXJuIHBndGFibGVfdCBoYXNoX19wZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwKTsKIGV4dGVybiBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcCk7Ci1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTsKICNlbmRpZiAvKiAgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAKJiM0MztleHRlcm4gaW50IGhhc2hfX2FyY2hfaGFzX3BtZF9sZWF2ZXModm9pZCk7CiAjZW5kaWYJLyogX19BU1NFTUJMRVJfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0JPT0szU182NF9IQVNIXzY0S19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oCmluZGV4IGY0ZGI3ZDdmYmQ1YzYyLi40MTE2NmQ0NGZhNzU2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKQEAgLTExMjEsMTUgJiM0MzsxMTIxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogewogfQogCi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTsKLXN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKQotewotCWlmIChyYWRpeF9lbmFibGVkKCkpCi0JCXJldHVybiByYWRpeF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCk7Ci0JcmV0dXJuIGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSgpOwotfQotI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlCi0KIHN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2Uodm9pZCkKIHsKIAlpZiAocmFkaXhfZW5hYmxlZCgpKQpAQCAtMTQ0MSw2ICYjNDM7MTQzMiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9uZWVkc19wZ3RhYmxlX2RlcG9zaXQodm9pZCkKIAogI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwogCiYjNDM7ZXh0ZXJuIGludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaGFzX3BtZF9sZWF2ZXModm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChyYWRpeF9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gcmFkaXhfX2FyY2hfaGFzX3BtZF9sZWF2ZXMoKTsKJiM0MzsJcmV0dXJuIGhhc2hfX2FyY2hfaGFzX3BtZF9sZWF2ZXMoKTsKJiM0Mzt9CiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXMKJiM0MzsKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9NT0RJRllfUFJPVF9UUkFOU0FDVElPTgogcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiB2b2lkIHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oCmluZGV4IGRhOTU0ZTc3OTc0NDFmLi5lOGI3NDUyODk1M2ZkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaApAQCAtMjk4LDIyICYjNDM7Mjk4LDIyIEBAIGV4dGVybiBwbWRfdCByYWRpeF9fcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiBwdWRfdCByYWRpeF9fcHVkcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwKTsKIAotc3RhdGljIGlubGluZSBpbnQgcmFkaXhfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKHZvaWQpCiB7Ci0JLyogRm9yIHJhZGl4IDJNIGF0IFBNRCBsZXZlbCBtZWFucyB0aHAgKi8KLQlpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMk1dLnNoaWZ0ID09IFBNRF9TSElGVCkKJiM0MzsJLyogRm9yIHJhZGl4IDFHIGF0IFBVRCBsZXZlbCBtZWFucyBwdWQgaHVnZXBhZ2Ugc3VwcG9ydCAqLwomIzQzOwlpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMUddLnNoaWZ0ID09IFBVRF9TSElGVCkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiYjNDM7I2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKHZvaWQpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgcmFkaXhfX2FyY2hfaGFzX3BtZF9sZWF2ZXModm9pZCkKIHsKLQkvKiBGb3IgcmFkaXggMUcgYXQgUFVEIGxldmVsIG1lYW5zIHB1ZCBodWdlcGFnZSBzdXBwb3J0ICovCi0JaWYgKG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzFHXS5zaGlmdCA9PSBQVURfU0hJRlQpCiYjNDM7CS8qIEZvciByYWRpeCAyTSBhdCBQTUQgbGV2ZWwgbWVhbnMgdGhwICovCiYjNDM7CWlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8yTV0uc2hpZnQgPT0gUE1EX1NISUZUKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCiBzdHJ1Y3Qgdm1lbV9hbHRtYXA7CiBzdHJ1Y3QgZGV2X3BhZ2VtYXA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMKaW5kZXggZDliNWI3NTFkN2I3NWIuLmE2N2JjMTcyMzQwNGMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jCkBAIC0zOTEsNyAmIzQzOzM5MSw5IEBAIHBtZF90IGhhc2hfX3BtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXJldHVybiBvbGRfcG1kOwogfQogCi1pbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpCiYjNDM7I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwomIzQzOwomIzQzO2ludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpCiB7CiAKIAlpZiAoIW1tdV9oYXNfZmVhdHVyZShNTVVfRlRSXzE2TV9QQUdFKSkKQEAgLTQyMCw5ICYjNDM7NDIyLDcgQEAgaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKQogCiAJcmV0dXJuIDE7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UpOwotCi0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyk7CiAKICNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZTg4MjY2M2E1OGU3NzYuLjI0ZWU5MGM3ZTliZjZiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE4MjUsMTMgJiM0MzsxODI1LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZCkKIHsKIAlyZXR1cm4gcG1kX2xlYWYocG1kKTsKIH0KJiM0MzsjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAKLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZQotc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpCiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXMKJiM0MztzdGF0aWMgaW5saW5lIGludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpCiB7CiAJcmV0dXJuIGNwdV9oYXNfZWRhdDEoKSA/IDEgOiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwogCiAjaWZkZWYgQ09ORklHX1BBR0VfVEFCTEVfQ0hFQ0sKIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDhlMDAxOGZhZGQxNGU2Li4zYzZhNjQxZTZjMjExZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzA2LDEyICYjNDM7MzA2LDYgQEAgc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKQogfQogI2VuZGlmCiAKLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZQotc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpCi17Ci0JcmV0dXJuIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QU0UpOwotfQotCiAjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUAogc3RhdGljIGlubGluZSBib29sIHBtZF9zcGVjaWFsKHBtZF90IHBtZCkKIHsKQEAgLTMzNyw2ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21rc3BlY2lhbChwdWRfdCBwdWQpCiAjZW5kaWYJLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUCAqLwogI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwogCiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXMKJiM0MztzdGF0aWMgaW5saW5lIGludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BTRSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc2V0X2ZsYWdzKHB0ZV90IHB0ZSwgcHRldmFsX3Qgc2V0KQogewogCXB0ZXZhbF90IHYgPSBuYXRpdmVfcHRlX3ZhbChwdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaCBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgKaW5kZXggODFlNGFmNDllMzljMTAuLjM1NzQ0ZmY2NTkyYWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgKQEAgLTEyMyw3ICYjNDM7MTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKQogewogCWlmIChhbGlnbiA9PSBQVURfU0laRSAmYW1wOyZhbXA7IElTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpKQogCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoYWxpZ24gPT0gUE1EX1NJWkUgJmFtcDsmYW1wOyBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkKJiM0MzsJaWYgKGFsaWduID09IFBNRF9TSVpFICZhbXA7JmFtcDsgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlyZXR1cm4gdHJ1ZTsKIAlpZiAoYWxpZ24gPT0gUEFHRV9TSVpFKQogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMgYi9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jCmluZGV4IDhmYTljMTZhYmE3ZWEwLi40NTdlYjU0ZTdhYjZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jCkBAIC05NCw3ICYjNDM7OTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyAqbmRfcGZuX3N1cHBvcnRlZF9hbGlnbm1lbnRzKHVuc2lnbmVkIGxvbmcgKmFsaWdubWVudHMpCiAKIAlhbGlnbm1lbnRzWzBdID0gUEFHRV9TSVpFOwogCi0JaWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7CiAJCWFsaWdubWVudHNbMV0gPSBIUEFHRV9QTURfU0laRTsKIAkJaWYgKGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2UoKSkKIAkJCWFsaWdubWVudHNbMl0gPSBIUEFHRV9QVURfU0laRTsKQEAgLTEwOSw3ICYjNDM7MTEwLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgKm5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyh1bnNpZ25lZCBsb25nICphbGlnbm1lbnRzKQogc3RhdGljIHVuc2lnbmVkIGxvbmcgbmRfcGZuX2RlZmF1bHRfYWxpZ25tZW50KHZvaWQpCiB7CiAKLQlpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlyZXR1cm4gSFBBR0VfUE1EX1NJWkU7CiAJcmV0dXJuIFBBR0VfU0laRTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKaW5kZXggYzc0NWY3YWQyMjk4N2YuLjUyNWFjZWEyZWI1OWNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaApAQCAtNDcsNyAmIzQzOzQ3LDYgQEAgdm1fZmF1bHRfdCB2bWZfaW5zZXJ0X2ZvbGlvX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCQlib29sIHdyaXRlKTsKIAogZW51bSB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFnIHsKLQlUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRCwKIAlUUkFOU1BBUkVOVF9IVUdFUEFHRV9GTEFHLAogCVRSQU5TUEFSRU5UX0hVR0VQQUdFX1JFUV9NQURWX0ZMQUcsCiAJVFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0RJUkVDVF9GTEFHLApAQCAtMzgzLDEyICYjNDM7MzgyLDYgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJcmV0dXJuIG1tX2ZsYWdzX3Rlc3QoTU1GX0RJU0FCTEVfVEhQX0VYQ0VQVF9BRFZJU0VELCB2bWEtJmd0O3ZtX21tKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHRocF9kaXNhYmxlZF9ieV9odyh2b2lkKQotewotCS8qIElmIHRoZSBoYXJkd2FyZS9maXJtd2FyZSBtYXJrZWQgaHVnZXBhZ2Ugc3VwcG9ydCBkaXNhYmxlZC4gKi8KLQlyZXR1cm4gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgJmFtcDsgKDEgJmx0OyZsdDsgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVU5TVVBQT1JURUQpOwotfQotCiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAppbmRleCA4YzA5M2MxMTllNWE4Mi4uZDU3MWQxNjFhODRiM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21tX3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvanVtcF9sYWJlbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaCZndDsKIApAQCAtMjMxMyw2ICYjNDM7MjMxNCwyMSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBndGFibGVfbGV2ZWxfdG9fc3RyKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKIAl9CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX01NVQomIzQzO0RFQ0xBUkVfU1RBVElDX0tFWV9UUlVFKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3RhdGljX2JyYW5jaF9saWtlbHkoJmFtcDtfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTsKJiM0Mzt9CiYjNDM7dm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqLwogCiAjaWYgIWRlZmluZWQoTUFYX1BPU1NJQkxFX1BIWVNNRU1fQklUUykgJmFtcDsmYW1wOyAhZGVmaW5lZChDT05GSUdfNjRCSVQpCkBAIC0yMzI4LDggJiM0MzsyMzQ0LDggQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwZ3RhYmxlX2xldmVsX3RvX3N0cihlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAjZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIGhhc190cmFuc3BhcmVudF9odWdlcGFnZQotI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBJU19CVUlMVElOKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkKJiM0MzsjaWZuZGVmIGFyY2hfaGFzX3BtZF9sZWF2ZXMKJiM0MzsjZGVmaW5lIGFyY2hfaGFzX3BtZF9sZWF2ZXMoKSBJU19CVUlMVElOKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UpCiAjZW5kaWYKIAogI2lmbmRlZiBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlCmRpZmYgLS1naXQgYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMgYi9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMKaW5kZXggMjg3NWZkMjJkN2JiMDIuLjI1MDM4Yjc0YzdiYzY3IDEwMDY0NAotLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jCkBAIC0xNzcsNyAmIzQzOzE3Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IGlkeCkKIAl1bnNpZ25lZCBsb25nIHZhbCA9IGlkeCwgKnB0ciA9ICZhbXA7dmFsOwogCXBtZF90IHBtZDsKIAotCWlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCiYjNDM7CWlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlyZXR1cm47CiAKIAlwcl9kZWJ1ZygmIzM0O1ZhbGlkYXRpbmcgUE1EIGJhc2ljICglcEd2KVxuJiMzNDssIHB0cik7CkBAIC0yMjIsNyAmIzQzOzIyMiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfYWR2YW5jZWRfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwbWRfdCBwbWQ7CiAJdW5zaWduZWQgbG9uZyB2YWRkciA9IGFyZ3MtJmd0O3ZhZGRyOwogCi0JaWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpCiAJCXJldHVybjsKIAogCXBhZ2UgPSAoYXJncy0mZ3Q7cG1kX3BmbiAhPSBVTE9OR19NQVgpID8gcGZuX3RvX3BhZ2UoYXJncy0mZ3Q7cG1kX3BmbikgOiBOVUxMOwpAQCAtMjgzLDcgJiM0MzsyODMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIHsKIAlwbWRfdCBwbWQ7CiAKLQlpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKQomIzQzOwlpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkKIAkJcmV0dXJuOwogCiAJcHJfZGVidWcoJiMzNDtWYWxpZGF0aW5nIFBNRCBsZWFmXG4mIzM0Oyk7CkBAIC02ODgsNyAmIzQzOzY4OCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1BURV9QUk9UTk9ORSkpCiAJCXJldHVybjsKIAotCWlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCiYjNDM7CWlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlyZXR1cm47CiAKIAlwcl9kZWJ1ZygmIzM0O1ZhbGlkYXRpbmcgUE1EIHByb3Rub25lXG4mIzM0Oyk7CkBAIC03MzcsNyAmIzQzOzczNyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKQogCWlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpCiAJCXJldHVybjsKIAotCWlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCiYjNDM7CWlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlyZXR1cm47CiAKIAlwcl9kZWJ1ZygmIzM0O1ZhbGlkYXRpbmcgUE1EIHNvZnQgZGlydHlcbiYjMzQ7KTsKQEAgLTc1NCw3ICYjNDM7NzU0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAkgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpCiAJCXJldHVybjsKIAogCXByX2RlYnVnKCYjMzQ7VmFsaWRhdGluZyBQTUQgc3dhcCBzb2Z0IGRpcnR5XG4mIzM0Oyk7CkBAIC04MjUsNyAmIzQzOzgyNSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlzd3BfZW50cnlfdCBhcmNoX2VudHJ5OwogCXBtZF90IHBtZDEsIHBtZDI7CiAKLQlpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKQomIzQzOwlpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkKIAkJcmV0dXJuOwogCiAJcHJfZGVidWcoJiMzNDtWYWxpZGF0aW5nIFBNRCBzd2FwXG4mIzM0Oyk7CkBAIC05MDYsNyAmIzQzOzkwNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpCiB7CiAJcG1kX3QgcG1kOwogCi0JaWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpCiAJCXJldHVybjsKIAogCXByX2RlYnVnKCYjMzQ7VmFsaWRhdGluZyBQTUQgYmFzZWQgVEhQXG4mIzM0Oyk7CkBAIC05OTcsNyAmIzQzOzk5Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBkZXN0cm95X2FyZ3Moc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICZhbXA7JmFtcDsKLQkgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpICZhbXA7JmFtcDsKIAkgICAgYXJncy0mZ3Q7cG1kX3BmbiAhPSBVTE9OR19NQVgpIHsKIAkJZGVidWdfdm1fcGd0YWJsZV9mcmVlX2h1Z2VfcGFnZShhcmdzLCBhcmdzLSZndDtwbWRfcGZuLCBIUEFHRV9QTURfT1JERVIpOwogCQlhcmdzLSZndDtwbWRfcGZuID0gVUxPTkdfTUFYOwpAQCAtMTI0OSw3ICYjNDM7MTI0OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKQogCX0KIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJmFtcDsmYW1wOwotCSAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkgewomIzQzOwkgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7CiAJCXBhZ2UgPSBkZWJ1Z192bV9wZ3RhYmxlX2FsbG9jX2h1Z2VfcGFnZShhcmdzLCBIUEFHRV9QTURfT1JERVIpOwogCQlpZiAocGFnZSkgewogCQkJYXJncy0mZ3Q7cG1kX3BmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggMDRlOGE2YjU1MzQzNWYuLjM4NWEzMDVlN2FmNjUxIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTEyOSw2ICYjNDM7MTI5LDE1IEBAIHVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJZWxzZQogCQlzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfRklMRV9ERUZBVUxUOwogCiYjNDM7CWlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMsIGFzc3VtZSBmb3IKJiM0MzsJCSAqIG5vdyB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQgUFVEIGxlYXZlcyBhbmQgZGlzYWJsZQomIzQzOwkJICogYm90aCBmb2xpbyBvcmRlcnMuCiYjNDM7CQkgKi8KJiM0MzsJCXN1cHBvcnRlZF9vcmRlcnMgJmFtcDs9IH4oQklUKFBNRF9PUkRFUikgfCBCSVQoUFVEX09SREVSKSk7CiYjNDM7CX0KJiM0MzsKIAlvcmRlcnMgJmFtcDs9IHN1cHBvcnRlZF9vcmRlcnM7CiAJaWYgKCFvcmRlcnMpCiAJCXJldHVybiAwOwpAQCAtMTM2LDcgJiM0MzsxNDUsNyBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWlmICghdm1hLSZndDt2bV9tbSkJCS8qIHZkc28gKi8KIAkJcmV0dXJuIDA7CiAKLQlpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBmb3JjZWRfY29sbGFwc2UpKQomIzQzOwlpZiAodm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBmb3JjZWRfY29sbGFwc2UpKQogCQlyZXR1cm4gMDsKIAogCS8qIGtodWdlcGFnZWQgZG9lc24mIzM5O3QgY29sbGFwc2UgREFYIHZtYSwgYnV0IHBhZ2UgZmF1bHQgaXMgZmluZS4gKi8KQEAgLTg3NCw3ICYjNDM7ODgzLDcgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqKmh1Z2VwYWdlX2tvYmopCiAJICogZGlzYWJsZSBhbGwgb3RoZXIgc2l6ZXMuIHBvd2VycGMmIzM5O3MgUE1EX09SREVSIGlzbiYjMzk7dCBhIGNvbXBpbGUtdGltZQogCSAqIGNvbnN0YW50IHNvIHdlIGhhdmUgdG8gZG8gdGhpcyBoZXJlLgogCSAqLwotCWlmICghYW5vbl9vcmRlcnNfY29uZmlndXJlZCkKJiM0MzsJaWYgKCFhbm9uX29yZGVyc19jb25maWd1cmVkICZhbXA7JmFtcDsgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlodWdlX2Fub25fb3JkZXJzX2luaGVyaXQgPSBCSVQoUE1EX09SREVSKTsKIAogCSpodWdlcGFnZV9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgmIzM0O3RyYW5zcGFyZW50X2h1Z2VwYWdlJiMzNDssIG1tX2tvYmopOwpAQCAtODk2LDYgJiM0Mzs5MDUsMTUgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqKmh1Z2VwYWdlX2tvYmopCiAJfQogCiAJb3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTiB8IFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVDsKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgUE1EIGxlYXZlcywgYXNzdW1lIGZvcgomIzQzOwkJICogbm93IHRoYXQgaXQgZG9lcyBub3Qgc3VwcG9ydCBQVUQgbGVhdmVzIGFuZCBkaXNhYmxlCiYjNDM7CQkgKiBib3RoIGZvbGlvIG9yZGVycy4KJiM0MzsJCSAqLwomIzQzOwkJb3JkZXJzICZhbXA7PSB+KEJJVChQTURfT1JERVIpIHwgQklUKFBVRF9PUkRFUikpOwomIzQzOwl9CiYjNDM7CiAJb3JkZXIgPSBoaWdoZXN0X29yZGVyKG9yZGVycyk7CiAJd2hpbGUgKG9yZGVycykgewogCQl0aHBzaXplID0gdGhwc2l6ZV9jcmVhdGUob3JkZXIsICpodWdlcGFnZV9rb2JqKTsKQEAgLTEwMTAsMTEgJiM0MzsxMDI4LDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdCh2b2lkKQogCWludCBlcnI7CiAJc3RydWN0IGtvYmplY3QgKmh1Z2VwYWdlX2tvYmo7CiAKLQlpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7Ci0JCXRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzID0gMSAmbHQ7Jmx0OyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRDsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJLyoKIAkgKiBodWdlcGFnZXMgY2FuJiMzOTt0IGJlIGFsbG9jYXRlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yCiAJICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDU2YjI0NDU1MmYxMzk0Li5mMzlkOTM4MzQ5NGU2OSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTE2NCw2ICYjNDM7MTY0LDE1IEBAIF9fc2V0dXAoJiMzNDtub3JhbmRtYXBzJiMzNDssIGRpc2FibGVfcmFuZG1hcHMpOwogCiB1bnNpZ25lZCBsb25nIGhpZ2hlc3RfbWVtbWFwX3BmbiBfX3JlYWRfbW9zdGx5OwogCiYjNDM7REVGSU5FX1NUQVRJQ19LRVlfVFJVRShfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTsKJiM0MztFWFBPUlRfU1lNQk9MKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpOwomIzQzOwomIzQzO3ZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghYXJjaF9oYXNfcG1kX2xlYXZlcygpKQomIzQzOwkJc3RhdGljX2JyYW5jaF9kaXNhYmxlKCZhbXA7X19hcmNoX2hhc19wbWRfbGVhdmVzX2tleSk7CiYjNDM7fQomIzQzOwogdm9pZCBtbV90cmFjZV9yc3Nfc3RhdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlcikKIHsKIAl0cmFjZV9yc3Nfc3RhdChtbSwgbWVtYmVyKTsKQEAgLTU1NjcsNyAmIzQzOzU1NzYsNyBAQCB2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYQogCSAqIFBNRCBtYXBwaW5ncyBpZiBUSFBzIGFyZSBkaXNhYmxlZC4gQXMgd2UgYWxyZWFkeSBoYXZlIGEgVEhQLAogCSAqIGJlaGF2ZSBhcyBpZiB3ZSBhcmUgZm9yY2luZyBhIGNvbGxhcHNlLgogCSAqLwotCWlmICh0aHBfZGlzYWJsZWRfYnlfaHcoKSB8fCB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1hLSZndDt2bV9mbGFncywKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkgfHwgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtYS0mZ3Q7dm1fZmxhZ3MsCiAJCQkJCQkgICAgIC8qIGZvcmNlZF9jb2xsYXBzZT0qLyB0cnVlKSkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDcxMWY4MjFmN2IzYzcyLi5kY2MwNzJkYjQ1NTg3MiAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMjY5OSw2ICYjNDM7MjY5OSw3IEBAIHZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKQogewogCWFyY2hfbW1fcHJlaW5pdCgpOwogCWluaXRfemVyb19wYWdlX3BmbigpOwomIzQzOwlwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KCk7CiAKIAkvKiBJbml0aWFsaXphdGlvbnMgcmVseWluZyBvbiBTTVAgc2V0dXAgKi8KIAlCVUlMRF9CVUdfT04oTUFYX1pPTkVMSVNUUyAmZ3Q7IDIpOwpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggNTA3MTE3NzA1OWE5NjQuLjAwOGRmNTU4YWYyMzdlIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTY4OSw3ICYjNDM7Njg5LDcgQEAgc3RhdGljIGludCBzaG1lbV9wYXJzZV9odWdlKGNvbnN0IGNoYXIgKnN0cikKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSAmYW1wOyZhbXA7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICZhbXA7JmFtcDsKIAkgICAgaHVnZSAhPSBTSE1FTV9IVUdFX05FVkVSICZhbXA7JmFtcDsgaHVnZSAhPSBTSE1FTV9IVUdFX0RFTlkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMjg3LDYgJiM0MzsxMjg3LDcgQEAgc3RhdGljIGludCBzaG1lbV9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYXRoLSZndDtkZW50cnktJmd0O2RfaW5vZGU7CiAJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyczsKIAogCS8qIEZhc3QtcGF0aCBoaW50OyByZWNhbGMgdW5kZXIgaW5mby0mZ3Q7bG9jayBjb3JyZWN0cyBhbnkgc3RhbGUgcmVhZC4gKi8KIAlpZiAoZGF0YV9yYWNlKGluZm8tJmd0O2FsbG9jZWQgLSBpbmZvLSZndDtzd2FwcGVkICE9IGlub2RlLSZndDtpX21hcHBpbmctJmd0O25ycGFnZXMpKQpAQCAtMTMwMyw4ICYjNDM7MTMwNCwxMSBAQCBzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQlTVEFUWF9BVFRSX05PRFVNUCk7CiAJZ2VuZXJpY19maWxsYXR0cihpZG1hcCwgcmVxdWVzdF9tYXNrLCBpbm9kZSwgc3RhdCk7CiAKLQlpZiAoc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChpbm9kZSwgMCwgMCwgZmFsc2UsIE5VTEwsIDApKQotCQlzdGF0LSZndDtibGtzaXplID0gSFBBR0VfUE1EX1NJWkU7CiYjNDM7CW9yZGVycyA9IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoaW5vZGUsIDAsIDAsIGZhbHNlLCBOVUxMLCAwKTsKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpCiYjNDM7CQlvcmRlcnMgJmFtcDs9IH5CSVQoUE1EX09SREVSKTsKJiM0MzsJaWYgKG9yZGVycykKJiM0MzsJCXN0YXQtJmd0O2Jsa3NpemUgPSBQQUdFX1NJWkUgJmx0OyZsdDsgaGlnaGVzdF9vcmRlcihvcmRlcnMpOwogCiAJaWYgKHJlcXVlc3RfbWFzayAmYW1wOyBTVEFUWF9CVElNRSkgewogCQlzdGF0LSZndDtyZXN1bHRfbWFzayB8PSBTVEFUWF9CVElNRTsKQEAgLTE4MjYsMTYgJiM0MzsxODMwLDE5IEBAIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJdW5zaWduZWQgbG9uZyBtYXNrID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7CiAJdW5zaWduZWQgbG9uZyB3aXRoaW5fc2l6ZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfd2l0aGluX3NpemUpOwogCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEgPyB2bWEtJmd0O3ZtX2ZsYWdzIDogMDsKLQl1bnNpZ25lZCBpbnQgZ2xvYmFsX29yZGVyczsKJiM0MzsJdW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnMsIGRpc2FibGVkX29yZGVycyA9IDA7CiAKLQlpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSAmYW1wOyZhbXA7IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpKQomIzQzOwlpZiAodm1hICZhbXA7JmFtcDsgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpCiYjNDM7CQlkaXNhYmxlZF9vcmRlcnMgPSBCSVQoUE1EX09SREVSKTsKJiM0MzsKIAlnbG9iYWxfb3JkZXJzID0gc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChpbm9kZSwgaW5kZXgsIHdyaXRlX2VuZCwKIAkJCQkJCSAgc2htZW1faHVnZV9mb3JjZSwgdm1hLCB2bV9mbGFncyk7CiAJLyogVG1wZnMgaHVnZSBwYWdlcyBhbGxvY2F0aW9uICovCiAJaWYgKCF2bWEgfHwgIXZtYV9pc19hbm9uX3NobWVtKHZtYSkpCi0JCXJldHVybiBnbG9iYWxfb3JkZXJzOwomIzQzOwkJcmV0dXJuIGdsb2JhbF9vcmRlcnMgJmFtcDsgfmRpc2FibGVkX29yZGVyczsKIAogCS8qCiAJICogRm9sbG93aW5nIHRoZSAmIzM5O2RlbnkmIzM5OyBzZW1hbnRpY3Mgb2YgdGhlIHRvcCBsZXZlbCwgZm9yY2UgdGhlIGh1Z2UKQEAgLTE4NDksNyAmIzQzOzE4NTYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSAqIG1lYW5zIG5vbi1QTUQgc2l6ZWQgVEhQIGNhbiBub3Qgb3ZlcnJpZGUgJiMzOTtodWdlJiMzOTsgbW91bnQgb3B0aW9uIG5vdy4KIAkgKi8KIAlpZiAoc2htZW1faHVnZSA9PSBTSE1FTV9IVUdFX0ZPUkNFKQotCQlyZXR1cm4gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQpOwomIzQzOwkJcmV0dXJuIFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19pbmhlcml0KSAmYW1wOyB+ZGlzYWJsZWRfb3JkZXJzOwogCiAJLyogQWxsb3cgbVRIUCB0aGF0IHdpbGwgYmUgZnVsbHkgd2l0aGluIGlfc2l6ZS4gKi8KIAltYXNrIHw9IHNobWVtX2dldF9vcmRlcnNfd2l0aGluX3NpemUoaW5vZGUsIHdpdGhpbl9zaXplX29yZGVycywgaW5kZXgsIDApOwpAQCAtMTg2MCw2ICYjNDM7MTg2Nyw3IEBAIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJaWYgKGdsb2JhbF9vcmRlcnMgJmd0OyAwKQogCQltYXNrIHw9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19pbmhlcml0KTsKIAomIzQzOwltYXNrICZhbXA7PSB+ZGlzYWJsZWRfb3JkZXJzOwogCXJldHVybiBUSFBfT1JERVJTX0FMTF9GSUxFX0RFRkFVTFQgJmFtcDsgbWFzazsKIH0KIApAQCAtNDU4Nyw4ICYjNDM7NDU5NSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fcGFyc2Vfb25lKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pCiAJY2FzZSBPcHRfaHVnZToKIAkJY3R4LSZndDtodWdlID0gcmVzdWx0LnVpbnRfMzI7CiAJCWlmIChjdHgtJmd0O2h1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiAmYW1wOyZhbXA7Ci0JCSAgICAhKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmYW1wOyZhbXA7Ci0JCSAgICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSkKJiM0MzsJCSAgICAhSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQogCQkJZ290byB1bnN1cHBvcnRlZF9wYXJhbWV0ZXI7CiAJCWN0eC0mZ3Q7c2VlbiB8PSBTSE1FTV9TRUVOX0hVR0U7CiAJCWJyZWFrOwpAQCAtNTM4Myw3ICYjNDM7NTM5MCw3IEBAIHZvaWQgX19pbml0IHNobWVtX2luaXQodm9pZCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCi0JaWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpICZhbXA7JmFtcDsgc2htZW1faHVnZSAmZ3Q7IFNITUVNX0hVR0VfREVOWSkKJiM0MzsJaWYgKHNobWVtX2h1Z2UgJmd0OyBTSE1FTV9IVUdFX0RFTlkpCiAJCVNITUVNX1NCKHNobV9tbnQtJmd0O21udF9zYiktJmd0O2h1Z2UgPSBzaG1lbV9odWdlOwogCWVsc2UKIAkJc2htZW1faHVnZSA9IFNITUVNX0hVR0VfTkVWRVI7IC8qIGp1c3QgaW4gY2FzZSBpdCB3YXMgcGF0Y2hlZCAqLwpAQCAtNTM5Miw3ICYjNDM7NTM5OSw3IEBAIHZvaWQgX19pbml0IHNobWVtX2luaXQodm9pZCkKIAkgKiBEZWZhdWx0IHRvIHNldHRpbmcgUE1ELXNpemVkIFRIUCB0byBpbmhlcml0IHRoZSBnbG9iYWwgc2V0dGluZyBhbmQKIAkgKiBkaXNhYmxlIGFsbCBvdGhlciBtdWx0aS1zaXplIFRIUHMuCiAJICovCi0JaWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZCkKJiM0MzsJaWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZCAmYW1wOyZhbXA7IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkKIAkJaHVnZV9zaG1lbV9vcmRlcnNfaW5oZXJpdCA9IEJJVChIUEFHRV9QTURfT1JERVIpOwogI2VuZGlmCiAJcmV0dXJuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRIUCBTdXBwb3J0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgc3VwcG9ydC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHJlbmFtaW5nIGBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKWAgdG8gZWl0aGVyIGBhcmNoX2hhc19wbWRfbGVhdmVzKClgIG9yIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbmFtZSBjaGFuZ2U7IGl0JiMzOTtzIGFsc28gaW1wYWN0aW5nIGhvdyB3ZSBkaXNhYmxlIFRIUCB3aGVuIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRvZXNuJiMzOTt0IHN1cHBvcnQgaXQsIGludHJvZHVjaW5nIGEgc3RhdGljIGtleSBjYWxsZWQgYF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXlgLgoKVGhpcyByaXBwbGVzIHRocm91Z2ggcXVpdGUgYSBmZXcgY3JpdGljYWwgYXJlYXM6IGBzaG1lbS5jYCwgYGh1Z2VfbWVtb3J5LmNgLCBgbWVtb3J5LmNgLCBgbW1faW5pdC5jYCwgYGRlYnVnX3ZtX3BndGFibGUuY2AsIGBwZm5fZGV2cy5jYCwgYGRheC1wcml2YXRlLmhgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGZvciBtaXBzLCBwb3dlcnBjLCBzMzkwLCBhbmQgeDg2LiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYHNobWVtYCwgYGRheGAsIGFuZCBgbnZkaW1tYCBpcyBhIGJpZyBkZWFsOyB0aG9zZSBhcmUgYWxsIGludGltYXRlbHkgbGlua2VkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwZXJmb3JtYW5jZS4KClNvLCB0aGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYCBpcyBub3cgdGhlIGdhdGVrZWVwZXIgZm9yIFRIUCBzdXBwb3J0LCBhbmQgaXQmIzM5O3MgYmVpbmcgdXNlZCB0byBmaWx0ZXIgY2VydGFpbiBvcmRlciBzaXplcywgYXMgc2VlbiBpbiBtb2RpZmljYXRpb25zIHRvIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGFuZCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBFc3NlbnRpYWxseSwgaWYgYCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLCBjZXJ0YWluIG1lbW9yeSBvcmRlciBzaXplcyBhcmUgZXhjbHVkZWQuCgpMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgYSBzdGF0aWMga2V5IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBob3cgd2XigJlyZSBkZWNpZGluZyBhdCBydW50aW1lIHdoZXRoZXIgdG8gZW5hYmxlIGl0LiBJIHNlZSB0aGUgYERFQ0xBUkVfU1RBVElDX0tFWV9UUlVFYCBhbmQgdGhlIGxvZ2ljIHRoYXQgc2VlbXMgdG8gZGlzYWJsZSB0aGUga2V5IGlmIHRoZSBhcmNoaXRlY3R1cmUgZG9lc24mIzM5O3QgaGF2ZSBQTUQgbGVhdmVzIGluIGBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KClgLiBUaGlzIGxvb2tzIGZ1bmN0aW9uYWwgYW5kIHRoZSBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIFFFTVUvR0NFLCBzbyBJIGNhbiB0ZXN0IGl0LgoKQWxyaWdodCwgdGltZSB0byBwcmlvcml0aXplIHNvbWUgZnV6emluZyB0YXJnZXRzLiBCYXNlZCBvbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgZnVuY3Rpb25zIGxpa2UgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBzaG1lbV9nZXRhdHRyYCwgYHNobWVtX3BhcnNlX29uZWAsIGBzaG1lbV9wYXJzZV9odWdlYCwgYW5kIGBkb19zZXRfcG1kYCBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwuIE5vdywgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGU7IEkga25vdyBpdCYjMzk7cyBpbnZva2VkIGR1cmluZyBzaG1lbSBwYWdlIGZhdWx0cyBhbmQgYWxsb2NhdGlvbi4gQW5kIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgdXNlZCBkdXJpbmcgVEhQIGFsbG9jYXRpb24uIExldCYjMzk7cyBzZWUgaG93IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgZGVmaW5lZC4gR29vZC4gTm93LCBsZXTigJlzIGRpZyBhIGJpdCBkZWVwZXIgYW5kIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkIGFuZCB3aGVyZSBpdOKAmXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0yNzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5Ny1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI5ODp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk5LVx0XHRcdFx0XHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMTk9dW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQxLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzQyOlx0cmV0dXJuIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIG9yZGVycyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDMtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA3PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMTMtXG5tbS9odWdlX21lbW9yeS5jOjExNDp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMTUtXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzU3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHZhcmlhYmxlLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGtub2Igd2hlbiB0dW5pbmcgc2hhcmVkIG1lbW9yeSBiZWhhdmlvciwgZXNwZWNpYWxseSBvbiBzeXN0ZW1zIHdpdGggTlVNQSBhcmNoaXRlY3R1cmVzIG9yIHRob3NlIG5lZWRpbmcgdG8gc3F1ZWV6ZSBldmVyeSBsYXN0IGJpdCBvZiBwZXJmb3JtYW5jZSBvdXQgb2YgbGFyZ2UgbWVtb3J5IGFsbG9jYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzZXR0aW5nLiBJIG5lZWQgdG8gZXN0YWJsaXNoIHdoYXQmIzM5O3MgcGVybWlzc2libGUsIGdpdmVuIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCB0aGUgaW50ZW5kZWQgYXBwbGljYXRpb24gcHJvZmlsZS4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXMgdGhpcyBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSB3b3JrbG9hZD8mIzM0OyBBcmUgd2UgdW5kZXItdXRpbGl6aW5nIHBvdGVudGlhbCBodWdlIHBhZ2UgYWxsb2NhdGlvbnMsIG9yIHBlcmhhcHMgYmVpbmcgb3Zlcmx5IGFnZ3Jlc3NpdmUgYW5kIHJpc2tpbmcgZnJhZ21lbnRhdGlvbiBvciBvdGhlciBhZHZlcnNlIHNpZGUgZWZmZWN0cz8gRGVwZW5kaW5nIG9uIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBtYXliZSBJIG5lZWQgdG8gY2hlY2sgdGhlIE9TIGtlcm5lbCBwYXJhbWV0ZXJzLCBhbmQgdGhlIGFwcGxpY2F0aW9uJiMzOTtzIG1lbW9yeSBhbGxvY2F0aW9uIHBhdHRlcm5zLCB0byBtYWtlIGEgZGVjaXNpb24gYWJvdXQgbXkgbmV4dCBzdGVwcy4KCkkgc2hvdWxkIGFsc28gY29uc2lkZXIgd2hldGhlciB0aGUgY3VycmVudCBzZXR0aW5ncyBhcmUgbGVhZGluZyB0byBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4gQXJlIHdlIHNlZWluZyBzaWduaWZpY2FudCBwYWdlIGZhdWx0cywgaW5jcmVhc2VkIG1lbW9yeSBsYXRlbmNpZXMsIG9yIGFueSBvdGhlciBzaWducyB0aGF0IHRoZSBtZW1vcnkgc3Vic3lzdGVtIGlzbiYjMzk7dCBwZXJmb3JtaW5nIG9wdGltYWxseT8gQmFzZWQgb24gdGhpcyBkaWFnbm9zdGljLCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBzZXR0aW5ncyBhcmUgYWRqdXN0ZWQgdG8gYWxsb3cgZm9yIG1heGltdW0gZWZmaWNpZW5jeSwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTI2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEyOC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMjk6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzAtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTMyPWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTExND11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTkwLVx0aWYgKCFpbl9wZiBcdTAwMjZcdTAwMjYgc2htZW1fZmlsZSh2bWEtXHUwMDNldm1fZmlsZSkpXG5tbS9odWdlX21lbW9yeS5jOjE5MTpcdFx0cmV0dXJuIG9yZGVycyBcdTAwMjYgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLVx1MDAzZXZtX2ZpbGUpLFxubW0vaHVnZV9tZW1vcnkuYy0xOTItXHRcdFx0XHRcdFx0ICAgdm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbi0tXG5tbS9zaG1lbS5jPTE4MDk9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3NobWVtLmMtMTgyNS1cbm1tL3NobWVtLmM6MTgyNjp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxubW0vc2htZW0uYy0xODI3LVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYz0yNDIyPXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjUwMy1cdC8qIEZpbmQgaHVnZXBhZ2Ugb3JkZXJzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGFub255bW91cyBzaG1lbSBhbmQgdG1wZnMuICovXG5tbS9zaG1lbS5jOjI1MDQ6XHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpO1xubW0vc2htZW0uYy0yNTA1LVx0aWYgKG9yZGVycyBcdTAwM2UgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzE2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBzaG1lbV9nZXRhdHRyYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHNobWVtX2dldGF0dHJgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgc28gbGV0JiMzOTtzIGdldCByaWdodCBpbnRvIGl0LCB3aGF0JiMzOTtzIGl0cyBpbXBsZW1lbnRhdGlvbiBsb29raW5nIGxpa2U/IEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbiwgcG90ZW50aWFsIHBpdGZhbGxzLCBhbmQgaG93IGl0IGhhbmRsZXMgdmFyaW91cyBlcnJvciBjb25kaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdmVyaWZ5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzaGFyZWQgbWVtb3J5IG1hbmFnZW1lbnQuIEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0PyBQZXJoYXBzIHRoZXJlIGFyZSBhc3BlY3RzIHRoYXQgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGFuZCBJIHdpbGwgd2FudCB0byByZWFkIHRoZSBkb2N1bWVudGF0aW9uLiBJIGNhbiBjcm9zcy1yZWZlcmVuY2UgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHNobWVtIGNvZGViYXNlLiBJIHNob3VsZCBhbHNvIGNoZWNrIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdGhhdCBjYWxscyB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2dldGF0dHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz0xMjgyPUVYUE9SVF9TWU1CT0xfR1BMKHNobWVtX3RydW5jYXRlX3JhbmdlKTtcbm1tL3NobWVtLmMtMTI4My1cbm1tL3NobWVtLmM6MTI4NDpzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5tbS9zaG1lbS5jLTEyODUtXHRcdFx0IGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsXG4tLVxubW0vc2htZW0uYz00MzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zaG9ydF9zeW1saW5rX29wZXJhdGlvbnMgPSB7XG5tbS9zaG1lbS5jOjQzMzA6XHQuZ2V0YXR0clx0PSBzaG1lbV9nZXRhdHRyLFxubW0vc2htZW0uYy00MzMxLVx0LnNldGF0dHJcdD0gc2htZW1fc2V0YXR0cixcbi0tXG5tbS9zaG1lbS5jPTQzMzg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbm1tL3NobWVtLmM6NDMzOTpcdC5nZXRhdHRyXHQ9IHNobWVtX2dldGF0dHIsXG5tbS9zaG1lbS5jLTQzNDAtXHQuc2V0YXR0clx0PSBzaG1lbV9zZXRhdHRyLFxuLS1cbm1tL3NobWVtLmM9NTE3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1faW5vZGVfb3BlcmF0aW9ucyA9IHtcbm1tL3NobWVtLmM6NTE3NTpcdC5nZXRhdHRyXHQ9IHNobWVtX2dldGF0dHIsXG5tbS9zaG1lbS5jLTUxNzYtXHQuc2V0YXR0clx0PSBzaG1lbV9zZXRhdHRyLFxuLS1cbm1tL3NobWVtLmM9NTE4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5tbS9zaG1lbS5jLTUxODYtI2lmZGVmIENPTkZJR19UTVBGU1xubW0vc2htZW0uYzo1MTg3Olx0LmdldGF0dHJcdD0gc2htZW1fZ2V0YXR0cixcbm1tL3NobWVtLmMtNTE4OC1cdC5jcmVhdGVcdFx0PSBzaG1lbV9jcmVhdGUsXG4tLVxubW0vc2htZW0uYz01MjExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7XG5tbS9zaG1lbS5jOjUyMTI6XHQuZ2V0YXR0clx0PSBzaG1lbV9nZXRhdHRyLFxubW0vc2htZW0uYy01MjEzLSNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA0MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGVjb25zdHJ1Y3RpbmcgYGRvX3NldF9wbWRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgbWluZCBpbW1lZGlhdGVseSB3ZW50IHRvIHRoZSBmdW5jdGlvbiBgZG9fc2V0X3BtZGAuIE5vdywgSSBuZWVkIHRvIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhICYjMzQ7c2V0JiMzNDsgb3BlcmF0aW9uLCBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKnByZWNpc2VseSogd2hhdCB0aGUgJiMzNDtQTUQmIzM0OyByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dCDigJMgYSBQYWdlIE1pZGRsZSBEaXJlY3RvcnkgZW50cnksIHJpZ2h0PyBJcyB0aGlzIGFib3V0IHNldHRpbmcgYSBuZXcgbWFwcGluZywgdXBkYXRpbmcgZXhpc3RpbmcgbWV0YWRhdGEsIG9yIGRlYWxpbmcgd2l0aCBzb21lIGZvcm0gb2YgbWVtb3J5IGFsbG9jYXRpb24gb3IgaW52YWxpZGF0aW9uPyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIG51YW5jZXMgb2YgdGhlIGFyY2hpdGVjdHVyZSwgb2YgY291cnNlLiBJcyB0aGVyZSBhbnkgb2J2aW91cyBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBhbmQgZmluZCB3aGF0IGl04oCZcyBjYWxsZWQgd2l0aD8gV2hhdCBraW5kIG9mIGFyZ3VtZW50cyBhcmUgd2UgcGFzc2luZywgYW5kIHdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlY2xhcmF0aW9uLCBpbXBsZW1lbnRhdGlvbiwgYW5kIGFueSByZWxhdGVkIGNvbW1lbnRzIHRvIHF1aWNrbHkgZ2V0IG15IGJlYXJpbmdzIGFuZCBhbnRpY2lwYXRlIGFueSBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBhbHNvIGhhdmUgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSB3YW50IGEgY2xlYXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc2V0X3BtZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9MjAzMT1zdGF0aWMgaW5saW5lIHB0ZV90IG1heWJlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjAzNy1cbmluY2x1ZGUvbGludXgvbW0uaDoyMDM4OnZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIwMzktdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2ZpbGVtYXAuYz0zNzEwPXN0YXRpYyBib29sIGZpbGVtYXBfbWFwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9maWxlbWFwLmMtMzcyMy1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19maWxlX3BhZ2UoZm9saW8sIHN0YXJ0KTtcbm1tL2ZpbGVtYXAuYzozNzI0Olx0XHR2bV9mYXVsdF90IHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XG5tbS9maWxlbWFwLmMtMzcyNS1cdFx0aWYgKCFyZXQpIHtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTgxOT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg0Ny1cdHZtZi5wbWQgPSBwbWRwO1xubW0va2h1Z2VwYWdlZC5jOjE4NDg6XHRpZiAoZG9fc2V0X3BtZChcdTAwMjZ2bWYsIGZvbGlvLCBwYWdlKSlcbm1tL2todWdlcGFnZWQuYy0xODQ5LVx0XHRyZXR1cm4gU0NBTl9GQUlMO1xuLS1cbm1tL21lbW9yeS5jPTU1NTE9c3RhdGljIHZvaWQgZGVwb3NpdF9wcmVhbGxvY19wdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTU2My1cbm1tL21lbW9yeS5jOjU1NjQ6dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS5jLTU1NjUte1xuLS1cbm1tL21lbW9yeS5jLTU2MzktI2Vsc2Vcbm1tL21lbW9yeS5jOjU2NDA6dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS5jLTU2NDEte1xuLS1cbm1tL21lbW9yeS5jPTU3MTM9dm1fZmF1bHRfdCBmaW5pc2hfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTc2My1cdFx0aWYgKCFuZWVkc19mYWxsYmFjayBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pKSB7XG5tbS9tZW1vcnkuYzo1NzY0Olx0XHRcdHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XG5tbS9tZW1vcnkuYy01NzY1LVx0XHRcdGlmIChyZXQgIT0gVk1fRkFVTFRfRkFMTEJBQ0spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEhQIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyByZWxhdGVkIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBkb19zZXRfcG1kYCwgcmVwbGFjaW5nIHRoZSBgdGhwX2Rpc2FibGVkX2J5X2h3KClgIGNoZWNrIHdpdGggYCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBUaGF0JiMzOTtzIGEga2V5IHNoaWZ0IGluIGhvdyBpdCYjMzk7cyBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCB0byBhbGxvdyBQTUQtbGV2ZWwgVEhQLiBJbnRlcmVzdGluZy4KClRoZW4sIGl0IGdvZXMgb24gdG8gbW9kaWZ5IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBhbmQgYHNobWVtX2dldGF0dHJgIHRvIGFsc28gaW5jb3Jwb3JhdGUgdGhpcyBgIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKWAgY2hlY2ssIGVmZmVjdGl2ZWx5IGZpbHRlcmluZyBvdXQgUE1EIG9yZGVycyB1bmRlciB0aGUgc2FtZSBjb25kaXRpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdHJ5aW5nIHRvIGhhcm1vbml6ZSB0aGlzIGNoZWNrIGFjcm9zcyB0aGUgYm9hcmQgZm9yIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgZGVhbCB3aXRoIHRoZSBodWdlIHBhZ2Ugb3JkZXJzLgoKSG9sZCBvbi4uLiBJJiMzOTt2ZSBnb3QgYSB3cmlua2xlLiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIHR5cGljYWxseSBhbiBpbmxpbmUgZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgLiBXaHkgaXMgaXQgc2hvd2luZyB1cCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaW4gdGhlIHBhdGNoPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29udGV4dC4gTGV0JiMzOTtzIGdvIHRvIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgc2VlIHdoYXQgdGhlIHBhdGNoIGlzIGRvaW5nIHRvIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlzY3JlcGFuY3kgdG8gZnVsbHkgZ3Jhc3Agd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHRcdGNvbnN0IGJvb2wgaW5fcGYgPSB0eXBlID09IFRWQV9QQUdFRkFVTFQ7XG4gMTIxOlx0XHRjb25zdCBib29sIGZvcmNlZF9jb2xsYXBzZSA9IHR5cGUgPT0gVFZBX0ZPUkNFRF9DT0xMQVBTRTtcbiAxMjI6XHRcdHVuc2lnbmVkIGxvbmcgc3VwcG9ydGVkX29yZGVycztcbiAxMjM6XHRcbiAxMjQ6XHRcdC8qIENoZWNrIHRoZSBpbnRlcnNlY3Rpb24gb2YgcmVxdWVzdGVkIGFuZCBzdXBwb3J0ZWQgb3JkZXJzLiAqL1xuIDEyNTpcdFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcbiAxMjY6XHRcdFx0c3VwcG9ydGVkX29yZGVycyA9IFRIUF9PUkRFUlNfQUxMX0FOT047XG4gMTI3Olx0XHRlbHNlIGlmICh2bWFfaXNfZGF4KHZtYSkgfHwgdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxuIDEyODpcdFx0XHRzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfU1BFQ0lBTF9EQVg7XG4gMTI5Olx0XHRlbHNlXG4gMTMwOlx0XHRcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9GSUxFX0RFRkFVTFQ7XG4gMTMxOlx0XG4gMTMyOlx0XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkge1xuIDEzMzpcdFx0XHQvKlxuIDEzNDpcdFx0XHQgKiBJZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgUE1EIGxlYXZlcywgYXNzdW1lIGZvclxuIDEzNTpcdFx0XHQgKiBub3cgdGhhdCBpdCBkb2VzIG5vdCBzdXBwb3J0IFBVRCBsZWF2ZXMgYW5kIGRpc2FibGVcbiAxMzY6XHRcdFx0ICogYm90aCBmb2xpbyBvcmRlcnMuXG4gMTM3Olx0XHRcdCAqL1xuIDEzODpcdFx0XHRzdXBwb3J0ZWRfb3JkZXJzIFx1MDAyNj0gfihCSVQoUE1EX09SREVSKSB8IEJJVChQVURfT1JERVIpKTtcbiAxMzk6XHRcdH1cbiAxNDA6XHRcbiAxNDE6XHRcdG9yZGVycyBcdTAwMjY9IHN1cHBvcnRlZF9vcmRlcnM7XG4gMTQyOlx0XHRpZiAoIW9yZGVycylcbiAxNDM6XHRcdFx0cmV0dXJuIDA7XG4gMTQ0Olx0XG4gMTQ1Olx0XHRpZiAoIXZtYS1cdTAwM2V2bV9tbSlcdFx0LyogdmRzbyAqL1xuIDE0NjpcdFx0XHRyZXR1cm4gMDtcbiAxNDc6XHRcbiAxNDg6XHRcdGlmICh2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIGZvcmNlZF9jb2xsYXBzZSkpXG4gMTQ5Olx0XHRcdHJldHVybiAwO1xuIDE1MDpcdFxuIDE1MTpcdFx0Lyoga2h1Z2VwYWdlZCBkb2VzbiYjMzk7dCBjb2xsYXBzZSBEQVggdm1hLCBidXQgcGFnZSBmYXVsdCBpcyBmaW5lLiAqL1xuIDE1MjpcdFx0aWYgKHZtYV9pc19kYXgodm1hKSlcbiAxNTM6XHRcdFx0cmV0dXJuIGluX3BmID8gb3JkZXJzIDogMDtcbiAxNTQ6XHRcbiAxNTU6XHRcdC8qXG4gMTU2Olx0XHQgKiBraHVnZXBhZ2VkIHNwZWNpYWwgVk1BIGFuZCBodWdldGxiIFZNQS5cbiAxNTc6XHRcdCAqIE11c3QgYmUgY2hlY2tlZCBhZnRlciBkYXggc2luY2Ugc29tZSBkYXggbWFwcGluZ3MgbWF5IGhhdmVcbiAxNTg6XHRcdCAqIFZNX01JWEVETUFQIHNldC5cbiAxNTk6XHRcdCAqL1xuIDE2MDpcdFx0aWYgKCFpbl9wZiBcdTAwMjZcdTAwMjYgIXNtYXBzIFx1MDAyNlx1MDAyNiAodm1fZmxhZ3MgXHUwMDI2IFZNX05PX0tIVUdFUEFHRUQpKVxuIDE2MTpcdFx0XHRyZXR1cm4gMDtcbiAxNjI6XHRcbiAxNjM6XHRcdC8qXG4gMTY0Olx0XHQgKiBDaGVjayBhbGlnbm1lbnQgZm9yIGZpbGUgdm1hIGFuZCBzaXplIGZvciBib3RoIGZpbGUgYW5kIGFub24gdm1hIGJ5XG4gMTY1Olx0XHQgKiBmaWx0ZXJpbmcgb3V0IHRoZSB1bnN1aXRhYmxlIG9yZGVycy5cbiAxNjY6XHRcdCAqXG4gMTY3Olx0XHQgKiBTa2lwIHRoZSBjaGVjayBmb3IgcGFnZSBmYXVsdC4gSHVnZSBmYXVsdCBkb2VzIHRoZSBjaGVjayBpbiBmYXVsdFxuIDE2ODpcdFx0ICogaGFuZGxlcnMuXG4gMTY5Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNDcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNobWVtIGFuZCBUSFAgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCB0aGlzIGxvb2tzIGFjaGlldmFibGUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEkgc2VlIGEgZmV3IHBvdGVudGlhbCBjYW5kaWRhdGVzOiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYHNobWVtX2dldGF0dHJgLCBgc2htZW1fcGFyc2Vfb25lYCwgYHNobWVtX3BhcnNlX2h1Z2VgLCBhbmQgYGRvX3NldF9wbWRgLgoKV2FpdCwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGFuZCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljIC0gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLiBOb3csIGBzaG1lbV9nZXRhdHRyYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QsIGJ1dCBpdCYjMzk7cyBhbiBpbm9kZSBvcGVyYXRpb24sIHNvIGl0JiMzOTtzIHByb2JhYmx5IGZpbmUgdG8gdXNlIHRoYXQgb25lLiBCb3RoIGBzaG1lbV9wYXJzZV9vbmVgIGFuZCBgc2htZW1fcGFyc2VfaHVnZWAgYXJlIGFsc28gc3RhdGljLiBBbmQgZmluYWxseSwgYGRvX3NldF9wbWRgIGlzICpub3QqIHN0YXRpYywgc28gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0LgoKUmlnaHQsIG5vdyB0aGF0IEkgaGF2ZSB0aG9zZSBpbiBtaW5kLCBJIG5lZWQgdG8gY2hlY2sgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyByZXF1aXJlZCBmb3IgbXkgc3BlY2lmaWMgbmVlZHMuIEFoLCB5ZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFNvLCBsZXQmIzM5O3Mgbm93IGp1bXAgaW50byBgbW0vc2htZW0uY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBhbmQgbWFrZSBzdXJlIGl0IGJlaGF2ZXMgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTI2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEyOC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMjk6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzAtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTMyPWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTExND11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTkwLVx0aWYgKCFpbl9wZiBcdTAwMjZcdTAwMjYgc2htZW1fZmlsZSh2bWEtXHUwMDNldm1fZmlsZSkpXG5tbS9odWdlX21lbW9yeS5jOjE5MTpcdFx0cmV0dXJuIG9yZGVycyBcdTAwMjYgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLVx1MDAzZXZtX2ZpbGUpLFxubW0vaHVnZV9tZW1vcnkuYy0xOTItXHRcdFx0XHRcdFx0ICAgdm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbi0tXG5tbS9zaG1lbS5jPTE4MDk9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3NobWVtLmMtMTgyNS1cbm1tL3NobWVtLmM6MTgyNjp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxubW0vc2htZW0uYy0xODI3LVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYz0yNDIyPXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjUwMy1cdC8qIEZpbmQgaHVnZXBhZ2Ugb3JkZXJzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGFub255bW91cyBzaG1lbSBhbmQgdG1wZnMuICovXG5tbS9zaG1lbS5jOjI1MDQ6XHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpO1xubW0vc2htZW0uYy0yNTA1LVx0aWYgKG9yZGVycyBcdTAwM2UgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU1MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IE9wdGlvbnMqKgoKQWxyaWdodCwgdGhlIG5lZWQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY2xlYXIuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJwbGF5IHdpdGggdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIHBhcnRpY3VsYXJseSBhcyBpdCByZWxhdGVzIHRvIHNoYXJlZCBtZW1vcnkuIExldCBtZSBzZWUuLi4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciBgQ09ORklHX1NITUVNYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFyZWQgbWVtb3J5IHN1YnN5c3RlbSBpcyBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBpc24mIzM5O3Qgc29tZWhvdyBjbGFzaGluZyB3aXRoIG9yIHByZXZlbnRpbmcgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGZyb20gb3BlcmF0aW5nIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBhbiBpbnRlcmFjdGlvbiB3aXRoIHNoYXJlZCBtZW1vcnkgY29uZmlndXJhdGlvbiB0aGF0IGlzIHJlbGV2YW50LgoKTmV4dCwgSSBzaG91bGQgcXVpY2tseSByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYGRvX3NldF9wbWRgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaG93IHRoZSBQTUQgaXMgYmVpbmcgdXBkYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBodWdlcGFnZXMuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBzcGVjaWZpYyBvcGVyYXRpb25zIGFyZSB0YWtpbmcgcGxhY2UgYXQgdGhlIFBhZ2UgVGFibGUgbGV2ZWwsIGFzIHRoaXMgZnVuY3Rpb24gaG9sZHMgY3JpdGljYWwgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaWYgdGhlcmUgaXMgYSBjb25mbGljdC4gQXJlIHdlIG1hcHBpbmcgaHVnZSBwYWdlcyBkaXJlY3RseSwgb3IgYXJlIHdlIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIHBhZ2Ugc2l6ZXMgaW4gY2VydGFpbiBzY2VuYXJpb3M/IFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiB3aWxsIGlsbHVtaW5hdGUgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgc2V0LCB3aGljaCBpcyBhYnNvbHV0ZWx5IHZpdGFsIHdoZW4gZGVhbGluZyB3aXRoIGh1Z2VwYWdlcywgdG8gc2VlIGhvdyB0aGUgb3ZlcmFsbCBzeXN0ZW0gaW50ZXJhY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19zZXRfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaD0yMDMxPXN0YXRpYyBpbmxpbmUgcHRlX3QgbWF5YmVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yMDM3LVxuaW5jbHVkZS9saW51eC9tbS5oOjIwMzg6dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMjAzOS12b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZmlsZW1hcC5jPTM3MTA9c3RhdGljIGJvb2wgZmlsZW1hcF9tYXBfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2ZpbGVtYXAuYy0zNzIzLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX2ZpbGVfcGFnZShmb2xpbywgc3RhcnQpO1xubW0vZmlsZW1hcC5jOjM3MjQ6XHRcdHZtX2ZhdWx0X3QgcmV0ID0gZG9fc2V0X3BtZCh2bWYsIGZvbGlvLCBwYWdlKTtcbm1tL2ZpbGVtYXAuYy0zNzI1LVx0XHRpZiAoIXJldCkge1xuLS1cbm1tL2todWdlcGFnZWQuYz0xODE5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xODQ3LVx0dm1mLnBtZCA9IHBtZHA7XG5tbS9raHVnZXBhZ2VkLmM6MTg0ODpcdGlmIChkb19zZXRfcG1kKFx1MDAyNnZtZiwgZm9saW8sIHBhZ2UpKVxubW0va2h1Z2VwYWdlZC5jLTE4NDktXHRcdHJldHVybiBTQ0FOX0ZBSUw7XG4tLVxubW0vbWVtb3J5LmM9NTU1MT1zdGF0aWMgdm9pZCBkZXBvc2l0X3ByZWFsbG9jX3B0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01NTYzLVxubW0vbWVtb3J5LmM6NTU2NDp2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LmMtNTU2NS17XG4tLVxubW0vbWVtb3J5LmMtNTYzOS0jZWxzZVxubW0vbWVtb3J5LmM6NTY0MDp2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LmMtNTY0MS17XG4tLVxubW0vbWVtb3J5LmM9NTcxMz12bV9mYXVsdF90IGZpbmlzaF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01NzYzLVx0XHRpZiAoIW5lZWRzX2ZhbGxiYWNrIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykpIHtcbm1tL21lbW9yeS5jOjU3NjQ6XHRcdFx0cmV0ID0gZG9fc2V0X3BtZCh2bWYsIGZvbGlvLCBwYWdlKTtcbm1tL21lbW9yeS5jLTU3NjUtXHRcdFx0aWYgKHJldCAhPSBWTV9GQVVMVF9GQUxMQkFDSylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gUGFnZSBUYWJsZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIHBhZ2UgdGFibGVzIGFyZSBzZXQgdXAuIEkgcmVtZW1iZXIgc2VlaW5nIGBkb19zZXRfcG1kYCBzb21ld2hlcmUgaW4gdGhlIGBtbWAgc3Vic3lzdGVtLi4uIHJpZ2h0LCBpdCYjMzk7cyBpbiBgbW0vbWVtb3J5LmNgLiBOb3csIHdoZXJlIGRvZXMgdGhpcyB3aG9sZSBwcm9jZXNzIGFjdHVhbGx5ICpzdGFydCo/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoZSBsZWFmIG5vZGUgc3VwcG9ydCBpcyBpbml0aWFsaXplZCB0byB1bmRlcnN0YW5kIHRoaXMuIFRoYXQgbWVhbnMgY2hlY2tpbmcgYHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXRgIG5leHQuIEkgd29uZGVyIHdoYXQgdGhhdCBmdW5jdGlvbiBzZXRzIHVwLCBhbmQgd2hhdCBhc3BlY3RzIG9mIHRoZSBQTUQgaXQmIzM5O3Mgc2V0dGluZyB0aGUgZ3JvdW5kIHJ1bGVzIGZvci4uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BndGFibGVfbGVhZl9zdXBwb3J0X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjMxOT1zdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIzMjItfVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjMyMzp2b2lkIF9faW5pdCBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjMyNC0jZWxzZVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjMyNT1zdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIzMjgtfVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjMyOTpzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZCkgeyB9XG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMzMwLSNlbmRpZlxuLS1cbm1tL21lbW9yeS5jPTE2OD1FWFBPUlRfU1lNQk9MKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xubW0vbWVtb3J5LmMtMTY5LVxubW0vbWVtb3J5LmM6MTcwOnZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZClcbm1tL21lbW9yeS5jLTE3MS17XG4tLVxubW0vbW1faW5pdC5jPTI2OTg9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTI3MDEtXHRpbml0X3plcm9fcGFnZV9wZm4oKTtcbm1tL21tX2luaXQuYzoyNzAyOlx0cGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCgpO1xubW0vbW1faW5pdC5jLTI3MDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTMyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNldmVyYWwga2V5IGFyZWFzLiBJIHNlZSBpdCYjMzk7cyBtb2RpZnlpbmcgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBkb19zZXRfcG1kYCwgYW5kIGBzaG1lbV9nZXRhdHRyYC4gVGhvc2UgYXJlIGFsbCByZWxldmFudCBzeW1ib2xzOyBJJiMzOTttIGhhcHB5IHRvIHNlZSB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGFyZ2V0ZWQsIHRoZXkgaW5kaWNhdGUgYSBjbGVhciBmb2N1cy4gV2FpdCBhIHNlY29uZCwgdGhvdWdoLi4uIEkmIzM5O20gbm90aWNpbmcgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIG5vdCBzdGF0aWMuIFRoYXQgbWVhbnMgaXQmIzM5O3MgZXhwb3J0ZWQgb3IgZ2xvYmFsLCBhbmQgY2FuIGJlIGFjY2Vzc2VkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSBzaG91bGQgY29uZmlybSB0aGF0IHRoYXQmIzM5O3MgdGhlIGNhc2UuIFRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk3LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mjk4OnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTktXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTMxOT11bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDEtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozNDI6XHRyZXR1cm4gX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHlwZSwgb3JkZXJzKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0My19XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMDc9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTExMy1cbm1tL2h1Z2VfbWVtb3J5LmM6MTE0OnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTExNS1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODI4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIFNoYXJlZCBNZW1vcnkgKFNITUVNKSBTeXN0ZW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBhbmQgYGRvX3NldF9wbWRgIGFyZSBhbGwgZ2xvYmFsbHkgYWNjZXNzaWJsZSBmdW5jdGlvbnMuIEkgcmVjb2duaXplIHRoZWlyIHNpZ25pZmljYW5jZSwgdGhlc2UgYXJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgdGhlIGFyY2hpdGVjdHVyZSBpcyB1c2luZyBhIG1peCBvZiBnbG9iYWwgYW5kIGxvY2FsaXplZCBmdW5jdGlvbiBjYWxscyBmb3IgbWVtb3J5IGNvbnRyb2wsIHdoaWNoIG1ha2VzIGZvciBhIG1vcmUgY29tcGxleCBwaWN0dXJlLiBBbmQgdGhlbiwgdGhlcmUmIzM5O3MgYHNobWVtX2dldGF0dHJgLCBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IHVzZWQgYXMgYSBjYWxsYmFjay4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcGF0dGVybiB0byB3YXRjaCBvdXQgZm9yIOKAkyBob3cgaXMgdGhlIGNhbGxiYWNrIGludGVyYWN0aW5nIHdpdGggdGhlIHN0YXRpYyBjb250ZXh0IGFuZCB3aGF0JiMzOTtzIHRoZSBsaWZlY3ljbGUgb2YgdGhhdCBzdGF0aWMgc2NvcGU/IFRoaXMgbWVhbnMgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIGlzIGxpa2VseSBhIGRpc3RyaWJ1dGVkIG1peCBvZiBjYWxsYmFja3MgYW5kIGRpcmVjdCBjYWxscy4gTGV0JiMzOTtzIGRlbHZlIGludG8gYHNobWVtX3BhcnNlX29uZWAuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoZXJlIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgY29tZSB0b2dldGhlci4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBwYXJzaW5nIG1lbW9yeSBjb25maWd1cmF0aW9uIGFuZCBob3cgdGhlc2UgZ2xvYmFsIGFuZCBzdGF0aWMgZnVuY3Rpb25zIGludGVyYWN0IGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX3BhcnNlX29uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTQ1MjE9c3RhdGljIGludCBzaG1lbV9wYXJzZV9vcHRfY2FzZWZvbGQoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSxcbi0tXG5tbS9zaG1lbS5jLTQ1MjctXG5tbS9zaG1lbS5jOjQ1Mjg6c3RhdGljIGludCBzaG1lbV9wYXJzZV9vbmUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbm1tL3NobWVtLmMtNDUyOS17XG4tLVxubW0vc2htZW0uYz01MDg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIHNobWVtX2ZzX2NvbnRleHRfb3BzID0ge1xuLS1cbm1tL3NobWVtLmMtNTA4OS1cdC5wYXJzZV9tb25vbGl0aGljXHQ9IHNobWVtX3BhcnNlX21vbm9saXRoaWMsXG5tbS9zaG1lbS5jOjUwOTA6XHQucGFyc2VfcGFyYW1cdFx0PSBzaG1lbV9wYXJzZV9vbmUsXG5tbS9zaG1lbS5jLTUwOTEtXHQucmVjb25maWd1cmVcdFx0PSBzaG1lbV9yZWNvbmZpZ3VyZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MDIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24gaW4gU2hhcmVkIE1lbW9yeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGh1Z2UgcGFnZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gc2hhcmVkIG1lbW9yeS4gVGhlIGNvZGUgaGFzIGEgc3RhdGljIGZ1bmN0aW9uLCBgc2htZW1fcGFyc2Vfb25lYCwgdGhhdCYjMzk7cyByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJwbGF5IGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBhbmQgYWxzbyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGFuZCBgZG9fc2V0X3BtZGAgd2hpY2ggc2VlbSBsaWtlIGtleSBwaWVjZXMgb2YgdGhlIHB1enpsZS4gSSB3b25kZXIsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJiMzOTttIG1pc3NpbmcgdGhhdCBpbmZsdWVuY2UgdGhpcyBiZWhhdmlvcj8KClJpZ2h0LCBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnl0aGluZy4gVGhlIG9idmlvdXMgb25lLCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBpcyBjZW50cmFsIHRvIHRoZSBjb25jZXB0LiAgQW5kIEkmIzM5O2QgYWxzbyBleHBlY3QgYENPTkZJR19TSE1FTWAgdG8gYmUgZW5hYmxlZCwgYXMgc2hhcmVkIG1lbW9yeSBpcyB1c3VhbGx5IGEgc3RhbmRhcmQgZmVhdHVyZS4gTGV0IG1lIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgc3RhdHVzIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIOKAkyB0aGF0JiMzOTtzIHRoZSBwbGFjZSB0byBzdGFydCwgaXQmIzM5O3MgY29yZSB0byB0aGUgZW5hYmxpbmcgb2YgYWxsIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgyOT1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgzMS1cbm1tL0tjb25maWc6ODMyOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODMzLVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NTA9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NTUtXG5tbS9LY29uZmlnOjg1NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODU3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODYyLVxubW0vS2NvbmZpZzo4NjM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NjQtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODcxLVxubW0vS2NvbmZpZzo4NzI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODczLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04Nzk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04ODgtXG5tbS9LY29uZmlnOjg4OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5MC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctODk4LVxubW0vS2NvbmZpZzo4OTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTAwLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTA2LVxubW0vS2NvbmZpZzo5MDc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MDgtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxNC1cbm1tL0tjb25maWc6OTE1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkxNi1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkyND1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkzMy1cbm1tL0tjb25maWc6OTM0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTM1LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NDItXG5tbS9LY29uZmlnOjk0MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NDQtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTAtXG5tbS9LY29uZmlnOjk1MTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk1Mi1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTU4LVxubW0vS2NvbmZpZzo5NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTYwLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ3MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyBhbmQgVFJBTlNQQVJFTlRfSFVHRVBBR0UqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhhdCYjMzk7cyB0aGUgY29uZmlnIGluIHBsYXkuIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYC4gTGV0JiMzOTtzIHJlZnJlc2ggb3VyIG1lbW9yeSBvbiB0aGF0OyBpdCYjMzk7cyB0dWNrZWQgYXdheSBpbiBgbW0vc2htZW0uY2AuIFRoZSBzaWduYXR1cmUgSSBleHBlY3QgdG8gc2VlIGlzOgoKYGBgYwp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAoJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsCgkJCQlib29sIHNobWVtX2h1Z2VfZm9yY2UpCmBgYAoKSGFuZyBvbiBhIHNlY29uZC4uLiBHb2luZyBiYWNrIHRocm91Z2ggdGhlIHBhdGNoZXMsIEkgc2VlIHNvbWV0aGluZyBkaWZmZXJlbnQuIFRoZXJlJiMzOTtzIGFuIGV4dHJhIHBhcmFtZXRlciwgYGxvZmZfdCB3cml0ZV9lbmRgLiBUaGUgcGF0Y2hlZCB2ZXJzaW9uIHJlYWRzOgoKYGBgYwp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAoJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsCgkJCQlsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpCmBgYAoKVGltZSB0byBjb25zdWx0IHRoZSBzb3VyY2UgdHJlZSBhbmQgdmVyaWZ5IHRoZSBjdXJyZW50IHNpZ25hdHVyZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEyNj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMjgtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU0hNRU0pXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTI5OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMwLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEzMj1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpO1xuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzMy0jZWxzZVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEzNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTM1LVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYz0xODA5PWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcbi0tXG5tbS9zaG1lbS5jLTE4MjUtXG5tbS9zaG1lbS5jOjE4MjY6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbm1tL3NobWVtLmMtMTgyNy1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMxNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgbW0vc2htZW0uY2AgTGluZSAxODI2KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBtbS9zaG1lbS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE4MjYuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZXNpZGUsIGFuZCBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaWYgeW91JiMzOTtyZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gaXNzdWVzLiBJJiMzOTttIGd1ZXNzaW5nIHdlIGFyZSBsb29raW5nIGludG8gbWVtb3J5IGxlYWsgaXNzdWVzIGluIHRoZSBzaGFyZWQgbWVtb3J5IGNvbnRleHQuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcHJvYmxlbXMgYXJvdW5kIHJlc291cmNlIGhhbmRsaW5nIG9yIGJvdW5kYXJ5IGNvbmRpdGlvbnMgaW4gcGFydGljdWxhci4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGNhbGxzIHRvIGBrbWFwX2F0b21pY2AsIGBrdW5tYXBfYXRvbWljYCwgYGFsbG9jX3BhZ2VgLCBgZnJlZV9wYWdlYCwgb3IgbWF5YmUgZXZlbiBgdm1fbWFwYC4gTXkgU3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nIGFib3V0IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRoZXJlLCBsaWtlIHNwaW5sb2NrcyBvciBtdXRleGVzLCBzbyBJ4oCZbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayB1c2FnZSBwYXR0ZXJucyBhcm91bmQgbWVtb3J5IGFjY2Vzc2VzLiBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbiBpZiBtdWx0aXBsZSBwcm9jZXNzZXMgYXJlIHNoYXJpbmcgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MjA6XHRcdCAgICBzaG1lbV9odWdlICE9IFNITUVNX0hVR0VfTkVWRVIpXG4xODIxOlx0XHRcdHJldHVybiB0cnVlO1xuMTgyMjpcdFxuMTgyMzpcdFx0cmV0dXJuIGZhbHNlO1xuMTgyNDpcdH1cbjE4MjU6XHRcbjE4MjY6XHR1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuMTgyNzpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4xODI4Olx0XHRcdFx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXG4xODI5Olx0e1xuMTgzMDpcdFx0dW5zaWduZWQgbG9uZyBtYXNrID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XG4xODMxOlx0XHR1bnNpZ25lZCBsb25nIHdpdGhpbl9zaXplX29yZGVycyA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc193aXRoaW5fc2l6ZSk7XG4xODMyOlx0XHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMDtcbjE4MzM6XHRcdHVuc2lnbmVkIGludCBnbG9iYWxfb3JkZXJzLCBkaXNhYmxlZF9vcmRlcnMgPSAwO1xuMTgzNDpcdFxuMTgzNTpcdFx0aWYgKHZtYSBcdTAwMjZcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSlcbjE4MzY6XHRcdFx0cmV0dXJuIDA7XG4xODM3Olx0XG4xODM4Olx0XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbjE4Mzk6XHRcdFx0ZGlzYWJsZWRfb3JkZXJzID0gQklUKFBNRF9PUkRFUik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIHRob3NlIHN5bWJvbHMgbG9vayBwcm9taXNpbmcgZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4KCioqRGVsdmluZyBpbnRvIFNoYXJlZCBNZW1vcnkgYW5kIEh1Z2UgUGFnZXMqKgoKWWVzLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGh1Z2UgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gc2hhcmVkIG1lbW9yeS4gQW5kLCBiYXNlZCBvbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwsIEkmIzM5O2Qgc2F5IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgYW5vdGhlciBzdHJvbmcgY2FuZGlkYXRlLiBJJiMzOTttIGFsc28gdGhpbmtpbmcgYGRvX3NldF9wbWRgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmcgYXNwZWN0LCBtYWtpbmcgaXQgcG90ZW50aWFsbHkgcmVsZXZhbnQuCgpOb3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGJpZ2dlciBwaWN0dXJlIHdpdGhpbiB0aGUgY29kZSwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIGJpdHMgZml0IHRvZ2V0aGVyLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHNobWVtX3BhcnNlX29uZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBgbW0vc2htZW0uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGNvbm5lY3QgdGhlc2Ugc3ltYm9scyBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgZmxvdy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDU4NTpcdFxuNDU4NjpcdFx0XHQvKlxuNDU4NzpcdFx0XHQgKiBUaGUgcmVxdWVzdGVkIGdpZCBtdXN0IGJlIHJlcHJlc2VudGFibGUgaW4gdGhlXG40NTg4Olx0XHRcdCAqIGZpbGVzeXN0ZW0mIzM5O3MgaWRtYXBwaW5nLlxuNDU4OTpcdFx0XHQgKi9cbjQ1OTA6XHRcdFx0aWYgKCFrZ2lkX2hhc19tYXBwaW5nKGZjLVx1MDAzZXVzZXJfbnMsIGtnaWQpKVxuNDU5MTpcdFx0XHRcdGdvdG8gYmFkX3ZhbHVlO1xuNDU5MjpcdFxuNDU5MzpcdFx0XHRjdHgtXHUwMDNlZ2lkID0ga2dpZDtcbjQ1OTQ6XHRcdFx0YnJlYWs7XG40NTk1Olx0XHRjYXNlIE9wdF9odWdlOlxuNDU5NjpcdFx0XHRjdHgtXHUwMDNlaHVnZSA9IHJlc3VsdC51aW50XzMyO1xuNDU5NzpcdFx0XHRpZiAoY3R4LVx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcdTAwMjZcdTAwMjZcbjQ1OTg6XHRcdFx0ICAgICFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG40NTk5Olx0XHRcdFx0Z290byB1bnN1cHBvcnRlZF9wYXJhbWV0ZXI7XG40NjAwOlx0XHRcdGN0eC1cdTAwM2VzZWVuIHw9IFNITUVNX1NFRU5fSFVHRTtcbjQ2MDE6XHRcdFx0YnJlYWs7XG40NjAyOlx0XHRjYXNlIE9wdF9tcG9sOlxuNDYwMzpcdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpIHtcbjQ2MDQ6XHRcdFx0XHRtcG9sX3B1dChjdHgtXHUwMDNlbXBvbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqQW5hbHl6aW5nIHRoZSBTaGFyZWQgTWVtb3J5IFBhcnNpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBzaG1lbV9wYXJzZV9vbmVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MgYWJvdXQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgdXNlLiBJdCYjMzk7cyBvbmx5IGFjY2Vzc2libGUgd2l0aGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdCwgd2hpY2ggaW1wbGllcyBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24sIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgbGlua2luZyBvciB1c2UgaW4gb3RoZXIgbW9kdWxlcy4gTm93LCB0aGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsYXRlZCBwYXJzaW5nIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkgZml0IHdpdGhpbiB0aGUgY29kZSwgYW5kIHRoZWlyIHJlbGF0aW9uIHRvIHRoZSBzdGF0aWMgb25lLiBMZXQgbWUgbW92ZSBvbiB0byBleGFtaW5pbmcgYHNobWVtX3BhcnNlX2h1Z2VgIG5vdywgdG8gc2VlIGhvdyB0aGUgb3RoZXIgcGFyc2luZyBmdW5jdGlvbnMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgc2hhcmVkIG1lbW9yeSBwYXJzaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9wYXJzZV9odWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9NjI2PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtNjY5LVxubW0vc2htZW0uYzo2NzA6c3RhdGljIGludCBzaG1lbV9wYXJzZV9odWdlKGNvbnN0IGNoYXIgKnN0cilcbm1tL3NobWVtLmMtNjcxLXtcbi0tXG5tbS9zaG1lbS5jPTU0NDI9c3RhdGljIHNzaXplX3Qgc2htZW1fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9zaG1lbS5jLTU0NTQtXG5tbS9zaG1lbS5jOjU0NTU6XHRodWdlID0gc2htZW1fcGFyc2VfaHVnZSh0bXApO1xubW0vc2htZW0uYy01NDU2LVx0aWYgKGh1Z2UgPT0gLUVJTlZBTClcbi0tXG5tbS9zaG1lbS5jPTU1Nzg9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdHJhbnNwYXJlbnRfaHVnZXBhZ2Vfc2htZW0oY2hhciAqc3RyKVxuLS1cbm1tL3NobWVtLmMtNTU4MS1cbm1tL3NobWVtLmM6NTU4MjpcdGh1Z2UgPSBzaG1lbV9wYXJzZV9odWdlKHN0cik7XG5tbS9zaG1lbS5jLTU1ODMtXHRpZiAoaHVnZSA9PSAtRUlOVkFMKSB7XG4tLVxubW0vc2htZW0uYz01NTkzPXN0YXRpYyBpbnQgX19pbml0IHNldHVwX3RyYW5zcGFyZW50X2h1Z2VwYWdlX3RtcGZzKGNoYXIgKnN0cilcbi0tXG5tbS9zaG1lbS5jLTU1OTYtXG5tbS9zaG1lbS5jOjU1OTc6XHRodWdlID0gc2htZW1fcGFyc2VfaHVnZShzdHIpO1xubW0vc2htZW0uYy01NTk4LVx0aWYgKGh1Z2UgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNTMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBpbiBTaGFyZWQgTWVtb3J5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHNoYXJlZCBtZW1vcnkgYW5kIHRoZSB0bXBmcyBmaWxlc3lzdGVtLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgYHNobWVtX3BhcnNlX2h1Z2VgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYW4gZW50cnkgcG9pbnQuIFRoYXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBzdGF0aWMuIEkgY2FuIG1ha2UgdXNlIG9mIHRoaW5ncyBsaWtlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBhbmQgYGRvX3NldF9wbWRgLgoKVGhlbiwgd2FpdCBhIG1pbnV0ZSwgSSBqdXN0IHJlYWxpemVkIGBzaG1lbV9nZXRhdHRyYCAqaXMqIHN0YXRpYywgYnV0IGJlY2F1c2UgaXQmIzM5O3MgYW4gaW5vZGUgb3BlcmF0aW9uLCBpdCBjb3VsZCBiZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgYHN0YXRgIHN5c2NhbGwgd2hlbiBvcGVyYXRpbmcgb24gdG1wZnMuIFRoaXMgbWVhbnMgdGhlcmUmIzM5O3MgYSBsaW5rIHRvIHRoZSBrZXJuZWwgdGhhdCBJIGhhdmUgdG8gY29uc2lkZXIuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGlzLiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBJIG1heSBoYXZlIG1pc3NlZD8KClJpZ2h0LCBgc2htZW1fZW5hYmxlZF9zdG9yZWAgaXMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgcmVhY2hhYmxlIGJ5IHdyaXRpbmcgdG8gYC9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL3NobWVtX2VuYWJsZWRgLiBUaGlzIG9uZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCYjMzk7cyBhbm90aGVyIGNsZWFyIGVudHJ5IHBvaW50IGZvciBjb25maWd1cmluZyBUSFAgYmVoYXZpb3IuIEkgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZC4KCkhvd2V2ZXIsIGBzZXR1cF90cmFuc3BhcmVudF9odWdlcGFnZV9zaG1lbWAgYW5kIGBzZXR1cF90cmFuc3BhcmVudF9odWdlcGFnZV90bXBmc2AgYXJlIGJvdGggbWFya2VkIGFzIGBfX2luaXRgIGZ1bmN0aW9ucy4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiwgd2hpY2ggaXMgbGVzcyBpbnRlcmVzdGluZyBmb3Igb25nb2luZyBvcGVyYXRpb25hbCBjb25zaWRlcmF0aW9ucy4gVGhlIHNhbWUgZ29lcyBmb3IgYGh1Z2VwYWdlX2luaXRfc3lzZnNgLCBgaHVnZXBhZ2VfaW5pdGAsIGFuZCBgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdGAsIGFsbCBvZiB3aGljaCBhcmUgYF9faW5pdGAuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIGxvb2sgYXQgYG5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50c2AgaW4gYGRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmNgLiBJdCBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGh1Z2VwYWdlcyBpbiB0aGUgbm9uLXZvbGF0aWxlIG1lbW9yeSBkZXZpY2UgZHJpdmVyLgoKU28gdGhlIG1haW4gcG9pbnRzIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBpbml0LCBhbmQgc3lzZnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jPTg0PXN0YXRpYyBzc2l6ZV90IGFsaWduX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtOTEtXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjkyOnN0YXRpYyB1bnNpZ25lZCBsb25nICpuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHModW5zaWduZWQgbG9uZyAqYWxpZ25tZW50cylcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtOTMte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MTE5PXN0YXRpYyBzc2l6ZV90IGFsaWduX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTEyOC1cdHJjID0gbmRfc2l6ZV9zZWxlY3Rfc3RvcmUoZGV2LCBidWYsIFx1MDAyNm5kX3Bmbi1cdTAwM2VhbGlnbixcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM6MTI5Olx0XHRcdG5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyhhbGlnbnMpKTtcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMTMwLVx0ZGV2X2RiZyhkZXYsIFwmIzM0O3Jlc3VsdDogJXpkIHdyb3RlOiAlcyVzXCYjMzQ7LCByYywgYnVmLFxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MjQzPXN0YXRpYyBzc2l6ZV90IHN1cHBvcnRlZF9hbGlnbm1lbnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMjQ4LVx0cmV0dXJuIG5kX3NpemVfc2VsZWN0X3Nob3coMCxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM6MjQ5Olx0XHRcdG5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyhhbGlnbnMpLCBidWYpO1xuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0yNTAtfVxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9NDE4PXN0YXRpYyBib29sIG5kX3N1cHBvcnRlZF9hbGlnbm1lbnQodW5zaWduZWQgbG9uZyBhbGlnbilcbi0tXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTQyNS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM6NDI2Olx0bmRfcGZuX3N1cHBvcnRlZF9hbGlnbm1lbnRzKHN1cHBvcnRlZCk7XG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTQyNy1cdGZvciAoaSA9IDA7IHN1cHBvcnRlZFtpXTsgaSYjNDM7JiM0MzspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzY0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipDaGVja2luZyBEQVggQWxpZ25tZW50IERldGFpbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgREFYIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggcGVyc2lzdGVudCBtZW1vcnkgYW5kIGFsaWdubWVudC4gSSBzZWUgdGhhdCBgbmRfcGZuX3N1cHBvcnRlZF9hbGlnbm1lbnRzYCBhbmQgYG5kX3Bmbl9kZWZhdWx0X2FsaWdubWVudGAgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZTsgdGhleSYjMzk7cmUgcHJvYmFibHkgY29uZmlndXJhdGlvbiBkZXRhaWxzIHNwZWNpZmljIHRvIHRoaXMgZHJpdmVyIGFuZCBub3Qgc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZ2xvYmFsbHkgYWNjZXNzaWJsZSBvciBtb2RpZmllZCBleHRlcm5hbGx5LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYWxpZ25tZW50IHZhbHVlcyBhcmUgdXNlZCBhbmQgdmFsaWRhdGVkIHdpdGhpbiB0aGUgREFYIGNvbnRleHQuIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIHNlZSBzdWNoIGNoZWNrcz8gQWgsIHllcy4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkYXhfYWxpZ25fdmFsaWRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBpbiBgZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaGAsIHNvIGxldCYjMzk7cyBuYXZpZ2F0ZSB0aGVyZSBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyBpZiBhIHJlcXVlc3RlZCBEQVggYWxpZ25tZW50IGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBhbmQgcmVhc29uYWJsZSB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBEQVggY2FwYWJpbGl0aWVzLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RheF9hbGlnbl92YWxpZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9idXMuYz0xMjM5PXN0YXRpYyBzc2l6ZV90IGFsaWduX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9kYXgvYnVzLmMtMTI1MC1cbmRyaXZlcnMvZGF4L2J1cy5jOjEyNTE6XHRpZiAoIWRheF9hbGlnbl92YWxpZCh2YWwpKVxuZHJpdmVycy9kYXgvYnVzLmMtMTI1Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaD0xMTk9cGh5c19hZGRyX3QgZGF4X3Bnb2ZmX3RvX3BoeXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIHBnb2ZmX3QgcGdvZmYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4tLVxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaC0xMjEtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaDoxMjI6c3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaC0xMjMte1xuLS1cbmRyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgtMTMyLSNlbHNlXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oOjEzMzpzdGF0aWMgaW5saW5lIGJvb2wgZGF4X2FsaWduX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWxpZ24pXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oLTEzNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTc3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXkgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBgZGF4X2FsaWduX3ZhbGlkYCBpcyBkZWZpbmVkIGlubGluZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHMgYXMgYmVpbmcgdGhlIHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3QsIGZvciBub3c6IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBhbmQgYGRvX3NldF9wbWRgLiBUaGV5IGxvb2sgbGlrZSB0aGV5JiMzOTtsbCBiZSB0aGUgZnVuY3Rpb25zIHRvIHdhdGNoLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgZnVuY3Rpb25zIEkmIzM5O20gbWlzc2luZy4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtbS9kZWJ1Z192bV9wZ3RhYmxlLmNgLiBIbW1tLCBhbGwgdGhvc2UgZnVuY3Rpb25zIGxpc3RlZCDigJMgYHBtZF9iYXNpY190ZXN0c2AsIGBwbWRfYWR2YW5jZWRfdGVzdHNgLCBldGMuIOKAkyBhcHBlYXIgdG8gYmUgYF9faW5pdGAgZnVuY3Rpb25zLiBQcm9iYWJseSBub3Qgd2hlcmUgdGhlIGNvcmUgbG9naWMgbGllcywgYWx0aG91Z2ggdGhleSBjb3VsZCBiZSBjcml0aWNhbCBmb3IgZGVidWdnaW5nLgoKQWxyaWdodCwgdGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2VzIGxpa2VseSBjZW50ZXIgYXJvdW5kIHRoZXNlIGZpbGVzOiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9zaG1lbS5jYCwgYW5kIGBtbS9tZW1vcnkuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlc2UgbW9kdWxlcyB0byBzZWUgd2hhdCBjaGFuZ2VzIHdlcmUgbWFkZS4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhvc2UgcHJpbWFyeSBmdW5jdGlvbnMgYWdhaW4uIFllcCwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBpcyBnbG9iYWwuIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGlzIGFsc28gZ2xvYmFsLiBBbmQgYGRvX3NldF9wbWRgIGlzIGdsb2JhbCB0b28uIEdvb2QuCgpOb3csIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIGxvb2sgYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNpbmNlIHRoYXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gZHJpdmVyLiBXaGF0IGVsc2UgaXMgdGhlcmU/IGBDT05GSUdfU0hNRU1gIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgYSBoaWdoIHByaW9yaXR5IHRvIGNoZWNrLiBJIGFsc28gbmVlZCB0byBjaGVjayBgQ09ORklHX0RBWGAgZm9yIGBkcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oYCwgYW5kIGBDT05GSUdfTlZESU1NX1BGTmAgZm9yIGBkcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jYC4gQW5kIGBDT05GSUdfREVCVUdfVk1fUEdUQUJMRWAgZm9yIGBtbS9kZWJ1Z192bV9wZ3RhYmxlLmNgLgoKUmlnaHQsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgIGZvciB0aGUgZGVwZW5kZW5jaWVzLiBJdCBpcyBsaWtlbHkgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODI5PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODMxLVxubW0vS2NvbmZpZzo4MzI6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzMtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1MD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1NS1cbm1tL0tjb25maWc6ODU2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTctXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjItXG5tbS9LY29uZmlnOjg2MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2NC1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzEtXG5tbS9LY29uZmlnOjg3MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg3OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg4OC1cbm1tL0tjb25maWc6ODg5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODkwLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OTgtXG5tbS9LY29uZmlnOjg5OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDAtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDYtXG5tbS9LY29uZmlnOjkwNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkwOC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTE0LVxubW0vS2NvbmZpZzo5MTU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE2LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTI0PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTMzLVxubW0vS2NvbmZpZzo5MzQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzUtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0Mi1cbm1tL0tjb25maWc6OTQzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0NC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1MC1cbm1tL0tjb25maWc6OTUxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTUyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTgtXG5tbS9LY29uZmlnOjk1OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjA0CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDczOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaXRlbSBoZXJlIGlzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkmIzM5O2xsIGRlZmluaXRlbHkgYmUgaW5jbHVkaW5nIHRoYXQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0IGFyZSBpbmRlZWQgYWNjZXNzaWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBub3Qgc3RhdGljIGFuZCB0aGVyZWZvcmUgbm90IHN1YmplY3QgdG8gdW5leHBlY3RlZCBzY29wZSByZXN0cmljdGlvbnMuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGlzIG5vdCBzdGF0aWM7IGl0JiMzOTtzIGRlZmluZWQgaW4gYm90aCBgaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oYCBhbmQgYG1tL3NobWVtLmNgLiBHb29kLiBOZXh0LCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGFsc28gZ2xvYmFsbHkgYWNjZXNzaWJsZSwgYXBwZWFyaW5nIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAgYW5kIGBtbS9odWdlX21lbW9yeS5jYC4gRmluYWxseSwgYGRvX3NldF9wbWRgIGlzIGFsc28gbm90IHN0YXRpYzsgaXQmIzM5O3MgaW4gYGluY2x1ZGUvbGludXgvbW0uaGAgYW5kIGBtbS9tZW1vcnkuY2AuIFBlcmZlY3QuCgpJIGRpZCBicmllZmx5IGNvbnNpZGVyIGBzaG1lbV9nZXRhdHRyYCwgYnV0IHNpbmNlIGl0JiMzOTtzIGFuIGlub2RlIG9wZXJhdGlvbiwgYW5kIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBpbm9kZV9vcGVyYXRpb25zLmdldGF0dHJgLCBhbmQgaXQmIzM5O3Mgbm90IGJlaW5nIHVzZWQsIHRoZW4gaXQmIzM5O3MgZmluZS4gU28gSSYjMzk7bGwgc3RpY2sgd2l0aCB0aGUgZ2xvYmFsIGZ1bmN0aW9uczogYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGFuZCBgZG9fc2V0X3BtZGAuCgpJIHdlbnQgYmFjayBhbmQgZG91YmxlLWNoZWNrZWQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6CiogICBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLgoqICAgYGRvX3NldF9wbWRgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLgoqICAgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaXMgYWxzbyBhIGdsb2JhbCBmdW5jdGlvbi4KClRoaXMgcGF0Y2ggaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IFRIUCBzdXBwb3J0IGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCwgc3dpdGNoaW5nIGZyb20gYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB0byBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYC4gVGhpcyBpcyBjb3JlIE1NIGxvZ2ljLCBhZmZlY3RpbmcgVEhQLCBzaG1lbSwgZGF4LCBhbmQgbnZkaW1tLCB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgUE1EIGFuZCBQVUQgb3JkZXJzIG9uIENQVXMgd2l0aG91dCBQTUQgbGVhdmVzLiBUaGUgY29kZSBpcyBmdW5jdGlvbmFsLCBhbmQgdGhlIGxvZ2ljIGlzIHJlYWNoYWJsZS4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz10cnVlYC4KCk15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBhbmQgYGRvX3NldF9wbWRgLgoKQW5kIGFnYWluLCBteSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBpbmNsdWRlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCgpNeSByZWFzb25pbmcgaXMgYmVjYXVzZSB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IFRIUCBzdXBwb3J0IGlzIGNoZWNrZWQgYW5kIGluaXRpYWxpemVkLCByZXBsYWNpbmcgYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB3aXRoIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBJdCBtb2RpZmllcyBjb3JlIE1NIGxvZ2ljIChUSFAsIHNobWVtLCBkYXgsIG52ZGltbSkgdG8gZmlsdGVyIG91dCBQTUQgYW5kIFBVRCBvcmRlcnMgaWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7LAogICAgJiMzNDtzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7ZG9fc2V0X3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgVEhQIHN1cHBvcnQgaXMgY2hlY2tlZCBhbmQgaW5pdGlhbGl6ZWQsIHJlcGxhY2luZyBgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKClgIHdpdGggYHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKWAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gbG9naWMgKFRIUCwgc2htZW0sIGRheCwgbnZkaW1tKSB0byBmaWx0ZXIgb3V0IFBNRCBhbmQgUFVEIG9yZGVycyBpZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgUE1EIGxlYXZlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7c2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzJiMzNDssCiAgICAmIzM0O2RvX3NldF9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IFRIUCBzdXBwb3J0IGlzIGNoZWNrZWQgYW5kIGluaXRpYWxpemVkLCByZXBsYWNpbmcgYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB3aXRoIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBJdCBtb2RpZmllcyBjb3JlIE1NIGxvZ2ljIChUSFAsIHNobWVtLCBkYXgsIG52ZGltbSkgdG8gZmlsdGVyIG91dCBQTUQgYW5kIFBVRCBvcmRlcnMgaWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MTQuNTEzNDY2ODA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTU1MzY4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgICBcInNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc1wiLFxuICAgIFwiZG9fc2V0X3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBUSFAgc3VwcG9ydCBpcyBjaGVja2VkIGFuZCBpbml0aWFsaXplZCwgcmVwbGFjaW5nIGBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKWAgd2l0aCBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYC4gSXQgbW9kaWZpZXMgY29yZSBNTSBsb2dpYyAoVEhQLCBzaG1lbSwgZGF4LCBudmRpbW0pIHRvIGZpbHRlciBvdXQgUE1EIGFuZCBQVUQgb3JkZXJzIGlmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBQTUQgbGVhdmVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MTQuNTEzNDczODk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTg1NzQyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZmQ2NTY0OTMwYjU4Mzg1NTljMzBkNTFkOGEwYTZlZTg3YzI1MjAzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDA2OjAwOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3RcXG5pbmRleCBkNjc3ZTA0MjhjM2Y2OC4uNDZmYzk4NmMzMzg4YWMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdFxcbkBAIC0xMDksOSArMTA5LDggQEAgbm9zd2FwICBEaXNhYmxlcyBzd2FwLiBSZW1vdW50cyBtdXN0IHJlc3BlY3QgdGhlIG9yaWdpbmFsIHNldHRpbmdzLlxcbiA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbiB0bXBmcyBhbHNvIHN1cHBvcnRzIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgd2hpY2ggcmVxdWlyZXMgYSBrZXJuZWxcXG4tY29uZmlndXJlZCB3aXRoIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhbmQgd2l0aCBodWdlIHN1cHBvcnRlZCBmb3JcXG4teW91ciBzeXN0ZW0gKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpLCB3aGljaCBpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMpLlxcbi1UaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6XFxuK2NvbmZpZ3VyZWQgd2l0aCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYW5kIHdpdGggaHVnZSBwYWdlc1xcbitzdXBwb3J0ZWQgZm9yIHlvdXIgc3lzdGVtLiBUaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6XFxuIFxcbiA9PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIGh1Z2U9bmV2ZXIgICAgICAgRG8gbm90IGFsbG9jYXRlIGh1Z2UgcGFnZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LlxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IGZhN2I5MzVmOTQ3Y2EwLi4yYTBhN2RkZjhiZWU3ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC02MTUsOSArNjE1LDYgQEAgdW5zaWduZWQgbG9uZyBpb19yZW1hcF9wZm5fcmFuZ2VfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiAvKiBXZSBkb24ndCBoYXZlIGhhcmR3YXJlIGRpcnR5L2FjY2Vzc2VkIGJpdHMsIGdlbmVyaWNfcG1kcF9lc3RhYmxpc2ggaXMgZmluZS4qL1xcbiAjZGVmaW5lIHBtZHBfZXN0YWJsaXNoIGdlbmVyaWNfcG1kcF9lc3RhYmxpc2hcXG4gXFxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxcbi1leHRlcm4gaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcXG4ge1xcbiBcXHRyZXR1cm4gISEocG1kX3ZhbChwbWQpIFxcdTAwMjYgX1BBR0VfSFVHRSk7XFxuQEAgLTc0Myw2ICs3NDAsOSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4rI2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcXG4rZXh0ZXJuIGludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpO1xcbitcXG4gI2lmZGVmIF9QQUdFX0hVR0VcXG4gI2RlZmluZSBwbWRfbGVhZihwbWQpXFx0KChwbWRfdmFsKHBtZCkgXFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcXHQoKHB1ZF92YWwocHVkKSBcXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jXFxuaW5kZXggMjRmZTg1ZmExNjlkMTYuLjkzMzllYmIwODE1ZjIzIDEwMDY0NFxcbi0tLSBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmNcXG4rKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jXFxuQEAgLTQzMiw5ICs0MzIsNyBAQCB2b2lkIGFkZF93aXJlZF9lbnRyeSh1bnNpZ25lZCBsb25nIGVudHJ5bG8wLCB1bnNpZ25lZCBsb25nIGVudHJ5bG8xLFxcbiAjZW5kaWZcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbi1cXG4taW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxcbitpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbiB7XFxuIFxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgbWFzayA9IC0xO1xcbiBcXG5AQCAtNDUwLDkgKzQ0OCw3IEBAIGludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZClcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbWFzayA9PSBQTV9IVUdFX01BU0s7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTChoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UpO1xcbi1cXG4tI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAgKi9cXG4rRVhQT1JUX1NZTUJPTChhcmNoX2hhc19wbWRfbGVhdmVzKTtcXG4gXFxuIC8qXFxuICAqIFVzZWQgZm9yIGxvYWRpbmcgVExCIGVudHJpZXMgYmVmb3JlIHRyYXBfaW5pdCgpIGhhcyBzdGFydGVkLCB3aGVuIHdlXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC00ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTRrLmhcXG5pbmRleCA4ZTViZDk5MDJiZWQ0ZS4uZDUzMmUzZjBkZmMzYjEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTRrLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaFxcbkBAIC0xNjUsOSArMTY1LDkgQEAgZXh0ZXJuIHZvaWQgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX2RlcG9zaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLFxcbiBleHRlcm4gcGd0YWJsZV90IGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHApO1xcbiBleHRlcm4gcG1kX3QgaGFzaF9fcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKTtcXG4tZXh0ZXJuIGludCBoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCk7XFxuICNlbmRpZlxcbiBcXG4rZXh0ZXJuIGludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpO1xcbiAjZW5kaWYgLyogIV9fQVNTRU1CTEVSX18gKi9cXG4gXFxuICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQk9PSzNTXzY0X0hBU0hfNEtfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmhcXG5pbmRleCA3ZGViM2E2Njg5MGJjZC4uZDUyM2M4MGY0NGY3MTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oXFxuQEAgLTI3OCw5ICsyNzgsOSBAQCBleHRlcm4gdm9pZCBoYXNoX19wZ3RhYmxlX3RyYW5zX2h1Z2VfZGVwb3NpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHAsXFxuIGV4dGVybiBwZ3RhYmxlX3QgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCk7XFxuIGV4dGVybiBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApO1xcbi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcXG4gI2VuZGlmIC8qICBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4gXFxuK2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcXG4gI2VuZGlmXFx0LyogX19BU1NFTUJMRVJfXyAqL1xcbiBcXG4gI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19CT09LM1NfNjRfSEFTSF82NEtfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXFxuaW5kZXggZjRkYjdkN2ZiZDVjNjIuLjQxMTY2ZDQ0ZmE3NTZlIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcXG5AQCAtMTEyMSwxNSArMTEyMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4ge1xcbiB9XFxuIFxcbi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcXG4tc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXFxuLXtcXG4tXFx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcXG4tXFx0XFx0cmV0dXJuIHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKTtcXG4tXFx0cmV0dXJuIGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSgpO1xcbi19XFxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxcbi1cXG4gc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxcbiB7XFxuIFxcdGlmIChyYWRpeF9lbmFibGVkKCkpXFxuQEAgLTE0NDEsNiArMTQzMiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9uZWVkc19wZ3RhYmxlX2RlcG9zaXQodm9pZClcXG4gXFxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4gXFxuK2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcXG4rc3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbit7XFxuK1xcdGlmIChyYWRpeF9lbmFibGVkKCkpXFxuK1xcdFxcdHJldHVybiByYWRpeF9fYXJjaF9oYXNfcG1kX2xlYXZlcygpO1xcbitcXHRyZXR1cm4gaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcygpO1xcbit9XFxuKyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXFxuK1xcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfTU9ESUZZX1BST1RfVFJBTlNBQ1RJT05cXG4gcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7XFxuIHZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaFxcbmluZGV4IGRhOTU0ZTc3OTc0NDFmLi5lOGI3NDUyODk1M2ZkYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmhcXG5AQCAtMjk4LDIyICsyOTgsMjIgQEAgZXh0ZXJuIHBtZF90IHJhZGl4X19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gcHVkX3QgcmFkaXhfX3B1ZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHApO1xcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgcmFkaXhfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxcbitzdGF0aWMgaW5saW5lIGludCByYWRpeF9faGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxcbiB7XFxuLVxcdC8qIEZvciByYWRpeCAyTSBhdCBQTUQgbGV2ZWwgbWVhbnMgdGhwICovXFxuLVxcdGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8yTV0uc2hpZnQgPT0gUE1EX1NISUZUKVxcbitcXHQvKiBGb3IgcmFkaXggMUcgYXQgUFVEIGxldmVsIG1lYW5zIHB1ZCBodWdlcGFnZSBzdXBwb3J0ICovXFxuK1xcdGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8xR10uc2hpZnQgPT0gUFVEX1NISUZUKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rI2VuZGlmXFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCByYWRpeF9faGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxcbitzdGF0aWMgaW5saW5lIGludCByYWRpeF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbiB7XFxuLVxcdC8qIEZvciByYWRpeCAxRyBhdCBQVUQgbGV2ZWwgbWVhbnMgcHVkIGh1Z2VwYWdlIHN1cHBvcnQgKi9cXG4tXFx0aWYgKG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzFHXS5zaGlmdCA9PSBQVURfU0hJRlQpXFxuK1xcdC8qIEZvciByYWRpeCAyTSBhdCBQTUQgbGV2ZWwgbWVhbnMgdGhwICovXFxuK1xcdGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8yTV0uc2hpZnQgPT0gUE1EX1NISUZUKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4tI2VuZGlmXFxuIFxcbiBzdHJ1Y3Qgdm1lbV9hbHRtYXA7XFxuIHN0cnVjdCBkZXZfcGFnZW1hcDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jXFxuaW5kZXggZDliNWI3NTFkN2I3NWIuLmE2N2JjMTcyMzQwNGMyIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuY1xcbkBAIC0zOTEsNyArMzkxLDkgQEAgcG1kX3QgaGFzaF9fcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiBvbGRfcG1kO1xcbiB9XFxuIFxcbi1pbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXFxuKyNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4rXFxuK2ludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXFxuIHtcXG4gXFxuIFxcdGlmICghbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfMTZNX1BBR0UpKVxcbkBAIC00MjAsOSArNDIyLDcgQEAgaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxcbiBcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKTtcXG4tXFxuLSNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IGU4ODI2NjNhNThlNzc2Li4yNGVlOTBjN2U5YmY2YiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0xODI1LDEzICsxODI1LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcXG4ge1xcbiBcXHRyZXR1cm4gcG1kX2xlYWYocG1kKTtcXG4gfVxcbisjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuIFxcbi0jZGVmaW5lIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2VcXG4tc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXFxuKyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXFxuK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaGFzX3BtZF9sZWF2ZXModm9pZClcXG4ge1xcbiBcXHRyZXR1cm4gY3B1X2hhc19lZGF0MSgpID8gMSA6IDA7XFxuIH1cXG4tI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4gI2lmZGVmIENPTkZJR19QQUdFX1RBQkxFX0NIRUNLXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCA4ZTAwMThmYWRkMTRlNi4uM2M2YTY0MWU2YzIxMWQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTMwNiwxMiArMzA2LDYgQEAgc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXFxuLXN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxcbi17XFxuLVxcdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUFNFKTtcXG4tfVxcbi1cXG4gI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcXG4gc3RhdGljIGlubGluZSBib29sIHBtZF9zcGVjaWFsKHBtZF90IHBtZClcXG4ge1xcbkBAIC0zMzcsNiArMzMxLDEyIEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21rc3BlY2lhbChwdWRfdCBwdWQpXFxuICNlbmRpZlxcdC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVAgKi9cXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4rI2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcXG4rc3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUFNFKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc2V0X2ZsYWdzKHB0ZV90IHB0ZSwgcHRldmFsX3Qgc2V0KVxcbiB7XFxuIFxcdHB0ZXZhbF90IHYgPSBuYXRpdmVfcHRlX3ZhbChwdGUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oIGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxcbmluZGV4IDgxZTRhZjQ5ZTM5YzEwLi4zNTc0NGZmNjU5MmFjOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXFxuKysrIGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxcbkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxcbiB7XFxuIFxcdGlmIChhbGlnbiA9PSBQVURfU0laRSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGlmIChhbGlnbiA9PSBQTURfU0laRSBcXHUwMDI2XFx1MDAyNiBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcXG4rXFx0aWYgKGFsaWduID09IFBNRF9TSVpFIFxcdTAwMjZcXHUwMDI2IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGlmIChhbGlnbiA9PSBQQUdFX1NJWkUpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jIGIvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY1xcbmluZGV4IDhmYTljMTZhYmE3ZWEwLi40NTdlYjU0ZTdhYjZmYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jXFxuKysrIGIvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY1xcbkBAIC05NCw3ICs5NCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nICpuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHModW5zaWduZWQgbG9uZyAqYWxpZ25tZW50cylcXG4gXFxuIFxcdGFsaWdubWVudHNbMF0gPSBQQUdFX1NJWkU7XFxuIFxcbi1cXHRpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpIHtcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XFxuIFxcdFxcdGFsaWdubWVudHNbMV0gPSBIUEFHRV9QTURfU0laRTtcXG4gXFx0XFx0aWYgKGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2UoKSlcXG4gXFx0XFx0XFx0YWxpZ25tZW50c1syXSA9IEhQQUdFX1BVRF9TSVpFO1xcbkBAIC0xMDksNyArMTEwLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgKm5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyh1bnNpZ25lZCBsb25nICphbGlnbm1lbnRzKVxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuZF9wZm5fZGVmYXVsdF9hbGlnbm1lbnQodm9pZClcXG4ge1xcbiBcXG4tXFx0aWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuIFxcdFxcdHJldHVybiBIUEFHRV9QTURfU0laRTtcXG4gXFx0cmV0dXJuIFBBR0VfU0laRTtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXFxuaW5kZXggYzc0NWY3YWQyMjk4N2YuLjUyNWFjZWEyZWI1OWNiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG5AQCAtNDcsNyArNDcsNiBAQCB2bV9mYXVsdF90IHZtZl9pbnNlcnRfZm9saW9fcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRcXHRib29sIHdyaXRlKTtcXG4gXFxuIGVudW0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZyB7XFxuLVxcdFRSQU5TUEFSRU5UX0hVR0VQQUdFX1VOU1VQUE9SVEVELFxcbiBcXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9GTEFHLFxcbiBcXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHLFxcbiBcXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUcsXFxuQEAgLTM4MywxMiArMzgyLDYgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHJldHVybiBtbV9mbGFnc190ZXN0KE1NRl9ESVNBQkxFX1RIUF9FWENFUFRfQURWSVNFRCwgdm1hLVxcdTAwM2V2bV9tbSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfZGlzYWJsZWRfYnlfaHcodm9pZClcXG4te1xcbi1cXHQvKiBJZiB0aGUgaGFyZHdhcmUvZmlybXdhcmUgbWFya2VkIGh1Z2VwYWdlIHN1cHBvcnQgZGlzYWJsZWQuICovXFxuLVxcdHJldHVybiB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1VOU1VQUE9SVEVEKTtcXG4tfVxcbi1cXG4gdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuaW5kZXggOGMwOTNjMTE5ZTVhODIuLmQ1NzFkMTYxYTg0YjNjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1fdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV90YWJsZV9jaGVjay5oXFx1MDAzZVxcbiBcXG5AQCAtMjMxMyw2ICsyMzE0LDIxIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGd0YWJsZV9sZXZlbF90b19zdHIoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiBcXHR9XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfTU1VXFxuK0RFQ0xBUkVfU1RBVElDX0tFWV9UUlVFKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xcbitzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2X19hcmNoX2hhc19wbWRfbGVhdmVzX2tleSk7XFxuK31cXG4rdm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIHBndGFibGVfaGFzX3BtZF9sZWF2ZXModm9pZClcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KHZvaWQpIHsgfVxcbisjZW5kaWZcXG4rXFxuICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqL1xcbiBcXG4gI2lmICFkZWZpbmVkKE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR182NEJJVClcXG5AQCAtMjMyOCw4ICsyMzQ0LDggQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwZ3RhYmxlX2xldmVsX3RvX3N0cihlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuICNlbmRpZlxcbiAjZW5kaWZcXG4gXFxuLSNpZm5kZWYgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXFxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgSVNfQlVJTFRJTihDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuKyNpZm5kZWYgYXJjaF9oYXNfcG1kX2xlYXZlc1xcbisjZGVmaW5lIGFyY2hfaGFzX3BtZF9sZWF2ZXMoKSBJU19CVUlMVElOKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuICNlbmRpZlxcbiBcXG4gI2lmbmRlZiBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlXFxuZGlmZiAtLWdpdCBhL21tL2RlYnVnX3ZtX3BndGFibGUuYyBiL21tL2RlYnVnX3ZtX3BndGFibGUuY1xcbmluZGV4IDI4NzVmZDIyZDdiYjAyLi4yNTAzOGI3NGM3YmM2NyAxMDA2NDRcXG4tLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcXG4rKysgYi9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcXG5AQCAtMTc3LDcgKzE3Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IGlkeClcXG4gXFx0dW5zaWduZWQgbG9uZyB2YWwgPSBpZHgsICpwdHIgPSBcXHUwMDI2dmFsO1xcbiBcXHRwbWRfdCBwbWQ7XFxuIFxcbi1cXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxcbitcXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcIlZhbGlkYXRpbmcgUE1EIGJhc2ljICglcEd2KVxcXFxuXFxcIiwgcHRyKTtcXG5AQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfYWR2YW5jZWRfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4gXFx0cG1kX3QgcG1kO1xcbiBcXHR1bnNpZ25lZCBsb25nIHZhZGRyID0gYXJncy1cXHUwMDNldmFkZHI7XFxuIFxcbi1cXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxcbitcXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cGFnZSA9IChhcmdzLVxcdTAwM2VwbWRfcGZuICE9IFVMT05HX01BWCkgPyBwZm5fdG9fcGFnZShhcmdzLVxcdTAwM2VwbWRfcGZuKSA6IE5VTEw7XFxuQEAgLTI4Myw3ICsyODMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4ge1xcbiBcXHRwbWRfdCBwbWQ7XFxuIFxcbi1cXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxcbitcXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcIlZhbGlkYXRpbmcgUE1EIGxlYWZcXFxcblxcXCIpO1xcbkBAIC02ODgsNyArNjg4LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiBcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1BURV9QUk9UTk9ORSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXFxuK1xcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwiVmFsaWRhdGluZyBQTUQgcHJvdG5vbmVcXFxcblxcXCIpO1xcbkBAIC03MzcsNyArNzM3LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuIFxcdGlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXFxuK1xcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwiVmFsaWRhdGluZyBQTUQgc29mdCBkaXJ0eVxcXFxuXFxcIik7XFxuQEAgLTc1NCw3ICs3NTQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiBcXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJWYWxpZGF0aW5nIFBNRCBzd2FwIHNvZnQgZGlydHlcXFxcblxcXCIpO1xcbkBAIC04MjUsNyArODI1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiBcXHRzd3BfZW50cnlfdCBhcmNoX2VudHJ5O1xcbiBcXHRwbWRfdCBwbWQxLCBwbWQyO1xcbiBcXG4tXFx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJWYWxpZGF0aW5nIFBNRCBzd2FwXFxcXG5cXFwiKTtcXG5AQCAtOTA2LDcgKzkwNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuIHtcXG4gXFx0cG1kX3QgcG1kO1xcbiBcXG4tXFx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJWYWxpZGF0aW5nIFBNRCBiYXNlZCBUSFBcXFxcblxcXCIpO1xcbkBAIC05OTcsNyArOTk3LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGRlc3Ryb3lfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBhcmdzLVxcdTAwM2VwbWRfcGZuICE9IFVMT05HX01BWCkge1xcbiBcXHRcXHRkZWJ1Z192bV9wZ3RhYmxlX2ZyZWVfaHVnZV9wYWdlKGFyZ3MsIGFyZ3MtXFx1MDAzZXBtZF9wZm4sIEhQQUdFX1BNRF9PUkRFUik7XFxuIFxcdFxcdGFyZ3MtXFx1MDAzZXBtZF9wZm4gPSBVTE9OR19NQVg7XFxuQEAgLTEyNDksNyArMTI0OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkge1xcbitcXHQgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XFxuIFxcdFxcdHBhZ2UgPSBkZWJ1Z192bV9wZ3RhYmxlX2FsbG9jX2h1Z2VfcGFnZShhcmdzLCBIUEFHRV9QTURfT1JERVIpO1xcbiBcXHRcXHRpZiAocGFnZSkge1xcbiBcXHRcXHRcXHRhcmdzLVxcdTAwM2VwbWRfcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggMDRlOGE2YjU1MzQzNWYuLjM4NWEzMDVlN2FmNjUxIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTEyOSw2ICsxMjksMTUgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0ZWxzZVxcbiBcXHRcXHRzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfRklMRV9ERUZBVUxUO1xcbiBcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMsIGFzc3VtZSBmb3JcXG4rXFx0XFx0ICogbm93IHRoYXQgaXQgZG9lcyBub3Qgc3VwcG9ydCBQVUQgbGVhdmVzIGFuZCBkaXNhYmxlXFxuK1xcdFxcdCAqIGJvdGggZm9saW8gb3JkZXJzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3VwcG9ydGVkX29yZGVycyBcXHUwMDI2PSB+KEJJVChQTURfT1JERVIpIHwgQklUKFBVRF9PUkRFUikpO1xcbitcXHR9XFxuK1xcbiBcXHRvcmRlcnMgXFx1MDAyNj0gc3VwcG9ydGVkX29yZGVycztcXG4gXFx0aWYgKCFvcmRlcnMpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMzYsNyArMTQ1LDcgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0aWYgKCF2bWEtXFx1MDAzZXZtX21tKVxcdFxcdC8qIHZkc28gKi9cXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBmb3JjZWRfY29sbGFwc2UpKVxcbitcXHRpZiAodm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBmb3JjZWRfY29sbGFwc2UpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qIGtodWdlcGFnZWQgZG9lc24ndCBjb2xsYXBzZSBEQVggdm1hLCBidXQgcGFnZSBmYXVsdCBpcyBmaW5lLiAqL1xcbkBAIC04NzQsNyArODgzLDcgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqKmh1Z2VwYWdlX2tvYmopXFxuIFxcdCAqIGRpc2FibGUgYWxsIG90aGVyIHNpemVzLiBwb3dlcnBjJ3MgUE1EX09SREVSIGlzbid0IGEgY29tcGlsZS10aW1lXFxuIFxcdCAqIGNvbnN0YW50IHNvIHdlIGhhdmUgdG8gZG8gdGhpcyBoZXJlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFhbm9uX29yZGVyc19jb25maWd1cmVkKVxcbitcXHRpZiAoIWFub25fb3JkZXJzX2NvbmZpZ3VyZWQgXFx1MDAyNlxcdTAwMjYgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxcbiBcXHRcXHRodWdlX2Fub25fb3JkZXJzX2luaGVyaXQgPSBCSVQoUE1EX09SREVSKTtcXG4gXFxuIFxcdCpodWdlcGFnZV9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZChcXFwidHJhbnNwYXJlbnRfaHVnZXBhZ2VcXFwiLCBtbV9rb2JqKTtcXG5AQCAtODk2LDYgKzkwNSwxNSBAQCBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0X3N5c2ZzKHN0cnVjdCBrb2JqZWN0ICoqaHVnZXBhZ2Vfa29iailcXG4gXFx0fVxcbiBcXG4gXFx0b3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTiB8IFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVDtcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMsIGFzc3VtZSBmb3JcXG4rXFx0XFx0ICogbm93IHRoYXQgaXQgZG9lcyBub3Qgc3VwcG9ydCBQVUQgbGVhdmVzIGFuZCBkaXNhYmxlXFxuK1xcdFxcdCAqIGJvdGggZm9saW8gb3JkZXJzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0b3JkZXJzIFxcdTAwMjY9IH4oQklUKFBNRF9PUkRFUikgfCBCSVQoUFVEX09SREVSKSk7XFxuK1xcdH1cXG4rXFxuIFxcdG9yZGVyID0gaGlnaGVzdF9vcmRlcihvcmRlcnMpO1xcbiBcXHR3aGlsZSAob3JkZXJzKSB7XFxuIFxcdFxcdHRocHNpemUgPSB0aHBzaXplX2NyZWF0ZShvcmRlciwgKmh1Z2VwYWdlX2tvYmopO1xcbkBAIC0xMDEwLDExICsxMDI4LDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdCh2b2lkKVxcbiBcXHRpbnQgZXJyO1xcbiBcXHRzdHJ1Y3Qga29iamVjdCAqaHVnZXBhZ2Vfa29iajtcXG4gXFxuLVxcdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpIHtcXG4tXFx0XFx0dHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgPSAxIFxcdTAwM2NcXHUwMDNjIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1VOU1VQUE9SVEVEO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbi1cXG4gXFx0LypcXG4gXFx0ICogaHVnZXBhZ2VzIGNhbid0IGJlIGFsbG9jYXRlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yXFxuIFxcdCAqL1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggNTZiMjQ0NTUyZjEzOTQuLmYzOWQ5MzgzNDk0ZTY5IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMTY0LDYgKzE2NCwxNSBAQCBfX3NldHVwKFxcXCJub3JhbmRtYXBzXFxcIiwgZGlzYWJsZV9yYW5kbWFwcyk7XFxuIFxcbiB1bnNpZ25lZCBsb25nIGhpZ2hlc3RfbWVtbWFwX3BmbiBfX3JlYWRfbW9zdGx5O1xcbiBcXG4rREVGSU5FX1NUQVRJQ19LRVlfVFJVRShfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcXG4rRVhQT1JUX1NZTUJPTChfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcXG4rXFxuK3ZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZClcXG4re1xcbitcXHRpZiAoIWFyY2hfaGFzX3BtZF9sZWF2ZXMoKSlcXG4rXFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFxcdTAwMjZfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcXG4rfVxcbitcXG4gdm9pZCBtbV90cmFjZV9yc3Nfc3RhdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlcilcXG4ge1xcbiBcXHR0cmFjZV9yc3Nfc3RhdChtbSwgbWVtYmVyKTtcXG5AQCAtNTU2Nyw3ICs1NTc2LDcgQEAgdm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFcXG4gXFx0ICogUE1EIG1hcHBpbmdzIGlmIFRIUHMgYXJlIGRpc2FibGVkLiBBcyB3ZSBhbHJlYWR5IGhhdmUgYSBUSFAsXFxuIFxcdCAqIGJlaGF2ZSBhcyBpZiB3ZSBhcmUgZm9yY2luZyBhIGNvbGxhcHNlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHRocF9kaXNhYmxlZF9ieV9odygpIHx8IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLFxcbitcXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSB8fCB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAvKiBmb3JjZWRfY29sbGFwc2U9Ki8gdHJ1ZSkpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcXG5pbmRleCA3MTFmODIxZjdiM2M3Mi4uZGNjMDcyZGI0NTU4NzIgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTI2OTksNiArMjY5OSw3IEBAIHZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGFyY2hfbW1fcHJlaW5pdCgpO1xcbiBcXHRpbml0X3plcm9fcGFnZV9wZm4oKTtcXG4rXFx0cGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCgpO1xcbiBcXG4gXFx0LyogSW5pdGlhbGl6YXRpb25zIHJlbHlpbmcgb24gU01QIHNldHVwICovXFxuIFxcdEJVSUxEX0JVR19PTihNQVhfWk9ORUxJU1RTIFxcdTAwM2UgMik7XFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggNTA3MTE3NzA1OWE5NjQuLjAwOGRmNTU4YWYyMzdlIDEwMDY0NFxcbi0tLSBhL21tL3NobWVtLmNcXG4rKysgYi9tbS9zaG1lbS5jXFxuQEAgLTY4OSw3ICs2ODksNyBAQCBzdGF0aWMgaW50IHNobWVtX3BhcnNlX2h1Z2UoY29uc3QgY2hhciAqc3RyKVxcbiBcXHRlbHNlXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgaHVnZSAhPSBTSE1FTV9IVUdFX05FVkVSIFxcdTAwMjZcXHUwMDI2IGh1Z2UgIT0gU0hNRU1fSFVHRV9ERU5ZKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuQEAgLTEyODcsNiArMTI4Nyw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbiBcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXJzO1xcbiBcXG4gXFx0LyogRmFzdC1wYXRoIGhpbnQ7IHJlY2FsYyB1bmRlciBpbmZvLVxcdTAwM2Vsb2NrIGNvcnJlY3RzIGFueSBzdGFsZSByZWFkLiAqL1xcbiBcXHRpZiAoZGF0YV9yYWNlKGluZm8tXFx1MDAzZWFsbG9jZWQgLSBpbmZvLVxcdTAwM2Vzd2FwcGVkICE9IGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZW5ycGFnZXMpKVxcbkBAIC0xMzAzLDggKzEzMDQsMTEgQEAgc3RhdGljIGludCBzaG1lbV9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHRTVEFUWF9BVFRSX05PRFVNUCk7XFxuIFxcdGdlbmVyaWNfZmlsbGF0dHIoaWRtYXAsIHJlcXVlc3RfbWFzaywgaW5vZGUsIHN0YXQpO1xcbiBcXG4tXFx0aWYgKHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoaW5vZGUsIDAsIDAsIGZhbHNlLCBOVUxMLCAwKSlcXG4tXFx0XFx0c3RhdC1cXHUwMDNlYmxrc2l6ZSA9IEhQQUdFX1BNRF9TSVpFO1xcbitcXHRvcmRlcnMgPSBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKGlub2RlLCAwLCAwLCBmYWxzZSwgTlVMTCwgMCk7XFxuK1xcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxcbitcXHRcXHRvcmRlcnMgXFx1MDAyNj0gfkJJVChQTURfT1JERVIpO1xcbitcXHRpZiAob3JkZXJzKVxcbitcXHRcXHRzdGF0LVxcdTAwM2VibGtzaXplID0gUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIGhpZ2hlc3Rfb3JkZXIob3JkZXJzKTtcXG4gXFxuIFxcdGlmIChyZXF1ZXN0X21hc2sgXFx1MDAyNiBTVEFUWF9CVElNRSkge1xcbiBcXHRcXHRzdGF0LVxcdTAwM2VyZXN1bHRfbWFzayB8PSBTVEFUWF9CVElNRTtcXG5AQCAtMTgyNiwxNiArMTgzMCwxOSBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHR1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzKTtcXG4gXFx0dW5zaWduZWQgbG9uZyB3aXRoaW5fc2l6ZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfd2l0aGluX3NpemUpO1xcbiBcXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVxcdTAwM2V2bV9mbGFncyA6IDA7XFxuLVxcdHVuc2lnbmVkIGludCBnbG9iYWxfb3JkZXJzO1xcbitcXHR1bnNpZ25lZCBpbnQgZ2xvYmFsX29yZGVycywgZGlzYWJsZWRfb3JkZXJzID0gMDtcXG4gXFxuLVxcdGlmICh0aHBfZGlzYWJsZWRfYnlfaHcoKSB8fCAodm1hIFxcdTAwMjZcXHUwMDI2IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpKVxcbitcXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuK1xcdFxcdGRpc2FibGVkX29yZGVycyA9IEJJVChQTURfT1JERVIpO1xcbitcXG4gXFx0Z2xvYmFsX29yZGVycyA9IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoaW5vZGUsIGluZGV4LCB3cml0ZV9lbmQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgc2htZW1faHVnZV9mb3JjZSwgdm1hLCB2bV9mbGFncyk7XFxuIFxcdC8qIFRtcGZzIGh1Z2UgcGFnZXMgYWxsb2NhdGlvbiAqL1xcbiBcXHRpZiAoIXZtYSB8fCAhdm1hX2lzX2Fub25fc2htZW0odm1hKSlcXG4tXFx0XFx0cmV0dXJuIGdsb2JhbF9vcmRlcnM7XFxuK1xcdFxcdHJldHVybiBnbG9iYWxfb3JkZXJzIFxcdTAwMjYgfmRpc2FibGVkX29yZGVycztcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEZvbGxvd2luZyB0aGUgJ2RlbnknIHNlbWFudGljcyBvZiB0aGUgdG9wIGxldmVsLCBmb3JjZSB0aGUgaHVnZVxcbkBAIC0xODQ5LDcgKzE4NTYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgKiBtZWFucyBub24tUE1EIHNpemVkIFRIUCBjYW4gbm90IG92ZXJyaWRlICdodWdlJyBtb3VudCBvcHRpb24gbm93LlxcbiBcXHQgKi9cXG4gXFx0aWYgKHNobWVtX2h1Z2UgPT0gU0hNRU1fSFVHRV9GT1JDRSlcXG4tXFx0XFx0cmV0dXJuIFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19pbmhlcml0KTtcXG4rXFx0XFx0cmV0dXJuIFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19pbmhlcml0KSBcXHUwMDI2IH5kaXNhYmxlZF9vcmRlcnM7XFxuIFxcbiBcXHQvKiBBbGxvdyBtVEhQIHRoYXQgd2lsbCBiZSBmdWxseSB3aXRoaW4gaV9zaXplLiAqL1xcbiBcXHRtYXNrIHw9IHNobWVtX2dldF9vcmRlcnNfd2l0aGluX3NpemUoaW5vZGUsIHdpdGhpbl9zaXplX29yZGVycywgaW5kZXgsIDApO1xcbkBAIC0xODYwLDYgKzE4NjcsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRpZiAoZ2xvYmFsX29yZGVycyBcXHUwMDNlIDApXFxuIFxcdFxcdG1hc2sgfD0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQpO1xcbiBcXG4rXFx0bWFzayBcXHUwMDI2PSB+ZGlzYWJsZWRfb3JkZXJzO1xcbiBcXHRyZXR1cm4gVEhQX09SREVSU19BTExfRklMRV9ERUZBVUxUIFxcdTAwMjYgbWFzaztcXG4gfVxcbiBcXG5AQCAtNDU4Nyw4ICs0NTk1LDcgQEAgc3RhdGljIGludCBzaG1lbV9wYXJzZV9vbmUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4gXFx0Y2FzZSBPcHRfaHVnZTpcXG4gXFx0XFx0Y3R4LVxcdTAwM2VodWdlID0gcmVzdWx0LnVpbnRfMzI7XFxuIFxcdFxcdGlmIChjdHgtXFx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIShJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpKVxcbitcXHRcXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4gXFx0XFx0XFx0Z290byB1bnN1cHBvcnRlZF9wYXJhbWV0ZXI7XFxuIFxcdFxcdGN0eC1cXHUwMDNlc2VlbiB8PSBTSE1FTV9TRUVOX0hVR0U7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC01MzgzLDcgKzUzOTAsNyBAQCB2b2lkIF9faW5pdCBzaG1lbV9pbml0KHZvaWQpXFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbi1cXHRpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgXFx1MDAyNlxcdTAwMjYgc2htZW1faHVnZSBcXHUwMDNlIFNITUVNX0hVR0VfREVOWSlcXG4rXFx0aWYgKHNobWVtX2h1Z2UgXFx1MDAzZSBTSE1FTV9IVUdFX0RFTlkpXFxuIFxcdFxcdFNITUVNX1NCKHNobV9tbnQtXFx1MDAzZW1udF9zYiktXFx1MDAzZWh1Z2UgPSBzaG1lbV9odWdlO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHNobWVtX2h1Z2UgPSBTSE1FTV9IVUdFX05FVkVSOyAvKiBqdXN0IGluIGNhc2UgaXQgd2FzIHBhdGNoZWQgKi9cXG5AQCAtNTM5Miw3ICs1Mzk5LDcgQEAgdm9pZCBfX2luaXQgc2htZW1faW5pdCh2b2lkKVxcbiBcXHQgKiBEZWZhdWx0IHRvIHNldHRpbmcgUE1ELXNpemVkIFRIUCB0byBpbmhlcml0IHRoZSBnbG9iYWwgc2V0dGluZyBhbmRcXG4gXFx0ICogZGlzYWJsZSBhbGwgb3RoZXIgbXVsdGktc2l6ZSBUSFBzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZClcXG4rXFx0aWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZCBcXHUwMDI2XFx1MDAyNiBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuIFxcdFxcdGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQgPSBCSVQoSFBBR0VfUE1EX09SREVSKTtcXG4gI2VuZGlmXFxuIFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MTUuMDMyNzA3ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTU2MzYxMTc3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiLFxuICAgIFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCIsXG4gICAgXCJkb19zZXRfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IFRIUCBzdXBwb3J0IGlzIGNoZWNrZWQgYW5kIGluaXRpYWxpemVkLCByZXBsYWNpbmcgYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB3aXRoIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBJdCBtb2RpZmllcyBjb3JlIE1NIGxvZ2ljIChUSFAsIHNobWVtLCBkYXgsIG52ZGltbSkgdG8gZmlsdGVyIG91dCBQTUQgYW5kIFBVRCBvcmRlcnMgaWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZmQ2NTY0OTMwYjU4Mzg1NTljMzBkNTFkOGEwYTZlZTg3YzI1MjAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDY6MDA6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0XG5pbmRleCBkNjc3ZTA0MjhjM2Y2OC4uNDZmYzk4NmMzMzg4YWMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3RcbkBAIC0xMDksOSArMTA5LDggQEAgbm9zd2FwICBEaXNhYmxlcyBzd2FwLiBSZW1vdW50cyBtdXN0IHJlc3BlY3QgdGhlIG9yaWdpbmFsIHNldHRpbmdzLlxuID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiB0bXBmcyBhbHNvIHN1cHBvcnRzIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgd2hpY2ggcmVxdWlyZXMgYSBrZXJuZWxcbi1jb25maWd1cmVkIHdpdGggQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGFuZCB3aXRoIGh1Z2Ugc3VwcG9ydGVkIGZvclxuLXlvdXIgc3lzdGVtIChoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSwgd2hpY2ggaXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljKS5cbi1UaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6XG4rY29uZmlndXJlZCB3aXRoIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhbmQgd2l0aCBodWdlIHBhZ2VzXG4rc3VwcG9ydGVkIGZvciB5b3VyIHN5c3RlbS4gVGhlIG1vdW50IG9wdGlvbnMgZm9yIHRoaXMgYXJlOlxuIFxuID09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBodWdlPW5ldmVyICAgICAgIERvIG5vdCBhbGxvY2F0ZSBodWdlIHBhZ2VzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC5cbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggZmE3YjkzNWY5NDdjYTAuLjJhMGE3ZGRmOGJlZTdlIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTYxNSw5ICs2MTUsNiBAQCB1bnNpZ25lZCBsb25nIGlvX3JlbWFwX3Bmbl9yYW5nZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gLyogV2UgZG9uJ3QgaGF2ZSBoYXJkd2FyZSBkaXJ0eS9hY2Nlc3NlZCBiaXRzLCBnZW5lcmljX3BtZHBfZXN0YWJsaXNoIGlzIGZpbmUuKi9cbiAjZGVmaW5lIHBtZHBfZXN0YWJsaXNoIGdlbmVyaWNfcG1kcF9lc3RhYmxpc2hcbiBcbi0jZGVmaW5lIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Vcbi1leHRlcm4gaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcbi1cbiBzdGF0aWMgaW5saW5lIGludCBwbWRfdHJhbnNfaHVnZShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuICEhKHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFVHRSk7XG5AQCAtNzQzLDYgKzc0MCw5IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuKyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXG4rZXh0ZXJuIGludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpO1xuK1xuICNpZmRlZiBfUEFHRV9IVUdFXG4gI2RlZmluZSBwbWRfbGVhZihwbWQpXHQoKHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcdCgocHVkX3ZhbChwdWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jXG5pbmRleCAyNGZlODVmYTE2OWQxNi4uOTMzOWViYjA4MTVmMjMgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jXG4rKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jXG5AQCAtNDMyLDkgKzQzMiw3IEBAIHZvaWQgYWRkX3dpcmVkX2VudHJ5KHVuc2lnbmVkIGxvbmcgZW50cnlsbzAsIHVuc2lnbmVkIGxvbmcgZW50cnlsbzEsXG4gI2VuZGlmXG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbi1cbi1pbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4raW50IGFyY2hfaGFzX3BtZF9sZWF2ZXModm9pZClcbiB7XG4gXHRzdGF0aWMgdW5zaWduZWQgaW50IG1hc2sgPSAtMTtcbiBcbkBAIC00NTAsOSArNDQ4LDcgQEAgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxuIFx0fVxuIFx0cmV0dXJuIG1hc2sgPT0gUE1fSFVHRV9NQVNLO1xuIH1cbi1FWFBPUlRfU1lNQk9MKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSk7XG4tXG4tI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAgKi9cbitFWFBPUlRfU1lNQk9MKGFyY2hfaGFzX3BtZF9sZWF2ZXMpO1xuIFxuIC8qXG4gICogVXNlZCBmb3IgbG9hZGluZyBUTEIgZW50cmllcyBiZWZvcmUgdHJhcF9pbml0KCkgaGFzIHN0YXJ0ZWQsIHdoZW4gd2VcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC00ay5oXG5pbmRleCA4ZTViZDk5MDJiZWQ0ZS4uZDUzMmUzZjBkZmMzYjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTRrLmhcbkBAIC0xNjUsOSArMTY1LDkgQEAgZXh0ZXJuIHZvaWQgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX2RlcG9zaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLFxuIGV4dGVybiBwZ3RhYmxlX3QgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCk7XG4gZXh0ZXJuIHBtZF90IGhhc2hfX3BtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApO1xuLWV4dGVybiBpbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpO1xuICNlbmRpZlxuIFxuK2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcbiAjZW5kaWYgLyogIV9fQVNTRU1CTEVSX18gKi9cbiBcbiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0JPT0szU182NF9IQVNIXzRLX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmhcbmluZGV4IDdkZWIzYTY2ODkwYmNkLi5kNTIzYzgwZjQ0ZjcxNyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oXG5AQCAtMjc4LDkgKzI3OCw5IEBAIGV4dGVybiB2b2lkIGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV9kZXBvc2l0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCxcbiBleHRlcm4gcGd0YWJsZV90IGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHApO1xuIGV4dGVybiBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKTtcbi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcbiAjZW5kaWYgLyogIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuK2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcbiAjZW5kaWZcdC8qIF9fQVNTRU1CTEVSX18gKi9cbiBcbiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0JPT0szU182NF9IQVNIXzY0S19IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuaW5kZXggZjRkYjdkN2ZiZDVjNjIuLjQxMTY2ZDQ0ZmE3NTZlIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG5AQCAtMTEyMSwxNSArMTEyMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiB7XG4gfVxuIFxuLWV4dGVybiBpbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpO1xuLXN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxuLXtcbi1cdGlmIChyYWRpeF9lbmFibGVkKCkpXG4tXHRcdHJldHVybiByYWRpeF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCk7XG4tXHRyZXR1cm4gaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCk7XG4tfVxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxuLVxuIHN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2Uodm9pZClcbiB7XG4gXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxuQEAgLTE0NDEsNiArMTQzMiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9uZWVkc19wZ3RhYmxlX2RlcG9zaXQodm9pZClcbiBcbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4rZXh0ZXJuIGludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpO1xuK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaGFzX3BtZF9sZWF2ZXModm9pZClcbit7XG4rXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxuK1x0XHRyZXR1cm4gcmFkaXhfX2FyY2hfaGFzX3BtZF9sZWF2ZXMoKTtcbitcdHJldHVybiBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKCk7XG4rfVxuKyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXG4rXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX01PRElGWV9QUk9UX1RSQU5TQUNUSU9OXG4gcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7XG4gdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmhcbmluZGV4IGRhOTU0ZTc3OTc0NDFmLi5lOGI3NDUyODk1M2ZkYyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oXG5AQCAtMjk4LDIyICsyOTgsMjIgQEAgZXh0ZXJuIHBtZF90IHJhZGl4X19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBwdWRfdCByYWRpeF9fcHVkcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHApO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZClcbitzdGF0aWMgaW5saW5lIGludCByYWRpeF9faGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxuIHtcbi1cdC8qIEZvciByYWRpeCAyTSBhdCBQTUQgbGV2ZWwgbWVhbnMgdGhwICovXG4tXHRpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMk1dLnNoaWZ0ID09IFBNRF9TSElGVClcbitcdC8qIEZvciByYWRpeCAxRyBhdCBQVUQgbGV2ZWwgbWVhbnMgcHVkIGh1Z2VwYWdlIHN1cHBvcnQgKi9cbitcdGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8xR10uc2hpZnQgPT0gUFVEX1NISUZUKVxuIFx0XHRyZXR1cm4gMTtcbiBcdHJldHVybiAwO1xuIH1cbisjZW5kaWZcbiBcbi1zdGF0aWMgaW5saW5lIGludCByYWRpeF9faGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxuK3N0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4ge1xuLVx0LyogRm9yIHJhZGl4IDFHIGF0IFBVRCBsZXZlbCBtZWFucyBwdWQgaHVnZXBhZ2Ugc3VwcG9ydCAqL1xuLVx0aWYgKG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzFHXS5zaGlmdCA9PSBQVURfU0hJRlQpXG4rXHQvKiBGb3IgcmFkaXggMk0gYXQgUE1EIGxldmVsIG1lYW5zIHRocCAqL1xuK1x0aWYgKG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzJNXS5zaGlmdCA9PSBQTURfU0hJRlQpXG4gXHRcdHJldHVybiAxO1xuIFx0cmV0dXJuIDA7XG4gfVxuLSNlbmRpZlxuIFxuIHN0cnVjdCB2bWVtX2FsdG1hcDtcbiBzdHJ1Y3QgZGV2X3BhZ2VtYXA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jXG5pbmRleCBkOWI1Yjc1MWQ3Yjc1Yi4uYTY3YmMxNzIzNDA0YzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuY1xuQEAgLTM5MSw3ICszOTEsOSBAQCBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBvbGRfcG1kO1xuIH1cbiBcbi1pbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4rI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuK1xuK2ludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4ge1xuIFxuIFx0aWYgKCFtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xNk1fUEFHRSkpXG5AQCAtNDIwLDkgKzQyMiw3IEBAIGludCBoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZClcbiBcbiBcdHJldHVybiAxO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UpO1xuLVxuLSNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbitFWFBPUlRfU1lNQk9MX0dQTChoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKTtcbiBcbiAjaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IGU4ODI2NjNhNThlNzc2Li4yNGVlOTBjN2U5YmY2YiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0xODI1LDEzICsxODI1LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcbiB7XG4gXHRyZXR1cm4gcG1kX2xlYWYocG1kKTtcbiB9XG4rI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxuLXN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxuKyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXG4rc3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuIHtcbiBcdHJldHVybiBjcHVfaGFzX2VkYXQxKCkgPyAxIDogMDtcbiB9XG4tI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9UQUJMRV9DSEVDS1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggOGUwMDE4ZmFkZDE0ZTYuLjNjNmE2NDFlNmMyMTFkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0zMDYsMTIgKzMwNiw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF90cmFuc19odWdlKHB1ZF90IHB1ZClcbiB9XG4gI2VuZGlmXG4gXG4tI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXG4tc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4te1xuLVx0cmV0dXJuIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QU0UpO1xuLX1cbi1cbiAjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfc3BlY2lhbChwbWRfdCBwbWQpXG4ge1xuQEAgLTMzNyw2ICszMzEsMTIgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtzcGVjaWFsKHB1ZF90IHB1ZClcbiAjZW5kaWZcdC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVAgKi9cbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4rI2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcbitzdGF0aWMgaW5saW5lIGludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4re1xuK1x0cmV0dXJuIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QU0UpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zZXRfZmxhZ3MocHRlX3QgcHRlLCBwdGV2YWxfdCBzZXQpXG4ge1xuIFx0cHRldmFsX3QgdiA9IG5hdGl2ZV9wdGVfdmFsKHB0ZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaCBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcbmluZGV4IDgxZTRhZjQ5ZTM5YzEwLi4zNTc0NGZmNjU5MmFjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcbisrKyBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcbkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxuIHtcbiBcdGlmIChhbGlnbiA9PSBQVURfU0laRSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCkpXG4gXHRcdHJldHVybiB0cnVlO1xuLVx0aWYgKGFsaWduID09IFBNRF9TSVpFIFx1MDAyNlx1MDAyNiBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbitcdGlmIChhbGlnbiA9PSBQTURfU0laRSBcdTAwMjZcdTAwMjYgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGlmIChhbGlnbiA9PSBQQUdFX1NJWkUpXG4gXHRcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMgYi9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jXG5pbmRleCA4ZmE5YzE2YWJhN2VhMC4uNDU3ZWI1NGU3YWI2ZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jXG4rKysgYi9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jXG5AQCAtOTQsNyArOTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyAqbmRfcGZuX3N1cHBvcnRlZF9hbGlnbm1lbnRzKHVuc2lnbmVkIGxvbmcgKmFsaWdubWVudHMpXG4gXG4gXHRhbGlnbm1lbnRzWzBdID0gUEFHRV9TSVpFO1xuIFxuLVx0aWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkge1xuIFx0XHRhbGlnbm1lbnRzWzFdID0gSFBBR0VfUE1EX1NJWkU7XG4gXHRcdGlmIChoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkpXG4gXHRcdFx0YWxpZ25tZW50c1syXSA9IEhQQUdFX1BVRF9TSVpFO1xuQEAgLTEwOSw3ICsxMTAsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyAqbmRfcGZuX3N1cHBvcnRlZF9hbGlnbm1lbnRzKHVuc2lnbmVkIGxvbmcgKmFsaWdubWVudHMpXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbmRfcGZuX2RlZmF1bHRfYWxpZ25tZW50KHZvaWQpXG4ge1xuIFxuLVx0aWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdHJldHVybiBIUEFHRV9QTURfU0laRTtcbiBcdHJldHVybiBQQUdFX1NJWkU7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbmluZGV4IGM3NDVmN2FkMjI5ODdmLi41MjVhY2VhMmViNTljYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuQEAgLTQ3LDcgKzQ3LDYgQEAgdm1fZmF1bHRfdCB2bWZfaW5zZXJ0X2ZvbGlvX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdGJvb2wgd3JpdGUpO1xuIFxuIGVudW0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZyB7XG4tXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRCxcbiBcdFRSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcsXG4gXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHLFxuIFx0VFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0RJUkVDVF9GTEFHLFxuQEAgLTM4MywxMiArMzgyLDYgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gbW1fZmxhZ3NfdGVzdChNTUZfRElTQUJMRV9USFBfRVhDRVBUX0FEVklTRUQsIHZtYS1cdTAwM2V2bV9tbSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfZGlzYWJsZWRfYnlfaHcodm9pZClcbi17XG4tXHQvKiBJZiB0aGUgaGFyZHdhcmUvZmlybXdhcmUgbWFya2VkIGh1Z2VwYWdlIHN1cHBvcnQgZGlzYWJsZWQuICovXG4tXHRyZXR1cm4gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRCk7XG4tfVxuLVxuIHVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbmluZGV4IDhjMDkzYzExOWU1YTgyLi5kNTcxZDE2MWE4NGIzYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvanVtcF9sYWJlbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX3RhYmxlX2NoZWNrLmhcdTAwM2VcbiBcbkBAIC0yMzEzLDYgKzIzMTQsMjEgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwZ3RhYmxlX2xldmVsX3RvX3N0cihlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gXHR9XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfTU1VXG4rREVDTEFSRV9TVEFUSUNfS0VZX1RSVUUoX19hcmNoX2hhc19wbWRfbGVhdmVzX2tleSk7XG4rc3RhdGljIGlubGluZSBib29sIHBndGFibGVfaGFzX3BtZF9sZWF2ZXModm9pZClcbit7XG4rXHRyZXR1cm4gc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2X19hcmNoX2hhc19wbWRfbGVhdmVzX2tleSk7XG4rfVxuK3ZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZCk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KHZvaWQpIHsgfVxuKyNlbmRpZlxuK1xuICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqL1xuIFxuICNpZiAhZGVmaW5lZChNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQ09ORklHXzY0QklUKVxuQEAgLTIzMjgsOCArMjM0NCw4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGd0YWJsZV9sZXZlbF90b19zdHIoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuICNlbmRpZlxuICNlbmRpZlxuIFxuLSNpZm5kZWYgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXG4tI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBJU19CVUlMVElOKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbisjaWZuZGVmIGFyY2hfaGFzX3BtZF9sZWF2ZXNcbisjZGVmaW5lIGFyY2hfaGFzX3BtZF9sZWF2ZXMoKSBJU19CVUlMVElOKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4gI2VuZGlmXG4gXG4gI2lmbmRlZiBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlXG5kaWZmIC0tZ2l0IGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jIGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jXG5pbmRleCAyODc1ZmQyMmQ3YmIwMi4uMjUwMzhiNzRjN2JjNjcgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcbisrKyBiL21tL2RlYnVnX3ZtX3BndGFibGUuY1xuQEAgLTE3Nyw3ICsxNzcsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpXG4gXHR1bnNpZ25lZCBsb25nIHZhbCA9IGlkeCwgKnB0ciA9IFx1MDAyNnZhbDtcbiBcdHBtZF90IHBtZDtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4rXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cHJfZGVidWcoXCJWYWxpZGF0aW5nIFBNRCBiYXNpYyAoJXBHdilcXG5cIiwgcHRyKTtcbkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9hZHZhbmNlZF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0cG1kX3QgcG1kO1xuIFx0dW5zaWduZWQgbG9uZyB2YWRkciA9IGFyZ3MtXHUwMDNldmFkZHI7XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuK1x0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHBhZ2UgPSAoYXJncy1cdTAwM2VwbWRfcGZuICE9IFVMT05HX01BWCkgPyBwZm5fdG9fcGFnZShhcmdzLVx1MDAzZXBtZF9wZm4pIDogTlVMTDtcbkBAIC0yODMsNyArMjgzLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4ge1xuIFx0cG1kX3QgcG1kO1xuIFxuLVx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcIlZhbGlkYXRpbmcgUE1EIGxlYWZcXG5cIik7XG5AQCAtNjg4LDcgKzY4OCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfUFRFX1BST1ROT05FKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcIlZhbGlkYXRpbmcgUE1EIHByb3Rub25lXFxuXCIpO1xuQEAgLTczNyw3ICs3MzcsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdGlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4rXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cHJfZGVidWcoXCJWYWxpZGF0aW5nIFBNRCBzb2Z0IGRpcnR5XFxuXCIpO1xuQEAgLTc1NCw3ICs3NTQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0ICAgICFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUykpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4rXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cHJfZGVidWcoXCJWYWxpZGF0aW5nIFBNRCBzd2FwIHNvZnQgZGlydHlcXG5cIik7XG5AQCAtODI1LDcgKzgyNSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdHN3cF9lbnRyeV90IGFyY2hfZW50cnk7XG4gXHRwbWRfdCBwbWQxLCBwbWQyO1xuIFxuLVx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcIlZhbGlkYXRpbmcgUE1EIHN3YXBcXG5cIik7XG5AQCAtOTA2LDcgKzkwNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4ge1xuIFx0cG1kX3QgcG1kO1xuIFxuLVx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcIlZhbGlkYXRpbmcgUE1EIGJhc2VkIFRIUFxcblwiKTtcbkBAIC05OTcsNyArOTk3LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGRlc3Ryb3lfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgYXJncy1cdTAwM2VwbWRfcGZuICE9IFVMT05HX01BWCkge1xuIFx0XHRkZWJ1Z192bV9wZ3RhYmxlX2ZyZWVfaHVnZV9wYWdlKGFyZ3MsIGFyZ3MtXHUwMDNlcG1kX3BmbiwgSFBBR0VfUE1EX09SREVSKTtcbiBcdFx0YXJncy1cdTAwM2VwbWRfcGZuID0gVUxPTkdfTUFYO1xuQEAgLTEyNDksNyArMTI0OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkge1xuK1x0ICAgIHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkge1xuIFx0XHRwYWdlID0gZGVidWdfdm1fcGd0YWJsZV9hbGxvY19odWdlX3BhZ2UoYXJncywgSFBBR0VfUE1EX09SREVSKTtcbiBcdFx0aWYgKHBhZ2UpIHtcbiBcdFx0XHRhcmdzLVx1MDAzZXBtZF9wZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMDRlOGE2YjU1MzQzNWYuLjM4NWEzMDVlN2FmNjUxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTEyOSw2ICsxMjksMTUgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGVsc2VcbiBcdFx0c3VwcG9ydGVkX29yZGVycyA9IFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVDtcbiBcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBQTUQgbGVhdmVzLCBhc3N1bWUgZm9yXG4rXHRcdCAqIG5vdyB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQgUFVEIGxlYXZlcyBhbmQgZGlzYWJsZVxuK1x0XHQgKiBib3RoIGZvbGlvIG9yZGVycy5cbitcdFx0ICovXG4rXHRcdHN1cHBvcnRlZF9vcmRlcnMgXHUwMDI2PSB+KEJJVChQTURfT1JERVIpIHwgQklUKFBVRF9PUkRFUikpO1xuK1x0fVxuK1xuIFx0b3JkZXJzIFx1MDAyNj0gc3VwcG9ydGVkX29yZGVycztcbiBcdGlmICghb3JkZXJzKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMzYsNyArMTQ1LDcgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmICghdm1hLVx1MDAzZXZtX21tKVx0XHQvKiB2ZHNvICovXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHRocF9kaXNhYmxlZF9ieV9odygpIHx8IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgZm9yY2VkX2NvbGxhcHNlKSlcbitcdGlmICh2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIGZvcmNlZF9jb2xsYXBzZSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Lyoga2h1Z2VwYWdlZCBkb2Vzbid0IGNvbGxhcHNlIERBWCB2bWEsIGJ1dCBwYWdlIGZhdWx0IGlzIGZpbmUuICovXG5AQCAtODc0LDcgKzg4Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxuIFx0ICogZGlzYWJsZSBhbGwgb3RoZXIgc2l6ZXMuIHBvd2VycGMncyBQTURfT1JERVIgaXNuJ3QgYSBjb21waWxlLXRpbWVcbiBcdCAqIGNvbnN0YW50IHNvIHdlIGhhdmUgdG8gZG8gdGhpcyBoZXJlLlxuIFx0ICovXG4tXHRpZiAoIWFub25fb3JkZXJzX2NvbmZpZ3VyZWQpXG4rXHRpZiAoIWFub25fb3JkZXJzX2NvbmZpZ3VyZWQgXHUwMDI2XHUwMDI2IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0aHVnZV9hbm9uX29yZGVyc19pbmhlcml0ID0gQklUKFBNRF9PUkRFUik7XG4gXG4gXHQqaHVnZXBhZ2Vfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoXCJ0cmFuc3BhcmVudF9odWdlcGFnZVwiLCBtbV9rb2JqKTtcbkBAIC04OTYsNiArOTA1LDE1IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxuIFx0fVxuIFxuIFx0b3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTiB8IFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVDtcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBQTUQgbGVhdmVzLCBhc3N1bWUgZm9yXG4rXHRcdCAqIG5vdyB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQgUFVEIGxlYXZlcyBhbmQgZGlzYWJsZVxuK1x0XHQgKiBib3RoIGZvbGlvIG9yZGVycy5cbitcdFx0ICovXG4rXHRcdG9yZGVycyBcdTAwMjY9IH4oQklUKFBNRF9PUkRFUikgfCBCSVQoUFVEX09SREVSKSk7XG4rXHR9XG4rXG4gXHRvcmRlciA9IGhpZ2hlc3Rfb3JkZXIob3JkZXJzKTtcbiBcdHdoaWxlIChvcmRlcnMpIHtcbiBcdFx0dGhwc2l6ZSA9IHRocHNpemVfY3JlYXRlKG9yZGVyLCAqaHVnZXBhZ2Vfa29iaik7XG5AQCAtMTAxMCwxMSArMTAyOCw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXQodm9pZClcbiBcdGludCBlcnI7XG4gXHRzdHJ1Y3Qga29iamVjdCAqaHVnZXBhZ2Vfa29iajtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpIHtcbi1cdFx0dHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgPSAxIFx1MDAzY1x1MDAzYyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRDtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4gXHQvKlxuIFx0ICogaHVnZXBhZ2VzIGNhbid0IGJlIGFsbG9jYXRlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yXG4gXHQgKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA1NmIyNDQ1NTJmMTM5NC4uZjM5ZDkzODM0OTRlNjkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC0xNjQsNiArMTY0LDE1IEBAIF9fc2V0dXAoXCJub3JhbmRtYXBzXCIsIGRpc2FibGVfcmFuZG1hcHMpO1xuIFxuIHVuc2lnbmVkIGxvbmcgaGlnaGVzdF9tZW1tYXBfcGZuIF9fcmVhZF9tb3N0bHk7XG4gXG4rREVGSU5FX1NUQVRJQ19LRVlfVFJVRShfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcbitFWFBPUlRfU1lNQk9MKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xuK1xuK3ZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZClcbit7XG4rXHRpZiAoIWFyY2hfaGFzX3BtZF9sZWF2ZXMoKSlcbitcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNl9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xuK31cbitcbiB2b2lkIG1tX3RyYWNlX3Jzc19zdGF0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgbWVtYmVyKVxuIHtcbiBcdHRyYWNlX3Jzc19zdGF0KG1tLCBtZW1iZXIpO1xuQEAgLTU1NjcsNyArNTU3Niw3IEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhXG4gXHQgKiBQTUQgbWFwcGluZ3MgaWYgVEhQcyBhcmUgZGlzYWJsZWQuIEFzIHdlIGFscmVhZHkgaGF2ZSBhIFRIUCxcbiBcdCAqIGJlaGF2ZSBhcyBpZiB3ZSBhcmUgZm9yY2luZyBhIGNvbGxhcHNlLlxuIFx0ICovXG4tXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncyxcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpIHx8IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsXG4gXHRcdFx0XHRcdFx0ICAgICAvKiBmb3JjZWRfY29sbGFwc2U9Ki8gdHJ1ZSkpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCA3MTFmODIxZjdiM2M3Mi4uZGNjMDcyZGI0NTU4NzIgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTI2OTksNiArMjY5OSw3IEBAIHZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxuIHtcbiBcdGFyY2hfbW1fcHJlaW5pdCgpO1xuIFx0aW5pdF96ZXJvX3BhZ2VfcGZuKCk7XG4rXHRwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KCk7XG4gXG4gXHQvKiBJbml0aWFsaXphdGlvbnMgcmVseWluZyBvbiBTTVAgc2V0dXAgKi9cbiBcdEJVSUxEX0JVR19PTihNQVhfWk9ORUxJU1RTIFx1MDAzZSAyKTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTA3MTE3NzA1OWE5NjQuLjAwOGRmNTU4YWYyMzdlIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTY4OSw3ICs2ODksNyBAQCBzdGF0aWMgaW50IHNobWVtX3BhcnNlX2h1Z2UoY29uc3QgY2hhciAqc3RyKVxuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBodWdlICE9IFNITUVNX0hVR0VfTkVWRVIgXHUwMDI2XHUwMDI2IGh1Z2UgIT0gU0hNRU1fSFVHRV9ERU5ZKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0xMjg3LDYgKzEyODcsNyBAQCBzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4gXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuK1x0dW5zaWduZWQgaW50IG9yZGVycztcbiBcbiBcdC8qIEZhc3QtcGF0aCBoaW50OyByZWNhbGMgdW5kZXIgaW5mby1cdTAwM2Vsb2NrIGNvcnJlY3RzIGFueSBzdGFsZSByZWFkLiAqL1xuIFx0aWYgKGRhdGFfcmFjZShpbmZvLVx1MDAzZWFsbG9jZWQgLSBpbmZvLVx1MDAzZXN3YXBwZWQgIT0gaW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZW5ycGFnZXMpKVxuQEAgLTEzMDMsOCArMTMwNCwxMSBAQCBzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0U1RBVFhfQVRUUl9OT0RVTVApO1xuIFx0Z2VuZXJpY19maWxsYXR0cihpZG1hcCwgcmVxdWVzdF9tYXNrLCBpbm9kZSwgc3RhdCk7XG4gXG4tXHRpZiAoc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChpbm9kZSwgMCwgMCwgZmFsc2UsIE5VTEwsIDApKVxuLVx0XHRzdGF0LVx1MDAzZWJsa3NpemUgPSBIUEFHRV9QTURfU0laRTtcbitcdG9yZGVycyA9IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoaW5vZGUsIDAsIDAsIGZhbHNlLCBOVUxMLCAwKTtcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuK1x0XHRvcmRlcnMgXHUwMDI2PSB+QklUKFBNRF9PUkRFUik7XG4rXHRpZiAob3JkZXJzKVxuK1x0XHRzdGF0LVx1MDAzZWJsa3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIGhpZ2hlc3Rfb3JkZXIob3JkZXJzKTtcbiBcbiBcdGlmIChyZXF1ZXN0X21hc2sgXHUwMDI2IFNUQVRYX0JUSU1FKSB7XG4gXHRcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfQlRJTUU7XG5AQCAtMTgyNiwxNiArMTgzMCwxOSBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0dW5zaWduZWQgbG9uZyBtYXNrID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XG4gXHR1bnNpZ25lZCBsb25nIHdpdGhpbl9zaXplX29yZGVycyA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc193aXRoaW5fc2l6ZSk7XG4gXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMDtcbi1cdHVuc2lnbmVkIGludCBnbG9iYWxfb3JkZXJzO1xuK1x0dW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnMsIGRpc2FibGVkX29yZGVycyA9IDA7XG4gXG4tXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSBcdTAwMjZcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSkpXG4rXHRpZiAodm1hIFx1MDAyNlx1MDAyNiB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIHNobWVtX2h1Z2VfZm9yY2UpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuK1x0XHRkaXNhYmxlZF9vcmRlcnMgPSBCSVQoUE1EX09SREVSKTtcbitcbiBcdGdsb2JhbF9vcmRlcnMgPSBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKGlub2RlLCBpbmRleCwgd3JpdGVfZW5kLFxuIFx0XHRcdFx0XHRcdCAgc2htZW1faHVnZV9mb3JjZSwgdm1hLCB2bV9mbGFncyk7XG4gXHQvKiBUbXBmcyBodWdlIHBhZ2VzIGFsbG9jYXRpb24gKi9cbiBcdGlmICghdm1hIHx8ICF2bWFfaXNfYW5vbl9zaG1lbSh2bWEpKVxuLVx0XHRyZXR1cm4gZ2xvYmFsX29yZGVycztcbitcdFx0cmV0dXJuIGdsb2JhbF9vcmRlcnMgXHUwMDI2IH5kaXNhYmxlZF9vcmRlcnM7XG4gXG4gXHQvKlxuIFx0ICogRm9sbG93aW5nIHRoZSAnZGVueScgc2VtYW50aWNzIG9mIHRoZSB0b3AgbGV2ZWwsIGZvcmNlIHRoZSBodWdlXG5AQCAtMTg0OSw3ICsxODU2LDcgQEAgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCAqIG1lYW5zIG5vbi1QTUQgc2l6ZWQgVEhQIGNhbiBub3Qgb3ZlcnJpZGUgJ2h1Z2UnIG1vdW50IG9wdGlvbiBub3cuXG4gXHQgKi9cbiBcdGlmIChzaG1lbV9odWdlID09IFNITUVNX0hVR0VfRk9SQ0UpXG4tXHRcdHJldHVybiBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfaW5oZXJpdCk7XG4rXHRcdHJldHVybiBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfaW5oZXJpdCkgXHUwMDI2IH5kaXNhYmxlZF9vcmRlcnM7XG4gXG4gXHQvKiBBbGxvdyBtVEhQIHRoYXQgd2lsbCBiZSBmdWxseSB3aXRoaW4gaV9zaXplLiAqL1xuIFx0bWFzayB8PSBzaG1lbV9nZXRfb3JkZXJzX3dpdGhpbl9zaXplKGlub2RlLCB3aXRoaW5fc2l6ZV9vcmRlcnMsIGluZGV4LCAwKTtcbkBAIC0xODYwLDYgKzE4NjcsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKGdsb2JhbF9vcmRlcnMgXHUwMDNlIDApXG4gXHRcdG1hc2sgfD0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQpO1xuIFxuK1x0bWFzayBcdTAwMjY9IH5kaXNhYmxlZF9vcmRlcnM7XG4gXHRyZXR1cm4gVEhQX09SREVSU19BTExfRklMRV9ERUZBVUxUIFx1MDAyNiBtYXNrO1xuIH1cbiBcbkBAIC00NTg3LDggKzQ1OTUsNyBAQCBzdGF0aWMgaW50IHNobWVtX3BhcnNlX29uZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuIFx0Y2FzZSBPcHRfaHVnZTpcbiBcdFx0Y3R4LVx1MDAzZWh1Z2UgPSByZXN1bHQudWludF8zMjtcbiBcdFx0aWYgKGN0eC1cdTAwM2VodWdlICE9IFNITUVNX0hVR0VfTkVWRVIgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpKVxuK1x0XHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiBcdFx0XHRnb3RvIHVuc3VwcG9ydGVkX3BhcmFtZXRlcjtcbiBcdFx0Y3R4LVx1MDAzZXNlZW4gfD0gU0hNRU1fU0VFTl9IVUdFO1xuIFx0XHRicmVhaztcbkBAIC01MzgzLDcgKzUzOTAsNyBAQCB2b2lkIF9faW5pdCBzaG1lbV9pbml0KHZvaWQpXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuLVx0aWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNiBzaG1lbV9odWdlIFx1MDAzZSBTSE1FTV9IVUdFX0RFTlkpXG4rXHRpZiAoc2htZW1faHVnZSBcdTAwM2UgU0hNRU1fSFVHRV9ERU5ZKVxuIFx0XHRTSE1FTV9TQihzaG1fbW50LVx1MDAzZW1udF9zYiktXHUwMDNlaHVnZSA9IHNobWVtX2h1Z2U7XG4gXHRlbHNlXG4gXHRcdHNobWVtX2h1Z2UgPSBTSE1FTV9IVUdFX05FVkVSOyAvKiBqdXN0IGluIGNhc2UgaXQgd2FzIHBhdGNoZWQgKi9cbkBAIC01MzkyLDcgKzUzOTksNyBAQCB2b2lkIF9faW5pdCBzaG1lbV9pbml0KHZvaWQpXG4gXHQgKiBEZWZhdWx0IHRvIHNldHRpbmcgUE1ELXNpemVkIFRIUCB0byBpbmhlcml0IHRoZSBnbG9iYWwgc2V0dGluZyBhbmRcbiBcdCAqIGRpc2FibGUgYWxsIG90aGVyIG11bHRpLXNpemUgVEhQcy5cbiBcdCAqL1xuLVx0aWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZClcbitcdGlmICghc2htZW1fb3JkZXJzX2NvbmZpZ3VyZWQgXHUwMDI2XHUwMDI2IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0aHVnZV9zaG1lbV9vcmRlcnNfaW5oZXJpdCA9IEJJVChIUEFHRV9QTURfT1JERVIpO1xuICNlbmRpZlxuIFx0cmV0dXJuO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MTUuMDMyNzA5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5Nzk3MDExMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSFAgU3VwcG9ydCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IHdlIGhhbmRsZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIHN1cHBvcnQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyByZW5hbWluZyBgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKClgIHRvIGVpdGhlciBgYXJjaF9oYXNfcG1kX2xlYXZlcygpYCBvciBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYC4gVGhpcyBpc24ndCBqdXN0IGEgbmFtZSBjaGFuZ2U7IGl0J3MgYWxzbyBpbXBhY3RpbmcgaG93IHdlIGRpc2FibGUgVEhQIHdoZW4gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IGl0LCBpbnRyb2R1Y2luZyBhIHN0YXRpYyBrZXkgY2FsbGVkIGBfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5YC5cblxuVGhpcyByaXBwbGVzIHRocm91Z2ggcXVpdGUgYSBmZXcgY3JpdGljYWwgYXJlYXM6IGBzaG1lbS5jYCwgYGh1Z2VfbWVtb3J5LmNgLCBgbWVtb3J5LmNgLCBgbW1faW5pdC5jYCwgYGRlYnVnX3ZtX3BndGFibGUuY2AsIGBwZm5fZGV2cy5jYCwgYGRheC1wcml2YXRlLmhgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGZvciBtaXBzLCBwb3dlcnBjLCBzMzkwLCBhbmQgeDg2LiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYHNobWVtYCwgYGRheGAsIGFuZCBgbnZkaW1tYCBpcyBhIGJpZyBkZWFsOyB0aG9zZSBhcmUgYWxsIGludGltYXRlbHkgbGlua2VkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwZXJmb3JtYW5jZS5cblxuU28sIHRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGF0IGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgIGlzIG5vdyB0aGUgZ2F0ZWtlZXBlciBmb3IgVEhQIHN1cHBvcnQsIGFuZCBpdCdzIGJlaW5nIHVzZWQgdG8gZmlsdGVyIGNlcnRhaW4gb3JkZXIgc2l6ZXMsIGFzIHNlZW4gaW4gbW9kaWZpY2F0aW9ucyB0byBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBhbmQgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gRXNzZW50aWFsbHksIGlmIGAhcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYCwgY2VydGFpbiBtZW1vcnkgb3JkZXIgc2l6ZXMgYXJlIGV4Y2x1ZGVkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGl0J3MgY2xlYXIgdGhpcyBpcyBhIHN0YXRpYyBrZXkgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIGhvdyB3ZeKAmXJlIGRlY2lkaW5nIGF0IHJ1bnRpbWUgd2hldGhlciB0byBlbmFibGUgaXQuIEkgc2VlIHRoZSBgREVDTEFSRV9TVEFUSUNfS0VZX1RSVUVgIGFuZCB0aGUgbG9naWMgdGhhdCBzZWVtcyB0byBkaXNhYmxlIHRoZSBrZXkgaWYgdGhlIGFyY2hpdGVjdHVyZSBkb2Vzbid0IGhhdmUgUE1EIGxlYXZlcyBpbiBgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCgpYC4gVGhpcyBsb29rcyBmdW5jdGlvbmFsIGFuZCB0aGUgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBRRU1VL0dDRSwgc28gSSBjYW4gdGVzdCBpdC5cblxuQWxyaWdodCwgdGltZSB0byBwcmlvcml0aXplIHNvbWUgZnV6emluZyB0YXJnZXRzLiBCYXNlZCBvbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgZnVuY3Rpb25zIGxpa2UgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBzaG1lbV9nZXRhdHRyYCwgYHNobWVtX3BhcnNlX29uZWAsIGBzaG1lbV9wYXJzZV9odWdlYCwgYW5kIGBkb19zZXRfcG1kYCBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwuIE5vdywgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGU7IEkga25vdyBpdCdzIGludm9rZWQgZHVyaW5nIHNobWVtIHBhZ2UgZmF1bHRzIGFuZCBhbGxvY2F0aW9uLiBBbmQgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBpcyB1c2VkIGR1cmluZyBUSFAgYWxsb2NhdGlvbi4gTGV0J3Mgc2VlIGhvdyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGRlZmluZWQuIEdvb2QuIE5vdywgbGV04oCZcyBkaWcgYSBiaXQgZGVlcGVyIGFuZCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCBhbmQgd2hlcmUgaXTigJlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjM5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MjQuMDEyNDEyMjQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODEwMjI1ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5Ny1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTg6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTktXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMTk9dW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDEtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzQyOlxcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0My19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNz1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMTMtXFxubW0vaHVnZV9tZW1vcnkuYzoxMTQ6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTExNS1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MjYuMDkzNDM5NDQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2NzY1NTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCB2YXJpYWJsZS4gSXQncyBhIGNyaXRpY2FsIGtub2Igd2hlbiB0dW5pbmcgc2hhcmVkIG1lbW9yeSBiZWhhdmlvciwgZXNwZWNpYWxseSBvbiBzeXN0ZW1zIHdpdGggTlVNQSBhcmNoaXRlY3R1cmVzIG9yIHRob3NlIG5lZWRpbmcgdG8gc3F1ZWV6ZSBldmVyeSBsYXN0IGJpdCBvZiBwZXJmb3JtYW5jZSBvdXQgb2YgbGFyZ2UgbWVtb3J5IGFsbG9jYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzZXR0aW5nLiBJIG5lZWQgdG8gZXN0YWJsaXNoIHdoYXQncyBwZXJtaXNzaWJsZSwgZ2l2ZW4gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBpbnRlbmRlZCBhcHBsaWNhdGlvbiBwcm9maWxlLlxuXG5JJ20gdGhpbmtpbmcsIFwiSXMgdGhpcyBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSB3b3JrbG9hZD9cIiBBcmUgd2UgdW5kZXItdXRpbGl6aW5nIHBvdGVudGlhbCBodWdlIHBhZ2UgYWxsb2NhdGlvbnMsIG9yIHBlcmhhcHMgYmVpbmcgb3Zlcmx5IGFnZ3Jlc3NpdmUgYW5kIHJpc2tpbmcgZnJhZ21lbnRhdGlvbiBvciBvdGhlciBhZHZlcnNlIHNpZGUgZWZmZWN0cz8gRGVwZW5kaW5nIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIG1heWJlIEkgbmVlZCB0byBjaGVjayB0aGUgT1Mga2VybmVsIHBhcmFtZXRlcnMsIGFuZCB0aGUgYXBwbGljYXRpb24ncyBtZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucywgdG8gbWFrZSBhIGRlY2lzaW9uIGFib3V0IG15IG5leHQgc3RlcHMuXG5cbkkgc2hvdWxkIGFsc28gY29uc2lkZXIgd2hldGhlciB0aGUgY3VycmVudCBzZXR0aW5ncyBhcmUgbGVhZGluZyB0byBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4gQXJlIHdlIHNlZWluZyBzaWduaWZpY2FudCBwYWdlIGZhdWx0cywgaW5jcmVhc2VkIG1lbW9yeSBsYXRlbmNpZXMsIG9yIGFueSBvdGhlciBzaWducyB0aGF0IHRoZSBtZW1vcnkgc3Vic3lzdGVtIGlzbid0IHBlcmZvcm1pbmcgb3B0aW1hbGx5PyBCYXNlZCBvbiB0aGlzIGRpYWdub3N0aWMsIEkgaGF2ZSB0byBlbnN1cmUgdGhlIHNldHRpbmdzIGFyZSBhZGp1c3RlZCB0byBhbGxvdyBmb3IgbWF4aW11bSBlZmZpY2llbmN5LCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzU3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MjkuODYxMDk3ODg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDQwNTM4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0xMjY9aW50IHNobWVtX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMjgtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTI5OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzMC1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0xMzI9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLSNlbHNlXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEzNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzNS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTE0PXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE5MC1cXHRpZiAoIWluX3BmIFxcdTAwMjZcXHUwMDI2IHNobWVtX2ZpbGUodm1hLVxcdTAwM2V2bV9maWxlKSlcXG5tbS9odWdlX21lbW9yeS5jOjE5MTpcXHRcXHRyZXR1cm4gb3JkZXJzIFxcdTAwMjYgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLVxcdTAwM2V2bV9maWxlKSxcXG5tbS9odWdlX21lbW9yeS5jLTE5Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICB2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxcbi0tXFxubW0vc2htZW0uYz0xODA5PWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL3NobWVtLmMtMTgyNS1cXG5tbS9zaG1lbS5jOjE4MjY6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5tbS9zaG1lbS5jLTE4MjctXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jPTI0MjI9c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI1MDMtXFx0LyogRmluZCBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHNobWVtIGFuZCB0bXBmcy4gKi9cXG5tbS9zaG1lbS5jOjI1MDQ6XFx0b3JkZXJzID0gc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGlub2RlLCB2bWEsIGluZGV4LCB3cml0ZV9lbmQsIGZhbHNlKTtcXG5tbS9zaG1lbS5jLTI1MDUtXFx0aWYgKG9yZGVycyBcXHUwMDNlIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MzEuODA1MTYxNzQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwOTY5MjM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHNobWVtX2dldGF0dHJgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHNobWVtX2dldGF0dHJgLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBzbyBsZXQncyBnZXQgcmlnaHQgaW50byBpdCwgd2hhdCdzIGl0cyBpbXBsZW1lbnRhdGlvbiBsb29raW5nIGxpa2U/IEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24ncyBkZWZpbml0aW9uLCBwb3RlbnRpYWwgcGl0ZmFsbHMsIGFuZCBob3cgaXQgaGFuZGxlcyB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMuIEknbSBnb2luZyB0byB3YW50IHRvIHZlcmlmeSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50LiBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dD8gUGVyaGFwcyB0aGVyZSBhcmUgYXNwZWN0cyB0aGF0IG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBhbmQgSSB3aWxsIHdhbnQgdG8gcmVhZCB0aGUgZG9jdW1lbnRhdGlvbi4gSSBjYW4gY3Jvc3MtcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSByZXN0IG9mIHRoZSBzaG1lbSBjb2RlYmFzZS4gSSBzaG91bGQgYWxzbyBjaGVjayBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMTYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMDozNC41MTQ4NTU4MDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4Mzc4Nzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9nZXRhdHRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTI4Mj1FWFBPUlRfU1lNQk9MX0dQTChzaG1lbV90cnVuY2F0ZV9yYW5nZSk7XFxubW0vc2htZW0uYy0xMjgzLVxcbm1tL3NobWVtLmM6MTI4NDpzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxubW0vc2htZW0uYy0xMjg1LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LFxcbi0tXFxubW0vc2htZW0uYz00MzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zaG9ydF9zeW1saW5rX29wZXJhdGlvbnMgPSB7XFxubW0vc2htZW0uYzo0MzMwOlxcdC5nZXRhdHRyXFx0PSBzaG1lbV9nZXRhdHRyLFxcbm1tL3NobWVtLmMtNDMzMS1cXHQuc2V0YXR0clxcdD0gc2htZW1fc2V0YXR0cixcXG4tLVxcbm1tL3NobWVtLmM9NDMzOD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbm1tL3NobWVtLmM6NDMzOTpcXHQuZ2V0YXR0clxcdD0gc2htZW1fZ2V0YXR0cixcXG5tbS9zaG1lbS5jLTQzNDAtXFx0LnNldGF0dHJcXHQ9IHNobWVtX3NldGF0dHIsXFxuLS1cXG5tbS9zaG1lbS5jPTUxNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2lub2RlX29wZXJhdGlvbnMgPSB7XFxubW0vc2htZW0uYzo1MTc1OlxcdC5nZXRhdHRyXFx0PSBzaG1lbV9nZXRhdHRyLFxcbm1tL3NobWVtLmMtNTE3Ni1cXHQuc2V0YXR0clxcdD0gc2htZW1fc2V0YXR0cixcXG4tLVxcbm1tL3NobWVtLmM9NTE4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxubW0vc2htZW0uYy01MTg2LSNpZmRlZiBDT05GSUdfVE1QRlNcXG5tbS9zaG1lbS5jOjUxODc6XFx0LmdldGF0dHJcXHQ9IHNobWVtX2dldGF0dHIsXFxubW0vc2htZW0uYy01MTg4LVxcdC5jcmVhdGVcXHRcXHQ9IHNobWVtX2NyZWF0ZSxcXG4tLVxcbm1tL3NobWVtLmM9NTIxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xcbm1tL3NobWVtLmM6NTIxMjpcXHQuZ2V0YXR0clxcdD0gc2htZW1fZ2V0YXR0cixcXG5tbS9zaG1lbS5jLTUyMTMtI2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMDozNi4xOTg2NDgxMzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM5NTI3OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRlY29uc3RydWN0aW5nIGBkb19zZXRfcG1kYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgbWluZCBpbW1lZGlhdGVseSB3ZW50IHRvIHRoZSBmdW5jdGlvbiBgZG9fc2V0X3BtZGAuIE5vdywgSSBuZWVkIHRvIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGhhcHBlbmluZy4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgXCJzZXRcIiBvcGVyYXRpb24sIGEgZnVuZGFtZW50YWwgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqcHJlY2lzZWx5KiB3aGF0IHRoZSBcIlBNRFwiIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0IOKAkyBhIFBhZ2UgTWlkZGxlIERpcmVjdG9yeSBlbnRyeSwgcmlnaHQ/IElzIHRoaXMgYWJvdXQgc2V0dGluZyBhIG5ldyBtYXBwaW5nLCB1cGRhdGluZyBleGlzdGluZyBtZXRhZGF0YSwgb3IgZGVhbGluZyB3aXRoIHNvbWUgZm9ybSBvZiBtZW1vcnkgYWxsb2NhdGlvbiBvciBpbnZhbGlkYXRpb24/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgbnVhbmNlcyBvZiB0aGUgYXJjaGl0ZWN0dXJlLCBvZiBjb3Vyc2UuIElzIHRoZXJlIGFueSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGFuZCBmaW5kIHdoYXQgaXTigJlzIGNhbGxlZCB3aXRoPyBXaGF0IGtpbmQgb2YgYXJndW1lbnRzIGFyZSB3ZSBwYXNzaW5nLCBhbmQgd2hhdCdzIHRoZSBleHBlY3RlZCBiZWhhdmlvcj8gSSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGRlY2xhcmF0aW9uLCBpbXBsZW1lbnRhdGlvbiwgYW5kIGFueSByZWxhdGVkIGNvbW1lbnRzIHRvIHF1aWNrbHkgZ2V0IG15IGJlYXJpbmdzIGFuZCBhbnRpY2lwYXRlIGFueSBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBhbHNvIGhhdmUgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIHdhbnQgYSBjbGVhciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA0MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAwOjM5LjYzODE3ODcwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTI4NzE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zZXRfcG1kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD0yMDMxPXN0YXRpYyBpbmxpbmUgcHRlX3QgbWF5YmVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIwMzctXFxuaW5jbHVkZS9saW51eC9tbS5oOjIwMzg6dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTIwMzktdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZmlsZW1hcC5jPTM3MTA9c3RhdGljIGJvb2wgZmlsZW1hcF9tYXBfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZmlsZW1hcC5jLTM3MjMtXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19maWxlX3BhZ2UoZm9saW8sIHN0YXJ0KTtcXG5tbS9maWxlbWFwLmM6MzcyNDpcXHRcXHR2bV9mYXVsdF90IHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XFxubW0vZmlsZW1hcC5jLTM3MjUtXFx0XFx0aWYgKCFyZXQpIHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODE5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NDctXFx0dm1mLnBtZCA9IHBtZHA7XFxubW0va2h1Z2VwYWdlZC5jOjE4NDg6XFx0aWYgKGRvX3NldF9wbWQoXFx1MDAyNnZtZiwgZm9saW8sIHBhZ2UpKVxcbm1tL2todWdlcGFnZWQuYy0xODQ5LVxcdFxcdHJldHVybiBTQ0FOX0ZBSUw7XFxuLS1cXG5tbS9tZW1vcnkuYz01NTUxPXN0YXRpYyB2b2lkIGRlcG9zaXRfcHJlYWxsb2NfcHRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTU2My1cXG5tbS9tZW1vcnkuYzo1NTY0OnZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LmMtNTU2NS17XFxuLS1cXG5tbS9tZW1vcnkuYy01NjM5LSNlbHNlXFxubW0vbWVtb3J5LmM6NTY0MDp2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS5jLTU2NDEte1xcbi0tXFxubW0vbWVtb3J5LmM9NTcxMz12bV9mYXVsdF90IGZpbmlzaF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTU3NjMtXFx0XFx0aWYgKCFuZWVkc19mYWxsYmFjayBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykpIHtcXG5tbS9tZW1vcnkuYzo1NzY0OlxcdFxcdFxcdHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XFxubW0vbWVtb3J5LmMtNTc2NS1cXHRcXHRcXHRpZiAocmV0ICE9IFZNX0ZBVUxUX0ZBTExCQUNLKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMDo0MS40MTk0NzI4NDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwMzA2NDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRIUCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyByZWxhdGVkIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEkgc2VlIGl0J3MgdG91Y2hpbmcgYGRvX3NldF9wbWRgLCByZXBsYWNpbmcgdGhlIGB0aHBfZGlzYWJsZWRfYnlfaHcoKWAgY2hlY2sgd2l0aCBgIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKWAuIFRoYXQncyBhIGtleSBzaGlmdCBpbiBob3cgaXQncyBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCB0byBhbGxvdyBQTUQtbGV2ZWwgVEhQLiBJbnRlcmVzdGluZy5cblxuVGhlbiwgaXQgZ29lcyBvbiB0byBtb2RpZnkgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGFuZCBgc2htZW1fZ2V0YXR0cmAgdG8gYWxzbyBpbmNvcnBvcmF0ZSB0aGlzIGAhcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYCBjaGVjaywgZWZmZWN0aXZlbHkgZmlsdGVyaW5nIG91dCBQTUQgb3JkZXJzIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIHRyeWluZyB0byBoYXJtb25pemUgdGhpcyBjaGVjayBhY3Jvc3MgdGhlIGJvYXJkIGZvciBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCB0aGUgaHVnZSBwYWdlIG9yZGVycy5cblxuSG9sZCBvbi4uLiBJJ3ZlIGdvdCBhIHdyaW5rbGUuIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgdHlwaWNhbGx5IGFuIGlubGluZSBmdW5jdGlvbiwgaXNuJ3QgaXQ/IEl0J3MgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgLiBXaHkgaXMgaXQgc2hvd2luZyB1cCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaW4gdGhlIHBhdGNoPyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb250ZXh0LiBMZXQncyBnbyB0byBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIHNlZSB3aGF0IHRoZSBwYXRjaCBpcyBkb2luZyB0byB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRpc2NyZXBhbmN5IHRvIGZ1bGx5IGdyYXNwIHdoYXQncyBnb2luZyBvbiBoZXJlLiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6NDYuMDIyNTM5OTEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXHRjb25zdCBib29sIGluX3BmID0gdHlwZSA9PSBUVkFfUEFHRUZBVUxUO1xcbiAxMjE6XFx0XFx0Y29uc3QgYm9vbCBmb3JjZWRfY29sbGFwc2UgPSB0eXBlID09IFRWQV9GT1JDRURfQ09MTEFQU0U7XFxuIDEyMjpcXHRcXHR1bnNpZ25lZCBsb25nIHN1cHBvcnRlZF9vcmRlcnM7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdC8qIENoZWNrIHRoZSBpbnRlcnNlY3Rpb24gb2YgcmVxdWVzdGVkIGFuZCBzdXBwb3J0ZWQgb3JkZXJzLiAqL1xcbiAxMjU6XFx0XFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4gMTI2OlxcdFxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9BTk9OO1xcbiAxMjc6XFx0XFx0ZWxzZSBpZiAodm1hX2lzX2RheCh2bWEpIHx8IHZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSlcXG4gMTI4OlxcdFxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9TUEVDSUFMX0RBWDtcXG4gMTI5OlxcdFxcdGVsc2VcXG4gMTMwOlxcdFxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9GSUxFX0RFRkFVTFQ7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XFxuIDEzMzpcXHRcXHRcXHQvKlxcbiAxMzQ6XFx0XFx0XFx0ICogSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMsIGFzc3VtZSBmb3JcXG4gMTM1OlxcdFxcdFxcdCAqIG5vdyB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQgUFVEIGxlYXZlcyBhbmQgZGlzYWJsZVxcbiAxMzY6XFx0XFx0XFx0ICogYm90aCBmb2xpbyBvcmRlcnMuXFxuIDEzNzpcXHRcXHRcXHQgKi9cXG4gMTM4OlxcdFxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgXFx1MDAyNj0gfihCSVQoUE1EX09SREVSKSB8IEJJVChQVURfT1JERVIpKTtcXG4gMTM5OlxcdFxcdH1cXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0b3JkZXJzIFxcdTAwMjY9IHN1cHBvcnRlZF9vcmRlcnM7XFxuIDE0MjpcXHRcXHRpZiAoIW9yZGVycylcXG4gMTQzOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAoIXZtYS1cXHUwMDNldm1fbW0pXFx0XFx0LyogdmRzbyAqL1xcbiAxNDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdGlmICh2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIGZvcmNlZF9jb2xsYXBzZSkpXFxuIDE0OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0Lyoga2h1Z2VwYWdlZCBkb2Vzbid0IGNvbGxhcHNlIERBWCB2bWEsIGJ1dCBwYWdlIGZhdWx0IGlzIGZpbmUuICovXFxuIDE1MjpcXHRcXHRpZiAodm1hX2lzX2RheCh2bWEpKVxcbiAxNTM6XFx0XFx0XFx0cmV0dXJuIGluX3BmID8gb3JkZXJzIDogMDtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0LypcXG4gMTU2OlxcdFxcdCAqIGtodWdlcGFnZWQgc3BlY2lhbCBWTUEgYW5kIGh1Z2V0bGIgVk1BLlxcbiAxNTc6XFx0XFx0ICogTXVzdCBiZSBjaGVja2VkIGFmdGVyIGRheCBzaW5jZSBzb21lIGRheCBtYXBwaW5ncyBtYXkgaGF2ZVxcbiAxNTg6XFx0XFx0ICogVk1fTUlYRURNQVAgc2V0LlxcbiAxNTk6XFx0XFx0ICovXFxuIDE2MDpcXHRcXHRpZiAoIWluX3BmIFxcdTAwMjZcXHUwMDI2ICFzbWFwcyBcXHUwMDI2XFx1MDAyNiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9OT19LSFVHRVBBR0VEKSlcXG4gMTYxOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHQvKlxcbiAxNjQ6XFx0XFx0ICogQ2hlY2sgYWxpZ25tZW50IGZvciBmaWxlIHZtYSBhbmQgc2l6ZSBmb3IgYm90aCBmaWxlIGFuZCBhbm9uIHZtYSBieVxcbiAxNjU6XFx0XFx0ICogZmlsdGVyaW5nIG91dCB0aGUgdW5zdWl0YWJsZSBvcmRlcnMuXFxuIDE2NjpcXHRcXHQgKlxcbiAxNjc6XFx0XFx0ICogU2tpcCB0aGUgY2hlY2sgZm9yIHBhZ2UgZmF1bHQuIEh1Z2UgZmF1bHQgZG9lcyB0aGUgY2hlY2sgaW4gZmF1bHRcXG4gMTY4OlxcdFxcdCAqIGhhbmRsZXJzLlxcbiAxNjk6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAwOjQ2LjAyMjc5NjcyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ3NjM5NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTaG1lbSBhbmQgVEhQIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCB0aGlzIGxvb2tzIGFjaGlldmFibGUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEkgc2VlIGEgZmV3IHBvdGVudGlhbCBjYW5kaWRhdGVzOiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYHNobWVtX2dldGF0dHJgLCBgc2htZW1fcGFyc2Vfb25lYCwgYHNobWVtX3BhcnNlX2h1Z2VgLCBhbmQgYGRvX3NldF9wbWRgLlxuXG5XYWl0LCBhIHF1aWNrIHNjYW4gcmV2ZWFscyB0aGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgYW5kIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGFyZSAqbm90KiBkZWNsYXJlZCBzdGF0aWMgLSB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gTm93LCBgc2htZW1fZ2V0YXR0cmAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLCBidXQgaXQncyBhbiBpbm9kZSBvcGVyYXRpb24sIHNvIGl0J3MgcHJvYmFibHkgZmluZSB0byB1c2UgdGhhdCBvbmUuIEJvdGggYHNobWVtX3BhcnNlX29uZWAgYW5kIGBzaG1lbV9wYXJzZV9odWdlYCBhcmUgYWxzbyBzdGF0aWMuIEFuZCBmaW5hbGx5LCBgZG9fc2V0X3BtZGAgaXMgKm5vdCogc3RhdGljLCBzbyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC5cblxuUmlnaHQsIG5vdyB0aGF0IEkgaGF2ZSB0aG9zZSBpbiBtaW5kLCBJIG5lZWQgdG8gY2hlY2sgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyByZXF1aXJlZCBmb3IgbXkgc3BlY2lmaWMgbmVlZHMuIEFoLCB5ZXMsIGl0J3MgZGVmaW5pdGVseSByZXF1aXJlZC4gU28sIGxldCdzIG5vdyBqdW1wIGludG8gYG1tL3NobWVtLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgYW5kIG1ha2Ugc3VyZSBpdCBiZWhhdmVzIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM0NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAwOjUwLjY3MDQzOTA3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNDI5MzA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEyNj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEyOC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NITUVNKVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMjk6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMwLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEzMj1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzMtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTM1LVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMTQ9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkwLVxcdGlmICghaW5fcGYgXFx1MDAyNlxcdTAwMjYgc2htZW1fZmlsZSh2bWEtXFx1MDAzZXZtX2ZpbGUpKVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTkxOlxcdFxcdHJldHVybiBvcmRlcnMgXFx1MDAyNiBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtXFx1MDAzZXZtX2ZpbGUpLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkyLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHZtYSwgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsXFxuLS1cXG5tbS9zaG1lbS5jPTE4MDk9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0vc2htZW0uYy0xODI1LVxcbm1tL3NobWVtLmM6MTgyNjp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbm1tL3NobWVtLmMtMTgyNy1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmM9MjQyMj1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjUwMy1cXHQvKiBGaW5kIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciBhbm9ueW1vdXMgc2htZW0gYW5kIHRtcGZzLiAqL1xcbm1tL3NobWVtLmM6MjUwNDpcXHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpO1xcbm1tL3NobWVtLmMtMjUwNS1cXHRpZiAob3JkZXJzIFxcdTAwM2UgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMDo1Mi4zOTQ3MzcyOTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMDQ2NjEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBPcHRpb25zKipcblxuQWxyaWdodCwgdGhlIG5lZWQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY2xlYXIuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJwbGF5IHdpdGggdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIHBhcnRpY3VsYXJseSBhcyBpdCByZWxhdGVzIHRvIHNoYXJlZCBtZW1vcnkuIExldCBtZSBzZWUuLi4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciBgQ09ORklHX1NITUVNYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFyZWQgbWVtb3J5IHN1YnN5c3RlbSBpcyBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBpc24ndCBzb21laG93IGNsYXNoaW5nIHdpdGggb3IgcHJldmVudGluZyB0cmFuc3BhcmVudCBodWdlcGFnZXMgZnJvbSBvcGVyYXRpbmcgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGFuIGludGVyYWN0aW9uIHdpdGggc2hhcmVkIG1lbW9yeSBjb25maWd1cmF0aW9uIHRoYXQgaXMgcmVsZXZhbnQuXG5cbk5leHQsIEkgc2hvdWxkIHF1aWNrbHkgcmV2aWV3IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGBkb19zZXRfcG1kYC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaG93IHRoZSBQTUQgaXMgYmVpbmcgdXBkYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBodWdlcGFnZXMuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBzcGVjaWZpYyBvcGVyYXRpb25zIGFyZSB0YWtpbmcgcGxhY2UgYXQgdGhlIFBhZ2UgVGFibGUgbGV2ZWwsIGFzIHRoaXMgZnVuY3Rpb24gaG9sZHMgY3JpdGljYWwgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaWYgdGhlcmUgaXMgYSBjb25mbGljdC4gQXJlIHdlIG1hcHBpbmcgaHVnZSBwYWdlcyBkaXJlY3RseSwgb3IgYXJlIHdlIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIHBhZ2Ugc2l6ZXMgaW4gY2VydGFpbiBzY2VuYXJpb3M/IFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiB3aWxsIGlsbHVtaW5hdGUgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgc2V0LCB3aGljaCBpcyBhYnNvbHV0ZWx5IHZpdGFsIHdoZW4gZGVhbGluZyB3aXRoIGh1Z2VwYWdlcywgdG8gc2VlIGhvdyB0aGUgb3ZlcmFsbCBzeXN0ZW0gaW50ZXJhY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU1MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAwOjU1LjgwNTIxMDM5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNTg2NjU4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zZXRfcG1kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD0yMDMxPXN0YXRpYyBpbmxpbmUgcHRlX3QgbWF5YmVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIwMzctXFxuaW5jbHVkZS9saW51eC9tbS5oOjIwMzg6dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTIwMzktdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZmlsZW1hcC5jPTM3MTA9c3RhdGljIGJvb2wgZmlsZW1hcF9tYXBfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZmlsZW1hcC5jLTM3MjMtXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19maWxlX3BhZ2UoZm9saW8sIHN0YXJ0KTtcXG5tbS9maWxlbWFwLmM6MzcyNDpcXHRcXHR2bV9mYXVsdF90IHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XFxubW0vZmlsZW1hcC5jLTM3MjUtXFx0XFx0aWYgKCFyZXQpIHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODE5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NDctXFx0dm1mLnBtZCA9IHBtZHA7XFxubW0va2h1Z2VwYWdlZC5jOjE4NDg6XFx0aWYgKGRvX3NldF9wbWQoXFx1MDAyNnZtZiwgZm9saW8sIHBhZ2UpKVxcbm1tL2todWdlcGFnZWQuYy0xODQ5LVxcdFxcdHJldHVybiBTQ0FOX0ZBSUw7XFxuLS1cXG5tbS9tZW1vcnkuYz01NTUxPXN0YXRpYyB2b2lkIGRlcG9zaXRfcHJlYWxsb2NfcHRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTU2My1cXG5tbS9tZW1vcnkuYzo1NTY0OnZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LmMtNTU2NS17XFxuLS1cXG5tbS9tZW1vcnkuYy01NjM5LSNlbHNlXFxubW0vbWVtb3J5LmM6NTY0MDp2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS5jLTU2NDEte1xcbi0tXFxubW0vbWVtb3J5LmM9NTcxMz12bV9mYXVsdF90IGZpbmlzaF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTU3NjMtXFx0XFx0aWYgKCFuZWVkc19mYWxsYmFjayBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykpIHtcXG5tbS9tZW1vcnkuYzo1NzY0OlxcdFxcdFxcdHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XFxubW0vbWVtb3J5LmMtNTc2NS1cXHRcXHRcXHRpZiAocmV0ICE9IFZNX0ZBVUxUX0ZBTExCQUNLKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMDo1Ny41NDEwODI2MjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzM5NTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gUGFnZSBUYWJsZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBwYWdlIHRhYmxlcyBhcmUgc2V0IHVwLiBJIHJlbWVtYmVyIHNlZWluZyBgZG9fc2V0X3BtZGAgc29tZXdoZXJlIGluIHRoZSBgbW1gIHN1YnN5c3RlbS4uLiByaWdodCwgaXQncyBpbiBgbW0vbWVtb3J5LmNgLiBOb3csIHdoZXJlIGRvZXMgdGhpcyB3aG9sZSBwcm9jZXNzIGFjdHVhbGx5ICpzdGFydCo/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIExldCdzIHNlZS4uLiBJJ20gcHJldHR5IHN1cmUgSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGUgbGVhZiBub2RlIHN1cHBvcnQgaXMgaW5pdGlhbGl6ZWQgdG8gdW5kZXJzdGFuZCB0aGlzLiBUaGF0IG1lYW5zIGNoZWNraW5nIGBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0YCBuZXh0LiBJIHdvbmRlciB3aGF0IHRoYXQgZnVuY3Rpb24gc2V0cyB1cCwgYW5kIHdoYXQgYXNwZWN0cyBvZiB0aGUgUE1EIGl0J3Mgc2V0dGluZyB0aGUgZ3JvdW5kIHJ1bGVzIGZvci4uLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU0MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAxOjAwLjc3NDQ4MTY3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2Mzg4NTgyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIzMTk9c3RhdGljIGlubGluZSBib29sIHBndGFibGVfaGFzX3BtZF9sZWF2ZXModm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIzMjItfVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIzMjM6dm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMzI0LSNlbHNlXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjMyNT1zdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjMyOC19XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjMyOTpzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZCkgeyB9XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjMzMC0jZW5kaWZcXG4tLVxcbm1tL21lbW9yeS5jPTE2OD1FWFBPUlRfU1lNQk9MKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xcbm1tL21lbW9yeS5jLTE2OS1cXG5tbS9tZW1vcnkuYzoxNzA6dm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKVxcbm1tL21lbW9yeS5jLTE3MS17XFxuLS1cXG5tbS9tbV9pbml0LmM9MjY5OD12b2lkIF9faW5pdCBtbV9jb3JlX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy0yNzAxLVxcdGluaXRfemVyb19wYWdlX3BmbigpO1xcbm1tL21tX2luaXQuYzoyNzAyOlxcdHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQoKTtcXG5tbS9tbV9pbml0LmMtMjcwMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MDIuNjM4MzczNzc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDcwODgyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNldmVyYWwga2V5IGFyZWFzLiBJIHNlZSBpdCdzIG1vZGlmeWluZyBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCwgYGRvX3NldF9wbWRgLCBhbmQgYHNobWVtX2dldGF0dHJgLiBUaG9zZSBhcmUgYWxsIHJlbGV2YW50IHN5bWJvbHM7IEknbSBoYXBweSB0byBzZWUgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIHRhcmdldGVkLCB0aGV5IGluZGljYXRlIGEgY2xlYXIgZm9jdXMuIFdhaXQgYSBzZWNvbmQsIHRob3VnaC4uLiBJJ20gbm90aWNpbmcgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIG5vdCBzdGF0aWMuIFRoYXQgbWVhbnMgaXQncyBleHBvcnRlZCBvciBnbG9iYWwsIGFuZCBjYW4gYmUgYWNjZXNzZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJIHNob3VsZCBjb25maXJtIHRoYXQgdGhhdCdzIHRoZSBjYXNlLiBUbyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTMyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAxOjA3LjM0NTQ2NTI5N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2OTEwNzk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0yNzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk3LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI5ODp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5OS1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTMxOT11bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0MS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozNDI6XFx0cmV0dXJuIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIG9yZGVycyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQzLX1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTA3PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTExMy1cXG5tbS9odWdlX21lbW9yeS5jOjExNDp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTE1LVxcdFxcdFxcdFxcdFxcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMTowOS4xMTQ1Nzg2MzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1OTk4MTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIFNoYXJlZCBNZW1vcnkgKFNITUVNKSBTeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYW5kIGBkb19zZXRfcG1kYCBhcmUgYWxsIGdsb2JhbGx5IGFjY2Vzc2libGUgZnVuY3Rpb25zLiBJIHJlY29nbml6ZSB0aGVpciBzaWduaWZpY2FuY2UsIHRoZXNlIGFyZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgaXMgdXNpbmcgYSBtaXggb2YgZ2xvYmFsIGFuZCBsb2NhbGl6ZWQgZnVuY3Rpb24gY2FsbHMgZm9yIG1lbW9yeSBjb250cm9sLCB3aGljaCBtYWtlcyBmb3IgYSBtb3JlIGNvbXBsZXggcGljdHVyZS4gQW5kIHRoZW4sIHRoZXJlJ3MgYHNobWVtX2dldGF0dHJgLCBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IHVzZWQgYXMgYSBjYWxsYmFjay4gVGhhdCdzIGEgY2xhc3NpYyBwYXR0ZXJuIHRvIHdhdGNoIG91dCBmb3Ig4oCTIGhvdyBpcyB0aGUgY2FsbGJhY2sgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3RhdGljIGNvbnRleHQgYW5kIHdoYXQncyB0aGUgbGlmZWN5Y2xlIG9mIHRoYXQgc3RhdGljIHNjb3BlPyBUaGlzIG1lYW5zIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBpcyBsaWtlbHkgYSBkaXN0cmlidXRlZCBtaXggb2YgY2FsbGJhY2tzIGFuZCBkaXJlY3QgY2FsbHMuIExldCdzIGRlbHZlIGludG8gYHNobWVtX3BhcnNlX29uZWAuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoZXJlIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgY29tZSB0b2dldGhlci4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBwYXJzaW5nIG1lbW9yeSBjb25maWd1cmF0aW9uIGFuZCBob3cgdGhlc2UgZ2xvYmFsIGFuZCBzdGF0aWMgZnVuY3Rpb25zIGludGVyYWN0IGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODI4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MTMuMDc0NTYyMjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjY4ODYyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fcGFyc2Vfb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NDUyMT1zdGF0aWMgaW50IHNobWVtX3BhcnNlX29wdF9jYXNlZm9sZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtLFxcbi0tXFxubW0vc2htZW0uYy00NTI3LVxcbm1tL3NobWVtLmM6NDUyODpzdGF0aWMgaW50IHNobWVtX3BhcnNlX29uZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbm1tL3NobWVtLmMtNDUyOS17XFxuLS1cXG5tbS9zaG1lbS5jPTUwODU9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgc2htZW1fZnNfY29udGV4dF9vcHMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTUwODktXFx0LnBhcnNlX21vbm9saXRoaWNcXHQ9IHNobWVtX3BhcnNlX21vbm9saXRoaWMsXFxubW0vc2htZW0uYzo1MDkwOlxcdC5wYXJzZV9wYXJhbVxcdFxcdD0gc2htZW1fcGFyc2Vfb25lLFxcbm1tL3NobWVtLmMtNTA5MS1cXHQucmVjb25maWd1cmVcXHRcXHQ9IHNobWVtX3JlY29uZmlndXJlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMToxNC45MDE0NTI3OTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNzE0MDM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24gaW4gU2hhcmVkIE1lbW9yeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHNoYXJlZCBtZW1vcnkuIFRoZSBjb2RlIGhhcyBhIHN0YXRpYyBmdW5jdGlvbiwgYHNobWVtX3BhcnNlX29uZWAsIHRoYXQncyByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJwbGF5IGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBhbmQgYWxzbyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGFuZCBgZG9fc2V0X3BtZGAgd2hpY2ggc2VlbSBsaWtlIGtleSBwaWVjZXMgb2YgdGhlIHB1enpsZS4gSSB3b25kZXIsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJ20gbWlzc2luZyB0aGF0IGluZmx1ZW5jZSB0aGlzIGJlaGF2aW9yP1xuXG5SaWdodCwgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnl0aGluZy4gVGhlIG9idmlvdXMgb25lLCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBpcyBjZW50cmFsIHRvIHRoZSBjb25jZXB0LiAgQW5kIEknZCBhbHNvIGV4cGVjdCBgQ09ORklHX1NITUVNYCB0byBiZSBlbmFibGVkLCBhcyBzaGFyZWQgbWVtb3J5IGlzIHVzdWFsbHkgYSBzdGFuZGFyZCBmZWF0dXJlLiBMZXQgbWUgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBzdGF0dXMgb2YgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAg4oCTIHRoYXQncyB0aGUgcGxhY2UgdG8gc3RhcnQsIGl0J3MgY29yZSB0byB0aGUgZW5hYmxpbmcgb2YgYWxsIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDAyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MTguNTE4NTk1OTc5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE3MzM0MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyOT1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODMxLVxcbm1tL0tjb25maWc6ODMyOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMy1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTA9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1NS1cXG5tbS9LY29uZmlnOjg1NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NTctXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjItXFxubW0vS2NvbmZpZzo4NjM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2NC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzEtXFxubW0vS2NvbmZpZzo4NzI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzMtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg3OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODg4LVxcbm1tL0tjb25maWc6ODg5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTAtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg5OC1cXG5tbS9LY29uZmlnOjg5OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwNi1cXG5tbS9LY29uZmlnOjkwNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTA4LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTQtXFxubW0vS2NvbmZpZzo5MTU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTYtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05MjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzMy1cXG5tbS9LY29uZmlnOjkzNDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTM1LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDItXFxubW0vS2NvbmZpZzo5NDM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDQtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTAtXFxubW0vS2NvbmZpZzo5NTE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1Mi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU4LVxcbm1tL0tjb25maWc6OTU5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTYwLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MjAuMzM1OTM1MDQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTIzNjEzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMgYW5kIFRSQU5TUEFSRU5UX0hVR0VQQUdFKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGNvbmZpZyBpbiBwbGF5LiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AuIExldCdzIHJlZnJlc2ggb3VyIG1lbW9yeSBvbiB0aGF0OyBpdCdzIHR1Y2tlZCBhd2F5IGluIGBtbS9zaG1lbS5jYC4gVGhlIHNpZ25hdHVyZSBJIGV4cGVjdCB0byBzZWUgaXM6XG5cbmBgYGNcbnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuXHRcdFx0XHRib29sIHNobWVtX2h1Z2VfZm9yY2UpXG5gYGBcblxuSGFuZyBvbiBhIHNlY29uZC4uLiBHb2luZyBiYWNrIHRocm91Z2ggdGhlIHBhdGNoZXMsIEkgc2VlIHNvbWV0aGluZyBkaWZmZXJlbnQuIFRoZXJlJ3MgYW4gZXh0cmEgcGFyYW1ldGVyLCBgbG9mZl90IHdyaXRlX2VuZGAuIFRoZSBwYXRjaGVkIHZlcnNpb24gcmVhZHM6XG5cbmBgYGNcbnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuXHRcdFx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXG5gYGBcblxuVGltZSB0byBjb25zdWx0IHRoZSBzb3VyY2UgdHJlZSBhbmQgdmVyaWZ5IHRoZSBjdXJyZW50IHNpZ25hdHVyZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ3MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMToyNC40ODgyOTg5NDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTMwMTUwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEyNj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEyOC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NITUVNKVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMjk6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMwLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEzMj1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzMtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTM1LVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYz0xODA5PWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL3NobWVtLmMtMTgyNS1cXG5tbS9zaG1lbS5jOjE4MjY6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5tbS9zaG1lbS5jLTE4MjctXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAxOjI2LjMwMTMyNjA2NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA3NzI4NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG1tL3NobWVtLmNgIExpbmUgMTgyNioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgbGV0J3MgemVybyBpbiBvbiBgbW0vc2htZW0uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxODI2LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZXNpZGUsIGFuZCBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBpZiB5b3UncmUgbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIGlzc3Vlcy4gSSdtIGd1ZXNzaW5nIHdlIGFyZSBsb29raW5nIGludG8gbWVtb3J5IGxlYWsgaXNzdWVzIGluIHRoZSBzaGFyZWQgbWVtb3J5IGNvbnRleHQuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHByb2JsZW1zIGFyb3VuZCByZXNvdXJjZSBoYW5kbGluZyBvciBib3VuZGFyeSBjb25kaXRpb25zIGluIHBhcnRpY3VsYXIuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGNhbGxzIHRvIGBrbWFwX2F0b21pY2AsIGBrdW5tYXBfYXRvbWljYCwgYGFsbG9jX3BhZ2VgLCBgZnJlZV9wYWdlYCwgb3IgbWF5YmUgZXZlbiBgdm1fbWFwYC4gTXkgU3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nIGFib3V0IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRoZXJlLCBsaWtlIHNwaW5sb2NrcyBvciBtdXRleGVzLCBzbyBJ4oCZbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayB1c2FnZSBwYXR0ZXJucyBhcm91bmQgbWVtb3J5IGFjY2Vzc2VzLiBJJ20gYWxzbyBsb29raW5nIGZvciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uIGlmIG11bHRpcGxlIHByb2Nlc3NlcyBhcmUgc2hhcmluZyBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MjkuNjA5MDU4Mjk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MjA6XFx0XFx0ICAgIHNobWVtX2h1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUilcXG4xODIxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjE4MjI6XFx0XFxuMTgyMzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTgyNDpcXHR9XFxuMTgyNTpcXHRcXG4xODI2OlxcdHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuMTgyNzpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcXG4xODI4OlxcdFxcdFxcdFxcdFxcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcXG4xODI5OlxcdHtcXG4xODMwOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19hbHdheXMpO1xcbjE4MzE6XFx0XFx0dW5zaWduZWQgbG9uZyB3aXRoaW5fc2l6ZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfd2l0aGluX3NpemUpO1xcbjE4MzI6XFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYSA/IHZtYS1cXHUwMDNldm1fZmxhZ3MgOiAwO1xcbjE4MzM6XFx0XFx0dW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnMsIGRpc2FibGVkX29yZGVycyA9IDA7XFxuMTgzNDpcXHRcXG4xODM1OlxcdFxcdGlmICh2bWEgXFx1MDAyNlxcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSlcXG4xODM2OlxcdFxcdFxcdHJldHVybiAwO1xcbjE4Mzc6XFx0XFxuMTgzODpcXHRcXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcXG4xODM5OlxcdFxcdFxcdGRpc2FibGVkX29yZGVycyA9IEJJVChQTURfT1JERVIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMToyOS42MDkyNTA0NTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NDkwODA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCB0aG9zZSBzeW1ib2xzIGxvb2sgcHJvbWlzaW5nIGZvciBteSBjdXJyZW50IGludmVzdGlnYXRpb24uXG5cbioqRGVsdmluZyBpbnRvIFNoYXJlZCBNZW1vcnkgYW5kIEh1Z2UgUGFnZXMqKlxuXG5ZZXMsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaHVnZSBwYWdlIGFsbG9jYXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiBzaGFyZWQgbWVtb3J5LiBBbmQsIGJhc2VkIG9uIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCwgSSdkIHNheSBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGFub3RoZXIgc3Ryb25nIGNhbmRpZGF0ZS4gSSdtIGFsc28gdGhpbmtpbmcgYGRvX3NldF9wbWRgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmcgYXNwZWN0LCBtYWtpbmcgaXQgcG90ZW50aWFsbHkgcmVsZXZhbnQuXG5cbk5vdywgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUgd2l0aGluIHRoZSBjb2RlLCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBiaXRzIGZpdCB0b2dldGhlci4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzaG1lbV9wYXJzZV9vbmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG1tL3NobWVtLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBjb25uZWN0IHRoZXNlIHN5bWJvbHMgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGZsb3cuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk2NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MzMuMzY0MTY1NDE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1ODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1ODU6XFx0XFxuNDU4NjpcXHRcXHRcXHQvKlxcbjQ1ODc6XFx0XFx0XFx0ICogVGhlIHJlcXVlc3RlZCBnaWQgbXVzdCBiZSByZXByZXNlbnRhYmxlIGluIHRoZVxcbjQ1ODg6XFx0XFx0XFx0ICogZmlsZXN5c3RlbSdzIGlkbWFwcGluZy5cXG40NTg5OlxcdFxcdFxcdCAqL1xcbjQ1OTA6XFx0XFx0XFx0aWYgKCFrZ2lkX2hhc19tYXBwaW5nKGZjLVxcdTAwM2V1c2VyX25zLCBrZ2lkKSlcXG40NTkxOlxcdFxcdFxcdFxcdGdvdG8gYmFkX3ZhbHVlO1xcbjQ1OTI6XFx0XFxuNDU5MzpcXHRcXHRcXHRjdHgtXFx1MDAzZWdpZCA9IGtnaWQ7XFxuNDU5NDpcXHRcXHRcXHRicmVhaztcXG40NTk1OlxcdFxcdGNhc2UgT3B0X2h1Z2U6XFxuNDU5NjpcXHRcXHRcXHRjdHgtXFx1MDAzZWh1Z2UgPSByZXN1bHQudWludF8zMjtcXG40NTk3OlxcdFxcdFxcdGlmIChjdHgtXFx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcXHUwMDI2XFx1MDAyNlxcbjQ1OTg6XFx0XFx0XFx0ICAgICFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuNDU5OTpcXHRcXHRcXHRcXHRnb3RvIHVuc3VwcG9ydGVkX3BhcmFtZXRlcjtcXG40NjAwOlxcdFxcdFxcdGN0eC1cXHUwMDNlc2VlbiB8PSBTSE1FTV9TRUVOX0hVR0U7XFxuNDYwMTpcXHRcXHRcXHRicmVhaztcXG40NjAyOlxcdFxcdGNhc2UgT3B0X21wb2w6XFxuNDYwMzpcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpIHtcXG40NjA0OlxcdFxcdFxcdFxcdG1wb2xfcHV0KGN0eC1cXHUwMDNlbXBvbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAxOjMzLjM2NDM4MTY2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQ2MjQ0NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgdGhlIFNoYXJlZCBNZW1vcnkgUGFyc2luZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgc2htZW1fcGFyc2Vfb25lYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcgdGhpbmdzIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHVzZS4gSXQncyBvbmx5IGFjY2Vzc2libGUgd2l0aGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdCwgd2hpY2ggaW1wbGllcyBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCBsaW5raW5nIG9yIHVzZSBpbiBvdGhlciBtb2R1bGVzLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSByZWxhdGVkIHBhcnNpbmcgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhleSBmaXQgd2l0aGluIHRoZSBjb2RlLCBhbmQgdGhlaXIgcmVsYXRpb24gdG8gdGhlIHN0YXRpYyBvbmUuIExldCBtZSBtb3ZlIG9uIHRvIGV4YW1pbmluZyBgc2htZW1fcGFyc2VfaHVnZWAgbm93LCB0byBzZWUgaG93IHRoZSBvdGhlciBwYXJzaW5nIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBzaGFyZWQgbWVtb3J5IHBhcnNpbmcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTc0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMTozNi4yMTA2Mjk3NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTA1ODAxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fcGFyc2VfaHVnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTYyNj1zdGF0aWMgdW5zaWduZWQgaW50IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtNjY5LVxcbm1tL3NobWVtLmM6NjcwOnN0YXRpYyBpbnQgc2htZW1fcGFyc2VfaHVnZShjb25zdCBjaGFyICpzdHIpXFxubW0vc2htZW0uYy02NzEte1xcbi0tXFxubW0vc2htZW0uYz01NDQyPXN0YXRpYyBzc2l6ZV90IHNobWVtX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9zaG1lbS5jLTU0NTQtXFxubW0vc2htZW0uYzo1NDU1OlxcdGh1Z2UgPSBzaG1lbV9wYXJzZV9odWdlKHRtcCk7XFxubW0vc2htZW0uYy01NDU2LVxcdGlmIChodWdlID09IC1FSU5WQUwpXFxuLS1cXG5tbS9zaG1lbS5jPTU1Nzg9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdHJhbnNwYXJlbnRfaHVnZXBhZ2Vfc2htZW0oY2hhciAqc3RyKVxcbi0tXFxubW0vc2htZW0uYy01NTgxLVxcbm1tL3NobWVtLmM6NTU4MjpcXHRodWdlID0gc2htZW1fcGFyc2VfaHVnZShzdHIpO1xcbm1tL3NobWVtLmMtNTU4My1cXHRpZiAoaHVnZSA9PSAtRUlOVkFMKSB7XFxuLS1cXG5tbS9zaG1lbS5jPTU1OTM9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdHJhbnNwYXJlbnRfaHVnZXBhZ2VfdG1wZnMoY2hhciAqc3RyKVxcbi0tXFxubW0vc2htZW0uYy01NTk2LVxcbm1tL3NobWVtLmM6NTU5NzpcXHRodWdlID0gc2htZW1fcGFyc2VfaHVnZShzdHIpO1xcbm1tL3NobWVtLmMtNTU5OC1cXHRpZiAoaHVnZSBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MzguMDAxMjEzOTI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjIyNzU0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBpbiBTaGFyZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyAoVEhQKSBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBzaGFyZWQgbWVtb3J5IGFuZCB0aGUgdG1wZnMgZmlsZXN5c3RlbS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGBzaG1lbV9wYXJzZV9odWdlYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYW4gZW50cnkgcG9pbnQuIFRoYXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBzdGF0aWMuIEkgY2FuIG1ha2UgdXNlIG9mIHRoaW5ncyBsaWtlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBhbmQgYGRvX3NldF9wbWRgLlxuXG5UaGVuLCB3YWl0IGEgbWludXRlLCBJIGp1c3QgcmVhbGl6ZWQgYHNobWVtX2dldGF0dHJgICppcyogc3RhdGljLCBidXQgYmVjYXVzZSBpdCdzIGFuIGlub2RlIG9wZXJhdGlvbiwgaXQgY291bGQgYmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBzdGF0YCBzeXNjYWxsIHdoZW4gb3BlcmF0aW5nIG9uIHRtcGZzLiBUaGlzIG1lYW5zIHRoZXJlJ3MgYSBsaW5rIHRvIHRoZSBrZXJuZWwgdGhhdCBJIGhhdmUgdG8gY29uc2lkZXIuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGlzLiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBJIG1heSBoYXZlIG1pc3NlZD9cblxuUmlnaHQsIGBzaG1lbV9lbmFibGVkX3N0b3JlYCBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCByZWFjaGFibGUgYnkgd3JpdGluZyB0byBgL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2Uvc2htZW1fZW5hYmxlZGAuIFRoaXMgb25lIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0J3MgYW5vdGhlciBjbGVhciBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgVEhQIGJlaGF2aW9yLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQuXG5cbkhvd2V2ZXIsIGBzZXR1cF90cmFuc3BhcmVudF9odWdlcGFnZV9zaG1lbWAgYW5kIGBzZXR1cF90cmFuc3BhcmVudF9odWdlcGFnZV90bXBmc2AgYXJlIGJvdGggbWFya2VkIGFzIGBfX2luaXRgIGZ1bmN0aW9ucy4gVGhhdCBtZWFucyB0aGV5J3JlIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBsZXNzIGludGVyZXN0aW5nIGZvciBvbmdvaW5nIG9wZXJhdGlvbmFsIGNvbnNpZGVyYXRpb25zLiBUaGUgc2FtZSBnb2VzIGZvciBgaHVnZXBhZ2VfaW5pdF9zeXNmc2AsIGBodWdlcGFnZV9pbml0YCwgYW5kIGBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0YCwgYWxsIG9mIHdoaWNoIGFyZSBgX19pbml0YC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyBsb29rIGF0IGBuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHNgIGluIGBkcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jYC4gSXQgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBodWdlcGFnZXMgaW4gdGhlIG5vbi12b2xhdGlsZSBtZW1vcnkgZGV2aWNlIGRyaXZlci5cblxuU28gdGhlIG1haW4gcG9pbnRzIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlbid0IGluaXQsIGFuZCBzeXNmcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNTMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6NDMuMjYzNDkxOTY5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5MTgyNTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jPTg0PXN0YXRpYyBzc2l6ZV90IGFsaWduX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy05MS1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjkyOnN0YXRpYyB1bnNpZ25lZCBsb25nICpuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHModW5zaWduZWQgbG9uZyAqYWxpZ25tZW50cylcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTkzLXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MTE5PXN0YXRpYyBzc2l6ZV90IGFsaWduX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMTI4LVxcdHJjID0gbmRfc2l6ZV9zZWxlY3Rfc3RvcmUoZGV2LCBidWYsIFxcdTAwMjZuZF9wZm4tXFx1MDAzZWFsaWduLFxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM6MTI5OlxcdFxcdFxcdG5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyhhbGlnbnMpKTtcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTEzMC1cXHRkZXZfZGJnKGRldiwgXFxcInJlc3VsdDogJXpkIHdyb3RlOiAlcyVzXFxcIiwgcmMsIGJ1ZixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MjQzPXN0YXRpYyBzc2l6ZV90IHN1cHBvcnRlZF9hbGlnbm1lbnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0yNDgtXFx0cmV0dXJuIG5kX3NpemVfc2VsZWN0X3Nob3coMCxcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjI0OTpcXHRcXHRcXHRuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHMoYWxpZ25zKSwgYnVmKTtcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTI1MC19XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jPTQxOD1zdGF0aWMgYm9vbCBuZF9zdXBwb3J0ZWRfYWxpZ25tZW50KHVuc2lnbmVkIGxvbmcgYWxpZ24pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTQyNS1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjQyNjpcXHRuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHMoc3VwcG9ydGVkKTtcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTQyNy1cXHRmb3IgKGkgPSAwOyBzdXBwb3J0ZWRbaV07IGkrKylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6NDUuMDIyNjgxOTM4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDU0ODkzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqQ2hlY2tpbmcgREFYIEFsaWdubWVudCBEZXRhaWxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBEQVggY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwZXJzaXN0ZW50IG1lbW9yeSBhbmQgYWxpZ25tZW50LiBJIHNlZSB0aGF0IGBuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHNgIGFuZCBgbmRfcGZuX2RlZmF1bHRfYWxpZ25tZW50YCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlOyB0aGV5J3JlIHByb2JhYmx5IGNvbmZpZ3VyYXRpb24gZGV0YWlscyBzcGVjaWZpYyB0byB0aGlzIGRyaXZlciBhbmQgbm90IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGdsb2JhbGx5IGFjY2Vzc2libGUgb3IgbW9kaWZpZWQgZXh0ZXJuYWxseS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYWxpZ25tZW50IHZhbHVlcyBhcmUgdXNlZCBhbmQgdmFsaWRhdGVkIHdpdGhpbiB0aGUgREFYIGNvbnRleHQuIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIHNlZSBzdWNoIGNoZWNrcz8gQWgsIHllcy4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkYXhfYWxpZ25fdmFsaWRgIGZ1bmN0aW9uLiBJdCdzIGluIGBkcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oYCwgc28gbGV0J3MgbmF2aWdhdGUgdGhlcmUgYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIGlmIGEgcmVxdWVzdGVkIERBWCBhbGlnbm1lbnQgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGFuZCByZWFzb25hYmxlIHdpdGhpbiB0aGUgc3lzdGVtJ3MgREFYIGNhcGFiaWxpdGllcy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6NDguNDI4MTc0MTI0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3NTA1NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF9hbGlnbl92YWxpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9idXMuYz0xMjM5PXN0YXRpYyBzc2l6ZV90IGFsaWduX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2RheC9idXMuYy0xMjUwLVxcbmRyaXZlcnMvZGF4L2J1cy5jOjEyNTE6XFx0aWYgKCFkYXhfYWxpZ25fdmFsaWQodmFsKSlcXG5kcml2ZXJzL2RheC9idXMuYy0xMjUyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaD0xMTk9cGh5c19hZGRyX3QgZGF4X3Bnb2ZmX3RvX3BoeXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIHBnb2ZmX3QgcGdvZmYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oLTEyMS0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaDoxMjI6c3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxcbmRyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgtMTIzLXtcXG4tLVxcbmRyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgtMTMyLSNlbHNlXFxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaDoxMzM6c3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxcbmRyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgtMTM0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6NTAuMjM1Njg4MjUxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjU5NDc0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtleSBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBgZGF4X2FsaWduX3ZhbGlkYCBpcyBkZWZpbmVkIGlubGluZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9scyBhcyBiZWluZyB0aGUgcHJpbWFyeSBhcmVhcyBvZiBpbnRlcmVzdCwgZm9yIG5vdzogYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCwgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGFuZCBgZG9fc2V0X3BtZGAuIFRoZXkgbG9vayBsaWtlIHRoZXknbGwgYmUgdGhlIGZ1bmN0aW9ucyB0byB3YXRjaC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgZnVuY3Rpb25zIEknbSBtaXNzaW5nLiBMZXQncyBkaWcgaW50byBgbW0vZGVidWdfdm1fcGd0YWJsZS5jYC4gSG1tbSwgYWxsIHRob3NlIGZ1bmN0aW9ucyBsaXN0ZWQg4oCTIGBwbWRfYmFzaWNfdGVzdHNgLCBgcG1kX2FkdmFuY2VkX3Rlc3RzYCwgZXRjLiDigJMgYXBwZWFyIHRvIGJlIGBfX2luaXRgIGZ1bmN0aW9ucy4gUHJvYmFibHkgbm90IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpZXMsIGFsdGhvdWdoIHRoZXkgY291bGQgYmUgY3JpdGljYWwgZm9yIGRlYnVnZ2luZy5cblxuQWxyaWdodCwgdGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2VzIGxpa2VseSBjZW50ZXIgYXJvdW5kIHRoZXNlIGZpbGVzOiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9zaG1lbS5jYCwgYW5kIGBtbS9tZW1vcnkuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlc2UgbW9kdWxlcyB0byBzZWUgd2hhdCBjaGFuZ2VzIHdlcmUgbWFkZS5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRob3NlIHByaW1hcnkgZnVuY3Rpb25zIGFnYWluLiBZZXAsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgZ2xvYmFsLiBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpcyBhbHNvIGdsb2JhbC4gQW5kIGBkb19zZXRfcG1kYCBpcyBnbG9iYWwgdG9vLiBHb29kLlxuXG5Ob3csIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0J3MgbG9vayBhdCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgc2luY2UgdGhhdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBkcml2ZXIuIFdoYXQgZWxzZSBpcyB0aGVyZT8gYENPTkZJR19TSE1FTWAgaXMgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIGl0J3MgcHJvYmFibHkgbm90IGEgaGlnaCBwcmlvcml0eSB0byBjaGVjay4gSSBhbHNvIG5lZWQgdG8gY2hlY2sgYENPTkZJR19EQVhgIGZvciBgZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaGAsIGFuZCBgQ09ORklHX05WRElNTV9QRk5gIGZvciBgZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY2AuIEFuZCBgQ09ORklHX0RFQlVHX1ZNX1BHVEFCTEVgIGZvciBgbW0vZGVidWdfdm1fcGd0YWJsZS5jYC5cblxuUmlnaHQsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgIGZvciB0aGUgZGVwZW5kZW5jaWVzLiBJdCBpcyBsaWtlbHkgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6NTcuNjAxNjM5MzExWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA3OTk1NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyOT1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODMxLVxcbm1tL0tjb25maWc6ODMyOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMy1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTA9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1NS1cXG5tbS9LY29uZmlnOjg1NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NTctXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjItXFxubW0vS2NvbmZpZzo4NjM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2NC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzEtXFxubW0vS2NvbmZpZzo4NzI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzMtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg3OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODg4LVxcbm1tL0tjb25maWc6ODg5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTAtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg5OC1cXG5tbS9LY29uZmlnOjg5OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwNi1cXG5tbS9LY29uZmlnOjkwNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTA4LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTQtXFxubW0vS2NvbmZpZzo5MTU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTYtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05MjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzMy1cXG5tbS9LY29uZmlnOjkzNDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTM1LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDItXFxubW0vS2NvbmZpZzo5NDM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDQtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTAtXFxubW0vS2NvbmZpZzo5NTE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1Mi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU4LVxcbm1tL0tjb25maWc6OTU5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTYwLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDI6MDAuNDA5NjQxNDQxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTg4NTczMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0gaGVyZSBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJ2xsIGRlZmluaXRlbHkgYmUgaW5jbHVkaW5nIHRoYXQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0J3MgdGhlIGNvcmUgb2Ygd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoYXQgdGhlIGtleSBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdCBhcmUgaW5kZWVkIGFjY2Vzc2libGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSdyZSBub3Qgc3RhdGljIGFuZCB0aGVyZWZvcmUgbm90IHN1YmplY3QgdG8gdW5leHBlY3RlZCBzY29wZSByZXN0cmljdGlvbnMuIEkndmUgY29uZmlybWVkIHRoYXQgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaXMgbm90IHN0YXRpYzsgaXQncyBkZWZpbmVkIGluIGJvdGggYGluY2x1ZGUvbGludXgvc2htZW1fZnMuaGAgYW5kIGBtbS9zaG1lbS5jYC4gR29vZC4gTmV4dCwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBpcyBhbHNvIGdsb2JhbGx5IGFjY2Vzc2libGUsIGFwcGVhcmluZyBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIGFuZCBgbW0vaHVnZV9tZW1vcnkuY2AuIEZpbmFsbHksIGBkb19zZXRfcG1kYCBpcyBhbHNvIG5vdCBzdGF0aWM7IGl0J3MgaW4gYGluY2x1ZGUvbGludXgvbW0uaGAgYW5kIGBtbS9tZW1vcnkuY2AuIFBlcmZlY3QuXG5cbkkgZGlkIGJyaWVmbHkgY29uc2lkZXIgYHNobWVtX2dldGF0dHJgLCBidXQgc2luY2UgaXQncyBhbiBpbm9kZSBvcGVyYXRpb24sIGFuZCBpdCdzIGFzc2lnbmVkIHRvIGBpbm9kZV9vcGVyYXRpb25zLmdldGF0dHJgLCBhbmQgaXQncyBub3QgYmVpbmcgdXNlZCwgdGhlbiBpdCdzIGZpbmUuIFNvIEknbGwgc3RpY2sgd2l0aCB0aGUgZ2xvYmFsIGZ1bmN0aW9uczogYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGFuZCBgZG9fc2V0X3BtZGAuXG5cbkkgd2VudCBiYWNrIGFuZCBkb3VibGUtY2hlY2tlZCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZTpcbiogICBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLlxuKiAgIGBkb19zZXRfcG1kYCBpcyBhIGdsb2JhbCBmdW5jdGlvbi5cbiogICBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpcyBhbHNvIGEgZ2xvYmFsIGZ1bmN0aW9uLlxuXG5UaGlzIHBhdGNoIGlzIHNpZ25pZmljYW50LiBJdCdzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IFRIUCBzdXBwb3J0IGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCwgc3dpdGNoaW5nIGZyb20gYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB0byBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYC4gVGhpcyBpcyBjb3JlIE1NIGxvZ2ljLCBhZmZlY3RpbmcgVEhQLCBzaG1lbSwgZGF4LCBhbmQgbnZkaW1tLCB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgUE1EIGFuZCBQVUQgb3JkZXJzIG9uIENQVXMgd2l0aG91dCBQTUQgbGVhdmVzLiBUaGUgY29kZSBpcyBmdW5jdGlvbmFsLCBhbmQgdGhlIGxvZ2ljIGlzIHJlYWNoYWJsZS5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5NeSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYW5kIGBkb19zZXRfcG1kYC5cblxuQW5kIGFnYWluLCBteSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBpbmNsdWRlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG5cbk15IHJlYXNvbmluZyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBob3cgVEhQIHN1cHBvcnQgaXMgY2hlY2tlZCBhbmQgaW5pdGlhbGl6ZWQsIHJlcGxhY2luZyBgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKClgIHdpdGggYHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKWAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gbG9naWMgKFRIUCwgc2htZW0sIGRheCwgbnZkaW1tKSB0byBmaWx0ZXIgb3V0IFBNRCBhbmQgUFVEIG9yZGVycyBpZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgUE1EIGxlYXZlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjA0LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMjoxMC41OTgyMTc3ODFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYwNTI3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiLFxuICAgIFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCIsXG4gICAgXCJkb19zZXRfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IFRIUCBzdXBwb3J0IGlzIGNoZWNrZWQgYW5kIGluaXRpYWxpemVkLCByZXBsYWNpbmcgYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB3aXRoIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBJdCBtb2RpZmllcyBjb3JlIE1NIGxvZ2ljIChUSFAsIHNobWVtLCBkYXgsIG52ZGltbSkgdG8gZmlsdGVyIG91dCBQTUQgYW5kIFBVRCBvcmRlcnMgaWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgICBcInNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc1wiLFxuICAgIFwiZG9fc2V0X3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBUSFAgc3VwcG9ydCBpcyBjaGVja2VkIGFuZCBpbml0aWFsaXplZCwgcmVwbGFjaW5nIGBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKWAgd2l0aCBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYC4gSXQgbW9kaWZpZXMgY29yZSBNTSBsb2dpYyAoVEhQLCBzaG1lbSwgZGF4LCBudmRpbW0pIHRvIGZpbHRlciBvdXQgUE1EIGFuZCBQVUQgb3JkZXJzIGlmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBQTUQgbGVhdmVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowtkr4z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 05:46:57 +0000 UTC FinishedAt: 2026-07-25 06:02:12 +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": "fbae93ac88a26f1a36e5861d6f76ed9594b2c93a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "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": "fbae93ac88a26f1a36e5861d6f76ed9594b2c93a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "19204fbb-6129-4faa-aa21-e06ec7fb2896" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__thp_vma_allowable_orders", "shmem_allowable_huge_orders", "do_set_pmd" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7c2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzJiMzNDssCiAgICAmIzM0O2RvX3NldF9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IFRIUCBzdXBwb3J0IGlzIGNoZWNrZWQgYW5kIGluaXRpYWxpemVkLCByZXBsYWNpbmcgYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB3aXRoIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBJdCBtb2RpZmllcyBjb3JlIE1NIGxvZ2ljIChUSFAsIHNobWVtLCBkYXgsIG52ZGltbSkgdG8gZmlsdGVyIG91dCBQTUQgYW5kIFBVRCBvcmRlcnMgaWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOGZkNjU2NDkzMGI1ODM4NTU5YzMwZDUxZDhhMGE2ZWU4N2MyNTIwM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDA2OjAwOjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3RcbmluZGV4IGQ2NzdlMDQyOGMzZjY4Li40NmZjOTg2YzMzODhhYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdFxuQEAgLTEwOSw5ICYjNDM7MTA5LDggQEAgbm9zd2FwICBEaXNhYmxlcyBzd2FwLiBSZW1vdW50cyBtdXN0IHJlc3BlY3QgdGhlIG9yaWdpbmFsIHNldHRpbmdzLlxuID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiB0bXBmcyBhbHNvIHN1cHBvcnRzIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgd2hpY2ggcmVxdWlyZXMgYSBrZXJuZWxcbi1jb25maWd1cmVkIHdpdGggQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGFuZCB3aXRoIGh1Z2Ugc3VwcG9ydGVkIGZvclxuLXlvdXIgc3lzdGVtIChoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSwgd2hpY2ggaXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljKS5cbi1UaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6XG4mIzQzO2NvbmZpZ3VyZWQgd2l0aCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYW5kIHdpdGggaHVnZSBwYWdlc1xuJiM0MztzdXBwb3J0ZWQgZm9yIHlvdXIgc3lzdGVtLiBUaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6XG4gXG4gPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIGh1Z2U9bmV2ZXIgICAgICAgRG8gbm90IGFsbG9jYXRlIGh1Z2UgcGFnZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LlxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBmYTdiOTM1Zjk0N2NhMC4uMmEwYTdkZGY4YmVlN2UgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtNjE1LDkgJiM0Mzs2MTUsNiBAQCB1bnNpZ25lZCBsb25nIGlvX3JlbWFwX3Bmbl9yYW5nZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gLyogV2UgZG9uJiMzOTt0IGhhdmUgaGFyZHdhcmUgZGlydHkvYWNjZXNzZWQgYml0cywgZ2VuZXJpY19wbWRwX2VzdGFibGlzaCBpcyBmaW5lLiovXG4gI2RlZmluZSBwbWRwX2VzdGFibGlzaCBnZW5lcmljX3BtZHBfZXN0YWJsaXNoXG4gXG4tI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXG4tZXh0ZXJuIGludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCk7XG4tXG4gc3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxuIHtcbiBcdHJldHVybiAhIShwbWRfdmFsKHBtZCkgXHUwMDI2IF9QQUdFX0hVR0UpO1xuQEAgLTc0Myw2ICYjNDM7NzQwLDkgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4mIzQzOyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXG4mIzQzO2V4dGVybiBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcbiYjNDM7XG4gI2lmZGVmIF9QQUdFX0hVR0VcbiAjZGVmaW5lIHBtZF9sZWFmKHBtZClcdCgocG1kX3ZhbChwbWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuICNkZWZpbmUgcHVkX2xlYWYocHVkKVx0KChwdWRfdmFsKHB1ZCkgXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmNcbmluZGV4IDI0ZmU4NWZhMTY5ZDE2Li45MzM5ZWJiMDgxNWYyMyAxMDA2NDRcbi0tLSBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmNcbkBAIC00MzIsOSAmIzQzOzQzMiw3IEBAIHZvaWQgYWRkX3dpcmVkX2VudHJ5KHVuc2lnbmVkIGxvbmcgZW50cnlsbzAsIHVuc2lnbmVkIGxvbmcgZW50cnlsbzEsXG4gI2VuZGlmXG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbi1cbi1pbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4mIzQzO2ludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4ge1xuIFx0c3RhdGljIHVuc2lnbmVkIGludCBtYXNrID0gLTE7XG4gXG5AQCAtNDUwLDkgJiM0Mzs0NDgsNyBAQCBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4gXHR9XG4gXHRyZXR1cm4gbWFzayA9PSBQTV9IVUdFX01BU0s7XG4gfVxuLUVYUE9SVF9TWU1CT0woaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKTtcbi1cbi0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICAqL1xuJiM0MztFWFBPUlRfU1lNQk9MKGFyY2hfaGFzX3BtZF9sZWF2ZXMpO1xuIFxuIC8qXG4gICogVXNlZCBmb3IgbG9hZGluZyBUTEIgZW50cmllcyBiZWZvcmUgdHJhcF9pbml0KCkgaGFzIHN0YXJ0ZWQsIHdoZW4gd2VcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC00ay5oXG5pbmRleCA4ZTViZDk5MDJiZWQ0ZS4uZDUzMmUzZjBkZmMzYjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTRrLmhcbkBAIC0xNjUsOSAmIzQzOzE2NSw5IEBAIGV4dGVybiB2b2lkIGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV9kZXBvc2l0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCxcbiBleHRlcm4gcGd0YWJsZV90IGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHApO1xuIGV4dGVybiBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKTtcbi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcbiAjZW5kaWZcbiBcbiYjNDM7ZXh0ZXJuIGludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpO1xuICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqL1xuIFxuICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQk9PSzNTXzY0X0hBU0hfNEtfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaFxuaW5kZXggN2RlYjNhNjY4OTBiY2QuLmQ1MjNjODBmNDRmNzE3IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmhcbkBAIC0yNzgsOSAmIzQzOzI3OCw5IEBAIGV4dGVybiB2b2lkIGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV9kZXBvc2l0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCxcbiBleHRlcm4gcGd0YWJsZV90IGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHApO1xuIGV4dGVybiBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKTtcbi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcbiAjZW5kaWYgLyogIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuJiM0MztleHRlcm4gaW50IGhhc2hfX2FyY2hfaGFzX3BtZF9sZWF2ZXModm9pZCk7XG4gI2VuZGlmXHQvKiBfX0FTU0VNQkxFUl9fICovXG4gXG4gI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19CT09LM1NfNjRfSEFTSF82NEtfSCAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbmluZGV4IGY0ZGI3ZDdmYmQ1YzYyLi40MTE2NmQ0NGZhNzU2ZSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuQEAgLTExMjEsMTUgJiM0MzsxMTIxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIHtcbiB9XG4gXG4tZXh0ZXJuIGludCBoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCk7XG4tc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4te1xuLVx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcbi1cdFx0cmV0dXJuIHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKTtcbi1cdHJldHVybiBoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKTtcbi19XG4tI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXG4tXG4gc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxuIHtcbiBcdGlmIChyYWRpeF9lbmFibGVkKCkpXG5AQCAtMTQ0MSw2ICYjNDM7MTQzMiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9uZWVkc19wZ3RhYmxlX2RlcG9zaXQodm9pZClcbiBcbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4mIzQzO2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHJhZGl4X2VuYWJsZWQoKSlcbiYjNDM7XHRcdHJldHVybiByYWRpeF9fYXJjaF9oYXNfcG1kX2xlYXZlcygpO1xuJiM0MztcdHJldHVybiBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKCk7XG4mIzQzO31cbiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcbiYjNDM7XG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX01PRElGWV9QUk9UX1RSQU5TQUNUSU9OXG4gcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7XG4gdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmhcbmluZGV4IGRhOTU0ZTc3OTc0NDFmLi5lOGI3NDUyODk1M2ZkYyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oXG5AQCAtMjk4LDIyICYjNDM7Mjk4LDIyIEBAIGV4dGVybiBwbWRfdCByYWRpeF9fcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gcHVkX3QgcmFkaXhfX3B1ZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwKTtcbiBcbi1zdGF0aWMgaW5saW5lIGludCByYWRpeF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKHZvaWQpXG4ge1xuLVx0LyogRm9yIHJhZGl4IDJNIGF0IFBNRCBsZXZlbCBtZWFucyB0aHAgKi9cbi1cdGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8yTV0uc2hpZnQgPT0gUE1EX1NISUZUKVxuJiM0MztcdC8qIEZvciByYWRpeCAxRyBhdCBQVUQgbGV2ZWwgbWVhbnMgcHVkIGh1Z2VwYWdlIHN1cHBvcnQgKi9cbiYjNDM7XHRpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMUddLnNoaWZ0ID09IFBVRF9TSElGVClcbiBcdFx0cmV0dXJuIDE7XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzQzOyNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKHZvaWQpXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4ge1xuLVx0LyogRm9yIHJhZGl4IDFHIGF0IFBVRCBsZXZlbCBtZWFucyBwdWQgaHVnZXBhZ2Ugc3VwcG9ydCAqL1xuLVx0aWYgKG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzFHXS5zaGlmdCA9PSBQVURfU0hJRlQpXG4mIzQzO1x0LyogRm9yIHJhZGl4IDJNIGF0IFBNRCBsZXZlbCBtZWFucyB0aHAgKi9cbiYjNDM7XHRpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMk1dLnNoaWZ0ID09IFBNRF9TSElGVClcbiBcdFx0cmV0dXJuIDE7XG4gXHRyZXR1cm4gMDtcbiB9XG4tI2VuZGlmXG4gXG4gc3RydWN0IHZtZW1fYWx0bWFwO1xuIHN0cnVjdCBkZXZfcGFnZW1hcDtcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmNcbmluZGV4IGQ5YjViNzUxZDdiNzViLi5hNjdiYzE3MjM0MDRjMiAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jXG5AQCAtMzkxLDcgJiM0MzszOTEsOSBAQCBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBvbGRfcG1kO1xuIH1cbiBcbi1pbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiYjNDM7XG4mIzQzO2ludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4ge1xuIFxuIFx0aWYgKCFtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xNk1fUEFHRSkpXG5AQCAtNDIwLDkgJiM0Mzs0MjIsNyBAQCBpbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4gXG4gXHRyZXR1cm4gMTtcbiB9XG4tRVhQT1JUX1NZTUJPTF9HUEwoaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKTtcbi1cbi0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGhhc2hfX2FyY2hfaGFzX3BtZF9sZWF2ZXMpO1xuIFxuICNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1hcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggZTg4MjY2M2E1OGU3NzYuLjI0ZWU5MGM3ZTliZjZiIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTE4MjUsMTMgJiM0MzsxODI1LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcbiB7XG4gXHRyZXR1cm4gcG1kX2xlYWYocG1kKTtcbiB9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbi0jZGVmaW5lIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Vcbi1zdGF0aWMgaW5saW5lIGludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZClcbiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuIHtcbiBcdHJldHVybiBjcHVfaGFzX2VkYXQxKCkgPyAxIDogMDtcbiB9XG4tI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9UQUJMRV9DSEVDS1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggOGUwMDE4ZmFkZDE0ZTYuLjNjNmE2NDFlNmMyMTFkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0zMDYsMTIgJiM0MzszMDYsNiBAQCBzdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXG4gfVxuICNlbmRpZlxuIFxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxuLXN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxuLXtcbi1cdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUFNFKTtcbi19XG4tXG4gI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcbiBzdGF0aWMgaW5saW5lIGJvb2wgcG1kX3NwZWNpYWwocG1kX3QgcG1kKVxuIHtcbkBAIC0zMzcsNiAmIzQzOzMzMSwxMiBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9ta3NwZWNpYWwocHVkX3QgcHVkKVxuICNlbmRpZlx0LyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUCAqL1xuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QU0UpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3NldF9mbGFncyhwdGVfdCBwdGUsIHB0ZXZhbF90IHNldClcbiB7XG4gXHRwdGV2YWxfdCB2ID0gbmF0aXZlX3B0ZV92YWwocHRlKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oIGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuaW5kZXggODFlNGFmNDllMzljMTAuLjM1NzQ0ZmY2NTkyYWM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxuQEAgLTEyMyw3ICYjNDM7MTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxuIHtcbiBcdGlmIChhbGlnbiA9PSBQVURfU0laRSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCkpXG4gXHRcdHJldHVybiB0cnVlO1xuLVx0aWYgKGFsaWduID09IFBNRF9TSVpFIFx1MDAyNlx1MDAyNiBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbiYjNDM7XHRpZiAoYWxpZ24gPT0gUE1EX1NJWkUgXHUwMDI2XHUwMDI2IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHRpZiAoYWxpZ24gPT0gUEFHRV9TSVpFKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jIGIvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY1xuaW5kZXggOGZhOWMxNmFiYTdlYTAuLjQ1N2ViNTRlN2FiNmZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY1xuQEAgLTk0LDcgJiM0Mzs5NCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nICpuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHModW5zaWduZWQgbG9uZyAqYWxpZ25tZW50cylcbiBcbiBcdGFsaWdubWVudHNbMF0gPSBQQUdFX1NJWkU7XG4gXG4tXHRpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpIHtcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpIHtcbiBcdFx0YWxpZ25tZW50c1sxXSA9IEhQQUdFX1BNRF9TSVpFO1xuIFx0XHRpZiAoaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSgpKVxuIFx0XHRcdGFsaWdubWVudHNbMl0gPSBIUEFHRV9QVURfU0laRTtcbkBAIC0xMDksNyAmIzQzOzExMCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nICpuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHModW5zaWduZWQgbG9uZyAqYWxpZ25tZW50cylcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuZF9wZm5fZGVmYXVsdF9hbGlnbm1lbnQodm9pZClcbiB7XG4gXG4tXHRpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4mIzQzO1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm4gSFBBR0VfUE1EX1NJWkU7XG4gXHRyZXR1cm4gUEFHRV9TSVpFO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG5pbmRleCBjNzQ1ZjdhZDIyOTg3Zi4uNTI1YWNlYTJlYjU5Y2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbkBAIC00Nyw3ICYjNDM7NDcsNiBAQCB2bV9mYXVsdF90IHZtZl9pbnNlcnRfZm9saW9fcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0Ym9vbCB3cml0ZSk7XG4gXG4gZW51bSB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFnIHtcbi1cdFRSQU5TUEFSRU5UX0hVR0VQQUdFX1VOU1VQUE9SVEVELFxuIFx0VFJBTlNQQVJFTlRfSFVHRVBBR0VfRkxBRyxcbiBcdFRSQU5TUEFSRU5UX0hVR0VQQUdFX1JFUV9NQURWX0ZMQUcsXG4gXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUcsXG5AQCAtMzgzLDEyICYjNDM7MzgyLDYgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gbW1fZmxhZ3NfdGVzdChNTUZfRElTQUJMRV9USFBfRVhDRVBUX0FEVklTRUQsIHZtYS1cdTAwM2V2bV9tbSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfZGlzYWJsZWRfYnlfaHcodm9pZClcbi17XG4tXHQvKiBJZiB0aGUgaGFyZHdhcmUvZmlybXdhcmUgbWFya2VkIGh1Z2VwYWdlIHN1cHBvcnQgZGlzYWJsZWQuICovXG4tXHRyZXR1cm4gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRCk7XG4tfVxuLVxuIHVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbmluZGV4IDhjMDkzYzExOWU1YTgyLi5kNTcxZDE2MWE4NGIzYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW1fdHlwZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9qdW1wX2xhYmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaFx1MDAzZVxuIFxuQEAgLTIzMTMsNiAmIzQzOzIzMTQsMjEgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwZ3RhYmxlX2xldmVsX3RvX3N0cihlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gXHR9XG4gfVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX01NVVxuJiM0MztERUNMQVJFX1NUQVRJQ19LRVlfVFJVRShfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBndGFibGVfaGFzX3BtZF9sZWF2ZXModm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcbiYjNDM7fVxuJiM0Mzt2b2lkIF9faW5pdCBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KHZvaWQpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqL1xuIFxuICNpZiAhZGVmaW5lZChNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQ09ORklHXzY0QklUKVxuQEAgLTIzMjgsOCAmIzQzOzIzNDQsOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBndGFibGVfbGV2ZWxfdG9fc3RyKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbiAjZW5kaWZcbiAjZW5kaWZcbiBcbi0jaWZuZGVmIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgSVNfQlVJTFRJTihDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4mIzQzOyNpZm5kZWYgYXJjaF9oYXNfcG1kX2xlYXZlc1xuJiM0MzsjZGVmaW5lIGFyY2hfaGFzX3BtZF9sZWF2ZXMoKSBJU19CVUlMVElOKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4gI2VuZGlmXG4gXG4gI2lmbmRlZiBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlXG5kaWZmIC0tZ2l0IGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jIGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jXG5pbmRleCAyODc1ZmQyMmQ3YmIwMi4uMjUwMzhiNzRjN2JjNjcgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RlYnVnX3ZtX3BndGFibGUuY1xuQEAgLTE3Nyw3ICYjNDM7MTc3LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KVxuIFx0dW5zaWduZWQgbG9uZyB2YWwgPSBpZHgsICpwdHIgPSBcdTAwMjZ2YWw7XG4gXHRwbWRfdCBwbWQ7XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuJiM0MztcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBiYXNpYyAoJXBHdilcXG5cJiMzNDssIHB0cik7XG5AQCAtMjIyLDcgJiM0MzsyMjIsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2FkdmFuY2VkX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRwbWRfdCBwbWQ7XG4gXHR1bnNpZ25lZCBsb25nIHZhZGRyID0gYXJncy1cdTAwM2V2YWRkcjtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4mIzQzO1x0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHBhZ2UgPSAoYXJncy1cdTAwM2VwbWRfcGZuICE9IFVMT05HX01BWCkgPyBwZm5fdG9fcGFnZShhcmdzLVx1MDAzZXBtZF9wZm4pIDogTlVMTDtcbkBAIC0yODMsNyAmIzQzOzI4Myw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIHtcbiBcdHBtZF90IHBtZDtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4mIzQzO1x0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O1ZhbGlkYXRpbmcgUE1EIGxlYWZcXG5cJiMzNDspO1xuQEAgLTY4OCw3ICYjNDM7Njg4LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuJiM0MztcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBwcm90bm9uZVxcblwmIzM0Oyk7XG5AQCAtNzM3LDcgJiM0Mzs3MzcsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdGlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4mIzQzO1x0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHByX2RlYnVnKFwmIzM0O1ZhbGlkYXRpbmcgUE1EIHNvZnQgZGlydHlcXG5cJiMzNDspO1xuQEAgLTc1NCw3ICYjNDM7NzU0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdCAgICAhSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfUE1EX1NPRlRMRUFWRVMpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuJiM0MztcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBzd2FwIHNvZnQgZGlydHlcXG5cJiMzNDspO1xuQEAgLTgyNSw3ICYjNDM7ODI1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0c3dwX2VudHJ5X3QgYXJjaF9lbnRyeTtcbiBcdHBtZF90IHBtZDEsIHBtZDI7XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuJiM0MztcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBzd2FwXFxuXCYjMzQ7KTtcbkBAIC05MDYsNyAmIzQzOzkwNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4ge1xuIFx0cG1kX3QgcG1kO1xuIFxuLVx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbiYjNDM7XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cHJfZGVidWcoXCYjMzQ7VmFsaWRhdGluZyBQTUQgYmFzZWQgVEhQXFxuXCYjMzQ7KTtcbkBAIC05OTcsNyAmIzQzOzk5Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBkZXN0cm95X2FyZ3Moc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdH1cbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBhcmdzLVx1MDAzZXBtZF9wZm4gIT0gVUxPTkdfTUFYKSB7XG4gXHRcdGRlYnVnX3ZtX3BndGFibGVfZnJlZV9odWdlX3BhZ2UoYXJncywgYXJncy1cdTAwM2VwbWRfcGZuLCBIUEFHRV9QTURfT1JERVIpO1xuIFx0XHRhcmdzLVx1MDAzZXBtZF9wZm4gPSBVTE9OR19NQVg7XG5AQCAtMTI0OSw3ICYjNDM7MTI0OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkge1xuJiM0MztcdCAgICBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpIHtcbiBcdFx0cGFnZSA9IGRlYnVnX3ZtX3BndGFibGVfYWxsb2NfaHVnZV9wYWdlKGFyZ3MsIEhQQUdFX1BNRF9PUkRFUik7XG4gXHRcdGlmIChwYWdlKSB7XG4gXHRcdFx0YXJncy1cdTAwM2VwbWRfcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDA0ZThhNmI1NTM0MzVmLi4zODVhMzA1ZTdhZjY1MSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xMjksNiAmIzQzOzEyOSwxNSBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ZWxzZVxuIFx0XHRzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfRklMRV9ERUZBVUxUO1xuIFxuJiM0MztcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMsIGFzc3VtZSBmb3JcbiYjNDM7XHRcdCAqIG5vdyB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQgUFVEIGxlYXZlcyBhbmQgZGlzYWJsZVxuJiM0MztcdFx0ICogYm90aCBmb2xpbyBvcmRlcnMuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHN1cHBvcnRlZF9vcmRlcnMgXHUwMDI2PSB+KEJJVChQTURfT1JERVIpIHwgQklUKFBVRF9PUkRFUikpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvcmRlcnMgXHUwMDI2PSBzdXBwb3J0ZWRfb3JkZXJzO1xuIFx0aWYgKCFvcmRlcnMpXG4gXHRcdHJldHVybiAwO1xuQEAgLTEzNiw3ICYjNDM7MTQ1LDcgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmICghdm1hLVx1MDAzZXZtX21tKVx0XHQvKiB2ZHNvICovXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHRocF9kaXNhYmxlZF9ieV9odygpIHx8IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgZm9yY2VkX2NvbGxhcHNlKSlcbiYjNDM7XHRpZiAodm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBmb3JjZWRfY29sbGFwc2UpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIGtodWdlcGFnZWQgZG9lc24mIzM5O3QgY29sbGFwc2UgREFYIHZtYSwgYnV0IHBhZ2UgZmF1bHQgaXMgZmluZS4gKi9cbkBAIC04NzQsNyAmIzQzOzg4Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxuIFx0ICogZGlzYWJsZSBhbGwgb3RoZXIgc2l6ZXMuIHBvd2VycGMmIzM5O3MgUE1EX09SREVSIGlzbiYjMzk7dCBhIGNvbXBpbGUtdGltZVxuIFx0ICogY29uc3RhbnQgc28gd2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUuXG4gXHQgKi9cbi1cdGlmICghYW5vbl9vcmRlcnNfY29uZmlndXJlZClcbiYjNDM7XHRpZiAoIWFub25fb3JkZXJzX2NvbmZpZ3VyZWQgXHUwMDI2XHUwMDI2IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0aHVnZV9hbm9uX29yZGVyc19pbmhlcml0ID0gQklUKFBNRF9PUkRFUik7XG4gXG4gXHQqaHVnZXBhZ2Vfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoXCYjMzQ7dHJhbnNwYXJlbnRfaHVnZXBhZ2VcJiMzNDssIG1tX2tvYmopO1xuQEAgLTg5Niw2ICYjNDM7OTA1LDE1IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxuIFx0fVxuIFxuIFx0b3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTiB8IFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVDtcbiYjNDM7XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBQTUQgbGVhdmVzLCBhc3N1bWUgZm9yXG4mIzQzO1x0XHQgKiBub3cgdGhhdCBpdCBkb2VzIG5vdCBzdXBwb3J0IFBVRCBsZWF2ZXMgYW5kIGRpc2FibGVcbiYjNDM7XHRcdCAqIGJvdGggZm9saW8gb3JkZXJzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRvcmRlcnMgXHUwMDI2PSB+KEJJVChQTURfT1JERVIpIHwgQklUKFBVRF9PUkRFUikpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRvcmRlciA9IGhpZ2hlc3Rfb3JkZXIob3JkZXJzKTtcbiBcdHdoaWxlIChvcmRlcnMpIHtcbiBcdFx0dGhwc2l6ZSA9IHRocHNpemVfY3JlYXRlKG9yZGVyLCAqaHVnZXBhZ2Vfa29iaik7XG5AQCAtMTAxMCwxMSAmIzQzOzEwMjgsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0KHZvaWQpXG4gXHRpbnQgZXJyO1xuIFx0c3RydWN0IGtvYmplY3QgKmh1Z2VwYWdlX2tvYmo7XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XG4tXHRcdHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzID0gMSBcdTAwM2NcdTAwM2MgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVU5TVVBQT1JURUQ7XG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVx0fVxuLVxuIFx0LypcbiBcdCAqIGh1Z2VwYWdlcyBjYW4mIzM5O3QgYmUgYWxsb2NhdGVkIGJ5IHRoZSBidWRkeSBhbGxvY2F0b3JcbiBcdCAqL1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IDU2YjI0NDU1MmYxMzk0Li5mMzlkOTM4MzQ5NGU2OSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTE2NCw2ICYjNDM7MTY0LDE1IEBAIF9fc2V0dXAoXCYjMzQ7bm9yYW5kbWFwc1wmIzM0OywgZGlzYWJsZV9yYW5kbWFwcyk7XG4gXG4gdW5zaWduZWQgbG9uZyBoaWdoZXN0X21lbW1hcF9wZm4gX19yZWFkX21vc3RseTtcbiBcbiYjNDM7REVGSU5FX1NUQVRJQ19LRVlfVFJVRShfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcbiYjNDM7RVhQT1JUX1NZTUJPTChfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcbiYjNDM7XG4mIzQzO3ZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdGlmICghYXJjaF9oYXNfcG1kX2xlYXZlcygpKVxuJiM0MztcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNl9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgbW1fdHJhY2VfcnNzX3N0YXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpXG4ge1xuIFx0dHJhY2VfcnNzX3N0YXQobW0sIG1lbWJlcik7XG5AQCAtNTU2Nyw3ICYjNDM7NTU3Niw3IEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhXG4gXHQgKiBQTUQgbWFwcGluZ3MgaWYgVEhQcyBhcmUgZGlzYWJsZWQuIEFzIHdlIGFscmVhZHkgaGF2ZSBhIFRIUCxcbiBcdCAqIGJlaGF2ZSBhcyBpZiB3ZSBhcmUgZm9yY2luZyBhIGNvbGxhcHNlLlxuIFx0ICovXG4tXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncyxcbiYjNDM7XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSB8fCB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLFxuIFx0XHRcdFx0XHRcdCAgICAgLyogZm9yY2VkX2NvbGxhcHNlPSovIHRydWUpKVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuY1xuaW5kZXggNzExZjgyMWY3YjNjNzIuLmRjYzA3MmRiNDU1ODcyIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tbV9pbml0LmNcbkBAIC0yNjk5LDYgJiM0MzsyNjk5LDcgQEAgdm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4ge1xuIFx0YXJjaF9tbV9wcmVpbml0KCk7XG4gXHRpbml0X3plcm9fcGFnZV9wZm4oKTtcbiYjNDM7XHRwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KCk7XG4gXG4gXHQvKiBJbml0aWFsaXphdGlvbnMgcmVseWluZyBvbiBTTVAgc2V0dXAgKi9cbiBcdEJVSUxEX0JVR19PTihNQVhfWk9ORUxJU1RTIFx1MDAzZSAyKTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTA3MTE3NzA1OWE5NjQuLjAwOGRmNTU4YWYyMzdlIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2htZW0uY1xuQEAgLTY4OSw3ICYjNDM7Njg5LDcgQEAgc3RhdGljIGludCBzaG1lbV9wYXJzZV9odWdlKGNvbnN0IGNoYXIgKnN0cilcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIGh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcdTAwMjZcdTAwMjYgaHVnZSAhPSBTSE1FTV9IVUdFX0RFTlkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuQEAgLTEyODcsNiAmIzQzOzEyODcsNyBAQCBzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4gXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuJiM0MztcdHVuc2lnbmVkIGludCBvcmRlcnM7XG4gXG4gXHQvKiBGYXN0LXBhdGggaGludDsgcmVjYWxjIHVuZGVyIGluZm8tXHUwMDNlbG9jayBjb3JyZWN0cyBhbnkgc3RhbGUgcmVhZC4gKi9cbiBcdGlmIChkYXRhX3JhY2UoaW5mby1cdTAwM2VhbGxvY2VkIC0gaW5mby1cdTAwM2Vzd2FwcGVkICE9IGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VucnBhZ2VzKSlcbkBAIC0xMzAzLDggJiM0MzsxMzA0LDExIEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHRTVEFUWF9BVFRSX05PRFVNUCk7XG4gXHRnZW5lcmljX2ZpbGxhdHRyKGlkbWFwLCByZXF1ZXN0X21hc2ssIGlub2RlLCBzdGF0KTtcbiBcbi1cdGlmIChzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKGlub2RlLCAwLCAwLCBmYWxzZSwgTlVMTCwgMCkpXG4tXHRcdHN0YXQtXHUwMDNlYmxrc2l6ZSA9IEhQQUdFX1BNRF9TSVpFO1xuJiM0MztcdG9yZGVycyA9IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoaW5vZGUsIDAsIDAsIGZhbHNlLCBOVUxMLCAwKTtcbiYjNDM7XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiYjNDM7XHRcdG9yZGVycyBcdTAwMjY9IH5CSVQoUE1EX09SREVSKTtcbiYjNDM7XHRpZiAob3JkZXJzKVxuJiM0MztcdFx0c3RhdC1cdTAwM2VibGtzaXplID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBoaWdoZXN0X29yZGVyKG9yZGVycyk7XG4gXG4gXHRpZiAocmVxdWVzdF9tYXNrIFx1MDAyNiBTVEFUWF9CVElNRSkge1xuIFx0XHRzdGF0LVx1MDAzZXJlc3VsdF9tYXNrIHw9IFNUQVRYX0JUSU1FO1xuQEAgLTE4MjYsMTYgJiM0MzsxODMwLDE5IEBAIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzKTtcbiBcdHVuc2lnbmVkIGxvbmcgd2l0aGluX3NpemVfb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX3dpdGhpbl9zaXplKTtcbiBcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEgPyB2bWEtXHUwMDNldm1fZmxhZ3MgOiAwO1xuLVx0dW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnMsIGRpc2FibGVkX29yZGVycyA9IDA7XG4gXG4tXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSBcdTAwMjZcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSkpXG4mIzQzO1x0aWYgKHZtYSBcdTAwMjZcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4mIzQzO1x0XHRkaXNhYmxlZF9vcmRlcnMgPSBCSVQoUE1EX09SREVSKTtcbiYjNDM7XG4gXHRnbG9iYWxfb3JkZXJzID0gc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChpbm9kZSwgaW5kZXgsIHdyaXRlX2VuZCxcbiBcdFx0XHRcdFx0XHQgIHNobWVtX2h1Z2VfZm9yY2UsIHZtYSwgdm1fZmxhZ3MpO1xuIFx0LyogVG1wZnMgaHVnZSBwYWdlcyBhbGxvY2F0aW9uICovXG4gXHRpZiAoIXZtYSB8fCAhdm1hX2lzX2Fub25fc2htZW0odm1hKSlcbi1cdFx0cmV0dXJuIGdsb2JhbF9vcmRlcnM7XG4mIzQzO1x0XHRyZXR1cm4gZ2xvYmFsX29yZGVycyBcdTAwMjYgfmRpc2FibGVkX29yZGVycztcbiBcbiBcdC8qXG4gXHQgKiBGb2xsb3dpbmcgdGhlICYjMzk7ZGVueSYjMzk7IHNlbWFudGljcyBvZiB0aGUgdG9wIGxldmVsLCBmb3JjZSB0aGUgaHVnZVxuQEAgLTE4NDksNyAmIzQzOzE4NTYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0ICogbWVhbnMgbm9uLVBNRCBzaXplZCBUSFAgY2FuIG5vdCBvdmVycmlkZSAmIzM5O2h1Z2UmIzM5OyBtb3VudCBvcHRpb24gbm93LlxuIFx0ICovXG4gXHRpZiAoc2htZW1faHVnZSA9PSBTSE1FTV9IVUdFX0ZPUkNFKVxuLVx0XHRyZXR1cm4gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQpO1xuJiM0MztcdFx0cmV0dXJuIFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19pbmhlcml0KSBcdTAwMjYgfmRpc2FibGVkX29yZGVycztcbiBcbiBcdC8qIEFsbG93IG1USFAgdGhhdCB3aWxsIGJlIGZ1bGx5IHdpdGhpbiBpX3NpemUuICovXG4gXHRtYXNrIHw9IHNobWVtX2dldF9vcmRlcnNfd2l0aGluX3NpemUoaW5vZGUsIHdpdGhpbl9zaXplX29yZGVycywgaW5kZXgsIDApO1xuQEAgLTE4NjAsNiAmIzQzOzE4NjcsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKGdsb2JhbF9vcmRlcnMgXHUwMDNlIDApXG4gXHRcdG1hc2sgfD0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQpO1xuIFxuJiM0MztcdG1hc2sgXHUwMDI2PSB+ZGlzYWJsZWRfb3JkZXJzO1xuIFx0cmV0dXJuIFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVCBcdTAwMjYgbWFzaztcbiB9XG4gXG5AQCAtNDU4Nyw4ICYjNDM7NDU5NSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fcGFyc2Vfb25lKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4gXHRjYXNlIE9wdF9odWdlOlxuIFx0XHRjdHgtXHUwMDNlaHVnZSA9IHJlc3VsdC51aW50XzMyO1xuIFx0XHRpZiAoY3R4LVx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICEoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkpXG4mIzQzO1x0XHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiBcdFx0XHRnb3RvIHVuc3VwcG9ydGVkX3BhcmFtZXRlcjtcbiBcdFx0Y3R4LVx1MDAzZXNlZW4gfD0gU0hNRU1fU0VFTl9IVUdFO1xuIFx0XHRicmVhaztcbkBAIC01MzgzLDcgJiM0Mzs1MzkwLDcgQEAgdm9pZCBfX2luaXQgc2htZW1faW5pdCh2b2lkKVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbi1cdGlmIChoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBcdTAwMjZcdTAwMjYgc2htZW1faHVnZSBcdTAwM2UgU0hNRU1fSFVHRV9ERU5ZKVxuJiM0MztcdGlmIChzaG1lbV9odWdlIFx1MDAzZSBTSE1FTV9IVUdFX0RFTlkpXG4gXHRcdFNITUVNX1NCKHNobV9tbnQtXHUwMDNlbW50X3NiKS1cdTAwM2VodWdlID0gc2htZW1faHVnZTtcbiBcdGVsc2VcbiBcdFx0c2htZW1faHVnZSA9IFNITUVNX0hVR0VfTkVWRVI7IC8qIGp1c3QgaW4gY2FzZSBpdCB3YXMgcGF0Y2hlZCAqL1xuQEAgLTUzOTIsNyAmIzQzOzUzOTksNyBAQCB2b2lkIF9faW5pdCBzaG1lbV9pbml0KHZvaWQpXG4gXHQgKiBEZWZhdWx0IHRvIHNldHRpbmcgUE1ELXNpemVkIFRIUCB0byBpbmhlcml0IHRoZSBnbG9iYWwgc2V0dGluZyBhbmRcbiBcdCAqIGRpc2FibGUgYWxsIG90aGVyIG11bHRpLXNpemUgVEhQcy5cbiBcdCAqL1xuLVx0aWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZClcbiYjNDM7XHRpZiAoIXNobWVtX29yZGVyc19jb25maWd1cmVkIFx1MDAyNlx1MDAyNiBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQgPSBCSVQoSFBBR0VfUE1EX09SREVSKTtcbiAjZW5kaWZcbiBcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7LAogICAgJiMzNDtzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7ZG9fc2V0X3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgVEhQIHN1cHBvcnQgaXMgY2hlY2tlZCBhbmQgaW5pdGlhbGl6ZWQsIHJlcGxhY2luZyBgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKClgIHdpdGggYHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKWAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gbG9naWMgKFRIUCwgc2htZW0sIGRheCwgbnZkaW1tKSB0byBmaWx0ZXIgb3V0IFBNRCBhbmQgUFVEIG9yZGVycyBpZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgUE1EIGxlYXZlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZmQ2NTY0OTMwYjU4Mzg1NTljMzBkNTFkOGEwYTZlZTg3YzI1MjAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMjUgMDY6MDA6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0CmluZGV4IGQ2NzdlMDQyOGMzZjY4Li40NmZjOTg2YzMzODhhYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3QKQEAgLTEwOSw5ICYjNDM7MTA5LDggQEAgbm9zd2FwICBEaXNhYmxlcyBzd2FwLiBSZW1vdW50cyBtdXN0IHJlc3BlY3QgdGhlIG9yaWdpbmFsIHNldHRpbmdzLgogPT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiB0bXBmcyBhbHNvIHN1cHBvcnRzIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgd2hpY2ggcmVxdWlyZXMgYSBrZXJuZWwKLWNvbmZpZ3VyZWQgd2l0aCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYW5kIHdpdGggaHVnZSBzdXBwb3J0ZWQgZm9yCi15b3VyIHN5c3RlbSAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCksIHdoaWNoIGlzIGFyY2hpdGVjdHVyZSBzcGVjaWZpYykuCi1UaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6CiYjNDM7Y29uZmlndXJlZCB3aXRoIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhbmQgd2l0aCBodWdlIHBhZ2VzCiYjNDM7c3VwcG9ydGVkIGZvciB5b3VyIHN5c3RlbS4gVGhlIG1vdW50IG9wdGlvbnMgZm9yIHRoaXMgYXJlOgogCiA9PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBodWdlPW5ldmVyICAgICAgIERvIG5vdCBhbGxvY2F0ZSBodWdlIHBhZ2VzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGZhN2I5MzVmOTQ3Y2EwLi4yYTBhN2RkZjhiZWU3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC02MTUsOSAmIzQzOzYxNSw2IEBAIHVuc2lnbmVkIGxvbmcgaW9fcmVtYXBfcGZuX3JhbmdlX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplKTsKIC8qIFdlIGRvbiYjMzk7dCBoYXZlIGhhcmR3YXJlIGRpcnR5L2FjY2Vzc2VkIGJpdHMsIGdlbmVyaWNfcG1kcF9lc3RhYmxpc2ggaXMgZmluZS4qLwogI2RlZmluZSBwbWRwX2VzdGFibGlzaCBnZW5lcmljX3BtZHBfZXN0YWJsaXNoCiAKLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZQotZXh0ZXJuIGludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCk7Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZCkKIHsKIAlyZXR1cm4gISEocG1kX3ZhbChwbWQpICZhbXA7IF9QQUdFX0hVR0UpOwpAQCAtNzQzLDYgJiM0Mzs3NDAsOSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAKJiM0MzsjZGVmaW5lIGFyY2hfaGFzX3BtZF9sZWF2ZXMgYXJjaF9oYXNfcG1kX2xlYXZlcwomIzQzO2V4dGVybiBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTsKJiM0MzsKICNpZmRlZiBfUEFHRV9IVUdFCiAjZGVmaW5lIHBtZF9sZWFmKHBtZCkJKChwbWRfdmFsKHBtZCkgJmFtcDsgX1BBR0VfSFVHRSkgIT0gMCkKICNkZWZpbmUgcHVkX2xlYWYocHVkKQkoKHB1ZF92YWwocHVkKSAmYW1wOyBfUEFHRV9IVUdFKSAhPSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggMjRmZTg1ZmExNjlkMTYuLjkzMzllYmIwODE1ZjIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKQEAgLTQzMiw5ICYjNDM7NDMyLDcgQEAgdm9pZCBhZGRfd2lyZWRfZW50cnkodW5zaWduZWQgbG9uZyBlbnRyeWxvMCwgdW5zaWduZWQgbG9uZyBlbnRyeWxvMSwKICNlbmRpZgogfQogCi0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCi0KLWludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCkKJiM0MztpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKQogewogCXN0YXRpYyB1bnNpZ25lZCBpbnQgbWFzayA9IC0xOwogCkBAIC00NTAsOSAmIzQzOzQ0OCw3IEBAIGludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCkKIAl9CiAJcmV0dXJuIG1hc2sgPT0gUE1fSFVHRV9NQVNLOwogfQotRVhQT1JUX1NZTUJPTChoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UpOwotCi0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICAqLwomIzQzO0VYUE9SVF9TWU1CT0woYXJjaF9oYXNfcG1kX2xlYXZlcyk7CiAKIC8qCiAgKiBVc2VkIGZvciBsb2FkaW5nIFRMQiBlbnRyaWVzIGJlZm9yZSB0cmFwX2luaXQoKSBoYXMgc3RhcnRlZCwgd2hlbiB3ZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaAppbmRleCA4ZTViZDk5MDJiZWQ0ZS4uZDUzMmUzZjBkZmMzYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC00ay5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC00ay5oCkBAIC0xNjUsOSAmIzQzOzE2NSw5IEBAIGV4dGVybiB2b2lkIGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV9kZXBvc2l0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCwKIGV4dGVybiBwZ3RhYmxlX3QgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCk7CiBleHRlcm4gcG1kX3QgaGFzaF9fcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApOwotZXh0ZXJuIGludCBoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCk7CiAjZW5kaWYKIAomIzQzO2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTsKICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0JPT0szU182NF9IQVNIXzRLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaAppbmRleCA3ZGViM2E2Njg5MGJjZC4uZDUyM2M4MGY0NGY3MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmgKQEAgLTI3OCw5ICYjNDM7Mjc4LDkgQEAgZXh0ZXJuIHZvaWQgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX2RlcG9zaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLAogZXh0ZXJuIHBndGFibGVfdCBoYXNoX19wZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwKTsKIGV4dGVybiBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcCk7Ci1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTsKICNlbmRpZiAvKiAgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAKJiM0MztleHRlcm4gaW50IGhhc2hfX2FyY2hfaGFzX3BtZF9sZWF2ZXModm9pZCk7CiAjZW5kaWYJLyogX19BU1NFTUJMRVJfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0JPT0szU182NF9IQVNIXzY0S19IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oCmluZGV4IGY0ZGI3ZDdmYmQ1YzYyLi40MTE2NmQ0NGZhNzU2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKQEAgLTExMjEsMTUgJiM0MzsxMTIxLDYgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogewogfQogCi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTsKLXN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKQotewotCWlmIChyYWRpeF9lbmFibGVkKCkpCi0JCXJldHVybiByYWRpeF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCk7Ci0JcmV0dXJuIGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSgpOwotfQotI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlCi0KIHN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2Uodm9pZCkKIHsKIAlpZiAocmFkaXhfZW5hYmxlZCgpKQpAQCAtMTQ0MSw2ICYjNDM7MTQzMiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9uZWVkc19wZ3RhYmxlX2RlcG9zaXQodm9pZCkKIAogI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwogCiYjNDM7ZXh0ZXJuIGludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaGFzX3BtZF9sZWF2ZXModm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChyYWRpeF9lbmFibGVkKCkpCiYjNDM7CQlyZXR1cm4gcmFkaXhfX2FyY2hfaGFzX3BtZF9sZWF2ZXMoKTsKJiM0MzsJcmV0dXJuIGhhc2hfX2FyY2hfaGFzX3BtZF9sZWF2ZXMoKTsKJiM0Mzt9CiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXMKJiM0MzsKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9NT0RJRllfUFJPVF9UUkFOU0FDVElPTgogcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7CiB2b2lkIHB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oCmluZGV4IGRhOTU0ZTc3OTc0NDFmLi5lOGI3NDUyODk1M2ZkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaApAQCAtMjk4LDIyICYjNDM7Mjk4LDIyIEBAIGV4dGVybiBwbWRfdCByYWRpeF9fcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiBwdWRfdCByYWRpeF9fcHVkcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB1ZF90ICpwdWRwKTsKIAotc3RhdGljIGlubGluZSBpbnQgcmFkaXhfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKHZvaWQpCiB7Ci0JLyogRm9yIHJhZGl4IDJNIGF0IFBNRCBsZXZlbCBtZWFucyB0aHAgKi8KLQlpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMk1dLnNoaWZ0ID09IFBNRF9TSElGVCkKJiM0MzsJLyogRm9yIHJhZGl4IDFHIGF0IFBVRCBsZXZlbCBtZWFucyBwdWQgaHVnZXBhZ2Ugc3VwcG9ydCAqLwomIzQzOwlpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMUddLnNoaWZ0ID09IFBVRF9TSElGVCkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiYjNDM7I2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKHZvaWQpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgcmFkaXhfX2FyY2hfaGFzX3BtZF9sZWF2ZXModm9pZCkKIHsKLQkvKiBGb3IgcmFkaXggMUcgYXQgUFVEIGxldmVsIG1lYW5zIHB1ZCBodWdlcGFnZSBzdXBwb3J0ICovCi0JaWYgKG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzFHXS5zaGlmdCA9PSBQVURfU0hJRlQpCiYjNDM7CS8qIEZvciByYWRpeCAyTSBhdCBQTUQgbGV2ZWwgbWVhbnMgdGhwICovCiYjNDM7CWlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8yTV0uc2hpZnQgPT0gUE1EX1NISUZUKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCiBzdHJ1Y3Qgdm1lbV9hbHRtYXA7CiBzdHJ1Y3QgZGV2X3BhZ2VtYXA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMgYi9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMKaW5kZXggZDliNWI3NTFkN2I3NWIuLmE2N2JjMTcyMzQwNGMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jCkBAIC0zOTEsNyAmIzQzOzM5MSw5IEBAIHBtZF90IGhhc2hfX3BtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCXJldHVybiBvbGRfcG1kOwogfQogCi1pbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpCiYjNDM7I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwomIzQzOwomIzQzO2ludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpCiB7CiAKIAlpZiAoIW1tdV9oYXNfZmVhdHVyZShNTVVfRlRSXzE2TV9QQUdFKSkKQEAgLTQyMCw5ICYjNDM7NDIyLDcgQEAgaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKQogCiAJcmV0dXJuIDE7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UpOwotCi0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyk7CiAKICNpZmRlZiBDT05GSUdfU1RSSUNUX0tFUk5FTF9SV1gKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZTg4MjY2M2E1OGU3NzYuLjI0ZWU5MGM3ZTliZjZiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE4MjUsMTMgJiM0MzsxODI1LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZCkKIHsKIAlyZXR1cm4gcG1kX2xlYWYocG1kKTsKIH0KJiM0MzsjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAKLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZQotc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpCiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXMKJiM0MztzdGF0aWMgaW5saW5lIGludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpCiB7CiAJcmV0dXJuIGNwdV9oYXNfZWRhdDEoKSA/IDEgOiAwOwogfQotI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwogCiAjaWZkZWYgQ09ORklHX1BBR0VfVEFCTEVfQ0hFQ0sKIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDhlMDAxOGZhZGQxNGU2Li4zYzZhNjQxZTZjMjExZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMzA2LDEyICYjNDM7MzA2LDYgQEAgc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKQogfQogI2VuZGlmCiAKLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZQotc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpCi17Ci0JcmV0dXJuIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QU0UpOwotfQotCiAjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUAogc3RhdGljIGlubGluZSBib29sIHBtZF9zcGVjaWFsKHBtZF90IHBtZCkKIHsKQEAgLTMzNyw2ICYjNDM7MzMxLDEyIEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21rc3BlY2lhbChwdWRfdCBwdWQpCiAjZW5kaWYJLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUCAqLwogI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqLwogCiYjNDM7I2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXMKJiM0MztzdGF0aWMgaW5saW5lIGludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BTRSk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc2V0X2ZsYWdzKHB0ZV90IHB0ZSwgcHRldmFsX3Qgc2V0KQogewogCXB0ZXZhbF90IHYgPSBuYXRpdmVfcHRlX3ZhbChwdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaCBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgKaW5kZXggODFlNGFmNDllMzljMTAuLjM1NzQ0ZmY2NTkyYWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgKQEAgLTEyMyw3ICYjNDM7MTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKQogewogCWlmIChhbGlnbiA9PSBQVURfU0laRSAmYW1wOyZhbXA7IElTX0VOQUJMRUQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpKQogCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoYWxpZ24gPT0gUE1EX1NJWkUgJmFtcDsmYW1wOyBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkKJiM0MzsJaWYgKGFsaWduID09IFBNRF9TSVpFICZhbXA7JmFtcDsgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlyZXR1cm4gdHJ1ZTsKIAlpZiAoYWxpZ24gPT0gUEFHRV9TSVpFKQogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMgYi9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jCmluZGV4IDhmYTljMTZhYmE3ZWEwLi40NTdlYjU0ZTdhYjZmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jCkBAIC05NCw3ICYjNDM7OTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyAqbmRfcGZuX3N1cHBvcnRlZF9hbGlnbm1lbnRzKHVuc2lnbmVkIGxvbmcgKmFsaWdubWVudHMpCiAKIAlhbGlnbm1lbnRzWzBdID0gUEFHRV9TSVpFOwogCi0JaWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7CiAJCWFsaWdubWVudHNbMV0gPSBIUEFHRV9QTURfU0laRTsKIAkJaWYgKGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2UoKSkKIAkJCWFsaWdubWVudHNbMl0gPSBIUEFHRV9QVURfU0laRTsKQEAgLTEwOSw3ICYjNDM7MTEwLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgKm5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyh1bnNpZ25lZCBsb25nICphbGlnbm1lbnRzKQogc3RhdGljIHVuc2lnbmVkIGxvbmcgbmRfcGZuX2RlZmF1bHRfYWxpZ25tZW50KHZvaWQpCiB7CiAKLQlpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlyZXR1cm4gSFBBR0VfUE1EX1NJWkU7CiAJcmV0dXJuIFBBR0VfU0laRTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKaW5kZXggYzc0NWY3YWQyMjk4N2YuLjUyNWFjZWEyZWI1OWNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaApAQCAtNDcsNyAmIzQzOzQ3LDYgQEAgdm1fZmF1bHRfdCB2bWZfaW5zZXJ0X2ZvbGlvX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCQlib29sIHdyaXRlKTsKIAogZW51bSB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFnIHsKLQlUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRCwKIAlUUkFOU1BBUkVOVF9IVUdFUEFHRV9GTEFHLAogCVRSQU5TUEFSRU5UX0hVR0VQQUdFX1JFUV9NQURWX0ZMQUcsCiAJVFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0RJUkVDVF9GTEFHLApAQCAtMzgzLDEyICYjNDM7MzgyLDYgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJcmV0dXJuIG1tX2ZsYWdzX3Rlc3QoTU1GX0RJU0FCTEVfVEhQX0VYQ0VQVF9BRFZJU0VELCB2bWEtJmd0O3ZtX21tKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHRocF9kaXNhYmxlZF9ieV9odyh2b2lkKQotewotCS8qIElmIHRoZSBoYXJkd2FyZS9maXJtd2FyZSBtYXJrZWQgaHVnZXBhZ2Ugc3VwcG9ydCBkaXNhYmxlZC4gKi8KLQlyZXR1cm4gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgJmFtcDsgKDEgJmx0OyZsdDsgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVU5TVVBQT1JURUQpOwotfQotCiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncyk7CiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAppbmRleCA4YzA5M2MxMTllNWE4Mi4uZDU3MWQxNjFhODRiM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21tX3R5cGVzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvanVtcF9sYWJlbC5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VfdGFibGVfY2hlY2suaCZndDsKIApAQCAtMjMxMyw2ICYjNDM7MjMxNCwyMSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBndGFibGVfbGV2ZWxfdG9fc3RyKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbCkKIAl9CiB9CiAKJiM0MzsjaWZkZWYgQ09ORklHX01NVQomIzQzO0RFQ0xBUkVfU1RBVElDX0tFWV9UUlVFKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3RhdGljX2JyYW5jaF9saWtlbHkoJmFtcDtfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTsKJiM0Mzt9CiYjNDM7dm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKSB7IH0KJiM0MzsjZW5kaWYKJiM0MzsKICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqLwogCiAjaWYgIWRlZmluZWQoTUFYX1BPU1NJQkxFX1BIWVNNRU1fQklUUykgJmFtcDsmYW1wOyAhZGVmaW5lZChDT05GSUdfNjRCSVQpCkBAIC0yMzI4LDggJiM0MzsyMzQ0LDggQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwZ3RhYmxlX2xldmVsX3RvX3N0cihlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpCiAjZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIGhhc190cmFuc3BhcmVudF9odWdlcGFnZQotI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBJU19CVUlMVElOKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkKJiM0MzsjaWZuZGVmIGFyY2hfaGFzX3BtZF9sZWF2ZXMKJiM0MzsjZGVmaW5lIGFyY2hfaGFzX3BtZF9sZWF2ZXMoKSBJU19CVUlMVElOKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UpCiAjZW5kaWYKIAogI2lmbmRlZiBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlCmRpZmYgLS1naXQgYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMgYi9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMKaW5kZXggMjg3NWZkMjJkN2JiMDIuLjI1MDM4Yjc0YzdiYzY3IDEwMDY0NAotLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jCkBAIC0xNzcsNyAmIzQzOzE3Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IGlkeCkKIAl1bnNpZ25lZCBsb25nIHZhbCA9IGlkeCwgKnB0ciA9ICZhbXA7dmFsOwogCXBtZF90IHBtZDsKIAotCWlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCiYjNDM7CWlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlyZXR1cm47CiAKIAlwcl9kZWJ1ZygmIzM0O1ZhbGlkYXRpbmcgUE1EIGJhc2ljICglcEd2KVxuJiMzNDssIHB0cik7CkBAIC0yMjIsNyAmIzQzOzIyMiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfYWR2YW5jZWRfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwbWRfdCBwbWQ7CiAJdW5zaWduZWQgbG9uZyB2YWRkciA9IGFyZ3MtJmd0O3ZhZGRyOwogCi0JaWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpCiAJCXJldHVybjsKIAogCXBhZ2UgPSAoYXJncy0mZ3Q7cG1kX3BmbiAhPSBVTE9OR19NQVgpID8gcGZuX3RvX3BhZ2UoYXJncy0mZ3Q7cG1kX3BmbikgOiBOVUxMOwpAQCAtMjgzLDcgJiM0MzsyODMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIHsKIAlwbWRfdCBwbWQ7CiAKLQlpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKQomIzQzOwlpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkKIAkJcmV0dXJuOwogCiAJcHJfZGVidWcoJiMzNDtWYWxpZGF0aW5nIFBNRCBsZWFmXG4mIzM0Oyk7CkBAIC02ODgsNyAmIzQzOzY4OCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1BURV9QUk9UTk9ORSkpCiAJCXJldHVybjsKIAotCWlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCiYjNDM7CWlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlyZXR1cm47CiAKIAlwcl9kZWJ1ZygmIzM0O1ZhbGlkYXRpbmcgUE1EIHByb3Rub25lXG4mIzM0Oyk7CkBAIC03MzcsNyAmIzQzOzczNyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKQogCWlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpCiAJCXJldHVybjsKIAotCWlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCiYjNDM7CWlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlyZXR1cm47CiAKIAlwcl9kZWJ1ZygmIzM0O1ZhbGlkYXRpbmcgUE1EIHNvZnQgZGlydHlcbiYjMzQ7KTsKQEAgLTc1NCw3ICYjNDM7NzU0LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAkgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTKSkKIAkJcmV0dXJuOwogCi0JaWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpCiAJCXJldHVybjsKIAogCXByX2RlYnVnKCYjMzQ7VmFsaWRhdGluZyBQTUQgc3dhcCBzb2Z0IGRpcnR5XG4mIzM0Oyk7CkBAIC04MjUsNyAmIzQzOzgyNSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlzd3BfZW50cnlfdCBhcmNoX2VudHJ5OwogCXBtZF90IHBtZDEsIHBtZDI7CiAKLQlpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKQomIzQzOwlpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkKIAkJcmV0dXJuOwogCiAJcHJfZGVidWcoJiMzNDtWYWxpZGF0aW5nIFBNRCBzd2FwXG4mIzM0Oyk7CkBAIC05MDYsNyAmIzQzOzkwNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpCiB7CiAJcG1kX3QgcG1kOwogCi0JaWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpCiAJCXJldHVybjsKIAogCXByX2RlYnVnKCYjMzQ7VmFsaWRhdGluZyBQTUQgYmFzZWQgVEhQXG4mIzM0Oyk7CkBAIC05OTcsNyAmIzQzOzk5Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBkZXN0cm95X2FyZ3Moc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICZhbXA7JmFtcDsKLQkgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgJmFtcDsmYW1wOwomIzQzOwkgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpICZhbXA7JmFtcDsKIAkgICAgYXJncy0mZ3Q7cG1kX3BmbiAhPSBVTE9OR19NQVgpIHsKIAkJZGVidWdfdm1fcGd0YWJsZV9mcmVlX2h1Z2VfcGFnZShhcmdzLCBhcmdzLSZndDtwbWRfcGZuLCBIUEFHRV9QTURfT1JERVIpOwogCQlhcmdzLSZndDtwbWRfcGZuID0gVUxPTkdfTUFYOwpAQCAtMTI0OSw3ICYjNDM7MTI0OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKQogCX0KIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJmFtcDsmYW1wOwotCSAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkgewomIzQzOwkgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7CiAJCXBhZ2UgPSBkZWJ1Z192bV9wZ3RhYmxlX2FsbG9jX2h1Z2VfcGFnZShhcmdzLCBIUEFHRV9QTURfT1JERVIpOwogCQlpZiAocGFnZSkgewogCQkJYXJncy0mZ3Q7cG1kX3BmbiA9IHBhZ2VfdG9fcGZuKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggMDRlOGE2YjU1MzQzNWYuLjM4NWEzMDVlN2FmNjUxIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTEyOSw2ICYjNDM7MTI5LDE1IEBAIHVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJZWxzZQogCQlzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfRklMRV9ERUZBVUxUOwogCiYjNDM7CWlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMsIGFzc3VtZSBmb3IKJiM0MzsJCSAqIG5vdyB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQgUFVEIGxlYXZlcyBhbmQgZGlzYWJsZQomIzQzOwkJICogYm90aCBmb2xpbyBvcmRlcnMuCiYjNDM7CQkgKi8KJiM0MzsJCXN1cHBvcnRlZF9vcmRlcnMgJmFtcDs9IH4oQklUKFBNRF9PUkRFUikgfCBCSVQoUFVEX09SREVSKSk7CiYjNDM7CX0KJiM0MzsKIAlvcmRlcnMgJmFtcDs9IHN1cHBvcnRlZF9vcmRlcnM7CiAJaWYgKCFvcmRlcnMpCiAJCXJldHVybiAwOwpAQCAtMTM2LDcgJiM0MzsxNDUsNyBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCWlmICghdm1hLSZndDt2bV9tbSkJCS8qIHZkc28gKi8KIAkJcmV0dXJuIDA7CiAKLQlpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBmb3JjZWRfY29sbGFwc2UpKQomIzQzOwlpZiAodm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBmb3JjZWRfY29sbGFwc2UpKQogCQlyZXR1cm4gMDsKIAogCS8qIGtodWdlcGFnZWQgZG9lc24mIzM5O3QgY29sbGFwc2UgREFYIHZtYSwgYnV0IHBhZ2UgZmF1bHQgaXMgZmluZS4gKi8KQEAgLTg3NCw3ICYjNDM7ODgzLDcgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqKmh1Z2VwYWdlX2tvYmopCiAJICogZGlzYWJsZSBhbGwgb3RoZXIgc2l6ZXMuIHBvd2VycGMmIzM5O3MgUE1EX09SREVSIGlzbiYjMzk7dCBhIGNvbXBpbGUtdGltZQogCSAqIGNvbnN0YW50IHNvIHdlIGhhdmUgdG8gZG8gdGhpcyBoZXJlLgogCSAqLwotCWlmICghYW5vbl9vcmRlcnNfY29uZmlndXJlZCkKJiM0MzsJaWYgKCFhbm9uX29yZGVyc19jb25maWd1cmVkICZhbXA7JmFtcDsgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKQogCQlodWdlX2Fub25fb3JkZXJzX2luaGVyaXQgPSBCSVQoUE1EX09SREVSKTsKIAogCSpodWdlcGFnZV9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgmIzM0O3RyYW5zcGFyZW50X2h1Z2VwYWdlJiMzNDssIG1tX2tvYmopOwpAQCAtODk2LDYgJiM0Mzs5MDUsMTUgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqKmh1Z2VwYWdlX2tvYmopCiAJfQogCiAJb3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTiB8IFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVDsKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgUE1EIGxlYXZlcywgYXNzdW1lIGZvcgomIzQzOwkJICogbm93IHRoYXQgaXQgZG9lcyBub3Qgc3VwcG9ydCBQVUQgbGVhdmVzIGFuZCBkaXNhYmxlCiYjNDM7CQkgKiBib3RoIGZvbGlvIG9yZGVycy4KJiM0MzsJCSAqLwomIzQzOwkJb3JkZXJzICZhbXA7PSB+KEJJVChQTURfT1JERVIpIHwgQklUKFBVRF9PUkRFUikpOwomIzQzOwl9CiYjNDM7CiAJb3JkZXIgPSBoaWdoZXN0X29yZGVyKG9yZGVycyk7CiAJd2hpbGUgKG9yZGVycykgewogCQl0aHBzaXplID0gdGhwc2l6ZV9jcmVhdGUob3JkZXIsICpodWdlcGFnZV9rb2JqKTsKQEAgLTEwMTAsMTEgJiM0MzsxMDI4LDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdCh2b2lkKQogCWludCBlcnI7CiAJc3RydWN0IGtvYmplY3QgKmh1Z2VwYWdlX2tvYmo7CiAKLQlpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7Ci0JCXRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzID0gMSAmbHQ7Jmx0OyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRDsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJLyoKIAkgKiBodWdlcGFnZXMgY2FuJiMzOTt0IGJlIGFsbG9jYXRlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yCiAJICovCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDU2YjI0NDU1MmYxMzk0Li5mMzlkOTM4MzQ5NGU2OSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5LmMKQEAgLTE2NCw2ICYjNDM7MTY0LDE1IEBAIF9fc2V0dXAoJiMzNDtub3JhbmRtYXBzJiMzNDssIGRpc2FibGVfcmFuZG1hcHMpOwogCiB1bnNpZ25lZCBsb25nIGhpZ2hlc3RfbWVtbWFwX3BmbiBfX3JlYWRfbW9zdGx5OwogCiYjNDM7REVGSU5FX1NUQVRJQ19LRVlfVFJVRShfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTsKJiM0MztFWFBPUlRfU1lNQk9MKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpOwomIzQzOwomIzQzO3ZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CWlmICghYXJjaF9oYXNfcG1kX2xlYXZlcygpKQomIzQzOwkJc3RhdGljX2JyYW5jaF9kaXNhYmxlKCZhbXA7X19hcmNoX2hhc19wbWRfbGVhdmVzX2tleSk7CiYjNDM7fQomIzQzOwogdm9pZCBtbV90cmFjZV9yc3Nfc3RhdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlcikKIHsKIAl0cmFjZV9yc3Nfc3RhdChtbSwgbWVtYmVyKTsKQEAgLTU1NjcsNyAmIzQzOzU1NzYsNyBAQCB2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYQogCSAqIFBNRCBtYXBwaW5ncyBpZiBUSFBzIGFyZSBkaXNhYmxlZC4gQXMgd2UgYWxyZWFkeSBoYXZlIGEgVEhQLAogCSAqIGJlaGF2ZSBhcyBpZiB3ZSBhcmUgZm9yY2luZyBhIGNvbGxhcHNlLgogCSAqLwotCWlmICh0aHBfZGlzYWJsZWRfYnlfaHcoKSB8fCB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1hLSZndDt2bV9mbGFncywKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkgfHwgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtYS0mZ3Q7dm1fZmxhZ3MsCiAJCQkJCQkgICAgIC8qIGZvcmNlZF9jb2xsYXBzZT0qLyB0cnVlKSkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jCmluZGV4IDcxMWY4MjFmN2IzYzcyLi5kY2MwNzJkYjQ1NTg3MiAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMjY5OSw2ICYjNDM7MjY5OSw3IEBAIHZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKQogewogCWFyY2hfbW1fcHJlaW5pdCgpOwogCWluaXRfemVyb19wYWdlX3BmbigpOwomIzQzOwlwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KCk7CiAKIAkvKiBJbml0aWFsaXphdGlvbnMgcmVseWluZyBvbiBTTVAgc2V0dXAgKi8KIAlCVUlMRF9CVUdfT04oTUFYX1pPTkVMSVNUUyAmZ3Q7IDIpOwpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggNTA3MTE3NzA1OWE5NjQuLjAwOGRmNTU4YWYyMzdlIDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NobWVtLmMKQEAgLTY4OSw3ICYjNDM7Njg5LDcgQEAgc3RhdGljIGludCBzaG1lbV9wYXJzZV9odWdlKGNvbnN0IGNoYXIgKnN0cikKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSAmYW1wOyZhbXA7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICZhbXA7JmFtcDsKIAkgICAgaHVnZSAhPSBTSE1FTV9IVUdFX05FVkVSICZhbXA7JmFtcDsgaHVnZSAhPSBTSE1FTV9IVUdFX0RFTlkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMjg3LDYgJiM0MzsxMjg3LDcgQEAgc3RhdGljIGludCBzaG1lbV9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLAogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYXRoLSZndDtkZW50cnktJmd0O2RfaW5vZGU7CiAJc3RydWN0IHNobWVtX2lub2RlX2luZm8gKmluZm8gPSBTSE1FTV9JKGlub2RlKTsKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyczsKIAogCS8qIEZhc3QtcGF0aCBoaW50OyByZWNhbGMgdW5kZXIgaW5mby0mZ3Q7bG9jayBjb3JyZWN0cyBhbnkgc3RhbGUgcmVhZC4gKi8KIAlpZiAoZGF0YV9yYWNlKGluZm8tJmd0O2FsbG9jZWQgLSBpbmZvLSZndDtzd2FwcGVkICE9IGlub2RlLSZndDtpX21hcHBpbmctJmd0O25ycGFnZXMpKQpAQCAtMTMwMyw4ICYjNDM7MTMwNCwxMSBAQCBzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQlTVEFUWF9BVFRSX05PRFVNUCk7CiAJZ2VuZXJpY19maWxsYXR0cihpZG1hcCwgcmVxdWVzdF9tYXNrLCBpbm9kZSwgc3RhdCk7CiAKLQlpZiAoc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChpbm9kZSwgMCwgMCwgZmFsc2UsIE5VTEwsIDApKQotCQlzdGF0LSZndDtibGtzaXplID0gSFBBR0VfUE1EX1NJWkU7CiYjNDM7CW9yZGVycyA9IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoaW5vZGUsIDAsIDAsIGZhbHNlLCBOVUxMLCAwKTsKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpCiYjNDM7CQlvcmRlcnMgJmFtcDs9IH5CSVQoUE1EX09SREVSKTsKJiM0MzsJaWYgKG9yZGVycykKJiM0MzsJCXN0YXQtJmd0O2Jsa3NpemUgPSBQQUdFX1NJWkUgJmx0OyZsdDsgaGlnaGVzdF9vcmRlcihvcmRlcnMpOwogCiAJaWYgKHJlcXVlc3RfbWFzayAmYW1wOyBTVEFUWF9CVElNRSkgewogCQlzdGF0LSZndDtyZXN1bHRfbWFzayB8PSBTVEFUWF9CVElNRTsKQEAgLTE4MjYsMTYgJiM0MzsxODMwLDE5IEBAIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJdW5zaWduZWQgbG9uZyBtYXNrID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7CiAJdW5zaWduZWQgbG9uZyB3aXRoaW5fc2l6ZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfd2l0aGluX3NpemUpOwogCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWEgPyB2bWEtJmd0O3ZtX2ZsYWdzIDogMDsKLQl1bnNpZ25lZCBpbnQgZ2xvYmFsX29yZGVyczsKJiM0MzsJdW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnMsIGRpc2FibGVkX29yZGVycyA9IDA7CiAKLQlpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSAmYW1wOyZhbXA7IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpKQomIzQzOwlpZiAodm1hICZhbXA7JmFtcDsgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpCiYjNDM7CQlkaXNhYmxlZF9vcmRlcnMgPSBCSVQoUE1EX09SREVSKTsKJiM0MzsKIAlnbG9iYWxfb3JkZXJzID0gc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChpbm9kZSwgaW5kZXgsIHdyaXRlX2VuZCwKIAkJCQkJCSAgc2htZW1faHVnZV9mb3JjZSwgdm1hLCB2bV9mbGFncyk7CiAJLyogVG1wZnMgaHVnZSBwYWdlcyBhbGxvY2F0aW9uICovCiAJaWYgKCF2bWEgfHwgIXZtYV9pc19hbm9uX3NobWVtKHZtYSkpCi0JCXJldHVybiBnbG9iYWxfb3JkZXJzOwomIzQzOwkJcmV0dXJuIGdsb2JhbF9vcmRlcnMgJmFtcDsgfmRpc2FibGVkX29yZGVyczsKIAogCS8qCiAJICogRm9sbG93aW5nIHRoZSAmIzM5O2RlbnkmIzM5OyBzZW1hbnRpY3Mgb2YgdGhlIHRvcCBsZXZlbCwgZm9yY2UgdGhlIGh1Z2UKQEAgLTE4NDksNyAmIzQzOzE4NTYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSAqIG1lYW5zIG5vbi1QTUQgc2l6ZWQgVEhQIGNhbiBub3Qgb3ZlcnJpZGUgJiMzOTtodWdlJiMzOTsgbW91bnQgb3B0aW9uIG5vdy4KIAkgKi8KIAlpZiAoc2htZW1faHVnZSA9PSBTSE1FTV9IVUdFX0ZPUkNFKQotCQlyZXR1cm4gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQpOwomIzQzOwkJcmV0dXJuIFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19pbmhlcml0KSAmYW1wOyB+ZGlzYWJsZWRfb3JkZXJzOwogCiAJLyogQWxsb3cgbVRIUCB0aGF0IHdpbGwgYmUgZnVsbHkgd2l0aGluIGlfc2l6ZS4gKi8KIAltYXNrIHw9IHNobWVtX2dldF9vcmRlcnNfd2l0aGluX3NpemUoaW5vZGUsIHdpdGhpbl9zaXplX29yZGVycywgaW5kZXgsIDApOwpAQCAtMTg2MCw2ICYjNDM7MTg2Nyw3IEBAIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJaWYgKGdsb2JhbF9vcmRlcnMgJmd0OyAwKQogCQltYXNrIHw9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19pbmhlcml0KTsKIAomIzQzOwltYXNrICZhbXA7PSB+ZGlzYWJsZWRfb3JkZXJzOwogCXJldHVybiBUSFBfT1JERVJTX0FMTF9GSUxFX0RFRkFVTFQgJmFtcDsgbWFzazsKIH0KIApAQCAtNDU4Nyw4ICYjNDM7NDU5NSw3IEBAIHN0YXRpYyBpbnQgc2htZW1fcGFyc2Vfb25lKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pCiAJY2FzZSBPcHRfaHVnZToKIAkJY3R4LSZndDtodWdlID0gcmVzdWx0LnVpbnRfMzI7CiAJCWlmIChjdHgtJmd0O2h1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiAmYW1wOyZhbXA7Ci0JCSAgICAhKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmYW1wOyZhbXA7Ci0JCSAgICAgIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSkKJiM0MzsJCSAgICAhSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpKQogCQkJZ290byB1bnN1cHBvcnRlZF9wYXJhbWV0ZXI7CiAJCWN0eC0mZ3Q7c2VlbiB8PSBTSE1FTV9TRUVOX0hVR0U7CiAJCWJyZWFrOwpAQCAtNTM4Myw3ICYjNDM7NTM5MCw3IEBAIHZvaWQgX19pbml0IHNobWVtX2luaXQodm9pZCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFCi0JaWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpICZhbXA7JmFtcDsgc2htZW1faHVnZSAmZ3Q7IFNITUVNX0hVR0VfREVOWSkKJiM0MzsJaWYgKHNobWVtX2h1Z2UgJmd0OyBTSE1FTV9IVUdFX0RFTlkpCiAJCVNITUVNX1NCKHNobV9tbnQtJmd0O21udF9zYiktJmd0O2h1Z2UgPSBzaG1lbV9odWdlOwogCWVsc2UKIAkJc2htZW1faHVnZSA9IFNITUVNX0hVR0VfTkVWRVI7IC8qIGp1c3QgaW4gY2FzZSBpdCB3YXMgcGF0Y2hlZCAqLwpAQCAtNTM5Miw3ICYjNDM7NTM5OSw3IEBAIHZvaWQgX19pbml0IHNobWVtX2luaXQodm9pZCkKIAkgKiBEZWZhdWx0IHRvIHNldHRpbmcgUE1ELXNpemVkIFRIUCB0byBpbmhlcml0IHRoZSBnbG9iYWwgc2V0dGluZyBhbmQKIAkgKiBkaXNhYmxlIGFsbCBvdGhlciBtdWx0aS1zaXplIFRIUHMuCiAJICovCi0JaWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZCkKJiM0MzsJaWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZCAmYW1wOyZhbXA7IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkKIAkJaHVnZV9zaG1lbV9vcmRlcnNfaW5oZXJpdCA9IEJJVChIUEFHRV9QTURfT1JERVIpOwogI2VuZGlmCiAJcmV0dXJuOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRIUCBTdXBwb3J0IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBtYWtpbmcgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgd2UgaGFuZGxlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgc3VwcG9ydC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIHJlbmFtaW5nIGBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKWAgdG8gZWl0aGVyIGBhcmNoX2hhc19wbWRfbGVhdmVzKClgIG9yIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbmFtZSBjaGFuZ2U7IGl0JiMzOTtzIGFsc28gaW1wYWN0aW5nIGhvdyB3ZSBkaXNhYmxlIFRIUCB3aGVuIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRvZXNuJiMzOTt0IHN1cHBvcnQgaXQsIGludHJvZHVjaW5nIGEgc3RhdGljIGtleSBjYWxsZWQgYF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXlgLgoKVGhpcyByaXBwbGVzIHRocm91Z2ggcXVpdGUgYSBmZXcgY3JpdGljYWwgYXJlYXM6IGBzaG1lbS5jYCwgYGh1Z2VfbWVtb3J5LmNgLCBgbWVtb3J5LmNgLCBgbW1faW5pdC5jYCwgYGRlYnVnX3ZtX3BndGFibGUuY2AsIGBwZm5fZGV2cy5jYCwgYGRheC1wcml2YXRlLmhgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGZvciBtaXBzLCBwb3dlcnBjLCBzMzkwLCBhbmQgeDg2LiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYHNobWVtYCwgYGRheGAsIGFuZCBgbnZkaW1tYCBpcyBhIGJpZyBkZWFsOyB0aG9zZSBhcmUgYWxsIGludGltYXRlbHkgbGlua2VkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwZXJmb3JtYW5jZS4KClNvLCB0aGUga2V5IHRoaW5nIGhlcmUgaXMgdGhhdCBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYCBpcyBub3cgdGhlIGdhdGVrZWVwZXIgZm9yIFRIUCBzdXBwb3J0LCBhbmQgaXQmIzM5O3MgYmVpbmcgdXNlZCB0byBmaWx0ZXIgY2VydGFpbiBvcmRlciBzaXplcywgYXMgc2VlbiBpbiBtb2RpZmljYXRpb25zIHRvIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGFuZCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBFc3NlbnRpYWxseSwgaWYgYCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLCBjZXJ0YWluIG1lbW9yeSBvcmRlciBzaXplcyBhcmUgZXhjbHVkZWQuCgpMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgYSBzdGF0aWMga2V5IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBob3cgd2XigJlyZSBkZWNpZGluZyBhdCBydW50aW1lIHdoZXRoZXIgdG8gZW5hYmxlIGl0LiBJIHNlZSB0aGUgYERFQ0xBUkVfU1RBVElDX0tFWV9UUlVFYCBhbmQgdGhlIGxvZ2ljIHRoYXQgc2VlbXMgdG8gZGlzYWJsZSB0aGUga2V5IGlmIHRoZSBhcmNoaXRlY3R1cmUgZG9lc24mIzM5O3QgaGF2ZSBQTUQgbGVhdmVzIGluIGBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KClgLiBUaGlzIGxvb2tzIGZ1bmN0aW9uYWwgYW5kIHRoZSBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIFFFTVUvR0NFLCBzbyBJIGNhbiB0ZXN0IGl0LgoKQWxyaWdodCwgdGltZSB0byBwcmlvcml0aXplIHNvbWUgZnV6emluZyB0YXJnZXRzLiBCYXNlZCBvbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgZnVuY3Rpb25zIGxpa2UgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBzaG1lbV9nZXRhdHRyYCwgYHNobWVtX3BhcnNlX29uZWAsIGBzaG1lbV9wYXJzZV9odWdlYCwgYW5kIGBkb19zZXRfcG1kYCBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwuIE5vdywgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGU7IEkga25vdyBpdCYjMzk7cyBpbnZva2VkIGR1cmluZyBzaG1lbSBwYWdlIGZhdWx0cyBhbmQgYWxsb2NhdGlvbi4gQW5kIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgdXNlZCBkdXJpbmcgVEhQIGFsbG9jYXRpb24uIExldCYjMzk7cyBzZWUgaG93IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgZGVmaW5lZC4gR29vZC4gTm93LCBsZXTigJlzIGRpZyBhIGJpdCBkZWVwZXIgYW5kIHVzZSBgZGVmYXVsdF9hcGk6Z3JlcHBlcmAgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyB1c2VkIGFuZCB3aGVyZSBpdOKAmXMgZGVmaW5lZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0yNzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5Ny1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI5ODp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk5LVx0XHRcdFx0XHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMTk9dW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQxLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzQyOlx0cmV0dXJuIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIG9yZGVycyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDMtfVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTA3PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMTMtXG5tbS9odWdlX21lbW9yeS5jOjExNDp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMTUtXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzU3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHZhcmlhYmxlLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGtub2Igd2hlbiB0dW5pbmcgc2hhcmVkIG1lbW9yeSBiZWhhdmlvciwgZXNwZWNpYWxseSBvbiBzeXN0ZW1zIHdpdGggTlVNQSBhcmNoaXRlY3R1cmVzIG9yIHRob3NlIG5lZWRpbmcgdG8gc3F1ZWV6ZSBldmVyeSBsYXN0IGJpdCBvZiBwZXJmb3JtYW5jZSBvdXQgb2YgbGFyZ2UgbWVtb3J5IGFsbG9jYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzZXR0aW5nLiBJIG5lZWQgdG8gZXN0YWJsaXNoIHdoYXQmIzM5O3MgcGVybWlzc2libGUsIGdpdmVuIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGFuZCB0aGUgaW50ZW5kZWQgYXBwbGljYXRpb24gcHJvZmlsZS4KCkkmIzM5O20gdGhpbmtpbmcsICYjMzQ7SXMgdGhpcyBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSB3b3JrbG9hZD8mIzM0OyBBcmUgd2UgdW5kZXItdXRpbGl6aW5nIHBvdGVudGlhbCBodWdlIHBhZ2UgYWxsb2NhdGlvbnMsIG9yIHBlcmhhcHMgYmVpbmcgb3Zlcmx5IGFnZ3Jlc3NpdmUgYW5kIHJpc2tpbmcgZnJhZ21lbnRhdGlvbiBvciBvdGhlciBhZHZlcnNlIHNpZGUgZWZmZWN0cz8gRGVwZW5kaW5nIG9uIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCBtYXliZSBJIG5lZWQgdG8gY2hlY2sgdGhlIE9TIGtlcm5lbCBwYXJhbWV0ZXJzLCBhbmQgdGhlIGFwcGxpY2F0aW9uJiMzOTtzIG1lbW9yeSBhbGxvY2F0aW9uIHBhdHRlcm5zLCB0byBtYWtlIGEgZGVjaXNpb24gYWJvdXQgbXkgbmV4dCBzdGVwcy4KCkkgc2hvdWxkIGFsc28gY29uc2lkZXIgd2hldGhlciB0aGUgY3VycmVudCBzZXR0aW5ncyBhcmUgbGVhZGluZyB0byBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4gQXJlIHdlIHNlZWluZyBzaWduaWZpY2FudCBwYWdlIGZhdWx0cywgaW5jcmVhc2VkIG1lbW9yeSBsYXRlbmNpZXMsIG9yIGFueSBvdGhlciBzaWducyB0aGF0IHRoZSBtZW1vcnkgc3Vic3lzdGVtIGlzbiYjMzk7dCBwZXJmb3JtaW5nIG9wdGltYWxseT8gQmFzZWQgb24gdGhpcyBkaWFnbm9zdGljLCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBzZXR0aW5ncyBhcmUgYWRqdXN0ZWQgdG8gYWxsb3cgZm9yIG1heGltdW0gZWZmaWNpZW5jeSwgd2hpY2ggaXMgaW1wb3J0YW50IHRvIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTI2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEyOC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMjk6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzAtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTMyPWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTExND11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTkwLVx0aWYgKCFpbl9wZiBcdTAwMjZcdTAwMjYgc2htZW1fZmlsZSh2bWEtXHUwMDNldm1fZmlsZSkpXG5tbS9odWdlX21lbW9yeS5jOjE5MTpcdFx0cmV0dXJuIG9yZGVycyBcdTAwMjYgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLVx1MDAzZXZtX2ZpbGUpLFxubW0vaHVnZV9tZW1vcnkuYy0xOTItXHRcdFx0XHRcdFx0ICAgdm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbi0tXG5tbS9zaG1lbS5jPTE4MDk9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3NobWVtLmMtMTgyNS1cbm1tL3NobWVtLmM6MTgyNjp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxubW0vc2htZW0uYy0xODI3LVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYz0yNDIyPXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjUwMy1cdC8qIEZpbmQgaHVnZXBhZ2Ugb3JkZXJzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGFub255bW91cyBzaG1lbSBhbmQgdG1wZnMuICovXG5tbS9zaG1lbS5jOjI1MDQ6XHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpO1xubW0vc2htZW0uYy0yNTA1LVx0aWYgKG9yZGVycyBcdTAwM2UgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzE2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBzaG1lbV9nZXRhdHRyYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHNobWVtX2dldGF0dHJgLiBJdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgc28gbGV0JiMzOTtzIGdldCByaWdodCBpbnRvIGl0LCB3aGF0JiMzOTtzIGl0cyBpbXBsZW1lbnRhdGlvbiBsb29raW5nIGxpa2U/IEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbiwgcG90ZW50aWFsIHBpdGZhbGxzLCBhbmQgaG93IGl0IGhhbmRsZXMgdmFyaW91cyBlcnJvciBjb25kaXRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdmVyaWZ5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBzaGFyZWQgbWVtb3J5IG1hbmFnZW1lbnQuIEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0PyBQZXJoYXBzIHRoZXJlIGFyZSBhc3BlY3RzIHRoYXQgbmVlZCBmdXJ0aGVyIGNsYXJpZmljYXRpb24sIGFuZCBJIHdpbGwgd2FudCB0byByZWFkIHRoZSBkb2N1bWVudGF0aW9uLiBJIGNhbiBjcm9zcy1yZWZlcmVuY2UgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHNobWVtIGNvZGViYXNlLiBJIHNob3VsZCBhbHNvIGNoZWNrIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdGhhdCBjYWxscyB0aGlzIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2dldGF0dHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2htZW0uYz0xMjgyPUVYUE9SVF9TWU1CT0xfR1BMKHNobWVtX3RydW5jYXRlX3JhbmdlKTtcbm1tL3NobWVtLmMtMTI4My1cbm1tL3NobWVtLmM6MTI4NDpzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5tbS9zaG1lbS5jLTEyODUtXHRcdFx0IGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3Qga3N0YXQgKnN0YXQsXG4tLVxubW0vc2htZW0uYz00MzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zaG9ydF9zeW1saW5rX29wZXJhdGlvbnMgPSB7XG5tbS9zaG1lbS5jOjQzMzA6XHQuZ2V0YXR0clx0PSBzaG1lbV9nZXRhdHRyLFxubW0vc2htZW0uYy00MzMxLVx0LnNldGF0dHJcdD0gc2htZW1fc2V0YXR0cixcbi0tXG5tbS9zaG1lbS5jPTQzMzg9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbm1tL3NobWVtLmM6NDMzOTpcdC5nZXRhdHRyXHQ9IHNobWVtX2dldGF0dHIsXG5tbS9zaG1lbS5jLTQzNDAtXHQuc2V0YXR0clx0PSBzaG1lbV9zZXRhdHRyLFxuLS1cbm1tL3NobWVtLmM9NTE3ND1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1faW5vZGVfb3BlcmF0aW9ucyA9IHtcbm1tL3NobWVtLmM6NTE3NTpcdC5nZXRhdHRyXHQ9IHNobWVtX2dldGF0dHIsXG5tbS9zaG1lbS5jLTUxNzYtXHQuc2V0YXR0clx0PSBzaG1lbV9zZXRhdHRyLFxuLS1cbm1tL3NobWVtLmM9NTE4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5tbS9zaG1lbS5jLTUxODYtI2lmZGVmIENPTkZJR19UTVBGU1xubW0vc2htZW0uYzo1MTg3Olx0LmdldGF0dHJcdD0gc2htZW1fZ2V0YXR0cixcbm1tL3NobWVtLmMtNTE4OC1cdC5jcmVhdGVcdFx0PSBzaG1lbV9jcmVhdGUsXG4tLVxubW0vc2htZW0uYz01MjExPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zcGVjaWFsX2lub2RlX29wZXJhdGlvbnMgPSB7XG5tbS9zaG1lbS5jOjUyMTI6XHQuZ2V0YXR0clx0PSBzaG1lbV9nZXRhdHRyLFxubW0vc2htZW0uYy01MjEzLSNpZmRlZiBDT05GSUdfVE1QRlNfWEFUVFJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA0MgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeToKCioqRGVjb25zdHJ1Y3RpbmcgYGRvX3NldF9wbWRgKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgbWluZCBpbW1lZGlhdGVseSB3ZW50IHRvIHRoZSBmdW5jdGlvbiBgZG9fc2V0X3BtZGAuIE5vdywgSSBuZWVkIHRvIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBhICYjMzQ7c2V0JiMzNDsgb3BlcmF0aW9uLCBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgbWVtb3J5IG1hbmFnZW1lbnQsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKnByZWNpc2VseSogd2hhdCB0aGUgJiMzNDtQTUQmIzM0OyByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dCDigJMgYSBQYWdlIE1pZGRsZSBEaXJlY3RvcnkgZW50cnksIHJpZ2h0PyBJcyB0aGlzIGFib3V0IHNldHRpbmcgYSBuZXcgbWFwcGluZywgdXBkYXRpbmcgZXhpc3RpbmcgbWV0YWRhdGEsIG9yIGRlYWxpbmcgd2l0aCBzb21lIGZvcm0gb2YgbWVtb3J5IGFsbG9jYXRpb24gb3IgaW52YWxpZGF0aW9uPyBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIG51YW5jZXMgb2YgdGhlIGFyY2hpdGVjdHVyZSwgb2YgY291cnNlLiBJcyB0aGVyZSBhbnkgb2J2aW91cyBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlciBhbmQgZmluZCB3aGF0IGl04oCZcyBjYWxsZWQgd2l0aD8gV2hhdCBraW5kIG9mIGFyZ3VtZW50cyBhcmUgd2UgcGFzc2luZywgYW5kIHdoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uJiMzOTtzIGRlY2xhcmF0aW9uLCBpbXBsZW1lbnRhdGlvbiwgYW5kIGFueSByZWxhdGVkIGNvbW1lbnRzIHRvIHF1aWNrbHkgZ2V0IG15IGJlYXJpbmdzIGFuZCBhbnRpY2lwYXRlIGFueSBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBhbHNvIGhhdmUgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSB3YW50IGEgY2xlYXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZG9fc2V0X3BtZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9MjAzMT1zdGF0aWMgaW5saW5lIHB0ZV90IG1heWJlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMjAzNy1cbmluY2x1ZGUvbGludXgvbW0uaDoyMDM4OnZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIwMzktdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2ZpbGVtYXAuYz0zNzEwPXN0YXRpYyBib29sIGZpbGVtYXBfbWFwX3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9maWxlbWFwLmMtMzcyMy1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19maWxlX3BhZ2UoZm9saW8sIHN0YXJ0KTtcbm1tL2ZpbGVtYXAuYzozNzI0Olx0XHR2bV9mYXVsdF90IHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XG5tbS9maWxlbWFwLmMtMzcyNS1cdFx0aWYgKCFyZXQpIHtcbi0tXG5tbS9raHVnZXBhZ2VkLmM9MTgxOT1zdGF0aWMgZW51bSBzY2FuX3Jlc3VsdCBzZXRfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTg0Ny1cdHZtZi5wbWQgPSBwbWRwO1xubW0va2h1Z2VwYWdlZC5jOjE4NDg6XHRpZiAoZG9fc2V0X3BtZChcdTAwMjZ2bWYsIGZvbGlvLCBwYWdlKSlcbm1tL2todWdlcGFnZWQuYy0xODQ5LVx0XHRyZXR1cm4gU0NBTl9GQUlMO1xuLS1cbm1tL21lbW9yeS5jPTU1NTE9c3RhdGljIHZvaWQgZGVwb3NpdF9wcmVhbGxvY19wdGUoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTU2My1cbm1tL21lbW9yeS5jOjU1NjQ6dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS5jLTU1NjUte1xuLS1cbm1tL21lbW9yeS5jLTU2MzktI2Vsc2Vcbm1tL21lbW9yeS5jOjU2NDA6dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbm1tL21lbW9yeS5jLTU2NDEte1xuLS1cbm1tL21lbW9yeS5jPTU3MTM9dm1fZmF1bHRfdCBmaW5pc2hfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTc2My1cdFx0aWYgKCFuZWVkc19mYWxsYmFjayBcdTAwMjZcdTAwMjYgZm9saW9fdGVzdF9wbWRfbWFwcGFibGUoZm9saW8pKSB7XG5tbS9tZW1vcnkuYzo1NzY0Olx0XHRcdHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XG5tbS9tZW1vcnkuYy01NzY1LVx0XHRcdGlmIChyZXQgIT0gVk1fRkFVTFRfRkFMTEJBQ0spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDE4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEhQIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyByZWxhdGVkIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBkb19zZXRfcG1kYCwgcmVwbGFjaW5nIHRoZSBgdGhwX2Rpc2FibGVkX2J5X2h3KClgIGNoZWNrIHdpdGggYCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBUaGF0JiMzOTtzIGEga2V5IHNoaWZ0IGluIGhvdyBpdCYjMzk7cyBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCB0byBhbGxvdyBQTUQtbGV2ZWwgVEhQLiBJbnRlcmVzdGluZy4KClRoZW4sIGl0IGdvZXMgb24gdG8gbW9kaWZ5IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBhbmQgYHNobWVtX2dldGF0dHJgIHRvIGFsc28gaW5jb3Jwb3JhdGUgdGhpcyBgIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKWAgY2hlY2ssIGVmZmVjdGl2ZWx5IGZpbHRlcmluZyBvdXQgUE1EIG9yZGVycyB1bmRlciB0aGUgc2FtZSBjb25kaXRpb24uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdHJ5aW5nIHRvIGhhcm1vbml6ZSB0aGlzIGNoZWNrIGFjcm9zcyB0aGUgYm9hcmQgZm9yIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgZGVhbCB3aXRoIHRoZSBodWdlIHBhZ2Ugb3JkZXJzLgoKSG9sZCBvbi4uLiBJJiMzOTt2ZSBnb3QgYSB3cmlua2xlLiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIHR5cGljYWxseSBhbiBpbmxpbmUgZnVuY3Rpb24sIGlzbiYjMzk7dCBpdD8gSXQmIzM5O3MgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgLiBXaHkgaXMgaXQgc2hvd2luZyB1cCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaW4gdGhlIHBhdGNoPyBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgY29udGV4dC4gTGV0JiMzOTtzIGdvIHRvIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgc2VlIHdoYXQgdGhlIHBhdGNoIGlzIGRvaW5nIHRvIHRoYXQgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlzY3JlcGFuY3kgdG8gZnVsbHkgZ3Jhc3Agd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHRcdGNvbnN0IGJvb2wgaW5fcGYgPSB0eXBlID09IFRWQV9QQUdFRkFVTFQ7XG4gMTIxOlx0XHRjb25zdCBib29sIGZvcmNlZF9jb2xsYXBzZSA9IHR5cGUgPT0gVFZBX0ZPUkNFRF9DT0xMQVBTRTtcbiAxMjI6XHRcdHVuc2lnbmVkIGxvbmcgc3VwcG9ydGVkX29yZGVycztcbiAxMjM6XHRcbiAxMjQ6XHRcdC8qIENoZWNrIHRoZSBpbnRlcnNlY3Rpb24gb2YgcmVxdWVzdGVkIGFuZCBzdXBwb3J0ZWQgb3JkZXJzLiAqL1xuIDEyNTpcdFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcbiAxMjY6XHRcdFx0c3VwcG9ydGVkX29yZGVycyA9IFRIUF9PUkRFUlNfQUxMX0FOT047XG4gMTI3Olx0XHRlbHNlIGlmICh2bWFfaXNfZGF4KHZtYSkgfHwgdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxuIDEyODpcdFx0XHRzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfU1BFQ0lBTF9EQVg7XG4gMTI5Olx0XHRlbHNlXG4gMTMwOlx0XHRcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9GSUxFX0RFRkFVTFQ7XG4gMTMxOlx0XG4gMTMyOlx0XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkge1xuIDEzMzpcdFx0XHQvKlxuIDEzNDpcdFx0XHQgKiBJZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgUE1EIGxlYXZlcywgYXNzdW1lIGZvclxuIDEzNTpcdFx0XHQgKiBub3cgdGhhdCBpdCBkb2VzIG5vdCBzdXBwb3J0IFBVRCBsZWF2ZXMgYW5kIGRpc2FibGVcbiAxMzY6XHRcdFx0ICogYm90aCBmb2xpbyBvcmRlcnMuXG4gMTM3Olx0XHRcdCAqL1xuIDEzODpcdFx0XHRzdXBwb3J0ZWRfb3JkZXJzIFx1MDAyNj0gfihCSVQoUE1EX09SREVSKSB8IEJJVChQVURfT1JERVIpKTtcbiAxMzk6XHRcdH1cbiAxNDA6XHRcbiAxNDE6XHRcdG9yZGVycyBcdTAwMjY9IHN1cHBvcnRlZF9vcmRlcnM7XG4gMTQyOlx0XHRpZiAoIW9yZGVycylcbiAxNDM6XHRcdFx0cmV0dXJuIDA7XG4gMTQ0Olx0XG4gMTQ1Olx0XHRpZiAoIXZtYS1cdTAwM2V2bV9tbSlcdFx0LyogdmRzbyAqL1xuIDE0NjpcdFx0XHRyZXR1cm4gMDtcbiAxNDc6XHRcbiAxNDg6XHRcdGlmICh2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIGZvcmNlZF9jb2xsYXBzZSkpXG4gMTQ5Olx0XHRcdHJldHVybiAwO1xuIDE1MDpcdFxuIDE1MTpcdFx0Lyoga2h1Z2VwYWdlZCBkb2VzbiYjMzk7dCBjb2xsYXBzZSBEQVggdm1hLCBidXQgcGFnZSBmYXVsdCBpcyBmaW5lLiAqL1xuIDE1MjpcdFx0aWYgKHZtYV9pc19kYXgodm1hKSlcbiAxNTM6XHRcdFx0cmV0dXJuIGluX3BmID8gb3JkZXJzIDogMDtcbiAxNTQ6XHRcbiAxNTU6XHRcdC8qXG4gMTU2Olx0XHQgKiBraHVnZXBhZ2VkIHNwZWNpYWwgVk1BIGFuZCBodWdldGxiIFZNQS5cbiAxNTc6XHRcdCAqIE11c3QgYmUgY2hlY2tlZCBhZnRlciBkYXggc2luY2Ugc29tZSBkYXggbWFwcGluZ3MgbWF5IGhhdmVcbiAxNTg6XHRcdCAqIFZNX01JWEVETUFQIHNldC5cbiAxNTk6XHRcdCAqL1xuIDE2MDpcdFx0aWYgKCFpbl9wZiBcdTAwMjZcdTAwMjYgIXNtYXBzIFx1MDAyNlx1MDAyNiAodm1fZmxhZ3MgXHUwMDI2IFZNX05PX0tIVUdFUEFHRUQpKVxuIDE2MTpcdFx0XHRyZXR1cm4gMDtcbiAxNjI6XHRcbiAxNjM6XHRcdC8qXG4gMTY0Olx0XHQgKiBDaGVjayBhbGlnbm1lbnQgZm9yIGZpbGUgdm1hIGFuZCBzaXplIGZvciBib3RoIGZpbGUgYW5kIGFub24gdm1hIGJ5XG4gMTY1Olx0XHQgKiBmaWx0ZXJpbmcgb3V0IHRoZSB1bnN1aXRhYmxlIG9yZGVycy5cbiAxNjY6XHRcdCAqXG4gMTY3Olx0XHQgKiBTa2lwIHRoZSBjaGVjayBmb3IgcGFnZSBmYXVsdC4gSHVnZSBmYXVsdCBkb2VzIHRoZSBjaGVjayBpbiBmYXVsdFxuIDE2ODpcdFx0ICogaGFuZGxlcnMuXG4gMTY5Olx0XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTczNDcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNobWVtIGFuZCBUSFAgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCB0aGlzIGxvb2tzIGFjaGlldmFibGUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEkgc2VlIGEgZmV3IHBvdGVudGlhbCBjYW5kaWRhdGVzOiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYHNobWVtX2dldGF0dHJgLCBgc2htZW1fcGFyc2Vfb25lYCwgYHNobWVtX3BhcnNlX2h1Z2VgLCBhbmQgYGRvX3NldF9wbWRgLgoKV2FpdCwgYSBxdWljayBzY2FuIHJldmVhbHMgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGFuZCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBhcmUgKm5vdCogZGVjbGFyZWQgc3RhdGljIC0gdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLiBOb3csIGBzaG1lbV9nZXRhdHRyYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGdvb2QsIGJ1dCBpdCYjMzk7cyBhbiBpbm9kZSBvcGVyYXRpb24sIHNvIGl0JiMzOTtzIHByb2JhYmx5IGZpbmUgdG8gdXNlIHRoYXQgb25lLiBCb3RoIGBzaG1lbV9wYXJzZV9vbmVgIGFuZCBgc2htZW1fcGFyc2VfaHVnZWAgYXJlIGFsc28gc3RhdGljLiBBbmQgZmluYWxseSwgYGRvX3NldF9wbWRgIGlzICpub3QqIHN0YXRpYywgc28gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0LgoKUmlnaHQsIG5vdyB0aGF0IEkgaGF2ZSB0aG9zZSBpbiBtaW5kLCBJIG5lZWQgdG8gY2hlY2sgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyByZXF1aXJlZCBmb3IgbXkgc3BlY2lmaWMgbmVlZHMuIEFoLCB5ZXMsIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFNvLCBsZXQmIzM5O3Mgbm93IGp1bXAgaW50byBgbW0vc2htZW0uY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBhbmQgbWFrZSBzdXJlIGl0IGJlaGF2ZXMgYXMgZXhwZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTI2PWludCBzaG1lbV91bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEyOC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMjk6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzAtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi0tXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg9MTMyPWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzUtXHRcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTExND11bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTkwLVx0aWYgKCFpbl9wZiBcdTAwMjZcdTAwMjYgc2htZW1fZmlsZSh2bWEtXHUwMDNldm1fZmlsZSkpXG5tbS9odWdlX21lbW9yeS5jOjE5MTpcdFx0cmV0dXJuIG9yZGVycyBcdTAwMjYgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLVx1MDAzZXZtX2ZpbGUpLFxubW0vaHVnZV9tZW1vcnkuYy0xOTItXHRcdFx0XHRcdFx0ICAgdm1hLCB2bWFfc3RhcnRfcGdvZmYodm1hKSwgMCxcbi0tXG5tbS9zaG1lbS5jPTE4MDk9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxuLS1cbm1tL3NobWVtLmMtMTgyNS1cbm1tL3NobWVtLmM6MTgyNjp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxubW0vc2htZW0uYy0xODI3LVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYz0yNDIyPXN0YXRpYyBpbnQgc2htZW1fZ2V0X2ZvbGlvX2dmcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtMjUwMy1cdC8qIEZpbmQgaHVnZXBhZ2Ugb3JkZXJzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIGFub255bW91cyBzaG1lbSBhbmQgdG1wZnMuICovXG5tbS9zaG1lbS5jOjI1MDQ6XHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpO1xubW0vc2htZW0uYy0yNTA1LVx0aWYgKG9yZGVycyBcdTAwM2UgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODU1MAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IE9wdGlvbnMqKgoKQWxyaWdodCwgdGhlIG5lZWQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY2xlYXIuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJwbGF5IHdpdGggdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIHBhcnRpY3VsYXJseSBhcyBpdCByZWxhdGVzIHRvIHNoYXJlZCBtZW1vcnkuIExldCBtZSBzZWUuLi4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciBgQ09ORklHX1NITUVNYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFyZWQgbWVtb3J5IHN1YnN5c3RlbSBpcyBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBpc24mIzM5O3Qgc29tZWhvdyBjbGFzaGluZyB3aXRoIG9yIHByZXZlbnRpbmcgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIGZyb20gb3BlcmF0aW5nIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGVyZSBpcyBhbiBpbnRlcmFjdGlvbiB3aXRoIHNoYXJlZCBtZW1vcnkgY29uZmlndXJhdGlvbiB0aGF0IGlzIHJlbGV2YW50LgoKTmV4dCwgSSBzaG91bGQgcXVpY2tseSByZXZpZXcgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgYGRvX3NldF9wbWRgLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaG93IHRoZSBQTUQgaXMgYmVpbmcgdXBkYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBodWdlcGFnZXMuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBzcGVjaWZpYyBvcGVyYXRpb25zIGFyZSB0YWtpbmcgcGxhY2UgYXQgdGhlIFBhZ2UgVGFibGUgbGV2ZWwsIGFzIHRoaXMgZnVuY3Rpb24gaG9sZHMgY3JpdGljYWwgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaWYgdGhlcmUgaXMgYSBjb25mbGljdC4gQXJlIHdlIG1hcHBpbmcgaHVnZSBwYWdlcyBkaXJlY3RseSwgb3IgYXJlIHdlIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIHBhZ2Ugc2l6ZXMgaW4gY2VydGFpbiBzY2VuYXJpb3M/IFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiB3aWxsIGlsbHVtaW5hdGUgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgc2V0LCB3aGljaCBpcyBhYnNvbHV0ZWx5IHZpdGFsIHdoZW4gZGVhbGluZyB3aXRoIGh1Z2VwYWdlcywgdG8gc2VlIGhvdyB0aGUgb3ZlcmFsbCBzeXN0ZW0gaW50ZXJhY3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkb19zZXRfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW0uaD0yMDMxPXN0YXRpYyBpbmxpbmUgcHRlX3QgbWF5YmVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yMDM3LVxuaW5jbHVkZS9saW51eC9tbS5oOjIwMzg6dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMjAzOS12b2lkIHNldF9wdGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZmlsZW1hcC5jPTM3MTA9c3RhdGljIGJvb2wgZmlsZW1hcF9tYXBfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2ZpbGVtYXAuYy0zNzIzLVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX2ZpbGVfcGFnZShmb2xpbywgc3RhcnQpO1xubW0vZmlsZW1hcC5jOjM3MjQ6XHRcdHZtX2ZhdWx0X3QgcmV0ID0gZG9fc2V0X3BtZCh2bWYsIGZvbGlvLCBwYWdlKTtcbm1tL2ZpbGVtYXAuYy0zNzI1LVx0XHRpZiAoIXJldCkge1xuLS1cbm1tL2todWdlcGFnZWQuYz0xODE5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL2todWdlcGFnZWQuYy0xODQ3LVx0dm1mLnBtZCA9IHBtZHA7XG5tbS9raHVnZXBhZ2VkLmM6MTg0ODpcdGlmIChkb19zZXRfcG1kKFx1MDAyNnZtZiwgZm9saW8sIHBhZ2UpKVxubW0va2h1Z2VwYWdlZC5jLTE4NDktXHRcdHJldHVybiBTQ0FOX0ZBSUw7XG4tLVxubW0vbWVtb3J5LmM9NTU1MT1zdGF0aWMgdm9pZCBkZXBvc2l0X3ByZWFsbG9jX3B0ZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01NTYzLVxubW0vbWVtb3J5LmM6NTU2NDp2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LmMtNTU2NS17XG4tLVxubW0vbWVtb3J5LmMtNTYzOS0jZWxzZVxubW0vbWVtb3J5LmM6NTY0MDp2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxubW0vbWVtb3J5LmMtNTY0MS17XG4tLVxubW0vbWVtb3J5LmM9NTcxMz12bV9mYXVsdF90IGZpbmlzaF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01NzYzLVx0XHRpZiAoIW5lZWRzX2ZhbGxiYWNrIFx1MDAyNlx1MDAyNiBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykpIHtcbm1tL21lbW9yeS5jOjU3NjQ6XHRcdFx0cmV0ID0gZG9fc2V0X3BtZCh2bWYsIGZvbGlvLCBwYWdlKTtcbm1tL21lbW9yeS5jLTU3NjUtXHRcdFx0aWYgKHJldCAhPSBWTV9GQVVMVF9GQUxMQkFDSylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NDMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gUGFnZSBUYWJsZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIHBhZ2UgdGFibGVzIGFyZSBzZXQgdXAuIEkgcmVtZW1iZXIgc2VlaW5nIGBkb19zZXRfcG1kYCBzb21ld2hlcmUgaW4gdGhlIGBtbWAgc3Vic3lzdGVtLi4uIHJpZ2h0LCBpdCYjMzk7cyBpbiBgbW0vbWVtb3J5LmNgLiBOb3csIHdoZXJlIGRvZXMgdGhpcyB3aG9sZSBwcm9jZXNzIGFjdHVhbGx5ICpzdGFydCo/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bSBwcmV0dHkgc3VyZSBJIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoZSBsZWFmIG5vZGUgc3VwcG9ydCBpcyBpbml0aWFsaXplZCB0byB1bmRlcnN0YW5kIHRoaXMuIFRoYXQgbWVhbnMgY2hlY2tpbmcgYHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXRgIG5leHQuIEkgd29uZGVyIHdoYXQgdGhhdCBmdW5jdGlvbiBzZXRzIHVwLCBhbmQgd2hhdCBhc3BlY3RzIG9mIHRoZSBQTUQgaXQmIzM5O3Mgc2V0dGluZyB0aGUgZ3JvdW5kIHJ1bGVzIGZvci4uLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BndGFibGVfbGVhZl9zdXBwb3J0X2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjMxOT1zdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIzMjItfVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjMyMzp2b2lkIF9faW5pdCBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjMyNC0jZWxzZVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjMyNT1zdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIzMjgtfVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjMyOTpzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZCkgeyB9XG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMzMwLSNlbmRpZlxuLS1cbm1tL21lbW9yeS5jPTE2OD1FWFBPUlRfU1lNQk9MKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xubW0vbWVtb3J5LmMtMTY5LVxubW0vbWVtb3J5LmM6MTcwOnZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZClcbm1tL21lbW9yeS5jLTE3MS17XG4tLVxubW0vbW1faW5pdC5jPTI2OTg9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTI3MDEtXHRpbml0X3plcm9fcGFnZV9wZm4oKTtcbm1tL21tX2luaXQuYzoyNzAyOlx0cGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCgpO1xubW0vbW1faW5pdC5jLTI3MDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTMyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNldmVyYWwga2V5IGFyZWFzLiBJIHNlZSBpdCYjMzk7cyBtb2RpZnlpbmcgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBkb19zZXRfcG1kYCwgYW5kIGBzaG1lbV9nZXRhdHRyYC4gVGhvc2UgYXJlIGFsbCByZWxldmFudCBzeW1ib2xzOyBJJiMzOTttIGhhcHB5IHRvIHNlZSB0aG9zZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGFyZ2V0ZWQsIHRoZXkgaW5kaWNhdGUgYSBjbGVhciBmb2N1cy4gV2FpdCBhIHNlY29uZCwgdGhvdWdoLi4uIEkmIzM5O20gbm90aWNpbmcgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIG5vdCBzdGF0aWMuIFRoYXQgbWVhbnMgaXQmIzM5O3MgZXhwb3J0ZWQgb3IgZ2xvYmFsLCBhbmQgY2FuIGJlIGFjY2Vzc2VkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSBzaG91bGQgY29uZmlybSB0aGF0IHRoYXQmIzM5O3MgdGhlIGNhc2UuIFRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2UsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk3LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mjk4OnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTktXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTMxOT11bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDEtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozNDI6XHRyZXR1cm4gX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHlwZSwgb3JkZXJzKTtcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0My19XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMDc9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTExMy1cbm1tL2h1Z2VfbWVtb3J5LmM6MTE0OnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTExNS1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODI4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIFNoYXJlZCBNZW1vcnkgKFNITUVNKSBTeXN0ZW0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBhbmQgYGRvX3NldF9wbWRgIGFyZSBhbGwgZ2xvYmFsbHkgYWNjZXNzaWJsZSBmdW5jdGlvbnMuIEkgcmVjb2duaXplIHRoZWlyIHNpZ25pZmljYW5jZSwgdGhlc2UgYXJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgdGhlIGFyY2hpdGVjdHVyZSBpcyB1c2luZyBhIG1peCBvZiBnbG9iYWwgYW5kIGxvY2FsaXplZCBmdW5jdGlvbiBjYWxscyBmb3IgbWVtb3J5IGNvbnRyb2wsIHdoaWNoIG1ha2VzIGZvciBhIG1vcmUgY29tcGxleCBwaWN0dXJlLiBBbmQgdGhlbiwgdGhlcmUmIzM5O3MgYHNobWVtX2dldGF0dHJgLCBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IHVzZWQgYXMgYSBjYWxsYmFjay4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgcGF0dGVybiB0byB3YXRjaCBvdXQgZm9yIOKAkyBob3cgaXMgdGhlIGNhbGxiYWNrIGludGVyYWN0aW5nIHdpdGggdGhlIHN0YXRpYyBjb250ZXh0IGFuZCB3aGF0JiMzOTtzIHRoZSBsaWZlY3ljbGUgb2YgdGhhdCBzdGF0aWMgc2NvcGU/IFRoaXMgbWVhbnMgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc2NoZW1lIGlzIGxpa2VseSBhIGRpc3RyaWJ1dGVkIG1peCBvZiBjYWxsYmFja3MgYW5kIGRpcmVjdCBjYWxscy4gTGV0JiMzOTtzIGRlbHZlIGludG8gYHNobWVtX3BhcnNlX29uZWAuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoZXJlIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgY29tZSB0b2dldGhlci4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBwYXJzaW5nIG1lbW9yeSBjb25maWd1cmF0aW9uIGFuZCBob3cgdGhlc2UgZ2xvYmFsIGFuZCBzdGF0aWMgZnVuY3Rpb25zIGludGVyYWN0IGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NobWVtX3BhcnNlX29uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zaG1lbS5jPTQ1MjE9c3RhdGljIGludCBzaG1lbV9wYXJzZV9vcHRfY2FzZWZvbGQoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSxcbi0tXG5tbS9zaG1lbS5jLTQ1MjctXG5tbS9zaG1lbS5jOjQ1Mjg6c3RhdGljIGludCBzaG1lbV9wYXJzZV9vbmUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcbm1tL3NobWVtLmMtNDUyOS17XG4tLVxubW0vc2htZW0uYz01MDg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIHNobWVtX2ZzX2NvbnRleHRfb3BzID0ge1xuLS1cbm1tL3NobWVtLmMtNTA4OS1cdC5wYXJzZV9tb25vbGl0aGljXHQ9IHNobWVtX3BhcnNlX21vbm9saXRoaWMsXG5tbS9zaG1lbS5jOjUwOTA6XHQucGFyc2VfcGFyYW1cdFx0PSBzaG1lbV9wYXJzZV9vbmUsXG5tbS9zaG1lbS5jLTUwOTEtXHQucmVjb25maWd1cmVcdFx0PSBzaG1lbV9yZWNvbmZpZ3VyZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MDIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24gaW4gU2hhcmVkIE1lbW9yeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGh1Z2UgcGFnZXMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gc2hhcmVkIG1lbW9yeS4gVGhlIGNvZGUgaGFzIGEgc3RhdGljIGZ1bmN0aW9uLCBgc2htZW1fcGFyc2Vfb25lYCwgdGhhdCYjMzk7cyByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJwbGF5IGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBhbmQgYWxzbyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGFuZCBgZG9fc2V0X3BtZGAgd2hpY2ggc2VlbSBsaWtlIGtleSBwaWVjZXMgb2YgdGhlIHB1enpsZS4gSSB3b25kZXIsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJiMzOTttIG1pc3NpbmcgdGhhdCBpbmZsdWVuY2UgdGhpcyBiZWhhdmlvcj8KClJpZ2h0LCBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnl0aGluZy4gVGhlIG9idmlvdXMgb25lLCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBpcyBjZW50cmFsIHRvIHRoZSBjb25jZXB0LiAgQW5kIEkmIzM5O2QgYWxzbyBleHBlY3QgYENPTkZJR19TSE1FTWAgdG8gYmUgZW5hYmxlZCwgYXMgc2hhcmVkIG1lbW9yeSBpcyB1c3VhbGx5IGEgc3RhbmRhcmQgZmVhdHVyZS4gTGV0IG1lIHN0YXJ0IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgc3RhdHVzIG9mIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIOKAkyB0aGF0JiMzOTtzIHRoZSBwbGFjZSB0byBzdGFydCwgaXQmIzM5O3MgY29yZSB0byB0aGUgZW5hYmxpbmcgb2YgYWxsIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTgyOT1jb25maWcgTU1fSURcbi0tXG5tbS9LY29uZmlnLTgzMS1cbm1tL0tjb25maWc6ODMyOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctODMzLVx0Ym9vbCBcJiMzNDtUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04NTA9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04NTUtXG5tbS9LY29uZmlnOjg1NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbm1tL0tjb25maWctODU3LVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctODYyLVxubW0vS2NvbmZpZzo4NjM6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTUFEVklTRVxubW0vS2NvbmZpZy04NjQtXHRcdGJvb2wgXCYjMzQ7bWFkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODcxLVxubW0vS2NvbmZpZzo4NzI6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfTkVWRVJcbm1tL0tjb25maWctODczLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz04Nzk9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy04ODgtXG5tbS9LY29uZmlnOjg4OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXG5tbS9LY29uZmlnLTg5MC1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctODk4LVxubW0vS2NvbmZpZzo4OTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTAwLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTA2LVxubW0vS2NvbmZpZzo5MDc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05MDgtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkxNC1cbm1tL0tjb25maWc6OTE1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTkxNi1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTkyND1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkzMy1cbm1tL0tjb25maWc6OTM0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTM1LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NDItXG5tbS9LY29uZmlnOjk0MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05NDQtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTAtXG5tbS9LY29uZmlnOjk1MTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTk1Mi1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTU4LVxubW0vS2NvbmZpZzo5NTk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTYwLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjQ3MgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyBhbmQgVFJBTlNQQVJFTlRfSFVHRVBBR0UqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhhdCYjMzk7cyB0aGUgY29uZmlnIGluIHBsYXkuIE5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYC4gTGV0JiMzOTtzIHJlZnJlc2ggb3VyIG1lbW9yeSBvbiB0aGF0OyBpdCYjMzk7cyB0dWNrZWQgYXdheSBpbiBgbW0vc2htZW0uY2AuIFRoZSBzaWduYXR1cmUgSSBleHBlY3QgdG8gc2VlIGlzOgoKYGBgYwp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAoJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsCgkJCQlib29sIHNobWVtX2h1Z2VfZm9yY2UpCmBgYAoKSGFuZyBvbiBhIHNlY29uZC4uLiBHb2luZyBiYWNrIHRocm91Z2ggdGhlIHBhdGNoZXMsIEkgc2VlIHNvbWV0aGluZyBkaWZmZXJlbnQuIFRoZXJlJiMzOTtzIGFuIGV4dHJhIHBhcmFtZXRlciwgYGxvZmZfdCB3cml0ZV9lbmRgLiBUaGUgcGF0Y2hlZCB2ZXJzaW9uIHJlYWRzOgoKYGBgYwp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAoJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsCgkJCQlsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpCmBgYAoKVGltZSB0byBjb25zdWx0IHRoZSBzb3VyY2UgdHJlZSBhbmQgdmVyaWZ5IHRoZSBjdXJyZW50IHNpZ25hdHVyZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEyNj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xuLS1cbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMjgtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfU0hNRU0pXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTI5OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMwLVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEzMj1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpO1xuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzMy0jZWxzZVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEzNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTM1LVx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYz0xODA5PWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcbi0tXG5tbS9zaG1lbS5jLTE4MjUtXG5tbS9zaG1lbS5jOjE4MjY6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbm1tL3NobWVtLmMtMTgyNy1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzMxNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgbW0vc2htZW0uY2AgTGluZSAxODI2KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBtbS9zaG1lbS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE4MjYuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZXNpZGUsIGFuZCBpdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaWYgeW91JiMzOTtyZSBsb29raW5nIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24gaXNzdWVzLiBJJiMzOTttIGd1ZXNzaW5nIHdlIGFyZSBsb29raW5nIGludG8gbWVtb3J5IGxlYWsgaXNzdWVzIGluIHRoZSBzaGFyZWQgbWVtb3J5IGNvbnRleHQuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcHJvYmxlbXMgYXJvdW5kIHJlc291cmNlIGhhbmRsaW5nIG9yIGJvdW5kYXJ5IGNvbmRpdGlvbnMgaW4gcGFydGljdWxhci4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGNhbGxzIHRvIGBrbWFwX2F0b21pY2AsIGBrdW5tYXBfYXRvbWljYCwgYGFsbG9jX3BhZ2VgLCBgZnJlZV9wYWdlYCwgb3IgbWF5YmUgZXZlbiBgdm1fbWFwYC4gTXkgU3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nIGFib3V0IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRoZXJlLCBsaWtlIHNwaW5sb2NrcyBvciBtdXRleGVzLCBzbyBJ4oCZbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayB1c2FnZSBwYXR0ZXJucyBhcm91bmQgbWVtb3J5IGFjY2Vzc2VzLiBJJiMzOTttIGFsc28gbG9va2luZyBmb3IgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIG9yIGRhdGEgY29ycnVwdGlvbiBpZiBtdWx0aXBsZSBwcm9jZXNzZXMgYXJlIHNoYXJpbmcgbWVtb3J5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3NobWVtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4MjA6XHRcdCAgICBzaG1lbV9odWdlICE9IFNITUVNX0hVR0VfTkVWRVIpXG4xODIxOlx0XHRcdHJldHVybiB0cnVlO1xuMTgyMjpcdFxuMTgyMzpcdFx0cmV0dXJuIGZhbHNlO1xuMTgyNDpcdH1cbjE4MjU6XHRcbjE4MjY6XHR1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuMTgyNzpcdFx0XHRcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXG4xODI4Olx0XHRcdFx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXG4xODI5Olx0e1xuMTgzMDpcdFx0dW5zaWduZWQgbG9uZyBtYXNrID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XG4xODMxOlx0XHR1bnNpZ25lZCBsb25nIHdpdGhpbl9zaXplX29yZGVycyA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc193aXRoaW5fc2l6ZSk7XG4xODMyOlx0XHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMDtcbjE4MzM6XHRcdHVuc2lnbmVkIGludCBnbG9iYWxfb3JkZXJzLCBkaXNhYmxlZF9vcmRlcnMgPSAwO1xuMTgzNDpcdFxuMTgzNTpcdFx0aWYgKHZtYSBcdTAwMjZcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSlcbjE4MzY6XHRcdFx0cmV0dXJuIDA7XG4xODM3Olx0XG4xODM4Olx0XHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbjE4Mzk6XHRcdFx0ZGlzYWJsZWRfb3JkZXJzID0gQklUKFBNRF9PUkRFUik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUsIHRob3NlIHN5bWJvbHMgbG9vayBwcm9taXNpbmcgZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4KCioqRGVsdmluZyBpbnRvIFNoYXJlZCBNZW1vcnkgYW5kIEh1Z2UgUGFnZXMqKgoKWWVzLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBzZWVtcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGh1Z2UgcGFnZSBhbGxvY2F0aW9ucyBhcmUgaGFuZGxlZCB3aXRoaW4gc2hhcmVkIG1lbW9yeS4gQW5kLCBiYXNlZCBvbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBrZXJuZWwsIEkmIzM5O2Qgc2F5IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgYW5vdGhlciBzdHJvbmcgY2FuZGlkYXRlLiBJJiMzOTttIGFsc28gdGhpbmtpbmcgYGRvX3NldF9wbWRgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmcgYXNwZWN0LCBtYWtpbmcgaXQgcG90ZW50aWFsbHkgcmVsZXZhbnQuCgpOb3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGJpZ2dlciBwaWN0dXJlIHdpdGhpbiB0aGUgY29kZSwgSSYjMzk7bGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIGJpdHMgZml0IHRvZ2V0aGVyLiBUaGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHNobWVtX3BhcnNlX29uZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBgbW0vc2htZW0uY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvbnRleHQgSSBuZWVkIHRvIGNvbm5lY3QgdGhlc2Ugc3ltYm9scyBhbmQgZmlndXJlIG91dCB0aGUgZXhhY3QgZmxvdy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vc2htZW0uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDU4NTpcdFxuNDU4NjpcdFx0XHQvKlxuNDU4NzpcdFx0XHQgKiBUaGUgcmVxdWVzdGVkIGdpZCBtdXN0IGJlIHJlcHJlc2VudGFibGUgaW4gdGhlXG40NTg4Olx0XHRcdCAqIGZpbGVzeXN0ZW0mIzM5O3MgaWRtYXBwaW5nLlxuNDU4OTpcdFx0XHQgKi9cbjQ1OTA6XHRcdFx0aWYgKCFrZ2lkX2hhc19tYXBwaW5nKGZjLVx1MDAzZXVzZXJfbnMsIGtnaWQpKVxuNDU5MTpcdFx0XHRcdGdvdG8gYmFkX3ZhbHVlO1xuNDU5MjpcdFxuNDU5MzpcdFx0XHRjdHgtXHUwMDNlZ2lkID0ga2dpZDtcbjQ1OTQ6XHRcdFx0YnJlYWs7XG40NTk1Olx0XHRjYXNlIE9wdF9odWdlOlxuNDU5NjpcdFx0XHRjdHgtXHUwMDNlaHVnZSA9IHJlc3VsdC51aW50XzMyO1xuNDU5NzpcdFx0XHRpZiAoY3R4LVx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcdTAwMjZcdTAwMjZcbjQ1OTg6XHRcdFx0ICAgICFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXG40NTk5Olx0XHRcdFx0Z290byB1bnN1cHBvcnRlZF9wYXJhbWV0ZXI7XG40NjAwOlx0XHRcdGN0eC1cdTAwM2VzZWVuIHw9IFNITUVNX1NFRU5fSFVHRTtcbjQ2MDE6XHRcdFx0YnJlYWs7XG40NjAyOlx0XHRjYXNlIE9wdF9tcG9sOlxuNDYwMzpcdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpIHtcbjQ2MDQ6XHRcdFx0XHRtcG9sX3B1dChjdHgtXHUwMDNlbXBvbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTc0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZToKCioqQW5hbHl6aW5nIHRoZSBTaGFyZWQgTWVtb3J5IFBhcnNpbmcgRnVuY3Rpb25zKioKCk9rYXksIHNvIGBzaG1lbV9wYXJzZV9vbmVgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGZldyB0aGluZ3MgYWJvdXQgaXRzIHNjb3BlIGFuZCBwb3RlbnRpYWwgdXNlLiBJdCYjMzk7cyBvbmx5IGFjY2Vzc2libGUgd2l0aGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdCwgd2hpY2ggaW1wbGllcyBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24sIG5vdCBpbnRlbmRlZCBmb3IgZXh0ZXJuYWwgbGlua2luZyBvciB1c2UgaW4gb3RoZXIgbW9kdWxlcy4gTm93LCB0aGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsYXRlZCBwYXJzaW5nIGZ1bmN0aW9ucyB0byBzZWUgaG93IHRoZXkgZml0IHdpdGhpbiB0aGUgY29kZSwgYW5kIHRoZWlyIHJlbGF0aW9uIHRvIHRoZSBzdGF0aWMgb25lLiBMZXQgbWUgbW92ZSBvbiB0byBleGFtaW5pbmcgYHNobWVtX3BhcnNlX2h1Z2VgIG5vdywgdG8gc2VlIGhvdyB0aGUgb3RoZXIgcGFyc2luZyBmdW5jdGlvbnMgYXJlIGludGVncmF0ZWQgaW50byB0aGUgc2hhcmVkIG1lbW9yeSBwYXJzaW5nIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaG1lbV9wYXJzZV9odWdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NobWVtLmM9NjI2PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxuLS1cbm1tL3NobWVtLmMtNjY5LVxubW0vc2htZW0uYzo2NzA6c3RhdGljIGludCBzaG1lbV9wYXJzZV9odWdlKGNvbnN0IGNoYXIgKnN0cilcbm1tL3NobWVtLmMtNjcxLXtcbi0tXG5tbS9zaG1lbS5jPTU0NDI9c3RhdGljIHNzaXplX3Qgc2htZW1fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9zaG1lbS5jLTU0NTQtXG5tbS9zaG1lbS5jOjU0NTU6XHRodWdlID0gc2htZW1fcGFyc2VfaHVnZSh0bXApO1xubW0vc2htZW0uYy01NDU2LVx0aWYgKGh1Z2UgPT0gLUVJTlZBTClcbi0tXG5tbS9zaG1lbS5jPTU1Nzg9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdHJhbnNwYXJlbnRfaHVnZXBhZ2Vfc2htZW0oY2hhciAqc3RyKVxuLS1cbm1tL3NobWVtLmMtNTU4MS1cbm1tL3NobWVtLmM6NTU4MjpcdGh1Z2UgPSBzaG1lbV9wYXJzZV9odWdlKHN0cik7XG5tbS9zaG1lbS5jLTU1ODMtXHRpZiAoaHVnZSA9PSAtRUlOVkFMKSB7XG4tLVxubW0vc2htZW0uYz01NTkzPXN0YXRpYyBpbnQgX19pbml0IHNldHVwX3RyYW5zcGFyZW50X2h1Z2VwYWdlX3RtcGZzKGNoYXIgKnN0cilcbi0tXG5tbS9zaG1lbS5jLTU1OTYtXG5tbS9zaG1lbS5jOjU1OTc6XHRodWdlID0gc2htZW1fcGFyc2VfaHVnZShzdHIpO1xubW0vc2htZW0uYy01NTk4LVx0aWYgKGh1Z2UgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUxNTMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBpbiBTaGFyZWQgTWVtb3J5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIChUSFApIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHNoYXJlZCBtZW1vcnkgYW5kIHRoZSB0bXBmcyBmaWxlc3lzdGVtLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRoYXQgYHNobWVtX3BhcnNlX2h1Z2VgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYW4gZW50cnkgcG9pbnQuIFRoYXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBzdGF0aWMuIEkgY2FuIG1ha2UgdXNlIG9mIHRoaW5ncyBsaWtlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBhbmQgYGRvX3NldF9wbWRgLgoKVGhlbiwgd2FpdCBhIG1pbnV0ZSwgSSBqdXN0IHJlYWxpemVkIGBzaG1lbV9nZXRhdHRyYCAqaXMqIHN0YXRpYywgYnV0IGJlY2F1c2UgaXQmIzM5O3MgYW4gaW5vZGUgb3BlcmF0aW9uLCBpdCBjb3VsZCBiZSByZWFjaGFibGUgdGhyb3VnaCB0aGUgYHN0YXRgIHN5c2NhbGwgd2hlbiBvcGVyYXRpbmcgb24gdG1wZnMuIFRoaXMgbWVhbnMgdGhlcmUmIzM5O3MgYSBsaW5rIHRvIHRoZSBrZXJuZWwgdGhhdCBJIGhhdmUgdG8gY29uc2lkZXIuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGlzLiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBJIG1heSBoYXZlIG1pc3NlZD8KClJpZ2h0LCBgc2htZW1fZW5hYmxlZF9zdG9yZWAgaXMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgcmVhY2hhYmxlIGJ5IHdyaXRpbmcgdG8gYC9zeXMva2VybmVsL21tL3RyYW5zcGFyZW50X2h1Z2VwYWdlL3NobWVtX2VuYWJsZWRgLiBUaGlzIG9uZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCYjMzk7cyBhbm90aGVyIGNsZWFyIGVudHJ5IHBvaW50IGZvciBjb25maWd1cmluZyBUSFAgYmVoYXZpb3IuIEkgbmVlZCB0byBrZWVwIHRoaXMgaW4gbWluZC4KCkhvd2V2ZXIsIGBzZXR1cF90cmFuc3BhcmVudF9odWdlcGFnZV9zaG1lbWAgYW5kIGBzZXR1cF90cmFuc3BhcmVudF9odWdlcGFnZV90bXBmc2AgYXJlIGJvdGggbWFya2VkIGFzIGBfX2luaXRgIGZ1bmN0aW9ucy4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBpbml0aWFsaXphdGlvbiwgd2hpY2ggaXMgbGVzcyBpbnRlcmVzdGluZyBmb3Igb25nb2luZyBvcGVyYXRpb25hbCBjb25zaWRlcmF0aW9ucy4gVGhlIHNhbWUgZ29lcyBmb3IgYGh1Z2VwYWdlX2luaXRfc3lzZnNgLCBgaHVnZXBhZ2VfaW5pdGAsIGFuZCBgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdGAsIGFsbCBvZiB3aGljaCBhcmUgYF9faW5pdGAuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIGxvb2sgYXQgYG5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50c2AgaW4gYGRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmNgLiBJdCBpcyBwcm9iYWJseSByZWxhdGVkIHRvIGh1Z2VwYWdlcyBpbiB0aGUgbm9uLXZvbGF0aWxlIG1lbW9yeSBkZXZpY2UgZHJpdmVyLgoKU28gdGhlIG1haW4gcG9pbnRzIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlbiYjMzk7dCBpbml0LCBhbmQgc3lzZnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jPTg0PXN0YXRpYyBzc2l6ZV90IGFsaWduX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtOTEtXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjkyOnN0YXRpYyB1bnNpZ25lZCBsb25nICpuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHModW5zaWduZWQgbG9uZyAqYWxpZ25tZW50cylcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtOTMte1xuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MTE5PXN0YXRpYyBzc2l6ZV90IGFsaWduX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTEyOC1cdHJjID0gbmRfc2l6ZV9zZWxlY3Rfc3RvcmUoZGV2LCBidWYsIFx1MDAyNm5kX3Bmbi1cdTAwM2VhbGlnbixcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM6MTI5Olx0XHRcdG5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyhhbGlnbnMpKTtcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMTMwLVx0ZGV2X2RiZyhkZXYsIFwmIzM0O3Jlc3VsdDogJXpkIHdyb3RlOiAlcyVzXCYjMzQ7LCByYywgYnVmLFxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MjQzPXN0YXRpYyBzc2l6ZV90IHN1cHBvcnRlZF9hbGlnbm1lbnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMjQ4LVx0cmV0dXJuIG5kX3NpemVfc2VsZWN0X3Nob3coMCxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM6MjQ5Olx0XHRcdG5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyhhbGlnbnMpLCBidWYpO1xuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0yNTAtfVxuLS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9NDE4PXN0YXRpYyBib29sIG5kX3N1cHBvcnRlZF9hbGlnbm1lbnQodW5zaWduZWQgbG9uZyBhbGlnbilcbi0tXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTQyNS1cbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM6NDI2Olx0bmRfcGZuX3N1cHBvcnRlZF9hbGlnbm1lbnRzKHN1cHBvcnRlZCk7XG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTQyNy1cdGZvciAoaSA9IDA7IHN1cHBvcnRlZFtpXTsgaSYjNDM7JiM0MzspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzY0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipDaGVja2luZyBEQVggQWxpZ25tZW50IERldGFpbHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHNvbWUgREFYIGNvZGUsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggcGVyc2lzdGVudCBtZW1vcnkgYW5kIGFsaWdubWVudC4gSSBzZWUgdGhhdCBgbmRfcGZuX3N1cHBvcnRlZF9hbGlnbm1lbnRzYCBhbmQgYG5kX3Bmbl9kZWZhdWx0X2FsaWdubWVudGAgYXJlIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZTsgdGhleSYjMzk7cmUgcHJvYmFibHkgY29uZmlndXJhdGlvbiBkZXRhaWxzIHNwZWNpZmljIHRvIHRoaXMgZHJpdmVyIGFuZCBub3Qgc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZ2xvYmFsbHkgYWNjZXNzaWJsZSBvciBtb2RpZmllZCBleHRlcm5hbGx5LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYWxpZ25tZW50IHZhbHVlcyBhcmUgdXNlZCBhbmQgdmFsaWRhdGVkIHdpdGhpbiB0aGUgREFYIGNvbnRleHQuIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIHNlZSBzdWNoIGNoZWNrcz8gQWgsIHllcy4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkYXhfYWxpZ25fdmFsaWRgIGZ1bmN0aW9uLiBJdCYjMzk7cyBpbiBgZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaGAsIHNvIGxldCYjMzk7cyBuYXZpZ2F0ZSB0aGVyZSBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGxvZ2ljIHRoYXQgZGV0ZXJtaW5lcyBpZiBhIHJlcXVlc3RlZCBEQVggYWxpZ25tZW50IGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBhbmQgcmVhc29uYWJsZSB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyBEQVggY2FwYWJpbGl0aWVzLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RheF9hbGlnbl92YWxpZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RheC9idXMuYz0xMjM5PXN0YXRpYyBzc2l6ZV90IGFsaWduX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9kYXgvYnVzLmMtMTI1MC1cbmRyaXZlcnMvZGF4L2J1cy5jOjEyNTE6XHRpZiAoIWRheF9hbGlnbl92YWxpZCh2YWwpKVxuZHJpdmVycy9kYXgvYnVzLmMtMTI1Mi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaD0xMTk9cGh5c19hZGRyX3QgZGF4X3Bnb2ZmX3RvX3BoeXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIHBnb2ZmX3QgcGdvZmYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4tLVxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaC0xMjEtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaDoxMjI6c3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaC0xMjMte1xuLS1cbmRyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgtMTMyLSNlbHNlXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oOjEzMzpzdGF0aWMgaW5saW5lIGJvb2wgZGF4X2FsaWduX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWxpZ24pXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oLTEzNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTc3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXkgRnVuY3Rpb25zIGFuZCBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBgZGF4X2FsaWduX3ZhbGlkYCBpcyBkZWZpbmVkIGlubGluZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHMgYXMgYmVpbmcgdGhlIHByaW1hcnkgYXJlYXMgb2YgaW50ZXJlc3QsIGZvciBub3c6IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBhbmQgYGRvX3NldF9wbWRgLiBUaGV5IGxvb2sgbGlrZSB0aGV5JiMzOTtsbCBiZSB0aGUgZnVuY3Rpb25zIHRvIHdhdGNoLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgZnVuY3Rpb25zIEkmIzM5O20gbWlzc2luZy4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtbS9kZWJ1Z192bV9wZ3RhYmxlLmNgLiBIbW1tLCBhbGwgdGhvc2UgZnVuY3Rpb25zIGxpc3RlZCDigJMgYHBtZF9iYXNpY190ZXN0c2AsIGBwbWRfYWR2YW5jZWRfdGVzdHNgLCBldGMuIOKAkyBhcHBlYXIgdG8gYmUgYF9faW5pdGAgZnVuY3Rpb25zLiBQcm9iYWJseSBub3Qgd2hlcmUgdGhlIGNvcmUgbG9naWMgbGllcywgYWx0aG91Z2ggdGhleSBjb3VsZCBiZSBjcml0aWNhbCBmb3IgZGVidWdnaW5nLgoKQWxyaWdodCwgdGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2VzIGxpa2VseSBjZW50ZXIgYXJvdW5kIHRoZXNlIGZpbGVzOiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9zaG1lbS5jYCwgYW5kIGBtbS9tZW1vcnkuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlc2UgbW9kdWxlcyB0byBzZWUgd2hhdCBjaGFuZ2VzIHdlcmUgbWFkZS4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhvc2UgcHJpbWFyeSBmdW5jdGlvbnMgYWdhaW4uIFllcCwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBpcyBnbG9iYWwuIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGlzIGFsc28gZ2xvYmFsLiBBbmQgYGRvX3NldF9wbWRgIGlzIGdsb2JhbCB0b28uIEdvb2QuCgpOb3csIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0JiMzOTtzIGxvb2sgYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNpbmNlIHRoYXQgc2VlbXMgdG8gYmUgdGhlIG1haW4gZHJpdmVyLiBXaGF0IGVsc2UgaXMgdGhlcmU/IGBDT05GSUdfU0hNRU1gIGlzIHVzdWFsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBpdCYjMzk7cyBwcm9iYWJseSBub3QgYSBoaWdoIHByaW9yaXR5IHRvIGNoZWNrLiBJIGFsc28gbmVlZCB0byBjaGVjayBgQ09ORklHX0RBWGAgZm9yIGBkcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oYCwgYW5kIGBDT05GSUdfTlZESU1NX1BGTmAgZm9yIGBkcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jYC4gQW5kIGBDT05GSUdfREVCVUdfVk1fUEdUQUJMRWAgZm9yIGBtbS9kZWJ1Z192bV9wZ3RhYmxlLmNgLgoKUmlnaHQsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgIGZvciB0aGUgZGVwZW5kZW5jaWVzLiBJdCBpcyBsaWtlbHkgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBmdWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMDY6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODI5PWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODMxLVxubW0vS2NvbmZpZzo4MzI6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzMtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1MD1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1NS1cbm1tL0tjb25maWc6ODU2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NTctXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjItXG5tbS9LY29uZmlnOjg2MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2NC1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzEtXG5tbS9LY29uZmlnOjg3MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzMtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg3OT1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg4OC1cbm1tL0tjb25maWc6ODg5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODkwLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04OTgtXG5tbS9LY29uZmlnOjg5OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDAtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDYtXG5tbS9LY29uZmlnOjkwNzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkwOC1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTE0LVxubW0vS2NvbmZpZzo5MTU6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE2LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTI0PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTMzLVxubW0vS2NvbmZpZzo5MzQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzUtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0Mi1cbm1tL0tjb25maWc6OTQzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0NC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1MC1cbm1tL0tjb25maWc6OTUxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTUyLVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NTgtXG5tbS9LY29uZmlnOjk1OTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjAtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDA2OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjA0CgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDczOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gaXRlbSBoZXJlIGlzIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEkmIzM5O2xsIGRlZmluaXRlbHkgYmUgaW5jbHVkaW5nIHRoYXQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IHRoZSBrZXkgZnVuY3Rpb25zIHdlJiMzOTtyZSBsb29raW5nIGF0IGFyZSBpbmRlZWQgYWNjZXNzaWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTtyZSBub3Qgc3RhdGljIGFuZCB0aGVyZWZvcmUgbm90IHN1YmplY3QgdG8gdW5leHBlY3RlZCBzY29wZSByZXN0cmljdGlvbnMuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGlzIG5vdCBzdGF0aWM7IGl0JiMzOTtzIGRlZmluZWQgaW4gYm90aCBgaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oYCBhbmQgYG1tL3NobWVtLmNgLiBHb29kLiBOZXh0LCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGFsc28gZ2xvYmFsbHkgYWNjZXNzaWJsZSwgYXBwZWFyaW5nIGluIGBpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaGAgYW5kIGBtbS9odWdlX21lbW9yeS5jYC4gRmluYWxseSwgYGRvX3NldF9wbWRgIGlzIGFsc28gbm90IHN0YXRpYzsgaXQmIzM5O3MgaW4gYGluY2x1ZGUvbGludXgvbW0uaGAgYW5kIGBtbS9tZW1vcnkuY2AuIFBlcmZlY3QuCgpJIGRpZCBicmllZmx5IGNvbnNpZGVyIGBzaG1lbV9nZXRhdHRyYCwgYnV0IHNpbmNlIGl0JiMzOTtzIGFuIGlub2RlIG9wZXJhdGlvbiwgYW5kIGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBpbm9kZV9vcGVyYXRpb25zLmdldGF0dHJgLCBhbmQgaXQmIzM5O3Mgbm90IGJlaW5nIHVzZWQsIHRoZW4gaXQmIzM5O3MgZmluZS4gU28gSSYjMzk7bGwgc3RpY2sgd2l0aCB0aGUgZ2xvYmFsIGZ1bmN0aW9uczogYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGFuZCBgZG9fc2V0X3BtZGAuCgpJIHdlbnQgYmFjayBhbmQgZG91YmxlLWNoZWNrZWQgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZXMganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6CiogICBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLgoqICAgYGRvX3NldF9wbWRgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLgoqICAgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaXMgYWxzbyBhIGdsb2JhbCBmdW5jdGlvbi4KClRoaXMgcGF0Y2ggaXMgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IFRIUCBzdXBwb3J0IGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCwgc3dpdGNoaW5nIGZyb20gYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB0byBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYC4gVGhpcyBpcyBjb3JlIE1NIGxvZ2ljLCBhZmZlY3RpbmcgVEhQLCBzaG1lbSwgZGF4LCBhbmQgbnZkaW1tLCB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgUE1EIGFuZCBQVUQgb3JkZXJzIG9uIENQVXMgd2l0aG91dCBQTUQgbGVhdmVzLiBUaGUgY29kZSBpcyBmdW5jdGlvbmFsLCBhbmQgdGhlIGxvZ2ljIGlzIHJlYWNoYWJsZS4KClRoZXJlZm9yZSwgYFdvcnRoRnV6emluZz10cnVlYC4KCk15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBhbmQgYGRvX3NldF9wbWRgLgoKQW5kIGFnYWluLCBteSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBpbmNsdWRlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCgpNeSByZWFzb25pbmcgaXMgYmVjYXVzZSB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IFRIUCBzdXBwb3J0IGlzIGNoZWNrZWQgYW5kIGluaXRpYWxpemVkLCByZXBsYWNpbmcgYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB3aXRoIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBJdCBtb2RpZmllcyBjb3JlIE1NIGxvZ2ljIChUSFAsIHNobWVtLCBkYXgsIG52ZGltbSkgdG8gZmlsdGVyIG91dCBQTUQgYW5kIFBVRCBvcmRlcnMgaWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAwNjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7LAogICAgJiMzNDtzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7ZG9fc2V0X3BtZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBob3cgVEhQIHN1cHBvcnQgaXMgY2hlY2tlZCBhbmQgaW5pdGlhbGl6ZWQsIHJlcGxhY2luZyBgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKClgIHdpdGggYHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKWAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gbG9naWMgKFRIUCwgc2htZW0sIGRheCwgbnZkaW1tKSB0byBmaWx0ZXIgb3V0IFBNRCBhbmQgUFVEIG9yZGVycyBpZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgUE1EIGxlYXZlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7c2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzJiMzNDssCiAgICAmIzM0O2RvX3NldF9wbWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IFRIUCBzdXBwb3J0IGlzIGNoZWNrZWQgYW5kIGluaXRpYWxpemVkLCByZXBsYWNpbmcgYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB3aXRoIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBJdCBtb2RpZmllcyBjb3JlIE1NIGxvZ2ljIChUSFAsIHNobWVtLCBkYXgsIG52ZGltbSkgdG8gZmlsdGVyIG91dCBQTUQgYW5kIFBVRCBvcmRlcnMgaWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MTQuNTEzNDY2ODA5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTU1MzY4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgICBcInNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc1wiLFxuICAgIFwiZG9fc2V0X3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBUSFAgc3VwcG9ydCBpcyBjaGVja2VkIGFuZCBpbml0aWFsaXplZCwgcmVwbGFjaW5nIGBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKWAgd2l0aCBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYC4gSXQgbW9kaWZpZXMgY29yZSBNTSBsb2dpYyAoVEhQLCBzaG1lbSwgZGF4LCBudmRpbW0pIHRvIGZpbHRlciBvdXQgUE1EIGFuZCBQVUQgb3JkZXJzIGlmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBQTUQgbGVhdmVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MTQuNTEzNDczODk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTg1NzQyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZmQ2NTY0OTMwYjU4Mzg1NTljMzBkNTFkOGEwYTZlZTg3YzI1MjAzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDI1IDA2OjAwOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3RcXG5pbmRleCBkNjc3ZTA0MjhjM2Y2OC4uNDZmYzk4NmMzMzg4YWMgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdFxcbkBAIC0xMDksOSArMTA5LDggQEAgbm9zd2FwICBEaXNhYmxlcyBzd2FwLiBSZW1vdW50cyBtdXN0IHJlc3BlY3QgdGhlIG9yaWdpbmFsIHNldHRpbmdzLlxcbiA9PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIFxcbiB0bXBmcyBhbHNvIHN1cHBvcnRzIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgd2hpY2ggcmVxdWlyZXMgYSBrZXJuZWxcXG4tY29uZmlndXJlZCB3aXRoIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhbmQgd2l0aCBodWdlIHN1cHBvcnRlZCBmb3JcXG4teW91ciBzeXN0ZW0gKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpLCB3aGljaCBpcyBhcmNoaXRlY3R1cmUgc3BlY2lmaWMpLlxcbi1UaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6XFxuK2NvbmZpZ3VyZWQgd2l0aCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgYW5kIHdpdGggaHVnZSBwYWdlc1xcbitzdXBwb3J0ZWQgZm9yIHlvdXIgc3lzdGVtLiBUaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6XFxuIFxcbiA9PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuIGh1Z2U9bmV2ZXIgICAgICAgRG8gbm90IGFsbG9jYXRlIGh1Z2UgcGFnZXMuICBUaGlzIGlzIHRoZSBkZWZhdWx0LlxcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IGZhN2I5MzVmOTQ3Y2EwLi4yYTBhN2RkZjhiZWU3ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC02MTUsOSArNjE1LDYgQEAgdW5zaWduZWQgbG9uZyBpb19yZW1hcF9wZm5fcmFuZ2VfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUpO1xcbiAvKiBXZSBkb24ndCBoYXZlIGhhcmR3YXJlIGRpcnR5L2FjY2Vzc2VkIGJpdHMsIGdlbmVyaWNfcG1kcF9lc3RhYmxpc2ggaXMgZmluZS4qL1xcbiAjZGVmaW5lIHBtZHBfZXN0YWJsaXNoIGdlbmVyaWNfcG1kcF9lc3RhYmxpc2hcXG4gXFxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxcbi1leHRlcm4gaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcXG4ge1xcbiBcXHRyZXR1cm4gISEocG1kX3ZhbChwbWQpIFxcdTAwMjYgX1BBR0VfSFVHRSk7XFxuQEAgLTc0Myw2ICs3NDAsOSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4rI2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcXG4rZXh0ZXJuIGludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpO1xcbitcXG4gI2lmZGVmIF9QQUdFX0hVR0VcXG4gI2RlZmluZSBwbWRfbGVhZihwbWQpXFx0KChwbWRfdmFsKHBtZCkgXFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcXHQoKHB1ZF92YWwocHVkKSBcXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jXFxuaW5kZXggMjRmZTg1ZmExNjlkMTYuLjkzMzllYmIwODE1ZjIzIDEwMDY0NFxcbi0tLSBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmNcXG4rKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jXFxuQEAgLTQzMiw5ICs0MzIsNyBAQCB2b2lkIGFkZF93aXJlZF9lbnRyeSh1bnNpZ25lZCBsb25nIGVudHJ5bG8wLCB1bnNpZ25lZCBsb25nIGVudHJ5bG8xLFxcbiAjZW5kaWZcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbi1cXG4taW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxcbitpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbiB7XFxuIFxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgbWFzayA9IC0xO1xcbiBcXG5AQCAtNDUwLDkgKzQ0OCw3IEBAIGludCBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZClcXG4gXFx0fVxcbiBcXHRyZXR1cm4gbWFzayA9PSBQTV9IVUdFX01BU0s7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTChoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UpO1xcbi1cXG4tI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAgKi9cXG4rRVhQT1JUX1NZTUJPTChhcmNoX2hhc19wbWRfbGVhdmVzKTtcXG4gXFxuIC8qXFxuICAqIFVzZWQgZm9yIGxvYWRpbmcgVExCIGVudHJpZXMgYmVmb3JlIHRyYXBfaW5pdCgpIGhhcyBzdGFydGVkLCB3aGVuIHdlXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC00ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTRrLmhcXG5pbmRleCA4ZTViZDk5MDJiZWQ0ZS4uZDUzMmUzZjBkZmMzYjEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTRrLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaFxcbkBAIC0xNjUsOSArMTY1LDkgQEAgZXh0ZXJuIHZvaWQgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX2RlcG9zaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLFxcbiBleHRlcm4gcGd0YWJsZV90IGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHApO1xcbiBleHRlcm4gcG1kX3QgaGFzaF9fcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKTtcXG4tZXh0ZXJuIGludCBoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZCk7XFxuICNlbmRpZlxcbiBcXG4rZXh0ZXJuIGludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpO1xcbiAjZW5kaWYgLyogIV9fQVNTRU1CTEVSX18gKi9cXG4gXFxuICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfQk9PSzNTXzY0X0hBU0hfNEtfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmhcXG5pbmRleCA3ZGViM2E2Njg5MGJjZC4uZDUyM2M4MGY0NGY3MTcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oXFxuQEAgLTI3OCw5ICsyNzgsOSBAQCBleHRlcm4gdm9pZCBoYXNoX19wZ3RhYmxlX3RyYW5zX2h1Z2VfZGVwb3NpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHAsXFxuIGV4dGVybiBwZ3RhYmxlX3QgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCk7XFxuIGV4dGVybiBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApO1xcbi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcXG4gI2VuZGlmIC8qICBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4gXFxuK2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcXG4gI2VuZGlmXFx0LyogX19BU1NFTUJMRVJfXyAqL1xcbiBcXG4gI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19CT09LM1NfNjRfSEFTSF82NEtfSCAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXFxuaW5kZXggZjRkYjdkN2ZiZDVjNjIuLjQxMTY2ZDQ0ZmE3NTZlIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcXG5AQCAtMTEyMSwxNSArMTEyMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4ge1xcbiB9XFxuIFxcbi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcXG4tc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXFxuLXtcXG4tXFx0aWYgKHJhZGl4X2VuYWJsZWQoKSlcXG4tXFx0XFx0cmV0dXJuIHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKTtcXG4tXFx0cmV0dXJuIGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSgpO1xcbi19XFxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxcbi1cXG4gc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxcbiB7XFxuIFxcdGlmIChyYWRpeF9lbmFibGVkKCkpXFxuQEAgLTE0NDEsNiArMTQzMiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9uZWVkc19wZ3RhYmxlX2RlcG9zaXQodm9pZClcXG4gXFxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4gXFxuK2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcXG4rc3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbit7XFxuK1xcdGlmIChyYWRpeF9lbmFibGVkKCkpXFxuK1xcdFxcdHJldHVybiByYWRpeF9fYXJjaF9oYXNfcG1kX2xlYXZlcygpO1xcbitcXHRyZXR1cm4gaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcygpO1xcbit9XFxuKyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXFxuK1xcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfTU9ESUZZX1BST1RfVFJBTlNBQ1RJT05cXG4gcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7XFxuIHZvaWQgcHRlcF9tb2RpZnlfcHJvdF9jb21taXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaFxcbmluZGV4IGRhOTU0ZTc3OTc0NDFmLi5lOGI3NDUyODk1M2ZkYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmhcXG5AQCAtMjk4LDIyICsyOTgsMjIgQEAgZXh0ZXJuIHBtZF90IHJhZGl4X19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gcHVkX3QgcmFkaXhfX3B1ZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHApO1xcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgcmFkaXhfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxcbitzdGF0aWMgaW5saW5lIGludCByYWRpeF9faGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxcbiB7XFxuLVxcdC8qIEZvciByYWRpeCAyTSBhdCBQTUQgbGV2ZWwgbWVhbnMgdGhwICovXFxuLVxcdGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8yTV0uc2hpZnQgPT0gUE1EX1NISUZUKVxcbitcXHQvKiBGb3IgcmFkaXggMUcgYXQgUFVEIGxldmVsIG1lYW5zIHB1ZCBodWdlcGFnZSBzdXBwb3J0ICovXFxuK1xcdGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8xR10uc2hpZnQgPT0gUFVEX1NISUZUKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4rI2VuZGlmXFxuIFxcbi1zdGF0aWMgaW5saW5lIGludCByYWRpeF9faGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxcbitzdGF0aWMgaW5saW5lIGludCByYWRpeF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbiB7XFxuLVxcdC8qIEZvciByYWRpeCAxRyBhdCBQVUQgbGV2ZWwgbWVhbnMgcHVkIGh1Z2VwYWdlIHN1cHBvcnQgKi9cXG4tXFx0aWYgKG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzFHXS5zaGlmdCA9PSBQVURfU0hJRlQpXFxuK1xcdC8qIEZvciByYWRpeCAyTSBhdCBQTUQgbGV2ZWwgbWVhbnMgdGhwICovXFxuK1xcdGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8yTV0uc2hpZnQgPT0gUE1EX1NISUZUKVxcbiBcXHRcXHRyZXR1cm4gMTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4tI2VuZGlmXFxuIFxcbiBzdHJ1Y3Qgdm1lbV9hbHRtYXA7XFxuIHN0cnVjdCBkZXZfcGFnZW1hcDtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jXFxuaW5kZXggZDliNWI3NTFkN2I3NWIuLmE2N2JjMTcyMzQwNGMyIDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuY1xcbkBAIC0zOTEsNyArMzkxLDkgQEAgcG1kX3QgaGFzaF9fcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdHJldHVybiBvbGRfcG1kO1xcbiB9XFxuIFxcbi1pbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXFxuKyNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4rXFxuK2ludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXFxuIHtcXG4gXFxuIFxcdGlmICghbW11X2hhc19mZWF0dXJlKE1NVV9GVFJfMTZNX1BBR0UpKVxcbkBAIC00MjAsOSArNDIyLDcgQEAgaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxcbiBcXG4gXFx0cmV0dXJuIDE7XFxuIH1cXG4tRVhQT1JUX1NZTUJPTF9HUEwoaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKTtcXG4tXFxuLSNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4rRVhQT1JUX1NZTUJPTF9HUEwoaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyk7XFxuIFxcbiAjaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IGU4ODI2NjNhNThlNzc2Li4yNGVlOTBjN2U5YmY2YiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0xODI1LDEzICsxODI1LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcXG4ge1xcbiBcXHRyZXR1cm4gcG1kX2xlYWYocG1kKTtcXG4gfVxcbisjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuIFxcbi0jZGVmaW5lIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2VcXG4tc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXFxuKyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXFxuK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaGFzX3BtZF9sZWF2ZXModm9pZClcXG4ge1xcbiBcXHRyZXR1cm4gY3B1X2hhc19lZGF0MSgpID8gMSA6IDA7XFxuIH1cXG4tI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4gI2lmZGVmIENPTkZJR19QQUdFX1RBQkxFX0NIRUNLXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCA4ZTAwMThmYWRkMTRlNi4uM2M2YTY0MWU2YzIxMWQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTMwNiwxMiArMzA2LDYgQEAgc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXFxuLXN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxcbi17XFxuLVxcdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUFNFKTtcXG4tfVxcbi1cXG4gI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcXG4gc3RhdGljIGlubGluZSBib29sIHBtZF9zcGVjaWFsKHBtZF90IHBtZClcXG4ge1xcbkBAIC0zMzcsNiArMzMxLDEyIEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21rc3BlY2lhbChwdWRfdCBwdWQpXFxuICNlbmRpZlxcdC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVAgKi9cXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4rI2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcXG4rc3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUFNFKTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc2V0X2ZsYWdzKHB0ZV90IHB0ZSwgcHRldmFsX3Qgc2V0KVxcbiB7XFxuIFxcdHB0ZXZhbF90IHYgPSBuYXRpdmVfcHRlX3ZhbChwdGUpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oIGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxcbmluZGV4IDgxZTRhZjQ5ZTM5YzEwLi4zNTc0NGZmNjU5MmFjOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oXFxuKysrIGIvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaFxcbkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxcbiB7XFxuIFxcdGlmIChhbGlnbiA9PSBQVURfU0laRSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuLVxcdGlmIChhbGlnbiA9PSBQTURfU0laRSBcXHUwMDI2XFx1MDAyNiBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcXG4rXFx0aWYgKGFsaWduID09IFBNRF9TSVpFIFxcdTAwMjZcXHUwMDI2IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcdGlmIChhbGlnbiA9PSBQQUdFX1NJWkUpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jIGIvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY1xcbmluZGV4IDhmYTljMTZhYmE3ZWEwLi40NTdlYjU0ZTdhYjZmYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jXFxuKysrIGIvZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY1xcbkBAIC05NCw3ICs5NCw4IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nICpuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHModW5zaWduZWQgbG9uZyAqYWxpZ25tZW50cylcXG4gXFxuIFxcdGFsaWdubWVudHNbMF0gPSBQQUdFX1NJWkU7XFxuIFxcbi1cXHRpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpIHtcXG4rXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XFxuIFxcdFxcdGFsaWdubWVudHNbMV0gPSBIUEFHRV9QTURfU0laRTtcXG4gXFx0XFx0aWYgKGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2UoKSlcXG4gXFx0XFx0XFx0YWxpZ25tZW50c1syXSA9IEhQQUdFX1BVRF9TSVpFO1xcbkBAIC0xMDksNyArMTEwLDggQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgKm5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyh1bnNpZ25lZCBsb25nICphbGlnbm1lbnRzKVxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBuZF9wZm5fZGVmYXVsdF9hbGlnbm1lbnQodm9pZClcXG4ge1xcbiBcXG4tXFx0aWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxcbitcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuIFxcdFxcdHJldHVybiBIUEFHRV9QTURfU0laRTtcXG4gXFx0cmV0dXJuIFBBR0VfU0laRTtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXFxuaW5kZXggYzc0NWY3YWQyMjk4N2YuLjUyNWFjZWEyZWI1OWNiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG5AQCAtNDcsNyArNDcsNiBAQCB2bV9mYXVsdF90IHZtZl9pbnNlcnRfZm9saW9fcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRcXHRib29sIHdyaXRlKTtcXG4gXFxuIGVudW0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZyB7XFxuLVxcdFRSQU5TUEFSRU5UX0hVR0VQQUdFX1VOU1VQUE9SVEVELFxcbiBcXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9GTEFHLFxcbiBcXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHLFxcbiBcXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRElSRUNUX0ZMQUcsXFxuQEAgLTM4MywxMiArMzgyLDYgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHJldHVybiBtbV9mbGFnc190ZXN0KE1NRl9ESVNBQkxFX1RIUF9FWENFUFRfQURWSVNFRCwgdm1hLVxcdTAwM2V2bV9tbSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfZGlzYWJsZWRfYnlfaHcodm9pZClcXG4te1xcbi1cXHQvKiBJZiB0aGUgaGFyZHdhcmUvZmlybXdhcmUgbWFya2VkIGh1Z2VwYWdlIHN1cHBvcnQgZGlzYWJsZWQuICovXFxuLVxcdHJldHVybiB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyBcXHUwMDI2ICgxIFxcdTAwM2NcXHUwMDNjIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1VOU1VQUE9SVEVEKTtcXG4tfVxcbi1cXG4gdW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuaW5kZXggOGMwOTNjMTE5ZTVhODIuLmQ1NzFkMTYxYTg0YjNjIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1fdHlwZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J1Zy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2p1bXBfbGFiZWwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV90YWJsZV9jaGVjay5oXFx1MDAzZVxcbiBcXG5AQCAtMjMxMyw2ICsyMzE0LDIxIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGd0YWJsZV9sZXZlbF90b19zdHIoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxcbiBcXHR9XFxuIH1cXG4gXFxuKyNpZmRlZiBDT05GSUdfTU1VXFxuK0RFQ0xBUkVfU1RBVElDX0tFWV9UUlVFKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xcbitzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2X19hcmNoX2hhc19wbWRfbGVhdmVzX2tleSk7XFxuK31cXG4rdm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKTtcXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIHBndGFibGVfaGFzX3BtZF9sZWF2ZXModm9pZClcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KHZvaWQpIHsgfVxcbisjZW5kaWZcXG4rXFxuICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqL1xcbiBcXG4gI2lmICFkZWZpbmVkKE1BWF9QT1NTSUJMRV9QSFlTTUVNX0JJVFMpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR182NEJJVClcXG5AQCAtMjMyOCw4ICsyMzQ0LDggQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwZ3RhYmxlX2xldmVsX3RvX3N0cihlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuICNlbmRpZlxcbiAjZW5kaWZcXG4gXFxuLSNpZm5kZWYgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXFxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgSVNfQlVJTFRJTihDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuKyNpZm5kZWYgYXJjaF9oYXNfcG1kX2xlYXZlc1xcbisjZGVmaW5lIGFyY2hfaGFzX3BtZF9sZWF2ZXMoKSBJU19CVUlMVElOKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuICNlbmRpZlxcbiBcXG4gI2lmbmRlZiBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlXFxuZGlmZiAtLWdpdCBhL21tL2RlYnVnX3ZtX3BndGFibGUuYyBiL21tL2RlYnVnX3ZtX3BndGFibGUuY1xcbmluZGV4IDI4NzVmZDIyZDdiYjAyLi4yNTAzOGI3NGM3YmM2NyAxMDA2NDRcXG4tLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcXG4rKysgYi9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcXG5AQCAtMTc3LDcgKzE3Nyw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IGlkeClcXG4gXFx0dW5zaWduZWQgbG9uZyB2YWwgPSBpZHgsICpwdHIgPSBcXHUwMDI2dmFsO1xcbiBcXHRwbWRfdCBwbWQ7XFxuIFxcbi1cXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxcbitcXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcIlZhbGlkYXRpbmcgUE1EIGJhc2ljICglcEd2KVxcXFxuXFxcIiwgcHRyKTtcXG5AQCAtMjIyLDcgKzIyMiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfYWR2YW5jZWRfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4gXFx0cG1kX3QgcG1kO1xcbiBcXHR1bnNpZ25lZCBsb25nIHZhZGRyID0gYXJncy1cXHUwMDNldmFkZHI7XFxuIFxcbi1cXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxcbitcXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cGFnZSA9IChhcmdzLVxcdTAwM2VwbWRfcGZuICE9IFVMT05HX01BWCkgPyBwZm5fdG9fcGFnZShhcmdzLVxcdTAwM2VwbWRfcGZuKSA6IE5VTEw7XFxuQEAgLTI4Myw3ICsyODMsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4ge1xcbiBcXHRwbWRfdCBwbWQ7XFxuIFxcbi1cXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxcbitcXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcIlZhbGlkYXRpbmcgUE1EIGxlYWZcXFxcblxcXCIpO1xcbkBAIC02ODgsNyArNjg4LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9wcm90bm9uZV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiBcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1BURV9QUk9UTk9ORSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXFxuK1xcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwiVmFsaWRhdGluZyBQTUQgcHJvdG5vbmVcXFxcblxcXCIpO1xcbkBAIC03MzcsNyArNzM3LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuIFxcdGlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXFxuK1xcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwiVmFsaWRhdGluZyBQTUQgc29mdCBkaXJ0eVxcXFxuXFxcIik7XFxuQEAgLTc1NCw3ICs3NTQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiBcXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJWYWxpZGF0aW5nIFBNRCBzd2FwIHNvZnQgZGlydHlcXFxcblxcXCIpO1xcbkBAIC04MjUsNyArODI1LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiBcXHRzd3BfZW50cnlfdCBhcmNoX2VudHJ5O1xcbiBcXHRwbWRfdCBwbWQxLCBwbWQyO1xcbiBcXG4tXFx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJWYWxpZGF0aW5nIFBNRCBzd2FwXFxcXG5cXFwiKTtcXG5AQCAtOTA2LDcgKzkwNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuIHtcXG4gXFx0cG1kX3QgcG1kO1xcbiBcXG4tXFx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJWYWxpZGF0aW5nIFBNRCBiYXNlZCBUSFBcXFxcblxcXCIpO1xcbkBAIC05OTcsNyArOTk3LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGRlc3Ryb3lfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBhcmdzLVxcdTAwM2VwbWRfcGZuICE9IFVMT05HX01BWCkge1xcbiBcXHRcXHRkZWJ1Z192bV9wZ3RhYmxlX2ZyZWVfaHVnZV9wYWdlKGFyZ3MsIGFyZ3MtXFx1MDAzZXBtZF9wZm4sIEhQQUdFX1BNRF9PUkRFUik7XFxuIFxcdFxcdGFyZ3MtXFx1MDAzZXBtZF9wZm4gPSBVTE9OR19NQVg7XFxuQEAgLTEyNDksNyArMTI0OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkge1xcbitcXHQgICAgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XFxuIFxcdFxcdHBhZ2UgPSBkZWJ1Z192bV9wZ3RhYmxlX2FsbG9jX2h1Z2VfcGFnZShhcmdzLCBIUEFHRV9QTURfT1JERVIpO1xcbiBcXHRcXHRpZiAocGFnZSkge1xcbiBcXHRcXHRcXHRhcmdzLVxcdTAwM2VwbWRfcGZuID0gcGFnZV90b19wZm4ocGFnZSk7XFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXFxuaW5kZXggMDRlOGE2YjU1MzQzNWYuLjM4NWEzMDVlN2FmNjUxIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTEyOSw2ICsxMjksMTUgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0ZWxzZVxcbiBcXHRcXHRzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfRklMRV9ERUZBVUxUO1xcbiBcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMsIGFzc3VtZSBmb3JcXG4rXFx0XFx0ICogbm93IHRoYXQgaXQgZG9lcyBub3Qgc3VwcG9ydCBQVUQgbGVhdmVzIGFuZCBkaXNhYmxlXFxuK1xcdFxcdCAqIGJvdGggZm9saW8gb3JkZXJzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c3VwcG9ydGVkX29yZGVycyBcXHUwMDI2PSB+KEJJVChQTURfT1JERVIpIHwgQklUKFBVRF9PUkRFUikpO1xcbitcXHR9XFxuK1xcbiBcXHRvcmRlcnMgXFx1MDAyNj0gc3VwcG9ydGVkX29yZGVycztcXG4gXFx0aWYgKCFvcmRlcnMpXFxuIFxcdFxcdHJldHVybiAwO1xcbkBAIC0xMzYsNyArMTQ1LDcgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0aWYgKCF2bWEtXFx1MDAzZXZtX21tKVxcdFxcdC8qIHZkc28gKi9cXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbi1cXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBmb3JjZWRfY29sbGFwc2UpKVxcbitcXHRpZiAodm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBmb3JjZWRfY29sbGFwc2UpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qIGtodWdlcGFnZWQgZG9lc24ndCBjb2xsYXBzZSBEQVggdm1hLCBidXQgcGFnZSBmYXVsdCBpcyBmaW5lLiAqL1xcbkBAIC04NzQsNyArODgzLDcgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdF9zeXNmcyhzdHJ1Y3Qga29iamVjdCAqKmh1Z2VwYWdlX2tvYmopXFxuIFxcdCAqIGRpc2FibGUgYWxsIG90aGVyIHNpemVzLiBwb3dlcnBjJ3MgUE1EX09SREVSIGlzbid0IGEgY29tcGlsZS10aW1lXFxuIFxcdCAqIGNvbnN0YW50IHNvIHdlIGhhdmUgdG8gZG8gdGhpcyBoZXJlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFhbm9uX29yZGVyc19jb25maWd1cmVkKVxcbitcXHRpZiAoIWFub25fb3JkZXJzX2NvbmZpZ3VyZWQgXFx1MDAyNlxcdTAwMjYgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxcbiBcXHRcXHRodWdlX2Fub25fb3JkZXJzX2luaGVyaXQgPSBCSVQoUE1EX09SREVSKTtcXG4gXFxuIFxcdCpodWdlcGFnZV9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZChcXFwidHJhbnNwYXJlbnRfaHVnZXBhZ2VcXFwiLCBtbV9rb2JqKTtcXG5AQCAtODk2LDYgKzkwNSwxNSBAQCBzdGF0aWMgaW50IF9faW5pdCBodWdlcGFnZV9pbml0X3N5c2ZzKHN0cnVjdCBrb2JqZWN0ICoqaHVnZXBhZ2Vfa29iailcXG4gXFx0fVxcbiBcXG4gXFx0b3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTiB8IFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVDtcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMsIGFzc3VtZSBmb3JcXG4rXFx0XFx0ICogbm93IHRoYXQgaXQgZG9lcyBub3Qgc3VwcG9ydCBQVUQgbGVhdmVzIGFuZCBkaXNhYmxlXFxuK1xcdFxcdCAqIGJvdGggZm9saW8gb3JkZXJzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0b3JkZXJzIFxcdTAwMjY9IH4oQklUKFBNRF9PUkRFUikgfCBCSVQoUFVEX09SREVSKSk7XFxuK1xcdH1cXG4rXFxuIFxcdG9yZGVyID0gaGlnaGVzdF9vcmRlcihvcmRlcnMpO1xcbiBcXHR3aGlsZSAob3JkZXJzKSB7XFxuIFxcdFxcdHRocHNpemUgPSB0aHBzaXplX2NyZWF0ZShvcmRlciwgKmh1Z2VwYWdlX2tvYmopO1xcbkBAIC0xMDEwLDExICsxMDI4LDYgQEAgc3RhdGljIGludCBfX2luaXQgaHVnZXBhZ2VfaW5pdCh2b2lkKVxcbiBcXHRpbnQgZXJyO1xcbiBcXHRzdHJ1Y3Qga29iamVjdCAqaHVnZXBhZ2Vfa29iajtcXG4gXFxuLVxcdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpIHtcXG4tXFx0XFx0dHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgPSAxIFxcdTAwM2NcXHUwMDNjIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1VOU1VQUE9SVEVEO1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0fVxcbi1cXG4gXFx0LypcXG4gXFx0ICogaHVnZXBhZ2VzIGNhbid0IGJlIGFsbG9jYXRlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yXFxuIFxcdCAqL1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggNTZiMjQ0NTUyZjEzOTQuLmYzOWQ5MzgzNDk0ZTY5IDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMTY0LDYgKzE2NCwxNSBAQCBfX3NldHVwKFxcXCJub3JhbmRtYXBzXFxcIiwgZGlzYWJsZV9yYW5kbWFwcyk7XFxuIFxcbiB1bnNpZ25lZCBsb25nIGhpZ2hlc3RfbWVtbWFwX3BmbiBfX3JlYWRfbW9zdGx5O1xcbiBcXG4rREVGSU5FX1NUQVRJQ19LRVlfVFJVRShfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcXG4rRVhQT1JUX1NZTUJPTChfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcXG4rXFxuK3ZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZClcXG4re1xcbitcXHRpZiAoIWFyY2hfaGFzX3BtZF9sZWF2ZXMoKSlcXG4rXFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFxcdTAwMjZfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcXG4rfVxcbitcXG4gdm9pZCBtbV90cmFjZV9yc3Nfc3RhdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlcilcXG4ge1xcbiBcXHR0cmFjZV9yc3Nfc3RhdChtbSwgbWVtYmVyKTtcXG5AQCAtNTU2Nyw3ICs1NTc2LDcgQEAgdm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFcXG4gXFx0ICogUE1EIG1hcHBpbmdzIGlmIFRIUHMgYXJlIGRpc2FibGVkLiBBcyB3ZSBhbHJlYWR5IGhhdmUgYSBUSFAsXFxuIFxcdCAqIGJlaGF2ZSBhcyBpZiB3ZSBhcmUgZm9yY2luZyBhIGNvbGxhcHNlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHRocF9kaXNhYmxlZF9ieV9odygpIHx8IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLFxcbitcXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSB8fCB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAvKiBmb3JjZWRfY29sbGFwc2U9Ki8gdHJ1ZSkpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcXG5pbmRleCA3MTFmODIxZjdiM2M3Mi4uZGNjMDcyZGI0NTU4NzIgMTAwNjQ0XFxuLS0tIGEvbW0vbW1faW5pdC5jXFxuKysrIGIvbW0vbW1faW5pdC5jXFxuQEAgLTI2OTksNiArMjY5OSw3IEBAIHZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGFyY2hfbW1fcHJlaW5pdCgpO1xcbiBcXHRpbml0X3plcm9fcGFnZV9wZm4oKTtcXG4rXFx0cGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCgpO1xcbiBcXG4gXFx0LyogSW5pdGlhbGl6YXRpb25zIHJlbHlpbmcgb24gU01QIHNldHVwICovXFxuIFxcdEJVSUxEX0JVR19PTihNQVhfWk9ORUxJU1RTIFxcdTAwM2UgMik7XFxuZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jXFxuaW5kZXggNTA3MTE3NzA1OWE5NjQuLjAwOGRmNTU4YWYyMzdlIDEwMDY0NFxcbi0tLSBhL21tL3NobWVtLmNcXG4rKysgYi9tbS9zaG1lbS5jXFxuQEAgLTY4OSw3ICs2ODksNyBAQCBzdGF0aWMgaW50IHNobWVtX3BhcnNlX2h1Z2UoY29uc3QgY2hhciAqc3RyKVxcbiBcXHRlbHNlXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHQgICAgaHVnZSAhPSBTSE1FTV9IVUdFX05FVkVSIFxcdTAwMjZcXHUwMDI2IGh1Z2UgIT0gU0hNRU1fSFVHRV9ERU5ZKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuQEAgLTEyODcsNiArMTI4Nyw3IEBAIHN0YXRpYyBpbnQgc2htZW1fZ2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4ge1xcbiBcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC1cXHUwMDNlZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbiBcXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xcbitcXHR1bnNpZ25lZCBpbnQgb3JkZXJzO1xcbiBcXG4gXFx0LyogRmFzdC1wYXRoIGhpbnQ7IHJlY2FsYyB1bmRlciBpbmZvLVxcdTAwM2Vsb2NrIGNvcnJlY3RzIGFueSBzdGFsZSByZWFkLiAqL1xcbiBcXHRpZiAoZGF0YV9yYWNlKGluZm8tXFx1MDAzZWFsbG9jZWQgLSBpbmZvLVxcdTAwM2Vzd2FwcGVkICE9IGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZW5ycGFnZXMpKVxcbkBAIC0xMzAzLDggKzEzMDQsMTEgQEAgc3RhdGljIGludCBzaG1lbV9nZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRcXHRTVEFUWF9BVFRSX05PRFVNUCk7XFxuIFxcdGdlbmVyaWNfZmlsbGF0dHIoaWRtYXAsIHJlcXVlc3RfbWFzaywgaW5vZGUsIHN0YXQpO1xcbiBcXG4tXFx0aWYgKHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoaW5vZGUsIDAsIDAsIGZhbHNlLCBOVUxMLCAwKSlcXG4tXFx0XFx0c3RhdC1cXHUwMDNlYmxrc2l6ZSA9IEhQQUdFX1BNRF9TSVpFO1xcbitcXHRvcmRlcnMgPSBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKGlub2RlLCAwLCAwLCBmYWxzZSwgTlVMTCwgMCk7XFxuK1xcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxcbitcXHRcXHRvcmRlcnMgXFx1MDAyNj0gfkJJVChQTURfT1JERVIpO1xcbitcXHRpZiAob3JkZXJzKVxcbitcXHRcXHRzdGF0LVxcdTAwM2VibGtzaXplID0gUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIGhpZ2hlc3Rfb3JkZXIob3JkZXJzKTtcXG4gXFxuIFxcdGlmIChyZXF1ZXN0X21hc2sgXFx1MDAyNiBTVEFUWF9CVElNRSkge1xcbiBcXHRcXHRzdGF0LVxcdTAwM2VyZXN1bHRfbWFzayB8PSBTVEFUWF9CVElNRTtcXG5AQCAtMTgyNiwxNiArMTgzMCwxOSBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHR1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfYWx3YXlzKTtcXG4gXFx0dW5zaWduZWQgbG9uZyB3aXRoaW5fc2l6ZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfd2l0aGluX3NpemUpO1xcbiBcXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVxcdTAwM2V2bV9mbGFncyA6IDA7XFxuLVxcdHVuc2lnbmVkIGludCBnbG9iYWxfb3JkZXJzO1xcbitcXHR1bnNpZ25lZCBpbnQgZ2xvYmFsX29yZGVycywgZGlzYWJsZWRfb3JkZXJzID0gMDtcXG4gXFxuLVxcdGlmICh0aHBfZGlzYWJsZWRfYnlfaHcoKSB8fCAodm1hIFxcdTAwMjZcXHUwMDI2IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpKVxcbitcXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgc2htZW1faHVnZV9mb3JjZSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4rXFx0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuK1xcdFxcdGRpc2FibGVkX29yZGVycyA9IEJJVChQTURfT1JERVIpO1xcbitcXG4gXFx0Z2xvYmFsX29yZGVycyA9IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoaW5vZGUsIGluZGV4LCB3cml0ZV9lbmQsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgc2htZW1faHVnZV9mb3JjZSwgdm1hLCB2bV9mbGFncyk7XFxuIFxcdC8qIFRtcGZzIGh1Z2UgcGFnZXMgYWxsb2NhdGlvbiAqL1xcbiBcXHRpZiAoIXZtYSB8fCAhdm1hX2lzX2Fub25fc2htZW0odm1hKSlcXG4tXFx0XFx0cmV0dXJuIGdsb2JhbF9vcmRlcnM7XFxuK1xcdFxcdHJldHVybiBnbG9iYWxfb3JkZXJzIFxcdTAwMjYgfmRpc2FibGVkX29yZGVycztcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEZvbGxvd2luZyB0aGUgJ2RlbnknIHNlbWFudGljcyBvZiB0aGUgdG9wIGxldmVsLCBmb3JjZSB0aGUgaHVnZVxcbkBAIC0xODQ5LDcgKzE4NTYsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHQgKiBtZWFucyBub24tUE1EIHNpemVkIFRIUCBjYW4gbm90IG92ZXJyaWRlICdodWdlJyBtb3VudCBvcHRpb24gbm93LlxcbiBcXHQgKi9cXG4gXFx0aWYgKHNobWVtX2h1Z2UgPT0gU0hNRU1fSFVHRV9GT1JDRSlcXG4tXFx0XFx0cmV0dXJuIFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19pbmhlcml0KTtcXG4rXFx0XFx0cmV0dXJuIFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19pbmhlcml0KSBcXHUwMDI2IH5kaXNhYmxlZF9vcmRlcnM7XFxuIFxcbiBcXHQvKiBBbGxvdyBtVEhQIHRoYXQgd2lsbCBiZSBmdWxseSB3aXRoaW4gaV9zaXplLiAqL1xcbiBcXHRtYXNrIHw9IHNobWVtX2dldF9vcmRlcnNfd2l0aGluX3NpemUoaW5vZGUsIHdpdGhpbl9zaXplX29yZGVycywgaW5kZXgsIDApO1xcbkBAIC0xODYwLDYgKzE4NjcsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRpZiAoZ2xvYmFsX29yZGVycyBcXHUwMDNlIDApXFxuIFxcdFxcdG1hc2sgfD0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQpO1xcbiBcXG4rXFx0bWFzayBcXHUwMDI2PSB+ZGlzYWJsZWRfb3JkZXJzO1xcbiBcXHRyZXR1cm4gVEhQX09SREVSU19BTExfRklMRV9ERUZBVUxUIFxcdTAwMjYgbWFzaztcXG4gfVxcbiBcXG5AQCAtNDU4Nyw4ICs0NTk1LDcgQEAgc3RhdGljIGludCBzaG1lbV9wYXJzZV9vbmUoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3QgZnNfcGFyYW1ldGVyICpwYXJhbSlcXG4gXFx0Y2FzZSBPcHRfaHVnZTpcXG4gXFx0XFx0Y3R4LVxcdTAwM2VodWdlID0gcmVzdWx0LnVpbnRfMzI7XFxuIFxcdFxcdGlmIChjdHgtXFx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIShJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpKVxcbitcXHRcXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcXG4gXFx0XFx0XFx0Z290byB1bnN1cHBvcnRlZF9wYXJhbWV0ZXI7XFxuIFxcdFxcdGN0eC1cXHUwMDNlc2VlbiB8PSBTSE1FTV9TRUVOX0hVR0U7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC01MzgzLDcgKzUzOTAsNyBAQCB2b2lkIF9faW5pdCBzaG1lbV9pbml0KHZvaWQpXFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbi1cXHRpZiAoaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgXFx1MDAyNlxcdTAwMjYgc2htZW1faHVnZSBcXHUwMDNlIFNITUVNX0hVR0VfREVOWSlcXG4rXFx0aWYgKHNobWVtX2h1Z2UgXFx1MDAzZSBTSE1FTV9IVUdFX0RFTlkpXFxuIFxcdFxcdFNITUVNX1NCKHNobV9tbnQtXFx1MDAzZW1udF9zYiktXFx1MDAzZWh1Z2UgPSBzaG1lbV9odWdlO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHNobWVtX2h1Z2UgPSBTSE1FTV9IVUdFX05FVkVSOyAvKiBqdXN0IGluIGNhc2UgaXQgd2FzIHBhdGNoZWQgKi9cXG5AQCAtNTM5Miw3ICs1Mzk5LDcgQEAgdm9pZCBfX2luaXQgc2htZW1faW5pdCh2b2lkKVxcbiBcXHQgKiBEZWZhdWx0IHRvIHNldHRpbmcgUE1ELXNpemVkIFRIUCB0byBpbmhlcml0IHRoZSBnbG9iYWwgc2V0dGluZyBhbmRcXG4gXFx0ICogZGlzYWJsZSBhbGwgb3RoZXIgbXVsdGktc2l6ZSBUSFBzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZClcXG4rXFx0aWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZCBcXHUwMDI2XFx1MDAyNiBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXFxuIFxcdFxcdGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQgPSBCSVQoSFBBR0VfUE1EX09SREVSKTtcXG4gI2VuZGlmXFxuIFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MTUuMDMyNzA3ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTU2MzYxMTc3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiLFxuICAgIFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCIsXG4gICAgXCJkb19zZXRfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IFRIUCBzdXBwb3J0IGlzIGNoZWNrZWQgYW5kIGluaXRpYWxpemVkLCByZXBsYWNpbmcgYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB3aXRoIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBJdCBtb2RpZmllcyBjb3JlIE1NIGxvZ2ljIChUSFAsIHNobWVtLCBkYXgsIG52ZGltbSkgdG8gZmlsdGVyIG91dCBQTUQgYW5kIFBVRCBvcmRlcnMgaWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZmQ2NTY0OTMwYjU4Mzg1NTljMzBkNTFkOGEwYTZlZTg3YzI1MjAzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMDY6MDA6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMucnN0XG5pbmRleCBkNjc3ZTA0MjhjM2Y2OC4uNDZmYzk4NmMzMzg4YWMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3RtcGZzLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy90bXBmcy5yc3RcbkBAIC0xMDksOSArMTA5LDggQEAgbm9zd2FwICBEaXNhYmxlcyBzd2FwLiBSZW1vdW50cyBtdXN0IHJlc3BlY3QgdGhlIG9yaWdpbmFsIHNldHRpbmdzLlxuID09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbiB0bXBmcyBhbHNvIHN1cHBvcnRzIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgd2hpY2ggcmVxdWlyZXMgYSBrZXJuZWxcbi1jb25maWd1cmVkIHdpdGggQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIGFuZCB3aXRoIGh1Z2Ugc3VwcG9ydGVkIGZvclxuLXlvdXIgc3lzdGVtIChoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSwgd2hpY2ggaXMgYXJjaGl0ZWN0dXJlIHNwZWNpZmljKS5cbi1UaGUgbW91bnQgb3B0aW9ucyBmb3IgdGhpcyBhcmU6XG4rY29uZmlndXJlZCB3aXRoIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBhbmQgd2l0aCBodWdlIHBhZ2VzXG4rc3VwcG9ydGVkIGZvciB5b3VyIHN5c3RlbS4gVGhlIG1vdW50IG9wdGlvbnMgZm9yIHRoaXMgYXJlOlxuIFxuID09PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBodWdlPW5ldmVyICAgICAgIERvIG5vdCBhbGxvY2F0ZSBodWdlIHBhZ2VzLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC5cbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggZmE3YjkzNWY5NDdjYTAuLjJhMGE3ZGRmOGJlZTdlIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTYxNSw5ICs2MTUsNiBAQCB1bnNpZ25lZCBsb25nIGlvX3JlbWFwX3Bmbl9yYW5nZV9wZm4odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XG4gLyogV2UgZG9uJ3QgaGF2ZSBoYXJkd2FyZSBkaXJ0eS9hY2Nlc3NlZCBiaXRzLCBnZW5lcmljX3BtZHBfZXN0YWJsaXNoIGlzIGZpbmUuKi9cbiAjZGVmaW5lIHBtZHBfZXN0YWJsaXNoIGdlbmVyaWNfcG1kcF9lc3RhYmxpc2hcbiBcbi0jZGVmaW5lIGhhc190cmFuc3BhcmVudF9odWdlcGFnZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Vcbi1leHRlcm4gaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcbi1cbiBzdGF0aWMgaW5saW5lIGludCBwbWRfdHJhbnNfaHVnZShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuICEhKHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFVHRSk7XG5AQCAtNzQzLDYgKzc0MCw5IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuKyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXG4rZXh0ZXJuIGludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpO1xuK1xuICNpZmRlZiBfUEFHRV9IVUdFXG4gI2RlZmluZSBwbWRfbGVhZihwbWQpXHQoKHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcdCgocHVkX3ZhbChwdWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGItcjRrLmMgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jXG5pbmRleCAyNGZlODVmYTE2OWQxNi4uOTMzOWViYjA4MTVmMjMgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jXG4rKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jXG5AQCAtNDMyLDkgKzQzMiw3IEBAIHZvaWQgYWRkX3dpcmVkX2VudHJ5KHVuc2lnbmVkIGxvbmcgZW50cnlsbzAsIHVuc2lnbmVkIGxvbmcgZW50cnlsbzEsXG4gI2VuZGlmXG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbi1cbi1pbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4raW50IGFyY2hfaGFzX3BtZF9sZWF2ZXModm9pZClcbiB7XG4gXHRzdGF0aWMgdW5zaWduZWQgaW50IG1hc2sgPSAtMTtcbiBcbkBAIC00NTAsOSArNDQ4LDcgQEAgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxuIFx0fVxuIFx0cmV0dXJuIG1hc2sgPT0gUE1fSFVHRV9NQVNLO1xuIH1cbi1FWFBPUlRfU1lNQk9MKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSk7XG4tXG4tI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAgKi9cbitFWFBPUlRfU1lNQk9MKGFyY2hfaGFzX3BtZF9sZWF2ZXMpO1xuIFxuIC8qXG4gICogVXNlZCBmb3IgbG9hZGluZyBUTEIgZW50cmllcyBiZWZvcmUgdHJhcF9pbml0KCkgaGFzIHN0YXJ0ZWQsIHdoZW4gd2VcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC00ay5oXG5pbmRleCA4ZTViZDk5MDJiZWQ0ZS4uZDUzMmUzZjBkZmMzYjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNGsuaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTRrLmhcbkBAIC0xNjUsOSArMTY1LDkgQEAgZXh0ZXJuIHZvaWQgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX2RlcG9zaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRwLFxuIGV4dGVybiBwZ3RhYmxlX3QgaGFzaF9fcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCk7XG4gZXh0ZXJuIHBtZF90IGhhc2hfX3BtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApO1xuLWV4dGVybiBpbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpO1xuICNlbmRpZlxuIFxuK2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcbiAjZW5kaWYgLyogIV9fQVNTRU1CTEVSX18gKi9cbiBcbiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0JPT0szU182NF9IQVNIXzRLX0ggKi9cbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L2hhc2gtNjRrLmhcbmluZGV4IDdkZWIzYTY2ODkwYmNkLi5kNTIzYzgwZjQ0ZjcxNyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvaGFzaC02NGsuaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9oYXNoLTY0ay5oXG5AQCAtMjc4LDkgKzI3OCw5IEBAIGV4dGVybiB2b2lkIGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV9kZXBvc2l0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kcCxcbiBleHRlcm4gcGd0YWJsZV90IGhhc2hfX3BndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZHApO1xuIGV4dGVybiBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKTtcbi1leHRlcm4gaW50IGhhc2hfX2hhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKTtcbiAjZW5kaWYgLyogIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuK2V4dGVybiBpbnQgaGFzaF9fYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKTtcbiAjZW5kaWZcdC8qIF9fQVNTRU1CTEVSX18gKi9cbiBcbiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0JPT0szU182NF9IQVNIXzY0S19IICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuaW5kZXggZjRkYjdkN2ZiZDVjNjIuLjQxMTY2ZDQ0ZmE3NTZlIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG5AQCAtMTEyMSwxNSArMTEyMSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiB7XG4gfVxuIFxuLWV4dGVybiBpbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpO1xuLXN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxuLXtcbi1cdGlmIChyYWRpeF9lbmFibGVkKCkpXG4tXHRcdHJldHVybiByYWRpeF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCk7XG4tXHRyZXR1cm4gaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCk7XG4tfVxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxuLVxuIHN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2Uodm9pZClcbiB7XG4gXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxuQEAgLTE0NDEsNiArMTQzMiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9uZWVkc19wZ3RhYmxlX2RlcG9zaXQodm9pZClcbiBcbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4rZXh0ZXJuIGludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpO1xuK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfaGFzX3BtZF9sZWF2ZXModm9pZClcbit7XG4rXHRpZiAocmFkaXhfZW5hYmxlZCgpKVxuK1x0XHRyZXR1cm4gcmFkaXhfX2FyY2hfaGFzX3BtZF9sZWF2ZXMoKTtcbitcdHJldHVybiBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKCk7XG4rfVxuKyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXG4rXG4gI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX01PRElGWV9QUk9UX1RSQU5TQUNUSU9OXG4gcHRlX3QgcHRlcF9tb2RpZnlfcHJvdF9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QgKik7XG4gdm9pZCBwdGVwX21vZGlmeV9wcm90X2NvbW1pdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZyxcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3JhZGl4LmhcbmluZGV4IGRhOTU0ZTc3OTc0NDFmLi5lOGI3NDUyODk1M2ZkYyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcmFkaXguaFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9yYWRpeC5oXG5AQCAtMjk4LDIyICsyOTgsMjIgQEAgZXh0ZXJuIHBtZF90IHJhZGl4X19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBwdWRfdCByYWRpeF9fcHVkcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHVkX3QgKnB1ZHApO1xuIFxuLXN0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZClcbitzdGF0aWMgaW5saW5lIGludCByYWRpeF9faGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxuIHtcbi1cdC8qIEZvciByYWRpeCAyTSBhdCBQTUQgbGV2ZWwgbWVhbnMgdGhwICovXG4tXHRpZiAobW11X3BzaXplX2RlZnNbTU1VX1BBR0VfMk1dLnNoaWZ0ID09IFBNRF9TSElGVClcbitcdC8qIEZvciByYWRpeCAxRyBhdCBQVUQgbGV2ZWwgbWVhbnMgcHVkIGh1Z2VwYWdlIHN1cHBvcnQgKi9cbitcdGlmIChtbXVfcHNpemVfZGVmc1tNTVVfUEFHRV8xR10uc2hpZnQgPT0gUFVEX1NISUZUKVxuIFx0XHRyZXR1cm4gMTtcbiBcdHJldHVybiAwO1xuIH1cbisjZW5kaWZcbiBcbi1zdGF0aWMgaW5saW5lIGludCByYWRpeF9faGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZSh2b2lkKVxuK3N0YXRpYyBpbmxpbmUgaW50IHJhZGl4X19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4ge1xuLVx0LyogRm9yIHJhZGl4IDFHIGF0IFBVRCBsZXZlbCBtZWFucyBwdWQgaHVnZXBhZ2Ugc3VwcG9ydCAqL1xuLVx0aWYgKG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzFHXS5zaGlmdCA9PSBQVURfU0hJRlQpXG4rXHQvKiBGb3IgcmFkaXggMk0gYXQgUE1EIGxldmVsIG1lYW5zIHRocCAqL1xuK1x0aWYgKG1tdV9wc2l6ZV9kZWZzW01NVV9QQUdFXzJNXS5zaGlmdCA9PSBQTURfU0hJRlQpXG4gXHRcdHJldHVybiAxO1xuIFx0cmV0dXJuIDA7XG4gfVxuLSNlbmRpZlxuIFxuIHN0cnVjdCB2bWVtX2FsdG1hcDtcbiBzdHJ1Y3QgZGV2X3BhZ2VtYXA7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jIGIvYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L2hhc2hfcGd0YWJsZS5jXG5pbmRleCBkOWI1Yjc1MWQ3Yjc1Yi4uYTY3YmMxNzIzNDA0YzIgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvaGFzaF9wZ3RhYmxlLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9oYXNoX3BndGFibGUuY1xuQEAgLTM5MSw3ICszOTEsOSBAQCBwbWRfdCBoYXNoX19wbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdHJldHVybiBvbGRfcG1kO1xuIH1cbiBcbi1pbnQgaGFzaF9faGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4rI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuK1xuK2ludCBoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4ge1xuIFxuIFx0aWYgKCFtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl8xNk1fUEFHRSkpXG5AQCAtNDIwLDkgKzQyMiw3IEBAIGludCBoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2Uodm9pZClcbiBcbiBcdHJldHVybiAxO1xuIH1cbi1FWFBPUlRfU1lNQk9MX0dQTChoYXNoX19oYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UpO1xuLVxuLSNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbitFWFBPUlRfU1lNQk9MX0dQTChoYXNoX19hcmNoX2hhc19wbWRfbGVhdmVzKTtcbiBcbiAjaWZkZWYgQ09ORklHX1NUUklDVF9LRVJORUxfUldYXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IGU4ODI2NjNhNThlNzc2Li4yNGVlOTBjN2U5YmY2YiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0xODI1LDEzICsxODI1LDEzIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBtZF90cmFuc19odWdlKHBtZF90IHBtZClcbiB7XG4gXHRyZXR1cm4gcG1kX2xlYWYocG1kKTtcbiB9XG4rI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuLSNkZWZpbmUgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlIGhhc190cmFuc3BhcmVudF9odWdlcGFnZVxuLXN0YXRpYyBpbmxpbmUgaW50IGhhc190cmFuc3BhcmVudF9odWdlcGFnZSh2b2lkKVxuKyNkZWZpbmUgYXJjaF9oYXNfcG1kX2xlYXZlcyBhcmNoX2hhc19wbWRfbGVhdmVzXG4rc3RhdGljIGlubGluZSBpbnQgYXJjaF9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuIHtcbiBcdHJldHVybiBjcHVfaGFzX2VkYXQxKCkgPyAxIDogMDtcbiB9XG4tI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuICNpZmRlZiBDT05GSUdfUEFHRV9UQUJMRV9DSEVDS1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggOGUwMDE4ZmFkZDE0ZTYuLjNjNmE2NDFlNmMyMTFkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0zMDYsMTIgKzMwNiw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF90cmFuc19odWdlKHB1ZF90IHB1ZClcbiB9XG4gI2VuZGlmXG4gXG4tI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXG4tc3RhdGljIGlubGluZSBpbnQgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKHZvaWQpXG4te1xuLVx0cmV0dXJuIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QU0UpO1xuLX1cbi1cbiAjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfc3BlY2lhbChwbWRfdCBwbWQpXG4ge1xuQEAgLTMzNyw2ICszMzEsMTIgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtzcGVjaWFsKHB1ZF90IHB1ZClcbiAjZW5kaWZcdC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVAgKi9cbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4gXG4rI2RlZmluZSBhcmNoX2hhc19wbWRfbGVhdmVzIGFyY2hfaGFzX3BtZF9sZWF2ZXNcbitzdGF0aWMgaW5saW5lIGludCBhcmNoX2hhc19wbWRfbGVhdmVzKHZvaWQpXG4re1xuK1x0cmV0dXJuIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QU0UpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zZXRfZmxhZ3MocHRlX3QgcHRlLCBwdGV2YWxfdCBzZXQpXG4ge1xuIFx0cHRldmFsX3QgdiA9IG5hdGl2ZV9wdGVfdmFsKHB0ZSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaCBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcbmluZGV4IDgxZTRhZjQ5ZTM5YzEwLi4zNTc0NGZmNjU5MmFjOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcbisrKyBiL2RyaXZlcnMvZGF4L2RheC1wcml2YXRlLmhcbkBAIC0xMjMsNyArMTIzLDcgQEAgc3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxuIHtcbiBcdGlmIChhbGlnbiA9PSBQVURfU0laRSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCkpXG4gXHRcdHJldHVybiB0cnVlO1xuLVx0aWYgKGFsaWduID09IFBNRF9TSVpFIFx1MDAyNlx1MDAyNiBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbitcdGlmIChhbGlnbiA9PSBQTURfU0laRSBcdTAwMjZcdTAwMjYgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcdGlmIChhbGlnbiA9PSBQQUdFX1NJWkUpXG4gXHRcdHJldHVybiB0cnVlO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMgYi9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jXG5pbmRleCA4ZmE5YzE2YWJhN2VhMC4uNDU3ZWI1NGU3YWI2ZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jXG4rKysgYi9kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jXG5AQCAtOTQsNyArOTQsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyAqbmRfcGZuX3N1cHBvcnRlZF9hbGlnbm1lbnRzKHVuc2lnbmVkIGxvbmcgKmFsaWdubWVudHMpXG4gXG4gXHRhbGlnbm1lbnRzWzBdID0gUEFHRV9TSVpFO1xuIFxuLVx0aWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKSB7XG4rXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkge1xuIFx0XHRhbGlnbm1lbnRzWzFdID0gSFBBR0VfUE1EX1NJWkU7XG4gXHRcdGlmIChoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkpXG4gXHRcdFx0YWxpZ25tZW50c1syXSA9IEhQQUdFX1BVRF9TSVpFO1xuQEAgLTEwOSw3ICsxMTAsOCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyAqbmRfcGZuX3N1cHBvcnRlZF9hbGlnbm1lbnRzKHVuc2lnbmVkIGxvbmcgKmFsaWdubWVudHMpXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbmRfcGZuX2RlZmF1bHRfYWxpZ25tZW50KHZvaWQpXG4ge1xuIFxuLVx0aWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdHJldHVybiBIUEFHRV9QTURfU0laRTtcbiBcdHJldHVybiBQQUdFX1NJWkU7XG4gfVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbmluZGV4IGM3NDVmN2FkMjI5ODdmLi41MjVhY2VhMmViNTljYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuQEAgLTQ3LDcgKzQ3LDYgQEAgdm1fZmF1bHRfdCB2bWZfaW5zZXJ0X2ZvbGlvX3B1ZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdGJvb2wgd3JpdGUpO1xuIFxuIGVudW0gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZyB7XG4tXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRCxcbiBcdFRSQU5TUEFSRU5UX0hVR0VQQUdFX0ZMQUcsXG4gXHRUUkFOU1BBUkVOVF9IVUdFUEFHRV9SRVFfTUFEVl9GTEFHLFxuIFx0VFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0RJUkVDVF9GTEFHLFxuQEAgLTM4MywxMiArMzgyLDYgQEAgc3RhdGljIGlubGluZSBib29sIHZtYV90aHBfZGlzYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gbW1fZmxhZ3NfdGVzdChNTUZfRElTQUJMRV9USFBfRVhDRVBUX0FEVklTRUQsIHZtYS1cdTAwM2V2bV9tbSk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfZGlzYWJsZWRfYnlfaHcodm9pZClcbi17XG4tXHQvKiBJZiB0aGUgaGFyZHdhcmUvZmlybXdhcmUgbWFya2VkIGh1Z2VwYWdlIHN1cHBvcnQgZGlzYWJsZWQuICovXG4tXHRyZXR1cm4gdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgXHUwMDI2ICgxIFx1MDAzY1x1MDAzYyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRCk7XG4tfVxuLVxuIHVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzKTtcbiB1bnNpZ25lZCBsb25nIHRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbmluZGV4IDhjMDkzYzExOWU1YTgyLi5kNTcxZDE2MWE4NGIzYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbV90eXBlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvanVtcF9sYWJlbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX3RhYmxlX2NoZWNrLmhcdTAwM2VcbiBcbkBAIC0yMzEzLDYgKzIzMTQsMjEgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwZ3RhYmxlX2xldmVsX3RvX3N0cihlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXG4gXHR9XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfTU1VXG4rREVDTEFSRV9TVEFUSUNfS0VZX1RSVUUoX19hcmNoX2hhc19wbWRfbGVhdmVzX2tleSk7XG4rc3RhdGljIGlubGluZSBib29sIHBndGFibGVfaGFzX3BtZF9sZWF2ZXModm9pZClcbit7XG4rXHRyZXR1cm4gc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2X19hcmNoX2hhc19wbWRfbGVhdmVzX2tleSk7XG4rfVxuK3ZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZCk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KHZvaWQpIHsgfVxuKyNlbmRpZlxuK1xuICNlbmRpZiAvKiAhX19BU1NFTUJMRVJfXyAqL1xuIFxuICNpZiAhZGVmaW5lZChNQVhfUE9TU0lCTEVfUEhZU01FTV9CSVRTKSBcdTAwMjZcdTAwMjYgIWRlZmluZWQoQ09ORklHXzY0QklUKVxuQEAgLTIzMjgsOCArMjM0NCw4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqcGd0YWJsZV9sZXZlbF90b19zdHIoZW51bSBwZ3RhYmxlX2xldmVsIGxldmVsKVxuICNlbmRpZlxuICNlbmRpZlxuIFxuLSNpZm5kZWYgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlXG4tI2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBJU19CVUlMVElOKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbisjaWZuZGVmIGFyY2hfaGFzX3BtZF9sZWF2ZXNcbisjZGVmaW5lIGFyY2hfaGFzX3BtZF9sZWF2ZXMoKSBJU19CVUlMVElOKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXG4gI2VuZGlmXG4gXG4gI2lmbmRlZiBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlXG5kaWZmIC0tZ2l0IGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jIGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jXG5pbmRleCAyODc1ZmQyMmQ3YmIwMi4uMjUwMzhiNzRjN2JjNjcgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcbisrKyBiL21tL2RlYnVnX3ZtX3BndGFibGUuY1xuQEAgLTE3Nyw3ICsxNzcsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2Jhc2ljX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MsIGludCBpZHgpXG4gXHR1bnNpZ25lZCBsb25nIHZhbCA9IGlkeCwgKnB0ciA9IFx1MDAyNnZhbDtcbiBcdHBtZF90IHBtZDtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4rXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cHJfZGVidWcoXCJWYWxpZGF0aW5nIFBNRCBiYXNpYyAoJXBHdilcXG5cIiwgcHRyKTtcbkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9hZHZhbmNlZF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0cG1kX3QgcG1kO1xuIFx0dW5zaWduZWQgbG9uZyB2YWRkciA9IGFyZ3MtXHUwMDNldmFkZHI7XG4gXG4tXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuK1x0aWYgKCFwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHBhZ2UgPSAoYXJncy1cdTAwM2VwbWRfcGZuICE9IFVMT05HX01BWCkgPyBwZm5fdG9fcGFnZShhcmdzLVx1MDAzZXBtZF9wZm4pIDogTlVMTDtcbkBAIC0yODMsNyArMjgzLDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4ge1xuIFx0cG1kX3QgcG1kO1xuIFxuLVx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcIlZhbGlkYXRpbmcgUE1EIGxlYWZcXG5cIik7XG5AQCAtNjg4LDcgKzY4OCw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfcHJvdG5vbmVfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdGlmICghSVNfRU5BQkxFRChDT05GSUdfQVJDSF9IQVNfUFRFX1BST1ROT05FKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcIlZhbGlkYXRpbmcgUE1EIHByb3Rub25lXFxuXCIpO1xuQEAgLTczNyw3ICs3MzcsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdGlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4rXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cHJfZGVidWcoXCJWYWxpZGF0aW5nIFBNRCBzb2Z0IGRpcnR5XFxuXCIpO1xuQEAgLTc1NCw3ICs3NTQsNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX2xlYWZfc29mdF9kaXJ0eV90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0ICAgICFJU19FTkFCTEVEKENPTkZJR19BUkNIX0hBU19QTURfU09GVExFQVZFUykpXG4gXHRcdHJldHVybjtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4rXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0cHJfZGVidWcoXCJWYWxpZGF0aW5nIFBNRCBzd2FwIHNvZnQgZGlydHlcXG5cIik7XG5AQCAtODI1LDcgKzgyNSw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdHN3cF9lbnRyeV90IGFyY2hfZW50cnk7XG4gXHRwbWRfdCBwbWQxLCBwbWQyO1xuIFxuLVx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcIlZhbGlkYXRpbmcgUE1EIHN3YXBcXG5cIik7XG5AQCAtOTA2LDcgKzkwNiw3IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfdGhwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4ge1xuIFx0cG1kX3QgcG1kO1xuIFxuLVx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcIlZhbGlkYXRpbmcgUE1EIGJhc2VkIFRIUFxcblwiKTtcbkBAIC05OTcsNyArOTk3LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IGRlc3Ryb3lfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSBcdTAwMjZcdTAwMjZcbitcdCAgICBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKCkgXHUwMDI2XHUwMDI2XG4gXHQgICAgYXJncy1cdTAwM2VwbWRfcGZuICE9IFVMT05HX01BWCkge1xuIFx0XHRkZWJ1Z192bV9wZ3RhYmxlX2ZyZWVfaHVnZV9wYWdlKGFyZ3MsIGFyZ3MtXHUwMDNlcG1kX3BmbiwgSFBBR0VfUE1EX09SREVSKTtcbiBcdFx0YXJncy1cdTAwM2VwbWRfcGZuID0gVUxPTkdfTUFYO1xuQEAgLTEyNDksNyArMTI0OSw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfYXJncyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSkge1xuK1x0ICAgIHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSkge1xuIFx0XHRwYWdlID0gZGVidWdfdm1fcGd0YWJsZV9hbGxvY19odWdlX3BhZ2UoYXJncywgSFBBR0VfUE1EX09SREVSKTtcbiBcdFx0aWYgKHBhZ2UpIHtcbiBcdFx0XHRhcmdzLVx1MDAzZXBtZF9wZm4gPSBwYWdlX3RvX3BmbihwYWdlKTtcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggMDRlOGE2YjU1MzQzNWYuLjM4NWEzMDVlN2FmNjUxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTEyOSw2ICsxMjksMTUgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGVsc2VcbiBcdFx0c3VwcG9ydGVkX29yZGVycyA9IFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVDtcbiBcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBQTUQgbGVhdmVzLCBhc3N1bWUgZm9yXG4rXHRcdCAqIG5vdyB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQgUFVEIGxlYXZlcyBhbmQgZGlzYWJsZVxuK1x0XHQgKiBib3RoIGZvbGlvIG9yZGVycy5cbitcdFx0ICovXG4rXHRcdHN1cHBvcnRlZF9vcmRlcnMgXHUwMDI2PSB+KEJJVChQTURfT1JERVIpIHwgQklUKFBVRF9PUkRFUikpO1xuK1x0fVxuK1xuIFx0b3JkZXJzIFx1MDAyNj0gc3VwcG9ydGVkX29yZGVycztcbiBcdGlmICghb3JkZXJzKVxuIFx0XHRyZXR1cm4gMDtcbkBAIC0xMzYsNyArMTQ1LDcgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmICghdm1hLVx1MDAzZXZtX21tKVx0XHQvKiB2ZHNvICovXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHRocF9kaXNhYmxlZF9ieV9odygpIHx8IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bV9mbGFncywgZm9yY2VkX2NvbGxhcHNlKSlcbitcdGlmICh2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIGZvcmNlZF9jb2xsYXBzZSkpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0Lyoga2h1Z2VwYWdlZCBkb2Vzbid0IGNvbGxhcHNlIERBWCB2bWEsIGJ1dCBwYWdlIGZhdWx0IGlzIGZpbmUuICovXG5AQCAtODc0LDcgKzg4Myw3IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxuIFx0ICogZGlzYWJsZSBhbGwgb3RoZXIgc2l6ZXMuIHBvd2VycGMncyBQTURfT1JERVIgaXNuJ3QgYSBjb21waWxlLXRpbWVcbiBcdCAqIGNvbnN0YW50IHNvIHdlIGhhdmUgdG8gZG8gdGhpcyBoZXJlLlxuIFx0ICovXG4tXHRpZiAoIWFub25fb3JkZXJzX2NvbmZpZ3VyZWQpXG4rXHRpZiAoIWFub25fb3JkZXJzX2NvbmZpZ3VyZWQgXHUwMDI2XHUwMDI2IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0aHVnZV9hbm9uX29yZGVyc19pbmhlcml0ID0gQklUKFBNRF9PUkRFUik7XG4gXG4gXHQqaHVnZXBhZ2Vfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoXCJ0cmFuc3BhcmVudF9odWdlcGFnZVwiLCBtbV9rb2JqKTtcbkBAIC04OTYsNiArOTA1LDE1IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXRfc3lzZnMoc3RydWN0IGtvYmplY3QgKipodWdlcGFnZV9rb2JqKVxuIFx0fVxuIFxuIFx0b3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTiB8IFRIUF9PUkRFUlNfQUxMX0ZJTEVfREVGQVVMVDtcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBQTUQgbGVhdmVzLCBhc3N1bWUgZm9yXG4rXHRcdCAqIG5vdyB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQgUFVEIGxlYXZlcyBhbmQgZGlzYWJsZVxuK1x0XHQgKiBib3RoIGZvbGlvIG9yZGVycy5cbitcdFx0ICovXG4rXHRcdG9yZGVycyBcdTAwMjY9IH4oQklUKFBNRF9PUkRFUikgfCBCSVQoUFVEX09SREVSKSk7XG4rXHR9XG4rXG4gXHRvcmRlciA9IGhpZ2hlc3Rfb3JkZXIob3JkZXJzKTtcbiBcdHdoaWxlIChvcmRlcnMpIHtcbiBcdFx0dGhwc2l6ZSA9IHRocHNpemVfY3JlYXRlKG9yZGVyLCAqaHVnZXBhZ2Vfa29iaik7XG5AQCAtMTAxMCwxMSArMTAyOCw2IEBAIHN0YXRpYyBpbnQgX19pbml0IGh1Z2VwYWdlX2luaXQodm9pZClcbiBcdGludCBlcnI7XG4gXHRzdHJ1Y3Qga29iamVjdCAqaHVnZXBhZ2Vfa29iajtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpIHtcbi1cdFx0dHJhbnNwYXJlbnRfaHVnZXBhZ2VfZmxhZ3MgPSAxIFx1MDAzY1x1MDAzYyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9VTlNVUFBPUlRFRDtcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHR9XG4tXG4gXHQvKlxuIFx0ICogaHVnZXBhZ2VzIGNhbid0IGJlIGFsbG9jYXRlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yXG4gXHQgKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCA1NmIyNDQ1NTJmMTM5NC4uZjM5ZDkzODM0OTRlNjkgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC0xNjQsNiArMTY0LDE1IEBAIF9fc2V0dXAoXCJub3JhbmRtYXBzXCIsIGRpc2FibGVfcmFuZG1hcHMpO1xuIFxuIHVuc2lnbmVkIGxvbmcgaGlnaGVzdF9tZW1tYXBfcGZuIF9fcmVhZF9tb3N0bHk7XG4gXG4rREVGSU5FX1NUQVRJQ19LRVlfVFJVRShfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5KTtcbitFWFBPUlRfU1lNQk9MKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xuK1xuK3ZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZClcbit7XG4rXHRpZiAoIWFyY2hfaGFzX3BtZF9sZWF2ZXMoKSlcbitcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNl9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xuK31cbitcbiB2b2lkIG1tX3RyYWNlX3Jzc19zdGF0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgbWVtYmVyKVxuIHtcbiBcdHRyYWNlX3Jzc19zdGF0KG1tLCBtZW1iZXIpO1xuQEAgLTU1NjcsNyArNTU3Niw3IEBAIHZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhXG4gXHQgKiBQTUQgbWFwcGluZ3MgaWYgVEhQcyBhcmUgZGlzYWJsZWQuIEFzIHdlIGFscmVhZHkgaGF2ZSBhIFRIUCxcbiBcdCAqIGJlaGF2ZSBhcyBpZiB3ZSBhcmUgZm9yY2luZyBhIGNvbGxhcHNlLlxuIFx0ICovXG4tXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtYS1cdTAwM2V2bV9mbGFncyxcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpIHx8IHZtYV90aHBfZGlzYWJsZWQodm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsXG4gXHRcdFx0XHRcdFx0ICAgICAvKiBmb3JjZWRfY29sbGFwc2U9Ki8gdHJ1ZSkpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCA3MTFmODIxZjdiM2M3Mi4uZGNjMDcyZGI0NTU4NzIgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTI2OTksNiArMjY5OSw3IEBAIHZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxuIHtcbiBcdGFyY2hfbW1fcHJlaW5pdCgpO1xuIFx0aW5pdF96ZXJvX3BhZ2VfcGZuKCk7XG4rXHRwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0KCk7XG4gXG4gXHQvKiBJbml0aWFsaXphdGlvbnMgcmVseWluZyBvbiBTTVAgc2V0dXAgKi9cbiBcdEJVSUxEX0JVR19PTihNQVhfWk9ORUxJU1RTIFx1MDAzZSAyKTtcbmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uY1xuaW5kZXggNTA3MTE3NzA1OWE5NjQuLjAwOGRmNTU4YWYyMzdlIDEwMDY0NFxuLS0tIGEvbW0vc2htZW0uY1xuKysrIGIvbW0vc2htZW0uY1xuQEAgLTY4OSw3ICs2ODksNyBAQCBzdGF0aWMgaW50IHNobWVtX3BhcnNlX2h1Z2UoY29uc3QgY2hhciAqc3RyKVxuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBodWdlICE9IFNITUVNX0hVR0VfTkVWRVIgXHUwMDI2XHUwMDI2IGh1Z2UgIT0gU0hNRU1fSFVHRV9ERU5ZKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbkBAIC0xMjg3LDYgKzEyODcsNyBAQCBzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IHBhdGgtXHUwMDNlZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4gXHRzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbyA9IFNITUVNX0koaW5vZGUpO1xuK1x0dW5zaWduZWQgaW50IG9yZGVycztcbiBcbiBcdC8qIEZhc3QtcGF0aCBoaW50OyByZWNhbGMgdW5kZXIgaW5mby1cdTAwM2Vsb2NrIGNvcnJlY3RzIGFueSBzdGFsZSByZWFkLiAqL1xuIFx0aWYgKGRhdGFfcmFjZShpbmZvLVx1MDAzZWFsbG9jZWQgLSBpbmZvLVx1MDAzZXN3YXBwZWQgIT0gaW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZW5ycGFnZXMpKVxuQEAgLTEzMDMsOCArMTMwNCwxMSBAQCBzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0U1RBVFhfQVRUUl9OT0RVTVApO1xuIFx0Z2VuZXJpY19maWxsYXR0cihpZG1hcCwgcmVxdWVzdF9tYXNrLCBpbm9kZSwgc3RhdCk7XG4gXG4tXHRpZiAoc2htZW1faHVnZV9nbG9iYWxfZW5hYmxlZChpbm9kZSwgMCwgMCwgZmFsc2UsIE5VTEwsIDApKVxuLVx0XHRzdGF0LVx1MDAzZWJsa3NpemUgPSBIUEFHRV9QTURfU0laRTtcbitcdG9yZGVycyA9IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoaW5vZGUsIDAsIDAsIGZhbHNlLCBOVUxMLCAwKTtcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuK1x0XHRvcmRlcnMgXHUwMDI2PSB+QklUKFBNRF9PUkRFUik7XG4rXHRpZiAob3JkZXJzKVxuK1x0XHRzdGF0LVx1MDAzZWJsa3NpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIGhpZ2hlc3Rfb3JkZXIob3JkZXJzKTtcbiBcbiBcdGlmIChyZXF1ZXN0X21hc2sgXHUwMDI2IFNUQVRYX0JUSU1FKSB7XG4gXHRcdHN0YXQtXHUwMDNlcmVzdWx0X21hc2sgfD0gU1RBVFhfQlRJTUU7XG5AQCAtMTgyNiwxNiArMTgzMCwxOSBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0dW5zaWduZWQgbG9uZyBtYXNrID0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2Fsd2F5cyk7XG4gXHR1bnNpZ25lZCBsb25nIHdpdGhpbl9zaXplX29yZGVycyA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc193aXRoaW5fc2l6ZSk7XG4gXHR2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hID8gdm1hLVx1MDAzZXZtX2ZsYWdzIDogMDtcbi1cdHVuc2lnbmVkIGludCBnbG9iYWxfb3JkZXJzO1xuK1x0dW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnMsIGRpc2FibGVkX29yZGVycyA9IDA7XG4gXG4tXHRpZiAodGhwX2Rpc2FibGVkX2J5X2h3KCkgfHwgKHZtYSBcdTAwMjZcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSkpXG4rXHRpZiAodm1hIFx1MDAyNlx1MDAyNiB2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIHNobWVtX2h1Z2VfZm9yY2UpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKVxuK1x0XHRkaXNhYmxlZF9vcmRlcnMgPSBCSVQoUE1EX09SREVSKTtcbitcbiBcdGdsb2JhbF9vcmRlcnMgPSBzaG1lbV9odWdlX2dsb2JhbF9lbmFibGVkKGlub2RlLCBpbmRleCwgd3JpdGVfZW5kLFxuIFx0XHRcdFx0XHRcdCAgc2htZW1faHVnZV9mb3JjZSwgdm1hLCB2bV9mbGFncyk7XG4gXHQvKiBUbXBmcyBodWdlIHBhZ2VzIGFsbG9jYXRpb24gKi9cbiBcdGlmICghdm1hIHx8ICF2bWFfaXNfYW5vbl9zaG1lbSh2bWEpKVxuLVx0XHRyZXR1cm4gZ2xvYmFsX29yZGVycztcbitcdFx0cmV0dXJuIGdsb2JhbF9vcmRlcnMgXHUwMDI2IH5kaXNhYmxlZF9vcmRlcnM7XG4gXG4gXHQvKlxuIFx0ICogRm9sbG93aW5nIHRoZSAnZGVueScgc2VtYW50aWNzIG9mIHRoZSB0b3AgbGV2ZWwsIGZvcmNlIHRoZSBodWdlXG5AQCAtMTg0OSw3ICsxODU2LDcgQEAgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCAqIG1lYW5zIG5vbi1QTUQgc2l6ZWQgVEhQIGNhbiBub3Qgb3ZlcnJpZGUgJ2h1Z2UnIG1vdW50IG9wdGlvbiBub3cuXG4gXHQgKi9cbiBcdGlmIChzaG1lbV9odWdlID09IFNITUVNX0hVR0VfRk9SQ0UpXG4tXHRcdHJldHVybiBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfaW5oZXJpdCk7XG4rXHRcdHJldHVybiBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfaW5oZXJpdCkgXHUwMDI2IH5kaXNhYmxlZF9vcmRlcnM7XG4gXG4gXHQvKiBBbGxvdyBtVEhQIHRoYXQgd2lsbCBiZSBmdWxseSB3aXRoaW4gaV9zaXplLiAqL1xuIFx0bWFzayB8PSBzaG1lbV9nZXRfb3JkZXJzX3dpdGhpbl9zaXplKGlub2RlLCB3aXRoaW5fc2l6ZV9vcmRlcnMsIGluZGV4LCAwKTtcbkBAIC0xODYwLDYgKzE4NjcsNyBAQCB1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0aWYgKGdsb2JhbF9vcmRlcnMgXHUwMDNlIDApXG4gXHRcdG1hc2sgfD0gUkVBRF9PTkNFKGh1Z2Vfc2htZW1fb3JkZXJzX2luaGVyaXQpO1xuIFxuK1x0bWFzayBcdTAwMjY9IH5kaXNhYmxlZF9vcmRlcnM7XG4gXHRyZXR1cm4gVEhQX09SREVSU19BTExfRklMRV9ERUZBVUxUIFx1MDAyNiBtYXNrO1xuIH1cbiBcbkBAIC00NTg3LDggKzQ1OTUsNyBAQCBzdGF0aWMgaW50IHNobWVtX3BhcnNlX29uZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuIFx0Y2FzZSBPcHRfaHVnZTpcbiBcdFx0Y3R4LVx1MDAzZWh1Z2UgPSByZXN1bHQudWludF8zMjtcbiBcdFx0aWYgKGN0eC1cdTAwM2VodWdlICE9IFNITUVNX0hVR0VfTkVWRVIgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhKElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICAgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpKVxuK1x0XHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSlcbiBcdFx0XHRnb3RvIHVuc3VwcG9ydGVkX3BhcmFtZXRlcjtcbiBcdFx0Y3R4LVx1MDAzZXNlZW4gfD0gU0hNRU1fU0VFTl9IVUdFO1xuIFx0XHRicmVhaztcbkBAIC01MzgzLDcgKzUzOTAsNyBAQCB2b2lkIF9faW5pdCBzaG1lbV9pbml0KHZvaWQpXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuLVx0aWYgKGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpIFx1MDAyNlx1MDAyNiBzaG1lbV9odWdlIFx1MDAzZSBTSE1FTV9IVUdFX0RFTlkpXG4rXHRpZiAoc2htZW1faHVnZSBcdTAwM2UgU0hNRU1fSFVHRV9ERU5ZKVxuIFx0XHRTSE1FTV9TQihzaG1fbW50LVx1MDAzZW1udF9zYiktXHUwMDNlaHVnZSA9IHNobWVtX2h1Z2U7XG4gXHRlbHNlXG4gXHRcdHNobWVtX2h1Z2UgPSBTSE1FTV9IVUdFX05FVkVSOyAvKiBqdXN0IGluIGNhc2UgaXQgd2FzIHBhdGNoZWQgKi9cbkBAIC01MzkyLDcgKzUzOTksNyBAQCB2b2lkIF9faW5pdCBzaG1lbV9pbml0KHZvaWQpXG4gXHQgKiBEZWZhdWx0IHRvIHNldHRpbmcgUE1ELXNpemVkIFRIUCB0byBpbmhlcml0IHRoZSBnbG9iYWwgc2V0dGluZyBhbmRcbiBcdCAqIGRpc2FibGUgYWxsIG90aGVyIG11bHRpLXNpemUgVEhQcy5cbiBcdCAqL1xuLVx0aWYgKCFzaG1lbV9vcmRlcnNfY29uZmlndXJlZClcbitcdGlmICghc2htZW1fb3JkZXJzX2NvbmZpZ3VyZWQgXHUwMDI2XHUwMDI2IHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcbiBcdFx0aHVnZV9zaG1lbV9vcmRlcnNfaW5oZXJpdCA9IEJJVChIUEFHRV9QTURfT1JERVIpO1xuICNlbmRpZlxuIFx0cmV0dXJuO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MTUuMDMyNzA5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg5Nzk3MDExMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBUSFAgU3VwcG9ydCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IHdlIGhhbmRsZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIHN1cHBvcnQuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyByZW5hbWluZyBgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKClgIHRvIGVpdGhlciBgYXJjaF9oYXNfcG1kX2xlYXZlcygpYCBvciBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYC4gVGhpcyBpc24ndCBqdXN0IGEgbmFtZSBjaGFuZ2U7IGl0J3MgYWxzbyBpbXBhY3RpbmcgaG93IHdlIGRpc2FibGUgVEhQIHdoZW4gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0IGl0LCBpbnRyb2R1Y2luZyBhIHN0YXRpYyBrZXkgY2FsbGVkIGBfX2FyY2hfaGFzX3BtZF9sZWF2ZXNfa2V5YC5cblxuVGhpcyByaXBwbGVzIHRocm91Z2ggcXVpdGUgYSBmZXcgY3JpdGljYWwgYXJlYXM6IGBzaG1lbS5jYCwgYGh1Z2VfbWVtb3J5LmNgLCBgbWVtb3J5LmNgLCBgbW1faW5pdC5jYCwgYGRlYnVnX3ZtX3BndGFibGUuY2AsIGBwZm5fZGV2cy5jYCwgYGRheC1wcml2YXRlLmhgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGZvciBtaXBzLCBwb3dlcnBjLCBzMzkwLCBhbmQgeDg2LiBUaGUgZmFjdCB0aGF0IGl0IHRvdWNoZXMgYHNobWVtYCwgYGRheGAsIGFuZCBgbnZkaW1tYCBpcyBhIGJpZyBkZWFsOyB0aG9zZSBhcmUgYWxsIGludGltYXRlbHkgbGlua2VkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBwZXJmb3JtYW5jZS5cblxuU28sIHRoZSBrZXkgdGhpbmcgaGVyZSBpcyB0aGF0IGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgIGlzIG5vdyB0aGUgZ2F0ZWtlZXBlciBmb3IgVEhQIHN1cHBvcnQsIGFuZCBpdCdzIGJlaW5nIHVzZWQgdG8gZmlsdGVyIGNlcnRhaW4gb3JkZXIgc2l6ZXMsIGFzIHNlZW4gaW4gbW9kaWZpY2F0aW9ucyB0byBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBhbmQgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gRXNzZW50aWFsbHksIGlmIGAhcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYCwgY2VydGFpbiBtZW1vcnkgb3JkZXIgc2l6ZXMgYXJlIGV4Y2x1ZGVkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGl0J3MgY2xlYXIgdGhpcyBpcyBhIHN0YXRpYyBrZXkgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIGhvdyB3ZeKAmXJlIGRlY2lkaW5nIGF0IHJ1bnRpbWUgd2hldGhlciB0byBlbmFibGUgaXQuIEkgc2VlIHRoZSBgREVDTEFSRV9TVEFUSUNfS0VZX1RSVUVgIGFuZCB0aGUgbG9naWMgdGhhdCBzZWVtcyB0byBkaXNhYmxlIHRoZSBrZXkgaWYgdGhlIGFyY2hpdGVjdHVyZSBkb2Vzbid0IGhhdmUgUE1EIGxlYXZlcyBpbiBgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCgpYC4gVGhpcyBsb29rcyBmdW5jdGlvbmFsIGFuZCB0aGUgY29kZSBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpbiBRRU1VL0dDRSwgc28gSSBjYW4gdGVzdCBpdC5cblxuQWxyaWdodCwgdGltZSB0byBwcmlvcml0aXplIHNvbWUgZnV6emluZyB0YXJnZXRzLiBCYXNlZCBvbiB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSwgZnVuY3Rpb25zIGxpa2UgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBzaG1lbV9nZXRhdHRyYCwgYHNobWVtX3BhcnNlX29uZWAsIGBzaG1lbV9wYXJzZV9odWdlYCwgYW5kIGBkb19zZXRfcG1kYCBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwuIE5vdywgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaXMgZGVmaW5pdGVseSByZWFjaGFibGU7IEkga25vdyBpdCdzIGludm9rZWQgZHVyaW5nIHNobWVtIHBhZ2UgZmF1bHRzIGFuZCBhbGxvY2F0aW9uLiBBbmQgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBpcyB1c2VkIGR1cmluZyBUSFAgYWxsb2NhdGlvbi4gTGV0J3Mgc2VlIGhvdyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGRlZmluZWQuIEdvb2QuIE5vdywgbGV04oCZcyBkaWcgYSBiaXQgZGVlcGVyIGFuZCB1c2UgYGRlZmF1bHRfYXBpOmdyZXBwZXJgIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgdXNlZCBhbmQgd2hlcmUgaXTigJlzIGRlZmluZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjM5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MjQuMDEyNDEyMjQ4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODEwMjI1ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5Ny1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTg6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTktXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMTk9dW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDEtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzQyOlxcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0My19XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEwNz1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMTMtXFxubW0vaHVnZV9tZW1vcnkuYzoxMTQ6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTExNS1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MjYuMDkzNDM5NDQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2NzY1NTc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCB2YXJpYWJsZS4gSXQncyBhIGNyaXRpY2FsIGtub2Igd2hlbiB0dW5pbmcgc2hhcmVkIG1lbW9yeSBiZWhhdmlvciwgZXNwZWNpYWxseSBvbiBzeXN0ZW1zIHdpdGggTlVNQSBhcmNoaXRlY3R1cmVzIG9yIHRob3NlIG5lZWRpbmcgdG8gc3F1ZWV6ZSBldmVyeSBsYXN0IGJpdCBvZiBwZXJmb3JtYW5jZSBvdXQgb2YgbGFyZ2UgbWVtb3J5IGFsbG9jYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZW5zdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCBpdHMgY3VycmVudCBzZXR0aW5nLiBJIG5lZWQgdG8gZXN0YWJsaXNoIHdoYXQncyBwZXJtaXNzaWJsZSwgZ2l2ZW4gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgYW5kIHRoZSBpbnRlbmRlZCBhcHBsaWNhdGlvbiBwcm9maWxlLlxuXG5JJ20gdGhpbmtpbmcsIFwiSXMgdGhpcyBjb25maWd1cmVkIGFwcHJvcHJpYXRlbHkgZm9yIHRoZSB3b3JrbG9hZD9cIiBBcmUgd2UgdW5kZXItdXRpbGl6aW5nIHBvdGVudGlhbCBodWdlIHBhZ2UgYWxsb2NhdGlvbnMsIG9yIHBlcmhhcHMgYmVpbmcgb3Zlcmx5IGFnZ3Jlc3NpdmUgYW5kIHJpc2tpbmcgZnJhZ21lbnRhdGlvbiBvciBvdGhlciBhZHZlcnNlIHNpZGUgZWZmZWN0cz8gRGVwZW5kaW5nIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIG1heWJlIEkgbmVlZCB0byBjaGVjayB0aGUgT1Mga2VybmVsIHBhcmFtZXRlcnMsIGFuZCB0aGUgYXBwbGljYXRpb24ncyBtZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucywgdG8gbWFrZSBhIGRlY2lzaW9uIGFib3V0IG15IG5leHQgc3RlcHMuXG5cbkkgc2hvdWxkIGFsc28gY29uc2lkZXIgd2hldGhlciB0aGUgY3VycmVudCBzZXR0aW5ncyBhcmUgbGVhZGluZyB0byBhbnkgdW5leHBlY3RlZCBiZWhhdmlvci4gQXJlIHdlIHNlZWluZyBzaWduaWZpY2FudCBwYWdlIGZhdWx0cywgaW5jcmVhc2VkIG1lbW9yeSBsYXRlbmNpZXMsIG9yIGFueSBvdGhlciBzaWducyB0aGF0IHRoZSBtZW1vcnkgc3Vic3lzdGVtIGlzbid0IHBlcmZvcm1pbmcgb3B0aW1hbGx5PyBCYXNlZCBvbiB0aGlzIGRpYWdub3N0aWMsIEkgaGF2ZSB0byBlbnN1cmUgdGhlIHNldHRpbmdzIGFyZSBhZGp1c3RlZCB0byBhbGxvdyBmb3IgbWF4aW11bSBlZmZpY2llbmN5LCB3aGljaCBpcyBpbXBvcnRhbnQgdG8gbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzU3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MjkuODYxMDk3ODg0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NDQwNTM4NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0xMjY9aW50IHNobWVtX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMjgtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TSE1FTSlcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTI5OnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzMC1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaD0xMzI9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMzLSNlbHNlXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEzNDpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEzNS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTE0PXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE5MC1cXHRpZiAoIWluX3BmIFxcdTAwMjZcXHUwMDI2IHNobWVtX2ZpbGUodm1hLVxcdTAwM2V2bV9maWxlKSlcXG5tbS9odWdlX21lbW9yeS5jOjE5MTpcXHRcXHRyZXR1cm4gb3JkZXJzIFxcdTAwMjYgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGZpbGVfaW5vZGUodm1hLVxcdTAwM2V2bV9maWxlKSxcXG5tbS9odWdlX21lbW9yeS5jLTE5Mi1cXHRcXHRcXHRcXHRcXHRcXHQgICB2bWEsIHZtYV9zdGFydF9wZ29mZih2bWEpLCAwLFxcbi0tXFxubW0vc2htZW0uYz0xODA5PWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL3NobWVtLmMtMTgyNS1cXG5tbS9zaG1lbS5jOjE4MjY6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5tbS9zaG1lbS5jLTE4MjctXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jPTI0MjI9c3RhdGljIGludCBzaG1lbV9nZXRfZm9saW9fZ2ZwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXFxuLS1cXG5tbS9zaG1lbS5jLTI1MDMtXFx0LyogRmluZCBodWdlcGFnZSBvcmRlcnMgdGhhdCBhcmUgYWxsb3dlZCBmb3IgYW5vbnltb3VzIHNobWVtIGFuZCB0bXBmcy4gKi9cXG5tbS9zaG1lbS5jOjI1MDQ6XFx0b3JkZXJzID0gc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKGlub2RlLCB2bWEsIGluZGV4LCB3cml0ZV9lbmQsIGZhbHNlKTtcXG5tbS9zaG1lbS5jLTI1MDUtXFx0aWYgKG9yZGVycyBcXHUwMDNlIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6MzEuODA1MTYxNzQzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwOTY5MjM4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYHNobWVtX2dldGF0dHJgKipcblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYHNobWVtX2dldGF0dHJgLiBJdCdzIGEga2V5IGZ1bmN0aW9uLCBzbyBsZXQncyBnZXQgcmlnaHQgaW50byBpdCwgd2hhdCdzIGl0cyBpbXBsZW1lbnRhdGlvbiBsb29raW5nIGxpa2U/IEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24ncyBkZWZpbml0aW9uLCBwb3RlbnRpYWwgcGl0ZmFsbHMsIGFuZCBob3cgaXQgaGFuZGxlcyB2YXJpb3VzIGVycm9yIGNvbmRpdGlvbnMuIEknbSBnb2luZyB0byB3YW50IHRvIHZlcmlmeSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHVuZGVybHlpbmcgc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50LiBBcmUgdGhlcmUgYW55IHJhY2UgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMgSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dD8gUGVyaGFwcyB0aGVyZSBhcmUgYXNwZWN0cyB0aGF0IG5lZWQgZnVydGhlciBjbGFyaWZpY2F0aW9uLCBhbmQgSSB3aWxsIHdhbnQgdG8gcmVhZCB0aGUgZG9jdW1lbnRhdGlvbi4gSSBjYW4gY3Jvc3MtcmVmZXJlbmNlIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIHRoZSByZXN0IG9mIHRoZSBzaG1lbSBjb2RlYmFzZS4gSSBzaG91bGQgYWxzbyBjaGVjayBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRoYXQgY2FsbHMgdGhpcyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMTYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMDozNC41MTQ4NTU4MDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4Mzc4Nzc4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9nZXRhdHRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9MTI4Mj1FWFBPUlRfU1lNQk9MX0dQTChzaG1lbV90cnVuY2F0ZV9yYW5nZSk7XFxubW0vc2htZW0uYy0xMjgzLVxcbm1tL3NobWVtLmM6MTI4NDpzdGF0aWMgaW50IHNobWVtX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxubW0vc2htZW0uYy0xMjg1LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGtzdGF0ICpzdGF0LFxcbi0tXFxubW0vc2htZW0uYz00MzI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9zaG9ydF9zeW1saW5rX29wZXJhdGlvbnMgPSB7XFxubW0vc2htZW0uYzo0MzMwOlxcdC5nZXRhdHRyXFx0PSBzaG1lbV9nZXRhdHRyLFxcbm1tL3NobWVtLmMtNDMzMS1cXHQuc2V0YXR0clxcdD0gc2htZW1fc2V0YXR0cixcXG4tLVxcbm1tL3NobWVtLmM9NDMzOD1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0ge1xcbm1tL3NobWVtLmM6NDMzOTpcXHQuZ2V0YXR0clxcdD0gc2htZW1fZ2V0YXR0cixcXG5tbS9zaG1lbS5jLTQzNDAtXFx0LnNldGF0dHJcXHQ9IHNobWVtX3NldGF0dHIsXFxuLS1cXG5tbS9zaG1lbS5jPTUxNzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2lub2RlX29wZXJhdGlvbnMgPSB7XFxubW0vc2htZW0uYzo1MTc1OlxcdC5nZXRhdHRyXFx0PSBzaG1lbV9nZXRhdHRyLFxcbm1tL3NobWVtLmMtNTE3Ni1cXHQuc2V0YXR0clxcdD0gc2htZW1fc2V0YXR0cixcXG4tLVxcbm1tL3NobWVtLmM9NTE4NT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XFxubW0vc2htZW0uYy01MTg2LSNpZmRlZiBDT05GSUdfVE1QRlNcXG5tbS9zaG1lbS5jOjUxODc6XFx0LmdldGF0dHJcXHQ9IHNobWVtX2dldGF0dHIsXFxubW0vc2htZW0uYy01MTg4LVxcdC5jcmVhdGVcXHRcXHQ9IHNobWVtX2NyZWF0ZSxcXG4tLVxcbm1tL3NobWVtLmM9NTIxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2htZW1fc3BlY2lhbF9pbm9kZV9vcGVyYXRpb25zID0ge1xcbm1tL3NobWVtLmM6NTIxMjpcXHQuZ2V0YXR0clxcdD0gc2htZW1fZ2V0YXR0cixcXG5tbS9zaG1lbS5jLTUyMTMtI2lmZGVmIENPTkZJR19UTVBGU19YQVRUUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMDozNi4xOTg2NDgxMzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDM5NTI3OTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkRlY29uc3RydWN0aW5nIGBkb19zZXRfcG1kYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbi4gTXkgbWluZCBpbW1lZGlhdGVseSB3ZW50IHRvIHRoZSBmdW5jdGlvbiBgZG9fc2V0X3BtZGAuIE5vdywgSSBuZWVkIHRvIHJlYWxseSBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGhhcHBlbmluZy4gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIGEgXCJzZXRcIiBvcGVyYXRpb24sIGEgZnVuZGFtZW50YWwgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCwgYnV0IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqcHJlY2lzZWx5KiB3aGF0IHRoZSBcIlBNRFwiIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0IOKAkyBhIFBhZ2UgTWlkZGxlIERpcmVjdG9yeSBlbnRyeSwgcmlnaHQ/IElzIHRoaXMgYWJvdXQgc2V0dGluZyBhIG5ldyBtYXBwaW5nLCB1cGRhdGluZyBleGlzdGluZyBtZXRhZGF0YSwgb3IgZGVhbGluZyB3aXRoIHNvbWUgZm9ybSBvZiBtZW1vcnkgYWxsb2NhdGlvbiBvciBpbnZhbGlkYXRpb24/IEkgaGF2ZSB0byBjb25zaWRlciB0aGUgbnVhbmNlcyBvZiB0aGUgYXJjaGl0ZWN0dXJlLCBvZiBjb3Vyc2UuIElzIHRoZXJlIGFueSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZGVlcGVyIGFuZCBmaW5kIHdoYXQgaXTigJlzIGNhbGxlZCB3aXRoPyBXaGF0IGtpbmQgb2YgYXJndW1lbnRzIGFyZSB3ZSBwYXNzaW5nLCBhbmQgd2hhdCdzIHRoZSBleHBlY3RlZCBiZWhhdmlvcj8gSSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIGRlY2xhcmF0aW9uLCBpbXBsZW1lbnRhdGlvbiwgYW5kIGFueSByZWxhdGVkIGNvbW1lbnRzIHRvIHF1aWNrbHkgZ2V0IG15IGJlYXJpbmdzIGFuZCBhbnRpY2lwYXRlIGFueSBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSSBhbHNvIGhhdmUgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uLiBJdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBJIHdhbnQgYSBjbGVhciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA0MiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAwOjM5LjYzODE3ODcwN1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTI4NzE0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zZXRfcG1kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD0yMDMxPXN0YXRpYyBpbmxpbmUgcHRlX3QgbWF5YmVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIwMzctXFxuaW5jbHVkZS9saW51eC9tbS5oOjIwMzg6dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTIwMzktdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZmlsZW1hcC5jPTM3MTA9c3RhdGljIGJvb2wgZmlsZW1hcF9tYXBfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZmlsZW1hcC5jLTM3MjMtXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19maWxlX3BhZ2UoZm9saW8sIHN0YXJ0KTtcXG5tbS9maWxlbWFwLmM6MzcyNDpcXHRcXHR2bV9mYXVsdF90IHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XFxubW0vZmlsZW1hcC5jLTM3MjUtXFx0XFx0aWYgKCFyZXQpIHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODE5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NDctXFx0dm1mLnBtZCA9IHBtZHA7XFxubW0va2h1Z2VwYWdlZC5jOjE4NDg6XFx0aWYgKGRvX3NldF9wbWQoXFx1MDAyNnZtZiwgZm9saW8sIHBhZ2UpKVxcbm1tL2todWdlcGFnZWQuYy0xODQ5LVxcdFxcdHJldHVybiBTQ0FOX0ZBSUw7XFxuLS1cXG5tbS9tZW1vcnkuYz01NTUxPXN0YXRpYyB2b2lkIGRlcG9zaXRfcHJlYWxsb2NfcHRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTU2My1cXG5tbS9tZW1vcnkuYzo1NTY0OnZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LmMtNTU2NS17XFxuLS1cXG5tbS9tZW1vcnkuYy01NjM5LSNlbHNlXFxubW0vbWVtb3J5LmM6NTY0MDp2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS5jLTU2NDEte1xcbi0tXFxubW0vbWVtb3J5LmM9NTcxMz12bV9mYXVsdF90IGZpbmlzaF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTU3NjMtXFx0XFx0aWYgKCFuZWVkc19mYWxsYmFjayBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykpIHtcXG5tbS9tZW1vcnkuYzo1NzY0OlxcdFxcdFxcdHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XFxubW0vbWVtb3J5LmMtNTc2NS1cXHRcXHRcXHRpZiAocmV0ICE9IFZNX0ZBVUxUX0ZBTExCQUNLKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMDo0MS40MTk0NzI4NDVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwMzA2NDk3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRIUCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgaW50ZXJlc3RpbmcgY2hhbmdlcyByZWxhdGVkIHRvIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkuIEkgc2VlIGl0J3MgdG91Y2hpbmcgYGRvX3NldF9wbWRgLCByZXBsYWNpbmcgdGhlIGB0aHBfZGlzYWJsZWRfYnlfaHcoKWAgY2hlY2sgd2l0aCBgIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKWAuIFRoYXQncyBhIGtleSBzaGlmdCBpbiBob3cgaXQncyBkZXRlcm1pbmluZyB3aGV0aGVyIG9yIG5vdCB0byBhbGxvdyBQTUQtbGV2ZWwgVEhQLiBJbnRlcmVzdGluZy5cblxuVGhlbiwgaXQgZ29lcyBvbiB0byBtb2RpZnkgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGFuZCBgc2htZW1fZ2V0YXR0cmAgdG8gYWxzbyBpbmNvcnBvcmF0ZSB0aGlzIGAhcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYCBjaGVjaywgZWZmZWN0aXZlbHkgZmlsdGVyaW5nIG91dCBQTUQgb3JkZXJzIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbi4gSXQgbG9va3MgbGlrZSBpdCdzIHRyeWluZyB0byBoYXJtb25pemUgdGhpcyBjaGVjayBhY3Jvc3MgdGhlIGJvYXJkIGZvciBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCB0aGUgaHVnZSBwYWdlIG9yZGVycy5cblxuSG9sZCBvbi4uLiBJJ3ZlIGdvdCBhIHdyaW5rbGUuIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgdHlwaWNhbGx5IGFuIGlubGluZSBmdW5jdGlvbiwgaXNuJ3QgaXQ/IEl0J3MgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgLiBXaHkgaXMgaXQgc2hvd2luZyB1cCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AgaW4gdGhlIHBhdGNoPyBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBjb250ZXh0LiBMZXQncyBnbyB0byBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIHNlZSB3aGF0IHRoZSBwYXRjaCBpcyBkb2luZyB0byB0aGF0IGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGRpc2NyZXBhbmN5IHRvIGZ1bGx5IGdyYXNwIHdoYXQncyBnb2luZyBvbiBoZXJlLiBUaGlzIGNvdWxkIGJlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwMTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDA6NDYuMDIyNTM5OTEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdlX21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXHRjb25zdCBib29sIGluX3BmID0gdHlwZSA9PSBUVkFfUEFHRUZBVUxUO1xcbiAxMjE6XFx0XFx0Y29uc3QgYm9vbCBmb3JjZWRfY29sbGFwc2UgPSB0eXBlID09IFRWQV9GT1JDRURfQ09MTEFQU0U7XFxuIDEyMjpcXHRcXHR1bnNpZ25lZCBsb25nIHN1cHBvcnRlZF9vcmRlcnM7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdC8qIENoZWNrIHRoZSBpbnRlcnNlY3Rpb24gb2YgcmVxdWVzdGVkIGFuZCBzdXBwb3J0ZWQgb3JkZXJzLiAqL1xcbiAxMjU6XFx0XFx0aWYgKHZtYV9pc19hbm9ueW1vdXModm1hKSlcXG4gMTI2OlxcdFxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9BTk9OO1xcbiAxMjc6XFx0XFx0ZWxzZSBpZiAodm1hX2lzX2RheCh2bWEpIHx8IHZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSlcXG4gMTI4OlxcdFxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9TUEVDSUFMX0RBWDtcXG4gMTI5OlxcdFxcdGVsc2VcXG4gMTMwOlxcdFxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9GSUxFX0RFRkFVTFQ7XFxuIDEzMTpcXHRcXG4gMTMyOlxcdFxcdGlmICghcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpKSB7XFxuIDEzMzpcXHRcXHRcXHQvKlxcbiAxMzQ6XFx0XFx0XFx0ICogSWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMsIGFzc3VtZSBmb3JcXG4gMTM1OlxcdFxcdFxcdCAqIG5vdyB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQgUFVEIGxlYXZlcyBhbmQgZGlzYWJsZVxcbiAxMzY6XFx0XFx0XFx0ICogYm90aCBmb2xpbyBvcmRlcnMuXFxuIDEzNzpcXHRcXHRcXHQgKi9cXG4gMTM4OlxcdFxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgXFx1MDAyNj0gfihCSVQoUE1EX09SREVSKSB8IEJJVChQVURfT1JERVIpKTtcXG4gMTM5OlxcdFxcdH1cXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0b3JkZXJzIFxcdTAwMjY9IHN1cHBvcnRlZF9vcmRlcnM7XFxuIDE0MjpcXHRcXHRpZiAoIW9yZGVycylcXG4gMTQzOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNDQ6XFx0XFxuIDE0NTpcXHRcXHRpZiAoIXZtYS1cXHUwMDNldm1fbW0pXFx0XFx0LyogdmRzbyAqL1xcbiAxNDY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDE0NzpcXHRcXG4gMTQ4OlxcdFxcdGlmICh2bWFfdGhwX2Rpc2FibGVkKHZtYSwgdm1fZmxhZ3MsIGZvcmNlZF9jb2xsYXBzZSkpXFxuIDE0OTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMTUwOlxcdFxcbiAxNTE6XFx0XFx0Lyoga2h1Z2VwYWdlZCBkb2Vzbid0IGNvbGxhcHNlIERBWCB2bWEsIGJ1dCBwYWdlIGZhdWx0IGlzIGZpbmUuICovXFxuIDE1MjpcXHRcXHRpZiAodm1hX2lzX2RheCh2bWEpKVxcbiAxNTM6XFx0XFx0XFx0cmV0dXJuIGluX3BmID8gb3JkZXJzIDogMDtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0LypcXG4gMTU2OlxcdFxcdCAqIGtodWdlcGFnZWQgc3BlY2lhbCBWTUEgYW5kIGh1Z2V0bGIgVk1BLlxcbiAxNTc6XFx0XFx0ICogTXVzdCBiZSBjaGVja2VkIGFmdGVyIGRheCBzaW5jZSBzb21lIGRheCBtYXBwaW5ncyBtYXkgaGF2ZVxcbiAxNTg6XFx0XFx0ICogVk1fTUlYRURNQVAgc2V0LlxcbiAxNTk6XFx0XFx0ICovXFxuIDE2MDpcXHRcXHRpZiAoIWluX3BmIFxcdTAwMjZcXHUwMDI2ICFzbWFwcyBcXHUwMDI2XFx1MDAyNiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9OT19LSFVHRVBBR0VEKSlcXG4gMTYxOlxcdFxcdFxcdHJldHVybiAwO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHQvKlxcbiAxNjQ6XFx0XFx0ICogQ2hlY2sgYWxpZ25tZW50IGZvciBmaWxlIHZtYSBhbmQgc2l6ZSBmb3IgYm90aCBmaWxlIGFuZCBhbm9uIHZtYSBieVxcbiAxNjU6XFx0XFx0ICogZmlsdGVyaW5nIG91dCB0aGUgdW5zdWl0YWJsZSBvcmRlcnMuXFxuIDE2NjpcXHRcXHQgKlxcbiAxNjc6XFx0XFx0ICogU2tpcCB0aGUgY2hlY2sgZm9yIHBhZ2UgZmF1bHQuIEh1Z2UgZmF1bHQgZG9lcyB0aGUgY2hlY2sgaW4gZmF1bHRcXG4gMTY4OlxcdFxcdCAqIGhhbmRsZXJzLlxcbiAxNjk6XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAwOjQ2LjAyMjc5NjcyM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjQ3NjM5NzU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTaG1lbSBhbmQgVEhQIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCB0aGlzIGxvb2tzIGFjaGlldmFibGUuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEkgc2VlIGEgZmV3IHBvdGVudGlhbCBjYW5kaWRhdGVzOiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYHNobWVtX2dldGF0dHJgLCBgc2htZW1fcGFyc2Vfb25lYCwgYHNobWVtX3BhcnNlX2h1Z2VgLCBhbmQgYGRvX3NldF9wbWRgLlxuXG5XYWl0LCBhIHF1aWNrIHNjYW4gcmV2ZWFscyB0aGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgYW5kIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIGFyZSAqbm90KiBkZWNsYXJlZCBzdGF0aWMgLSB0aGF0J3Mgc29tZXRoaW5nIHRvIGtlZXAgaW4gbWluZC4gTm93LCBgc2htZW1fZ2V0YXR0cmAgaXMgc3RhdGljLCB3aGljaCBpcyBnb29kLCBidXQgaXQncyBhbiBpbm9kZSBvcGVyYXRpb24sIHNvIGl0J3MgcHJvYmFibHkgZmluZSB0byB1c2UgdGhhdCBvbmUuIEJvdGggYHNobWVtX3BhcnNlX29uZWAgYW5kIGBzaG1lbV9wYXJzZV9odWdlYCBhcmUgYWxzbyBzdGF0aWMuIEFuZCBmaW5hbGx5LCBgZG9fc2V0X3BtZGAgaXMgKm5vdCogc3RhdGljLCBzbyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhhdC5cblxuUmlnaHQsIG5vdyB0aGF0IEkgaGF2ZSB0aG9zZSBpbiBtaW5kLCBJIG5lZWQgdG8gY2hlY2sgaWYgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyByZXF1aXJlZCBmb3IgbXkgc3BlY2lmaWMgbmVlZHMuIEFoLCB5ZXMsIGl0J3MgZGVmaW5pdGVseSByZXF1aXJlZC4gU28sIGxldCdzIG5vdyBqdW1wIGludG8gYG1tL3NobWVtLmNgIGFuZCB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgYW5kIG1ha2Ugc3VyZSBpdCBiZWhhdmVzIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzM0NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAwOjUwLjY3MDQzOTA3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyNDI5MzA2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEyNj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEyOC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NITUVNKVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMjk6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMwLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEzMj1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzMtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTM1LVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMTQ9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkwLVxcdGlmICghaW5fcGYgXFx1MDAyNlxcdTAwMjYgc2htZW1fZmlsZSh2bWEtXFx1MDAzZXZtX2ZpbGUpKVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTkxOlxcdFxcdHJldHVybiBvcmRlcnMgXFx1MDAyNiBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoZmlsZV9pbm9kZSh2bWEtXFx1MDAzZXZtX2ZpbGUpLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTkyLVxcdFxcdFxcdFxcdFxcdFxcdCAgIHZtYSwgdm1hX3N0YXJ0X3Bnb2ZmKHZtYSksIDAsXFxuLS1cXG5tbS9zaG1lbS5jPTE4MDk9Ym9vbCBzaG1lbV9ocGFnZV9wbWRfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0vc2htZW0uYy0xODI1LVxcbm1tL3NobWVtLmM6MTgyNjp1bnNpZ25lZCBsb25nIHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbm1tL3NobWVtLmMtMTgyNy1cXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmM9MjQyMj1zdGF0aWMgaW50IHNobWVtX2dldF9mb2xpb19nZnAoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjUwMy1cXHQvKiBGaW5kIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciBhbm9ueW1vdXMgc2htZW0gYW5kIHRtcGZzLiAqL1xcbm1tL3NobWVtLmM6MjUwNDpcXHRvcmRlcnMgPSBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoaW5vZGUsIHZtYSwgaW5kZXgsIHdyaXRlX2VuZCwgZmFsc2UpO1xcbm1tL3NobWVtLmMtMjUwNS1cXHRpZiAob3JkZXJzIFxcdTAwM2UgMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMDo1Mi4zOTQ3MzcyOTlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMDQ2NjEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBPcHRpb25zKipcblxuQWxyaWdodCwgdGhlIG5lZWQgZm9yIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgY2xlYXIuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJwbGF5IHdpdGggdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3ksIHBhcnRpY3VsYXJseSBhcyBpdCByZWxhdGVzIHRvIHNoYXJlZCBtZW1vcnkuIExldCBtZSBzZWUuLi4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZvciBgQ09ORklHX1NITUVNYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFyZWQgbWVtb3J5IHN1YnN5c3RlbSBpcyBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBpc24ndCBzb21laG93IGNsYXNoaW5nIHdpdGggb3IgcHJldmVudGluZyB0cmFuc3BhcmVudCBodWdlcGFnZXMgZnJvbSBvcGVyYXRpbmcgYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZXJlIGlzIGFuIGludGVyYWN0aW9uIHdpdGggc2hhcmVkIG1lbW9yeSBjb25maWd1cmF0aW9uIHRoYXQgaXMgcmVsZXZhbnQuXG5cbk5leHQsIEkgc2hvdWxkIHF1aWNrbHkgcmV2aWV3IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGBkb19zZXRfcG1kYC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaG93IHRoZSBQTUQgaXMgYmVpbmcgdXBkYXRlZCwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiBodWdlcGFnZXMuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBzcGVjaWZpYyBvcGVyYXRpb25zIGFyZSB0YWtpbmcgcGxhY2UgYXQgdGhlIFBhZ2UgVGFibGUgbGV2ZWwsIGFzIHRoaXMgZnVuY3Rpb24gaG9sZHMgY3JpdGljYWwgaW5mb3JtYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaWYgdGhlcmUgaXMgYSBjb25mbGljdC4gQXJlIHdlIG1hcHBpbmcgaHVnZSBwYWdlcyBkaXJlY3RseSwgb3IgYXJlIHdlIGZhbGxpbmcgYmFjayB0byBzbWFsbGVyIHBhZ2Ugc2l6ZXMgaW4gY2VydGFpbiBzY2VuYXJpb3M/IFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbiB3aWxsIGlsbHVtaW5hdGUgaG93IHBhZ2UgdGFibGUgZW50cmllcyBhcmUgc2V0LCB3aGljaCBpcyBhYnNvbHV0ZWx5IHZpdGFsIHdoZW4gZGVhbGluZyB3aXRoIGh1Z2VwYWdlcywgdG8gc2VlIGhvdyB0aGUgb3ZlcmFsbCBzeXN0ZW0gaW50ZXJhY3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODU1MCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAwOjU1LjgwNTIxMDM5NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczNTg2NjU4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19zZXRfcG1kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD0yMDMxPXN0YXRpYyBpbmxpbmUgcHRlX3QgbWF5YmVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIwMzctXFxuaW5jbHVkZS9saW51eC9tbS5oOjIwMzg6dm1fZmF1bHRfdCBkb19zZXRfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTIwMzktdm9pZCBzZXRfcHRlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZmlsZW1hcC5jPTM3MTA9c3RhdGljIGJvb2wgZmlsZW1hcF9tYXBfcG1kKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZmlsZW1hcC5jLTM3MjMtXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBmb2xpb19maWxlX3BhZ2UoZm9saW8sIHN0YXJ0KTtcXG5tbS9maWxlbWFwLmM6MzcyNDpcXHRcXHR2bV9mYXVsdF90IHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XFxubW0vZmlsZW1hcC5jLTM3MjUtXFx0XFx0aWYgKCFyZXQpIHtcXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xODE5PXN0YXRpYyBlbnVtIHNjYW5fcmVzdWx0IHNldF9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTE4NDctXFx0dm1mLnBtZCA9IHBtZHA7XFxubW0va2h1Z2VwYWdlZC5jOjE4NDg6XFx0aWYgKGRvX3NldF9wbWQoXFx1MDAyNnZtZiwgZm9saW8sIHBhZ2UpKVxcbm1tL2todWdlcGFnZWQuYy0xODQ5LVxcdFxcdHJldHVybiBTQ0FOX0ZBSUw7XFxuLS1cXG5tbS9tZW1vcnkuYz01NTUxPXN0YXRpYyB2b2lkIGRlcG9zaXRfcHJlYWxsb2NfcHRlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTU2My1cXG5tbS9tZW1vcnkuYzo1NTY0OnZtX2ZhdWx0X3QgZG9fc2V0X3BtZChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxubW0vbWVtb3J5LmMtNTU2NS17XFxuLS1cXG5tbS9tZW1vcnkuYy01NjM5LSNlbHNlXFxubW0vbWVtb3J5LmM6NTY0MDp2bV9mYXVsdF90IGRvX3NldF9wbWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbm1tL21lbW9yeS5jLTU2NDEte1xcbi0tXFxubW0vbWVtb3J5LmM9NTcxMz12bV9mYXVsdF90IGZpbmlzaF9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTU3NjMtXFx0XFx0aWYgKCFuZWVkc19mYWxsYmFjayBcXHUwMDI2XFx1MDAyNiBmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbykpIHtcXG5tbS9tZW1vcnkuYzo1NzY0OlxcdFxcdFxcdHJldCA9IGRvX3NldF9wbWQodm1mLCBmb2xpbywgcGFnZSk7XFxubW0vbWVtb3J5LmMtNTc2NS1cXHRcXHRcXHRpZiAocmV0ICE9IFZNX0ZBVUxUX0ZBTExCQUNLKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMDo1Ny41NDEwODI2MjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIzMzM5NTcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gUGFnZSBUYWJsZSBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gaG93IHRoZSBwYWdlIHRhYmxlcyBhcmUgc2V0IHVwLiBJIHJlbWVtYmVyIHNlZWluZyBgZG9fc2V0X3BtZGAgc29tZXdoZXJlIGluIHRoZSBgbW1gIHN1YnN5c3RlbS4uLiByaWdodCwgaXQncyBpbiBgbW0vbWVtb3J5LmNgLiBOb3csIHdoZXJlIGRvZXMgdGhpcyB3aG9sZSBwcm9jZXNzIGFjdHVhbGx5ICpzdGFydCo/IEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIExldCdzIHNlZS4uLiBJJ20gcHJldHR5IHN1cmUgSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGUgbGVhZiBub2RlIHN1cHBvcnQgaXMgaW5pdGlhbGl6ZWQgdG8gdW5kZXJzdGFuZCB0aGlzLiBUaGF0IG1lYW5zIGNoZWNraW5nIGBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0YCBuZXh0LiBJIHdvbmRlciB3aGF0IHRoYXQgZnVuY3Rpb24gc2V0cyB1cCwgYW5kIHdoYXQgYXNwZWN0cyBvZiB0aGUgUE1EIGl0J3Mgc2V0dGluZyB0aGUgZ3JvdW5kIHJ1bGVzIGZvci4uLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU0MywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAxOjAwLjc3NDQ4MTY3MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2Mzg4NTgyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIzMTk9c3RhdGljIGlubGluZSBib29sIHBndGFibGVfaGFzX3BtZF9sZWF2ZXModm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIzMjItfVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIzMjM6dm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMzI0LSNlbHNlXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjMyNT1zdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcyh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjMyOC19XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjMyOTpzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQodm9pZCkgeyB9XFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjMzMC0jZW5kaWZcXG4tLVxcbm1tL21lbW9yeS5jPTE2OD1FWFBPUlRfU1lNQk9MKF9fYXJjaF9oYXNfcG1kX2xlYXZlc19rZXkpO1xcbm1tL21lbW9yeS5jLTE2OS1cXG5tbS9tZW1vcnkuYzoxNzA6dm9pZCBfX2luaXQgcGd0YWJsZV9sZWFmX3N1cHBvcnRfaW5pdCh2b2lkKVxcbm1tL21lbW9yeS5jLTE3MS17XFxuLS1cXG5tbS9tbV9pbml0LmM9MjY5OD12b2lkIF9faW5pdCBtbV9jb3JlX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy0yNzAxLVxcdGluaXRfemVyb19wYWdlX3BmbigpO1xcbm1tL21tX2luaXQuYzoyNzAyOlxcdHBndGFibGVfbGVhZl9zdXBwb3J0X2luaXQoKTtcXG5tbS9tbV9pbml0LmMtMjcwMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MDIuNjM4MzczNzc1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDcwODgyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHNldmVyYWwga2V5IGFyZWFzLiBJIHNlZSBpdCdzIG1vZGlmeWluZyBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCwgYGRvX3NldF9wbWRgLCBhbmQgYHNobWVtX2dldGF0dHJgLiBUaG9zZSBhcmUgYWxsIHJlbGV2YW50IHN5bWJvbHM7IEknbSBoYXBweSB0byBzZWUgdGhvc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIHRhcmdldGVkLCB0aGV5IGluZGljYXRlIGEgY2xlYXIgZm9jdXMuIFdhaXQgYSBzZWNvbmQsIHRob3VnaC4uLiBJJ20gbm90aWNpbmcgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIG5vdCBzdGF0aWMuIFRoYXQgbWVhbnMgaXQncyBleHBvcnRlZCBvciBnbG9iYWwsIGFuZCBjYW4gYmUgYWNjZXNzZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJIHNob3VsZCBjb25maXJtIHRoYXQgdGhhdCdzIHRoZSBjYXNlLiBUbyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlLCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGluIGBtbS9odWdlX21lbW9yeS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdpZGVseSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTMyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAxOjA3LjM0NTQ2NTI5N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2OTEwNzk0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0yNzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk3LVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI5ODp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5OS1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTMxOT11bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0MS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozNDI6XFx0cmV0dXJuIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIG9yZGVycyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQzLX1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTA3PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTExMy1cXG5tbS9odWdlX21lbW9yeS5jOjExNDp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTE1LVxcdFxcdFxcdFxcdFxcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMTowOS4xMTQ1Nzg2MzZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1OTk4MTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIFNoYXJlZCBNZW1vcnkgKFNITUVNKSBTeXN0ZW0qKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYW5kIGBkb19zZXRfcG1kYCBhcmUgYWxsIGdsb2JhbGx5IGFjY2Vzc2libGUgZnVuY3Rpb25zLiBJIHJlY29nbml6ZSB0aGVpciBzaWduaWZpY2FuY2UsIHRoZXNlIGFyZSB0aGUgY29yZSBidWlsZGluZyBibG9ja3MgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsLiBJdCBzZWVtcyBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgaXMgdXNpbmcgYSBtaXggb2YgZ2xvYmFsIGFuZCBsb2NhbGl6ZWQgZnVuY3Rpb24gY2FsbHMgZm9yIG1lbW9yeSBjb250cm9sLCB3aGljaCBtYWtlcyBmb3IgYSBtb3JlIGNvbXBsZXggcGljdHVyZS4gQW5kIHRoZW4sIHRoZXJlJ3MgYHNobWVtX2dldGF0dHJgLCBhIHN0YXRpYyBmdW5jdGlvbiwgYnV0IHVzZWQgYXMgYSBjYWxsYmFjay4gVGhhdCdzIGEgY2xhc3NpYyBwYXR0ZXJuIHRvIHdhdGNoIG91dCBmb3Ig4oCTIGhvdyBpcyB0aGUgY2FsbGJhY2sgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3RhdGljIGNvbnRleHQgYW5kIHdoYXQncyB0aGUgbGlmZWN5Y2xlIG9mIHRoYXQgc3RhdGljIHNjb3BlPyBUaGlzIG1lYW5zIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHNjaGVtZSBpcyBsaWtlbHkgYSBkaXN0cmlidXRlZCBtaXggb2YgY2FsbGJhY2tzIGFuZCBkaXJlY3QgY2FsbHMuIExldCdzIGRlbHZlIGludG8gYHNobWVtX3BhcnNlX29uZWAuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoZXJlIGFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgY29tZSB0b2dldGhlci4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBwYXJzaW5nIG1lbW9yeSBjb25maWd1cmF0aW9uIGFuZCBob3cgdGhlc2UgZ2xvYmFsIGFuZCBzdGF0aWMgZnVuY3Rpb25zIGludGVyYWN0IGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODI4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MTMuMDc0NTYyMjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjY4ODYyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fcGFyc2Vfb25lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NobWVtLmM9NDUyMT1zdGF0aWMgaW50IHNobWVtX3BhcnNlX29wdF9jYXNlZm9sZChzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtLFxcbi0tXFxubW0vc2htZW0uYy00NTI3LVxcbm1tL3NobWVtLmM6NDUyODpzdGF0aWMgaW50IHNobWVtX3BhcnNlX29uZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbm1tL3NobWVtLmMtNDUyOS17XFxuLS1cXG5tbS9zaG1lbS5jPTUwODU9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgc2htZW1fZnNfY29udGV4dF9vcHMgPSB7XFxuLS1cXG5tbS9zaG1lbS5jLTUwODktXFx0LnBhcnNlX21vbm9saXRoaWNcXHQ9IHNobWVtX3BhcnNlX21vbm9saXRoaWMsXFxubW0vc2htZW0uYzo1MDkwOlxcdC5wYXJzZV9wYXJhbVxcdFxcdD0gc2htZW1fcGFyc2Vfb25lLFxcbm1tL3NobWVtLmMtNTA5MS1cXHQucmVjb25maWd1cmVcXHRcXHQ9IHNobWVtX3JlY29uZmlndXJlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMToxNC45MDE0NTI3OTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxNzE0MDM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBQYWdlIENvbmZpZ3VyYXRpb24gaW4gU2hhcmVkIE1lbW9yeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBodWdlIHBhZ2VzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIHNoYXJlZCBtZW1vcnkuIFRoZSBjb2RlIGhhcyBhIHN0YXRpYyBmdW5jdGlvbiwgYHNobWVtX3BhcnNlX29uZWAsIHRoYXQncyByZWxldmFudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJwbGF5IGhlcmUuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBhbmQgYWxzbyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGFuZCBgZG9fc2V0X3BtZGAgd2hpY2ggc2VlbSBsaWtlIGtleSBwaWVjZXMgb2YgdGhlIHB1enpsZS4gSSB3b25kZXIsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJ20gbWlzc2luZyB0aGF0IGluZmx1ZW5jZSB0aGlzIGJlaGF2aW9yP1xuXG5SaWdodCwgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBvdmVybG9va2luZyBhbnl0aGluZy4gVGhlIG9idmlvdXMgb25lLCBvZiBjb3Vyc2UsIGlzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBpcyBjZW50cmFsIHRvIHRoZSBjb25jZXB0LiAgQW5kIEknZCBhbHNvIGV4cGVjdCBgQ09ORklHX1NITUVNYCB0byBiZSBlbmFibGVkLCBhcyBzaGFyZWQgbWVtb3J5IGlzIHVzdWFsbHkgYSBzdGFuZGFyZCBmZWF0dXJlLiBMZXQgbWUgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIHRoZSBzdGF0dXMgb2YgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAg4oCTIHRoYXQncyB0aGUgcGxhY2UgdG8gc3RhcnQsIGl0J3MgY29yZSB0byB0aGUgZW5hYmxpbmcgb2YgYWxsIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDAyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MTguNTE4NTk1OTc5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE3MzM0MDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyOT1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODMxLVxcbm1tL0tjb25maWc6ODMyOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMy1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTA9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1NS1cXG5tbS9LY29uZmlnOjg1NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NTctXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjItXFxubW0vS2NvbmZpZzo4NjM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2NC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzEtXFxubW0vS2NvbmZpZzo4NzI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzMtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg3OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODg4LVxcbm1tL0tjb25maWc6ODg5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTAtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg5OC1cXG5tbS9LY29uZmlnOjg5OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwNi1cXG5tbS9LY29uZmlnOjkwNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTA4LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTQtXFxubW0vS2NvbmZpZzo5MTU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTYtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05MjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzMy1cXG5tbS9LY29uZmlnOjkzNDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTM1LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDItXFxubW0vS2NvbmZpZzo5NDM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDQtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTAtXFxubW0vS2NvbmZpZzo5NTE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1Mi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU4LVxcbm1tL0tjb25maWc6OTU5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTYwLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MjAuMzM1OTM1MDQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTIzNjEzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMgYW5kIFRSQU5TUEFSRU5UX0hVR0VQQUdFKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGNvbmZpZyBpbiBwbGF5LiBOb3csIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AuIExldCdzIHJlZnJlc2ggb3VyIG1lbW9yeSBvbiB0aGF0OyBpdCdzIHR1Y2tlZCBhd2F5IGluIGBtbS9zaG1lbS5jYC4gVGhlIHNpZ25hdHVyZSBJIGV4cGVjdCB0byBzZWUgaXM6XG5cbmBgYGNcbnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuXHRcdFx0XHRib29sIHNobWVtX2h1Z2VfZm9yY2UpXG5gYGBcblxuSGFuZyBvbiBhIHNlY29uZC4uLiBHb2luZyBiYWNrIHRocm91Z2ggdGhlIHBhdGNoZXMsIEkgc2VlIHNvbWV0aGluZyBkaWZmZXJlbnQuIFRoZXJlJ3MgYW4gZXh0cmEgcGFyYW1ldGVyLCBgbG9mZl90IHdyaXRlX2VuZGAuIFRoZSBwYXRjaGVkIHZlcnNpb24gcmVhZHM6XG5cbmBgYGNcbnVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxuXHRcdFx0XHRsb2ZmX3Qgd3JpdGVfZW5kLCBib29sIHNobWVtX2h1Z2VfZm9yY2UpXG5gYGBcblxuVGltZSB0byBjb25zdWx0IHRoZSBzb3VyY2UgdHJlZSBhbmQgdmVyaWZ5IHRoZSBjdXJyZW50IHNpZ25hdHVyZS4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgZnVuY3Rpb24gcHJvdG90eXBlIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjQ3MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMToyNC40ODgyOTg5NDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MTMwMTUwMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEyNj1pbnQgc2htZW1fdW51c2UodW5zaWduZWQgaW50IHR5cGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEyOC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NITUVNKVxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMjk6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTMwLVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEzMj1ib29sIHNobWVtX2hwYWdlX3BtZF9lbmFibGVkKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaC0xMzMtI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTM0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTM1LVxcdFxcdFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYz0xODA5PWJvb2wgc2htZW1faHBhZ2VfcG1kX2VuYWJsZWQodm9pZClcXG4tLVxcbm1tL3NobWVtLmMtMTgyNS1cXG5tbS9zaG1lbS5jOjE4MjY6dW5zaWduZWQgbG9uZyBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnMoc3RydWN0IGlub2RlICppbm9kZSxcXG5tbS9zaG1lbS5jLTE4MjctXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnb2ZmX3QgaW5kZXgsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAxOjI2LjMwMTMyNjA2NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA3NzI4NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gYG1tL3NobWVtLmNgIExpbmUgMTgyNioqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgbGV0J3MgemVybyBpbiBvbiBgbW0vc2htZW0uY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxODI2LiBUaGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29yZSBvZiB0aGUgc2hhcmVkIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZXNpZGUsIGFuZCBpdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCBpZiB5b3UncmUgbG9va2luZyBmb3IgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIGlzc3Vlcy4gSSdtIGd1ZXNzaW5nIHdlIGFyZSBsb29raW5nIGludG8gbWVtb3J5IGxlYWsgaXNzdWVzIGluIHRoZSBzaGFyZWQgbWVtb3J5IGNvbnRleHQuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHByb2JsZW1zIGFyb3VuZCByZXNvdXJjZSBoYW5kbGluZyBvciBib3VuZGFyeSBjb25kaXRpb25zIGluIHBhcnRpY3VsYXIuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGNhbGxzIHRvIGBrbWFwX2F0b21pY2AsIGBrdW5tYXBfYXRvbWljYCwgYGFsbG9jX3BhZ2VgLCBgZnJlZV9wYWdlYCwgb3IgbWF5YmUgZXZlbiBgdm1fbWFwYC4gTXkgU3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nIGFib3V0IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIHRoZXJlLCBsaWtlIHNwaW5sb2NrcyBvciBtdXRleGVzLCBzbyBJ4oCZbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayB1c2FnZSBwYXR0ZXJucyBhcm91bmQgbWVtb3J5IGFjY2Vzc2VzLiBJJ20gYWxzbyBsb29raW5nIGZvciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgb3IgZGF0YSBjb3JydXB0aW9uIGlmIG11bHRpcGxlIHByb2Nlc3NlcyBhcmUgc2hhcmluZyBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMzE3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MjkuNjA5MDU4Mjk3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MDk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MjA6XFx0XFx0ICAgIHNobWVtX2h1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUilcXG4xODIxOlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjE4MjI6XFx0XFxuMTgyMzpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTgyNDpcXHR9XFxuMTgyNTpcXHRcXG4xODI2OlxcdHVuc2lnbmVkIGxvbmcgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuMTgyNzpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdvZmZfdCBpbmRleCxcXG4xODI4OlxcdFxcdFxcdFxcdFxcdGxvZmZfdCB3cml0ZV9lbmQsIGJvb2wgc2htZW1faHVnZV9mb3JjZSlcXG4xODI5OlxcdHtcXG4xODMwOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX3NobWVtX29yZGVyc19hbHdheXMpO1xcbjE4MzE6XFx0XFx0dW5zaWduZWQgbG9uZyB3aXRoaW5fc2l6ZV9vcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9zaG1lbV9vcmRlcnNfd2l0aGluX3NpemUpO1xcbjE4MzI6XFx0XFx0dm1fZmxhZ3NfdCB2bV9mbGFncyA9IHZtYSA/IHZtYS1cXHUwMDNldm1fZmxhZ3MgOiAwO1xcbjE4MzM6XFx0XFx0dW5zaWduZWQgaW50IGdsb2JhbF9vcmRlcnMsIGRpc2FibGVkX29yZGVycyA9IDA7XFxuMTgzNDpcXHRcXG4xODM1OlxcdFxcdGlmICh2bWEgXFx1MDAyNlxcdTAwMjYgdm1hX3RocF9kaXNhYmxlZCh2bWEsIHZtX2ZsYWdzLCBzaG1lbV9odWdlX2ZvcmNlKSlcXG4xODM2OlxcdFxcdFxcdHJldHVybiAwO1xcbjE4Mzc6XFx0XFxuMTgzODpcXHRcXHRpZiAoIXBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKSlcXG4xODM5OlxcdFxcdFxcdGRpc2FibGVkX29yZGVycyA9IEJJVChQTURfT1JERVIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMToyOS42MDkyNTA0NTdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc1NDkwODA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCB0aG9zZSBzeW1ib2xzIGxvb2sgcHJvbWlzaW5nIGZvciBteSBjdXJyZW50IGludmVzdGlnYXRpb24uXG5cbioqRGVsdmluZyBpbnRvIFNoYXJlZCBNZW1vcnkgYW5kIEh1Z2UgUGFnZXMqKlxuXG5ZZXMsIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgIHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgaHVnZSBwYWdlIGFsbG9jYXRpb25zIGFyZSBoYW5kbGVkIHdpdGhpbiBzaGFyZWQgbWVtb3J5LiBBbmQsIGJhc2VkIG9uIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGtlcm5lbCwgSSdkIHNheSBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGFub3RoZXIgc3Ryb25nIGNhbmRpZGF0ZS4gSSdtIGFsc28gdGhpbmtpbmcgYGRvX3NldF9wbWRgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmcgYXNwZWN0LCBtYWtpbmcgaXQgcG90ZW50aWFsbHkgcmVsZXZhbnQuXG5cbk5vdywgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUgd2l0aGluIHRoZSBjb2RlLCBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSBiaXRzIGZpdCB0b2dldGhlci4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBzaG1lbV9wYXJzZV9vbmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gYG1tL3NobWVtLmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb250ZXh0IEkgbmVlZCB0byBjb25uZWN0IHRoZXNlIHN5bWJvbHMgYW5kIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGZsb3cuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzk2NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MzMuMzY0MTY1NDE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zaG1lbS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1ODUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1ODU6XFx0XFxuNDU4NjpcXHRcXHRcXHQvKlxcbjQ1ODc6XFx0XFx0XFx0ICogVGhlIHJlcXVlc3RlZCBnaWQgbXVzdCBiZSByZXByZXNlbnRhYmxlIGluIHRoZVxcbjQ1ODg6XFx0XFx0XFx0ICogZmlsZXN5c3RlbSdzIGlkbWFwcGluZy5cXG40NTg5OlxcdFxcdFxcdCAqL1xcbjQ1OTA6XFx0XFx0XFx0aWYgKCFrZ2lkX2hhc19tYXBwaW5nKGZjLVxcdTAwM2V1c2VyX25zLCBrZ2lkKSlcXG40NTkxOlxcdFxcdFxcdFxcdGdvdG8gYmFkX3ZhbHVlO1xcbjQ1OTI6XFx0XFxuNDU5MzpcXHRcXHRcXHRjdHgtXFx1MDAzZWdpZCA9IGtnaWQ7XFxuNDU5NDpcXHRcXHRcXHRicmVhaztcXG40NTk1OlxcdFxcdGNhc2UgT3B0X2h1Z2U6XFxuNDU5NjpcXHRcXHRcXHRjdHgtXFx1MDAzZWh1Z2UgPSByZXN1bHQudWludF8zMjtcXG40NTk3OlxcdFxcdFxcdGlmIChjdHgtXFx1MDAzZWh1Z2UgIT0gU0hNRU1fSFVHRV9ORVZFUiBcXHUwMDI2XFx1MDAyNlxcbjQ1OTg6XFx0XFx0XFx0ICAgICFJU19FTkFCTEVEKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkpXFxuNDU5OTpcXHRcXHRcXHRcXHRnb3RvIHVuc3VwcG9ydGVkX3BhcmFtZXRlcjtcXG40NjAwOlxcdFxcdFxcdGN0eC1cXHUwMDNlc2VlbiB8PSBTSE1FTV9TRUVOX0hVR0U7XFxuNDYwMTpcXHRcXHRcXHRicmVhaztcXG40NjAyOlxcdFxcdGNhc2UgT3B0X21wb2w6XFxuNDYwMzpcXHRcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpIHtcXG40NjA0OlxcdFxcdFxcdFxcdG1wb2xfcHV0KGN0eC1cXHUwMDNlbXBvbCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDA2OjAxOjMzLjM2NDM4MTY2M1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODQ2MjQ0NTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgdGhlIFNoYXJlZCBNZW1vcnkgUGFyc2luZyBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgc2htZW1fcGFyc2Vfb25lYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgYSBmZXcgdGhpbmdzIGFib3V0IGl0cyBzY29wZSBhbmQgcG90ZW50aWFsIHVzZS4gSXQncyBvbmx5IGFjY2Vzc2libGUgd2l0aGluIHRoaXMgdHJhbnNsYXRpb24gdW5pdCwgd2hpY2ggaW1wbGllcyBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgbm90IGludGVuZGVkIGZvciBleHRlcm5hbCBsaW5raW5nIG9yIHVzZSBpbiBvdGhlciBtb2R1bGVzLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSByZWxhdGVkIHBhcnNpbmcgZnVuY3Rpb25zIHRvIHNlZSBob3cgdGhleSBmaXQgd2l0aGluIHRoZSBjb2RlLCBhbmQgdGhlaXIgcmVsYXRpb24gdG8gdGhlIHN0YXRpYyBvbmUuIExldCBtZSBtb3ZlIG9uIHRvIGV4YW1pbmluZyBgc2htZW1fcGFyc2VfaHVnZWAgbm93LCB0byBzZWUgaG93IHRoZSBvdGhlciBwYXJzaW5nIGZ1bmN0aW9ucyBhcmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBzaGFyZWQgbWVtb3J5IHBhcnNpbmcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NTc0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMTozNi4yMTA2Mjk3NTFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTA1ODAxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2htZW1fcGFyc2VfaHVnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zaG1lbS5jPTYyNj1zdGF0aWMgdW5zaWduZWQgaW50IHNobWVtX2h1Z2VfZ2xvYmFsX2VuYWJsZWQoc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtNjY5LVxcbm1tL3NobWVtLmM6NjcwOnN0YXRpYyBpbnQgc2htZW1fcGFyc2VfaHVnZShjb25zdCBjaGFyICpzdHIpXFxubW0vc2htZW0uYy02NzEte1xcbi0tXFxubW0vc2htZW0uYz01NDQyPXN0YXRpYyBzc2l6ZV90IHNobWVtX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9zaG1lbS5jLTU0NTQtXFxubW0vc2htZW0uYzo1NDU1OlxcdGh1Z2UgPSBzaG1lbV9wYXJzZV9odWdlKHRtcCk7XFxubW0vc2htZW0uYy01NDU2LVxcdGlmIChodWdlID09IC1FSU5WQUwpXFxuLS1cXG5tbS9zaG1lbS5jPTU1Nzg9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdHJhbnNwYXJlbnRfaHVnZXBhZ2Vfc2htZW0oY2hhciAqc3RyKVxcbi0tXFxubW0vc2htZW0uYy01NTgxLVxcbm1tL3NobWVtLmM6NTU4MjpcXHRodWdlID0gc2htZW1fcGFyc2VfaHVnZShzdHIpO1xcbm1tL3NobWVtLmMtNTU4My1cXHRpZiAoaHVnZSA9PSAtRUlOVkFMKSB7XFxuLS1cXG5tbS9zaG1lbS5jPTU1OTM9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdHJhbnNwYXJlbnRfaHVnZXBhZ2VfdG1wZnMoY2hhciAqc3RyKVxcbi0tXFxubW0vc2htZW0uYy01NTk2LVxcbm1tL3NobWVtLmM6NTU5NzpcXHRodWdlID0gc2htZW1fcGFyc2VfaHVnZShzdHIpO1xcbm1tL3NobWVtLmMtNTU5OC1cXHRpZiAoaHVnZSBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6MzguMDAxMjEzOTI5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjIyNzU0NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBpbiBTaGFyZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyAoVEhQKSBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBzaGFyZWQgbWVtb3J5IGFuZCB0aGUgdG1wZnMgZmlsZXN5c3RlbS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IGBzaG1lbV9wYXJzZV9odWdlYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0J3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgYXMgYW4gZW50cnkgcG9pbnQuIFRoYXQgb3BlbnMgdXAgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCBzdGF0aWMuIEkgY2FuIG1ha2UgdXNlIG9mIHRoaW5ncyBsaWtlIGBzaG1lbV9hbGxvd2FibGVfaHVnZV9vcmRlcnNgLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBhbmQgYGRvX3NldF9wbWRgLlxuXG5UaGVuLCB3YWl0IGEgbWludXRlLCBJIGp1c3QgcmVhbGl6ZWQgYHNobWVtX2dldGF0dHJgICppcyogc3RhdGljLCBidXQgYmVjYXVzZSBpdCdzIGFuIGlub2RlIG9wZXJhdGlvbiwgaXQgY291bGQgYmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGBzdGF0YCBzeXNjYWxsIHdoZW4gb3BlcmF0aW5nIG9uIHRtcGZzLiBUaGlzIG1lYW5zIHRoZXJlJ3MgYSBsaW5rIHRvIHRoZSBrZXJuZWwgdGhhdCBJIGhhdmUgdG8gY29uc2lkZXIuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGlzLiBBcmUgdGhlcmUgYW55IG90aGVyIGZ1bmN0aW9ucyBJIG1heSBoYXZlIG1pc3NlZD9cblxuUmlnaHQsIGBzaG1lbV9lbmFibGVkX3N0b3JlYCBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCByZWFjaGFibGUgYnkgd3JpdGluZyB0byBgL3N5cy9rZXJuZWwvbW0vdHJhbnNwYXJlbnRfaHVnZXBhZ2Uvc2htZW1fZW5hYmxlZGAuIFRoaXMgb25lIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0J3MgYW5vdGhlciBjbGVhciBlbnRyeSBwb2ludCBmb3IgY29uZmlndXJpbmcgVEhQIGJlaGF2aW9yLiBJIG5lZWQgdG8ga2VlcCB0aGlzIGluIG1pbmQuXG5cbkhvd2V2ZXIsIGBzZXR1cF90cmFuc3BhcmVudF9odWdlcGFnZV9zaG1lbWAgYW5kIGBzZXR1cF90cmFuc3BhcmVudF9odWdlcGFnZV90bXBmc2AgYXJlIGJvdGggbWFya2VkIGFzIGBfX2luaXRgIGZ1bmN0aW9ucy4gVGhhdCBtZWFucyB0aGV5J3JlIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCB3aGljaCBpcyBsZXNzIGludGVyZXN0aW5nIGZvciBvbmdvaW5nIG9wZXJhdGlvbmFsIGNvbnNpZGVyYXRpb25zLiBUaGUgc2FtZSBnb2VzIGZvciBgaHVnZXBhZ2VfaW5pdF9zeXNmc2AsIGBodWdlcGFnZV9pbml0YCwgYW5kIGBwZ3RhYmxlX2xlYWZfc3VwcG9ydF9pbml0YCwgYWxsIG9mIHdoaWNoIGFyZSBgX19pbml0YC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyBsb29rIGF0IGBuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHNgIGluIGBkcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jYC4gSXQgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBodWdlcGFnZXMgaW4gdGhlIG5vbi12b2xhdGlsZSBtZW1vcnkgZGV2aWNlIGRyaXZlci5cblxuU28gdGhlIG1haW4gcG9pbnRzIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlbid0IGluaXQsIGFuZCBzeXNmcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNTMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6NDMuMjYzNDkxOTY5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU5MTgyNTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jPTg0PXN0YXRpYyBzc2l6ZV90IGFsaWduX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy05MS1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjkyOnN0YXRpYyB1bnNpZ25lZCBsb25nICpuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHModW5zaWduZWQgbG9uZyAqYWxpZ25tZW50cylcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTkzLXtcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MTE5PXN0YXRpYyBzc2l6ZV90IGFsaWduX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmMtMTI4LVxcdHJjID0gbmRfc2l6ZV9zZWxlY3Rfc3RvcmUoZGV2LCBidWYsIFxcdTAwMjZuZF9wZm4tXFx1MDAzZWFsaWduLFxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM6MTI5OlxcdFxcdFxcdG5kX3Bmbl9zdXBwb3J0ZWRfYWxpZ25tZW50cyhhbGlnbnMpKTtcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTEzMC1cXHRkZXZfZGJnKGRldiwgXFxcInJlc3VsdDogJXpkIHdyb3RlOiAlcyVzXFxcIiwgcmMsIGJ1ZixcXG4tLVxcbmRyaXZlcnMvbnZkaW1tL3Bmbl9kZXZzLmM9MjQzPXN0YXRpYyBzc2l6ZV90IHN1cHBvcnRlZF9hbGlnbm1lbnRzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9udmRpbW0vcGZuX2RldnMuYy0yNDgtXFx0cmV0dXJuIG5kX3NpemVfc2VsZWN0X3Nob3coMCxcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjI0OTpcXHRcXHRcXHRuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHMoYWxpZ25zKSwgYnVmKTtcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTI1MC19XFxuLS1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jPTQxOD1zdGF0aWMgYm9vbCBuZF9zdXBwb3J0ZWRfYWxpZ25tZW50KHVuc2lnbmVkIGxvbmcgYWxpZ24pXFxuLS1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTQyNS1cXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jOjQyNjpcXHRuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHMoc3VwcG9ydGVkKTtcXG5kcml2ZXJzL252ZGltbS9wZm5fZGV2cy5jLTQyNy1cXHRmb3IgKGkgPSAwOyBzdXBwb3J0ZWRbaV07IGkrKylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6NDUuMDIyNjgxOTM4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDU0ODkzMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgdGhvdWdodCBwcm9jZXNzIHVuZm9sZHM6XG5cbioqQ2hlY2tpbmcgREFYIEFsaWdubWVudCBEZXRhaWxzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgc29tZSBEQVggY29kZSwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBwZXJzaXN0ZW50IG1lbW9yeSBhbmQgYWxpZ25tZW50LiBJIHNlZSB0aGF0IGBuZF9wZm5fc3VwcG9ydGVkX2FsaWdubWVudHNgIGFuZCBgbmRfcGZuX2RlZmF1bHRfYWxpZ25tZW50YCBhcmUgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlOyB0aGV5J3JlIHByb2JhYmx5IGNvbmZpZ3VyYXRpb24gZGV0YWlscyBzcGVjaWZpYyB0byB0aGlzIGRyaXZlciBhbmQgbm90IHNvbWV0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGdsb2JhbGx5IGFjY2Vzc2libGUgb3IgbW9kaWZpZWQgZXh0ZXJuYWxseS5cblxuTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgYWxpZ25tZW50IHZhbHVlcyBhcmUgdXNlZCBhbmQgdmFsaWRhdGVkIHdpdGhpbiB0aGUgREFYIGNvbnRleHQuIFdoZXJlIHdvdWxkIEkgZXhwZWN0IHRvIHNlZSBzdWNoIGNoZWNrcz8gQWgsIHllcy4gVGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBkYXhfYWxpZ25fdmFsaWRgIGZ1bmN0aW9uLiBJdCdzIGluIGBkcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oYCwgc28gbGV0J3MgbmF2aWdhdGUgdGhlcmUgYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbG9naWMgdGhhdCBkZXRlcm1pbmVzIGlmIGEgcmVxdWVzdGVkIERBWCBhbGlnbm1lbnQgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGFuZCByZWFzb25hYmxlIHdpdGhpbiB0aGUgc3lzdGVtJ3MgREFYIGNhcGFiaWxpdGllcy4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzY0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6NDguNDI4MTc0MTI0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA3NTA1NDg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRheF9hbGlnbl92YWxpZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2RheC9idXMuYz0xMjM5PXN0YXRpYyBzc2l6ZV90IGFsaWduX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2RheC9idXMuYy0xMjUwLVxcbmRyaXZlcnMvZGF4L2J1cy5jOjEyNTE6XFx0aWYgKCFkYXhfYWxpZ25fdmFsaWQodmFsKSlcXG5kcml2ZXJzL2RheC9idXMuYy0xMjUyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaD0xMTk9cGh5c19hZGRyX3QgZGF4X3Bnb2ZmX3RvX3BoeXMoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIHBnb2ZmX3QgcGdvZmYsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oLTEyMS0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaDoxMjI6c3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxcbmRyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgtMTIzLXtcXG4tLVxcbmRyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgtMTMyLSNlbHNlXFxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaDoxMzM6c3RhdGljIGlubGluZSBib29sIGRheF9hbGlnbl92YWxpZCh1bnNpZ25lZCBsb25nIGFsaWduKVxcbmRyaXZlcnMvZGF4L2RheC1wcml2YXRlLmgtMTM0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6NTAuMjM1Njg4MjUxWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNjU5NDc0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtleSBGdW5jdGlvbnMgYW5kIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgdGhhdCBgZGF4X2FsaWduX3ZhbGlkYCBpcyBkZWZpbmVkIGlubGluZS4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlc2Ugc3ltYm9scyBhcyBiZWluZyB0aGUgcHJpbWFyeSBhcmVhcyBvZiBpbnRlcmVzdCwgZm9yIG5vdzogYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCwgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGFuZCBgZG9fc2V0X3BtZGAuIFRoZXkgbG9vayBsaWtlIHRoZXknbGwgYmUgdGhlIGZ1bmN0aW9ucyB0byB3YXRjaC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBvdGhlciBrZXkgZnVuY3Rpb25zIEknbSBtaXNzaW5nLiBMZXQncyBkaWcgaW50byBgbW0vZGVidWdfdm1fcGd0YWJsZS5jYC4gSG1tbSwgYWxsIHRob3NlIGZ1bmN0aW9ucyBsaXN0ZWQg4oCTIGBwbWRfYmFzaWNfdGVzdHNgLCBgcG1kX2FkdmFuY2VkX3Rlc3RzYCwgZXRjLiDigJMgYXBwZWFyIHRvIGJlIGBfX2luaXRgIGZ1bmN0aW9ucy4gUHJvYmFibHkgbm90IHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGxpZXMsIGFsdGhvdWdoIHRoZXkgY291bGQgYmUgY3JpdGljYWwgZm9yIGRlYnVnZ2luZy5cblxuQWxyaWdodCwgdGhlIG1haW4gZnVuY3Rpb25hbCBjaGFuZ2VzIGxpa2VseSBjZW50ZXIgYXJvdW5kIHRoZXNlIGZpbGVzOiBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9zaG1lbS5jYCwgYW5kIGBtbS9tZW1vcnkuY2AuIEkgbmVlZCB0byByZXZpZXcgdGhlc2UgbW9kdWxlcyB0byBzZWUgd2hhdCBjaGFuZ2VzIHdlcmUgbWFkZS5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRob3NlIHByaW1hcnkgZnVuY3Rpb25zIGFnYWluLiBZZXAsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgZ2xvYmFsLiBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpcyBhbHNvIGdsb2JhbC4gQW5kIGBkb19zZXRfcG1kYCBpcyBnbG9iYWwgdG9vLiBHb29kLlxuXG5Ob3csIEkgc2hvdWxkIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTGV0J3MgbG9vayBhdCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgc2luY2UgdGhhdCBzZWVtcyB0byBiZSB0aGUgbWFpbiBkcml2ZXIuIFdoYXQgZWxzZSBpcyB0aGVyZT8gYENPTkZJR19TSE1FTWAgaXMgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIGl0J3MgcHJvYmFibHkgbm90IGEgaGlnaCBwcmlvcml0eSB0byBjaGVjay4gSSBhbHNvIG5lZWQgdG8gY2hlY2sgYENPTkZJR19EQVhgIGZvciBgZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaGAsIGFuZCBgQ09ORklHX05WRElNTV9QRk5gIGZvciBgZHJpdmVycy9udmRpbW0vcGZuX2RldnMuY2AuIEFuZCBgQ09ORklHX0RFQlVHX1ZNX1BHVEFCTEVgIGZvciBgbW0vZGVidWdfdm1fcGd0YWJsZS5jYC5cblxuUmlnaHQsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY2hlY2sgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgIGZvciB0aGUgZGVwZW5kZW5jaWVzLiBJdCBpcyBsaWtlbHkgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY5NzcsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDE6NTcuNjAxNjM5MzExWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA3OTk1NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTgyOT1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODMxLVxcbm1tL0tjb25maWc6ODMyOm1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMy1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NTA9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg1NS1cXG5tbS9LY29uZmlnOjg1NjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NTctXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NjItXFxubW0vS2NvbmZpZzo4NjM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg2NC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzEtXFxubW0vS2NvbmZpZzo4NzI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04NzMtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg3OT1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctODg4LVxcbm1tL0tjb25maWc6ODg5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy04OTAtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg5OC1cXG5tbS9LY29uZmlnOjg5OTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkwMC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkwNi1cXG5tbS9LY29uZmlnOjkwNzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTA4LVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MTQtXFxubW0vS2NvbmZpZzo5MTU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MTYtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05MjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTkzMy1cXG5tbS9LY29uZmlnOjkzNDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTM1LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NDItXFxubW0vS2NvbmZpZzo5NDM6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NDQtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTAtXFxubW0vS2NvbmZpZzo5NTE6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk1Mi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTU4LVxcbm1tL0tjb25maWc6OTU5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTYwLVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMDY6MDI6MDAuNDA5NjQxNDQxWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTg4NTczMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGl0ZW0gaGVyZSBpcyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJ2xsIGRlZmluaXRlbHkgYmUgaW5jbHVkaW5nIHRoYXQgaW4gYEVuYWJsZUNvbmZpZ3NgLiBUaGF0J3MgdGhlIGNvcmUgb2Ygd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguXG5cbk5vdywgbGV0J3MgdmVyaWZ5IHRoYXQgdGhlIGtleSBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdCBhcmUgaW5kZWVkIGFjY2Vzc2libGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhleSdyZSBub3Qgc3RhdGljIGFuZCB0aGVyZWZvcmUgbm90IHN1YmplY3QgdG8gdW5leHBlY3RlZCBzY29wZSByZXN0cmljdGlvbnMuIEkndmUgY29uZmlybWVkIHRoYXQgYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AgaXMgbm90IHN0YXRpYzsgaXQncyBkZWZpbmVkIGluIGJvdGggYGluY2x1ZGUvbGludXgvc2htZW1fZnMuaGAgYW5kIGBtbS9zaG1lbS5jYC4gR29vZC4gTmV4dCwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBpcyBhbHNvIGdsb2JhbGx5IGFjY2Vzc2libGUsIGFwcGVhcmluZyBpbiBgaW5jbHVkZS9saW51eC9odWdlX21tLmhgIGFuZCBgbW0vaHVnZV9tZW1vcnkuY2AuIEZpbmFsbHksIGBkb19zZXRfcG1kYCBpcyBhbHNvIG5vdCBzdGF0aWM7IGl0J3MgaW4gYGluY2x1ZGUvbGludXgvbW0uaGAgYW5kIGBtbS9tZW1vcnkuY2AuIFBlcmZlY3QuXG5cbkkgZGlkIGJyaWVmbHkgY29uc2lkZXIgYHNobWVtX2dldGF0dHJgLCBidXQgc2luY2UgaXQncyBhbiBpbm9kZSBvcGVyYXRpb24sIGFuZCBpdCdzIGFzc2lnbmVkIHRvIGBpbm9kZV9vcGVyYXRpb25zLmdldGF0dHJgLCBhbmQgaXQncyBub3QgYmVpbmcgdXNlZCwgdGhlbiBpdCdzIGZpbmUuIFNvIEknbGwgc3RpY2sgd2l0aCB0aGUgZ2xvYmFsIGZ1bmN0aW9uczogYHNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc2AsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGFuZCBgZG9fc2V0X3BtZGAuXG5cbkkgd2VudCBiYWNrIGFuZCBkb3VibGUtY2hlY2tlZCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZTpcbiogICBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLlxuKiAgIGBkb19zZXRfcG1kYCBpcyBhIGdsb2JhbCBmdW5jdGlvbi5cbiogICBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCBpcyBhbHNvIGEgZ2xvYmFsIGZ1bmN0aW9uLlxuXG5UaGlzIHBhdGNoIGlzIHNpZ25pZmljYW50LiBJdCdzIGZ1bmRhbWVudGFsbHkgY2hhbmdpbmcgaG93IFRIUCBzdXBwb3J0IGlzIGRldGVjdGVkIGFuZCBpbml0aWFsaXplZCwgc3dpdGNoaW5nIGZyb20gYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB0byBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYC4gVGhpcyBpcyBjb3JlIE1NIGxvZ2ljLCBhZmZlY3RpbmcgVEhQLCBzaG1lbSwgZGF4LCBhbmQgbnZkaW1tLCB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgUE1EIGFuZCBQVUQgb3JkZXJzIG9uIENQVXMgd2l0aG91dCBQTUQgbGVhdmVzLiBUaGUgY29kZSBpcyBmdW5jdGlvbmFsLCBhbmQgdGhlIGxvZ2ljIGlzIHJlYWNoYWJsZS5cblxuVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5NeSBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlOiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgc2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzYCwgYW5kIGBkb19zZXRfcG1kYC5cblxuQW5kIGFnYWluLCBteSBgRW5hYmxlQ29uZmlnc2Agd2lsbCBpbmNsdWRlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuXG5cbk15IHJlYXNvbmluZyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBtb2RpZmllcyBob3cgVEhQIHN1cHBvcnQgaXMgY2hlY2tlZCBhbmQgaW5pdGlhbGl6ZWQsIHJlcGxhY2luZyBgaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKClgIHdpdGggYHBndGFibGVfaGFzX3BtZF9sZWF2ZXMoKWAuIEl0IG1vZGlmaWVzIGNvcmUgTU0gbG9naWMgKFRIUCwgc2htZW0sIGRheCwgbnZkaW1tKSB0byBmaWx0ZXIgb3V0IFBNRCBhbmQgUFVEIG9yZGVycyBpZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgUE1EIGxlYXZlcy4gVGhpcyBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjA0LCJPdXRwdXRUb2tlbnMiOjE1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQwNjowMjoxMC41OTgyMTc3ODFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYwNTI3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiLFxuICAgIFwic2htZW1fYWxsb3dhYmxlX2h1Z2Vfb3JkZXJzXCIsXG4gICAgXCJkb19zZXRfcG1kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaG93IFRIUCBzdXBwb3J0IGlzIGNoZWNrZWQgYW5kIGluaXRpYWxpemVkLCByZXBsYWNpbmcgYGhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpYCB3aXRoIGBwZ3RhYmxlX2hhc19wbWRfbGVhdmVzKClgLiBJdCBtb2RpZmllcyBjb3JlIE1NIGxvZ2ljIChUSFAsIHNobWVtLCBkYXgsIG52ZGltbSkgdG8gZmlsdGVyIG91dCBQTUQgYW5kIFBVRCBvcmRlcnMgaWYgdGhlIENQVSBkb2VzIG5vdCBzdXBwb3J0IFBNRCBsZWF2ZXMuIFRoaXMgaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgICBcInNobWVtX2FsbG93YWJsZV9odWdlX29yZGVyc1wiLFxuICAgIFwiZG9fc2V0X3BtZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBUSFAgc3VwcG9ydCBpcyBjaGVja2VkIGFuZCBpbml0aWFsaXplZCwgcmVwbGFjaW5nIGBoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKWAgd2l0aCBgcGd0YWJsZV9oYXNfcG1kX2xlYXZlcygpYC4gSXQgbW9kaWZpZXMgY29yZSBNTSBsb2dpYyAoVEhQLCBzaG1lbSwgZGF4LCBudmRpbW0pIHRvIGZpbHRlciBvdXQgUE1EIGFuZCBQVUQgb3JkZXJzIGlmIHRoZSBDUFUgZG9lcyBub3Qgc3VwcG9ydCBQTUQgbGVhdmVzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowtkr4z[1] Phase: Succeeded StartedAt: 2026-07-25 06:02:17 +0000 UTC FinishedAt: 2026-07-25 06:02:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 06:02:17 +0000 UTC FinishedAt: 2026-07-25 06:02:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2] Phase: Succeeded StartedAt: 2026-07-25 06:02:17 +0000 UTC FinishedAt: 2026-07-25 10:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:02:17 +0000 UTC FinishedAt: 2026-07-25 10:22:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:02:17 +0000 UTC FinishedAt: 2026-07-25 06:02:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:02:17 +0000 UTC FinishedAt: 2026-07-25 06:02:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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-workflowtkr4z/series-workflowtkr4z-convert-artifact-1207029281/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:02:27 +0000 UTC FinishedAt: 2026-07-25 06:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:02:27 +0000 UTC FinishedAt: 2026-07-25 06:33:55 +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:*ced0ae5e-307e-4304-be8a-72a174815ede,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-workflowtkr4z/series-workflowtkr4z-convert-artifact-1207029281/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": "3398cbe3-70b7-4b2d-94e2-f970f6ff0d79", "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-workflowtkr4z/series-workflowtkr4z-build-action-678602063/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:02:27 +0000 UTC FinishedAt: 2026-07-25 06:33:50 +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:*ced0ae5e-307e-4304-be8a-72a174815ede,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-workflowtkr4z/series-workflowtkr4z-convert-artifact-1207029281/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": "3398cbe3-70b7-4b2d-94e2-f970f6ff0d79", "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-workflowtkr4z/series-workflowtkr4z-build-action-678602063/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:33:55 +0000 UTC FinishedAt: 2026-07-25 06:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:33:55 +0000 UTC FinishedAt: 2026-07-25 06:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:33:55 +0000 UTC FinishedAt: 2026-07-25 06:34:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:33:55 +0000 UTC FinishedAt: 2026-07-25 06:34:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-workflowtkr4z/series-workflowtkr4z-convert-artifact-911574900/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:34:05 +0000 UTC FinishedAt: 2026-07-25 06:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:34:05 +0000 UTC FinishedAt: 2026-07-25 06:35:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3398cbe3-70b7-4b2d-94e2-f970f6ff0d79,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-workflowtkr4z/series-workflowtkr4z-build-action-678602063/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-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:36:05 +0000 UTC FinishedAt: 2026-07-25 06:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:36:05 +0000 UTC FinishedAt: 2026-07-25 06:36:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:36:05 +0000 UTC FinishedAt: 2026-07-25 07:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:36:05 +0000 UTC FinishedAt: 2026-07-25 07:10:26 +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:*ced0ae5e-307e-4304-be8a-72a174815ede,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-workflowtkr4z/series-workflowtkr4z-convert-artifact-911574900/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": "c3ad67c7-6496-468f-9217-a809561207ac", "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-workflowtkr4z/series-workflowtkr4z-build-action-3935616064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 06:36:05 +0000 UTC FinishedAt: 2026-07-25 07:10:16 +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:*ced0ae5e-307e-4304-be8a-72a174815ede,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-workflowtkr4z/series-workflowtkr4z-convert-artifact-911574900/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": "c3ad67c7-6496-468f-9217-a809561207ac", "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-workflowtkr4z/series-workflowtkr4z-build-action-3935616064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:10:26 +0000 UTC FinishedAt: 2026-07-25 07:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:10:26 +0000 UTC FinishedAt: 2026-07-25 07:10:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:10:26 +0000 UTC FinishedAt: 2026-07-25 07:12:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:10:26 +0000 UTC FinishedAt: 2026-07-25 07:12:10 +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:*c3ad67c7-6496-468f-9217-a809561207ac,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-workflowtkr4z/series-workflowtkr4z-build-action-3935616064/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-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:12:20 +0000 UTC FinishedAt: 2026-07-25 10:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:12:20 +0000 UTC FinishedAt: 2026-07-25 10:22:03 +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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"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:*3398cbe3-70b7-4b2d-94e2-f970f6ff0d79,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3ad67c7-6496-468f-9217-a809561207ac,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-workflowtkr4z/series-workflowtkr4z-build-action-678602063/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-workflowtkr4z/series-workflowtkr4z-build-action-3935616064/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:12:20 +0000 UTC FinishedAt: 2026-07-25 07:12:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:12:20 +0000 UTC FinishedAt: 2026-07-25 07:12:25 +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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"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-workflowtkr4z/series-workflowtkr4z-convert-artifact-3340356253/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:12:20 +0000 UTC FinishedAt: 2026-07-25 07:12:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:12:20 +0000 UTC FinishedAt: 2026-07-25 07:12:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:12:20 +0000 UTC FinishedAt: 2026-07-25 07:12:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:12:47 +0000 UTC FinishedAt: 2026-07-25 10:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtkr4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"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":["__thp_vma_allowable_orders","shmem_allowable_huge_orders","do_set_pmd"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"fbae93ac88a26f1a36e5861d6f76ed9594b2c93a","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"19204fbb-6129-4faa-aa21-e06ec7fb2896","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-07-25 07:12:47 +0000 UTC FinishedAt: 2026-07-25 10:21:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3398cbe3-70b7-4b2d-94e2-f970f6ff0d79,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c3ad67c7-6496-468f-9217-a809561207ac,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-workflowtkr4z/series-workflowtkr4z-build-action-678602063/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-workflowtkr4z/series-workflowtkr4z-build-action-3935616064/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-workflowtkr4z/series-workflowtkr4z-convert-artifact-3340356253/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,}