Name: series-workflow64hgc Phase: Succeeded StartedAt: 2026-08-25 14:26:56 +0000 UTC FinishedAt: 2026-08-25 18:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[0] Phase: Succeeded StartedAt: 2026-08-25 14:26:56 +0000 UTC FinishedAt: 2026-08-25 14:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 14:26:56 +0000 UTC FinishedAt: 2026-08-25 14:59:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON", "SWAP", "MEMCG", "CGROUPS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON", "SWAP", "MEMCG", "CGROUPS" ], "series_id": "f13bdcdd-222c-4f3c-ad2e-565181dd9893" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_writeback_dropbehind_folio", "remove_mapping_reclaim", "__swap_cache_alloc_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWFwcGluZ19yZWNsYWltJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgZm9saW9zIGluIHRoZSBzd2FwIGNhY2hlLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgYSBcJiMzNDtkcm9wYmVoaW5kXCYjMzQ7IG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrLiBJdCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCBmb3IgdGhlIHN3YXAgY2FjaGUgKHJldHVybmluZyB0aGVtIG9mZi1MUlUpIGFuZCBtYW5hZ2VzIHRoZWlyIHJlZmVyZW5jZXMgZHVyaW5nIHdyaXRlYmFjay5cblxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBwYWdlIHJlZmVyZW5jZSBjb3VudGluZywgTFJVIGxpc3QgbWFuYWdlbWVudCwgYW5kIHN3YXAgY2FjaGUgb3BlcmF0aW9ucy4gVGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzIChlLmcuLCBmb2xpb3MgbGVmdCBvZmYgdGhlIExSVSksIG9yIGludmFsaWQgcGFnZSBzdGF0ZXMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZWJ1ZyBvcHRpb25zIChsaWtlIGBDT05GSUdfREVCVUdfVk1gKSwgYW5kIHBhZ2UgcmVmZXJlbmNlIHRyYWNraW5nLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IHBhcnNpbmcgbG9naWMgb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZm9saW9zIGFsbG9jYXRlZCBhcmUgcG9wdWxhdGVkIHZpYSBkZWNvbXByZXNzaW9uIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHN3YXAsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgZXhwb3NlZC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gZHJvcCBzd2FwIGNhY2hlIGZvbGlvcyBhZnRlciB6c3dhcCB3cml0ZWJhY2sgY29tcGxldGVzLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBMUlUgcG9sbHV0aW9uLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGFuZCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAsIGFuZCBtb2RpZmllcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCB0byB1c2UgdGhpcyBtZWNoYW5pc20uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAsIHpzd2FwLCBwYWdlIGNhY2hlKSB0aGF0IGFmZmVjdHMgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgYmVoYXZpb3IsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFlMDg2Mjk5ODY0MDQ5ZWQ3NzY5OGVhZmVjMGVjMzc2NjBkZWYxNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxNDoyOTowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4ZjBmNjhlMjQ1YmFhLi4yOWVjNjBkY2FlMjEzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzc0LDYgJiM0MzszNzQsOCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xuIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0Mztsb25nIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTtcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxuIGV4dGVybiBpbnQgcmVjbGFpbV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbkBAIC00NjUsNiAmIzQzOzQ2Nyw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XG4gICovXG4gYm9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4mIzQzO3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7XG4gLyogQWxsb2NhdGUgLyBmcmVlIChoaWJlcm5hdGlvbikgZXhjbHVzaXZlIGVudHJpZXMgKi9cbiBzd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpO1xuIHZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xuQEAgLTQ3NSw2ICYjNDM7NDc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4gfVxuIFxuICNlbHNlIC8qIENPTkZJR19TV0FQICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIHtcbiBcdHJldHVybiBOVUxMO1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggZDcyMTk4NmQ1ZjQ2NS4uMDQwYzk3YTEyMWRlZCAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jXG5AQCAtMTY4Niw2ICYjNDM7MTY4Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7XG4gICovXG4gdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuJiM0MztcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xuJiM0MztcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4gXHQvKlxuQEAgLTE2OTUsNyAmIzQzOzE2OTcsMjQgQEAgdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHQgKiByZXVzZWQgYmVmb3JlIHRoZSBmb2xpb193YWtlX2JpdCgpLlxuIFx0ICovXG4gXHRmb2xpb19nZXQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNhbXBsZSB0aGlzIGJlZm9yZSBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoKSBjbGVhcnNcbiYjNDM7XHQgKiBQR193cml0ZWJhY2s6IHVudGlsIHRoZW4gYSByYWNpbmcgc3dhcGluIGNhbm5vdCByZW1vdmUgdGhlIGZvbGlvIGZyb21cbiYjNDM7XHQgKiB0aGUgc3dhcCBjYWNoZS4gQWZ0ZXJ3YXJkcyBpdCBjYW4sIGFuZCB0aGUgZHJvcCBiZWxvdyB0aGVuIGZpbmRzIGFcbiYjNDM7XHQgKiBub24tc3dhcGNhY2hlIGZvbGlvIGFuZCBwdXRzIGl0IGJhY2sgb24gdGhlIExSVSBpbnN0ZWFkLiBUaGVcbiYjNDM7XHQgKiByZWZlcmVuY2UgdGFrZW4gYWJvdmUga2VlcHMgdGhlIGZvbGlvIGFsaXZlIGFjcm9zcyB0aGF0IHdpbmRvdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2FwX2Ryb3BiZWhpbmQgPSBmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcbiYjNDM7XG4gXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XG4mIzQzO1x0XHRzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jXG5pbmRleCBiMjNmNDk0ZmNjODNkLi41ODZjNzljM2JiM2QyIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lvLmNcbkBAIC00NTYsNiAmIzQzOzQ1NiwxMyBAQCBzdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRiaW8tXHUwMDNlYmlfZW5kX2lvID0gZW5kX3N3YXBfYmlvX3dyaXRlO1xuIFx0YmlvX2FkZF9mb2xpb19ub2ZhaWwoYmlvLCBmb2xpbywgZm9saW9fc2l6ZShmb2xpbyksIDApO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRHJvcHBpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdGFrZXMgc2xlZXBpbmcgbG9ja3MsIHNvIHRoZVxuJiM0MztcdCAqIGNvbXBsZXRpb24gbXVzdCBub3QgcnVuIGluIGludGVycnVwdCBjb250ZXh0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuJiM0MztcdFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuJiM0MztcbiBcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbyk7XG4gXHRjb3VudF9zd3BvdXRfdm1fZXZlbnQoZm9saW8pO1xuIFx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTMwNCw5ICYjNDM7MzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA3MjdhMTdlZTc4MjExLi4yMzFmYTg3Y2JiZTBjIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC00ODMsMTMgJiM0Mzs0ODMsMTEgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIFxuLVx0LyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi9cbi1cdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbiBcbiAvKipcbi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbiYjNDM7ICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cbkBAIC01MDEsMTMgJiM0Mzs0OTksMTcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cbiAgKlxuJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlclxuJiM0MzsgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWVcbiYjNDM7ICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXG4mIzQzOyAqXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuXG4gICogUmV0dXJuOiBSZXR1cm5zIHRoZSBmb2xpbyBpZiBhbGxvY2F0aW9uIHN1Y2NlZWRlZCBhbmQgZm9saW8gaXMgaW4gdGhlIHN3YXBcbiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLlxuICAqL1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4mIzQzO3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiB7XG4gXHRpbnQgb3JkZXIsIGVycjtcbiBcdHN0cnVjdCBmb2xpbyAqcmV0O1xuQEAgLTUzNSw2ICYjNDM7NTM3LDQ3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8gLSBkcm9wIGEgZHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvXG4mIzQzOyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogdGFzayBjb250ZXh0LCB3aXRoIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgZm9saW9fZW5kX3dyaXRlYmFjaygpXG4mIzQzOyAqIGRvbmF0ZWQgdG8gdXMuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XG4mIzQzO1x0Zm9saW9fbG9jayhmb2xpbyk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkIG9mZiB0aGUgTFJVIGFuZCBub3RoaW5nIHJlLWFkZHMgaXQgaGVyZS4gKi9cbiYjNDM7XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbiYjNDM7XHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSlcbiYjNDM7XHRcdG1lbWNnID0gTlVMTDtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBHYXRlIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZ1xuJiM0MztcdCAqIHN3YXBpbiBtYXkgaGF2ZSBmcmVlZCB0aGUgc3dhcCBzbG90IChmb2xpb19mcmVlX3N3YXAoKSkgYW5kIGRyb3BwZWQgdGhlXG4mIzQzO1x0ICogZm9saW8gZnJvbSB0aGUgY2FjaGUsIGFuZCBpdCBtdXN0IG5vdCBydW4gb24gYSBub24tc3dhcGNhY2hlIGZvbGlvIChpdFxuJiM0MztcdCAqIHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJiMzOTtzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSB8fCBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHxcbiYjNDM7XHQgICAgIXJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3dhcF9hZGRyZXNzX3NwYWNlKGZvbGlvLVx1MDAzZXN3YXApLCBmb2xpbywgbWVtY2cpKSB7XG4mIzQzO1x0XHQvKiBSYWNlZDogdGhlIGZvbGlvIGlzIG5vdyBvd25lZCBieSB0aGUgc3dhcGluOyBwdXQgaXQgYmFjay4gKi9cbiYjNDM7XHRcdGZvbGlvX2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzQzO1x0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIElmIHdlIGFyZSB0aGUgb25seSB1c2VyLCB0aGVuIHRyeSB0byBmcmVlIHVwIHRoZSBzd2FwIGNhY2hlLlxuICAqXG5AQCAtNjQzLDEyICYjNDM7Njg2LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbiYjNDM7XHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzQzO1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIHBsdWcpO1xuIFx0aWYgKHJlYWRhaGVhZCkge1xuIFx0XHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcbkBAIC02ODMsMTIgJiM0Mzs3MjcsMTMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbiYjNDM7XHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZvbGlvO1xuIFxuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggODQ4YmQzZTVlZWUyYi4uNGNjM2EzZWQ2ZGI2ZSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTc4MCw2ICYjNDM7NzgwLDIyIEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGxvbmcgX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1lZCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFVuZnJlZXppbmcgdGhlIHJlZmNvdW50IHdpdGggMSBlZmZlY3RpdmVseVxuJiM0MztcdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbiYjNDM7XHRcdCAqIGF0b21pYyBvcGVyYXRpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG4mIzQzO1x0XHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiByZW1vdmVfbWFwcGluZygpIC0gQXR0ZW1wdCB0byByZW1vdmUgYSBmb2xpbyBmcm9tIGl0cyBtYXBwaW5nLlxuICAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS5cbkBAIC03OTQsMTYgJiM0Mzs4MTAsMjggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqL1xuIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHlcbi1cdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbi1cdFx0ICogYXRvbWljIG9wZXJhdGlvbi5cbi1cdFx0ICovXG4tXHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG4tXHRcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIC0gUmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZywgYXMgcmVjbGFpbSBkb2VzLlxuJiM0MzsgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXG4mIzQzOyAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHJlbW92ZS5cbiYjNDM7ICogQHRhcmdldF9tZW1jZzogVGhlIG1lbWNnIHRvIGNoYXJnZSB0aGUgZXZpY3Rpb24gc2hhZG93IHRvOyB0aGUgY2FsbGVyIG11c3RcbiYjNDM7ICogICAgICAgICAgICAgICAga2VlcCBpdCBhbGl2ZSBhY3Jvc3MgdGhlIGNhbGwuXG4mIzQzOyAqXG4mIzQzOyAqIExpa2UgcmVtb3ZlX21hcHBpbmcoKSwgYnV0IHN0b3JlcyBhIHdvcmtpbmdzZXQgZXZpY3Rpb24gc2hhZG93IHRoZSB3YXkgcGFnZVxuJiM0MzsgKiByZWNsYWltIGRvZXMsIHNvIHRoYXQgYSBsYXRlciByZWZhdWx0IGNhbiBiZSBkZXRlY3RlZCBhbmQgdGhlIGZvbGlvXG4mIzQzOyAqIHJlLWFjdGl2YXRlZC5cbiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHJlbW92ZWQgZnJvbSB0aGUgbWFwcGluZy4gIDAgaWYgdGhlIGZvbGlvXG4mIzQzOyAqIGNvdWxkIG5vdCBiZSByZW1vdmVkLlxuJiM0MzsgKiBDb250ZXh0OiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50IG9uIHRoZSBmb2xpbyBhbmRcbiYjNDM7ICogaG9sZCBpdHMgbG9jay5cbiYjNDM7ICovXG4mIzQzO2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgdHJ1ZSwgdGFyZ2V0X21lbWNnKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2UuLmQxNjgyMmE1MTZlOGQgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMTAwMCw4ICYjNDM7MTAwMCw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuJiM0MztcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4mIzQzO1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDQ1LDEyICYjNDM7MTA0NSwyNiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0LyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqL1xuIFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXG4tXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cbi1cdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbiYjNDM7XHRmb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRHJvcCBvdXIgcmVmZXJlbmNlIGJlZm9yZSBzdGFydGluZyB3cml0ZWJhY2sgc28gdGhlIHN3YXAgY2FjaGUgaG9sZHNcbiYjNDM7XHQgKiB0aGUgb25seSBvbmU6IHRoZSBkcm9wIGluIGZvbGlvX2VuZF93cml0ZWJhY2soKSBuZWVkcyB0aGF0IGZvclxuJiM0MztcdCAqIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSB0byBzdWNjZWVkLCBvdGhlcndpc2UgdGhlIGZvbGlvIGlzIGhhbmRlZFxuJiM0MztcdCAqIGJhY2sgdG8gcmVjbGFpbSBpbnN0ZWFkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90aGluZyBjYW4gZnJlZSB0aGUgZm9saW8gaW4gdGhlIG1lYW50aW1lOiB3ZSBob2xkIHRoZSBmb2xpbyBsb2NrXG4mIzQzO1x0ICogdW50aWwgd3JpdGViYWNrIHN0YXJ0cywgUEdfd3JpdGViYWNrIHRoZW4gYmxvY2tzIHN3YXAgY2FjaGUgcmVtb3ZhbCxcbiYjNDM7XHQgKiBhbmQgZm9saW9fZW5kX3dyaXRlYmFjaygpIHRha2VzIGl0cyBvd24gcmVmZXJlbmNlIGJlZm9yZSBjbGVhcmluZ1xuJiM0MztcdCAqIFBHX3dyaXRlYmFjayBhbmQgZG9uYXRlcyBpdCB0byB0aGUgZHJvcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4gXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcbiBcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4gb3V0OlxuIFx0aWYgKHJldCkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWFwcGluZ19yZWNsYWltJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGRyb3Agc3dhcCBjYWNoZSBmb2xpb3MgYWZ0ZXIgenN3YXAgd3JpdGViYWNrIGNvbXBsZXRlcywgYXZvaWRpbmcgdW5uZWNlc3NhcnkgTFJVIHBvbGx1dGlvbi4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBhbmQgbW9kaWZpZXMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgdG8gdXNlIHRoaXMgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChzd2FwLCB6c3dhcCwgcGFnZSBjYWNoZSkgdGhhdCBhZmZlY3RzIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGJlaGF2aW9yLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZTA4NjI5OTg2NDA0OWVkNzc2OThlYWZlYzBlYzM3NjYwZGVmMTVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTQ6Mjk6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDhmMGY2OGUyNDViYWEuLjI5ZWM2MGRjYWUyMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zNzQsNiAmIzQzOzM3NCw4IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzOwogbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7bG9uZyByZW1vdmVfbWFwcGluZ19yZWNsYWltKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCSAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX05VTUEpCiBleHRlcm4gaW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CkBAIC00NjUsNiAmIzQzOzQ2Nyw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7CiAgKi8KIGJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiYjNDM7dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzOwogLyogQWxsb2NhdGUgLyBmcmVlIChoaWJlcm5hdGlvbikgZXhjbHVzaXZlIGVudHJpZXMgKi8KIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7CiB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTsKQEAgLTQ3NSw2ICYjNDM7NDc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpCiB9CiAKICNlbHNlIC8qIENPTkZJR19TV0FQICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge30KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSkKIHsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCBkNzIxOTg2ZDVmNDY1Li4wNDBjOTdhMTIxZGVkIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0xNjg2LDYgJiM0MzsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTsKICAqLwogdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiYjNDM7CWJvb2wgc3dhcF9kcm9wYmVoaW5kOwomIzQzOwogCVZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7CiAKIAkvKgpAQCAtMTY5NSw3ICYjNDM7MTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbykKIAkgKiByZXVzZWQgYmVmb3JlIHRoZSBmb2xpb193YWtlX2JpdCgpLgogCSAqLwogCWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNhbXBsZSB0aGlzIGJlZm9yZSBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoKSBjbGVhcnMKJiM0MzsJICogUEdfd3JpdGViYWNrOiB1bnRpbCB0aGVuIGEgcmFjaW5nIHN3YXBpbiBjYW5ub3QgcmVtb3ZlIHRoZSBmb2xpbyBmcm9tCiYjNDM7CSAqIHRoZSBzd2FwIGNhY2hlLiBBZnRlcndhcmRzIGl0IGNhbiwgYW5kIHRoZSBkcm9wIGJlbG93IHRoZW4gZmluZHMgYQomIzQzOwkgKiBub24tc3dhcGNhY2hlIGZvbGlvIGFuZCBwdXRzIGl0IGJhY2sgb24gdGhlIExSVSBpbnN0ZWFkLiBUaGUKJiM0MzsJICogcmVmZXJlbmNlIHRha2VuIGFib3ZlIGtlZXBzIHRoZSBmb2xpbyBhbGl2ZSBhY3Jvc3MgdGhhdCB3aW5kb3cuCiYjNDM7CSAqLwomIzQzOwlzd2FwX2Ryb3BiZWhpbmQgPSBmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgJmFtcDsmYW1wOwomIzQzOwkJCSAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsKIAlmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwomIzQzOwlpZiAoc3dhcF9kcm9wYmVoaW5kKSB7CiYjNDM7CQlzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTsKIAlmb2xpb19wdXQoZm9saW8pOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jCmluZGV4IGIyM2Y0OTRmY2M4M2QuLjU4NmM3OWMzYmIzZDIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lvLmMKQEAgLTQ1Niw2ICYjNDM7NDU2LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmMoc3RydWN0IGZvbGlvICpmb2xpbywKIAliaW8tJmd0O2JpX2VuZF9pbyA9IGVuZF9zd2FwX2Jpb193cml0ZTsKIAliaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGZvbGlvLCBmb2xpb19zaXplKGZvbGlvKSwgMCk7CiAKJiM0MzsJLyoKJiM0MzsJICogRHJvcHBpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdGFrZXMgc2xlZXBpbmcgbG9ja3MsIHNvIHRoZQomIzQzOwkgKiBjb21wbGV0aW9uIG11c3Qgbm90IHJ1biBpbiBpbnRlcnJ1cHQgY29udGV4dC4KJiM0MzsJICovCiYjNDM7CWlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKQomIzQzOwkJYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwomIzQzOwogCWJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbyk7CiAJY291bnRfc3dwb3V0X3ZtX2V2ZW50KGZvbGlvKTsKIAlmb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmgKQEAgLTMwNCw5ICYjNDM7MzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7CiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7CiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwotc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCi0JCQkJICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7CiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi8KIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA3MjdhMTdlZTc4MjExLi4yMzFmYTg3Y2JiZTBjIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC00ODMsMTMgJiM0Mzs0ODMsMTEgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CiAKLQkvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqLwotCWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXJldHVybiBmb2xpbzsKIH0KIAogLyoqCi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgogICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3QKICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVybwpAQCAtNTAxLDEzICYjNDM7NDk5LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieQogICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLgogICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlcgomIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZQomIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy4KICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwCiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLgogICovCi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC01MzUsNiAmIzQzOzUzNyw0NyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvIC0gZHJvcCBhIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpbwomIzQzOyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWQKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IHRhc2sgY29udGV4dCwgd2l0aCB0aGUgcmVmZXJlbmNlIHRha2VuIGJ5IGZvbGlvX2VuZF93cml0ZWJhY2soKQomIzQzOyAqIGRvbmF0ZWQgdG8gdXMuCiYjNDM7ICovCiYjNDM7dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CiYjNDM7CWZvbGlvX2xvY2soZm9saW8pOwomIzQzOwomIzQzOwkvKiBUaGUgZm9saW8gd2FzIGFsbG9jYXRlZCBvZmYgdGhlIExSVSBhbmQgbm90aGluZyByZS1hZGRzIGl0IGhlcmUuICovCiYjNDM7CVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpCiYjNDM7CQltZW1jZyA9IE5VTEw7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBHYXRlIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZwomIzQzOwkgKiBzd2FwaW4gbWF5IGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZQomIzQzOwkgKiBmb2xpbyBmcm9tIHRoZSBjYWNoZSwgYW5kIGl0IG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW8gKGl0CiYjNDM7CSAqIHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJiMzOTtzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS4KJiM0MzsJICovCiYjNDM7CWlmICghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fAomIzQzOwkgICAgIXJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3dhcF9hZGRyZXNzX3NwYWNlKGZvbGlvLSZndDtzd2FwKSwgZm9saW8sIG1lbWNnKSkgewomIzQzOwkJLyogUmFjZWQ6IHRoZSBmb2xpbyBpcyBub3cgb3duZWQgYnkgdGhlIHN3YXBpbjsgcHV0IGl0IGJhY2suICovCiYjNDM7CQlmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsJCWZvbGlvX2FkZF9scnUoZm9saW8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsKJiM0MzsJZm9saW9fdW5sb2NrKGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogSWYgd2UgYXJlIHRoZSBvbmx5IHVzZXIsIHRoZW4gdHJ5IHRvIGZyZWUgdXAgdGhlIHN3YXAgY2FjaGUuCiAgKgpAQCAtNjQzLDEyICYjNDM7Njg2LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLAogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwotCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpOwomIzQzOwkJZm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAJc3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTsKIAlpZiAocmVhZGFoZWFkKSB7CiAJCWZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pOwpAQCAtNjgzLDEyICYjNDM7NzI3LDEzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsCiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpOwogCXJldHVybiBmb2xpbzsKIH0KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggODQ4YmQzZTVlZWUyYi4uNGNjM2EzZWQ2ZGI2ZSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc4MCw2ICYjNDM7NzgwLDIyIEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBsb25nIF9fcmVtb3ZlX21hcHBpbmdfdW5mcmVlemUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWVkLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKQomIzQzO3sKJiM0MzsJaWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFVuZnJlZXppbmcgdGhlIHJlZmNvdW50IHdpdGggMSBlZmZlY3RpdmVseQomIzQzOwkJICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXIKJiM0MzsJCSAqIGF0b21pYyBvcGVyYXRpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7CiYjNDM7CQlyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qKgogICogcmVtb3ZlX21hcHBpbmcoKSAtIEF0dGVtcHQgdG8gcmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZy4KICAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS4KQEAgLTc5NCwxNiAmIzQzOzgxMCwyOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAgKi8KIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JaWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkgewotCQkvKgotCQkgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHkKLQkJICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXIKLQkJICogYXRvbWljIG9wZXJhdGlvbi4KLQkJICovCi0JCWZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7Ci0JCXJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Ci0JfQotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgLSBSZW1vdmUgYSBmb2xpbyBmcm9tIGl0cyBtYXBwaW5nLCBhcyByZWNsYWltIGRvZXMuCiYjNDM7ICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLgomIzQzOyAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHJlbW92ZS4KJiM0MzsgKiBAdGFyZ2V0X21lbWNnOiBUaGUgbWVtY2cgdG8gY2hhcmdlIHRoZSBldmljdGlvbiBzaGFkb3cgdG87IHRoZSBjYWxsZXIgbXVzdAomIzQzOyAqICAgICAgICAgICAgICAgIGtlZXAgaXQgYWxpdmUgYWNyb3NzIHRoZSBjYWxsLgomIzQzOyAqCiYjNDM7ICogTGlrZSByZW1vdmVfbWFwcGluZygpLCBidXQgc3RvcmVzIGEgd29ya2luZ3NldCBldmljdGlvbiBzaGFkb3cgdGhlIHdheSBwYWdlCiYjNDM7ICogcmVjbGFpbSBkb2VzLCBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmUgZGV0ZWN0ZWQgYW5kIHRoZSBmb2xpbwomIzQzOyAqIHJlLWFjdGl2YXRlZC4KJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgcGFnZXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXBwaW5nLiAgMCBpZiB0aGUgZm9saW8KJiM0MzsgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC4KJiM0MzsgKiBDb250ZXh0OiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50IG9uIHRoZSBmb2xpbyBhbmQKJiM0MzsgKiBob2xkIGl0cyBsb2NrLgomIzQzOyAqLwomIzQzO2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKG1hcHBpbmcsIGZvbGlvLCB0cnVlLCB0YXJnZXRfbWVtY2cpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDc2MWNkNjk5ZTBhM2UuLmQxNjgyMmE1MTZlOGQgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMTAwMCw4ICYjNDM7MTAwMCw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCXJldHVybiAtRUVYSVNUOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKLQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKLQkJCQkgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiYjNDM7CWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCiYjNDM7CQkJCQkgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiAJcHV0X3N3YXBfZGV2aWNlKHNpKTsKIAogCS8qCkBAIC0xMDQ1LDEyICYjNDM7MTA0NSwyNiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCS8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi8KIAlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKIAotCS8qIG1vdmUgaXQgdG8gdGhlIHRhaWwgb2YgdGhlIGluYWN0aXZlIGxpc3QgYWZ0ZXIgZW5kX3dyaXRlYmFjayAqLwotCWZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTsKJiM0MzsJZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEcm9wIG91ciByZWZlcmVuY2UgYmVmb3JlIHN0YXJ0aW5nIHdyaXRlYmFjayBzbyB0aGUgc3dhcCBjYWNoZSBob2xkcwomIzQzOwkgKiB0aGUgb25seSBvbmU6IHRoZSBkcm9wIGluIGZvbGlvX2VuZF93cml0ZWJhY2soKSBuZWVkcyB0aGF0IGZvcgomIzQzOwkgKiByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgdG8gc3VjY2VlZCwgb3RoZXJ3aXNlIHRoZSBmb2xpbyBpcyBoYW5kZWQKJiM0MzsJICogYmFjayB0byByZWNsYWltIGluc3RlYWQuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGhpbmcgY2FuIGZyZWUgdGhlIGZvbGlvIGluIHRoZSBtZWFudGltZTogd2UgaG9sZCB0aGUgZm9saW8gbG9jawomIzQzOwkgKiB1bnRpbCB3cml0ZWJhY2sgc3RhcnRzLCBQR193cml0ZWJhY2sgdGhlbiBibG9ja3Mgc3dhcCBjYWNoZSByZW1vdmFsLAomIzQzOwkgKiBhbmQgZm9saW9fZW5kX3dyaXRlYmFjaygpIHRha2VzIGl0cyBvd24gcmVmZXJlbmNlIGJlZm9yZSBjbGVhcmluZwomIzQzOwkgKiBQR193cml0ZWJhY2sgYW5kIGRvbmF0ZXMgaXQgdG8gdGhlIGRyb3AuCiYjNDM7CSAqLwomIzQzOwlmb2xpb19wdXQoZm9saW8pOwogCiAJLyogc3RhcnQgd3JpdGViYWNrICovCiAJX19zd2FwX3dyaXRlcGFnZShmb2xpbywgTlVMTCk7CiAKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiBvdXQ6CiAJaWYgKHJldCkgewogCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1lbW9yeSBNYW5hZ2VtZW50IFN1YnN5c3RlbSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhpcyBwYXRjaCBzZXJpZXMgaXMgdG91Y2hpbmcgc29tZSBwcmV0dHkgY3JpdGljYWwgYml0cyBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBtb2RpZnlpbmcgaGVhZGVycyBhbmQgY29kZSBpbiBgc3dhcC5oYCwgYGZpbGVtYXAuY2AsIGBwYWdlX2lvLmNgLCBgc3dhcF9zdGF0ZS5jYCwgYHZtc2Nhbi5jYCwgYW5kIGB6c3dhcC5jYC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzd2FwLCB6c3dhcCwgYW5kIHRoZSBwYWdlIGNhY2hlIOKAkyB0aGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIHF1ZXN0aW9uLiBUaGlzICpkZWZpbml0ZWx5KiBuZWVkcyBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgZ2V0IHNwZWNpZmljIGFib3V0IHdoZXJlIHRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIG9yIG1vZGlmaWVkLiBBbHJpZ2h0LCBuZXcgZnVuY3Rpb25zOiBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgYW5kIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYC4gQW5kIHRoZW4gbW9kaWZpZWQgZnVuY3Rpb25zOiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgLCBhbmQgYHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmNgLiBUaG9zZSBhcmUgb3VyIG1haW4gdGFyZ2V0cy4KCk5leHQsIEkgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgY29udGV4dCBvZiB0aGUgZnV6emluZy4gTGV0IG1lIGNoZWNrIGlmIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIHN0YXRpYyBvciBub24tc3RhdGljLiBZdXAsIGl0JiMzOTtzIHN0YXRpYy4gT2theSwgbGV0JiMzOTtzIGNoZWNrIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLiBIbW0sIGJvdGggYXJlIG5vbi1zdGF0aWMuIFNvLCB0aGV5JiMzOTtyZSBleHBvc2VkIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcy4gYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIGFsc28gbm9uLXN0YXRpYywgc28gd2UgaGF2ZSBhIGZldyBlbnRyeSBwb2ludHMgdG8gY29uc2lkZXIuCgpPbmUgbW9yZSB0aGluZzogSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgenN3YXAgYW5kIHN3YXAuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBgQ09ORklHX1pTV0FQYCwgYENPTkZJR19TV0FQYCwgYW5kIGBDT05GSUdfTUVNQ0dgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWdzIGFuZCBtYWtlIHN1cmUgdGhleSYjMzk7cmUgYWxsIHNldCBhcHByb3ByaWF0ZWx5IGZvciBvdXIgdGVzdGluZyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXG4tLVxubW0vS2NvbmZpZy0yMS1cbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNC1cbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTU5PWNob2ljZVxuLS1cbm1tL0tjb25maWctNzYtXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxubW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7RGVmbGF0ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODItXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXG5tbS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtMWk9cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4LVxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0MlxubW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NC1cbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcbm1tL0tjb25maWctOTYtXHRib29sIFwmIzM0O0xaNFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTAwLVxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xubW0vS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O0xaNEhDXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDYtXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcbm1tL0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTExMy1cbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjgwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqWlNXQVAgRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gWlNXQVAgcmVsaWVzIGZ1bmRhbWVudGFsbHkgb24gdGhlIGV4aXN0ZW5jZSBhbmQgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIFNXQVAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb24sIGJ1dCBhc3N1bXB0aW9ucyBhcmUgdGhlIGVuZW15IG9mIHJvYnVzdCBzeXN0ZW1zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIG5vdCBqdXN0ICphc3N1bWUqIHRoYXQgY29ubmVjdGlvbiBpcyBzb2xpZC4gSSBuZWVkIHRvIGV4cGxpY2l0bHkgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgY29yZSBhcmNoaXRlY3R1cmFsIHJlbGF0aW9uc2hpcCBoZXJlLCBhbmQgYW55IGluc3RhYmlsaXR5IGluIFNXQVAsIG9yIGFuIGltcHJvcGVybHkgY29uZmlndXJlZCBkZXBlbmRlbmN5LCBjb3VsZCBjYXNjYWRlIGFuZCBjYXVzZSBzZXJpb3VzIGlzc3VlcyB3aXRoaW4gWlNXQVAmIzM5O3Mgb3ZlcmFsbCBmdW5jdGlvbi4gVGltZSB0byBkaWcgaW50byB0aG9zZSBaU1dBUCBkZXBlbmRlbmNpZXMgYW5kIG1hcCBvdXQgZXZlcnkgcG9pbnQgb2YgaW50ZWdyYXRpb24gdG8gZW5zdXJlIHN0YWJpbGl0eSBhbmQgcHJlZGljdCBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcy4gTGV0JiMzOTtzIHNlZSBob3cgZGVlcCB0aGlzIHJhYmJpdCBob2xlIGdvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG5tbS9LY29uZmlnOjE0Olx0ZGVwZW5kcyBvbiBNTVUgXHUwMDI2XHUwMDI2IEJMT0NLIFx1MDAyNlx1MDAyNiAhQVJDSF9OT19TV0FQXG5tbS9LY29uZmlnLTE1LVx0ZGVmYXVsdCB5XG4tLVxubW0vS2NvbmZpZz0yMj1jb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbm1tL0tjb25maWc6MjQ6XHRkZXBlbmRzIG9uIFNXQVBcbm1tL0tjb25maWctMjUtXHRzZWxlY3QgQ1JZUFRPXG4tLVxubW0vS2NvbmZpZz0zNT1jb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWc6Mzc6XHRkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTM4LVx0aGVscFxuLS1cbm1tL0tjb25maWc9NDU9Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbm1tL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTQ4LVx0ZGVmYXVsdCBuXG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbm1tL0tjb25maWctNjAtXHRwcm9tcHQgXCYjMzQ7RGVmYXVsdCBjb21wcmVzc29yXCYjMzQ7XG5tbS9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBaU1dBUFxubW0vS2NvbmZpZy02Mi1cdGRlZmF1bHQgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xuLS1cbm1tL0tjb25maWc9MTE0PWNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbm1tL0tjb25maWc6MTE2OiAgICAgICBkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTExNy0gICAgICAgZGVmYXVsdCBcJiMzNDtkZWZsYXRlXCYjMzQ7IGlmIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG4tLVxubW0vS2NvbmZpZz0xMzA9bWVudSBcJiMzNDtac21hbGxvYyBhbGxvY2F0b3Igb3B0aW9uc1wmIzM0O1xubW0vS2NvbmZpZzoxMzE6XHRkZXBlbmRzIG9uIFpTTUFMTE9DXG5tbS9LY29uZmlnLTEzMi1cbi0tXG5tbS9LY29uZmlnPTE3Mj1jb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXG5tbS9LY29uZmlnLTE3My1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTc0Olx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZIFx1MDAyNlx1MDAyNiAhVElOWV9SQ1Vcbm1tL0tjb25maWc6MTc1Olx0ZGVwZW5kcyBvbiAhUkNVX1NUUklDVF9HUkFDRV9QRVJJT0Rcbm1tL0tjb25maWctMTc2LVxubW0vS2NvbmZpZz0xNzc9Y29uZmlnIFNMVUJfVElOWVxubW0vS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0NvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XCYjMzQ7XG5tbS9LY29uZmlnOjE3OTpcdGRlcGVuZHMgb24gRVhQRVJUIFx1MDAyNlx1MDAyNiAhQ09NUElMRV9URVNUXG5tbS9LY29uZmlnLTE4MC1cdHNlbGVjdCBTTEFCX01FUkdFX0RFRkFVTFRcbi0tXG5tbS9LY29uZmlnPTIwND1jb25maWcgU0xBQl9GUkVFTElTVF9SQU5ET01cbm1tL0tjb25maWctMjA1LVx0Ym9vbCBcJiMzNDtSYW5kb21pemUgc2xhYiBmcmVlbGlzdFwmIzM0O1xubW0vS2NvbmZpZzoyMDY6XHRkZXBlbmRzIG9uICFTTFVCX1RJTllcbm1tL0tjb25maWctMjA3LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MjEyPWNvbmZpZyBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXG5tbS9LY29uZmlnLTIxMy1cdGJvb2wgXCYjMzQ7SGFyZGVuIHNsYWIgZnJlZWxpc3QgbWV0YWRhdGFcJiMzNDtcbm1tL0tjb25maWc6MjE0Olx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXG5tbS9LY29uZmlnLTIxNS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTIyMT1jb25maWcgU0xBQl9CVUNLRVRTXG5tbS9LY29uZmlnLTIyMi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXCYjMzQ7XG5tbS9LY29uZmlnOjIyMzpcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxubW0vS2NvbmZpZy0yMjQtXHRkZWZhdWx0IFNMQUJfRlJFRUxJU1RfSEFSREVORURcbi0tXG5tbS9LY29uZmlnPTIzOD1jb25maWcgU0xVQl9TVEFUU1xuLS1cbm1tL0tjb25maWctMjQwLVx0Ym9vbCBcJiMzNDtFbmFibGUgcGVyZm9ybWFuY2Ugc3RhdGlzdGljc1wmIzM0O1xubW0vS2NvbmZpZzoyNDE6XHRkZXBlbmRzIG9uIFNZU0ZTIFx1MDAyNlx1MDAyNiAhU0xVQl9USU5ZXG5tbS9LY29uZmlnLTI0Mi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTI1MT1jb25maWcgS01BTExPQ19QQVJUSVRJT05fQ0FDSEVTXG5tbS9LY29uZmlnOjI1MjpcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxubW0vS2NvbmZpZy0yNTMtXHRib29sIFwmIzM0O1BhcnRpdGlvbmVkIHNsYWIgY2FjaGVzIGZvciBub3JtYWwga21hbGxvY1wmIzM0O1xuLS1cbm1tL0tjb25maWc9MjY3PWNob2ljZVxubW0vS2NvbmZpZy0yNjgtXHRwcm9tcHQgXCYjMzQ7UGFydGl0aW9uZWQgc2xhYiBjYWNoZSBtb2RlXCYjMzQ7XG5tbS9LY29uZmlnOjI2OTpcdGRlcGVuZHMgb24gS01BTExPQ19QQVJUSVRJT05fQ0FDSEVTXG5tbS9LY29uZmlnLTI3MC1cdGRlZmF1bHQgS01BTExPQ19QQVJUSVRJT05fVFlQRUQgaWYgQ0NfSEFTX0FMTE9DX1RPS0VOXG4tLVxubW0vS2NvbmZpZz0yODc9Y29uZmlnIEtNQUxMT0NfUEFSVElUSU9OX1RZUEVEXG5tbS9LY29uZmlnLTI4OC1cdGJvb2wgXCYjMzQ7VHlwZSBiYXNlZCBzbGFiIGNhY2hlIHNlbGVjdGlvbiBmb3Igbm9ybWFsIGttYWxsb2NcJiMzNDtcbm1tL0tjb25maWc6Mjg5Olx0ZGVwZW5kcyBvbiBDQ19IQVNfQUxMT0NfVE9LRU5cbm1tL0tjb25maWctMjkwLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MzU4PWNvbmZpZyBNTUFQX0FMTE9XX1VOSU5JVElBTElaRURcbm1tL0tjb25maWctMzU5LVx0Ym9vbCBcJiMzNDtBbGxvdyBtbWFwcGVkIGFub255bW91cyBtZW1vcnkgdG8gYmUgdW5pbml0aWFsaXplZFwmIzM0O1xubW0vS2NvbmZpZzozNjA6XHRkZXBlbmRzIG9uIEVYUEVSVCBcdTAwMjZcdTAwMjYgIU1NVVxubW0vS2NvbmZpZy0zNjEtXHRkZWZhdWx0IG5cbi0tXG5tbS9LY29uZmlnPTM4MD1jb25maWcgU0VMRUNUX01FTU9SWV9NT0RFTFxubW0vS2NvbmZpZy0zODEtXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjM4MjpcdGRlcGVuZHMgb24gQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMXG5tbS9LY29uZmlnLTM4My1cbm1tL0tjb25maWc9Mzg0PWNob2ljZVxubW0vS2NvbmZpZy0zODUtXHRwcm9tcHQgXCYjMzQ7TWVtb3J5IG1vZGVsXCYjMzQ7XG5tbS9LY29uZmlnOjM4NjpcdGRlcGVuZHMgb24gU0VMRUNUX01FTU9SWV9NT0RFTFxubW0vS2NvbmZpZy0zODctXHRkZWZhdWx0IFNQQVJTRU1FTV9NQU5VQUwgaWYgQVJDSF9TUEFSU0VNRU1fREVGQVVMVFxuLS1cbm1tL0tjb25maWc9Mzk1PWNvbmZpZyBGTEFUTUVNX01BTlVBTFxubW0vS2NvbmZpZy0zOTYtXHRib29sIFwmIzM0O0ZsYXQgTWVtb3J5XCYjMzQ7XG5tbS9LY29uZmlnOjM5NzpcdGRlcGVuZHMgb24gIUFSQ0hfU1BBUlNFTUVNX0VOQUJMRSB8fCBBUkNIX0ZMQVRNRU1fRU5BQkxFXG5tbS9LY29uZmlnLTM5OC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTQxMD1jb25maWcgU1BBUlNFTUVNX01BTlVBTFxubW0vS2NvbmZpZy00MTEtXHRib29sIFwmIzM0O1NwYXJzZSBNZW1vcnlcJiMzNDtcbm1tL0tjb25maWc6NDEyOlx0ZGVwZW5kcyBvbiBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcbm1tL0tjb25maWctNDEzLVx0aGVscFxuLS1cbm1tL0tjb25maWc9NDI1PWNvbmZpZyBTUEFSU0VNRU1cbm1tL0tjb25maWctNDI2LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo0Mjc6XHRkZXBlbmRzIG9uICghU0VMRUNUX01FTU9SWV9NT0RFTCBcdTAwMjZcdTAwMjYgQVJDSF9TUEFSU0VNRU1fRU5BQkxFKSB8fCBTUEFSU0VNRU1fTUFOVUFMXG5tbS9LY29uZmlnLTQyOC1cbm1tL0tjb25maWc9NDI5PWNvbmZpZyBGTEFUTUVNXG5tbS9LY29uZmlnLTQzMC1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NDMxOlx0ZGVwZW5kcyBvbiAhU1BBUlNFTUVNIHx8IEZMQVRNRU1fTUFOVUFMXG5tbS9LY29uZmlnLTQzMi1cbi0tXG5tbS9LY29uZmlnPTQ1MT1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcbm1tL0tjb25maWctNDUyLVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo0NTM6XHRkZXBlbmRzIG9uIFNQQVJTRU1FTSBcdTAwMjZcdTAwMjYgIVNQQVJTRU1FTV9TVEFUSUNcbm1tL0tjb25maWctNDU0LVxuLS1cbm1tL0tjb25maWc9NDU4PWNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxubW0vS2NvbmZpZy00NTktXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjQ2MDpcdGRlcGVuZHMgb24gU1BBUlNFTUVNIFx1MDAyNlx1MDAyNiBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcbm1tL0tjb25maWctNDYxLVx0aGVscFxuLS1cbm1tL0tjb25maWc9NDg0PWNvbmZpZyBIQVZFX0dVUF9GQVNUXG5tbS9LY29uZmlnOjQ4NTpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTQ4Ni1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTUwOD1jb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cbm1tL0tjb25maWctNTA5LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo1MTA6XHRkZXBlbmRzIG9uICFERVZNRU0gfHwgU1RSSUNUX0RFVk1FTVxubW0vS2NvbmZpZy01MTEtXG4tLVxubW0vS2NvbmZpZz01MjM9bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xuLS1cbm1tL0tjb25maWctNTI1LVx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbm1tL0tjb25maWc6NTI2Olx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxubW0vS2NvbmZpZzo1Mjc6XHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnOjUyODpcdGRlcGVuZHMgb24gNjRCSVRcbm1tL0tjb25maWctNTI5LVx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPIGlmIE5VTUFcbi0tXG5tbS9LY29uZmlnPTU5MT1jb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuLS1cbm1tL0tjb25maWctNTkzLVx0c2VsZWN0IEhBVkVfQk9PVE1FTV9JTkZPX05PREUgaWYgWDg2XzY0XG5tbS9LY29uZmlnOjU5NDpcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTk1LVx0c2VsZWN0IE1JR1JBVElPTlxuLS1cbm1tL0tjb25maWc9NTk3PWNvbmZpZyBNSFBfTUVNTUFQX09OX01FTU9SWVxubW0vS2NvbmZpZy01OTgtXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjU5OTpcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUcgXHUwMDI2XHUwMDI2IFNQQVJTRU1FTV9WTUVNTUFQXG5tbS9LY29uZmlnOjYwMDpcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbm1tL0tjb25maWctNjAxLVxuLS1cbm1tL0tjb25maWc9NjA0PWNvbmZpZyBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxuLS1cbm1tL0tjb25maWctNjEwLSMgRGVmYXVsdCB0byA0IGZvciB3aWRlciB0ZXN0aW5nLCB0aG91Z2ggOCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLlxubW0vS2NvbmZpZzo2MTE6IyBBUk0mIzM5O3MgYWRqdXN0X3B0ZSAodW51c2VkIGlmIFZJUFQpIGRlcGVuZHMgb24gbW0td2lkZSBwYWdlX3RhYmxlX2xvY2suXG5tbS9LY29uZmlnLTYxMi0jIFBBLVJJU0MgN3h4eCYjMzk7cyBzcGlubG9ja190IHdvdWxkIGVubGFyZ2Ugc3RydWN0IHBhZ2UgZnJvbSAzMiB0byA0NCBieXRlcy5cbi0tXG5tbS9LY29uZmlnPTYxOD1jb25maWcgU1BMSVRfUFRFX1BUTE9DS1Ncbm1tL0tjb25maWctNjE5LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo2MjA6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzo2MjE6XHRkZXBlbmRzIG9uIFNNUFxubW0vS2NvbmZpZzo2MjI6XHRkZXBlbmRzIG9uIE5SX0NQVVMgXHUwMDNlPSA0XG5tbS9LY29uZmlnOjYyMzpcdGRlcGVuZHMgb24gIUFSTSB8fCBDUFVfQ0FDSEVfVklQVFxubW0vS2NvbmZpZzo2MjQ6XHRkZXBlbmRzIG9uICFQQVJJU0MgfHwgUEEyMFxubW0vS2NvbmZpZzo2MjU6XHRkZXBlbmRzIG9uICFTUEFSQzMyXG5tbS9LY29uZmlnOjYyNjpcdGRlcGVuZHMgb24gIVVNTFxubW0vS2NvbmZpZy02MjctXG4tLVxubW0vS2NvbmZpZz02MzE9Y29uZmlnIFNQTElUX1BNRF9QVExPQ0tTXG5tbS9LY29uZmlnLTYzMi1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NjMzOlx0ZGVwZW5kcyBvbiBTUExJVF9QVEVfUFRMT0NLUyBcdTAwMjZcdTAwMjYgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DS1xubW0vS2NvbmZpZy02MzQtXG4tLVxubW0vS2NvbmZpZz02NDI9Y29uZmlnIEJBTExPT05fTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02NDQtXHRkZWZhdWx0IHlcbm1tL0tjb25maWc6NjQ1Olx0ZGVwZW5kcyBvbiBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IEJBTExPT05cbm1tL0tjb25maWctNjQ2LVx0aGVscFxuLS1cbm1tL0tjb25maWc9NjU0PWNvbmZpZyBDT01QQUNUSU9OXG4tLVxubW0vS2NvbmZpZy02NTctXHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnOjY1ODpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTY1OS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTY2OT1jb25maWcgQ09NUEFDVF9VTkVWSUNUQUJMRV9ERUZBVUxUXG5tbS9LY29uZmlnLTY3MC1cdGludFxubW0vS2NvbmZpZzo2NzE6XHRkZXBlbmRzIG9uIENPTVBBQ1RJT05cbm1tL0tjb25maWctNjcyLVx0ZGVmYXVsdCAwIGlmIFBSRUVNUFRfUlRcbi0tXG5tbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY4Ny1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZzo2ODg6XHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZy02ODktXHRzZWxlY3QgTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG5tbS9LY29uZmlnOjY5ODpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTY5OS1cbi0tXG5tbS9LY29uZmlnPTc0MD1jb25maWcgS1NNXG5tbS9LY29uZmlnLTc0MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXCYjMzQ7XG5tbS9LY29uZmlnOjc0MjpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTc0My1cdHNlbGVjdCBYWEhBU0hcbi0tXG5tbS9LY29uZmlnPTc1NT1jb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSXG5tbS9LY29uZmlnLTc1Ni1cdGludCBcJiMzNDtMb3cgYWRkcmVzcyBzcGFjZSB0byBwcm90ZWN0IGZyb20gdXNlciBhbGxvY2F0aW9uXCYjMzQ7XG5tbS9LY29uZmlnOjc1NzpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTc1OC1cdGRlZmF1bHQgNDA5NlxuLS1cbm1tL0tjb25maWc9Nzc3PWNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZzo3Nzg6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzo3Nzk6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzgwLVx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz03ODg9Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxubW0vS2NvbmZpZy03ODktXHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xubW0vS2NvbmZpZzo3OTA6XHRkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IFBST0NfRlNcbm1tL0tjb25maWctNzkxLVx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4tLVxubW0vS2NvbmZpZz03OTM9Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1Ncbm1tL0tjb25maWctNzk0LVx0aW50IFwmIzM0O1R1cm4gb24gbW1hcCgpIGV4Y2VzcyBzcGFjZSB0cmltbWluZyBiZWZvcmUgYm9vdGluZ1wmIzM0O1xubW0vS2NvbmZpZzo3OTU6XHRkZXBlbmRzIG9uICFNTVVcbm1tL0tjb25maWctNzk2LVx0ZGVmYXVsdCAxXG4tLVxubW0vS2NvbmZpZz04Mjc9Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG5tbS9LY29uZmlnLTgyOC1cdGJvb2wgXCYjMzQ7QWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcJiMzNDtcbm1tL0tjb25maWc6ODI5Olx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzAtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz04NDY9bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04NDctXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbm1tL0tjb25maWc6ODQ4Olx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG5tbS9LY29uZmlnLTg0OS1cdHNlbGVjdCBDT01QQUNUSU9OXG4tLVxubW0vS2NvbmZpZz05ODI9Y29uZmlnIFRIUF9TV0FQXG5tbS9LY29uZmlnLTk4My1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6OTg0Olx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRTX1RIUF9TV0FQIFx1MDAyNlx1MDAyNiBTV0FQIFx1MDAyNlx1MDAyNiA2NEJJVFxubW0vS2NvbmZpZy05ODUtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDI4PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQXG5tbS9LY29uZmlnLTEwMjktXHRkZWZfYm9vbCBuXG5tbS9LY29uZmlnOjEwMzA6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTEwMzEtXG5tbS9LY29uZmlnPTEwMzI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxubW0vS2NvbmZpZy0xMDMzLVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxMDM0Olx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctMTAzNS1cbm1tL0tjb25maWc9MTAzNj1jb25maWcgQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG5tbS9LY29uZmlnLTEwMzctXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjEwMzg6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgXHUwMDI2XHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL0tjb25maWctMTAzOS1cbi0tXG5tbS9LY29uZmlnPTEwNTA9Y29uZmlnIE5FRURfUEVSX0NQVV9LTVxubW0vS2NvbmZpZzoxMDUxOlx0ZGVwZW5kcyBvbiAhU01QIHx8ICFNTVVcbm1tL0tjb25maWctMTA1Mi1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTEwNjc9Y29uZmlnIENNQVxubW0vS2NvbmZpZy0xMDY4LVx0Ym9vbCBcJiMzNDtDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbm1tL0tjb25maWc6MTA2OTpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTEwNzAtXHRzZWxlY3QgTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZz0xMDgyPWNvbmZpZyBDTUFfREVCVUdGU1xubW0vS2NvbmZpZy0xMDgzLVx0Ym9vbCBcJiMzNDtDTUEgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL0tjb25maWc6MTA4NDpcdGRlcGVuZHMgb24gQ01BIFx1MDAyNlx1MDAyNiBERUJVR19GU1xubW0vS2NvbmZpZy0xMDg1LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTA4OD1jb25maWcgQ01BX1NZU0ZTXG5tbS9LY29uZmlnLTEwODktXHRib29sIFwmIzM0O0NNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xubW0vS2NvbmZpZzoxMDkwOlx0ZGVwZW5kcyBvbiBDTUEgXHUwMDI2XHUwMDI2IFNZU0ZTXG5tbS9LY29uZmlnLTEwOTEtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDk1PWNvbmZpZyBDTUFfQVJFQVNcbm1tL0tjb25maWctMTA5Ni1cdGludCBcJiMzNDtNYXhpbXVtIGNvdW50IG9mIHRoZSBDTUEgYXJlYXNcJiMzNDtcbm1tL0tjb25maWc6MTA5NzpcdGRlcGVuZHMgb24gQ01BXG5tbS9LY29uZmlnLTEwOTgtXHRkZWZhdWx0IDIwIGlmIE5VTUFcbi0tXG5tbS9LY29uZmlnPTExNDI9Y29uZmlnIE1FTV9TT0ZUX0RJUlRZXG5tbS9LY29uZmlnLTExNDMtXHRib29sIFwmIzM0O1RyYWNrIG1lbW9yeSBjaGFuZ2VzXCYjMzQ7XG5tbS9LY29uZmlnOjExNDQ6XHRkZXBlbmRzIG9uIENIRUNLUE9JTlRfUkVTVE9SRSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1NPRlRfRElSVFkgXHUwMDI2XHUwMDI2IFBST0NfRlNcbm1tL0tjb25maWctMTE0NS1cdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxuLS1cbm1tL0tjb25maWc9MTE1Nz1jb25maWcgU1RBQ0tfTUFYX0RFRkFVTFRfU0laRV9NQlxuLS1cbm1tL0tjb25maWctMTE2MC1cdHJhbmdlIDggMjA0OFxubW0vS2NvbmZpZzoxMTYxOlx0ZGVwZW5kcyBvbiBTVEFDS19HUk9XU1VQIFx1MDAyNlx1MDAyNiAoITY0QklUIHx8IENPTVBBVClcbm1tL0tjb25maWctMTE2Mi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTExNjk9Y29uZmlnIERFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVRcbm1tL0tjb25maWctMTE3MC1cdGJvb2wgXCYjMzQ7RGVmZXIgaW5pdGlhbGlzYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIGt0aHJlYWRzXCYjMzQ7XG5tbS9LY29uZmlnOjExNzE6XHRkZXBlbmRzIG9uIFNQQVJTRU1FTVxubW0vS2NvbmZpZzoxMTcyOlx0ZGVwZW5kcyBvbiAhTkVFRF9QRVJfQ1BVX0tNXG5tbS9LY29uZmlnOjExNzM6XHRkZXBlbmRzIG9uIDY0QklUXG5tbS9LY29uZmlnOjExNzQ6XHRkZXBlbmRzIG9uICFLTVNBTlxubW0vS2NvbmZpZy0xMTc1LVx0c2VsZWN0IFBBREFUQVxuLS1cbm1tL0tjb25maWc9MTE5Mz1jb25maWcgSURMRV9QQUdFX1RSQUNLSU5HXG5tbS9LY29uZmlnLTExOTQtXHRib29sIFwmIzM0O0VuYWJsZSBpZGxlIHBhZ2UgdHJhY2tpbmdcJiMzNDtcbm1tL0tjb25maWc6MTE5NTpcdGRlcGVuZHMgb24gU1lTRlMgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZy0xMTk2LVx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4tLVxubW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXG5tbS9LY29uZmlnLTEyMzItXHRib29sIFwmIzM0O1N1cHBvcnQgRE1BMzIgem9uZVwmIzM0OyBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcbm1tL0tjb25maWc6MTIzMzpcdGRlcGVuZHMgb24gIVg4Nl8zMlxubW0vS2NvbmZpZy0xMjM0LVx0ZGVmYXVsdCB5IGlmIEFSTTY0XG4tLVxubW0vS2NvbmZpZz0xMjM2PWNvbmZpZyBaT05FX0RFVklDRVxubW0vS2NvbmZpZy0xMjM3LVx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG5tbS9LY29uZmlnOjEyMzg6XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnOjEyMzk6XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbm1tL0tjb25maWc6MTI0MDpcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctMTI0MS1cdHNlbGVjdCBYQVJSQVlfTVVMVElcbi0tXG5tbS9LY29uZmlnPTEyNjA9Y29uZmlnIEhNTV9NSVJST1Jcbm1tL0tjb25maWctMTI2MS1cdGJvb2xcbm1tL0tjb25maWc6MTI2MjpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTEyNjMtXG4tLVxubW0vS2NvbmZpZz0xMjY3PWNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjY4LVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbm1tL0tjb25maWc6MTI2OTpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTI3MC1cdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnPTEzMDY9Y29uZmlnIEdVUF9URVNUXG5tbS9LY29uZmlnLTEzMDctXHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHNcJiMzNDtcbm1tL0tjb25maWc6MTMwODpcdGRlcGVuZHMgb24gREVCVUdfRlNcbm1tL0tjb25maWctMTMwOS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEzMjY9Y29tbWVudCBcJiMzNDtHVVBfVEVTVCBuZWVkcyB0byBoYXZlIERFQlVHX0ZTIGVuYWJsZWRcJiMzNDtcbm1tL0tjb25maWc6MTMyNzpcdGRlcGVuZHMgb24gIUdVUF9URVNUIFx1MDAyNlx1MDAyNiAhREVCVUdfRlNcbm1tL0tjb25maWctMTMyOC1cbi0tXG5tbS9LY29uZmlnPTEzMzI9Y29uZmlnIERNQVBPT0xfVEVTVFxubW0vS2NvbmZpZy0xMzMzLVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGEgbW9kdWxlIHRvIHJ1biB0aW1lIHRlc3RzIG9uIGRtYV9wb29sXCYjMzQ7XG5tbS9LY29uZmlnOjEzMzQ6XHRkZXBlbmRzIG9uIEhBU19ETUFcbm1tL0tjb25maWctMTMzNS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEzNTY9Y29uZmlnIFNFQ1JFVE1FTVxuLS1cbm1tL0tjb25maWctMTM1OC1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbWZkX3NlY3JldCgpIHN5c3RlbSBjYWxsXCYjMzQ7IGlmIEVYUEVSVFxubW0vS2NvbmZpZzoxMzU5Olx0ZGVwZW5kcyBvbiBBUkNIX0hBU19TRVRfRElSRUNUX01BUFxubW0vS2NvbmZpZy0xMzYwLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTM2NT1jb25maWcgQU5PTl9WTUFfTkFNRVxubW0vS2NvbmZpZy0xMzY2LVx0Ym9vbCBcJiMzNDtBbm9ueW1vdXMgVk1BIG5hbWUgc3VwcG9ydFwmIzM0O1xubW0vS2NvbmZpZzoxMzY3Olx0ZGVwZW5kcyBvbiBQUk9DX0ZTIFx1MDAyNlx1MDAyNiBBRFZJU0VfU1lTQ0FMTFMgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZy0xMzY4LVxuLS1cbm1tL0tjb25maWc9MTM4OT1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnLTEzOTAtXHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG5tbS9LY29uZmlnOjEzOTE6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy0xMzkyLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTM5Nz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xMzk5LVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnOjE0MDA6XHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxubW0vS2NvbmZpZy0xNDAxLVxuLS1cbm1tL0tjb25maWc9MTQwOT1jb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDEwLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG5tbS9LY29uZmlnOjE0MTE6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy0xNDEyLVx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG5tbS9LY29uZmlnOjE0MTM6XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctMTQxNC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTE0MTg9Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xubW0vS2NvbmZpZzoxNDIwOlx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MjEtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDI0PWNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjUtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xubW0vS2NvbmZpZzoxNDI2Olx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MjctXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDMzPWNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDM0LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxNDM1Olx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbm1tL0tjb25maWctMTQzNi0jIH1cbi0tXG5tbS9LY29uZmlnPTE0NDE9Y29uZmlnIFBFUl9WTUFfTE9DS1xubW0vS2NvbmZpZy0xNDQyLVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxNDQzOlx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBTTVBcbm1tL0tjb25maWctMTQ0NC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTE0NTA9Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG5tbS9LY29uZmlnLTE0NTEtXHRib29sXG5tbS9LY29uZmlnOjE0NTI6XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG5tbS9LY29uZmlnLTE0NTMtXG4tLVxubW0vS2NvbmZpZz0xNDYzPWNvbmZpZyBOVU1BX0VNVVxubW0vS2NvbmZpZy0xNDY0LVx0Ym9vbCBcJiMzNDtOVU1BIGVtdWxhdGlvblwmIzM0O1xubW0vS2NvbmZpZzoxNDY1Olx0ZGVwZW5kcyBvbiBOVU1BX01FTUJMS1Ncbm1tL0tjb25maWc6MTQ2NjpcdGRlcGVuZHMgb24gWDg2IHx8IEdFTkVSSUNfQVJDSF9OVU1BXG5tbS9LY29uZmlnLTE0NjctXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDgxPWNvbmZpZyBQVF9SRUNMQUlNXG5tbS9LY29uZmlnLTE0ODItXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjE0ODM6XHRkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgXHUwMDI2XHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxubW0vS2NvbmZpZy0xNDg0LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTUwMD1jb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG5tbS9LY29uZmlnLTE1MDEtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgdGhlIGxhenkgTU1VIG1vZGVcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vS2NvbmZpZzoxNTAyOlx0ZGVwZW5kcyBvbiBBUkNIX0hBU19MQVpZX01NVV9NT0RFXG5tbS9LY29uZmlnOjE1MDM6XHRkZXBlbmRzIG9uIEtVTklUXG5tbS9LY29uZmlnLTE1MDQtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWVtb3J5IE1hbmFnZW1lbnQgRGVlcCBEaXZlIC0gSW5pdGlhbCBBc3Nlc3NtZW50KioKCkFscmlnaHQsIFpTV0FQIGlzIG9mZmljaWFsbHkgb25saW5lIGFuZCBvcGVyYXRpb25hbC4gRXhjZWxsZW50LCB3ZSYjMzk7cmUgbWFraW5nIHByb2dyZXNzLiBOb3csIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBNRU1DRyAoTWVtb3J5IENvbnRyb2wgR3JvdXBzKSBtZXRyaWNzIGFuZCBiZWhhdmlvcnMuIFdlIGhhdmUgWlNXQVAsIGJ1dCAqaG93KiBpcyBpdCBwZXJmb3JtaW5nIGluIHRoZSBjb250ZXh0IG9mIG91ciBleGlzdGluZyBtZW1vcnkgaGllcmFyY2h5IGFuZCB3b3JrbG9hZCBpc29sYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIG9wdGltYWwgZm9yIHRoaXMgZGVwbG95bWVudC4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0cmFja2luZyB0aGUga2V5IE1FTUNHIHBhcmFtZXRlcnMsIGVzcGVjaWFsbHkgc3dhcCB1c2FnZSwgcGFnZSBmYXVsdCByYXRlcywgYW5kIHJlY2xhaW0gc3RhdGlzdGljcyBmb3IgZWFjaCByZWxldmFudCBjZ3JvdXAuIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZXNlIHdpdGggcGVyZm9ybWFuY2UgZGF0YSBmcm9tIG90aGVyIG1vbml0b3JpbmcgdG9vbHMgdG8gYXNzZXNzIGFueSBwb3NzaWJsZSBib3R0bGVuZWNrcyBvciByZWdyZXNzaW9ucyBub3cgdGhhdCBaU1dBUCBpcyBhY3RpdmUuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIHByb2JhYmx5IGludm9sdmUgdmlzdWFsaXppbmcgdGhlIHJlbGV2YW50IG1ldHJpY3Mgb3ZlciB0aW1lLCBhbmQgcG9zc2libHkgYWRqdXN0aW5nIHRoZSBzZXR0aW5ncyBvZiB0aGUgY2dyb3VwcyB0byBzZWUgaWYgd2UgY2FuIGFjaGlldmUgYmV0dGVyIG92ZXJhbGwgcGVyZm9ybWFuY2UsIHdoaWNoIGlzIHdoYXQgSSBhbHdheXMgYWltIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjc9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzYtXG5pbml0L0tjb25maWc6MTA3Nzpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc4LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDg1LVxuaW5pdC9LY29uZmlnOjEwODY6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDg3LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDkyLVxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5NC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5OS1cbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDEtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUxNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3k6IE1FTUNHIGFuZCBDR1JPVVBTKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBsb29raW5nIGF0IE1FTUNHLCBhbmQgaXQmIzM5O3MgcmluZ2luZyBhIGJlbGwuIEkga25vdyBpdCYjMzk7cyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byBDR1JPVVBTIOKAkyB0aGV5JiMzOTtyZSBwcmFjdGljYWxseSBzeW1iaW90aWMgaW4gdGhlIExpbnV4IGtlcm5lbC4gU28sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciBpbnRvIE1FTUNHJiMzOTtzIGJlaGF2aW9yIG9yIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzLCBJICphYnNvbHV0ZWx5KiBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgQ0dST1VQUy4gRXZlcnl0aGluZyBkb3duc3RyZWFtIGZyb20gaGVyZSBoaW5nZXMgb24gdGhhdCBmb3VuZGF0aW9uYWwgbGF5ZXIuIFRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBDR1JPVVBTIHNpdHVhdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgaW5pdGlhbCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNDU9Y29uZmlnIFNMQUJfT0JKX0VYVFxuLS1cbmluaXQvS2NvbmZpZy0xMDQ3LVxuaW5pdC9LY29uZmlnOjEwNDg6bWVudWNvbmZpZyBDR1JPVVBTXG5pbml0L0tjb25maWctMTA0OS1cdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzk2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFpTV0FQYCwgYFNXQVBgLCBhbmQgYE1FTUNHYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgYXJlYXMgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIE15IGluaXRpYWwgdGFzayBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBiZWVuIHRvdWNoZWQuIFRpbWUgdG8gbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VlIHdoYXQgZWxzZSBoYXMgYmVlbiBhZGRlZCBvciBtb2RpZmllZCBpbiB0aGUgcmVsZXZhbnQgbW9kdWxlcy4KCkkmIzM5O3ZlIGdvdCB0aGUgYWZmZWN0ZWQgZmlsZXM6IGBtbS9maWxlbWFwLmNgLCBgbW0vcGFnZV9pby5jYCwgYG1tL3N3YXAuaGAsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vdm1zY2FuLmNgLCBhbmQgYG1tL3pzd2FwLmNgLiBBbHJpZ2h0LCBzbyBgbW0venN3YXAuY2AgaXMgY2xlYXJseSBjb25kaXRpb25hbCBvbiBgQ09ORklHX1pTV0FQYCwgbWFraW5nIHNlbnNlLiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgYG1tL3BhZ2VfaW8uY2AgYXJlIHRpZWQgdG8gYENPTkZJR19TV0FQYC4gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL2ZpbGVtYXAuY2AgYXJlIGFsd2F5cyBjb21waWxlZC4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJIGhhdmVuJiMzOTt0IHNwb3R0ZWQgeWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc3dhcF9zdGF0ZS5vYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgc3dhcF9zdGF0ZS5vYC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBpdHMgbGlrZWx5IHJvbGU7IHRoZSBuYW1lIHNjcmVhbXMgJiMzNDtjb250ZXh0IHN3aXRjaGluZyYjMzQ7IG9yIGF0IGxlYXN0IHNvbWUgcGFydCBvZiB0aGUgcHJvY2Vzcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5ICp3aGF0KiBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSXMgaXQgdGhlIGNvcmUgc3RhdGUgbWFuYWdlbWVudCwgb3IganVzdCBhIHNtYWxsIHBpZWNlIHRoYXQgaW50ZXJmYWNlcyB3aXRoIHNvbWUgaGFyZHdhcmUgcmVnaXN0ZXJzPyBJcyB0aGlzIHBhcnQgb2YgYSBtb25vbGl0aGljIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiBvciBzb21ldGhpbmcgbW9yZSBtb2R1bGFyPyBBcmUgd2UgdGFsa2luZyBhYm91dCB1c2VyLXNwYWNlIHN3YXBwaW5nLCBrZXJuZWwtbGV2ZWwsIG9yIGJvdGg/CgpJJiMzOTtsbCBzdGFydCBieSBkaXNhc3NlbWJsaW5nIGl0LiBJJiMzOTttIGxvb2tpbmcgZm9yIGtleSBpbnN0cnVjdGlvbnMg4oCTIGBtb3ZgIHRvIHNwZWNpZmljIHJlZ2lzdGVycywgbGlrZWx5IHRob3NlIGFzc29jaWF0ZWQgd2l0aCB0aGUgUHJvZ3JhbSBTdGF0dXMgV29yZCwgc3RhY2sgbWFuaXB1bGF0aW9ucywgcGVyaGFwcyBzb21lIGBzeXNjYWxsYCBpbnN0cnVjdGlvbnMgdGhhdCB3b3VsZCB0aWUgaW50byB0aGUgb3BlcmF0aW5nIHN5c3RlbSYjMzk7cyBzd2FwIHByaW1pdGl2ZXMuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGhpbnRzIG9mIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaG9sZCBwcm9jZXNzIHN0YXRlLiBBcmUgdGhlcmUgcG9pbnRlcnMgdG8gdGFzayBjb250cm9sIGJsb2Nrcywgb3IgcGVyaGFwcyBhIG1vcmUgZWxlZ2FudCBkZXNjcmlwdG9yIHN0cnVjdHVyZT8KCknigJlsbCBsb29rIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMuIFRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiBjbHVlIGFzIHRvIHdoZXRoZXIgb3Igbm90IGl0JiMzOTtzIGEgc3RhbmQtYWxvbmUgZnVuY3Rpb24sIG9yIGlmIGl0IGhhcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gd2FudCB0byBpZGVudGlmeSBob3cgaXQgZ2V0cyBjYWxsZWQuIElzIGl0IHBhcnQgb2YgYSBzY2hlZHVsZWQgaW50ZXJydXB0LCBhIHRyYXAsIG9yIGlzIGl0IHRyaWdnZXJlZCBkaXJlY3RseSBieSBzb21lIHNvZnR3YXJlIGV2ZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIGlzIGNyaXRpY2FsLiBUaGUgY2FsbGluZyBjb252ZW50aW9uIG9mIHRoZSBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBleHRyZW1lbHkgaW1wb3J0YW50IGhlcmUuCgpJIGFudGljaXBhdGUgc2VlaW5nIGFzc2VtYmx5IHJlbGF0ZWQgdG8gc2F2aW5nIGFuZCByZXN0b3JpbmcgcmVnaXN0ZXIgY29udGV4dHMsIG1hbmFnaW5nIHRoZSBwYWdlIHRhYmxlcywgYW5kIHBvc3NpYmx5IGRlYWxpbmcgd2l0aCBjYWNoZSBjb2hlcmVuY2UuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHBlcmZvcm1hbmNlLWNyaXRpY2FsLCBzbyBJIGV4cGVjdCB0aGUgY29kZSB0byBiZSBvcHRpbWl6ZWQg4oCTIGhhbmQtY29kZWQgYXNzZW1ibHkgaXMgYSByZWFsIHBvc3NpYmlsaXR5LiBJ4oCZbGwga2VlcCBhIGNsb3NlIGV5ZSBmb3IgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb24gaXNzdWVzIG9yIGFyZWFzIG9mIGNvbmNlcm4sIHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zIG9yIHN1YnRsZSBtZW1vcnkgbGVha3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3N0YXRlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTc2PWVuZGlmXG5tbS9NYWtlZmlsZS03Ny1cbm1tL01ha2VmaWxlOjc4Om9iai0kKENPTkZJR19TV0FQKVx0JiM0Mzs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVx0JiM0Mzs9IHpzd2FwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4ODcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBTd2FwIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiBhZ2Fpbi4gUmlnaHQsIGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfWlNXQVBgIGFyZSBkZWZpbml0ZWx5IG5lY2Vzc2FyeSwgSSBrbm93IHRoYXQuIEJ1dCB3aGVyZSBhcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zPyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgZGVwZW5kZW5jeSBzZXR0aW5ncyBmb3IgdGhlc2UuIE15IG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCByaWdodD8gVGhhdCYjMzk7cyBpbiB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHNvcnQgdGhpcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNvbnRyb2xcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcywgYW5kIGl0IGxvb2tzIGxpa2UgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZWxldmFudCDigJMgdGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBhcHByb3ByaWF0ZSBmb2N1cyBzeW1ib2xzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCB0byBmaW5kIHRoZSBrZXkgQVBJIGVudHJ5IHBvaW50cyBmb3IgdGhpcyBtZW1vcnkgcmVjbGFpbSBhbmQgc3dhcCB3cml0ZWJhY2sgc2NlbmFyaW8uCgpBbHJpZ2h0LCBpbml0aWFsIGNhbmRpZGF0ZXM6IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIHNlZW0gcHJvbWlzaW5nLCB0aG9zZSBsb29rIGxpa2UgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSBhbHNvIHNlZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLiBIbW0sIHRyaWNreS4gVGhlIGluc3RydWN0aW9ucyBkbyBtZW50aW9uIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucyBvdmVyIGludGVybmFscy4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLCBldmVuIHRob3VnaCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyBzdGF0aWMsIGl0JiMzOTtzICpub3QqIGlubGluZWQuIEl0IG11c3QgYmUgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2UsIHBvc3NpYmx5IGFzIGEgY2FsbGJhY2suIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyBhY3R1YWxseSBpbnZva2VkLiBUaGF0IHdpbGwgY2xhcmlmeSBpZiBpdCYjMzk7cyBhIHN1aXRhYmxlIGNhbmRpZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTkyND1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy05ODYtICovXG5tbS96c3dhcC5jOjk4NzpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxubW0venN3YXAuYy05ODgtXHRcdFx0XHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXG4tLVxubW0venN3YXAuYz0xMTAyPXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXG4tLVxubW0venN3YXAuYy0xMTI1LVx0ICogMS4gV2UgZXh0cmFjdCB0aGUgc3dwX2VudHJ5X3QgdG8gdGhlIHN0YWNrLCBhbGxvd2luZ1xubW0venN3YXAuYzoxMTI2Olx0ICogICAgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgdG8gcGluIHRoZSBzd2FwIGVudHJ5IGFuZFxubW0venN3YXAuYy0xMTI3LVx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnkmIzM5O3Ncbi0tXG5tbS96c3dhcC5jLTExNjAtXG5tbS96c3dhcC5jOjExNjE6XHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XG5tbS96c3dhcC5jLTExNjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBSZWNsYW1hdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc2hyaW5rX21lbWNnX2NiYC4gUmlnaHQsIHRoaXMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB1c2VkIHdpdGggYGxpc3RfbHJ1X3Nocmlua19jYmAuIE15IGJyYWluIGltbWVkaWF0ZWx5IG1ha2VzIHRoZSBjb25uZWN0aW9uOiBUaGlzIGlzIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWNsYWltIHByb2Nlc3Mgd2l0aGluIGEgY2dyb3VwIGNvbnRleHQuIEFuZCBJIHNlZSB0aGF0IGBzaHJpbmtfbWVtY2dfY2JgIGNhbGxzIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGF0IHN1Z2dlc3RzIHRoaXMgY2FsbGJhY2sgaXMgaW52b2x2ZWQgaW4gd3JpdGluZyBtZW1vcnkgcGFnZXMgdG8genN3YXAgd2hlbiBhIG1lbWNnIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgd2hpY2ggbWVhbnMgaXQgaXMgYXR0ZW1wdGluZyB0byBmcmVlIHVwIG1lbW9yeS4KClNpbmNlIHRoZSBwYWdlcyB3aWxsIGhhdmUgdG8gZ28gc29tZXdoZXJlLCBsZXQgbWUgY2hlY2sgYGZvbGlvX2VuZF93cml0ZWJhY2tgLiBUaGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBkZXRhaWxzIGFyZSByZWdhcmRpbmcgdGhlIGFjdHVhbCBhY3Rpb24gb2YgdGhlIHdyaXRlYmFjayBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2Ugc3RydWN0dXJlLCBhbmQgdGhlcmVmb3JlIGl0IGlzIHRoZSBjcnVjaWFsIHBhcnQgdGhhdCBlbnN1cmVzIHRoZSBtZW1vcnkgaXMgYWN0dWFsbHkgd3JpdHRlbiBiYWNrLCBwb3RlbnRpYWxseSB0byB0aGUgc3dhcCBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2VuZF93cml0ZWJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTE2NDU9RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpO1xuLS1cbm1tL2ZpbGVtYXAuYy0xNjQ3LS8qKlxubW0vZmlsZW1hcC5jOjE2NDg6ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXG5tbS9maWxlbWFwLmMtMTY0OS0gKiBAZm9saW86IFRoZSBmb2xpby5cbi0tXG5tbS9maWxlbWFwLmMtMTY1NS0gKi9cbm1tL2ZpbGVtYXAuYzoxNjU2OnZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMTY1Ny17XG4tLVxubW0vZmlsZW1hcC5jLTE2NzEtXG5tbS9maWxlbWFwLmM6MTY3MjpcdGlmIChfX2ZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pKVxubW0vZmlsZW1hcC5jLTE2NzMtXHRcdGZvbGlvX3dha2VfYml0KGZvbGlvLCBQR193cml0ZWJhY2spO1xuLS1cbm1tL2ZpbGVtYXAuYy0xNjc2LX1cbm1tL2ZpbGVtYXAuYzoxNjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7XG5tbS9maWxlbWFwLmMtMTY3OC1cbm1tL2ZpbGVtYXAuYy0xNjc5LS8qKlxubW0vZmlsZW1hcC5jOjE2ODA6ICogZm9saW9fZW5kX3dyaXRlYmFjayAtIEVuZCB3cml0ZWJhY2sgYWdhaW5zdCBhIGZvbGlvLlxubW0vZmlsZW1hcC5jLTE2ODEtICogQGZvbGlvOiBUaGUgZm9saW8uXG4tLVxubW0vZmlsZW1hcC5jLTE2ODYtICovXG5tbS9maWxlbWFwLmM6MTY4Nzp2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjg4LXtcbi0tXG5tbS9maWxlbWFwLmMtMTcwMS1cdC8qXG5tbS9maWxlbWFwLmM6MTcwMjpcdCAqIFNhbXBsZSB0aGlzIGJlZm9yZSBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoKSBjbGVhcnNcbm1tL2ZpbGVtYXAuYy0xNzAzLVx0ICogUEdfd3JpdGViYWNrOiB1bnRpbCB0aGVuIGEgcmFjaW5nIHN3YXBpbiBjYW5ub3QgcmVtb3ZlIHRoZSBmb2xpbyBmcm9tXG4tLVxubW0vZmlsZW1hcC5jLTE3MTAtXG5tbS9maWxlbWFwLmM6MTcxMTpcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMTcxMi1cbi0tXG5tbS9maWxlbWFwLmMtMTcyMC19XG5tbS9maWxlbWFwLmM6MTcyMTpFWFBPUlRfU1lNQk9MKGZvbGlvX2VuZF93cml0ZWJhY2spO1xubW0vZmlsZW1hcC5jLTE3MjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGluIE1lbW9yeSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIEkmIzM5O20gemVyb2luZyBpbiBvbiBhIGZldyBwcm9taXNpbmcgY2FuZGlkYXRlcyBmb3IgdHJhY2tpbmcsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBGaXJzdCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgIGZlZWxzIGxpa2UgYSBzb2xpZCBjaG9pY2Ug4oCTIGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHdyaXRlYmFjayBwcm9jZXNzLCBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uIFRoZW4sIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBsb29rcyBlcXVhbGx5IHJlbGV2YW50LCBzcGVjaWZpY2FsbHkgdGllZCB0byBzd2FwIEkvTyBhbmQgZm9saW8gb3BlcmF0aW9ucywgd2hpY2ggY291bGQgYmUgdmVyeSB0ZWxsaW5nLiBBbmQsIGxldCYjMzk7cyBhZGQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIHRvIHRoZSBsaXN0OyBoYW5kbGluZyBwYWdlIHJlY2xhbWF0aW9uIGlzIGFsd2F5cyBhIGNvbXBsZXggYXJlYSB0aGF0IG1lcml0cyBjbG9zZSBpbnNwZWN0aW9uLgoKTm93LCByZWdhcmRpbmcgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIEkmIzM5O20gYSBiaXQgY3VyaW91cy4gSXQmIzM5O3Mgbm90IGRlY2xhcmVkIHN0YXRpYywgd2hpY2ggc3VnZ2VzdHMgaXQgbWlnaHQgYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIGl0cyBjb21waWxhdGlvbiB1bml0LiBCdXQsIHdoZXRoZXIgaXQmIzM5O3MgYWN0dWFsbHkgKmV4cG9ydGVkKiBpcyB0aGUga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgc3ltYm9scyB0YWJsZSB0byB2ZXJpZnkgaWYgaXQmIzM5O3MgdmlzaWJsZSwgYXMgdGhpcyB3aWxsIGluZmx1ZW5jZSBpdHMgdXRpbGl0eSBpbiBvdXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmM9NDAzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy00ODktLyoqXG5tbS9zd2FwX3N0YXRlLmM6NDkwOiAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtNDkxLSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUwOS0gKi9cbm1tL3N3YXBfc3RhdGUuYzo1MTA6c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxubW0vc3dhcF9zdGF0ZS5jLTUxMS1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTY3OT1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNjg4LVx0XHRcdHJldHVybiBmb2xpbztcbm1tL3N3YXBfc3RhdGUuYzo2ODk6XHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbm1tL3N3YXBfc3RhdGUuYy02OTAtXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NzIxPXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTcyOS1cdFx0XHRyZXR1cm4gZm9saW87XG5tbS9zd2FwX3N0YXRlLmM6NzMwOlx0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbm1tL3N3YXBfc3RhdGUuYy03MzEtXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBhIEtleSBTeW1ib2wgZm9yIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbnRlcm5hbGx5IHdpdGhpbiB0aGUga2VybmVsLiBJdOKAmXMgbm9uLXN0YXRpYywgaG93ZXZlciwgbWVhbmluZyBpdCYjMzk7cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIHdpdGhpbiBhIGxhcmdlciBjb21waWxhdGlvbiB1bml0LiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHVzZWQgd2l0aGluIGBtbS96c3dhcC5jYCBuYXJyb3dzIG15IGZvY3VzIGNvbnNpZGVyYWJseS4gWnN3YXAgaXMgbWVtb3J5IGNvbXByZXNzaW9uLCBzbyB0aGlzIGxpa2VseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGludGVyYWN0aW9uIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb21wcmVzc2VkIHN3YXAuIFRoaXMgbWFrZXMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgYSBwcmltZSBjYW5kaWRhdGUgdG8gZGlzc2VjdCBhbmQgdW5kZXJzdGFuZCBmdXJ0aGVyLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0lzIHRoaXMgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24gZm9yIHN3YXBjYWNoZSBmb2xpb3M/JiMzNDsgR2l2ZW4gdGhhdCBjb250ZXh0LCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgY2hlY2sgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIG5leHQuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgbmV4dCBzdGVwIGdpdmVuIHRoZSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZW1vdmVfbWFwcGluZ19yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODExPWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdm1zY2FuLmMtODE2LS8qKlxubW0vdm1zY2FuLmM6ODE3OiAqIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSAtIFJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcsIGFzIHJlY2xhaW0gZG9lcy5cbm1tL3Ztc2Nhbi5jLTgxOC0gKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXG4tLVxubW0vdm1zY2FuLmMtODMwLSAqL1xubW0vdm1zY2FuLmM6ODMxOmxvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTgzMi1cdFx0XHQgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIE1lbW9yeSBSZWNsYW1hdGlvbiBpbiB0aGUgQmxvY2sgTGF5ZXIqKgoKT2theSwgc28gYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB2aXNpYmxlIGFuZCBwb3RlbnRpYWxseSB1c2VkIG91dHNpZGUgb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQmIzM5O3MgZGVmaW5lZCBpbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cgZm9yIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2xhaW1pbmcgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIGJsb2NrIGRldmljZS4KClNpbmNlIHRoaXMgaXMgcmVsYXRlZCB0byByZW1vdmluZyBhbmQgcmVjbGFpbWluZywgbXkgbmV4dCBvYnZpb3VzIHN0ZXAgaXMgdG8gZGlnIGludG8gYHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmNgLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYXN5bmNocm9ub3VzIHdyaXRlcyB0byBibG9jayBkZXZpY2VzIGR1cmluZyBzd2FwIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBmcmVlaW5nIHVwIHBhZ2VzLCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGNvdWxkIHZlcnkgd2VsbCBiZSBwYXJ0IG9mIHRoYXQgY3ljbGUuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHR3byBpbnRlcmFjdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWNsYWltaW5nIHByb2Nlc3Mgd2hlbiB3cml0aW5nIGJhY2sgc3dhcCBwYWdlcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY2FsbCBjaGFpbiBhbmQgaG93IHRoZSByZWNsYWltIG9wZXJhdGlvbiBpcyBpbml0aWF0ZWQuIEtub3dpbmcgdGhlIGNvbnRleHQgd2lsbCBoZWxwIG1lIHdpdGggYW55IHBvdGVudGlhbCBidWctaHVudGluZyBvciBvcHRpbWl6YXRpb24gZWZmb3J0cyBpbiB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2lvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9pby5jPTQyOT1zdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X3N5bmMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlX2lvLmMtNDQ4LVxubW0vcGFnZV9pby5jOjQ0OTpzdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9wYWdlX2lvLmMtNDUwLVx0XHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzKVxuLS1cbm1tL3BhZ2VfaW8uYz00NzM9dm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2lvY2IgKipzd2FwX3BsdWcpXG4tLVxubW0vcGFnZV9pby5jLTQ5Mi1cdGVsc2Vcbm1tL3BhZ2VfaW8uYzo0OTM6XHRcdHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmMoZm9saW8sIHNpcyk7XG5tbS9wYWdlX2lvLmMtNDk0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2MjcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgU3dhcCBXcml0ZWJhY2sgYW5kIFpTV0FQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gbXkgZm9jdXMuIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIHJlbGF0ZWQgc3ltYm9scy4gTXkgYXR0ZW50aW9uIGdvZXMgdG86IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGluIHJlbGF0aW9uIHRvIHRoZSBzd2FwIHdyaXRlYmFjayBwcm9jZXNzLgoKTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZm9jdXNpbmcgb24gYFpTV0FQYCwgYFNXQVBgLCBhbmQgYE1FTUNHYC4gSSBuZWVkIHRvIHZlcmlmeSBhIHBvaW50IGhlcmUuIEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBhbGxvY2F0b3IgdGhhdCBgWlNXQVBgIHVzZXMuIERvZXMgaXQgKnJlcXVpcmUqIGBaU01BTExPQ2AsIG9yIGEgc2ltaWxhciBhbGxvY2F0b3I/CgpDaGVja2luZyBgbW0vS2NvbmZpZ2AsIEkgY2FuIHNlZToKYGNvbmZpZyBaU1dBUGAKYGRlcGVuZHMgb24gU1dBUGAKYHNlbGVjdCBDUllQVE9gCmBzZWxlY3QgWlBPT0xgCgpBaCwgaXQgZGVwZW5kcyBvbiBgU1dBUGAsIGFuZCBzZWxlY3RzIGBDUllQVE9gIGFuZCBgWlBPT0xgLiBTbyBpdCBkb2VzbiYjMzk7dCBzdHJpY3RseSAqcmVxdWlyZSogYFpTTUFMTE9DYCwgYnV0IGBaU01BTExPQ2AgKG9yIHNpbWlsYXIpIGlzIGEgY29tbW9ubHkgdXNlZCBhbGxvY2F0b3IgZm9yIGl0LiBUaGF0IG1ha2VzIHNlbnNlLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2UgYSByZWNvbW1lbmRhdGlvbiBhYm91dCBlbmFibGluZyBgWlNXQVBfREVGQVVMVF9PTmAuIEdpdmVuIHRoZSBjdXJyZW50IGNvbnRleHQsIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMsIGVuYWJsaW5nIGBaU1dBUF9ERUZBVUxUX09OYCB3b3VsZCBiZSBhIGdvb2QgZGVmYXVsdC4gSXQgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBjaG9pY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTIyPWNvbmZpZyBaU1dBUFxuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI3MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQWgsIHllcywgY29uZmlybWVkLCBpdCYjMzk7cyBzZXQuIEdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLgoKTm93LCBzaGlmdGluZyBnZWFycywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX0NHUk9VUFNgLiBJcyBgTUVNQ0dgIHN1ZmZpY2llbnQgb24gaXRzIG93biwgb3IgZG9lcyBpdCBkZXBlbmQgb24gYENHUk9VUFNgPyBObywgd2FpdC4uLiBsZXQmIzM5O3Mgbm90IGFzc3VtZS4gSSBzaG91bGQgY2hlY2sgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgb2YgYE1FTUNHYCB0byBiZSBzdXJlLiBJdCYjMzk7cyBiZXN0IHRvIGJlIHByZWNpc2UgaGVyZTsgSSYjMzk7bGwgdHJhY2UgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1ODUgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmluaXQvS2NvbmZpZz02Mz1jb25maWcgUlVTVENfVkVSU0lPTlxuLS1cbmluaXQvS2NvbmZpZy02Ny1cdCAgSXQgZG9lcyBub3QgZGVwZW5kIG9uIGBSVVNUYCBzaW5jZSB0aGF0IG9uZSBtYXkgbmVlZCB0byB1c2UgdGhlIHZlcnNpb25cbmluaXQvS2NvbmZpZzo2ODpcdCAgaW4gYSBgZGVwZW5kcyBvbmAuXG5pbml0L0tjb25maWctNjktXG4tLVxuaW5pdC9LY29uZmlnPTExMT1jb25maWcgR0NDX0FTTV9HT1RPX09VVFBVVF9CUk9LRU5cbmluaXQvS2NvbmZpZy0xMTItXHRib29sXG5pbml0L0tjb25maWc6MTEzOlx0ZGVwZW5kcyBvbiBDQ19JU19HQ0NcbmluaXQvS2NvbmZpZy0xMTQtXHRkZWZhdWx0IHkgaWYgR0NDX1ZFUlNJT04gXHUwMDNjIDExMDUwMFxuLS1cbmluaXQvS2NvbmZpZz0xMTg9Y29uZmlnIENDX0hBU19BU01fR09UT19PVVRQVVRcbmluaXQvS2NvbmZpZy0xMTktXHRkZWZfYm9vbCB5XG5pbml0L0tjb25maWc6MTIwOlx0ZGVwZW5kcyBvbiAhR0NDX0FTTV9HT1RPX09VVFBVVF9CUk9LRU5cbmluaXQvS2NvbmZpZzoxMjE6XHRkZXBlbmRzIG9uICQoc3VjY2VzcyxlY2hvICYjMzk7aW50IGZvbyhpbnQgeCkgeyBhc20gZ290byAoXCYjMzQ7XCYjMzQ7OiBcJiMzNDs9clwmIzM0Oyh4KSA6OjogYmFyKTsgcmV0dXJuIHg7IGJhcjogcmV0dXJuIDA7IH0mIzM5OyB8ICQoQ0MpIC14IGMgLSAtYyAtbyAvZGV2L251bGwpXG5pbml0L0tjb25maWctMTIyLVxuaW5pdC9LY29uZmlnPTEyMz1jb25maWcgQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXG5pbml0L0tjb25maWc6MTI0Olx0ZGVwZW5kcyBvbiBDQ19IQVNfQVNNX0dPVE9fT1VUUFVUXG5pbml0L0tjb25maWctMTI1LVx0IyBEZXRlY3QgYnVnZ3kgZ2NjIGFuZCBjbGFuZywgZml4ZWQgaW4gZ2NjLTExIGNsYW5nLTE0LlxuLS1cbmluaXQvS2NvbmZpZz0yMjg9Y29uZmlnIEJST0tFTl9PTl9TTVBcbmluaXQvS2NvbmZpZy0yMjktXHRib29sXG5pbml0L0tjb25maWc6MjMwOlx0ZGVwZW5kcyBvbiBCUk9LRU4gfHwgIVNNUFxuaW5pdC9LY29uZmlnLTIzMS1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz0yNDE9Y29uZmlnIENPTVBJTEVfVEVTVFxuaW5pdC9LY29uZmlnLTI0Mi1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBhbHNvIGRyaXZlcnMgd2hpY2ggd2lsbCBub3QgbG9hZFwmIzM0O1xuaW5pdC9LY29uZmlnOjI0MzpcdGRlcGVuZHMgb24gSEFTX0lPTUVNXG5pbml0L0tjb25maWctMjQ0LVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0yNzI9Y29uZmlnIFVBUElfSEVBREVSX1RFU1RcbmluaXQvS2NvbmZpZy0yNzMtXHRib29sIFwmIzM0O0NvbXBpbGUgdGVzdCBVQVBJIGhlYWRlcnNcJiMzNDtcbmluaXQvS2NvbmZpZzoyNzQ6XHRkZXBlbmRzIG9uIEhFQURFUlNfSU5TVEFMTFxuaW5pdC9LY29uZmlnLTI3NS1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MjkyPWNvbmZpZyBMT0NBTFZFUlNJT05fQVVUT1xuLS1cbmluaXQvS2NvbmZpZy0yOTQtXHRkZWZhdWx0IHlcbmluaXQvS2NvbmZpZzoyOTU6XHRkZXBlbmRzIG9uICFDT01QSUxFX1RFU1RcbmluaXQvS2NvbmZpZy0yOTYtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTM0Nj1jaG9pY2Vcbi0tXG5pbml0L0tjb25maWctMzQ4LVx0ZGVmYXVsdCBLRVJORUxfR1pJUFxuaW5pdC9LY29uZmlnOjM0OTpcdGRlcGVuZHMgb24gSEFWRV9LRVJORUxfR1pJUCB8fCBIQVZFX0tFUk5FTF9CWklQMiB8fCBIQVZFX0tFUk5FTF9MWk1BIHx8IEhBVkVfS0VSTkVMX1haIHx8IEhBVkVfS0VSTkVMX0xaTyB8fCBIQVZFX0tFUk5FTF9MWjQgfHwgSEFWRV9LRVJORUxfWlNURCB8fCBIQVZFX0tFUk5FTF9VTkNPTVBSRVNTRURcbmluaXQvS2NvbmZpZy0zNTAtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTM2OD1jb25maWcgS0VSTkVMX0daSVBcbmluaXQvS2NvbmZpZy0zNjktXHRib29sIFwmIzM0O0d6aXBcJiMzNDtcbmluaXQvS2NvbmZpZzozNzA6XHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0daSVBcbmluaXQvS2NvbmZpZy0zNzEtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTM3NT1jb25maWcgS0VSTkVMX0JaSVAyXG5pbml0L0tjb25maWctMzc2LVx0Ym9vbCBcJiMzNDtCemlwMlwmIzM0O1xuaW5pdC9LY29uZmlnOjM3NzpcdGRlcGVuZHMgb24gSEFWRV9LRVJORUxfQlpJUDJcbmluaXQvS2NvbmZpZy0zNzgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTM4NT1jb25maWcgS0VSTkVMX0xaTUFcbmluaXQvS2NvbmZpZy0zODYtXHRib29sIFwmIzM0O0xaTUFcJiMzNDtcbmluaXQvS2NvbmZpZzozODc6XHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0xaTUFcbmluaXQvS2NvbmZpZy0zODgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTM5Mz1jb25maWcgS0VSTkVMX1haXG5pbml0L0tjb25maWctMzk0LVx0Ym9vbCBcJiMzNDtYWlwmIzM0O1xuaW5pdC9LY29uZmlnOjM5NTpcdGRlcGVuZHMgb24gSEFWRV9LRVJORUxfWFpcbmluaXQvS2NvbmZpZy0zOTYtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTQwOT1jb25maWcgS0VSTkVMX0xaT1xuaW5pdC9LY29uZmlnLTQxMC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG5pbml0L0tjb25maWc6NDExOlx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9MWk9cbmluaXQvS2NvbmZpZy00MTItXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTQxNz1jb25maWcgS0VSTkVMX0xaNFxuaW5pdC9LY29uZmlnLTQxOC1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG5pbml0L0tjb25maWc6NDE5Olx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9MWjRcbmluaXQvS2NvbmZpZy00MjAtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTQyOT1jb25maWcgS0VSTkVMX1pTVERcbmluaXQvS2NvbmZpZy00MzAtXHRib29sIFwmIzM0O1pTVERcJiMzNDtcbmluaXQvS2NvbmZpZzo0MzE6XHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX1pTVERcbmluaXQvS2NvbmZpZy00MzItXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTQzOT1jb25maWcgS0VSTkVMX1VOQ09NUFJFU1NFRFxuaW5pdC9LY29uZmlnLTQ0MC1cdGJvb2wgXCYjMzQ7Tm9uZVwmIzM0O1xuaW5pdC9LY29uZmlnOjQ0MTpcdGRlcGVuZHMgb24gSEFWRV9LRVJORUxfVU5DT01QUkVTU0VEXG5pbml0L0tjb25maWctNDQyLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz00ODU9Y29uZmlnIFNZU1ZJUENfU1lTQ1RMXG5pbml0L0tjb25maWctNDg2LVx0Ym9vbFxuaW5pdC9LY29uZmlnOjQ4NzpcdGRlcGVuZHMgb24gU1lTVklQQ1xuaW5pdC9LY29uZmlnOjQ4ODpcdGRlcGVuZHMgb24gU1lTQ1RMXG5pbml0L0tjb25maWctNDg5LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTQ5MT1jb25maWcgU1lTVklQQ19DT01QQVRcbmluaXQvS2NvbmZpZy00OTItXHRkZWZfYm9vbCB5XG5pbml0L0tjb25maWc6NDkzOlx0ZGVwZW5kcyBvbiBDT01QQVQgXHUwMDI2XHUwMDI2IFNZU1ZJUENcbmluaXQvS2NvbmZpZy00OTQtXG5pbml0L0tjb25maWc9NDk1PWNvbmZpZyBQT1NJWF9NUVVFVUVcbmluaXQvS2NvbmZpZy00OTYtXHRib29sIFwmIzM0O1BPU0lYIE1lc3NhZ2UgUXVldWVzXCYjMzQ7XG5pbml0L0tjb25maWc6NDk3Olx0ZGVwZW5kcyBvbiBORVRcbmluaXQvS2NvbmZpZy00OTgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTUxMT1jb25maWcgUE9TSVhfTVFVRVVFX1NZU0NUTFxuaW5pdC9LY29uZmlnLTUxMi1cdGJvb2xcbmluaXQvS2NvbmZpZzo1MTM6XHRkZXBlbmRzIG9uIFBPU0lYX01RVUVVRVxuaW5pdC9LY29uZmlnOjUxNDpcdGRlcGVuZHMgb24gU1lTQ1RMXG5pbml0L0tjb25maWctNTE1LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTUyOT1jb25maWcgQ1JPU1NfTUVNT1JZX0FUVEFDSFxuaW5pdC9LY29uZmlnLTUzMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHByb2Nlc3Nfdm1fcmVhZHYvd3JpdGV2IHN5c2NhbGxzXCYjMzQ7XG5pbml0L0tjb25maWc6NTMxOlx0ZGVwZW5kcyBvbiBNTVVcbmluaXQvS2NvbmZpZy01MzItXHRkZWZhdWx0IHlcbi0tXG5pbml0L0tjb25maWc9NTM5PWNvbmZpZyBBVURJVFxuaW5pdC9LY29uZmlnLTU0MC1cdGJvb2wgXCYjMzQ7QXVkaXRpbmcgc3VwcG9ydFwmIzM0O1xuaW5pdC9LY29uZmlnOjU0MTpcdGRlcGVuZHMgb24gTkVUXG5pbml0L0tjb25maWctNTQyLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz01NTE9Y29uZmlnIEFVRElUU1lTQ0FMTFxuaW5pdC9LY29uZmlnLTU1Mi1cdGRlZl9ib29sIHlcbmluaXQvS2NvbmZpZzo1NTM6XHRkZXBlbmRzIG9uIEFVRElUIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXG5pbml0L0tjb25maWctNTU0LVx0c2VsZWN0IEZTTk9USUZZXG4tLVxuaW5pdC9LY29uZmlnPTU3Mj1jb25maWcgVElDS19DUFVfQUNDT1VOVElOR1xuaW5pdC9LY29uZmlnLTU3My1cdGJvb2wgXCYjMzQ7U2ltcGxlIHRpY2sgYmFzZWQgY3B1dGltZSBhY2NvdW50aW5nXCYjMzQ7XG5pbml0L0tjb25maWc6NTc0Olx0ZGVwZW5kcyBvbiAhUzM5MCBcdTAwMjZcdTAwMjYgIU5PX0haX0ZVTExcbmluaXQvS2NvbmZpZy01NzUtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTU4Mj1jb25maWcgVklSVF9DUFVfQUNDT1VOVElOR19OQVRJVkVcbmluaXQvS2NvbmZpZy01ODMtXHRib29sIFwmIzM0O0RldGVybWluaXN0aWMgdGFzayBhbmQgQ1BVIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuaW5pdC9LY29uZmlnOjU4NDpcdGRlcGVuZHMgb24gSEFWRV9WSVJUX0NQVV9BQ0NPVU5USU5HIFx1MDAyNlx1MDAyNiAhTk9fSFpfRlVMTFxuaW5pdC9LY29uZmlnLTU4NS1cdHNlbGVjdCBWSVJUX0NQVV9BQ0NPVU5USU5HXG4tLVxuaW5pdC9LY29uZmlnPTU5NT1jb25maWcgVklSVF9DUFVfQUNDT1VOVElOR19HRU5cbmluaXQvS2NvbmZpZy01OTYtXHRib29sIFwmIzM0O0Z1bGwgZHludGlja3MgQ1BVIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuaW5pdC9LY29uZmlnOjU5NzpcdGRlcGVuZHMgb24gSEFWRV9DT05URVhUX1RSQUNLSU5HX1VTRVJcbmluaXQvS2NvbmZpZzo1OTg6XHRkZXBlbmRzIG9uIEhBVkVfVklSVF9DUFVfQUNDT1VOVElOR19HRU5cbmluaXQvS2NvbmZpZzo1OTk6XHRkZXBlbmRzIG9uIEdFTkVSSUNfQ0xPQ0tFVkVOVFNcbmluaXQvS2NvbmZpZy02MDAtXHRzZWxlY3QgVklSVF9DUFVfQUNDT1VOVElOR1xuLS1cbmluaXQvS2NvbmZpZz02MTY9Y29uZmlnIElSUV9USU1FX0FDQ09VTlRJTkdcbmluaXQvS2NvbmZpZy02MTctXHRib29sIFwmIzM0O0ZpbmUgZ3JhbnVsYXJpdHkgdGFzayBsZXZlbCBJUlEgdGltZSBhY2NvdW50aW5nXCYjMzQ7XG5pbml0L0tjb25maWc6NjE4Olx0ZGVwZW5kcyBvbiBIQVZFX0lSUV9USU1FX0FDQ09VTlRJTkcgXHUwMDI2XHUwMDI2ICFWSVJUX0NQVV9BQ0NPVU5USU5HX05BVElWRVxuaW5pdC9LY29uZmlnLTYxOS1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9NjI3PWNvbmZpZyBIQVZFX1NDSEVEX0FWR19JUlFcbmluaXQvS2NvbmZpZy02MjgtXHRkZWZfYm9vbCB5XG5pbml0L0tjb25maWc6NjI5Olx0ZGVwZW5kcyBvbiBJUlFfVElNRV9BQ0NPVU5USU5HIHx8IFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuaW5pdC9LY29uZmlnOjYzMDpcdGRlcGVuZHMgb24gU01QXG5pbml0L0tjb25maWctNjMxLVxuaW5pdC9LY29uZmlnPTYzMj1jb25maWcgU0NIRURfSFdfUFJFU1NVUkVcbi0tXG5pbml0L0tjb25maWctNjM1LVx0ZGVmYXVsdCB5IGlmIEFSTTY0XG5pbml0L0tjb25maWc6NjM2Olx0ZGVwZW5kcyBvbiBTTVBcbmluaXQvS2NvbmZpZzo2Mzc6XHRkZXBlbmRzIG9uIENQVV9GUkVRX1RIRVJNQUxcbmluaXQvS2NvbmZpZy02MzgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTY1MT1jb25maWcgQlNEX1BST0NFU1NfQUNDVFxuaW5pdC9LY29uZmlnLTY1Mi1cdGJvb2wgXCYjMzQ7QlNEIFByb2Nlc3MgQWNjb3VudGluZyAoREVQUkVDQVRFRClcJiMzNDtcbmluaXQvS2NvbmZpZzo2NTM6XHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuaW5pdC9LY29uZmlnLTY1NC1cdGRlZmF1bHQgblxuLS1cbmluaXQvS2NvbmZpZz02Njg9Y29uZmlnIEJTRF9QUk9DRVNTX0FDQ1RfVjNcbmluaXQvS2NvbmZpZy02NjktXHRib29sIFwmIzM0O0JTRCBQcm9jZXNzIEFjY291bnRpbmcgdmVyc2lvbiAzIGZpbGUgZm9ybWF0XCYjMzQ7XG5pbml0L0tjb25maWc6NjcwOlx0ZGVwZW5kcyBvbiBCU0RfUFJPQ0VTU19BQ0NUXG5pbml0L0tjb25maWctNjcxLVx0ZGVmYXVsdCBuXG4tLVxuaW5pdC9LY29uZmlnPTY4MD1jb25maWcgVEFTS1NUQVRTXG5pbml0L0tjb25maWctNjgxLVx0Ym9vbCBcJiMzNDtFeHBvcnQgdGFzay9wcm9jZXNzIHN0YXRpc3RpY3MgdGhyb3VnaCBuZXRsaW5rXCYjMzQ7XG5pbml0L0tjb25maWc6NjgyOlx0ZGVwZW5kcyBvbiBORVRcbmluaXQvS2NvbmZpZzo2ODM6XHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuaW5pdC9LY29uZmlnLTY4NC1cdGRlZmF1bHQgblxuLS1cbmluaXQvS2NvbmZpZz02OTQ9Y29uZmlnIFRBU0tfREVMQVlfQUNDVFxuaW5pdC9LY29uZmlnLTY5NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHBlci10YXNrIGRlbGF5IGFjY291bnRpbmdcJiMzNDtcbmluaXQvS2NvbmZpZzo2OTY6XHRkZXBlbmRzIG9uIFRBU0tTVEFUU1xuaW5pdC9LY29uZmlnLTY5Ny1cdHNlbGVjdCBTQ0hFRF9JTkZPXG4tLVxuaW5pdC9LY29uZmlnPTcwNj1jb25maWcgVEFTS19YQUNDVFxuaW5pdC9LY29uZmlnLTcwNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGV4dGVuZGVkIGFjY291bnRpbmcgb3ZlciB0YXNrc3RhdHNcJiMzNDtcbmluaXQvS2NvbmZpZzo3MDg6XHRkZXBlbmRzIG9uIFRBU0tTVEFUU1xuaW5pdC9LY29uZmlnLTcwOS1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9NzE1PWNvbmZpZyBUQVNLX0lPX0FDQ09VTlRJTkdcbmluaXQvS2NvbmZpZy03MTYtXHRib29sIFwmIzM0O0VuYWJsZSBwZXItdGFzayBzdG9yYWdlIEkvTyBhY2NvdW50aW5nXCYjMzQ7XG5pbml0L0tjb25maWc6NzE3Olx0ZGVwZW5kcyBvbiBUQVNLX1hBQ0NUXG5pbml0L0tjb25maWctNzE4LVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz03NDQ9Y29uZmlnIFBTSV9ERUZBVUxUX0RJU0FCTEVEXG4tLVxuaW5pdC9LY29uZmlnLTc0Ni1cdGRlZmF1bHQgblxuaW5pdC9LY29uZmlnOjc0NzpcdGRlcGVuZHMgb24gUFNJXG5pbml0L0tjb25maWctNzQ4LVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz03NjY9Y29uZmlnIENQVV9JU09MQVRJT05cbmluaXQvS2NvbmZpZy03NjctXHRib29sIFwmIzM0O0NQVSBpc29sYXRpb25cJiMzNDtcbmluaXQvS2NvbmZpZzo3Njg6XHRkZXBlbmRzIG9uIFNNUFxuaW5pdC9LY29uZmlnLTc2OS1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz03OTI9Y29uZmlnIElLQ09ORklHX1BST0NcbmluaXQvS2NvbmZpZy03OTMtXHRib29sIFwmIzM0O0VuYWJsZSBhY2Nlc3MgdG8gLmNvbmZpZyB0aHJvdWdoIC9wcm9jL2NvbmZpZy5nelwmIzM0O1xuaW5pdC9LY29uZmlnOjc5NDpcdGRlcGVuZHMgb24gSUtDT05GSUcgXHUwMDI2XHUwMDI2IFBST0NfRlNcbmluaXQvS2NvbmZpZy03OTUtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTc5OT1jb25maWcgSUtIRUFERVJTXG5pbml0L0tjb25maWctODAwLVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGtlcm5lbCBoZWFkZXJzIHRocm91Z2ggL3N5cy9rZXJuZWwva2hlYWRlcnMudGFyLnh6XCYjMzQ7XG5pbml0L0tjb25maWc6ODAxOlx0ZGVwZW5kcyBvbiBTWVNGU1xuaW5pdC9LY29uZmlnLTgwMi1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9ODA4PWNvbmZpZyBMT0dfQlVGX1NISUZUXG4tLVxuaW5pdC9LY29uZmlnLTgxMS1cdGRlZmF1bHQgMTdcbmluaXQvS2NvbmZpZzo4MTI6XHRkZXBlbmRzIG9uIFBSSU5US1xuaW5pdC9LY29uZmlnLTgxMy1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9ODI3PWNvbmZpZyBMT0dfQ1BVX01BWF9CVUZfU0hJRlRcbmluaXQvS2NvbmZpZy04MjgtXHRpbnQgXCYjMzQ7Q1BVIGtlcm5lbCBsb2cgYnVmZmVyIHNpemUgY29udHJpYnV0aW9uICgxMyA9XHUwMDNlIDggS0IsIDE3ID1cdTAwM2UgMTI4S0IpXCYjMzQ7XG5pbml0L0tjb25maWc6ODI5Olx0ZGVwZW5kcyBvbiBTTVBcbmluaXQvS2NvbmZpZy04MzAtXHRyYW5nZSAwIDIxXG4tLVxuaW5pdC9LY29uZmlnLTgzMi1cdGRlZmF1bHQgMTJcbmluaXQvS2NvbmZpZzo4MzM6XHRkZXBlbmRzIG9uIFBSSU5US1xuaW5pdC9LY29uZmlnLTgzNC1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9ODYzPWNvbmZpZyBQUklOVEtfSU5ERVhcbmluaXQvS2NvbmZpZy04NjQtXHRib29sIFwmIzM0O1ByaW50ayBpbmRleGluZyBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuaW5pdC9LY29uZmlnOjg2NTpcdGRlcGVuZHMgb24gUFJJTlRLIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuaW5pdC9LY29uZmlnLTg2Ni1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9ODg4PWNvbmZpZyBVQ0xBTVBfVEFTS1xuaW5pdC9LY29uZmlnLTg4OS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHV0aWxpemF0aW9uIGNsYW1waW5nIGZvciBSVC9GQUlSIHRhc2tzXCYjMzQ7XG5pbml0L0tjb25maWc6ODkwOlx0ZGVwZW5kcyBvbiBDUFVfRlJFUV9HT1ZfU0NIRURVVElMXG5pbml0L0tjb25maWctODkxLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz05MDY9Y29uZmlnIFVDTEFNUF9CVUNLRVRTX0NPVU5UXG4tLVxuaW5pdC9LY29uZmlnLTkwOS1cdGRlZmF1bHQgNVxuaW5pdC9LY29uZmlnOjkxMDpcdGRlcGVuZHMgb24gVUNMQU1QX1RBU0tcbmluaXQvS2NvbmZpZy05MTEtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTkzNz1jb25maWcgU0NIRURfUFJPWFlfRVhFQ1xuLS1cbmluaXQvS2NvbmZpZy05MzktXHQjIEF2b2lkIHNvbWUgYnVpbGQgZmFpbHVyZXMgdy8gUFJFRU1QVF9SVCB1bnRpbCBpdCBjYW4gYmUgZml4ZWRcbmluaXQvS2NvbmZpZzo5NDA6XHRkZXBlbmRzIG9uICFQUkVFTVBUX1JUXG5pbml0L0tjb25maWctOTQxLVx0IyBOZWVkIHRvIGludmVzdGlnYXRlIGhvdyB0byBpbmZvcm0gc2NoZWRfZXh0IG9mIHNwbGl0IGNvbnRleHRzXG5pbml0L0tjb25maWc6OTQyOlx0ZGVwZW5kcyBvbiAhU0NIRURfQ0xBU1NfRVhUXG5pbml0L0tjb25maWctOTQzLVx0IyBOb3QgcGFydGljdWxhcmx5IHVzZWZ1bCB1bnRpbCB3ZSBnZXQgdG8gbXVsdGktcnEgcHJveHlpbmdcbmluaXQvS2NvbmZpZzo5NDQ6XHRkZXBlbmRzIG9uIEVYUEVSVFxuaW5pdC9LY29uZmlnLTk0NS1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MTAxND1jb25maWcgTlVNQV9CQUxBTkNJTkdcbmluaXQvS2NvbmZpZy0xMDE1LVx0Ym9vbCBcJiMzNDtNZW1vcnkgcGxhY2VtZW50IGF3YXJlIE5VTUEgc2NoZWR1bGVyXCYjMzQ7XG5pbml0L0tjb25maWc6MTAxNjpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xuaW5pdC9LY29uZmlnOjEwMTc6XHRkZXBlbmRzIG9uICFBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxuaW5pdC9LY29uZmlnOjEwMTg6XHRkZXBlbmRzIG9uIFNNUCBcdTAwMjZcdTAwMjYgTlVNQV9NSUdSQVRJT04gXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG5pbml0L0tjb25maWctMTAxOS1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MTAyNj1jb25maWcgU0NIRURfQ0FDSEVcbi0tXG5pbml0L0tjb25maWctMTAyOC1cdGRlZmF1bHQgeVxuaW5pdC9LY29uZmlnOjEwMjk6XHRkZXBlbmRzIG9uIFNNUFxuaW5pdC9LY29uZmlnLTEwMzAtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTEwMzc9Y29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRFxuLS1cbmluaXQvS2NvbmZpZy0xMDM5LVx0ZGVmYXVsdCB5XG5pbml0L0tjb25maWc6MTA0MDpcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcbmluaXQvS2NvbmZpZy0xMDQxLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0xMDg2PWNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4Ny1cdGJvb2xcbmluaXQvS2NvbmZpZzoxMDg4Olx0ZGVwZW5kcyBvbiBNRU1DR1xuaW5pdC9LY29uZmlnOjEwODk6XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG5pbml0L0tjb25maWc6MTA5MDpcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG5pbml0L0tjb25maWctMTA5MS1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz0xMDkzPWNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTQtXHRib29sXG5pbml0L0tjb25maWc6MTA5NTpcdGRlcGVuZHMgb24gTUVNQ0dcbmluaXQvS2NvbmZpZzoxMDk2Olx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuaW5pdC9LY29uZmlnOjEwOTc6XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG5pbml0L0tjb25maWctMTA5OC1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz0xMTAwPWNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDEtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbmluaXQvS2NvbmZpZzoxMTAyOlx0ZGVwZW5kcyBvbiBNRU1DR1xuaW5pdC9LY29uZmlnLTExMDMtXHRkZWZhdWx0IG5cbi0tXG5pbml0L0tjb25maWc9MTExNz1jb25maWcgQkxLX0NHUk9VUFxuaW5pdC9LY29uZmlnLTExMTgtXHRib29sIFwmIzM0O0lPIGNvbnRyb2xsZXJcJiMzNDtcbmluaXQvS2NvbmZpZzoxMTE5Olx0ZGVwZW5kcyBvbiBCTE9DS1xuaW5pdC9LY29uZmlnLTExMjAtXHRkZWZhdWx0IG5cbi0tXG5pbml0L0tjb25maWc9MTEzOT1jb25maWcgQ0dST1VQX1dSSVRFQkFDS1xuaW5pdC9LY29uZmlnLTExNDAtXHRib29sXG5pbml0L0tjb25maWc6MTE0MTpcdGRlcGVuZHMgb24gTUVNQ0cgXHUwMDI2XHUwMDI2IEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTQyLVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTExNTk9Y29uZmlnIEZBSVJfR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTYwLVx0Ym9vbCBcJiMzNDtHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9PVEhFUlwmIzM0O1xuaW5pdC9LY29uZmlnOjExNjE6XHRkZXBlbmRzIG9uIENHUk9VUF9TQ0hFRFxuaW5pdC9LY29uZmlnLTExNjItXHRzZWxlY3QgR1JPVVBfU0NIRURfV0VJR0hUXG4tLVxuaW5pdC9LY29uZmlnPTExNjU9Y29uZmlnIENGU19CQU5EV0lEVEhcbmluaXQvS2NvbmZpZy0xMTY2LVx0Ym9vbCBcJiMzNDtDUFUgYmFuZHdpZHRoIHByb3Zpc2lvbmluZyBmb3IgRkFJUl9HUk9VUF9TQ0hFRFwmIzM0O1xuaW5pdC9LY29uZmlnOjExNjc6XHRkZXBlbmRzIG9uIEZBSVJfR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTY4LVx0c2VsZWN0IEdST1VQX1NDSEVEX0JBTkRXSURUSFxuLS1cbmluaXQvS2NvbmZpZz0xMTc3PWNvbmZpZyBSVF9HUk9VUF9TQ0hFRFxuaW5pdC9LY29uZmlnLTExNzgtXHRib29sIFwmIzM0O0dyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX1JSL0ZJRk9cJiMzNDtcbmluaXQvS2NvbmZpZzoxMTc5Olx0ZGVwZW5kcyBvbiBDR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTgwLVx0ZGVmYXVsdCBuXG4tLVxuaW5pdC9LY29uZmlnPTExODg9Y29uZmlnIFJUX0dST1VQX1NDSEVEX0RFRkFVTFRfRElTQUJMRURcbmluaXQvS2NvbmZpZy0xMTg5LVx0Ym9vbCBcJiMzNDtSZXF1aXJlIGJvb3QgcGFyYW1ldGVyIHRvIGVuYWJsZSBncm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPXCYjMzQ7XG5pbml0L0tjb25maWc6MTE5MDpcdGRlcGVuZHMgb24gUlRfR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTkxLVx0ZGVmYXVsdCBuXG4tLVxuaW5pdC9LY29uZmlnPTExOTk9Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxuaW5pdC9LY29uZmlnLTEyMDAtXHRib29sXG5pbml0L0tjb25maWc6MTIwMTpcdGRlcGVuZHMgb24gU0NIRURfQ0xBU1NfRVhUIFx1MDAyNlx1MDAyNiBDR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMjAyLVx0c2VsZWN0IEdST1VQX1NDSEVEX1dFSUdIVFxuLS1cbmluaXQvS2NvbmZpZz0xMjA4PWNvbmZpZyBFWFRfU1VCX1NDSEVEXG5pbml0L0tjb25maWctMTIwOS0gICAgICAgIGRlZl9ib29sIHlcbmluaXQvS2NvbmZpZzoxMjEwOiAgICAgICAgZGVwZW5kcyBvbiBTQ0hFRF9DTEFTU19FWFQgXHUwMDI2XHUwMDI2IENHUk9VUFNcbmluaXQvS2NvbmZpZy0xMjExLVxuaW5pdC9LY29uZmlnPTEyMTI9Y29uZmlnIFNDSEVEX01NX0NJRFxuaW5pdC9LY29uZmlnLTEyMTMtXHRkZWZfYm9vbCB5XG5pbml0L0tjb25maWc6MTIxNDpcdGRlcGVuZHMgb24gU01QIFx1MDAyNlx1MDAyNiBSU0VRXG5pbml0L0tjb25maWctMTIxNS1cbmluaXQvS2NvbmZpZz0xMjE2PWNvbmZpZyBVQ0xBTVBfVEFTS19HUk9VUFxuaW5pdC9LY29uZmlnLTEyMTctXHRib29sIFwmIzM0O1V0aWxpemF0aW9uIGNsYW1waW5nIHBlciBncm91cCBvZiB0YXNrc1wmIzM0O1xuaW5pdC9LY29uZmlnOjEyMTg6XHRkZXBlbmRzIG9uIENHUk9VUF9TQ0hFRFxuaW5pdC9LY29uZmlnOjEyMTk6XHRkZXBlbmRzIG9uIFVDTEFNUF9UQVNLXG5pbml0L0tjb25maWctMTIyMC1cdGRlZmF1bHQgblxuLS1cbmluaXQvS2NvbmZpZz0xMjg1PWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuaW5pdC9LY29uZmlnLTEyODYtXHRib29sIFwmIzM0O0h1Z2VUTEIgY29udHJvbGxlclwmIzM0O1xuaW5pdC9LY29uZmlnOjEyODc6XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxuaW5pdC9LY29uZmlnLTEyODgtXHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4tLVxuaW5pdC9LY29uZmlnPTEzMDE9Y29uZmlnIENQVVNFVFNcbmluaXQvS2NvbmZpZy0xMzAyLVx0Ym9vbCBcJiMzNDtDcHVzZXQgY29udHJvbGxlclwmIzM0O1xuaW5pdC9LY29uZmlnOjEzMDM6XHRkZXBlbmRzIG9uIFNNUFxuaW5pdC9LY29uZmlnLTEzMDQtXHRzZWxlY3QgVU5JT05fRklORFxuLS1cbmluaXQvS2NvbmZpZz0xMzE0PWNvbmZpZyBDUFVTRVRTX1YxXG5pbml0L0tjb25maWctMTMxNS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBjcHVzZXRzIGNvbnRyb2xsZXJcJiMzNDtcbmluaXQvS2NvbmZpZzoxMzE2Olx0ZGVwZW5kcyBvbiBDUFVTRVRTXG5pbml0L0tjb25maWctMTMxNy1cdGRlZmF1bHQgblxuLS1cbmluaXQvS2NvbmZpZz0xMzI4PWNvbmZpZyBQUk9DX1BJRF9DUFVTRVRcbmluaXQvS2NvbmZpZy0xMzI5LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIGxlZ2FjeSAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvY3B1c2V0IGZpbGVcJiMzNDtcbmluaXQvS2NvbmZpZzoxMzMwOlx0ZGVwZW5kcyBvbiBDUFVTRVRTX1YxXG5pbml0L0tjb25maWctMTMzMS1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxuaW5pdC9LY29uZmlnLTEzNDYtXHRib29sIFwmIzM0O1BlcmYgY29udHJvbGxlclwmIzM0O1xuaW5pdC9LY29uZmlnOjEzNDc6XHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTXG5pbml0L0tjb25maWctMTM0OC1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MTM1Nj1jb25maWcgQ0dST1VQX0JQRlxuaW5pdC9LY29uZmlnLTEzNTctXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuaW5pdC9LY29uZmlnOjEzNTg6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5pbml0L0tjb25maWctMTM1OS1cdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXG4tLVxuaW5pdC9LY29uZmlnLTEzNjMtXG5pbml0L0tjb25maWc6MTM2NDpcdCAgSW4gd2hpY2ggY29udGV4dCB0aGVzZSBwcm9ncmFtcyBhcmUgYWNjZXNzZWQgZGVwZW5kcyBvbiB0aGUgdHlwZVxuaW5pdC9LY29uZmlnLTEzNjUtXHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcbi0tXG5pbml0L0tjb25maWc9MTM4Mz1jb25maWcgQ0dST1VQX0RFQlVHXG4tLVxuaW5pdC9LY29uZmlnLTEzODUtXHRkZWZhdWx0IG5cbmluaXQvS2NvbmZpZzoxMzg2Olx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbmluaXQvS2NvbmZpZy0xMzg3LVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0xNDAxPW1lbnVjb25maWcgTkFNRVNQQUNFU1xuaW5pdC9LY29uZmlnLTE0MDItXHRib29sIFwmIzM0O05hbWVzcGFjZXMgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbmluaXQvS2NvbmZpZzoxNDAzOlx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcbmluaXQvS2NvbmZpZy0xNDA0LVx0ZGVmYXVsdCAhRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE0MzA9Y29uZmlnIElQQ19OU1xuaW5pdC9LY29uZmlnLTE0MzEtXHRib29sIFwmIzM0O0lQQyBuYW1lc3BhY2VcJiMzNDtcbmluaXQvS2NvbmZpZzoxNDMyOlx0ZGVwZW5kcyBvbiAoU1lTVklQQyB8fCBQT1NJWF9NUVVFVUUpXG5pbml0L0tjb25maWctMTQzMy1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz0xNDYwPWNvbmZpZyBORVRfTlNcbmluaXQvS2NvbmZpZy0xNDYxLVx0Ym9vbCBcJiMzNDtOZXR3b3JrIG5hbWVzcGFjZVwmIzM0O1xuaW5pdC9LY29uZmlnOjE0NjI6XHRkZXBlbmRzIG9uIE5FVFxuaW5pdC9LY29uZmlnLTE0NjMtXHRkZWZhdWx0IHlcbi0tXG5pbml0L0tjb25maWc9MTQ3MD1jb25maWcgQ0hFQ0tQT0lOVF9SRVNUT1JFXG5pbml0L0tjb25maWctMTQ3MS1cdGJvb2wgXCYjMzQ7Q2hlY2twb2ludC9yZXN0b3JlIHN1cHBvcnRcJiMzNDtcbmluaXQvS2NvbmZpZzoxNDcyOlx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG5pbml0L0tjb25maWctMTQ3My1cdHNlbGVjdCBQUk9DX0NISUxEUkVOXG4tLVxuaW5pdC9LY29uZmlnPTE1NDE9Y29uZmlnIEJPT1RfQ09ORklHX0ZPUkNFXG5pbml0L0tjb25maWctMTU0Mi1cdGJvb2wgXCYjMzQ7Rm9yY2UgdW5jb25kaXRpb25hbCBib290Y29uZmlnIHByb2Nlc3NpbmdcJiMzNDtcbmluaXQvS2NvbmZpZzoxNTQzOlx0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR1xuaW5pdC9LY29uZmlnLTE1NDQtXHRkZWZhdWx0IHkgaWYgQk9PVF9DT05GSUdfRU1CRURcbi0tXG5pbml0L0tjb25maWc9MTU1ND1jb25maWcgQk9PVF9DT05GSUdfRU1CRURcbmluaXQvS2NvbmZpZy0xNTU1LVx0Ym9vbCBcJiMzNDtFbWJlZCBib290Y29uZmlnIGZpbGUgaW4gdGhlIGtlcm5lbFwmIzM0O1xuaW5pdC9LY29uZmlnOjE1NTY6XHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHXG5pbml0L0tjb25maWctMTU1Ny1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MTU2NT1jb25maWcgQk9PVF9DT05GSUdfRU1CRURfRklMRVxuaW5pdC9LY29uZmlnLTE1NjYtXHRzdHJpbmcgXCYjMzQ7RW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIHBhdGhcJiMzNDtcbmluaXQvS2NvbmZpZzoxNTY3Olx0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR19FTUJFRFxuaW5pdC9LY29uZmlnLTE1NjgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTE1OTE9Y29uZmlnIElOSVRSQU1GU19QUkVTRVJWRV9NVElNRVxuaW5pdC9LY29uZmlnLTE1OTItXHRib29sIFwmIzM0O1ByZXNlcnZlIGNwaW8gYXJjaGl2ZSBtdGltZXMgaW4gaW5pdHJhbWZzXCYjMzQ7XG5pbml0L0tjb25maWc6MTU5MzpcdGRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkRcbmluaXQvS2NvbmZpZy0xNTk0LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTE2MDI9Y29uZmlnIElOSVRSQU1GU19URVNUXG5pbml0L0tjb25maWctMTYwMy1cdGJvb2wgXCYjMzQ7VGVzdCBpbml0cmFtZnMgY3BpbyBhcmNoaXZlIGV4dHJhY3Rpb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuaW5pdC9LY29uZmlnOjE2MDQ6XHRkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJEIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5pbml0L0tjb25maWctMTYwNS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuaW5pdC9LY29uZmlnPTE2Mzg9Y29uZmlnIExEX0RFQURfQ09ERV9EQVRBX0VMSU1JTkFUSU9OXG5pbml0L0tjb25maWctMTYzOS1cdGJvb2wgXCYjMzQ7RGVhZCBjb2RlIGFuZCBkYXRhIGVsaW1pbmF0aW9uIChFWFBFUklNRU5UQUwpXCYjMzQ7XG5pbml0L0tjb25maWc6MTY0MDpcdGRlcGVuZHMgb24gSEFWRV9MRF9ERUFEX0NPREVfREFUQV9FTElNSU5BVElPTlxuaW5pdC9LY29uZmlnOjE2NDE6XHRkZXBlbmRzIG9uIEVYUEVSVFxuaW5pdC9LY29uZmlnOjE2NDI6XHRkZXBlbmRzIG9uICQoY2Mtb3B0aW9uLC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zKVxuaW5pdC9LY29uZmlnOjE2NDM6XHRkZXBlbmRzIG9uICQobGQtb3B0aW9uLC0tZ2Mtc2VjdGlvbnMpXG5pbml0L0tjb25maWctMTY0NC1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MTY1Nj1jb25maWcgTERfT1JQSEFOX1dBUk5cbmluaXQvS2NvbmZpZy0xNjU3LVx0ZGVmX2Jvb2wgeVxuaW5pdC9LY29uZmlnOjE2NTg6XHRkZXBlbmRzIG9uIEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxuaW5pdC9LY29uZmlnOjE2NTk6XHRkZXBlbmRzIG9uICQobGQtb3B0aW9uLC0tb3JwaGFuLWhhbmRsaW5nPXdhcm4pXG5pbml0L0tjb25maWc6MTY2MDpcdGRlcGVuZHMgb24gJChsZC1vcHRpb24sLS1vcnBoYW4taGFuZGxpbmc9ZXJyb3IpXG5pbml0L0tjb25maWctMTY2MS1cbmluaXQvS2NvbmZpZz0xNjYyPWNvbmZpZyBMRF9PUlBIQU5fV0FSTl9MRVZFTFxuaW5pdC9LY29uZmlnLTE2NjMtXHRzdHJpbmdcbmluaXQvS2NvbmZpZzoxNjY0Olx0ZGVwZW5kcyBvbiBMRF9PUlBIQU5fV0FSTlxuaW5pdC9LY29uZmlnLTE2NjUtXHRkZWZhdWx0IFwmIzM0O2Vycm9yXCYjMzQ7IGlmIFdFUlJPUlxuLS1cbmluaXQvS2NvbmZpZz0xNzE0PWNvbmZpZyBVSUQxNlxuaW5pdC9LY29uZmlnLTE3MTUtXHRib29sIFwmIzM0O0VuYWJsZSAxNi1iaXQgVUlEIHN5c3RlbSBjYWxsc1wmIzM0OyBpZiBFWFBFUlRcbmluaXQvS2NvbmZpZzoxNzE2Olx0ZGVwZW5kcyBvbiBIQVZFX1VJRDE2IFx1MDAyNlx1MDAyNiBNVUxUSVVTRVJcbmluaXQvS2NvbmZpZy0xNzE3LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTE3ODY9Y29uZmlnIFBSSU5US19SSU5HQlVGRkVSX0tVTklUX1RFU1RcbmluaXQvS2NvbmZpZy0xNzg3LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgVGVzdCBmb3IgdGhlIHByaW50ayByaW5nYnVmZmVyXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbmluaXQvS2NvbmZpZzoxNzg4Olx0ZGVwZW5kcyBvbiBQUklOVEsgXHUwMDI2XHUwMDI2IEtVTklUXG5pbml0L0tjb25maWctMTc4OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuaW5pdC9LY29uZmlnPTE4MDg9Y29uZmlnIEVMRl9DT1JFXG5pbml0L0tjb25maWc6MTgwOTpcdGRlcGVuZHMgb24gQ09SRURVTVBcbmluaXQvS2NvbmZpZy0xODEwLVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTE4MTY9Y29uZmlnIFBDU1BLUl9QTEFURk9STVxuaW5pdC9LY29uZmlnLTE4MTctXHRib29sIFwmIzM0O0VuYWJsZSBQQy1TcGVha2VyIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG5pbml0L0tjb25maWc6MTgxODpcdGRlcGVuZHMgb24gSEFWRV9QQ1NQS1JfUExBVEZPUk1cbmluaXQvS2NvbmZpZy0xODE5LVx0c2VsZWN0IEk4MjUzX0xPQ0tcbi0tXG5pbml0L0tjb25maWc9MTgzMj1jb25maWcgRlVURVhcbmluaXQvS2NvbmZpZy0xODMzLVx0Ym9vbCBcJiMzNDtFbmFibGUgZnV0ZXggc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbmluaXQvS2NvbmZpZzoxODM0Olx0ZGVwZW5kcyBvbiAhKFNQQVJDMzIgXHUwMDI2XHUwMDI2IFNNUClcbmluaXQvS2NvbmZpZy0xODM1LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTE4NDI9Y29uZmlnIEZVVEVYX1BJXG5pbml0L0tjb25maWctMTg0My1cdGJvb2xcbmluaXQvS2NvbmZpZzoxODQ0Olx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgUlRfTVVURVhFU1xuaW5pdC9LY29uZmlnLTE4NDUtXHRkZWZhdWx0IHlcbi0tXG5pbml0L0tjb25maWc9MTg0Nz1jb25maWcgRlVURVhfUFJJVkFURV9IQVNIXG5pbml0L0tjb25maWctMTg0OC1cdGJvb2xcbmluaXQvS2NvbmZpZzoxODQ5Olx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgIUJBU0VfU01BTEwgXHUwMDI2XHUwMDI2IE1NVVxuaW5pdC9LY29uZmlnLTE4NTAtXHRkZWZhdWx0IHlcbi0tXG5pbml0L0tjb25maWc9MTg1Mj1jb25maWcgRlVURVhfTVBPTFxuaW5pdC9LY29uZmlnLTE4NTMtXHRib29sXG5pbml0L0tjb25maWc6MTg1NDpcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IE5VTUFcbmluaXQvS2NvbmZpZy0xODU1LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTE4OTc9Y29uZmlnIFNITUVNXG4tLVxuaW5pdC9LY29uZmlnLTE4OTktXHRkZWZhdWx0IHlcbmluaXQvS2NvbmZpZzoxOTAwOlx0ZGVwZW5kcyBvbiBNTVVcbmluaXQvS2NvbmZpZy0xOTAxLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0xOTI1PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbmluaXQvS2NvbmZpZy0xOTI2LVx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbVwmIzM0O1xuaW5pdC9LY29uZmlnOjE5Mjc6XHRkZXBlbmRzIG9uIElPX1VSSU5HIFx1MDAyNlx1MDAyNiBHQ09WX0tFUk5FTFxuaW5pdC9LY29uZmlnLTE5MjgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTE5Mzg9Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuLS1cbmluaXQvS2NvbmZpZy0xOTQwLVx0ZGVmYXVsdCBuXG5pbml0L0tjb25maWc6MTk0MTpcdGRlcGVuZHMgb24gSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTQyLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0xOTgxPWNvbmZpZyBSU0VRXG4tLVxuaW5pdC9LY29uZmlnLTE5ODMtXHRkZWZhdWx0IHlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk0NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIE1FTUNHIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgc28gdGhlIE1FTUNHIHN1YnN5c3RlbeKApiBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIHJpZ2h0PyBObyBvdmVybHkgY29tcGxleCBwcmVyZXF1aXNpdGUgbW9kdWxlcyBvciBleG90aWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLiBKdXN0IHRoZSB1c3VhbCBzdXNwZWN0czogYEhBVkVfTk1JYCBhbmQgdGhlIGxpa2UuIEl0JiMzOTtzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgcmVseWluZyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIGNvbW1vbiBmdW5jdGlvbmFsaXRpZXMuICpCdXQgd2FpdCBhIHNlY29uZC4uLiogSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nLiBJcyBpdCBhY3R1YWxseSBuZXN0ZWQgd2l0aGluIHRoZSBgQ0dST1VQU2AgZnJhbWV3b3JrPyBNeSBtZW1vcnkgaXMgYSBiaXQgaGF6eSBvbiB0aGF0IHNwZWNpZmljIHBvaW50LiBJdOKAmXMgY2VydGFpbmx5IGEgY29yZSBjb21wb25lbnQgdGhlc2UgZGF5cy4KCkkgbmVlZCB0byBjb25maXJtIGlmIGl0ICppcyogaW5kZWVkIGEgc3ViLW1vZHVsZSBvZiBgQ0dST1VQU2AgdG8gYmUgY2VydGFpbi4gTGV04oCZcyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyDigJMgYGluaXQvS2NvbmZpZ2AgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIFRoYXQmIzM5O2xsIHF1aWNrbHkgY2xhcmlmeSB0aGUgZGVwZW5kZW5jeSB0cmVlIGFuZCByZW1vdmUgYW55IGFtYmlndWl0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Nz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Ni1cbmluaXQvS2NvbmZpZzoxMDc3OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzgtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODUtXG5pbml0L0tjb25maWc6MTA4Njpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODctXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTItXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDk0LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk5LVxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwMS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ1NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIENHUk9VUCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYE1FTUNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgYE1FTUNHYCBlbmFibGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgQ0dST1VQU2Agc2V0dGluZ3M/JiMzNDsgVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAsIHRoZSBmb3VuZGF0aW9uYWwgY2hlY2suIEkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIGV2ZW4gY29uZmlndXJlZCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiwgc28gY2hlY2tpbmcgaXRzIHByZXNlbmNlIGhlcmUgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIGdvIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgQ0dST1VQUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA0NT1jb25maWcgU0xBQl9PQkpfRVhUXG4tLVxuaW5pdC9LY29uZmlnLTEwNDctXG5pbml0L0tjb25maWc6MTA0ODptZW51Y29uZmlnIENHUk9VUFNcbmluaXQvS2NvbmZpZy0xMDQ5LVx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFpzd2FwIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgY29uZmlndXJpbmcgWnN3YXAgYW5kIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gRmlyc3QsIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3MgYXJlIGluIHBsYWNlLiBZZXMsIGBDR1JPVVBTYCBpcyBlc3NlbnRpYWwsIG5vIHF1ZXN0aW9uIGFib3V0IGl0LgoKTGV0JiMzOTtzIHB1bGwgdG9nZXRoZXIgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uczogYFpTV0FQYCwgYFNXQVBgLCBgTUVNQ0dgLCBhbmQgYENHUk9VUFNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkgYXJlIGFsbCBwcmVzZW50LiBSaWdodCwgYW5kIEkgc2hvdWxkIHJlbWVtYmVyIHRoYXQgYFpTV0FQYCBkZXBlbmRzIG9uIGBTV0FQYCwgYW5kIGBNRU1DR2AgZGVwZW5kcyBvbiBgQ0dST1VQU2AsIHNvIHRoZSBvcmRlciBtYXR0ZXJzLiBUaHVzLCBgWlNXQVBgLCBgU1dBUGAsIGBNRU1DR2AsIGBDR1JPVVBTYCBpcyB0aGUgY29ycmVjdCBzZXQuCgpMZXQmIzM5O3MgY29uc2lkZXIgd2hldGhlciB0byBlbmFibGUgYFpTV0FQYCBieSBkZWZhdWx0LiBZZXMsIGBaU1dBUF9ERUZBVUxUX09OYCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIFpzd2FwIGlzIGFjdHVhbGx5IHVzZWQgYnkgZGVmYXVsdC4KCk5vdywgbGV0JiMzOTtzIGtlZXAgYFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9gIGluIG1pbmQuIEl0JiMzOTtzIGEgZGVmYXVsdC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBwb3RlbnRpYWwgY2FuZGlkYXRlczogYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGluZGVlZCBub24tc3RhdGljLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgY3JpdGVyaW9uLiBZZXMsIGl0JiMzOTtzIG5vbi1zdGF0aWMgaW4gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGlzIGRlY2xhcmVkIGluIGBtbS9zd2FwLmhgLiBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgaXMgbm9uLXN0YXRpYyBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGlzIG5vbi1zdGF0aWMgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gQW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYCBpcyBub24tc3RhdGljIGluIGBtbS9maWxlbWFwLmNgIGFuZCBleHBvcnRlZC4KCkhtbSwgdGhlcmUmIzM5O3MgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIHdoaWNoIGlzIHN0YXRpYyBidXQgaXQgdHJpZ2dlcnMgZHJvcGJlaGluZC4gU2luY2UgaXQmIzM5O3Mgc3RhdGljIHdlIGNhbiYjMzk7dCB1c2UgaXQuIEJ1dCwgaXQgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbWVtY2dfY2JgLCB3aGljaCBpcyBzdGF0aWMsIHNvIHRoYXQmIzM5O3Mgbm90IHVzZWZ1bCBlaXRoZXIuIFdoYXQgYWJvdXQgYHpzd2FwX3Nocmlua2VyX3NjYW5gPyBUaGF0JiMzOTtzIHN0YXRpYyBhcyB3ZWxsLgoKTGV0JiMzOTtzIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgYW4gZW50cnkgcG9pbnQsIGNhbGxlZCB3aGVuIHdyaXRlYmFjayBjb21wbGV0ZXMuIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpcyBjYWxsZWQgZnJvbSBgZm9saW9fZW5kX3dyaXRlYmFja2AuIFRoZW4sIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCBpcyBjYWxsZWQgZnJvbSBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AuIEZpbmFsbHksIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGNhbGxlZCBmcm9tIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYW5kIGBzd2FwaW5fc3luY2AuCgpTbywgdGhlIGN1cnJlbnQgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgYXJlOgotIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYAotIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYAotIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gCi0gYGZvbGlvX2VuZF93cml0ZWJhY2tgCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWcgYW5kIGluc3RydWN0aW9uIGRldGFpbHMuClRoZSBjb25maWdzIHdpbGwgYmU6Ci0gYFpTV0FQYAotIGBaU1dBUF9ERUZBVUxUX09OYAotIGBTV0FQYAotIGBNRU1DR2AKLSBgQ0dST1VQU2AKClRoZSBpbnN0cnVjdGlvbnMgZGljdGF0ZSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBhbmQgc2hvdWxkIGJlIGV4Y2x1ZGVkLiBJdCYjMzk7cyBjYWxsZWQgZm9yIGV2ZXJ5IHBhZ2Ugd3JpdGViYWNrIGNvbXBsZXRpb24uIExldCYjMzk7cyBleGNsdWRlIGl0IHRvIGF2b2lkIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCgpUaGlzIGxlYXZlcyBtZSB3aXRoOiBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AsIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCwgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJJiMzOTtsbCBjb25zaWRlciBob3cgaG90IGVhY2ggaXMuIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpcyBzcGVjaWZpYyB0byB0aGlzIG5ldyBmZWF0dXJlLCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGlzIHNwZWNpZmljIHRvIHRoaXMgbmV3IGZlYXR1cmUgKGFuZCBwYWdlIHJlY2xhaW0pLCBzbyB0aG9zZSBzZWVtIG9rYXkuCgpgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgaXMgY2FsbGVkIGR1cmluZyBwYWdlIHJlY2xhaW0gYW5kIHN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQuIEl0JiMzOTtzIHNvbWV3aGF0IGhvdCBkdXJpbmcgbWVtb3J5IHByZXNzdXJlLCBidXQgbm90IGFzIGhvdCBhcyBgZm9saW9fZW5kX3dyaXRlYmFja2AuIEl0JiMzOTtzIGZpbmUgdG8gaW5jbHVkZS4KYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgY2FsbGVkIGR1cmluZyBzd2FwaW4gYW5kIHpzd2FwIHdyaXRlYmFjay4gSXQmIzM5O3MgZmluZSB0byBpbmNsdWRlLgpgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgaXMgY2FsbGVkIG9ubHkgZm9yIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpb3MgKHpzd2FwIHdyaXRlYmFjaykuIEl0JiMzOTtzIGZpbmUgdG8gaW5jbHVkZS4KCkkgbmVlZCB0byBjb25maXJtIGFsbCB0aGUgY29uZmlnIG5hbWVzLiBMZXQgbWUgZG91YmxlIGNoZWNrOgoKLSBgWgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTM1PWNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNTQKCQkJCQkJCW91dHB1dDogMjA4CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFNocmlua2VyIEFkZGl0aW9uKioKCk9rYXksIHNvIHdlICpkbyogbmVlZCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIFRoZSBzaHJpbmtlciBpcyBlc3NlbnRpYWwgZm9yIHRyaWdnZXJpbmcgenN3YXAgd3JpdGViYWNrLCBzbyB0aGF0JiMzOTtzIGEga2V5IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGJ5IGRlZmF1bHQuIFRoYXQgZmVlbHMgcmlnaHQsIGFuZCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZS4KCkkmIzM5O20gdGhpbmtpbmcgd2UmIzM5O3JlIGdvaW5nIHRvIHdhbnQgdG8gaGF2ZSBhIGxvb2sgYXQgYSBmZXcgb3RoZXIgY29uZmlncyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNvbmZpcm0gdGhhdCB3ZSYjMzk7dmUgZ290OiBgWlNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBvZiBjb3Vyc2UgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZSBvYnZpb3VzIG9uZXM6IGBTV0FQYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBTYC4gR290dGEgbWFrZSBzdXJlIGFsbCB0aGUgYnVpbGRpbmcgYmxvY2tzIGFyZSBpbiBwbGFjZSBmb3IgdGhpcyB0byB3b3JrIGFzIGV4cGVjdGVkLgoKTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgd2F5IHRvIGRyb3Agc3dhcCBjYWNoZSBmb2xpb3MgKmFmdGVyKiB0aGUgenN3YXAgd3JpdGViYWNrIGlzIGNvbXBsZXRlLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHBvbGx1dGlvbiBvZiB0aGUgTFJVLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IG9wdGltaXphdGlvbi4gVGhhdCYjMzk7cyBnb29kLiBUaGV5JiMzOTtyZSBhZGRpbmcgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGFuZCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgZnVuY3Rpb25zLCBhbmQgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHRvIGxldmVyYWdlIHRoaXMgbmV3IG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgbW9kaWZpY2F0aW9uIHRvIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGRlYWxzIHdpdGggc3dhcCwgenN3YXAsIGFuZCB0aGUgcGFnZSBjYWNoZS4gSXQgZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgYmVoYXZpb3IsIHNvIGl0IGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciB0aGF0IGtpbmQgb2YgdGhvcm91Z2ggdGVzdGluZy4KCkxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBkbyB0byBtYWtlIHRoaXMgaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8mIzM0OywKICAgICYjMzQ7cmVtb3ZlX21hcHBpbmdfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBkcm9wIHN3YXAgY2FjaGUgZm9saW9zIGFmdGVyIHpzd2FwIHdyaXRlYmFjayBjb21wbGV0ZXMsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IExSVSBwb2xsdXRpb24uIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgYW5kIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCwgYW5kIG1vZGlmaWVzIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHRvIHVzZSB0aGlzIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoc3dhcCwgenN3YXAsIHBhZ2UgY2FjaGUpIHRoYXQgYWZmZWN0cyBtZW1vcnkgcmVjbGFpbSBhbmQgc3dhcCBiZWhhdmlvciwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWFwcGluZ19yZWNsYWltJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGRyb3Agc3dhcCBjYWNoZSBmb2xpb3MgYWZ0ZXIgenN3YXAgd3JpdGViYWNrIGNvbXBsZXRlcywgYXZvaWRpbmcgdW5uZWNlc3NhcnkgTFJVIHBvbGx1dGlvbi4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBhbmQgbW9kaWZpZXMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgdG8gdXNlIHRoaXMgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChzd2FwLCB6c3dhcCwgcGFnZSBjYWNoZSkgdGhhdCBhZmZlY3RzIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGJlaGF2aW9yLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBmb2xpb3MgaW4gdGhlIHN3YXAgY2FjaGUsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBhIFwmIzM0O2Ryb3BiZWhpbmRcJiMzNDsgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2suIEl0IGNoYW5nZXMgaG93IGZvbGlvcyBhcmUgYWxsb2NhdGVkIGZvciB0aGUgc3dhcCBjYWNoZSAocmV0dXJuaW5nIHRoZW0gb2ZmLUxSVSkgYW5kIG1hbmFnZXMgdGhlaXIgcmVmZXJlbmNlcyBkdXJpbmcgd3JpdGViYWNrLlxuXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBMUlUgbGlzdCBtYW5hZ2VtZW50LCBhbmQgc3dhcCBjYWNoZSBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MgKGUuZy4sIGZvbGlvcyBsZWZ0IG9mZiB0aGUgTFJVKSwgb3IgaW52YWxpZCBwYWdlIHN0YXRlcy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnIG9wdGlvbnMgKGxpa2UgYENPTkZJR19ERUJVR19WTWApLCBhbmQgcGFnZSByZWZlcmVuY2UgdHJhY2tpbmcuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggcGFyc2luZyBsb2dpYyBvciBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmb2xpb3MgYWxsb2NhdGVkIGFyZSBwb3B1bGF0ZWQgdmlhIGRlY29tcHJlc3Npb24gYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gc3dhcCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBleHBvc2VkLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWUwODYyOTk4NjQwNDllZDc3Njk4ZWFmZWMwZWMzNzY2MGRlZjE1ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDE0OjI5OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA4ZjBmNjhlMjQ1YmFhLi4yOWVjNjBkY2FlMjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMzc0LDYgJiM0MzszNzQsOCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19OVU1BKQogZXh0ZXJuIGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpOwpAQCAtNDY1LDYgJiM0Mzs0NjcsOCBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpOwogICovCiBib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAomIzQzO3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0MzsKIC8qIEFsbG9jYXRlIC8gZnJlZSAoaGliZXJuYXRpb24pIGV4Y2x1c2l2ZSBlbnRyaWVzICovCiBzd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpOwogdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7CkBAIC00NzUsNiAmIzQzOzQ3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF9kZXZpY2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKQogfQogCiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpCiB7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggZDcyMTk4NmQ1ZjQ2NS4uMDQwYzk3YTEyMWRlZCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuYwpAQCAtMTY4Niw2ICYjNDM7MTY4Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7CiAgKi8KIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlib29sIHN3YXBfZHJvcGJlaGluZDsKJiM0MzsKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pOwogCiAJLyoKQEAgLTE2OTUsNyAmIzQzOzE2OTcsMjQgQEAgdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS4KIAkgKi8KIAlmb2xpb19nZXQoZm9saW8pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTYW1wbGUgdGhpcyBiZWZvcmUgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKCkgY2xlYXJzCiYjNDM7CSAqIFBHX3dyaXRlYmFjazogdW50aWwgdGhlbiBhIHJhY2luZyBzd2FwaW4gY2Fubm90IHJlbW92ZSB0aGUgZm9saW8gZnJvbQomIzQzOwkgKiB0aGUgc3dhcCBjYWNoZS4gQWZ0ZXJ3YXJkcyBpdCBjYW4sIGFuZCB0aGUgZHJvcCBiZWxvdyB0aGVuIGZpbmRzIGEKJiM0MzsJICogbm9uLXN3YXBjYWNoZSBmb2xpbyBhbmQgcHV0cyBpdCBiYWNrIG9uIHRoZSBMUlUgaW5zdGVhZC4gVGhlCiYjNDM7CSAqIHJlZmVyZW5jZSB0YWtlbiBhYm92ZSBrZWVwcyB0aGUgZm9saW8gYWxpdmUgYWNyb3NzIHRoYXQgd2luZG93LgomIzQzOwkgKi8KJiM0MzsJc3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pICZhbXA7JmFtcDsKJiM0MzsJCQkgIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbyk7CiYjNDM7CiAJZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsKJiM0MzsJaWYgKHN3YXBfZHJvcGJlaGluZCkgewomIzQzOwkJc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhmb2xpbyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7CiAJZm9saW9fcHV0KGZvbGlvKTsKIH0KZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uYwppbmRleCBiMjNmNDk0ZmNjODNkLi41ODZjNzljM2JiM2QyIDEwMDY0NAotLS0gYS9tbS9wYWdlX2lvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pby5jCkBAIC00NTYsNiAmIzQzOzQ1NiwxMyBAQCBzdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJYmlvLSZndDtiaV9lbmRfaW8gPSBlbmRfc3dhcF9iaW9fd3JpdGU7CiAJYmlvX2FkZF9mb2xpb19ub2ZhaWwoYmlvLCBmb2xpbywgZm9saW9fc2l6ZShmb2xpbyksIDApOwogCiYjNDM7CS8qCiYjNDM7CSAqIERyb3BwaW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIHRha2VzIHNsZWVwaW5nIGxvY2tzLCBzbyB0aGUKJiM0MzsJICogY29tcGxldGlvbiBtdXN0IG5vdCBydW4gaW4gaW50ZXJydXB0IGNvbnRleHQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKJiM0MzsJCWJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTsKJiM0MzsKIAliaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pOwogCWNvdW50X3N3cG91dF92bV9ldmVudChmb2xpbyk7CiAJZm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTsKZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaAppbmRleCA3N2QyZDE0ZWRhNDIxLi5mYzQ0ZGFhZTFkZTFmIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC0zMDQsOSAmIzQzOzMwNCw5IEBAIGJvb2wgc3dhcF9jYWNoZV9oYXNfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7CiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwomIzQzO3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiYjNDM7CQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7CiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovCiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7CmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggNzI3YTE3ZWU3ODIxMS4uMjMxZmE4N2NiYmUwYyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtNDgzLDEzICYjNDM7NDgzLDExIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCW5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTsKIAlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpOwogCi0JLyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi8KLQlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlyZXR1cm4gZm9saW87CiB9CiAKIC8qKgotICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuCiYjNDM7ICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KICAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90CiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncwogICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm8KQEAgLTUwMSwxMyAmIzQzOzQ5OSwxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnkKICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS4KICAqCiYjNDM7ICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXIKJiM0MzsgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWUKJiM0MzsgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy4KJiM0MzsgKgogICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuCiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcAogICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy4KICAqLwotc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KQomIzQzO3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KQogewogCWludCBvcmRlciwgZXJyOwogCXN0cnVjdCBmb2xpbyAqcmV0OwpAQCAtNTM1LDYgJiM0Mzs1MzcsNDcgQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyAtIGRyb3AgYSBkcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW8KJiM0MzsgKiBAZm9saW86IHRoZSBvZmYtTFJVIGZvbGlvIHdob3NlIHdyaXRlYmFjayBoYXMgY29tcGxldGVkCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiB0YXNrIGNvbnRleHQsIHdpdGggdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBmb2xpb19lbmRfd3JpdGViYWNrKCkKJiM0MzsgKiBkb25hdGVkIHRvIHVzLgomIzQzOyAqLwomIzQzO3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwomIzQzOwlmb2xpb19sb2NrKGZvbGlvKTsKJiM0MzsKJiM0MzsJLyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqLwomIzQzOwlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CiYjNDM7CWlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKQomIzQzOwkJbWVtY2cgPSBOVUxMOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogR2F0ZSByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgb24gZm9saW9fdGVzdF9zd2FwY2FjaGUoKTogYSByYWNpbmcKJiM0MzsJICogc3dhcGluIG1heSBoYXZlIGZyZWVkIHRoZSBzd2FwIHNsb3QgKGZvbGlvX2ZyZWVfc3dhcCgpKSBhbmQgZHJvcHBlZCB0aGUKJiM0MzsJICogZm9saW8gZnJvbSB0aGUgY2FjaGUsIGFuZCBpdCBtdXN0IG5vdCBydW4gb24gYSBub24tc3dhcGNhY2hlIGZvbGlvIChpdAomIzQzOwkgKiB3b3VsZCB0cmlwIF9fcmVtb3ZlX21hcHBpbmcoKSYjMzk7cyBtYXBwaW5nID09IGZvbGlvX21hcHBpbmcoKSBjaGVjaykuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSB8fCBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwKJiM0MzsJICAgICFyZW1vdmVfbWFwcGluZ19yZWNsYWltKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby0mZ3Q7c3dhcCksIGZvbGlvLCBtZW1jZykpIHsKJiM0MzsJCS8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqLwomIzQzOwkJZm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7CiYjNDM7CQlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKJiM0MzsJfQomIzQzOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7CiYjNDM7CWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7fQomIzQzOwogLyoKICAqIElmIHdlIGFyZSB0aGUgb25seSB1c2VyLCB0aGVuIHRyeSB0byBmcmVlIHVwIHRoZSBzd2FwIGNhY2hlLgogICoKQEAgLTY0MywxMiAmIzQzOzY4NiwxMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKIAl9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTsKIAogCWlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXN3YXBfcmVhZF9mb2xpbyhmb2xpbywgcGx1Zyk7CiAJaWYgKHJlYWRhaGVhZCkgewogCQlmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTsKQEAgLTY4MywxMiAmIzQzOzcyNywxMyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLAogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwotCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7CiYjNDM7CQlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTsKIAl9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTsKIAogCWlmIChJU19FUlIoZm9saW8pKQogCQlyZXR1cm4gZm9saW87CiAKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAJc3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTsKIAlyZXR1cm4gZm9saW87CiB9CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDg0OGJkM2U1ZWVlMmIuLjRjYzNhM2VkNmRiNmUgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC03ODAsNiAmIzQzOzc4MCwyMiBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgbG9uZyBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1lZCwKJiM0MzsJCQkJICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZykKJiM0Mzt7CiYjNDM7CWlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCByZWNsYWltZWQsIHRhcmdldF9tZW1jZykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHkKJiM0MzsJCSAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyCiYjNDM7CQkgKiBhdG9taWMgb3BlcmF0aW9uLgomIzQzOwkJICovCiYjNDM7CQlmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpOwomIzQzOwkJcmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuCiAgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuCkBAIC03OTQsMTYgJiM0Mzs4MTAsMjggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogICovCiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCWlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCkpIHsKLQkJLyoKLQkJICogVW5mcmVlemluZyB0aGUgcmVmY291bnQgd2l0aCAxIGVmZmVjdGl2ZWx5Ci0JCSAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyCi0JCSAqIGF0b21pYyBvcGVyYXRpb24uCi0JCSAqLwotCQlmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpOwotCQlyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pOwotCX0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIF9fcmVtb3ZlX21hcHBpbmdfdW5mcmVlemUobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIC0gUmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZywgYXMgcmVjbGFpbSBkb2VzLgomIzQzOyAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS4KJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB0byByZW1vdmUuCiYjNDM7ICogQHRhcmdldF9tZW1jZzogVGhlIG1lbWNnIHRvIGNoYXJnZSB0aGUgZXZpY3Rpb24gc2hhZG93IHRvOyB0aGUgY2FsbGVyIG11c3QKJiM0MzsgKiAgICAgICAgICAgICAgICBrZWVwIGl0IGFsaXZlIGFjcm9zcyB0aGUgY2FsbC4KJiM0MzsgKgomIzQzOyAqIExpa2UgcmVtb3ZlX21hcHBpbmcoKSwgYnV0IHN0b3JlcyBhIHdvcmtpbmdzZXQgZXZpY3Rpb24gc2hhZG93IHRoZSB3YXkgcGFnZQomIzQzOyAqIHJlY2xhaW0gZG9lcywgc28gdGhhdCBhIGxhdGVyIHJlZmF1bHQgY2FuIGJlIGRldGVjdGVkIGFuZCB0aGUgZm9saW8KJiM0MzsgKiByZS1hY3RpdmF0ZWQuCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHJlbW92ZWQgZnJvbSB0aGUgbWFwcGluZy4gIDAgaWYgdGhlIGZvbGlvCiYjNDM7ICogY291bGQgbm90IGJlIHJlbW92ZWQuCiYjNDM7ICogQ29udGV4dDogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBhIHNpbmdsZSByZWZjb3VudCBvbiB0aGUgZm9saW8gYW5kCiYjNDM7ICogaG9sZCBpdHMgbG9jay4KJiM0MzsgKi8KJiM0Mztsb25nIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgdHJ1ZSwgdGFyZ2V0X21lbWNnKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCA3NjFjZDY5OWUwYTNlLi5kMTY4MjJhNTE2ZThkIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTEwMDAsOCAmIzQzOzEwMDAsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlyZXR1cm4gLUVFWElTVDsKIAogCW1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0JZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCi0JCQkJICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwomIzQzOwlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAomIzQzOwkJCQkJIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwogCXB1dF9zd2FwX2RldmljZShzaSk7CiAKIAkvKgpAQCAtMTA0NSwxMiAmIzQzOzEwNDUsMjYgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovCiAJZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7CiAKLQkvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi8KLQlmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7CiYjNDM7CWZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRHJvcCBvdXIgcmVmZXJlbmNlIGJlZm9yZSBzdGFydGluZyB3cml0ZWJhY2sgc28gdGhlIHN3YXAgY2FjaGUgaG9sZHMKJiM0MzsJICogdGhlIG9ubHkgb25lOiB0aGUgZHJvcCBpbiBmb2xpb19lbmRfd3JpdGViYWNrKCkgbmVlZHMgdGhhdCBmb3IKJiM0MzsJICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIHRvIHN1Y2NlZWQsIG90aGVyd2lzZSB0aGUgZm9saW8gaXMgaGFuZGVkCiYjNDM7CSAqIGJhY2sgdG8gcmVjbGFpbSBpbnN0ZWFkLgomIzQzOwkgKgomIzQzOwkgKiBOb3RoaW5nIGNhbiBmcmVlIHRoZSBmb2xpbyBpbiB0aGUgbWVhbnRpbWU6IHdlIGhvbGQgdGhlIGZvbGlvIGxvY2sKJiM0MzsJICogdW50aWwgd3JpdGViYWNrIHN0YXJ0cywgUEdfd3JpdGViYWNrIHRoZW4gYmxvY2tzIHN3YXAgY2FjaGUgcmVtb3ZhbCwKJiM0MzsJICogYW5kIGZvbGlvX2VuZF93cml0ZWJhY2soKSB0YWtlcyBpdHMgb3duIHJlZmVyZW5jZSBiZWZvcmUgY2xlYXJpbmcKJiM0MzsJICogUEdfd3JpdGViYWNrIGFuZCBkb25hdGVzIGl0IHRvIHRoZSBkcm9wLgomIzQzOwkgKi8KJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKIAogCS8qIHN0YXJ0IHdyaXRlYmFjayAqLwogCV9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpOwogCiYjNDM7CXJldHVybiAwOwomIzQzOwogb3V0OgogCWlmIChyZXQpIHsKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE3NwoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiAxMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBBbmFseXNpcyBvZiBTd2FwIENhY2hlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggc2VyaWVzIHRvdWNoaW5nIHRoZSBzd2FwLCBwYWdlIGNhY2hlLCBhbmQgenN3YXAgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdGhpcyBuZXcgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGZ1bmN0aW9uIGFuZCBtb2RpZmljYXRpb25zIHRvIGZvbGlvIGhhbmRsaW5nIGR1cmluZyB3cml0ZWJhY2ssIHNwZWNpZmljYWxseSB0aGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiBmb2xpb3Mgd2l0aGluIHRoZSBzd2FwIGNhY2hlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gKm1pZ2h0KiB1bmlxdWVseSBjYXRjaC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIG1vZGlmaWVzIGhvdyBmb2xpb3MgYXJlIG1hcmtlZCBhcyAmIzM0O2Ryb3BiZWhpbmQmIzM0OywgYW5kIGFsdGVycyB0aGUgbGlmZWN5Y2xlIGluIHRoZSBzd2FwIGNhY2hlLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhYm91dCBob3cgZm9saW9zIGFyZSBhbGxvY2F0ZWQsIGFkZGVkIHRvIHRoZSBMUlUgKG9yIG5vdCksIGFuZCBtYW5hZ2VkIGR1cmluZyB6c3dhcCB3cml0ZWJhY2suIFRoZSBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBnb2luZyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBoYXZlIGFueSBsb2dpYyB0aGF0IHdvdWxkIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlIGFyZW4mIzM5O3QgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgYm91bmRhcnkgY2hlY2tzIG9yIHZhcmlhYmxlIGxlbmd0aHMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcy4KClRoZSBwcmltYXJ5IGNvbmNlcm5zIEkgaGF2ZSBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIHRoZSB1c3VhbCBzdXNwZWN0czogdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzIChlLmcuLCBmb2xpb3MgYmVpbmcgbGVmdCBvZmYgdGhlIExSVSBvciBiZWluZyBkb3VibGUtZnJlZWQpLCBvciBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIFRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLgoKTGV0JiMzOTtzIGRvIGEgZGVlcCBkaXZlIGFuZCBjb25maXJtIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIFRoZSBpbXBvcnRhbnQgc2VjdGlvbiBpcyB0aGF0IGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIG5vdyBjYWxscyBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyB0aGUgZm9saW8gZm9yIHRoZSBzd2FwIG9yIHpzd2FwIGVudHJ5LiBUaGUgZm9saW8gbWVtb3J5IGlzIHBvcHVsYXRlZCBieSBkZWNvbXByZXNzaW5nIHRoZSB6c3dhcCBlbnRyeSBpbnRvIGl0LiBJZiB0aGUgZGVjb21wcmVzc2lvbiBmYWlscywgdGhlbiB0aGUgZm9saW8gaXMgZGVsZXRlZCBmcm9tIHN3YXAgY2FjaGUsIG90aGVyd2lzZSwgaXQgbWFya3MgaXQgdXAtdG8tZGF0ZSBhbmQgd3JpdGVzIGl0IGJhY2suIENydWNpYWxseSwgdGhlcmUmIzM5O3Mgbm8gc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgKmV4cG9zZWQqIHRvIHVzZXIgc3BhY2UsIG9yIHdoZXJlIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgYWxsb2NhdGlvbiBhbmQgd3JpdGViYWNrIHBhdGguIFRoZSBjb2RlIGNhcmVmdWxseSBwb3B1bGF0ZXMgdGhlIGZvbGlvIHdpdGggdGhlIGRlY29tcHJlc3NlZCBkYXRhLiBUaGUgcHJpbWFyeSBjb25jZXJucyBJIHNlZSBhcmUgdXNlLWFmdGVyLWZyZWUgYnVncyAoZS5nLiwgZHJvcHBpbmcgYSByZWZlcmVuY2UgZWFybHkgYW5kIHRoZW4gYWNjZXNzaW5nIHRoZSBmb2xpbyksIG1lbW9yeSBsZWFrcywgb3IgYmFkIHBhZ2Ugc3RhdGUgaXNzdWVzIC0gYWxsIG9mIHdoaWNoIHdvdWxkIGJlIGZsYWdnZWQgYnkgc3RhbmRhcmQgVk0gZGVidWdnaW5nIHRvb2xzIG9yIEtBU0FOLgoKSW4gc3VtbWFyeSwgdGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgZm9saW8gbGlmZWN5Y2xlIGluIHRoZSBzd2FwIGNhY2hlLCBpbnRyb2R1Y2VzIGEgJiMzNDtkcm9wYmVoaW5kJiMzNDsgbWVjaGFuaXNtLCBhbmQgY2hhbmdlcyBob3cgZm9saW9zIGFyZSBhbGxvY2F0ZWQgKG9mZi1MUlUpIGFuZCBtYW5hZ2VkIGR1cmluZyB6c3dhcCB3cml0ZWJhY2suIFRoZSBwb3RlbnRpYWwgYnVncyBhcmUgcHJpbWFyaWx5IHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIGFuZCBwYWdlIHN0YXRlIGlzc3VlcyAtIGFsbCBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiwgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZWJ1ZyBvcHRpb25zLCBhbmQgcGFnZSByZWZlcmVuY2UgdHJhY2tpbmcuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzIG5vciBwYXJzaW5nIGxvZ2ljIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgbm90IGp1c3RpZmllZCBoZXJlLiBXZSYjMzk7cmUgbG9va2luZyBhdCByZWZlcmVuY2UgY291bnRpbmcsIExSVSBsaXN0IG1hbmFnZW1lbnQsIGFuZCB0aGUgb3ZlcmFsbCBzd2FwIGNhY2hlIGxpZmVjeWNsZS4gVGhlcmVmb3JlLCBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIFZNIGRlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHBhdGNoLiBJIHRoaW5rIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNhbGwuIE5vIG5lZWQgZm9yIGEgS01TQU4gc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBmb2xpb3MgaW4gdGhlIHN3YXAgY2FjaGUsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBhIFwmIzM0O2Ryb3BiZWhpbmRcJiMzNDsgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2suIEl0IGNoYW5nZXMgaG93IGZvbGlvcyBhcmUgYWxsb2NhdGVkIGZvciB0aGUgc3dhcCBjYWNoZSAocmV0dXJuaW5nIHRoZW0gb2ZmLUxSVSkgYW5kIG1hbmFnZXMgdGhlaXIgcmVmZXJlbmNlcyBkdXJpbmcgd3JpdGViYWNrLlxuXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBMUlUgbGlzdCBtYW5hZ2VtZW50LCBhbmQgc3dhcCBjYWNoZSBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MgKGUuZy4sIGZvbGlvcyBsZWZ0IG9mZiB0aGUgTFJVKSwgb3IgaW52YWxpZCBwYWdlIHN0YXRlcy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnIG9wdGlvbnMgKGxpa2UgYENPTkZJR19ERUJVR19WTWApLCBhbmQgcGFnZSByZWZlcmVuY2UgdHJhY2tpbmcuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggcGFyc2luZyBsb2dpYyBvciBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmb2xpb3MgYWxsb2NhdGVkIGFyZSBwb3B1bGF0ZWQgdmlhIGRlY29tcHJlc3Npb24gYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gc3dhcCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBleHBvc2VkLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgZm9saW9zIGluIHRoZSBzd2FwIGNhY2hlLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgYSBcJiMzNDtkcm9wYmVoaW5kXCYjMzQ7IG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrLiBJdCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCBmb3IgdGhlIHN3YXAgY2FjaGUgKHJldHVybmluZyB0aGVtIG9mZi1MUlUpIGFuZCBtYW5hZ2VzIHRoZWlyIHJlZmVyZW5jZXMgZHVyaW5nIHdyaXRlYmFjay5cblxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBwYWdlIHJlZmVyZW5jZSBjb3VudGluZywgTFJVIGxpc3QgbWFuYWdlbWVudCwgYW5kIHN3YXAgY2FjaGUgb3BlcmF0aW9ucy4gVGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzIChlLmcuLCBmb2xpb3MgbGVmdCBvZmYgdGhlIExSVSksIG9yIGludmFsaWQgcGFnZSBzdGF0ZXMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZWJ1ZyBvcHRpb25zIChsaWtlIGBDT05GSUdfREVCVUdfVk1gKSwgYW5kIHBhZ2UgcmVmZXJlbmNlIHRyYWNraW5nLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IHBhcnNpbmcgbG9naWMgb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZm9saW9zIGFsbG9jYXRlZCBhcmUgcG9wdWxhdGVkIHZpYSBkZWNvbXByZXNzaW9uIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHN3YXAsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgZXhwb3NlZC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjI5OjEwLjg4NDg3NDg2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzA1ODA1NTg2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIixcbiAgICBcIlpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIixcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb1wiLFxuICAgIFwicmVtb3ZlX21hcHBpbmdfcmVjbGFpbVwiLFxuICAgIFwiX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG9mIGZvbGlvcyBpbiB0aGUgc3dhcCBjYWNoZSwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGEgXFxcImRyb3BiZWhpbmRcXFwiIG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrLiBJdCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCBmb3IgdGhlIHN3YXAgY2FjaGUgKHJldHVybmluZyB0aGVtIG9mZi1MUlUpIGFuZCBtYW5hZ2VzIHRoZWlyIHJlZmVyZW5jZXMgZHVyaW5nIHdyaXRlYmFjay5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBMUlUgbGlzdCBtYW5hZ2VtZW50LCBhbmQgc3dhcCBjYWNoZSBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MgKGUuZy4sIGZvbGlvcyBsZWZ0IG9mZiB0aGUgTFJVKSwgb3IgaW52YWxpZCBwYWdlIHN0YXRlcy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnIG9wdGlvbnMgKGxpa2UgYENPTkZJR19ERUJVR19WTWApLCBhbmQgcGFnZSByZWZlcmVuY2UgdHJhY2tpbmcuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBwYXJzaW5nIGxvZ2ljIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGZvbGlvcyBhbGxvY2F0ZWQgYXJlIHBvcHVsYXRlZCB2aWEgZGVjb21wcmVzc2lvbiBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byBzd2FwLCBhbmQgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGlzIGV4cG9zZWQuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gZHJvcCBzd2FwIGNhY2hlIGZvbGlvcyBhZnRlciB6c3dhcCB3cml0ZWJhY2sgY29tcGxldGVzLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBMUlUgcG9sbHV0aW9uLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGFuZCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAsIGFuZCBtb2RpZmllcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCB0byB1c2UgdGhpcyBtZWNoYW5pc20uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAsIHpzd2FwLCBwYWdlIGNhY2hlKSB0aGF0IGFmZmVjdHMgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgYmVoYXZpb3IsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6Mjk6MTAuODg0ODgzOTQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTkwMjQ3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZTA4NjI5OTg2NDA0OWVkNzc2OThlYWZlYzBlYzM3NjYwZGVmMTVmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDE0OjI5OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCA4ZjBmNjhlMjQ1YmFhLi4yOWVjNjBkY2FlMjEzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMzc0LDYgKzM3NCw4IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSxcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcXG4gbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xcbiBcXG4gI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbiBleHRlcm4gaW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XFxuQEAgLTQ2NSw2ICs0NjcsOCBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpO1xcbiAgKi9cXG4gYm9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIFxcbit2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK1xcbiAvKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xcbiBzd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpO1xcbiB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcXG5AQCAtNDc1LDYgKzQ3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF9kZXZpY2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxcbiB9XFxuIFxcbiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xcbmluZGV4IGQ3MjE5ODZkNWY0NjUuLjA0MGM5N2ExMjFkZWQgMTAwNjQ0XFxuLS0tIGEvbW0vZmlsZW1hcC5jXFxuKysrIGIvbW0vZmlsZW1hcC5jXFxuQEAgLTE2ODYsNiArMTY4Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7XFxuICAqL1xcbiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbitcXHRib29sIHN3YXBfZHJvcGJlaGluZDtcXG4rXFxuIFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XFxuIFxcbiBcXHQvKlxcbkBAIC0xNjk1LDcgKzE2OTcsMjQgQEAgdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdCAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuXFxuIFxcdCAqL1xcbiBcXHRmb2xpb19nZXQoZm9saW8pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2FtcGxlIHRoaXMgYmVmb3JlIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCgpIGNsZWFyc1xcbitcXHQgKiBQR193cml0ZWJhY2s6IHVudGlsIHRoZW4gYSByYWNpbmcgc3dhcGluIGNhbm5vdCByZW1vdmUgdGhlIGZvbGlvIGZyb21cXG4rXFx0ICogdGhlIHN3YXAgY2FjaGUuIEFmdGVyd2FyZHMgaXQgY2FuLCBhbmQgdGhlIGRyb3AgYmVsb3cgdGhlbiBmaW5kcyBhXFxuK1xcdCAqIG5vbi1zd2FwY2FjaGUgZm9saW8gYW5kIHB1dHMgaXQgYmFjayBvbiB0aGUgTFJVIGluc3RlYWQuIFRoZVxcbitcXHQgKiByZWZlcmVuY2UgdGFrZW4gYWJvdmUga2VlcHMgdGhlIGZvbGlvIGFsaXZlIGFjcm9zcyB0aGF0IHdpbmRvdy5cXG4rXFx0ICovXFxuK1xcdHN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbyk7XFxuK1xcbiBcXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xcbitcXG4rXFx0aWYgKHN3YXBfZHJvcGJlaGluZCkge1xcbitcXHRcXHRzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jXFxuaW5kZXggYjIzZjQ5NGZjYzgzZC4uNTg2Yzc5YzNiYjNkMiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2lvLmNcXG4rKysgYi9tbS9wYWdlX2lvLmNcXG5AQCAtNDU2LDYgKzQ1NiwxMyBAQCBzdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0gZW5kX3N3YXBfYmlvX3dyaXRlO1xcbiBcXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGZvbGlvLCBmb2xpb19zaXplKGZvbGlvKSwgMCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBEcm9wcGluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSB0YWtlcyBzbGVlcGluZyBsb2Nrcywgc28gdGhlXFxuK1xcdCAqIGNvbXBsZXRpb24gbXVzdCBub3QgcnVuIGluIGludGVycnVwdCBjb250ZXh0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxuK1xcdFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcXG4rXFxuIFxcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbyk7XFxuIFxcdGNvdW50X3N3cG91dF92bV9ldmVudChmb2xpbyk7XFxuIFxcdGZvbGlvX3N0YXJ0X3dyaXRlYmFjayhmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5oXFxuKysrIGIvbW0vc3dhcC5oXFxuQEAgLTMwNCw5ICszMDQsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi9cXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xcbmluZGV4IDcyN2ExN2VlNzgyMTEuLjIzMWZhODdjYmJlMGMgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXFxuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXFxuQEAgLTQ4MywxMyArNDgzLDExIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XFxuIFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XFxuIFxcbi1cXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xcbi1cXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiB9XFxuIFxcbiAvKipcXG4tICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXFxuKyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXFxuICAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XFxuICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzXFxuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXFxuQEAgLTUwMSwxMyArNDk5LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XFxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cXG4gICpcXG4rICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXJcXG4rICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXFxuKyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLlxcbisgKlxcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cXG4gICogUmV0dXJuOiBSZXR1cm5zIHRoZSBmb2xpbyBpZiBhbGxvY2F0aW9uIHN1Y2NlZWRlZCBhbmQgZm9saW8gaXMgaW4gdGhlIHN3YXBcXG4gICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy5cXG4gICovXFxuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4ge1xcbiBcXHRpbnQgb3JkZXIsIGVycjtcXG4gXFx0c3RydWN0IGZvbGlvICpyZXQ7XFxuQEAgLTUzNSw2ICs1MzcsNDcgQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8gLSBkcm9wIGEgZHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvXFxuKyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWRcXG4rICpcXG4rICogQ29udGV4dDogdGFzayBjb250ZXh0LCB3aXRoIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgZm9saW9fZW5kX3dyaXRlYmFjaygpXFxuKyAqIGRvbmF0ZWQgdG8gdXMuXFxuKyAqL1xcbit2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuK1xcbitcXHRmb2xpb19sb2NrKGZvbGlvKTtcXG4rXFxuK1xcdC8qIFRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkIG9mZiB0aGUgTFJVIGFuZCBub3RoaW5nIHJlLWFkZHMgaXQgaGVyZS4gKi9cXG4rXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG4rXFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpXFxuK1xcdFxcdG1lbWNnID0gTlVMTDtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBHYXRlIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZ1xcbitcXHQgKiBzd2FwaW4gbWF5IGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZVxcbitcXHQgKiBmb2xpbyBmcm9tIHRoZSBjYWNoZSwgYW5kIGl0IG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW8gKGl0XFxuK1xcdCAqIHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJ3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8XFxuK1xcdCAgICAhcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzd2FwX2FkZHJlc3Nfc3BhY2UoZm9saW8tXFx1MDAzZXN3YXApLCBmb2xpbywgbWVtY2cpKSB7XFxuK1xcdFxcdC8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqL1xcbitcXHRcXHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rXFxuK1xcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdGZvbGlvX3B1dChmb2xpbyk7XFxuK31cXG4rXFxuIC8qXFxuICAqIElmIHdlIGFyZSB0aGUgb25seSB1c2VyLCB0aGVuIHRyeSB0byBmcmVlIHVwIHRoZSBzd2FwIGNhY2hlLlxcbiAgKlxcbkBAIC02NDMsMTIgKzY4NiwxMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XFxuIFxcdFxcdGlmIChmb2xpbylcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbi1cXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbitcXHRcXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XFxuIFxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbiBcXG4gXFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTtcXG4gXFx0aWYgKHJlYWRhaGVhZCkge1xcbiBcXHRcXHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcXG5AQCAtNjgzLDEyICs3MjcsMTMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XFxuIFxcdFxcdGlmIChmb2xpbylcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbi1cXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XFxuK1xcdFxcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbiBcXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4gXFxuIFxcdGlmIChJU19FUlIoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gZm9saW87XFxuIFxcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA4NDhiZDNlNWVlZTJiLi40Y2MzYTNlZDZkYjZlIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNzgwLDYgKzc4MCwyMiBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgbG9uZyBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1lZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcXG4re1xcbitcXHRpZiAoX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgcmVjbGFpbWVkLCB0YXJnZXRfbWVtY2cpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFVuZnJlZXppbmcgdGhlIHJlZmNvdW50IHdpdGggMSBlZmZlY3RpdmVseVxcbitcXHRcXHQgKiBkcm9wcyB0aGUgcGFnZWNhY2hlIHJlZiBmb3IgdXMgd2l0aG91dCByZXF1aXJpbmcgYW5vdGhlclxcbitcXHRcXHQgKiBhdG9taWMgb3BlcmF0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcXG4rXFx0XFx0cmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuXFxuICAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS5cXG5AQCAtNzk0LDE2ICs4MTAsMjggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAgKi9cXG4gbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHRpZiAoX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFVuZnJlZXppbmcgdGhlIHJlZmNvdW50IHdpdGggMSBlZmZlY3RpdmVseVxcbi1cXHRcXHQgKiBkcm9wcyB0aGUgcGFnZWNhY2hlIHJlZiBmb3IgdXMgd2l0aG91dCByZXF1aXJpbmcgYW5vdGhlclxcbi1cXHRcXHQgKiBhdG9taWMgb3BlcmF0aW9uLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcXG4tXFx0XFx0cmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIF9fcmVtb3ZlX21hcHBpbmdfdW5mcmVlemUobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSAtIFJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcsIGFzIHJlY2xhaW0gZG9lcy5cXG4rICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLlxcbisgKiBAZm9saW86IFRoZSBmb2xpbyB0byByZW1vdmUuXFxuKyAqIEB0YXJnZXRfbWVtY2c6IFRoZSBtZW1jZyB0byBjaGFyZ2UgdGhlIGV2aWN0aW9uIHNoYWRvdyB0bzsgdGhlIGNhbGxlciBtdXN0XFxuKyAqICAgICAgICAgICAgICAgIGtlZXAgaXQgYWxpdmUgYWNyb3NzIHRoZSBjYWxsLlxcbisgKlxcbisgKiBMaWtlIHJlbW92ZV9tYXBwaW5nKCksIGJ1dCBzdG9yZXMgYSB3b3JraW5nc2V0IGV2aWN0aW9uIHNoYWRvdyB0aGUgd2F5IHBhZ2VcXG4rICogcmVjbGFpbSBkb2VzLCBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmUgZGV0ZWN0ZWQgYW5kIHRoZSBmb2xpb1xcbisgKiByZS1hY3RpdmF0ZWQuXFxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpb1xcbisgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC5cXG4rICogQ29udGV4dDogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBhIHNpbmdsZSByZWZjb3VudCBvbiB0aGUgZm9saW8gYW5kXFxuKyAqIGhvbGQgaXRzIGxvY2suXFxuKyAqL1xcbitsb25nIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxcbit7XFxuK1xcdHJldHVybiBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKG1hcHBpbmcsIGZvbGlvLCB0cnVlLCB0YXJnZXRfbWVtY2cpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcXG5pbmRleCA3NjFjZDY5OWUwYTNlLi5kMTY4MjJhNTE2ZThkIDEwMDY0NFxcbi0tLSBhL21tL3pzd2FwLmNcXG4rKysgYi9tbS96c3dhcC5jXFxuQEAgLTEwMDAsOCArMTAwMCw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXG4gXFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG4tXFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcXG4rXFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG4rXFx0XFx0XFx0XFx0XFx0IE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcbiBcXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xcbiBcXG4gXFx0LypcXG5AQCAtMTA0NSwxMiArMTA0NSwyNiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHQvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovXFxuIFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbiBcXG4tXFx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXFxuLVxcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcXG4rXFx0Zm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRHJvcCBvdXIgcmVmZXJlbmNlIGJlZm9yZSBzdGFydGluZyB3cml0ZWJhY2sgc28gdGhlIHN3YXAgY2FjaGUgaG9sZHNcXG4rXFx0ICogdGhlIG9ubHkgb25lOiB0aGUgZHJvcCBpbiBmb2xpb19lbmRfd3JpdGViYWNrKCkgbmVlZHMgdGhhdCBmb3JcXG4rXFx0ICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIHRvIHN1Y2NlZWQsIG90aGVyd2lzZSB0aGUgZm9saW8gaXMgaGFuZGVkXFxuK1xcdCAqIGJhY2sgdG8gcmVjbGFpbSBpbnN0ZWFkLlxcbitcXHQgKlxcbitcXHQgKiBOb3RoaW5nIGNhbiBmcmVlIHRoZSBmb2xpbyBpbiB0aGUgbWVhbnRpbWU6IHdlIGhvbGQgdGhlIGZvbGlvIGxvY2tcXG4rXFx0ICogdW50aWwgd3JpdGViYWNrIHN0YXJ0cywgUEdfd3JpdGViYWNrIHRoZW4gYmxvY2tzIHN3YXAgY2FjaGUgcmVtb3ZhbCxcXG4rXFx0ICogYW5kIGZvbGlvX2VuZF93cml0ZWJhY2soKSB0YWtlcyBpdHMgb3duIHJlZmVyZW5jZSBiZWZvcmUgY2xlYXJpbmdcXG4rXFx0ICogUEdfd3JpdGViYWNrIGFuZCBkb25hdGVzIGl0IHRvIHRoZSBkcm9wLlxcbitcXHQgKi9cXG4rXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFxuIFxcdC8qIHN0YXJ0IHdyaXRlYmFjayAqL1xcbiBcXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcXG4gXFxuK1xcdHJldHVybiAwO1xcbitcXG4gb3V0OlxcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6Mjk6MTEuNDQ0ODkzNzIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUwOTUxMTU1MjgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gICAgXCJyZW1vdmVfbWFwcGluZ19yZWNsYWltXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGRyb3Agc3dhcCBjYWNoZSBmb2xpb3MgYWZ0ZXIgenN3YXAgd3JpdGViYWNrIGNvbXBsZXRlcywgYXZvaWRpbmcgdW5uZWNlc3NhcnkgTFJVIHBvbGx1dGlvbi4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBhbmQgbW9kaWZpZXMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgdG8gdXNlIHRoaXMgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChzd2FwLCB6c3dhcCwgcGFnZSBjYWNoZSkgdGhhdCBhZmZlY3RzIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGJlaGF2aW9yLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFlMDg2Mjk5ODY0MDQ5ZWQ3NzY5OGVhZmVjMGVjMzc2NjBkZWYxNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxNDoyOTowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDhmMGY2OGUyNDViYWEuLjI5ZWM2MGRjYWUyMTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0zNzQsNiArMzc0LDggQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitsb25nIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG4gZXh0ZXJuIGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuQEAgLTQ2NSw2ICs0NjcsOCBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpO1xuICAqL1xuIGJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitcbiAvKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xuIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XG4gdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7XG5AQCAtNDc1LDYgKzQ3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF9kZXZpY2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxuIH1cbiBcbiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIHtcbiBcdHJldHVybiBOVUxMO1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggZDcyMTk4NmQ1ZjQ2NS4uMDQwYzk3YTEyMWRlZCAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMTY4Niw2ICsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcbiAgKi9cbiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRib29sIHN3YXBfZHJvcGJlaGluZDtcbitcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4gXHQvKlxuQEAgLTE2OTUsNyArMTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdCAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuXG4gXHQgKi9cbiBcdGZvbGlvX2dldChmb2xpbyk7XG4rXG4rXHQvKlxuK1x0ICogU2FtcGxlIHRoaXMgYmVmb3JlIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCgpIGNsZWFyc1xuK1x0ICogUEdfd3JpdGViYWNrOiB1bnRpbCB0aGVuIGEgcmFjaW5nIHN3YXBpbiBjYW5ub3QgcmVtb3ZlIHRoZSBmb2xpbyBmcm9tXG4rXHQgKiB0aGUgc3dhcCBjYWNoZS4gQWZ0ZXJ3YXJkcyBpdCBjYW4sIGFuZCB0aGUgZHJvcCBiZWxvdyB0aGVuIGZpbmRzIGFcbitcdCAqIG5vbi1zd2FwY2FjaGUgZm9saW8gYW5kIHB1dHMgaXQgYmFjayBvbiB0aGUgTFJVIGluc3RlYWQuIFRoZVxuK1x0ICogcmVmZXJlbmNlIHRha2VuIGFib3ZlIGtlZXBzIHRoZSBmb2xpbyBhbGl2ZSBhY3Jvc3MgdGhhdCB3aW5kb3cuXG4rXHQgKi9cbitcdHN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbyk7XG4rXG4gXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xuK1xuK1x0aWYgKHN3YXBfZHJvcGJlaGluZCkge1xuK1x0XHRzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jXG5pbmRleCBiMjNmNDk0ZmNjODNkLi41ODZjNzljM2JiM2QyIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pby5jXG4rKysgYi9tbS9wYWdlX2lvLmNcbkBAIC00NTYsNiArNDU2LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmMoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBlbmRfc3dhcF9iaW9fd3JpdGU7XG4gXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGZvbGlvLCBmb2xpb19zaXplKGZvbGlvKSwgMCk7XG4gXG4rXHQvKlxuK1x0ICogRHJvcHBpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdGFrZXMgc2xlZXBpbmcgbG9ja3MsIHNvIHRoZVxuK1x0ICogY29tcGxldGlvbiBtdXN0IG5vdCBydW4gaW4gaW50ZXJydXB0IGNvbnRleHQuXG4rXHQgKi9cbitcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuK1x0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4rXG4gXHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pO1xuIFx0Y291bnRfc3dwb3V0X3ZtX2V2ZW50KGZvbGlvKTtcbiBcdGZvbGlvX3N0YXJ0X3dyaXRlYmFjayhmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA3N2QyZDE0ZWRhNDIxLi5mYzQ0ZGFhZTFkZTFmIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0zMDQsOSArMzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA3MjdhMTdlZTc4MjExLi4yMzFmYTg3Y2JiZTBjIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC00ODMsMTMgKzQ4MywxMSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuKyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXG5AQCAtNTAxLDEzICs0OTksMTcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cbiAgKlxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4rICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXG4rICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXG4rICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTM1LDYgKzUzNyw0NyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyAtIGRyb3AgYSBkcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW9cbisgKiBAZm9saW86IHRoZSBvZmYtTFJVIGZvbGlvIHdob3NlIHdyaXRlYmFjayBoYXMgY29tcGxldGVkXG4rICpcbisgKiBDb250ZXh0OiB0YXNrIGNvbnRleHQsIHdpdGggdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBmb2xpb19lbmRfd3JpdGViYWNrKClcbisgKiBkb25hdGVkIHRvIHVzLlxuKyAqL1xuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcbitcdGZvbGlvX2xvY2soZm9saW8pO1xuK1xuK1x0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4rXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSlcbitcdFx0bWVtY2cgPSBOVUxMO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHQvKlxuK1x0ICogR2F0ZSByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgb24gZm9saW9fdGVzdF9zd2FwY2FjaGUoKTogYSByYWNpbmdcbitcdCAqIHN3YXBpbiBtYXkgaGF2ZSBmcmVlZCB0aGUgc3dhcCBzbG90IChmb2xpb19mcmVlX3N3YXAoKSkgYW5kIGRyb3BwZWQgdGhlXG4rXHQgKiBmb2xpbyBmcm9tIHRoZSBjYWNoZSwgYW5kIGl0IG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW8gKGl0XG4rXHQgKiB3b3VsZCB0cmlwIF9fcmVtb3ZlX21hcHBpbmcoKSdzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS5cbitcdCAqL1xuK1x0aWYgKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8XG4rXHQgICAgIXJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3dhcF9hZGRyZXNzX3NwYWNlKGZvbGlvLVx1MDAzZXN3YXApLCBmb2xpbywgbWVtY2cpKSB7XG4rXHRcdC8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqL1xuK1x0XHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcbitcdFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4rXHR9XG4rXG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rXG4rXHRmb2xpb191bmxvY2soZm9saW8pO1xuK1x0Zm9saW9fcHV0KGZvbGlvKTtcbit9XG4rXG4gLypcbiAgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgdXNlciwgdGhlbiB0cnkgdG8gZnJlZSB1cCB0aGUgc3dhcCBjYWNoZS5cbiAgKlxuQEAgLTY0MywxMiArNjg2LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbitcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTtcbiBcdGlmIChyZWFkYWhlYWQpIHtcbiBcdFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XG5AQCAtNjgzLDEyICs3MjcsMTMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbitcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgTlVMTCk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDg0OGJkM2U1ZWVlMmIuLjRjYzNhM2VkNmRiNmUgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC03ODAsNiArNzgwLDIyIEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgbG9uZyBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWltZWQsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxuK3tcbitcdGlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCByZWNsYWltZWQsIHRhcmdldF9tZW1jZykpIHtcbitcdFx0LypcbitcdFx0ICogVW5mcmVlemluZyB0aGUgcmVmY291bnQgd2l0aCAxIGVmZmVjdGl2ZWx5XG4rXHRcdCAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyXG4rXHRcdCAqIGF0b21pYyBvcGVyYXRpb24uXG4rXHRcdCAqL1xuK1x0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xuK1x0XHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuXG4gICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLlxuQEAgLTc5NCwxNiArODEwLDI4IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAgKi9cbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdGlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCkpIHtcbi1cdFx0Lypcbi1cdFx0ICogVW5mcmVlemluZyB0aGUgcmVmY291bnQgd2l0aCAxIGVmZmVjdGl2ZWx5XG4tXHRcdCAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyXG4tXHRcdCAqIGF0b21pYyBvcGVyYXRpb24uXG4tXHRcdCAqL1xuLVx0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xuLVx0XHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuLVx0fVxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpO1xuK31cbitcbisvKipcbisgKiByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgLSBSZW1vdmUgYSBmb2xpbyBmcm9tIGl0cyBtYXBwaW5nLCBhcyByZWNsYWltIGRvZXMuXG4rICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLlxuKyAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHJlbW92ZS5cbisgKiBAdGFyZ2V0X21lbWNnOiBUaGUgbWVtY2cgdG8gY2hhcmdlIHRoZSBldmljdGlvbiBzaGFkb3cgdG87IHRoZSBjYWxsZXIgbXVzdFxuKyAqICAgICAgICAgICAgICAgIGtlZXAgaXQgYWxpdmUgYWNyb3NzIHRoZSBjYWxsLlxuKyAqXG4rICogTGlrZSByZW1vdmVfbWFwcGluZygpLCBidXQgc3RvcmVzIGEgd29ya2luZ3NldCBldmljdGlvbiBzaGFkb3cgdGhlIHdheSBwYWdlXG4rICogcmVjbGFpbSBkb2VzLCBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmUgZGV0ZWN0ZWQgYW5kIHRoZSBmb2xpb1xuKyAqIHJlLWFjdGl2YXRlZC5cbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgcGFnZXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXBwaW5nLiAgMCBpZiB0aGUgZm9saW9cbisgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC5cbisgKiBDb250ZXh0OiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50IG9uIHRoZSBmb2xpbyBhbmRcbisgKiBob2xkIGl0cyBsb2NrLlxuKyAqL1xuK2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHQgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbit7XG4rXHRyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgdHJ1ZSwgdGFyZ2V0X21lbWNnKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2UuLmQxNjgyMmE1MTZlOGQgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMTAwMCw4ICsxMDAwLDggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuLVx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4tXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4rXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuK1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDQ1LDEyICsxMDQ1LDI2IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHQvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovXG4gXHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbiBcbi1cdC8qIG1vdmUgaXQgdG8gdGhlIHRhaWwgb2YgdGhlIGluYWN0aXZlIGxpc3QgYWZ0ZXIgZW5kX3dyaXRlYmFjayAqL1xuLVx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xuK1x0Zm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xuK1xuK1x0LypcbitcdCAqIERyb3Agb3VyIHJlZmVyZW5jZSBiZWZvcmUgc3RhcnRpbmcgd3JpdGViYWNrIHNvIHRoZSBzd2FwIGNhY2hlIGhvbGRzXG4rXHQgKiB0aGUgb25seSBvbmU6IHRoZSBkcm9wIGluIGZvbGlvX2VuZF93cml0ZWJhY2soKSBuZWVkcyB0aGF0IGZvclxuK1x0ICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIHRvIHN1Y2NlZWQsIG90aGVyd2lzZSB0aGUgZm9saW8gaXMgaGFuZGVkXG4rXHQgKiBiYWNrIHRvIHJlY2xhaW0gaW5zdGVhZC5cbitcdCAqXG4rXHQgKiBOb3RoaW5nIGNhbiBmcmVlIHRoZSBmb2xpbyBpbiB0aGUgbWVhbnRpbWU6IHdlIGhvbGQgdGhlIGZvbGlvIGxvY2tcbitcdCAqIHVudGlsIHdyaXRlYmFjayBzdGFydHMsIFBHX3dyaXRlYmFjayB0aGVuIGJsb2NrcyBzd2FwIGNhY2hlIHJlbW92YWwsXG4rXHQgKiBhbmQgZm9saW9fZW5kX3dyaXRlYmFjaygpIHRha2VzIGl0cyBvd24gcmVmZXJlbmNlIGJlZm9yZSBjbGVhcmluZ1xuK1x0ICogUEdfd3JpdGViYWNrIGFuZCBkb25hdGVzIGl0IHRvIHRoZSBkcm9wLlxuK1x0ICovXG4rXHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4gXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcbiBcbitcdHJldHVybiAwO1xuK1xuIG91dDpcbiBcdGlmIChyZXQpIHtcbiBcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6Mjk6MTEuNDQ0ODk1NjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU0OTcxNjI4OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZW1vcnkgTWFuYWdlbWVudCBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFRoaXMgcGF0Y2ggc2VyaWVzIGlzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGJpdHMgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCdzIG1vZGlmeWluZyBoZWFkZXJzIGFuZCBjb2RlIGluIGBzd2FwLmhgLCBgZmlsZW1hcC5jYCwgYHBhZ2VfaW8uY2AsIGBzd2FwX3N0YXRlLmNgLCBgdm1zY2FuLmNgLCBhbmQgYHpzd2FwLmNgLiBXZSdyZSBkZWFsaW5nIHdpdGggc3dhcCwgenN3YXAsIGFuZCB0aGUgcGFnZSBjYWNoZSDigJMgdGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIHF1ZXN0aW9uLiBUaGlzICpkZWZpbml0ZWx5KiBuZWVkcyBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIGdldCBzcGVjaWZpYyBhYm91dCB3aGVyZSB0byBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBvciBtb2RpZmllZC4gQWxyaWdodCwgbmV3IGZ1bmN0aW9uczogYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGFuZCBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AuIEFuZCB0aGVuIG1vZGlmaWVkIGZ1bmN0aW9uczogYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jYC4gVGhvc2UgYXJlIG91ciBtYWluIHRhcmdldHMuXG5cbk5leHQsIEkgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgY29udGV4dCBvZiB0aGUgZnV6emluZy4gTGV0IG1lIGNoZWNrIGlmIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIHN0YXRpYyBvciBub24tc3RhdGljLiBZdXAsIGl0J3Mgc3RhdGljLiBPa2F5LCBsZXQncyBjaGVjayBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgYW5kIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYC4gSG1tLCBib3RoIGFyZSBub24tc3RhdGljLiBTbywgdGhleSdyZSBleHBvc2VkIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcy4gYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIGFsc28gbm9uLXN0YXRpYywgc28gd2UgaGF2ZSBhIGZldyBlbnRyeSBwb2ludHMgdG8gY29uc2lkZXIuXG5cbk9uZSBtb3JlIHRoaW5nOiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB3ZSBoYXZlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB6c3dhcCBhbmQgc3dhcC4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBDT05GSUdfWlNXQVBgLCBgQ09ORklHX1NXQVBgLCBhbmQgYENPTkZJR19NRU1DR2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZ3MgYW5kIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCBzZXQgYXBwcm9wcmlhdGVseSBmb3Igb3VyIHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozMTo0Ni40MTY1MjY4ODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNzMwMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjMxOjQ2LjkwNzI2MjQzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MzM0NTQzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKlpTV0FQIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gWlNXQVAgcmVsaWVzIGZ1bmRhbWVudGFsbHkgb24gdGhlIGV4aXN0ZW5jZSBhbmQgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIFNXQVAuIFRoYXQncyB0aGUgYmFzZWxpbmUgYXNzdW1wdGlvbiwgYnV0IGFzc3VtcHRpb25zIGFyZSB0aGUgZW5lbXkgb2Ygcm9idXN0IHN5c3RlbXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBub3QganVzdCAqYXNzdW1lKiB0aGF0IGNvbm5lY3Rpb24gaXMgc29saWQuIEkgbmVlZCB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgY29yZSBhcmNoaXRlY3R1cmFsIHJlbGF0aW9uc2hpcCBoZXJlLCBhbmQgYW55IGluc3RhYmlsaXR5IGluIFNXQVAsIG9yIGFuIGltcHJvcGVybHkgY29uZmlndXJlZCBkZXBlbmRlbmN5LCBjb3VsZCBjYXNjYWRlIGFuZCBjYXVzZSBzZXJpb3VzIGlzc3VlcyB3aXRoaW4gWlNXQVAncyBvdmVyYWxsIGZ1bmN0aW9uLiBUaW1lIHRvIGRpZyBpbnRvIHRob3NlIFpTV0FQIGRlcGVuZGVuY2llcyBhbmQgbWFwIG91dCBldmVyeSBwb2ludCBvZiBpbnRlZ3JhdGlvbiB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBwcmVkaWN0IHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBMZXQncyBzZWUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MzE6NTEuMzQwNzE5NTE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODg0Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxubW0vS2NvbmZpZzoxNDpcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxubW0vS2NvbmZpZy0xNS1cXHRkZWZhdWx0IHlcXG4tLVxcbm1tL0tjb25maWc9MjI9Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbm1tL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBTV0FQXFxubW0vS2NvbmZpZy0yNS1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5tbS9LY29uZmlnPTM1PWNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG5tbS9LY29uZmlnOjM3OlxcdGRlcGVuZHMgb24gWlNXQVBcXG5tbS9LY29uZmlnLTM4LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9NDU9Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxubW0vS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIFpTV0FQXFxubW0vS2NvbmZpZy00OC1cXHRkZWZhdWx0IG5cXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxubW0vS2NvbmZpZy02MC1cXHRwcm9tcHQgXFxcIkRlZmF1bHQgY29tcHJlc3NvclxcXCJcXG5tbS9LY29uZmlnOjYxOlxcdGRlcGVuZHMgb24gWlNXQVBcXG5tbS9LY29uZmlnLTYyLVxcdGRlZmF1bHQgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbi0tXFxubW0vS2NvbmZpZz0xMTQ9Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5tbS9LY29uZmlnOjExNjogICAgICAgZGVwZW5kcyBvbiBaU1dBUFxcbm1tL0tjb25maWctMTE3LSAgICAgICBkZWZhdWx0IFxcXCJkZWZsYXRlXFxcIiBpZiBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbi0tXFxubW0vS2NvbmZpZz0xMzA9bWVudSBcXFwiWnNtYWxsb2MgYWxsb2NhdG9yIG9wdGlvbnNcXFwiXFxubW0vS2NvbmZpZzoxMzE6XFx0ZGVwZW5kcyBvbiBaU01BTExPQ1xcbm1tL0tjb25maWctMTMyLVxcbi0tXFxubW0vS2NvbmZpZz0xNzI9Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxcbm1tL0tjb25maWctMTczLVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE3NDpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTlkgXFx1MDAyNlxcdTAwMjYgIVRJTllfUkNVXFxubW0vS2NvbmZpZzoxNzU6XFx0ZGVwZW5kcyBvbiAhUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcXG5tbS9LY29uZmlnLTE3Ni1cXG5tbS9LY29uZmlnPTE3Nz1jb25maWcgU0xVQl9USU5ZXFxubW0vS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiQ29uZmlndXJlIGZvciBtaW5pbWFsIG1lbW9yeSBmb290cHJpbnRcXFwiXFxubW0vS2NvbmZpZzoxNzk6XFx0ZGVwZW5kcyBvbiBFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbm1tL0tjb25maWctMTgwLVxcdHNlbGVjdCBTTEFCX01FUkdFX0RFRkFVTFRcXG4tLVxcbm1tL0tjb25maWc9MjA0PWNvbmZpZyBTTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL0tjb25maWctMjA1LVxcdGJvb2wgXFxcIlJhbmRvbWl6ZSBzbGFiIGZyZWVsaXN0XFxcIlxcbm1tL0tjb25maWc6MjA2OlxcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxcbm1tL0tjb25maWctMjA3LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MjEyPWNvbmZpZyBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXFxubW0vS2NvbmZpZy0yMTMtXFx0Ym9vbCBcXFwiSGFyZGVuIHNsYWIgZnJlZWxpc3QgbWV0YWRhdGFcXFwiXFxubW0vS2NvbmZpZzoyMTQ6XFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXFxubW0vS2NvbmZpZy0yMTUtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0yMjE9Y29uZmlnIFNMQUJfQlVDS0VUU1xcbm1tL0tjb25maWctMjIyLVxcdGJvb2wgXFxcIlN1cHBvcnQgYWxsb2NhdGlvbiBmcm9tIHNlcGFyYXRlIGttYWxsb2MgYnVja2V0c1xcXCJcXG5tbS9LY29uZmlnOjIyMzpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTIyNC1cXHRkZWZhdWx0IFNMQUJfRlJFRUxJU1RfSEFSREVORURcXG4tLVxcbm1tL0tjb25maWc9MjM4PWNvbmZpZyBTTFVCX1NUQVRTXFxuLS1cXG5tbS9LY29uZmlnLTI0MC1cXHRib29sIFxcXCJFbmFibGUgcGVyZm9ybWFuY2Ugc3RhdGlzdGljc1xcXCJcXG5tbS9LY29uZmlnOjI0MTpcXHRkZXBlbmRzIG9uIFNZU0ZTIFxcdTAwMjZcXHUwMDI2ICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTI0Mi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTI1MT1jb25maWcgS01BTExPQ19QQVJUSVRJT05fQ0FDSEVTXFxubW0vS2NvbmZpZzoyNTI6XFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXFxubW0vS2NvbmZpZy0yNTMtXFx0Ym9vbCBcXFwiUGFydGl0aW9uZWQgc2xhYiBjYWNoZXMgZm9yIG5vcm1hbCBrbWFsbG9jXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0yNjc9Y2hvaWNlXFxubW0vS2NvbmZpZy0yNjgtXFx0cHJvbXB0IFxcXCJQYXJ0aXRpb25lZCBzbGFiIGNhY2hlIG1vZGVcXFwiXFxubW0vS2NvbmZpZzoyNjk6XFx0ZGVwZW5kcyBvbiBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcXG5tbS9LY29uZmlnLTI3MC1cXHRkZWZhdWx0IEtNQUxMT0NfUEFSVElUSU9OX1RZUEVEIGlmIENDX0hBU19BTExPQ19UT0tFTlxcbi0tXFxubW0vS2NvbmZpZz0yODc9Y29uZmlnIEtNQUxMT0NfUEFSVElUSU9OX1RZUEVEXFxubW0vS2NvbmZpZy0yODgtXFx0Ym9vbCBcXFwiVHlwZSBiYXNlZCBzbGFiIGNhY2hlIHNlbGVjdGlvbiBmb3Igbm9ybWFsIGttYWxsb2NcXFwiXFxubW0vS2NvbmZpZzoyODk6XFx0ZGVwZW5kcyBvbiBDQ19IQVNfQUxMT0NfVE9LRU5cXG5tbS9LY29uZmlnLTI5MC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTM1OD1jb25maWcgTU1BUF9BTExPV19VTklOSVRJQUxJWkVEXFxubW0vS2NvbmZpZy0zNTktXFx0Ym9vbCBcXFwiQWxsb3cgbW1hcHBlZCBhbm9ueW1vdXMgbWVtb3J5IHRvIGJlIHVuaW5pdGlhbGl6ZWRcXFwiXFxubW0vS2NvbmZpZzozNjA6XFx0ZGVwZW5kcyBvbiBFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIU1NVVxcbm1tL0tjb25maWctMzYxLVxcdGRlZmF1bHQgblxcbi0tXFxubW0vS2NvbmZpZz0zODA9Y29uZmlnIFNFTEVDVF9NRU1PUllfTU9ERUxcXG5tbS9LY29uZmlnLTM4MS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzozODI6XFx0ZGVwZW5kcyBvbiBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUxcXG5tbS9LY29uZmlnLTM4My1cXG5tbS9LY29uZmlnPTM4ND1jaG9pY2VcXG5tbS9LY29uZmlnLTM4NS1cXHRwcm9tcHQgXFxcIk1lbW9yeSBtb2RlbFxcXCJcXG5tbS9LY29uZmlnOjM4NjpcXHRkZXBlbmRzIG9uIFNFTEVDVF9NRU1PUllfTU9ERUxcXG5tbS9LY29uZmlnLTM4Ny1cXHRkZWZhdWx0IFNQQVJTRU1FTV9NQU5VQUwgaWYgQVJDSF9TUEFSU0VNRU1fREVGQVVMVFxcbi0tXFxubW0vS2NvbmZpZz0zOTU9Y29uZmlnIEZMQVRNRU1fTUFOVUFMXFxubW0vS2NvbmZpZy0zOTYtXFx0Ym9vbCBcXFwiRmxhdCBNZW1vcnlcXFwiXFxubW0vS2NvbmZpZzozOTc6XFx0ZGVwZW5kcyBvbiAhQVJDSF9TUEFSU0VNRU1fRU5BQkxFIHx8IEFSQ0hfRkxBVE1FTV9FTkFCTEVcXG5tbS9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTQxMD1jb25maWcgU1BBUlNFTUVNX01BTlVBTFxcbm1tL0tjb25maWctNDExLVxcdGJvb2wgXFxcIlNwYXJzZSBNZW1vcnlcXFwiXFxubW0vS2NvbmZpZzo0MTI6XFx0ZGVwZW5kcyBvbiBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcXG5tbS9LY29uZmlnLTQxMy1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTQyNT1jb25maWcgU1BBUlNFTUVNXFxubW0vS2NvbmZpZy00MjYtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NDI3OlxcdGRlcGVuZHMgb24gKCFTRUxFQ1RfTUVNT1JZX01PREVMIFxcdTAwMjZcXHUwMDI2IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRSkgfHwgU1BBUlNFTUVNX01BTlVBTFxcbm1tL0tjb25maWctNDI4LVxcbm1tL0tjb25maWc9NDI5PWNvbmZpZyBGTEFUTUVNXFxubW0vS2NvbmZpZy00MzAtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NDMxOlxcdGRlcGVuZHMgb24gIVNQQVJTRU1FTSB8fCBGTEFUTUVNX01BTlVBTFxcbm1tL0tjb25maWctNDMyLVxcbi0tXFxubW0vS2NvbmZpZz00NTE9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxubW0vS2NvbmZpZy00NTItXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NDUzOlxcdGRlcGVuZHMgb24gU1BBUlNFTUVNIFxcdTAwMjZcXHUwMDI2ICFTUEFSU0VNRU1fU1RBVElDXFxubW0vS2NvbmZpZy00NTQtXFxuLS1cXG5tbS9LY29uZmlnPTQ1OD1jb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcXG5tbS9LY29uZmlnLTQ1OS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo0NjA6XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU0gXFx1MDAyNlxcdTAwMjYgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXFxubW0vS2NvbmZpZy00NjEtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz00ODQ9Y29uZmlnIEhBVkVfR1VQX0ZBU1RcXG5tbS9LY29uZmlnOjQ4NTpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctNDg2LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWc9NTA4PWNvbmZpZyBFWENMVVNJVkVfU1lTVEVNX1JBTVxcbm1tL0tjb25maWctNTA5LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjUxMDpcXHRkZXBlbmRzIG9uICFERVZNRU0gfHwgU1RSSUNUX0RFVk1FTVxcbm1tL0tjb25maWctNTExLVxcbi0tXFxubW0vS2NvbmZpZz01MjM9bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbi0tXFxubW0vS2NvbmZpZy01MjUtXFx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cXG5tbS9LY29uZmlnOjUyNjpcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxubW0vS2NvbmZpZzo1Mjc6XFx0ZGVwZW5kcyBvbiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWc6NTI4OlxcdGRlcGVuZHMgb24gNjRCSVRcXG5tbS9LY29uZmlnLTUyOS1cXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxcbi0tXFxubW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4tLVxcbm1tL0tjb25maWctNTkzLVxcdHNlbGVjdCBIQVZFX0JPT1RNRU1fSU5GT19OT0RFIGlmIFg4Nl82NFxcbm1tL0tjb25maWc6NTk0OlxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTU5NS1cXHRzZWxlY3QgTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnPTU5Nz1jb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcXG5tbS9LY29uZmlnLTU5OC1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo1OTk6XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRyBcXHUwMDI2XFx1MDAyNiBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWc6NjAwOlxcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcXG5tbS9LY29uZmlnLTYwMS1cXG4tLVxcbm1tL0tjb25maWc9NjA0PWNvbmZpZyBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbi0tXFxubW0vS2NvbmZpZy02MTAtIyBEZWZhdWx0IHRvIDQgZm9yIHdpZGVyIHRlc3RpbmcsIHRob3VnaCA4IG1pZ2h0IGJlIG1vcmUgYXBwcm9wcmlhdGUuXFxubW0vS2NvbmZpZzo2MTE6IyBBUk0ncyBhZGp1c3RfcHRlICh1bnVzZWQgaWYgVklQVCkgZGVwZW5kcyBvbiBtbS13aWRlIHBhZ2VfdGFibGVfbG9jay5cXG5tbS9LY29uZmlnLTYxMi0jIFBBLVJJU0MgN3h4eCdzIHNwaW5sb2NrX3Qgd291bGQgZW5sYXJnZSBzdHJ1Y3QgcGFnZSBmcm9tIDMyIHRvIDQ0IGJ5dGVzLlxcbi0tXFxubW0vS2NvbmZpZz02MTg9Y29uZmlnIFNQTElUX1BURV9QVExPQ0tTXFxubW0vS2NvbmZpZy02MTktXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NjIwOlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZzo2MjE6XFx0ZGVwZW5kcyBvbiBTTVBcXG5tbS9LY29uZmlnOjYyMjpcXHRkZXBlbmRzIG9uIE5SX0NQVVMgXFx1MDAzZT0gNFxcbm1tL0tjb25maWc6NjIzOlxcdGRlcGVuZHMgb24gIUFSTSB8fCBDUFVfQ0FDSEVfVklQVFxcbm1tL0tjb25maWc6NjI0OlxcdGRlcGVuZHMgb24gIVBBUklTQyB8fCBQQTIwXFxubW0vS2NvbmZpZzo2MjU6XFx0ZGVwZW5kcyBvbiAhU1BBUkMzMlxcbm1tL0tjb25maWc6NjI2OlxcdGRlcGVuZHMgb24gIVVNTFxcbm1tL0tjb25maWctNjI3LVxcbi0tXFxubW0vS2NvbmZpZz02MzE9Y29uZmlnIFNQTElUX1BNRF9QVExPQ0tTXFxubW0vS2NvbmZpZy02MzItXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NjMzOlxcdGRlcGVuZHMgb24gU1BMSVRfUFRFX1BUTE9DS1MgXFx1MDAyNlxcdTAwMjYgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DS1xcbm1tL0tjb25maWctNjM0LVxcbi0tXFxubW0vS2NvbmZpZz02NDI9Y29uZmlnIEJBTExPT05fTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY0NC1cXHRkZWZhdWx0IHlcXG5tbS9LY29uZmlnOjY0NTpcXHRkZXBlbmRzIG9uIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBCQUxMT09OXFxubW0vS2NvbmZpZy02NDYtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz02NTQ9Y29uZmlnIENPTVBBQ1RJT05cXG4tLVxcbm1tL0tjb25maWctNjU3LVxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnOjY1ODpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctNjU5LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9NjY5PWNvbmZpZyBDT01QQUNUX1VORVZJQ1RBQkxFX0RFRkFVTFRcXG5tbS9LY29uZmlnLTY3MC1cXHRpbnRcXG5tbS9LY29uZmlnOjY3MTpcXHRkZXBlbmRzIG9uIENPTVBBQ1RJT05cXG5tbS9LY29uZmlnLTY3Mi1cXHRkZWZhdWx0IDAgaWYgUFJFRU1QVF9SVFxcbi0tXFxubW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY4Ny1cXHRkZWZhdWx0IHlcXG5tbS9LY29uZmlnOjY4ODpcXHRkZXBlbmRzIG9uIE5VTUEgXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vS2NvbmZpZy02ODktXFx0c2VsZWN0IE1JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxcbm1tL0tjb25maWctNjk3LVxcdGJvb2xcXG5tbS9LY29uZmlnOjY5ODpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctNjk5LVxcbi0tXFxubW0vS2NvbmZpZz03NDA9Y29uZmlnIEtTTVxcbm1tL0tjb25maWctNzQxLVxcdGJvb2wgXFxcIkVuYWJsZSBLU00gZm9yIHBhZ2UgbWVyZ2luZ1xcXCJcXG5tbS9LY29uZmlnOjc0MjpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctNzQzLVxcdHNlbGVjdCBYWEhBU0hcXG4tLVxcbm1tL0tjb25maWc9NzU1PWNvbmZpZyBERUZBVUxUX01NQVBfTUlOX0FERFJcXG5tbS9LY29uZmlnLTc1Ni1cXHRpbnQgXFxcIkxvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb25cXFwiXFxubW0vS2NvbmZpZzo3NTc6XFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnLTc1OC1cXHRkZWZhdWx0IDQwOTZcXG4tLVxcbm1tL0tjb25maWc9Nzc3PWNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWc6Nzc4OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZzo3Nzk6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03ODAtXFx0Ym9vbCBcXFwiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9yc1xcXCJcXG4tLVxcbm1tL0tjb25maWc9Nzg4PWNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc4OS1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxubW0vS2NvbmZpZzo3OTA6XFx0ZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSBcXHUwMDI2XFx1MDAyNiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbm1tL0tjb25maWctNzkxLVxcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxcbi0tXFxubW0vS2NvbmZpZz03OTM9Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1NcXG5tbS9LY29uZmlnLTc5NC1cXHRpbnQgXFxcIlR1cm4gb24gbW1hcCgpIGV4Y2VzcyBzcGFjZSB0cmltbWluZyBiZWZvcmUgYm9vdGluZ1xcXCJcXG5tbS9LY29uZmlnOjc5NTpcXHRkZXBlbmRzIG9uICFNTVVcXG5tbS9LY29uZmlnLTc5Ni1cXHRkZWZhdWx0IDFcXG4tLVxcbm1tL0tjb25maWc9ODI3PWNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xcbm1tL0tjb25maWctODI4LVxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcbm1tL0tjb25maWc6ODI5OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTg0Nj1tZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04NDctXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5tbS9LY29uZmlnOjg0ODpcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbm1tL0tjb25maWctODQ5LVxcdHNlbGVjdCBDT01QQUNUSU9OXFxuLS1cXG5tbS9LY29uZmlnPTk4Mj1jb25maWcgVEhQX1NXQVBcXG5tbS9LY29uZmlnLTk4My1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo5ODQ6XFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRTX1RIUF9TV0FQIFxcdTAwMjZcXHUwMDI2IFNXQVAgXFx1MDAyNlxcdTAwMjYgNjRCSVRcXG5tbS9LY29uZmlnLTk4NS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEwMjg9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVBcXG5tbS9LY29uZmlnLTEwMjktXFx0ZGVmX2Jvb2wgblxcbm1tL0tjb25maWc6MTAzMDpcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy0xMDMxLVxcbm1tL0tjb25maWc9MTAzMj1jb25maWcgQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDMzLVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjEwMzQ6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctMTAzNS1cXG5tbS9LY29uZmlnPTEwMzY9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxcbm1tL0tjb25maWctMTAzNy1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzoxMDM4OlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vS2NvbmZpZy0xMDM5LVxcbi0tXFxubW0vS2NvbmZpZz0xMDUwPWNvbmZpZyBORUVEX1BFUl9DUFVfS01cXG5tbS9LY29uZmlnOjEwNTE6XFx0ZGVwZW5kcyBvbiAhU01QIHx8ICFNTVVcXG5tbS9LY29uZmlnLTEwNTItXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcXG5tbS9LY29uZmlnLTEwNjgtXFx0Ym9vbCBcXFwiQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbm1tL0tjb25maWc6MTA2OTpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctMTA3MC1cXHRzZWxlY3QgTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnPTEwODI9Y29uZmlnIENNQV9ERUJVR0ZTXFxubW0vS2NvbmZpZy0xMDgzLVxcdGJvb2wgXFxcIkNNQSBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG5tbS9LY29uZmlnOjEwODQ6XFx0ZGVwZW5kcyBvbiBDTUEgXFx1MDAyNlxcdTAwMjYgREVCVUdfRlNcXG5tbS9LY29uZmlnLTEwODUtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMDg4PWNvbmZpZyBDTUFfU1lTRlNcXG5tbS9LY29uZmlnLTEwODktXFx0Ym9vbCBcXFwiQ01BIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlXFxcIlxcbm1tL0tjb25maWc6MTA5MDpcXHRkZXBlbmRzIG9uIENNQSBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbm1tL0tjb25maWctMTA5MS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEwOTU9Y29uZmlnIENNQV9BUkVBU1xcbm1tL0tjb25maWctMTA5Ni1cXHRpbnQgXFxcIk1heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1xcXCJcXG5tbS9LY29uZmlnOjEwOTc6XFx0ZGVwZW5kcyBvbiBDTUFcXG5tbS9LY29uZmlnLTEwOTgtXFx0ZGVmYXVsdCAyMCBpZiBOVU1BXFxuLS1cXG5tbS9LY29uZmlnPTExNDI9Y29uZmlnIE1FTV9TT0ZUX0RJUlRZXFxubW0vS2NvbmZpZy0xMTQzLVxcdGJvb2wgXFxcIlRyYWNrIG1lbW9yeSBjaGFuZ2VzXFxcIlxcbm1tL0tjb25maWc6MTE0NDpcXHRkZXBlbmRzIG9uIENIRUNLUE9JTlRfUkVTVE9SRSBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfU09GVF9ESVJUWSBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxubW0vS2NvbmZpZy0xMTQ1LVxcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxcbi0tXFxubW0vS2NvbmZpZz0xMTU3PWNvbmZpZyBTVEFDS19NQVhfREVGQVVMVF9TSVpFX01CXFxuLS1cXG5tbS9LY29uZmlnLTExNjAtXFx0cmFuZ2UgOCAyMDQ4XFxubW0vS2NvbmZpZzoxMTYxOlxcdGRlcGVuZHMgb24gU1RBQ0tfR1JPV1NVUCBcXHUwMDI2XFx1MDAyNiAoITY0QklUIHx8IENPTVBBVClcXG5tbS9LY29uZmlnLTExNjItXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMTY5PWNvbmZpZyBERUZFUlJFRF9TVFJVQ1RfUEFHRV9JTklUXFxubW0vS2NvbmZpZy0xMTcwLVxcdGJvb2wgXFxcIkRlZmVyIGluaXRpYWxpc2F0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byBrdGhyZWFkc1xcXCJcXG5tbS9LY29uZmlnOjExNzE6XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1cXG5tbS9LY29uZmlnOjExNzI6XFx0ZGVwZW5kcyBvbiAhTkVFRF9QRVJfQ1BVX0tNXFxubW0vS2NvbmZpZzoxMTczOlxcdGRlcGVuZHMgb24gNjRCSVRcXG5tbS9LY29uZmlnOjExNzQ6XFx0ZGVwZW5kcyBvbiAhS01TQU5cXG5tbS9LY29uZmlnLTExNzUtXFx0c2VsZWN0IFBBREFUQVxcbi0tXFxubW0vS2NvbmZpZz0xMTkzPWNvbmZpZyBJRExFX1BBR0VfVFJBQ0tJTkdcXG5tbS9LY29uZmlnLTExOTQtXFx0Ym9vbCBcXFwiRW5hYmxlIGlkbGUgcGFnZSB0cmFja2luZ1xcXCJcXG5tbS9LY29uZmlnOjExOTU6XFx0ZGVwZW5kcyBvbiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnLTExOTYtXFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuLS1cXG5tbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcXG5tbS9LY29uZmlnLTEyMzItXFx0Ym9vbCBcXFwiU3VwcG9ydCBETUEzMiB6b25lXFxcIiBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcXG5tbS9LY29uZmlnOjEyMzM6XFx0ZGVwZW5kcyBvbiAhWDg2XzMyXFxubW0vS2NvbmZpZy0xMjM0LVxcdGRlZmF1bHQgeSBpZiBBUk02NFxcbi0tXFxubW0vS2NvbmZpZz0xMjM2PWNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbm1tL0tjb25maWc6MTIzODpcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZzoxMjM5OlxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbm1tL0tjb25maWc6MTI0MDpcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxubW0vS2NvbmZpZy0xMjQxLVxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4tLVxcbm1tL0tjb25maWc9MTI2MD1jb25maWcgSE1NX01JUlJPUlxcbm1tL0tjb25maWctMTI2MS1cXHRib29sXFxubW0vS2NvbmZpZzoxMjYyOlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy0xMjYzLVxcbi0tXFxubW0vS2NvbmZpZz0xMjY3PWNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTI2OC1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxubW0vS2NvbmZpZzoxMjY5OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyNzAtXFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcbi0tXFxubW0vS2NvbmZpZz0xMzA2PWNvbmZpZyBHVVBfVEVTVFxcbm1tL0tjb25maWctMTMwNy1cXHRib29sIFxcXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzXFxcIlxcbm1tL0tjb25maWc6MTMwODpcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxubW0vS2NvbmZpZy0xMzA5LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTMyNj1jb21tZW50IFxcXCJHVVBfVEVTVCBuZWVkcyB0byBoYXZlIERFQlVHX0ZTIGVuYWJsZWRcXFwiXFxubW0vS2NvbmZpZzoxMzI3OlxcdGRlcGVuZHMgb24gIUdVUF9URVNUIFxcdTAwMjZcXHUwMDI2ICFERUJVR19GU1xcbm1tL0tjb25maWctMTMyOC1cXG4tLVxcbm1tL0tjb25maWc9MTMzMj1jb25maWcgRE1BUE9PTF9URVNUXFxubW0vS2NvbmZpZy0xMzMzLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgYSBtb2R1bGUgdG8gcnVuIHRpbWUgdGVzdHMgb24gZG1hX3Bvb2xcXFwiXFxubW0vS2NvbmZpZzoxMzM0OlxcdGRlcGVuZHMgb24gSEFTX0RNQVxcbm1tL0tjb25maWctMTMzNS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEzNTY9Y29uZmlnIFNFQ1JFVE1FTVxcbi0tXFxubW0vS2NvbmZpZy0xMzU4LVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1mZF9zZWNyZXQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxubW0vS2NvbmZpZzoxMzU5OlxcdGRlcGVuZHMgb24gQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVBcXG5tbS9LY29uZmlnLTEzNjAtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMzY1PWNvbmZpZyBBTk9OX1ZNQV9OQU1FXFxubW0vS2NvbmZpZy0xMzY2LVxcdGJvb2wgXFxcIkFub255bW91cyBWTUEgbmFtZSBzdXBwb3J0XFxcIlxcbm1tL0tjb25maWc6MTM2NzpcXHRkZXBlbmRzIG9uIFBST0NfRlMgXFx1MDAyNlxcdTAwMjYgQURWSVNFX1NZU0NBTExTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL0tjb25maWctMTM2OC1cXG4tLVxcbm1tL0tjb25maWc9MTM4OT1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxubW0vS2NvbmZpZy0xMzkwLVxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcbm1tL0tjb25maWc6MTM5MTpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctMTM5Mi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEzOTc9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzk5LVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWc6MTQwMDpcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxcbm1tL0tjb25maWctMTQwMS1cXG4tLVxcbm1tL0tjb25maWc9MTQwOT1jb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQxMC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbm1tL0tjb25maWc6MTQxMTpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctMTQxMi1cXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxubW0vS2NvbmZpZzoxNDEzOlxcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctMTQxNC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTE0MTg9Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxOS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG5tbS9LY29uZmlnOjE0MjA6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDIxLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQyND1jb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQyNS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxubW0vS2NvbmZpZzoxNDI2OlxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbm1tL0tjb25maWctMTQyNy1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTE0MzM9Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDM0LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE0MzU6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbm1tL0tjb25maWctMTQzNi0jIH1cXG4tLVxcbm1tL0tjb25maWc9MTQ0MT1jb25maWcgUEVSX1ZNQV9MT0NLXFxubW0vS2NvbmZpZy0xNDQyLVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE0NDM6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcXHUwMDI2XFx1MDAyNiBNTVUgXFx1MDAyNlxcdTAwMjYgU01QXFxubW0vS2NvbmZpZy0xNDQ0LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQ1MD1jb25maWcgTE9DS19NTV9BTkRfRklORF9WTUFcXG5tbS9LY29uZmlnLTE0NTEtXFx0Ym9vbFxcbm1tL0tjb25maWc6MTQ1MjpcXHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXFxubW0vS2NvbmZpZy0xNDUzLVxcbi0tXFxubW0vS2NvbmZpZz0xNDYzPWNvbmZpZyBOVU1BX0VNVVxcbm1tL0tjb25maWctMTQ2NC1cXHRib29sIFxcXCJOVU1BIGVtdWxhdGlvblxcXCJcXG5tbS9LY29uZmlnOjE0NjU6XFx0ZGVwZW5kcyBvbiBOVU1BX01FTUJMS1NcXG5tbS9LY29uZmlnOjE0NjY6XFx0ZGVwZW5kcyBvbiBYODYgfHwgR0VORVJJQ19BUkNIX05VTUFcXG5tbS9LY29uZmlnLTE0NjctXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xNDgxPWNvbmZpZyBQVF9SRUNMQUlNXFxubW0vS2NvbmZpZy0xNDgyLVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE0ODM6XFx0ZGVwZW5kcyBvbiBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIFxcdTAwMjZcXHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxcbm1tL0tjb25maWctMTQ4NC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTE1MDA9Y29uZmlnIExBWllfTU1VX01PREVfS1VOSVRfVEVTVFxcbm1tL0tjb25maWctMTUwMS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIHRoZSBsYXp5IE1NVSBtb2RlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubW0vS2NvbmZpZzoxNTAyOlxcdGRlcGVuZHMgb24gQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxcbm1tL0tjb25maWc6MTUwMzpcXHRkZXBlbmRzIG9uIEtVTklUXFxubW0vS2NvbmZpZy0xNTA0LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjMxOjUxLjQyMTYwODIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0NTMxMzkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWVtb3J5IE1hbmFnZW1lbnQgRGVlcCBEaXZlIC0gSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgWlNXQVAgaXMgb2ZmaWNpYWxseSBvbmxpbmUgYW5kIG9wZXJhdGlvbmFsLiBFeGNlbGxlbnQsIHdlJ3JlIG1ha2luZyBwcm9ncmVzcy4gTm93LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgTUVNQ0cgKE1lbW9yeSBDb250cm9sIEdyb3VwcykgbWV0cmljcyBhbmQgYmVoYXZpb3JzLiBXZSBoYXZlIFpTV0FQLCBidXQgKmhvdyogaXMgaXQgcGVyZm9ybWluZyBpbiB0aGUgY29udGV4dCBvZiBvdXIgZXhpc3RpbmcgbWVtb3J5IGhpZXJhcmNoeSBhbmQgd29ya2xvYWQgaXNvbGF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvcHRpbWFsIGZvciB0aGlzIGRlcGxveW1lbnQuIE15IGZvY3VzIHdpbGwgYmUgb24gdHJhY2tpbmcgdGhlIGtleSBNRU1DRyBwYXJhbWV0ZXJzLCBlc3BlY2lhbGx5IHN3YXAgdXNhZ2UsIHBhZ2UgZmF1bHQgcmF0ZXMsIGFuZCByZWNsYWltIHN0YXRpc3RpY3MgZm9yIGVhY2ggcmVsZXZhbnQgY2dyb3VwLiBJJ2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZXNlIHdpdGggcGVyZm9ybWFuY2UgZGF0YSBmcm9tIG90aGVyIG1vbml0b3JpbmcgdG9vbHMgdG8gYXNzZXNzIGFueSBwb3NzaWJsZSBib3R0bGVuZWNrcyBvciByZWdyZXNzaW9ucyBub3cgdGhhdCBaU1dBUCBpcyBhY3RpdmUuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIHByb2JhYmx5IGludm9sdmUgdmlzdWFsaXppbmcgdGhlIHJlbGV2YW50IG1ldHJpY3Mgb3ZlciB0aW1lLCBhbmQgcG9zc2libHkgYWRqdXN0aW5nIHRoZSBzZXR0aW5ncyBvZiB0aGUgY2dyb3VwcyB0byBzZWUgaWYgd2UgY2FuIGFjaGlldmUgYmV0dGVyIG92ZXJhbGwgcGVyZm9ybWFuY2UsIHdoaWNoIGlzIHdoYXQgSSBhbHdheXMgYWltIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozMTo1NS42NjY5MjU1NTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMTc4NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2Nz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDc2LVxcbmluaXQvS2NvbmZpZzoxMDc3OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc4LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODUtXFxuaW5pdC9LY29uZmlnOjEwODY6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4Ny1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5Mi1cXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5NC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5OS1cXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwMS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozMTo1NS43MjcxNDc0NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDY0NzI2MDA3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3k6IE1FTUNHIGFuZCBDR1JPVVBTKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBsb29raW5nIGF0IE1FTUNHLCBhbmQgaXQncyByaW5naW5nIGEgYmVsbC4gSSBrbm93IGl0J3MgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gQ0dST1VQUyDigJMgdGhleSdyZSBwcmFjdGljYWxseSBzeW1iaW90aWMgaW4gdGhlIExpbnV4IGtlcm5lbC4gU28sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciBpbnRvIE1FTUNHJ3MgYmVoYXZpb3Igb3IgdHJvdWJsZXNob290IGFueSBpc3N1ZXMsIEkgKmFic29sdXRlbHkqIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiBDR1JPVVBTLiBFdmVyeXRoaW5nIGRvd25zdHJlYW0gZnJvbSBoZXJlIGhpbmdlcyBvbiB0aGF0IGZvdW5kYXRpb25hbCBsYXllci4gVGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIENHUk9VUFMgc2l0dWF0aW9uLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGluaXRpYWwgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTE3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MzY6MDIuMTk5NzUwNzM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE0NzIzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDQ1PWNvbmZpZyBTTEFCX09CSl9FWFRcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDQ3LVxcbmluaXQvS2NvbmZpZzoxMDQ4Om1lbnVjb25maWcgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xMDQ5LVxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MzY6MDIuNjMxMjI3MjAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTcwMzA0OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBaU1dBUGAsIGBTV0FQYCwgYW5kIGBNRU1DR2Ag4oCTIHRob3NlIGFyZSB0aGUga2V5IGFyZWFzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBNeSBpbml0aWFsIHRhc2sgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBiZWVuIHRvdWNoZWQuIFRpbWUgdG8gbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VlIHdoYXQgZWxzZSBoYXMgYmVlbiBhZGRlZCBvciBtb2RpZmllZCBpbiB0aGUgcmVsZXZhbnQgbW9kdWxlcy5cblxuSSd2ZSBnb3QgdGhlIGFmZmVjdGVkIGZpbGVzOiBgbW0vZmlsZW1hcC5jYCwgYG1tL3BhZ2VfaW8uY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3Ztc2Nhbi5jYCwgYW5kIGBtbS96c3dhcC5jYC4gQWxyaWdodCwgc28gYG1tL3pzd2FwLmNgIGlzIGNsZWFybHkgY29uZGl0aW9uYWwgb24gYENPTkZJR19aU1dBUGAsIG1ha2luZyBzZW5zZS4gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGBtbS9wYWdlX2lvLmNgIGFyZSB0aWVkIHRvIGBDT05GSUdfU1dBUGAuIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9maWxlbWFwLmNgIGFyZSBhbHdheXMgY29tcGlsZWQuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgaGF2ZW4ndCBzcG90dGVkIHlldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3OTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MzY6NDkuMjAxNTM2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTI5NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc4PW9iai0kKENPTkZJR19TV0FQKVxcdCs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xcbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcXHQrPSB6c3dhcC5vXFxubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXFx0Kz0gZG1hcG9vbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM2OjQ5LjMwOTA3MTQwMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODk0NDA5Mjg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHN3YXBfc3RhdGUub2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgc3dhcF9zdGF0ZS5vYC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyBsaWtlbHkgcm9sZTsgdGhlIG5hbWUgc2NyZWFtcyBcImNvbnRleHQgc3dpdGNoaW5nXCIgb3IgYXQgbGVhc3Qgc29tZSBwYXJ0IG9mIHRoZSBwcm9jZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgKndoYXQqIGZ1bmN0aW9uYWxpdHkgaXQgcHJvdmlkZXMgd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJcyBpdCB0aGUgY29yZSBzdGF0ZSBtYW5hZ2VtZW50LCBvciBqdXN0IGEgc21hbGwgcGllY2UgdGhhdCBpbnRlcmZhY2VzIHdpdGggc29tZSBoYXJkd2FyZSByZWdpc3RlcnM/IElzIHRoaXMgcGFydCBvZiBhIG1vbm9saXRoaWMga2VybmVsIGltcGxlbWVudGF0aW9uIG9yIHNvbWV0aGluZyBtb3JlIG1vZHVsYXI/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHVzZXItc3BhY2Ugc3dhcHBpbmcsIGtlcm5lbC1sZXZlbCwgb3IgYm90aD9cblxuSSdsbCBzdGFydCBieSBkaXNhc3NlbWJsaW5nIGl0LiBJJ20gbG9va2luZyBmb3Iga2V5IGluc3RydWN0aW9ucyDigJMgYG1vdmAgdG8gc3BlY2lmaWMgcmVnaXN0ZXJzLCBsaWtlbHkgdGhvc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBQcm9ncmFtIFN0YXR1cyBXb3JkLCBzdGFjayBtYW5pcHVsYXRpb25zLCBwZXJoYXBzIHNvbWUgYHN5c2NhbGxgIGluc3RydWN0aW9ucyB0aGF0IHdvdWxkIHRpZSBpbnRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3Mgc3dhcCBwcmltaXRpdmVzLiBJJ2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGhpbnRzIG9mIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBob2xkIHByb2Nlc3Mgc3RhdGUuIEFyZSB0aGVyZSBwb2ludGVycyB0byB0YXNrIGNvbnRyb2wgYmxvY2tzLCBvciBwZXJoYXBzIGEgbW9yZSBlbGVnYW50IGRlc2NyaXB0b3Igc3RydWN0dXJlP1xuXG5J4oCZbGwgbG9vayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBvYmplY3QgZmlsZXMgb3IgbGlicmFyaWVzLiBUaGlzIGlzIGEgdmVyeSBjb21tb24gY2x1ZSBhcyB0byB3aGV0aGVyIG9yIG5vdCBpdCdzIGEgc3RhbmQtYWxvbmUgZnVuY3Rpb24sIG9yIGlmIGl0IGhhcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gd2FudCB0byBpZGVudGlmeSBob3cgaXQgZ2V0cyBjYWxsZWQuIElzIGl0IHBhcnQgb2YgYSBzY2hlZHVsZWQgaW50ZXJydXB0LCBhIHRyYXAsIG9yIGlzIGl0IHRyaWdnZXJlZCBkaXJlY3RseSBieSBzb21lIHNvZnR3YXJlIGV2ZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIGlzIGNyaXRpY2FsLiBUaGUgY2FsbGluZyBjb252ZW50aW9uIG9mIHRoZSBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBleHRyZW1lbHkgaW1wb3J0YW50IGhlcmUuXG5cbkkgYW50aWNpcGF0ZSBzZWVpbmcgYXNzZW1ibHkgcmVsYXRlZCB0byBzYXZpbmcgYW5kIHJlc3RvcmluZyByZWdpc3RlciBjb250ZXh0cywgbWFuYWdpbmcgdGhlIHBhZ2UgdGFibGVzLCBhbmQgcG9zc2libHkgZGVhbGluZyB3aXRoIGNhY2hlIGNvaGVyZW5jZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwsIHNvIEkgZXhwZWN0IHRoZSBjb2RlIHRvIGJlIG9wdGltaXplZCDigJMgaGFuZC1jb2RlZCBhc3NlbWJseSBpcyBhIHJlYWwgcG9zc2liaWxpdHkuIEnigJlsbCBrZWVwIGEgY2xvc2UgZXllIGZvciBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbiBpc3N1ZXMgb3IgYXJlYXMgb2YgY29uY2Vybiwgc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMgb3Igc3VidGxlIG1lbW9yeSBsZWFrcy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM0NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjA4LjI1MzE2NjgxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NjA4Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfc3RhdGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NzY9ZW5kaWZcXG5tbS9NYWtlZmlsZS03Ny1cXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozNzowOC43MTk3ODA1MTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzExMTYyODczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBTd2FwIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc3R1ZmYgYWdhaW4uIFJpZ2h0LCBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX1pTV0FQYCBhcmUgZGVmaW5pdGVseSBuZWNlc3NhcnksIEkga25vdyB0aGF0LiBCdXQgd2hlcmUgYXJlIHRoZSByZWxldmFudCBkZWZpbml0aW9ucz8gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlcGVuZGVuY3kgc2V0dGluZ3MgZm9yIHRoZXNlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gbG9vayBhdCB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgcmlnaHQ/IFRoYXQncyBpbiB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHNvcnQgdGhpcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODg3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6Mzc6MTUuODMxNDEyMDAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ1NTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozNzoxNS45MTI4NzM0MjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwNzM0NzY1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IOKAkyB0aGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9scy4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IHRvIGZpbmQgdGhlIGtleSBBUEkgZW50cnkgcG9pbnRzIGZvciB0aGlzIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIHdyaXRlYmFjayBzY2VuYXJpby5cblxuQWxyaWdodCwgaW5pdGlhbCBjYW5kaWRhdGVzOiBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgYW5kIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCBzZWVtIHByb21pc2luZywgdGhvc2UgbG9vayBsaWtlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIEkgYWxzbyBzZWUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGJ1dCB0aGF0J3Mgc3RhdGljLiBIbW0sIHRyaWNreS4gVGhlIGluc3RydWN0aW9ucyBkbyBtZW50aW9uIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucyBvdmVyIGludGVybmFscy4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLCBldmVuIHRob3VnaCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyBzdGF0aWMsIGl0J3MgKm5vdCogaW5saW5lZC4gSXQgbXVzdCBiZSBjYWxsZWQgZnJvbSBzb21ld2hlcmUgZWxzZSwgcG9zc2libHkgYXMgYSBjYWxsYmFjay4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIGFjdHVhbGx5IGludm9rZWQuIFRoYXQgd2lsbCBjbGFyaWZ5IGlmIGl0J3MgYSBzdWl0YWJsZSBjYW5kaWRhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjI3Ljk4NjM1MzcyMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5Mzk0NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05ODYtICovXFxubW0venN3YXAuYzo5ODc6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTk4OC1cXHRcXHRcXHRcXHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jPTExMDI9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTEyNS1cXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXFxubW0venN3YXAuYzoxMTI2OlxcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcXG5tbS96c3dhcC5jLTExMjctXFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnknc1xcbi0tXFxubW0venN3YXAuYy0xMTYwLVxcbm1tL3pzd2FwLmM6MTE2MTpcXHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XFxubW0venN3YXAuYy0xMTYyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozNzoyOC4wNDEyOTg5NDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNTY2NTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IFJlY2xhbWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2hyaW5rX21lbWNnX2NiYC4gUmlnaHQsIHRoaXMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCdzIHVzZWQgd2l0aCBgbGlzdF9scnVfc2hyaW5rX2NiYC4gTXkgYnJhaW4gaW1tZWRpYXRlbHkgbWFrZXMgdGhlIGNvbm5lY3Rpb246IFRoaXMgaXMgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlY2xhaW0gcHJvY2VzcyB3aXRoaW4gYSBjZ3JvdXAgY29udGV4dC4gQW5kIEkgc2VlIHRoYXQgYHNocmlua19tZW1jZ19jYmAgY2FsbHMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoYXQgc3VnZ2VzdHMgdGhpcyBjYWxsYmFjayBpcyBpbnZvbHZlZCBpbiB3cml0aW5nIG1lbW9yeSBwYWdlcyB0byB6c3dhcCB3aGVuIGEgbWVtY2cgaXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCB3aGljaCBtZWFucyBpdCBpcyBhdHRlbXB0aW5nIHRvIGZyZWUgdXAgbWVtb3J5LlxuXG5TaW5jZSB0aGUgcGFnZXMgd2lsbCBoYXZlIHRvIGdvIHNvbWV3aGVyZSwgbGV0IG1lIGNoZWNrIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgZGV0YWlscyBhcmUgcmVnYXJkaW5nIHRoZSBhY3R1YWwgYWN0aW9uIG9mIHRoZSB3cml0ZWJhY2sgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBwYWdlIHN0cnVjdHVyZSwgYW5kIHRoZXJlZm9yZSBpdCBpcyB0aGUgY3J1Y2lhbCBwYXJ0IHRoYXQgZW5zdXJlcyB0aGUgbWVtb3J5IGlzIGFjdHVhbGx5IHdyaXR0ZW4gYmFjaywgcG90ZW50aWFsbHkgdG8gdGhlIHN3YXAgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjMyLjc2Njk2NzY5OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3MjkyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fZW5kX3dyaXRlYmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9maWxlbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZmlsZW1hcC5jPTE2NDU9RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpO1xcbi0tXFxubW0vZmlsZW1hcC5jLTE2NDctLyoqXFxubW0vZmlsZW1hcC5jOjE2NDg6ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXFxubW0vZmlsZW1hcC5jLTE2NDktICogQGZvbGlvOiBUaGUgZm9saW8uXFxuLS1cXG5tbS9maWxlbWFwLmMtMTY1NS0gKi9cXG5tbS9maWxlbWFwLmM6MTY1Njp2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZpbGVtYXAuYy0xNjU3LXtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjcxLVxcbm1tL2ZpbGVtYXAuYzoxNjcyOlxcdGlmIChfX2ZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0xNjczLVxcdFxcdGZvbGlvX3dha2VfYml0KGZvbGlvLCBQR193cml0ZWJhY2spO1xcbi0tXFxubW0vZmlsZW1hcC5jLTE2NzYtfVxcbm1tL2ZpbGVtYXAuYzoxNjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7XFxubW0vZmlsZW1hcC5jLTE2NzgtXFxubW0vZmlsZW1hcC5jLTE2NzktLyoqXFxubW0vZmlsZW1hcC5jOjE2ODA6ICogZm9saW9fZW5kX3dyaXRlYmFjayAtIEVuZCB3cml0ZWJhY2sgYWdhaW5zdCBhIGZvbGlvLlxcbm1tL2ZpbGVtYXAuYy0xNjgxLSAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbi0tXFxubW0vZmlsZW1hcC5jLTE2ODYtICovXFxubW0vZmlsZW1hcC5jOjE2ODc6dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTE2ODgte1xcbi0tXFxubW0vZmlsZW1hcC5jLTE3MDEtXFx0LypcXG5tbS9maWxlbWFwLmM6MTcwMjpcXHQgKiBTYW1wbGUgdGhpcyBiZWZvcmUgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKCkgY2xlYXJzXFxubW0vZmlsZW1hcC5jLTE3MDMtXFx0ICogUEdfd3JpdGViYWNrOiB1bnRpbCB0aGVuIGEgcmFjaW5nIHN3YXBpbiBjYW5ub3QgcmVtb3ZlIHRoZSBmb2xpbyBmcm9tXFxuLS1cXG5tbS9maWxlbWFwLmMtMTcxMC1cXG5tbS9maWxlbWFwLmM6MTcxMTpcXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0xNzEyLVxcbi0tXFxubW0vZmlsZW1hcC5jLTE3MjAtfVxcbm1tL2ZpbGVtYXAuYzoxNzIxOkVYUE9SVF9TWU1CT0woZm9saW9fZW5kX3dyaXRlYmFjayk7XFxubW0vZmlsZW1hcC5jLTE3MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjMyLjgyODcwMTQwNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzYwNDc0MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBJJ20gemVyb2luZyBpbiBvbiBhIGZldyBwcm9taXNpbmcgY2FuZGlkYXRlcyBmb3IgdHJhY2tpbmcsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBGaXJzdCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgIGZlZWxzIGxpa2UgYSBzb2xpZCBjaG9pY2Ug4oCTIGl0J3MgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgd3JpdGViYWNrIHByb2Nlc3MsIGEgZ29vZCBwbGFjZSB0byBiZWdpbi4gVGhlbiwgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGxvb2tzIGVxdWFsbHkgcmVsZXZhbnQsIHNwZWNpZmljYWxseSB0aWVkIHRvIHN3YXAgSS9PIGFuZCBmb2xpbyBvcGVyYXRpb25zLCB3aGljaCBjb3VsZCBiZSB2ZXJ5IHRlbGxpbmcuIEFuZCwgbGV0J3MgYWRkIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCB0byB0aGUgbGlzdDsgaGFuZGxpbmcgcGFnZSByZWNsYW1hdGlvbiBpcyBhbHdheXMgYSBjb21wbGV4IGFyZWEgdGhhdCBtZXJpdHMgY2xvc2UgaW5zcGVjdGlvbi5cblxuTm93LCByZWdhcmRpbmcgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIEknbSBhIGJpdCBjdXJpb3VzLiBJdCdzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGNhbGxhYmxlIGZyb20gb3V0c2lkZSBpdHMgY29tcGlsYXRpb24gdW5pdC4gQnV0LCB3aGV0aGVyIGl0J3MgYWN0dWFsbHkgKmV4cG9ydGVkKiBpcyB0aGUga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgc3ltYm9scyB0YWJsZSB0byB2ZXJpZnkgaWYgaXQncyB2aXNpYmxlLCBhcyB0aGlzIHdpbGwgaW5mbHVlbmNlIGl0cyB1dGlsaXR5IGluIG91ciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozNzozOS4xODkyMDMzMjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDMwMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcF9zdGF0ZS5jPTQwMz1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy00ODktLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjQ5MDogKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy00OTEtICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MDktICovXFxubW0vc3dhcF9zdGF0ZS5jOjUxMDpzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxubW0vc3dhcF9zdGF0ZS5jLTUxMS1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY3OT1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy02ODgtXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbm1tL3N3YXBfc3RhdGUuYzo2ODk6XFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy02OTAtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NzIxPXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNzI5LVxcdFxcdFxcdHJldHVybiBmb2xpbztcXG5tbS9zd2FwX3N0YXRlLmM6NzMwOlxcdFxcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy03MzEtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjM5LjI2MzI0NzczOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjIxNjUyODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIGEgS2V5IFN5bWJvbCBmb3IgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgaXQncyAqbm90KiBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIGludGVyZXN0aW5nIGludGVybmFsbHkgd2l0aGluIHRoZSBrZXJuZWwuIEl04oCZcyBub24tc3RhdGljLCBob3dldmVyLCBtZWFuaW5nIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSB3aXRoaW4gYSBsYXJnZXIgY29tcGlsYXRpb24gdW5pdC4gVGhlIGZhY3QgdGhhdCBpdCdzIHVzZWQgd2l0aGluIGBtbS96c3dhcC5jYCBuYXJyb3dzIG15IGZvY3VzIGNvbnNpZGVyYWJseS4gWnN3YXAgaXMgbWVtb3J5IGNvbXByZXNzaW9uLCBzbyB0aGlzIGxpa2VseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGludGVyYWN0aW9uIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb21wcmVzc2VkIHN3YXAuIFRoaXMgbWFrZXMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgYSBwcmltZSBjYW5kaWRhdGUgdG8gZGlzc2VjdCBhbmQgdW5kZXJzdGFuZCBmdXJ0aGVyLiBJJ20gdGhpbmtpbmcsIFwiSXMgdGhpcyB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbiBmb3Igc3dhcGNhY2hlIGZvbGlvcz9cIiBHaXZlbiB0aGF0IGNvbnRleHQsIEknbGwgZ28gYWhlYWQgYW5kIGNoZWNrIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCBuZXh0LiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIG5leHQgc3RlcCBnaXZlbiB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozNzo0Ny40ODQ5MDQwM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5MzEzMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVtb3ZlX21hcHBpbmdfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MTE9bG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNi0vKipcXG5tbS92bXNjYW4uYzo4MTc6ICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIC0gUmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZywgYXMgcmVjbGFpbSBkb2VzLlxcbm1tL3Ztc2Nhbi5jLTgxOC0gKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXFxuLS1cXG5tbS92bXNjYW4uYy04MzAtICovXFxubW0vdm1zY2FuLmM6ODMxOmxvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS92bXNjYW4uYy04MzItXFx0XFx0XFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjQ3LjU0NTg0MDUxNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY5MjAwMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgTWVtb3J5IFJlY2xhbWF0aW9uIGluIHRoZSBCbG9jayBMYXllcioqXG5cbk9rYXksIHNvIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCBpc24ndCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB2aXNpYmxlIGFuZCBwb3RlbnRpYWxseSB1c2VkIG91dHNpZGUgb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBUaGF0J3MgZ29vZCB0byBrbm93IGZvciBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiByZWNsYWltaW5nIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBibG9jayBkZXZpY2UuXG5cblNpbmNlIHRoaXMgaXMgcmVsYXRlZCB0byByZW1vdmluZyBhbmQgcmVjbGFpbWluZywgbXkgbmV4dCBvYnZpb3VzIHN0ZXAgaXMgdG8gZGlnIGludG8gYHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmNgLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYXN5bmNocm9ub3VzIHdyaXRlcyB0byBibG9jayBkZXZpY2VzIGR1cmluZyBzd2FwIG9wZXJhdGlvbnMuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGZyZWVpbmcgdXAgcGFnZXMsIGFuZCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgY291bGQgdmVyeSB3ZWxsIGJlIHBhcnQgb2YgdGhhdCBjeWNsZS4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgdHdvIGludGVyYWN0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlY2xhaW1pbmcgcHJvY2VzcyB3aGVuIHdyaXRpbmcgYmFjayBzd2FwIHBhZ2VzLiBJJ20gbG9va2luZyBmb3IgdGhlIGNhbGwgY2hhaW4gYW5kIGhvdyB0aGUgcmVjbGFpbSBvcGVyYXRpb24gaXMgaW5pdGlhdGVkLiBLbm93aW5nIHRoZSBjb250ZXh0IHdpbGwgaGVscCBtZSB3aXRoIGFueSBwb3RlbnRpYWwgYnVnLWh1bnRpbmcgb3Igb3B0aW1pemF0aW9uIGVmZm9ydHMgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTEyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjUxLjgxNTA0MzQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU4ODcxMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF93cml0ZXBhZ2VfYmRldl9hc3luY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2lvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9pby5jPTQyOT1zdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X3N5bmMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3BhZ2VfaW8uYy00NDgtXFxubW0vcGFnZV9pby5jOjQ0OTpzdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vcGFnZV9pby5jLTQ1MC1cXHRcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzKVxcbi0tXFxubW0vcGFnZV9pby5jPTQ3Mz12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnN3YXBfcGx1ZylcXG4tLVxcbm1tL3BhZ2VfaW8uYy00OTItXFx0ZWxzZVxcbm1tL3BhZ2VfaW8uYzo0OTM6XFx0XFx0c3dhcF93cml0ZXBhZ2VfYmRldl9hc3luYyhmb2xpbywgc2lzKTtcXG5tbS9wYWdlX2lvLmMtNDk0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6Mzc6NTEuOTIwOTM3ODcyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NzcwNjg2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU3dhcCBXcml0ZWJhY2sgYW5kIFpTV0FQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgc3dhcF93cml0ZXBhZ2VfYmRldl9hc3luY2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biBteSBmb2N1cy4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgcmVsYXRlZCBzeW1ib2xzLiBNeSBhdHRlbnRpb24gZ29lcyB0bzogYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaW4gcmVsYXRpb24gdG8gdGhlIHN3YXAgd3JpdGViYWNrIHByb2Nlc3MuXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZm9jdXNpbmcgb24gYFpTV0FQYCwgYFNXQVBgLCBhbmQgYE1FTUNHYC4gSSBuZWVkIHRvIHZlcmlmeSBhIHBvaW50IGhlcmUuIEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBhbGxvY2F0b3IgdGhhdCBgWlNXQVBgIHVzZXMuIERvZXMgaXQgKnJlcXVpcmUqIGBaU01BTExPQ2AsIG9yIGEgc2ltaWxhciBhbGxvY2F0b3I/XG5cbkNoZWNraW5nIGBtbS9LY29uZmlnYCwgSSBjYW4gc2VlOlxuYGNvbmZpZyBaU1dBUGBcbmBkZXBlbmRzIG9uIFNXQVBgXG5gc2VsZWN0IENSWVBUT2BcbmBzZWxlY3QgWlBPT0xgXG5cbkFoLCBpdCBkZXBlbmRzIG9uIGBTV0FQYCwgYW5kIHNlbGVjdHMgYENSWVBUT2AgYW5kIGBaUE9PTGAuIFNvIGl0IGRvZXNuJ3Qgc3RyaWN0bHkgKnJlcXVpcmUqIGBaU01BTExPQ2AsIGJ1dCBgWlNNQUxMT0NgIChvciBzaW1pbGFyKSBpcyBhIGNvbW1vbmx5IHVzZWQgYWxsb2NhdG9yIGZvciBpdC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2UgYSByZWNvbW1lbmRhdGlvbiBhYm91dCBlbmFibGluZyBgWlNXQVBfREVGQVVMVF9PTmAuIEdpdmVuIHRoZSBjdXJyZW50IGNvbnRleHQsIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMsIGVuYWJsaW5nIGBaU1dBUF9ERUZBVUxUX09OYCB3b3VsZCBiZSBhIGdvb2QgZGVmYXVsdC4gSXQgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBjaG9pY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjI3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjU5LjQ5ODAwOTMwMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMzA4MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0yMj1jb25maWcgWlNXQVBcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjU5LjYwODMyMjQ0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTAyNjgzMTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQWgsIHllcywgY29uZmlybWVkLCBpdCdzIHNldC4gR29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC5cblxuTm93LCBzaGlmdGluZyBnZWFycywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX0NHUk9VUFNgLiBJcyBgTUVNQ0dgIHN1ZmZpY2llbnQgb24gaXRzIG93biwgb3IgZG9lcyBpdCBkZXBlbmQgb24gYENHUk9VUFNgPyBObywgd2FpdC4uLiBsZXQncyBub3QgYXNzdW1lLiBJIHNob3VsZCBjaGVjayB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiBgTUVNQ0dgIHRvIGJlIHN1cmUuIEl0J3MgYmVzdCB0byBiZSBwcmVjaXNlIGhlcmU7IEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozOToyMC42MzUxNTYyNDJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNzc1MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1ODUgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmluaXQvS2NvbmZpZz02Mz1jb25maWcgUlVTVENfVkVSU0lPTlxcbi0tXFxuaW5pdC9LY29uZmlnLTY3LVxcdCAgSXQgZG9lcyBub3QgZGVwZW5kIG9uIGBSVVNUYCBzaW5jZSB0aGF0IG9uZSBtYXkgbmVlZCB0byB1c2UgdGhlIHZlcnNpb25cXG5pbml0L0tjb25maWc6Njg6XFx0ICBpbiBhIGBkZXBlbmRzIG9uYC5cXG5pbml0L0tjb25maWctNjktXFxuLS1cXG5pbml0L0tjb25maWc9MTExPWNvbmZpZyBHQ0NfQVNNX0dPVE9fT1VUUFVUX0JST0tFTlxcbmluaXQvS2NvbmZpZy0xMTItXFx0Ym9vbFxcbmluaXQvS2NvbmZpZzoxMTM6XFx0ZGVwZW5kcyBvbiBDQ19JU19HQ0NcXG5pbml0L0tjb25maWctMTE0LVxcdGRlZmF1bHQgeSBpZiBHQ0NfVkVSU0lPTiBcXHUwMDNjIDExMDUwMFxcbi0tXFxuaW5pdC9LY29uZmlnPTExOD1jb25maWcgQ0NfSEFTX0FTTV9HT1RPX09VVFBVVFxcbmluaXQvS2NvbmZpZy0xMTktXFx0ZGVmX2Jvb2wgeVxcbmluaXQvS2NvbmZpZzoxMjA6XFx0ZGVwZW5kcyBvbiAhR0NDX0FTTV9HT1RPX09VVFBVVF9CUk9LRU5cXG5pbml0L0tjb25maWc6MTIxOlxcdGRlcGVuZHMgb24gJChzdWNjZXNzLGVjaG8gJ2ludCBmb28oaW50IHgpIHsgYXNtIGdvdG8gKFxcXCJcXFwiOiBcXFwiPXJcXFwiKHgpIDo6OiBiYXIpOyByZXR1cm4geDsgYmFyOiByZXR1cm4gMDsgfScgfCAkKENDKSAteCBjIC0gLWMgLW8gL2Rldi9udWxsKVxcbmluaXQvS2NvbmZpZy0xMjItXFxuaW5pdC9LY29uZmlnPTEyMz1jb25maWcgQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXFxuaW5pdC9LY29uZmlnOjEyNDpcXHRkZXBlbmRzIG9uIENDX0hBU19BU01fR09UT19PVVRQVVRcXG5pbml0L0tjb25maWctMTI1LVxcdCMgRGV0ZWN0IGJ1Z2d5IGdjYyBhbmQgY2xhbmcsIGZpeGVkIGluIGdjYy0xMSBjbGFuZy0xNC5cXG4tLVxcbmluaXQvS2NvbmZpZz0yMjg9Y29uZmlnIEJST0tFTl9PTl9TTVBcXG5pbml0L0tjb25maWctMjI5LVxcdGJvb2xcXG5pbml0L0tjb25maWc6MjMwOlxcdGRlcGVuZHMgb24gQlJPS0VOIHx8ICFTTVBcXG5pbml0L0tjb25maWctMjMxLVxcdGRlZmF1bHQgeVxcbi0tXFxuaW5pdC9LY29uZmlnPTI0MT1jb25maWcgQ09NUElMRV9URVNUXFxuaW5pdC9LY29uZmlnLTI0Mi1cXHRib29sIFxcXCJDb21waWxlIGFsc28gZHJpdmVycyB3aGljaCB3aWxsIG5vdCBsb2FkXFxcIlxcbmluaXQvS2NvbmZpZzoyNDM6XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG5pbml0L0tjb25maWctMjQ0LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0yNzI9Y29uZmlnIFVBUElfSEVBREVSX1RFU1RcXG5pbml0L0tjb25maWctMjczLVxcdGJvb2wgXFxcIkNvbXBpbGUgdGVzdCBVQVBJIGhlYWRlcnNcXFwiXFxuaW5pdC9LY29uZmlnOjI3NDpcXHRkZXBlbmRzIG9uIEhFQURFUlNfSU5TVEFMTFxcbmluaXQvS2NvbmZpZy0yNzUtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTI5Mj1jb25maWcgTE9DQUxWRVJTSU9OX0FVVE9cXG4tLVxcbmluaXQvS2NvbmZpZy0yOTQtXFx0ZGVmYXVsdCB5XFxuaW5pdC9LY29uZmlnOjI5NTpcXHRkZXBlbmRzIG9uICFDT01QSUxFX1RFU1RcXG5pbml0L0tjb25maWctMjk2LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0zNDY9Y2hvaWNlXFxuLS1cXG5pbml0L0tjb25maWctMzQ4LVxcdGRlZmF1bHQgS0VSTkVMX0daSVBcXG5pbml0L0tjb25maWc6MzQ5OlxcdGRlcGVuZHMgb24gSEFWRV9LRVJORUxfR1pJUCB8fCBIQVZFX0tFUk5FTF9CWklQMiB8fCBIQVZFX0tFUk5FTF9MWk1BIHx8IEhBVkVfS0VSTkVMX1haIHx8IEhBVkVfS0VSTkVMX0xaTyB8fCBIQVZFX0tFUk5FTF9MWjQgfHwgSEFWRV9LRVJORUxfWlNURCB8fCBIQVZFX0tFUk5FTF9VTkNPTVBSRVNTRURcXG5pbml0L0tjb25maWctMzUwLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0zNjg9Y29uZmlnIEtFUk5FTF9HWklQXFxuaW5pdC9LY29uZmlnLTM2OS1cXHRib29sIFxcXCJHemlwXFxcIlxcbmluaXQvS2NvbmZpZzozNzA6XFx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9HWklQXFxuaW5pdC9LY29uZmlnLTM3MS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9Mzc1PWNvbmZpZyBLRVJORUxfQlpJUDJcXG5pbml0L0tjb25maWctMzc2LVxcdGJvb2wgXFxcIkJ6aXAyXFxcIlxcbmluaXQvS2NvbmZpZzozNzc6XFx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9CWklQMlxcbmluaXQvS2NvbmZpZy0zNzgtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTM4NT1jb25maWcgS0VSTkVMX0xaTUFcXG5pbml0L0tjb25maWctMzg2LVxcdGJvb2wgXFxcIkxaTUFcXFwiXFxuaW5pdC9LY29uZmlnOjM4NzpcXHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0xaTUFcXG5pbml0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0zOTM9Y29uZmlnIEtFUk5FTF9YWlxcbmluaXQvS2NvbmZpZy0zOTQtXFx0Ym9vbCBcXFwiWFpcXFwiXFxuaW5pdC9LY29uZmlnOjM5NTpcXHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX1haXFxuaW5pdC9LY29uZmlnLTM5Ni1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NDA5PWNvbmZpZyBLRVJORUxfTFpPXFxuaW5pdC9LY29uZmlnLTQxMC1cXHRib29sIFxcXCJMWk9cXFwiXFxuaW5pdC9LY29uZmlnOjQxMTpcXHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0xaT1xcbmluaXQvS2NvbmZpZy00MTItXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTQxNz1jb25maWcgS0VSTkVMX0xaNFxcbmluaXQvS2NvbmZpZy00MTgtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbmluaXQvS2NvbmZpZzo0MTk6XFx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9MWjRcXG5pbml0L0tjb25maWctNDIwLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz00Mjk9Y29uZmlnIEtFUk5FTF9aU1REXFxuaW5pdC9LY29uZmlnLTQzMC1cXHRib29sIFxcXCJaU1REXFxcIlxcbmluaXQvS2NvbmZpZzo0MzE6XFx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9aU1REXFxuaW5pdC9LY29uZmlnLTQzMi1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NDM5PWNvbmZpZyBLRVJORUxfVU5DT01QUkVTU0VEXFxuaW5pdC9LY29uZmlnLTQ0MC1cXHRib29sIFxcXCJOb25lXFxcIlxcbmluaXQvS2NvbmZpZzo0NDE6XFx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9VTkNPTVBSRVNTRURcXG5pbml0L0tjb25maWctNDQyLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz00ODU9Y29uZmlnIFNZU1ZJUENfU1lTQ1RMXFxuaW5pdC9LY29uZmlnLTQ4Ni1cXHRib29sXFxuaW5pdC9LY29uZmlnOjQ4NzpcXHRkZXBlbmRzIG9uIFNZU1ZJUENcXG5pbml0L0tjb25maWc6NDg4OlxcdGRlcGVuZHMgb24gU1lTQ1RMXFxuaW5pdC9LY29uZmlnLTQ4OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz00OTE9Y29uZmlnIFNZU1ZJUENfQ09NUEFUXFxuaW5pdC9LY29uZmlnLTQ5Mi1cXHRkZWZfYm9vbCB5XFxuaW5pdC9LY29uZmlnOjQ5MzpcXHRkZXBlbmRzIG9uIENPTVBBVCBcXHUwMDI2XFx1MDAyNiBTWVNWSVBDXFxuaW5pdC9LY29uZmlnLTQ5NC1cXG5pbml0L0tjb25maWc9NDk1PWNvbmZpZyBQT1NJWF9NUVVFVUVcXG5pbml0L0tjb25maWctNDk2LVxcdGJvb2wgXFxcIlBPU0lYIE1lc3NhZ2UgUXVldWVzXFxcIlxcbmluaXQvS2NvbmZpZzo0OTc6XFx0ZGVwZW5kcyBvbiBORVRcXG5pbml0L0tjb25maWctNDk4LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz01MTE9Y29uZmlnIFBPU0lYX01RVUVVRV9TWVNDVExcXG5pbml0L0tjb25maWctNTEyLVxcdGJvb2xcXG5pbml0L0tjb25maWc6NTEzOlxcdGRlcGVuZHMgb24gUE9TSVhfTVFVRVVFXFxuaW5pdC9LY29uZmlnOjUxNDpcXHRkZXBlbmRzIG9uIFNZU0NUTFxcbmluaXQvS2NvbmZpZy01MTUtXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9NTI5PWNvbmZpZyBDUk9TU19NRU1PUllfQVRUQUNIXFxuaW5pdC9LY29uZmlnLTUzMC1cXHRib29sIFxcXCJFbmFibGUgcHJvY2Vzc192bV9yZWFkdi93cml0ZXYgc3lzY2FsbHNcXFwiXFxuaW5pdC9LY29uZmlnOjUzMTpcXHRkZXBlbmRzIG9uIE1NVVxcbmluaXQvS2NvbmZpZy01MzItXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9NTM5PWNvbmZpZyBBVURJVFxcbmluaXQvS2NvbmZpZy01NDAtXFx0Ym9vbCBcXFwiQXVkaXRpbmcgc3VwcG9ydFxcXCJcXG5pbml0L0tjb25maWc6NTQxOlxcdGRlcGVuZHMgb24gTkVUXFxuaW5pdC9LY29uZmlnLTU0Mi1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NTUxPWNvbmZpZyBBVURJVFNZU0NBTExcXG5pbml0L0tjb25maWctNTUyLVxcdGRlZl9ib29sIHlcXG5pbml0L0tjb25maWc6NTUzOlxcdGRlcGVuZHMgb24gQVVESVQgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxcbmluaXQvS2NvbmZpZy01NTQtXFx0c2VsZWN0IEZTTk9USUZZXFxuLS1cXG5pbml0L0tjb25maWc9NTcyPWNvbmZpZyBUSUNLX0NQVV9BQ0NPVU5USU5HXFxuaW5pdC9LY29uZmlnLTU3My1cXHRib29sIFxcXCJTaW1wbGUgdGljayBiYXNlZCBjcHV0aW1lIGFjY291bnRpbmdcXFwiXFxuaW5pdC9LY29uZmlnOjU3NDpcXHRkZXBlbmRzIG9uICFTMzkwIFxcdTAwMjZcXHUwMDI2ICFOT19IWl9GVUxMXFxuaW5pdC9LY29uZmlnLTU3NS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NTgyPWNvbmZpZyBWSVJUX0NQVV9BQ0NPVU5USU5HX05BVElWRVxcbmluaXQvS2NvbmZpZy01ODMtXFx0Ym9vbCBcXFwiRGV0ZXJtaW5pc3RpYyB0YXNrIGFuZCBDUFUgdGltZSBhY2NvdW50aW5nXFxcIlxcbmluaXQvS2NvbmZpZzo1ODQ6XFx0ZGVwZW5kcyBvbiBIQVZFX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgXFx1MDAyNlxcdTAwMjYgIU5PX0haX0ZVTExcXG5pbml0L0tjb25maWctNTg1LVxcdHNlbGVjdCBWSVJUX0NQVV9BQ0NPVU5USU5HXFxuLS1cXG5pbml0L0tjb25maWc9NTk1PWNvbmZpZyBWSVJUX0NQVV9BQ0NPVU5USU5HX0dFTlxcbmluaXQvS2NvbmZpZy01OTYtXFx0Ym9vbCBcXFwiRnVsbCBkeW50aWNrcyBDUFUgdGltZSBhY2NvdW50aW5nXFxcIlxcbmluaXQvS2NvbmZpZzo1OTc6XFx0ZGVwZW5kcyBvbiBIQVZFX0NPTlRFWFRfVFJBQ0tJTkdfVVNFUlxcbmluaXQvS2NvbmZpZzo1OTg6XFx0ZGVwZW5kcyBvbiBIQVZFX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOXFxuaW5pdC9LY29uZmlnOjU5OTpcXHRkZXBlbmRzIG9uIEdFTkVSSUNfQ0xPQ0tFVkVOVFNcXG5pbml0L0tjb25maWctNjAwLVxcdHNlbGVjdCBWSVJUX0NQVV9BQ0NPVU5USU5HXFxuLS1cXG5pbml0L0tjb25maWc9NjE2PWNvbmZpZyBJUlFfVElNRV9BQ0NPVU5USU5HXFxuaW5pdC9LY29uZmlnLTYxNy1cXHRib29sIFxcXCJGaW5lIGdyYW51bGFyaXR5IHRhc2sgbGV2ZWwgSVJRIHRpbWUgYWNjb3VudGluZ1xcXCJcXG5pbml0L0tjb25maWc6NjE4OlxcdGRlcGVuZHMgb24gSEFWRV9JUlFfVElNRV9BQ0NPVU5USU5HIFxcdTAwMjZcXHUwMDI2ICFWSVJUX0NQVV9BQ0NPVU5USU5HX05BVElWRVxcbmluaXQvS2NvbmZpZy02MTktXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTYyNz1jb25maWcgSEFWRV9TQ0hFRF9BVkdfSVJRXFxuaW5pdC9LY29uZmlnLTYyOC1cXHRkZWZfYm9vbCB5XFxuaW5pdC9LY29uZmlnOjYyOTpcXHRkZXBlbmRzIG9uIElSUV9USU1FX0FDQ09VTlRJTkcgfHwgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXFxuaW5pdC9LY29uZmlnOjYzMDpcXHRkZXBlbmRzIG9uIFNNUFxcbmluaXQvS2NvbmZpZy02MzEtXFxuaW5pdC9LY29uZmlnPTYzMj1jb25maWcgU0NIRURfSFdfUFJFU1NVUkVcXG4tLVxcbmluaXQvS2NvbmZpZy02MzUtXFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuaW5pdC9LY29uZmlnOjYzNjpcXHRkZXBlbmRzIG9uIFNNUFxcbmluaXQvS2NvbmZpZzo2Mzc6XFx0ZGVwZW5kcyBvbiBDUFVfRlJFUV9USEVSTUFMXFxuaW5pdC9LY29uZmlnLTYzOC1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NjUxPWNvbmZpZyBCU0RfUFJPQ0VTU19BQ0NUXFxuaW5pdC9LY29uZmlnLTY1Mi1cXHRib29sIFxcXCJCU0QgUHJvY2VzcyBBY2NvdW50aW5nIChERVBSRUNBVEVEKVxcXCJcXG5pbml0L0tjb25maWc6NjUzOlxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuaW5pdC9LY29uZmlnLTY1NC1cXHRkZWZhdWx0IG5cXG4tLVxcbmluaXQvS2NvbmZpZz02Njg9Y29uZmlnIEJTRF9QUk9DRVNTX0FDQ1RfVjNcXG5pbml0L0tjb25maWctNjY5LVxcdGJvb2wgXFxcIkJTRCBQcm9jZXNzIEFjY291bnRpbmcgdmVyc2lvbiAzIGZpbGUgZm9ybWF0XFxcIlxcbmluaXQvS2NvbmZpZzo2NzA6XFx0ZGVwZW5kcyBvbiBCU0RfUFJPQ0VTU19BQ0NUXFxuaW5pdC9LY29uZmlnLTY3MS1cXHRkZWZhdWx0IG5cXG4tLVxcbmluaXQvS2NvbmZpZz02ODA9Y29uZmlnIFRBU0tTVEFUU1xcbmluaXQvS2NvbmZpZy02ODEtXFx0Ym9vbCBcXFwiRXhwb3J0IHRhc2svcHJvY2VzcyBzdGF0aXN0aWNzIHRocm91Z2ggbmV0bGlua1xcXCJcXG5pbml0L0tjb25maWc6NjgyOlxcdGRlcGVuZHMgb24gTkVUXFxuaW5pdC9LY29uZmlnOjY4MzpcXHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxcbmluaXQvS2NvbmZpZy02ODQtXFx0ZGVmYXVsdCBuXFxuLS1cXG5pbml0L0tjb25maWc9Njk0PWNvbmZpZyBUQVNLX0RFTEFZX0FDQ1RcXG5pbml0L0tjb25maWctNjk1LVxcdGJvb2wgXFxcIkVuYWJsZSBwZXItdGFzayBkZWxheSBhY2NvdW50aW5nXFxcIlxcbmluaXQvS2NvbmZpZzo2OTY6XFx0ZGVwZW5kcyBvbiBUQVNLU1RBVFNcXG5pbml0L0tjb25maWctNjk3LVxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuLS1cXG5pbml0L0tjb25maWc9NzA2PWNvbmZpZyBUQVNLX1hBQ0NUXFxuaW5pdC9LY29uZmlnLTcwNy1cXHRib29sIFxcXCJFbmFibGUgZXh0ZW5kZWQgYWNjb3VudGluZyBvdmVyIHRhc2tzdGF0c1xcXCJcXG5pbml0L0tjb25maWc6NzA4OlxcdGRlcGVuZHMgb24gVEFTS1NUQVRTXFxuaW5pdC9LY29uZmlnLTcwOS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NzE1PWNvbmZpZyBUQVNLX0lPX0FDQ09VTlRJTkdcXG5pbml0L0tjb25maWctNzE2LVxcdGJvb2wgXFxcIkVuYWJsZSBwZXItdGFzayBzdG9yYWdlIEkvTyBhY2NvdW50aW5nXFxcIlxcbmluaXQvS2NvbmZpZzo3MTc6XFx0ZGVwZW5kcyBvbiBUQVNLX1hBQ0NUXFxuaW5pdC9LY29uZmlnLTcxOC1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NzQ0PWNvbmZpZyBQU0lfREVGQVVMVF9ESVNBQkxFRFxcbi0tXFxuaW5pdC9LY29uZmlnLTc0Ni1cXHRkZWZhdWx0IG5cXG5pbml0L0tjb25maWc6NzQ3OlxcdGRlcGVuZHMgb24gUFNJXFxuaW5pdC9LY29uZmlnLTc0OC1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NzY2PWNvbmZpZyBDUFVfSVNPTEFUSU9OXFxuaW5pdC9LY29uZmlnLTc2Ny1cXHRib29sIFxcXCJDUFUgaXNvbGF0aW9uXFxcIlxcbmluaXQvS2NvbmZpZzo3Njg6XFx0ZGVwZW5kcyBvbiBTTVBcXG5pbml0L0tjb25maWctNzY5LVxcdGRlZmF1bHQgeVxcbi0tXFxuaW5pdC9LY29uZmlnPTc5Mj1jb25maWcgSUtDT05GSUdfUFJPQ1xcbmluaXQvS2NvbmZpZy03OTMtXFx0Ym9vbCBcXFwiRW5hYmxlIGFjY2VzcyB0byAuY29uZmlnIHRocm91Z2ggL3Byb2MvY29uZmlnLmd6XFxcIlxcbmluaXQvS2NvbmZpZzo3OTQ6XFx0ZGVwZW5kcyBvbiBJS0NPTkZJRyBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuaW5pdC9LY29uZmlnLTc5NS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9Nzk5PWNvbmZpZyBJS0hFQURFUlNcXG5pbml0L0tjb25maWctODAwLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUga2VybmVsIGhlYWRlcnMgdGhyb3VnaCAvc3lzL2tlcm5lbC9raGVhZGVycy50YXIueHpcXFwiXFxuaW5pdC9LY29uZmlnOjgwMTpcXHRkZXBlbmRzIG9uIFNZU0ZTXFxuaW5pdC9LY29uZmlnLTgwMi1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9ODA4PWNvbmZpZyBMT0dfQlVGX1NISUZUXFxuLS1cXG5pbml0L0tjb25maWctODExLVxcdGRlZmF1bHQgMTdcXG5pbml0L0tjb25maWc6ODEyOlxcdGRlcGVuZHMgb24gUFJJTlRLXFxuaW5pdC9LY29uZmlnLTgxMy1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9ODI3PWNvbmZpZyBMT0dfQ1BVX01BWF9CVUZfU0hJRlRcXG5pbml0L0tjb25maWctODI4LVxcdGludCBcXFwiQ1BVIGtlcm5lbCBsb2cgYnVmZmVyIHNpemUgY29udHJpYnV0aW9uICgxMyA9XFx1MDAzZSA4IEtCLCAxNyA9XFx1MDAzZSAxMjhLQilcXFwiXFxuaW5pdC9LY29uZmlnOjgyOTpcXHRkZXBlbmRzIG9uIFNNUFxcbmluaXQvS2NvbmZpZy04MzAtXFx0cmFuZ2UgMCAyMVxcbi0tXFxuaW5pdC9LY29uZmlnLTgzMi1cXHRkZWZhdWx0IDEyXFxuaW5pdC9LY29uZmlnOjgzMzpcXHRkZXBlbmRzIG9uIFBSSU5US1xcbmluaXQvS2NvbmZpZy04MzQtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTg2Mz1jb25maWcgUFJJTlRLX0lOREVYXFxuaW5pdC9LY29uZmlnLTg2NC1cXHRib29sIFxcXCJQcmludGsgaW5kZXhpbmcgZGVidWdmcyBpbnRlcmZhY2VcXFwiXFxuaW5pdC9LY29uZmlnOjg2NTpcXHRkZXBlbmRzIG9uIFBSSU5USyBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbmluaXQvS2NvbmZpZy04NjYtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTg4OD1jb25maWcgVUNMQU1QX1RBU0tcXG5pbml0L0tjb25maWctODg5LVxcdGJvb2wgXFxcIkVuYWJsZSB1dGlsaXphdGlvbiBjbGFtcGluZyBmb3IgUlQvRkFJUiB0YXNrc1xcXCJcXG5pbml0L0tjb25maWc6ODkwOlxcdGRlcGVuZHMgb24gQ1BVX0ZSRVFfR09WX1NDSEVEVVRJTFxcbmluaXQvS2NvbmZpZy04OTEtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTkwNj1jb25maWcgVUNMQU1QX0JVQ0tFVFNfQ09VTlRcXG4tLVxcbmluaXQvS2NvbmZpZy05MDktXFx0ZGVmYXVsdCA1XFxuaW5pdC9LY29uZmlnOjkxMDpcXHRkZXBlbmRzIG9uIFVDTEFNUF9UQVNLXFxuaW5pdC9LY29uZmlnLTkxMS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9OTM3PWNvbmZpZyBTQ0hFRF9QUk9YWV9FWEVDXFxuLS1cXG5pbml0L0tjb25maWctOTM5LVxcdCMgQXZvaWQgc29tZSBidWlsZCBmYWlsdXJlcyB3LyBQUkVFTVBUX1JUIHVudGlsIGl0IGNhbiBiZSBmaXhlZFxcbmluaXQvS2NvbmZpZzo5NDA6XFx0ZGVwZW5kcyBvbiAhUFJFRU1QVF9SVFxcbmluaXQvS2NvbmZpZy05NDEtXFx0IyBOZWVkIHRvIGludmVzdGlnYXRlIGhvdyB0byBpbmZvcm0gc2NoZWRfZXh0IG9mIHNwbGl0IGNvbnRleHRzXFxuaW5pdC9LY29uZmlnOjk0MjpcXHRkZXBlbmRzIG9uICFTQ0hFRF9DTEFTU19FWFRcXG5pbml0L0tjb25maWctOTQzLVxcdCMgTm90IHBhcnRpY3VsYXJseSB1c2VmdWwgdW50aWwgd2UgZ2V0IHRvIG11bHRpLXJxIHByb3h5aW5nXFxuaW5pdC9LY29uZmlnOjk0NDpcXHRkZXBlbmRzIG9uIEVYUEVSVFxcbmluaXQvS2NvbmZpZy05NDUtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTEwMTQ9Y29uZmlnIE5VTUFfQkFMQU5DSU5HXFxuaW5pdC9LY29uZmlnLTEwMTUtXFx0Ym9vbCBcXFwiTWVtb3J5IHBsYWNlbWVudCBhd2FyZSBOVU1BIHNjaGVkdWxlclxcXCJcXG5pbml0L0tjb25maWc6MTAxNjpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcXG5pbml0L0tjb25maWc6MTAxNzpcXHRkZXBlbmRzIG9uICFBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxcbmluaXQvS2NvbmZpZzoxMDE4OlxcdGRlcGVuZHMgb24gU01QIFxcdTAwMjZcXHUwMDI2IE5VTUFfTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuaW5pdC9LY29uZmlnLTEwMTktXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTEwMjY9Y29uZmlnIFNDSEVEX0NBQ0hFXFxuLS1cXG5pbml0L0tjb25maWctMTAyOC1cXHRkZWZhdWx0IHlcXG5pbml0L0tjb25maWc6MTAyOTpcXHRkZXBlbmRzIG9uIFNNUFxcbmluaXQvS2NvbmZpZy0xMDMwLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0xMDM3PWNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDM5LVxcdGRlZmF1bHQgeVxcbmluaXQvS2NvbmZpZzoxMDQwOlxcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcXG5pbml0L0tjb25maWctMTA0MS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9MTA4Nj1jb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg3LVxcdGJvb2xcXG5pbml0L0tjb25maWc6MTA4ODpcXHRkZXBlbmRzIG9uIE1FTUNHXFxuaW5pdC9LY29uZmlnOjEwODk6XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbmluaXQvS2NvbmZpZzoxMDkwOlxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG5pbml0L0tjb25maWctMTA5MS1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xMDkzPWNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk0LVxcdGJvb2xcXG5pbml0L0tjb25maWc6MTA5NTpcXHRkZXBlbmRzIG9uIE1FTUNHXFxuaW5pdC9LY29uZmlnOjEwOTY6XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbmluaXQvS2NvbmZpZzoxMDk3OlxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbmluaXQvS2NvbmZpZy0xMDk4LVxcdGRlZmF1bHQgeVxcbi0tXFxuaW5pdC9LY29uZmlnPTExMDA9Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5pbml0L0tjb25maWc6MTEwMjpcXHRkZXBlbmRzIG9uIE1FTUNHXFxuaW5pdC9LY29uZmlnLTExMDMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5pbml0L0tjb25maWc9MTExNz1jb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTE4LVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuaW5pdC9LY29uZmlnOjExMTk6XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmluaXQvS2NvbmZpZy0xMTIwLVxcdGRlZmF1bHQgblxcbi0tXFxuaW5pdC9LY29uZmlnPTExMzk9Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcXG5pbml0L0tjb25maWctMTE0MC1cXHRib29sXFxuaW5pdC9LY29uZmlnOjExNDE6XFx0ZGVwZW5kcyBvbiBNRU1DRyBcXHUwMDI2XFx1MDAyNiBCTEtfQ0dST1VQXFxuaW5pdC9LY29uZmlnLTExNDItXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9MTE1OT1jb25maWcgRkFJUl9HUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMTYwLVxcdGJvb2wgXFxcIkdyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX09USEVSXFxcIlxcbmluaXQvS2NvbmZpZzoxMTYxOlxcdGRlcGVuZHMgb24gQ0dST1VQX1NDSEVEXFxuaW5pdC9LY29uZmlnLTExNjItXFx0c2VsZWN0IEdST1VQX1NDSEVEX1dFSUdIVFxcbi0tXFxuaW5pdC9LY29uZmlnPTExNjU9Y29uZmlnIENGU19CQU5EV0lEVEhcXG5pbml0L0tjb25maWctMTE2Ni1cXHRib29sIFxcXCJDUFUgYmFuZHdpZHRoIHByb3Zpc2lvbmluZyBmb3IgRkFJUl9HUk9VUF9TQ0hFRFxcXCJcXG5pbml0L0tjb25maWc6MTE2NzpcXHRkZXBlbmRzIG9uIEZBSVJfR1JPVVBfU0NIRURcXG5pbml0L0tjb25maWctMTE2OC1cXHRzZWxlY3QgR1JPVVBfU0NIRURfQkFORFdJRFRIXFxuLS1cXG5pbml0L0tjb25maWc9MTE3Nz1jb25maWcgUlRfR1JPVVBfU0NIRURcXG5pbml0L0tjb25maWctMTE3OC1cXHRib29sIFxcXCJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPXFxcIlxcbmluaXQvS2NvbmZpZzoxMTc5OlxcdGRlcGVuZHMgb24gQ0dST1VQX1NDSEVEXFxuaW5pdC9LY29uZmlnLTExODAtXFx0ZGVmYXVsdCBuXFxuLS1cXG5pbml0L0tjb25maWc9MTE4OD1jb25maWcgUlRfR1JPVVBfU0NIRURfREVGQVVMVF9ESVNBQkxFRFxcbmluaXQvS2NvbmZpZy0xMTg5LVxcdGJvb2wgXFxcIlJlcXVpcmUgYm9vdCBwYXJhbWV0ZXIgdG8gZW5hYmxlIGdyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX1JSL0ZJRk9cXFwiXFxuaW5pdC9LY29uZmlnOjExOTA6XFx0ZGVwZW5kcyBvbiBSVF9HUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMTkxLVxcdGRlZmF1bHQgblxcbi0tXFxuaW5pdC9LY29uZmlnPTExOTk9Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMjAwLVxcdGJvb2xcXG5pbml0L0tjb25maWc6MTIwMTpcXHRkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcXHUwMDI2XFx1MDAyNiBDR1JPVVBfU0NIRURcXG5pbml0L0tjb25maWctMTIwMi1cXHRzZWxlY3QgR1JPVVBfU0NIRURfV0VJR0hUXFxuLS1cXG5pbml0L0tjb25maWc9MTIwOD1jb25maWcgRVhUX1NVQl9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMjA5LSAgICAgICAgZGVmX2Jvb2wgeVxcbmluaXQvS2NvbmZpZzoxMjEwOiAgICAgICAgZGVwZW5kcyBvbiBTQ0hFRF9DTEFTU19FWFQgXFx1MDAyNlxcdTAwMjYgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xMjExLVxcbmluaXQvS2NvbmZpZz0xMjEyPWNvbmZpZyBTQ0hFRF9NTV9DSURcXG5pbml0L0tjb25maWctMTIxMy1cXHRkZWZfYm9vbCB5XFxuaW5pdC9LY29uZmlnOjEyMTQ6XFx0ZGVwZW5kcyBvbiBTTVAgXFx1MDAyNlxcdTAwMjYgUlNFUVxcbmluaXQvS2NvbmZpZy0xMjE1LVxcbmluaXQvS2NvbmZpZz0xMjE2PWNvbmZpZyBVQ0xBTVBfVEFTS19HUk9VUFxcbmluaXQvS2NvbmZpZy0xMjE3LVxcdGJvb2wgXFxcIlV0aWxpemF0aW9uIGNsYW1waW5nIHBlciBncm91cCBvZiB0YXNrc1xcXCJcXG5pbml0L0tjb25maWc6MTIxODpcXHRkZXBlbmRzIG9uIENHUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZzoxMjE5OlxcdGRlcGVuZHMgb24gVUNMQU1QX1RBU0tcXG5pbml0L0tjb25maWctMTIyMC1cXHRkZWZhdWx0IG5cXG4tLVxcbmluaXQvS2NvbmZpZz0xMjg1PWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxcbmluaXQvS2NvbmZpZy0xMjg2LVxcdGJvb2wgXFxcIkh1Z2VUTEIgY29udHJvbGxlclxcXCJcXG5pbml0L0tjb25maWc6MTI4NzpcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxcbmluaXQvS2NvbmZpZy0xMjg4LVxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4tLVxcbmluaXQvS2NvbmZpZz0xMzAxPWNvbmZpZyBDUFVTRVRTXFxuaW5pdC9LY29uZmlnLTEzMDItXFx0Ym9vbCBcXFwiQ3B1c2V0IGNvbnRyb2xsZXJcXFwiXFxuaW5pdC9LY29uZmlnOjEzMDM6XFx0ZGVwZW5kcyBvbiBTTVBcXG5pbml0L0tjb25maWctMTMwNC1cXHRzZWxlY3QgVU5JT05fRklORFxcbi0tXFxuaW5pdC9LY29uZmlnPTEzMTQ9Y29uZmlnIENQVVNFVFNfVjFcXG5pbml0L0tjb25maWctMTMxNS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclxcXCJcXG5pbml0L0tjb25maWc6MTMxNjpcXHRkZXBlbmRzIG9uIENQVVNFVFNcXG5pbml0L0tjb25maWctMTMxNy1cXHRkZWZhdWx0IG5cXG4tLVxcbmluaXQvS2NvbmZpZz0xMzI4PWNvbmZpZyBQUk9DX1BJRF9DUFVTRVRcXG5pbml0L0tjb25maWctMTMyOS1cXHRib29sIFxcXCJJbmNsdWRlIGxlZ2FjeSAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9jcHVzZXQgZmlsZVxcXCJcXG5pbml0L0tjb25maWc6MTMzMDpcXHRkZXBlbmRzIG9uIENQVVNFVFNfVjFcXG5pbml0L0tjb25maWctMTMzMS1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxcbmluaXQvS2NvbmZpZy0xMzQ2LVxcdGJvb2wgXFxcIlBlcmYgY29udHJvbGxlclxcXCJcXG5pbml0L0tjb25maWc6MTM0NzpcXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTXFxuaW5pdC9LY29uZmlnLTEzNDgtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTEzNTY9Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1Ny1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuaW5pdC9LY29uZmlnOjEzNTg6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbmluaXQvS2NvbmZpZy0xMzU5LVxcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXFxuLS1cXG5pbml0L0tjb25maWctMTM2My1cXG5pbml0L0tjb25maWc6MTM2NDpcXHQgIEluIHdoaWNoIGNvbnRleHQgdGhlc2UgcHJvZ3JhbXMgYXJlIGFjY2Vzc2VkIGRlcGVuZHMgb24gdGhlIHR5cGVcXG5pbml0L0tjb25maWctMTM2NS1cXHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcXG4tLVxcbmluaXQvS2NvbmZpZz0xMzgzPWNvbmZpZyBDR1JPVVBfREVCVUdcXG4tLVxcbmluaXQvS2NvbmZpZy0xMzg1LVxcdGRlZmF1bHQgblxcbmluaXQvS2NvbmZpZzoxMzg2OlxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXFxuaW5pdC9LY29uZmlnLTEzODctXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTE0MDE9bWVudWNvbmZpZyBOQU1FU1BBQ0VTXFxuaW5pdC9LY29uZmlnLTE0MDItXFx0Ym9vbCBcXFwiTmFtZXNwYWNlcyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5pbml0L0tjb25maWc6MTQwMzpcXHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxcbmluaXQvS2NvbmZpZy0xNDA0LVxcdGRlZmF1bHQgIUVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE0MzA9Y29uZmlnIElQQ19OU1xcbmluaXQvS2NvbmZpZy0xNDMxLVxcdGJvb2wgXFxcIklQQyBuYW1lc3BhY2VcXFwiXFxuaW5pdC9LY29uZmlnOjE0MzI6XFx0ZGVwZW5kcyBvbiAoU1lTVklQQyB8fCBQT1NJWF9NUVVFVUUpXFxuaW5pdC9LY29uZmlnLTE0MzMtXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9MTQ2MD1jb25maWcgTkVUX05TXFxuaW5pdC9LY29uZmlnLTE0NjEtXFx0Ym9vbCBcXFwiTmV0d29yayBuYW1lc3BhY2VcXFwiXFxuaW5pdC9LY29uZmlnOjE0NjI6XFx0ZGVwZW5kcyBvbiBORVRcXG5pbml0L0tjb25maWctMTQ2My1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xNDcwPWNvbmZpZyBDSEVDS1BPSU5UX1JFU1RPUkVcXG5pbml0L0tjb25maWctMTQ3MS1cXHRib29sIFxcXCJDaGVja3BvaW50L3Jlc3RvcmUgc3VwcG9ydFxcXCJcXG5pbml0L0tjb25maWc6MTQ3MjpcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG5pbml0L0tjb25maWctMTQ3My1cXHRzZWxlY3QgUFJPQ19DSElMRFJFTlxcbi0tXFxuaW5pdC9LY29uZmlnPTE1NDE9Y29uZmlnIEJPT1RfQ09ORklHX0ZPUkNFXFxuaW5pdC9LY29uZmlnLTE1NDItXFx0Ym9vbCBcXFwiRm9yY2UgdW5jb25kaXRpb25hbCBib290Y29uZmlnIHByb2Nlc3NpbmdcXFwiXFxuaW5pdC9LY29uZmlnOjE1NDM6XFx0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR1xcbmluaXQvS2NvbmZpZy0xNTQ0LVxcdGRlZmF1bHQgeSBpZiBCT09UX0NPTkZJR19FTUJFRFxcbi0tXFxuaW5pdC9LY29uZmlnPTE1NTQ9Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEXFxuaW5pdC9LY29uZmlnLTE1NTUtXFx0Ym9vbCBcXFwiRW1iZWQgYm9vdGNvbmZpZyBmaWxlIGluIHRoZSBrZXJuZWxcXFwiXFxuaW5pdC9LY29uZmlnOjE1NTY6XFx0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR1xcbmluaXQvS2NvbmZpZy0xNTU3LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0xNTY1PWNvbmZpZyBCT09UX0NPTkZJR19FTUJFRF9GSUxFXFxuaW5pdC9LY29uZmlnLTE1NjYtXFx0c3RyaW5nIFxcXCJFbWJlZGRlZCBib290Y29uZmlnIGZpbGUgcGF0aFxcXCJcXG5pbml0L0tjb25maWc6MTU2NzpcXHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEXFxuaW5pdC9LY29uZmlnLTE1NjgtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTE1OTE9Y29uZmlnIElOSVRSQU1GU19QUkVTRVJWRV9NVElNRVxcbmluaXQvS2NvbmZpZy0xNTkyLVxcdGJvb2wgXFxcIlByZXNlcnZlIGNwaW8gYXJjaGl2ZSBtdGltZXMgaW4gaW5pdHJhbWZzXFxcIlxcbmluaXQvS2NvbmZpZzoxNTkzOlxcdGRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkRcXG5pbml0L0tjb25maWctMTU5NC1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xNjAyPWNvbmZpZyBJTklUUkFNRlNfVEVTVFxcbmluaXQvS2NvbmZpZy0xNjAzLVxcdGJvb2wgXFxcIlRlc3QgaW5pdHJhbWZzIGNwaW8gYXJjaGl2ZSBleHRyYWN0aW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuaW5pdC9LY29uZmlnOjE2MDQ6XFx0ZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRCBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuaW5pdC9LY29uZmlnLTE2MDUtXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmluaXQvS2NvbmZpZz0xNjM4PWNvbmZpZyBMRF9ERUFEX0NPREVfREFUQV9FTElNSU5BVElPTlxcbmluaXQvS2NvbmZpZy0xNjM5LVxcdGJvb2wgXFxcIkRlYWQgY29kZSBhbmQgZGF0YSBlbGltaW5hdGlvbiAoRVhQRVJJTUVOVEFMKVxcXCJcXG5pbml0L0tjb25maWc6MTY0MDpcXHRkZXBlbmRzIG9uIEhBVkVfTERfREVBRF9DT0RFX0RBVEFfRUxJTUlOQVRJT05cXG5pbml0L0tjb25maWc6MTY0MTpcXHRkZXBlbmRzIG9uIEVYUEVSVFxcbmluaXQvS2NvbmZpZzoxNjQyOlxcdGRlcGVuZHMgb24gJChjYy1vcHRpb24sLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMpXFxuaW5pdC9LY29uZmlnOjE2NDM6XFx0ZGVwZW5kcyBvbiAkKGxkLW9wdGlvbiwtLWdjLXNlY3Rpb25zKVxcbmluaXQvS2NvbmZpZy0xNjQ0LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0xNjU2PWNvbmZpZyBMRF9PUlBIQU5fV0FSTlxcbmluaXQvS2NvbmZpZy0xNjU3LVxcdGRlZl9ib29sIHlcXG5pbml0L0tjb25maWc6MTY1ODpcXHRkZXBlbmRzIG9uIEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxcbmluaXQvS2NvbmZpZzoxNjU5OlxcdGRlcGVuZHMgb24gJChsZC1vcHRpb24sLS1vcnBoYW4taGFuZGxpbmc9d2FybilcXG5pbml0L0tjb25maWc6MTY2MDpcXHRkZXBlbmRzIG9uICQobGQtb3B0aW9uLC0tb3JwaGFuLWhhbmRsaW5nPWVycm9yKVxcbmluaXQvS2NvbmZpZy0xNjYxLVxcbmluaXQvS2NvbmZpZz0xNjYyPWNvbmZpZyBMRF9PUlBIQU5fV0FSTl9MRVZFTFxcbmluaXQvS2NvbmZpZy0xNjYzLVxcdHN0cmluZ1xcbmluaXQvS2NvbmZpZzoxNjY0OlxcdGRlcGVuZHMgb24gTERfT1JQSEFOX1dBUk5cXG5pbml0L0tjb25maWctMTY2NS1cXHRkZWZhdWx0IFxcXCJlcnJvclxcXCIgaWYgV0VSUk9SXFxuLS1cXG5pbml0L0tjb25maWc9MTcxND1jb25maWcgVUlEMTZcXG5pbml0L0tjb25maWctMTcxNS1cXHRib29sIFxcXCJFbmFibGUgMTYtYml0IFVJRCBzeXN0ZW0gY2FsbHNcXFwiIGlmIEVYUEVSVFxcbmluaXQvS2NvbmZpZzoxNzE2OlxcdGRlcGVuZHMgb24gSEFWRV9VSUQxNiBcXHUwMDI2XFx1MDAyNiBNVUxUSVVTRVJcXG5pbml0L0tjb25maWctMTcxNy1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xNzg2PWNvbmZpZyBQUklOVEtfUklOR0JVRkZFUl9LVU5JVF9URVNUXFxuaW5pdC9LY29uZmlnLTE3ODctXFx0dHJpc3RhdGUgXFxcIktVbml0IFRlc3QgZm9yIHRoZSBwcmludGsgcmluZ2J1ZmZlclxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbmluaXQvS2NvbmZpZzoxNzg4OlxcdGRlcGVuZHMgb24gUFJJTlRLIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuaW5pdC9LY29uZmlnLTE3ODktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmluaXQvS2NvbmZpZz0xODA4PWNvbmZpZyBFTEZfQ09SRVxcbmluaXQvS2NvbmZpZzoxODA5OlxcdGRlcGVuZHMgb24gQ09SRURVTVBcXG5pbml0L0tjb25maWctMTgxMC1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xODE2PWNvbmZpZyBQQ1NQS1JfUExBVEZPUk1cXG5pbml0L0tjb25maWctMTgxNy1cXHRib29sIFxcXCJFbmFibGUgUEMtU3BlYWtlciBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5pbml0L0tjb25maWc6MTgxODpcXHRkZXBlbmRzIG9uIEhBVkVfUENTUEtSX1BMQVRGT1JNXFxuaW5pdC9LY29uZmlnLTE4MTktXFx0c2VsZWN0IEk4MjUzX0xPQ0tcXG4tLVxcbmluaXQvS2NvbmZpZz0xODMyPWNvbmZpZyBGVVRFWFxcbmluaXQvS2NvbmZpZy0xODMzLVxcdGJvb2wgXFxcIkVuYWJsZSBmdXRleCBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5pbml0L0tjb25maWc6MTgzNDpcXHRkZXBlbmRzIG9uICEoU1BBUkMzMiBcXHUwMDI2XFx1MDAyNiBTTVApXFxuaW5pdC9LY29uZmlnLTE4MzUtXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9MTg0Mj1jb25maWcgRlVURVhfUElcXG5pbml0L0tjb25maWctMTg0My1cXHRib29sXFxuaW5pdC9LY29uZmlnOjE4NDQ6XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiBSVF9NVVRFWEVTXFxuaW5pdC9LY29uZmlnLTE4NDUtXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9MTg0Nz1jb25maWcgRlVURVhfUFJJVkFURV9IQVNIXFxuaW5pdC9LY29uZmlnLTE4NDgtXFx0Ym9vbFxcbmluaXQvS2NvbmZpZzoxODQ5OlxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgIUJBU0VfU01BTEwgXFx1MDAyNlxcdTAwMjYgTU1VXFxuaW5pdC9LY29uZmlnLTE4NTAtXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9MTg1Mj1jb25maWcgRlVURVhfTVBPTFxcbmluaXQvS2NvbmZpZy0xODUzLVxcdGJvb2xcXG5pbml0L0tjb25maWc6MTg1NDpcXHRkZXBlbmRzIG9uIEZVVEVYIFxcdTAwMjZcXHUwMDI2IE5VTUFcXG5pbml0L0tjb25maWctMTg1NS1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xODk3PWNvbmZpZyBTSE1FTVxcbi0tXFxuaW5pdC9LY29uZmlnLTE4OTktXFx0ZGVmYXVsdCB5XFxuaW5pdC9LY29uZmlnOjE5MDA6XFx0ZGVwZW5kcyBvbiBNTVVcXG5pbml0L0tjb25maWctMTkwMS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9MTkyNT1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MjYtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIHRoZSBpb191cmluZyBzdWJzeXN0ZW1cXFwiXFxuaW5pdC9LY29uZmlnOjE5Mjc6XFx0ZGVwZW5kcyBvbiBJT19VUklORyBcXHUwMDI2XFx1MDAyNiBHQ09WX0tFUk5FTFxcbmluaXQvS2NvbmZpZy0xOTI4LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTM4PWNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTQwLVxcdGRlZmF1bHQgblxcbmluaXQvS2NvbmZpZzoxOTQxOlxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTk0Mi1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9MTk4MT1jb25maWcgUlNFUVxcbi0tXFxuaW5pdC9LY29uZmlnLTE5ODMtXFx0ZGVmYXVsdCB5XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM5OjIwLjY3NjkzNTE1OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTI0MzAzODQ3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIE1FTUNHIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgTUVNQ0cgc3Vic3lzdGVt4oCmIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgcmlnaHQ/IE5vIG92ZXJseSBjb21wbGV4IHByZXJlcXVpc2l0ZSBtb2R1bGVzIG9yIGV4b3RpYyBoYXJkd2FyZSBkZXBlbmRlbmNpZXMuIEp1c3QgdGhlIHVzdWFsIHN1c3BlY3RzOiBgSEFWRV9OTUlgIGFuZCB0aGUgbGlrZS4gSXQncyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHJlbHlpbmcgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiBjb21tb24gZnVuY3Rpb25hbGl0aWVzLiAqQnV0IHdhaXQgYSBzZWNvbmQuLi4qIEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZy4gSXMgaXQgYWN0dWFsbHkgbmVzdGVkIHdpdGhpbiB0aGUgYENHUk9VUFNgIGZyYW1ld29yaz8gTXkgbWVtb3J5IGlzIGEgYml0IGhhenkgb24gdGhhdCBzcGVjaWZpYyBwb2ludC4gSXTigJlzIGNlcnRhaW5seSBhIGNvcmUgY29tcG9uZW50IHRoZXNlIGRheXMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGl0ICppcyogaW5kZWVkIGEgc3ViLW1vZHVsZSBvZiBgQ0dST1VQU2AgdG8gYmUgY2VydGFpbi4gTGV04oCZcyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyDigJMgYGluaXQvS2NvbmZpZ2AgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIFRoYXQnbGwgcXVpY2tseSBjbGFyaWZ5IHRoZSBkZXBlbmRlbmN5IHRyZWUgYW5kIHJlbW92ZSBhbnkgYW1iaWd1aXR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NDQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDo0MjozMy4xMDczMjI3NjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzIyNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjc9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ni1cXG5pbml0L0tjb25maWc6MTA3Nzpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OC1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg1LVxcbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODctXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTItXFxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTQtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTktXFxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6NDI6MzMuMTUwMDQ5NTYxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTE4MzQ2NjA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgQ0dST1VQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIGBNRU1DR2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIGBNRU1DR2AgZW5hYmxlZCB3aXRoaW4gdGhlIGBtZW51Y29uZmlnIENHUk9VUFNgIHNldHRpbmdzP1wiIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBmaXJzdCBzdGVwLCB0aGUgZm91bmRhdGlvbmFsIGNoZWNrLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCdzIGV2ZW4gY29uZmlndXJlZCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uLCBzbyBjaGVja2luZyBpdHMgcHJlc2VuY2UgaGVyZSBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ1NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjQ1OjM0LjMzMzUxNzkwNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NTM4ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgQ0dST1VQU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNDU9Y29uZmlnIFNMQUJfT0JKX0VYVFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwNDctXFxuaW5pdC9LY29uZmlnOjEwNDg6bWVudWNvbmZpZyBDR1JPVVBTXFxuaW5pdC9LY29uZmlnLTEwNDktXFx0Ym9vbCBcXFwiQ29udHJvbCBHcm91cCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDo0NTozNC40MzkwNjQxNzhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI0NzcxNDc0NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFpzd2FwIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvbmZpZ3VyaW5nIFpzd2FwIGFuZCBpZGVudGlmeWluZyBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEZpcnN0LCBJIG5lZWQgdG8gZW5zdXJlIHRoZSByaWdodCBjb25maWdzIGFyZSBpbiBwbGFjZS4gWWVzLCBgQ0dST1VQU2AgaXMgZXNzZW50aWFsLCBubyBxdWVzdGlvbiBhYm91dCBpdC5cblxuTGV0J3MgcHVsbCB0b2dldGhlciB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zOiBgWlNXQVBgLCBgU1dBUGAsIGBNRU1DR2AsIGFuZCBgQ0dST1VQU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhleSBhcmUgYWxsIHByZXNlbnQuIFJpZ2h0LCBhbmQgSSBzaG91bGQgcmVtZW1iZXIgdGhhdCBgWlNXQVBgIGRlcGVuZHMgb24gYFNXQVBgLCBhbmQgYE1FTUNHYCBkZXBlbmRzIG9uIGBDR1JPVVBTYCwgc28gdGhlIG9yZGVyIG1hdHRlcnMuIFRodXMsIGBaU1dBUGAsIGBTV0FQYCwgYE1FTUNHYCwgYENHUk9VUFNgIGlzIHRoZSBjb3JyZWN0IHNldC5cblxuTGV0J3MgY29uc2lkZXIgd2hldGhlciB0byBlbmFibGUgYFpTV0FQYCBieSBkZWZhdWx0LiBZZXMsIGBaU1dBUF9ERUZBVUxUX09OYCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIFpzd2FwIGlzIGFjdHVhbGx5IHVzZWQgYnkgZGVmYXVsdC5cblxuTm93LCBsZXQncyBrZWVwIGBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPYCBpbiBtaW5kLiBJdCdzIGEgZGVmYXVsdC5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgcG90ZW50aWFsIGNhbmRpZGF0ZXM6IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gTGV0J3MgY29uZmlybSB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGluZGVlZCBub24tc3RhdGljLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgY3JpdGVyaW9uLiBZZXMsIGl0J3Mgbm9uLXN0YXRpYyBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgaXMgZGVjbGFyZWQgaW4gYG1tL3N3YXAuaGAuIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpcyBub24tc3RhdGljIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgaXMgbm9uLXN0YXRpYyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBBbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIG5vbi1zdGF0aWMgaW4gYG1tL2ZpbGVtYXAuY2AgYW5kIGV4cG9ydGVkLlxuXG5IbW0sIHRoZXJlJ3MgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIHdoaWNoIGlzIHN0YXRpYyBidXQgaXQgdHJpZ2dlcnMgZHJvcGJlaGluZC4gU2luY2UgaXQncyBzdGF0aWMgd2UgY2FuJ3QgdXNlIGl0LiBCdXQsIGl0IGlzIGNhbGxlZCBieSBgc2hyaW5rX21lbWNnX2NiYCwgd2hpY2ggaXMgc3RhdGljLCBzbyB0aGF0J3Mgbm90IHVzZWZ1bCBlaXRoZXIuIFdoYXQgYWJvdXQgYHpzd2FwX3Nocmlua2VyX3NjYW5gPyBUaGF0J3Mgc3RhdGljIGFzIHdlbGwuXG5cbkxldCdzIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgYW4gZW50cnkgcG9pbnQsIGNhbGxlZCB3aGVuIHdyaXRlYmFjayBjb21wbGV0ZXMuIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpcyBjYWxsZWQgZnJvbSBgZm9saW9fZW5kX3dyaXRlYmFja2AuIFRoZW4sIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCBpcyBjYWxsZWQgZnJvbSBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AuIEZpbmFsbHksIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGNhbGxlZCBmcm9tIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYW5kIGBzd2FwaW5fc3luY2AuXG5cblNvLCB0aGUgY3VycmVudCBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyBhcmU6XG4tIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYFxuLSBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWBcbi0gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2Bcbi0gYGZvbGlvX2VuZF93cml0ZWJhY2tgXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlnIGFuZCBpbnN0cnVjdGlvbiBkZXRhaWxzLlxuVGhlIGNvbmZpZ3Mgd2lsbCBiZTpcbi0gYFpTV0FQYFxuLSBgWlNXQVBfREVGQVVMVF9PTmBcbi0gYFNXQVBgXG4tIGBNRU1DR2Bcbi0gYENHUk9VUFNgXG5cblRoZSBpbnN0cnVjdGlvbnMgZGljdGF0ZSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBhbmQgc2hvdWxkIGJlIGV4Y2x1ZGVkLiBJdCdzIGNhbGxlZCBmb3IgZXZlcnkgcGFnZSB3cml0ZWJhY2sgY29tcGxldGlvbi4gTGV0J3MgZXhjbHVkZSBpdCB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuXG5UaGlzIGxlYXZlcyBtZSB3aXRoOiBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AsIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCwgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJJ2xsIGNvbnNpZGVyIGhvdyBob3QgZWFjaCBpcy4gYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGlzIHNwZWNpZmljIHRvIHRoaXMgbmV3IGZlYXR1cmUsIGFuZCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgaXMgc3BlY2lmaWMgdG8gdGhpcyBuZXcgZmVhdHVyZSAoYW5kIHBhZ2UgcmVjbGFpbSksIHNvIHRob3NlIHNlZW0gb2theS5cblxuYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGlzIGNhbGxlZCBkdXJpbmcgcGFnZSByZWNsYWltIGFuZCBzd2FwIHdyaXRlYmFjayBkcm9wYmVoaW5kLiBJdCdzIHNvbWV3aGF0IGhvdCBkdXJpbmcgbWVtb3J5IHByZXNzdXJlLCBidXQgbm90IGFzIGhvdCBhcyBgZm9saW9fZW5kX3dyaXRlYmFja2AuIEl0J3MgZmluZSB0byBpbmNsdWRlLlxuYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgY2FsbGVkIGR1cmluZyBzd2FwaW4gYW5kIHpzd2FwIHdyaXRlYmFjay4gSXQncyBmaW5lIHRvIGluY2x1ZGUuXG5gc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgaXMgY2FsbGVkIG9ubHkgZm9yIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpb3MgKHpzd2FwIHdyaXRlYmFjaykuIEl0J3MgZmluZSB0byBpbmNsdWRlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBhbGwgdGhlIGNvbmZpZyBuYW1lcy4gTGV0IG1lIGRvdWJsZSBjaGVjazpcblxuLSBgWlxuXG4iLCJJbnB1dFRva2VucyI6Mjg3MDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjQ5OjE5LjIxMDU0MjU4MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNzcwNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0zNT1jb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDo0OToxOS4zMjQzMjEzOTRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxNDk2NTUwNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFNocmlua2VyIEFkZGl0aW9uKipcblxuT2theSwgc28gd2UgKmRvKiBuZWVkIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gVGhlIHNocmlua2VyIGlzIGVzc2VudGlhbCBmb3IgdHJpZ2dlcmluZyB6c3dhcCB3cml0ZWJhY2ssIHNvIHRoYXQncyBhIGtleSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBieSBkZWZhdWx0LiBUaGF0IGZlZWxzIHJpZ2h0LCBhbmQgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuXG5cbkknbSB0aGlua2luZyB3ZSdyZSBnb2luZyB0byB3YW50IHRvIGhhdmUgYSBsb29rIGF0IGEgZmV3IG90aGVyIGNvbmZpZ3MgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAuIEknbSBnb2luZyB0byB3YW50IHRvIGNvbmZpcm0gdGhhdCB3ZSd2ZSBnb3Q6IGBaU1dBUGAsIGBaU1dBUF9ERUZBVUxUX09OYCwgYW5kIG9mIGNvdXJzZSBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIFRoZW4sIG9mIGNvdXJzZSwgdGhlIG9idmlvdXMgb25lczogYFNXQVBgLCBgTUVNQ0dgLCBhbmQgYENHUk9VUFNgLiBHb3R0YSBtYWtlIHN1cmUgYWxsIHRoZSBidWlsZGluZyBibG9ja3MgYXJlIGluIHBsYWNlIGZvciB0aGlzIHRvIHdvcmsgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIHdheSB0byBkcm9wIHN3YXAgY2FjaGUgZm9saW9zICphZnRlciogdGhlIHpzd2FwIHdyaXRlYmFjayBpcyBjb21wbGV0ZS4gSXQncyBkZXNpZ25lZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHBvbGx1dGlvbiBvZiB0aGUgTFJVLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IG9wdGltaXphdGlvbi4gVGhhdCdzIGdvb2QuIFRoZXkncmUgYWRkaW5nIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGZ1bmN0aW9ucywgYW5kIHRoZXkncmUgbW9kaWZ5aW5nIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHRvIGxldmVyYWdlIHRoaXMgbmV3IG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgbW9kaWZpY2F0aW9uIHRvIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGRlYWxzIHdpdGggc3dhcCwgenN3YXAsIGFuZCB0aGUgcGFnZSBjYWNoZS4gSXQgZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgYmVoYXZpb3IsIHNvIGl0IGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIHRoYXQga2luZCBvZiB0aG9yb3VnaCB0ZXN0aW5nLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBkbyB0byBtYWtlIHRoaXMgaGFwcGVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI1NCwiT3V0cHV0VG9rZW5zIjoyMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6NTQ6MjAuODIwODc1NjI3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTY4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gICAgXCJyZW1vdmVfbWFwcGluZ19yZWNsYWltXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGRyb3Agc3dhcCBjYWNoZSBmb2xpb3MgYWZ0ZXIgenN3YXAgd3JpdGViYWNrIGNvbXBsZXRlcywgYXZvaWRpbmcgdW5uZWNlc3NhcnkgTFJVIHBvbGx1dGlvbi4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBhbmQgbW9kaWZpZXMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgdG8gdXNlIHRoaXMgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChzd2FwLCB6c3dhcCwgcGFnZSBjYWNoZSkgdGhhdCBhZmZlY3RzIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGJlaGF2aW9yLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIixcbiAgICBcIlpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIixcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb1wiLFxuICAgIFwicmVtb3ZlX21hcHBpbmdfcmVjbGFpbVwiLFxuICAgIFwiX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBkcm9wIHN3YXAgY2FjaGUgZm9saW9zIGFmdGVyIHpzd2FwIHdyaXRlYmFjayBjb21wbGV0ZXMsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IExSVSBwb2xsdXRpb24uIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgYW5kIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCwgYW5kIG1vZGlmaWVzIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHRvIHVzZSB0aGlzIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoc3dhcCwgenN3YXAsIHBhZ2UgY2FjaGUpIHRoYXQgYWZmZWN0cyBtZW1vcnkgcmVjbGFpbSBhbmQgc3dhcCBiZWhhdmlvciwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDo1NDoyMC45NTY0NTAyODdaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDUwODk3MzQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjU0OjIwLjk1Njk5MTcwN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMjA1MDg0Mjc5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgZm9saW9zIGluIHRoZSBzd2FwIGNhY2hlLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgYSBcXFwiZHJvcGJlaGluZFxcXCIgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2suIEl0IGNoYW5nZXMgaG93IGZvbGlvcyBhcmUgYWxsb2NhdGVkIGZvciB0aGUgc3dhcCBjYWNoZSAocmV0dXJuaW5nIHRoZW0gb2ZmLUxSVSkgYW5kIG1hbmFnZXMgdGhlaXIgcmVmZXJlbmNlcyBkdXJpbmcgd3JpdGViYWNrLlxcblxcblRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgcGFnZSByZWZlcmVuY2UgY291bnRpbmcsIExSVSBsaXN0IG1hbmFnZW1lbnQsIGFuZCBzd2FwIGNhY2hlIG9wZXJhdGlvbnMuIFRoZSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcyAoZS5nLiwgZm9saW9zIGxlZnQgb2ZmIHRoZSBMUlUpLCBvciBpbnZhbGlkIHBhZ2Ugc3RhdGVzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGVidWcgb3B0aW9ucyAobGlrZSBgQ09ORklHX0RFQlVHX1ZNYCksIGFuZCBwYWdlIHJlZmVyZW5jZSB0cmFja2luZy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IHBhcnNpbmcgbG9naWMgb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZm9saW9zIGFsbG9jYXRlZCBhcmUgcG9wdWxhdGVkIHZpYSBkZWNvbXByZXNzaW9uIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHN3YXAsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgZXhwb3NlZC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWUwODYyOTk4NjQwNDllZDc3Njk4ZWFmZWMwZWMzNzY2MGRlZjE1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE0OjI5OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggOGYwZjY4ZTI0NWJhYS4uMjllYzYwZGNhZTIxMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTM3NCw2ICszNzQsOCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xuIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHQgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbiBleHRlcm4gaW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG5AQCAtNDY1LDYgKzQ2Nyw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XG4gICovXG4gYm9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4rdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK1xuIC8qIEFsbG9jYXRlIC8gZnJlZSAoaGliZXJuYXRpb24pIGV4Y2x1c2l2ZSBlbnRyaWVzICovXG4gc3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTtcbiB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcbkBAIC00NzUsNiArNDc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4gfVxuIFxuICNlbHNlIC8qIENPTkZJR19TV0FQICovXG4rc3RhdGljIGlubGluZSB2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge31cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCBkNzIxOTg2ZDVmNDY1Li4wNDBjOTdhMTIxZGVkIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjg2LDYgKzE2ODYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpO1xuICAqL1xuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbitcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xuK1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiBcbiBcdC8qXG5AQCAtMTY5NSw3ICsxNjk3LDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cbiBcdCAqL1xuIFx0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbitcdC8qXG4rXHQgKiBTYW1wbGUgdGhpcyBiZWZvcmUgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKCkgY2xlYXJzXG4rXHQgKiBQR193cml0ZWJhY2s6IHVudGlsIHRoZW4gYSByYWNpbmcgc3dhcGluIGNhbm5vdCByZW1vdmUgdGhlIGZvbGlvIGZyb21cbitcdCAqIHRoZSBzd2FwIGNhY2hlLiBBZnRlcndhcmRzIGl0IGNhbiwgYW5kIHRoZSBkcm9wIGJlbG93IHRoZW4gZmluZHMgYVxuK1x0ICogbm9uLXN3YXBjYWNoZSBmb2xpbyBhbmQgcHV0cyBpdCBiYWNrIG9uIHRoZSBMUlUgaW5zdGVhZC4gVGhlXG4rXHQgKiByZWZlcmVuY2UgdGFrZW4gYWJvdmUga2VlcHMgdGhlIGZvbGlvIGFsaXZlIGFjcm9zcyB0aGF0IHdpbmRvdy5cbitcdCAqL1xuK1x0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcbitcbiBcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG4rXG4rXHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XG4rXHRcdHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lvLmMgYi9tbS9wYWdlX2lvLmNcbmluZGV4IGIyM2Y0OTRmY2M4M2QuLjU4NmM3OWMzYmIzZDIgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2lvLmNcbisrKyBiL21tL3BhZ2VfaW8uY1xuQEAgLTQ1Niw2ICs0NTYsMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZXBhZ2VfYmRldl9hc3luYyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGVuZF9zd2FwX2Jpb193cml0ZTtcbiBcdGJpb19hZGRfZm9saW9fbm9mYWlsKGJpbywgZm9saW8sIGZvbGlvX3NpemUoZm9saW8pLCAwKTtcbiBcbitcdC8qXG4rXHQgKiBEcm9wcGluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSB0YWtlcyBzbGVlcGluZyBsb2Nrcywgc28gdGhlXG4rXHQgKiBjb21wbGV0aW9uIG11c3Qgbm90IHJ1biBpbiBpbnRlcnJ1cHQgY29udGV4dC5cbitcdCAqL1xuK1x0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG4rXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbitcbiBcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbyk7XG4gXHRjb3VudF9zd3BvdXRfdm1fZXZlbnQoZm9saW8pO1xuIFx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMwNCw5ICszMDQsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDcyN2ExN2VlNzgyMTEuLjIzMWZhODdjYmJlMGMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTQ4MywxMyArNDgzLDExIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcbiBcbi1cdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXG4tXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4gLyoqXG4tICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4rICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cbkBAIC01MDEsMTMgKzQ5OSwxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxuICAqXG4rICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXJcbisgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWVcbisgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cbisgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLlxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXG4gICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4ge1xuIFx0aW50IG9yZGVyLCBlcnI7XG4gXHRzdHJ1Y3QgZm9saW8gKnJldDtcbkBAIC01MzUsNiArNTM3LDQ3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvIC0gZHJvcCBhIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpb1xuKyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWRcbisgKlxuKyAqIENvbnRleHQ6IHRhc2sgY29udGV4dCwgd2l0aCB0aGUgcmVmZXJlbmNlIHRha2VuIGJ5IGZvbGlvX2VuZF93cml0ZWJhY2soKVxuKyAqIGRvbmF0ZWQgdG8gdXMuXG4rICovXG4rdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1xuK1x0Zm9saW9fbG9jayhmb2xpbyk7XG4rXG4rXHQvKiBUaGUgZm9saW8gd2FzIGFsbG9jYXRlZCBvZmYgdGhlIExSVSBhbmQgbm90aGluZyByZS1hZGRzIGl0IGhlcmUuICovXG4rXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbitcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKVxuK1x0XHRtZW1jZyA9IE5VTEw7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdC8qXG4rXHQgKiBHYXRlIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZ1xuK1x0ICogc3dhcGluIG1heSBoYXZlIGZyZWVkIHRoZSBzd2FwIHNsb3QgKGZvbGlvX2ZyZWVfc3dhcCgpKSBhbmQgZHJvcHBlZCB0aGVcbitcdCAqIGZvbGlvIGZyb20gdGhlIGNhY2hlLCBhbmQgaXQgbXVzdCBub3QgcnVuIG9uIGEgbm9uLXN3YXBjYWNoZSBmb2xpbyAoaXRcbitcdCAqIHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJ3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLlxuK1x0ICovXG4rXHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSB8fCBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHxcbitcdCAgICAhcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzd2FwX2FkZHJlc3Nfc3BhY2UoZm9saW8tXHUwMDNlc3dhcCksIGZvbGlvLCBtZW1jZykpIHtcbitcdFx0LyogUmFjZWQ6IHRoZSBmb2xpbyBpcyBub3cgb3duZWQgYnkgdGhlIHN3YXBpbjsgcHV0IGl0IGJhY2suICovXG4rXHRcdGZvbGlvX2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pO1xuK1x0XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbitcdH1cbitcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcbitcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXHRmb2xpb19wdXQoZm9saW8pO1xuK31cbitcbiAvKlxuICAqIElmIHdlIGFyZSB0aGUgb25seSB1c2VyLCB0aGVuIHRyeSB0byBmcmVlIHVwIHRoZSBzd2FwIGNhY2hlLlxuICAqXG5AQCAtNjQzLDEyICs2ODYsMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuK1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIHBsdWcpO1xuIFx0aWYgKHJlYWRhaGVhZCkge1xuIFx0XHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcbkBAIC02ODMsMTIgKzcyNywxMyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuK1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbitcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggODQ4YmQzZTVlZWUyYi4uNGNjM2EzZWQ2ZGI2ZSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTc4MCw2ICs3ODAsMjIgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBsb25nIF9fcmVtb3ZlX21hcHBpbmdfdW5mcmVlemUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1lZCxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXG4re1xuK1x0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHlcbitcdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbitcdFx0ICogYXRvbWljIG9wZXJhdGlvbi5cbitcdFx0ICovXG4rXHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG4rXHRcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogcmVtb3ZlX21hcHBpbmcoKSAtIEF0dGVtcHQgdG8gcmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZy5cbiAgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXG5AQCAtNzk0LDE2ICs4MTAsMjggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqL1xuIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHlcbi1cdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbi1cdFx0ICogYXRvbWljIG9wZXJhdGlvbi5cbi1cdFx0ICovXG4tXHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG4tXHRcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCk7XG4rfVxuK1xuKy8qKlxuKyAqIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSAtIFJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcsIGFzIHJlY2xhaW0gZG9lcy5cbisgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdG8gcmVtb3ZlLlxuKyAqIEB0YXJnZXRfbWVtY2c6IFRoZSBtZW1jZyB0byBjaGFyZ2UgdGhlIGV2aWN0aW9uIHNoYWRvdyB0bzsgdGhlIGNhbGxlciBtdXN0XG4rICogICAgICAgICAgICAgICAga2VlcCBpdCBhbGl2ZSBhY3Jvc3MgdGhlIGNhbGwuXG4rICpcbisgKiBMaWtlIHJlbW92ZV9tYXBwaW5nKCksIGJ1dCBzdG9yZXMgYSB3b3JraW5nc2V0IGV2aWN0aW9uIHNoYWRvdyB0aGUgd2F5IHBhZ2VcbisgKiByZWNsYWltIGRvZXMsIHNvIHRoYXQgYSBsYXRlciByZWZhdWx0IGNhbiBiZSBkZXRlY3RlZCBhbmQgdGhlIGZvbGlvXG4rICogcmUtYWN0aXZhdGVkLlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpb1xuKyAqIGNvdWxkIG5vdCBiZSByZW1vdmVkLlxuKyAqIENvbnRleHQ6IFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgYSBzaW5nbGUgcmVmY291bnQgb24gdGhlIGZvbGlvIGFuZFxuKyAqIGhvbGQgaXRzIGxvY2suXG4rICovXG4rbG9uZyByZW1vdmVfbWFwcGluZ19yZWNsYWltKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdCAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxuK3tcbitcdHJldHVybiBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKG1hcHBpbmcsIGZvbGlvLCB0cnVlLCB0YXJnZXRfbWVtY2cpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggNzYxY2Q2OTllMGEzZS4uZDE2ODIyYTUxNmU4ZCAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0xMDAwLDggKzEwMDAsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4tXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbi1cdFx0XHRcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcbitcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4rXHRcdFx0XHRcdCBOT19JTlRFUkxFQVZFX0lOREVYKTtcbiBcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHQvKlxuQEAgLTEwNDUsMTIgKzEwNDUsMjYgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdC8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi9cbiBcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFxuLVx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXG4tXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XG4rXHRmb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG4rXG4rXHQvKlxuK1x0ICogRHJvcCBvdXIgcmVmZXJlbmNlIGJlZm9yZSBzdGFydGluZyB3cml0ZWJhY2sgc28gdGhlIHN3YXAgY2FjaGUgaG9sZHNcbitcdCAqIHRoZSBvbmx5IG9uZTogdGhlIGRyb3AgaW4gZm9saW9fZW5kX3dyaXRlYmFjaygpIG5lZWRzIHRoYXQgZm9yXG4rXHQgKiByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgdG8gc3VjY2VlZCwgb3RoZXJ3aXNlIHRoZSBmb2xpbyBpcyBoYW5kZWRcbitcdCAqIGJhY2sgdG8gcmVjbGFpbSBpbnN0ZWFkLlxuK1x0ICpcbitcdCAqIE5vdGhpbmcgY2FuIGZyZWUgdGhlIGZvbGlvIGluIHRoZSBtZWFudGltZTogd2UgaG9sZCB0aGUgZm9saW8gbG9ja1xuK1x0ICogdW50aWwgd3JpdGViYWNrIHN0YXJ0cywgUEdfd3JpdGViYWNrIHRoZW4gYmxvY2tzIHN3YXAgY2FjaGUgcmVtb3ZhbCxcbitcdCAqIGFuZCBmb2xpb19lbmRfd3JpdGViYWNrKCkgdGFrZXMgaXRzIG93biByZWZlcmVuY2UgYmVmb3JlIGNsZWFyaW5nXG4rXHQgKiBQR193cml0ZWJhY2sgYW5kIGRvbmF0ZXMgaXQgdG8gdGhlIGRyb3AuXG4rXHQgKi9cbitcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbiBcdF9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpO1xuIFxuK1x0cmV0dXJuIDA7XG4rXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDo1NDoyMC45NTY5OTIzNjdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNTA4NDA5MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBBbmFseXNpcyBvZiBTd2FwIENhY2hlIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyB0b3VjaGluZyB0aGUgc3dhcCwgcGFnZSBjYWNoZSwgYW5kIHpzd2FwIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHRoaXMgbmV3IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBmdW5jdGlvbiBhbmQgbW9kaWZpY2F0aW9ucyB0byBmb2xpbyBoYW5kbGluZyBkdXJpbmcgd3JpdGViYWNrLCBzcGVjaWZpY2FsbHkgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgZm9saW9zIHdpdGhpbiB0aGUgc3dhcCBjYWNoZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gKm1pZ2h0KiB1bmlxdWVseSBjYXRjaC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIG1vZGlmaWVzIGhvdyBmb2xpb3MgYXJlIG1hcmtlZCBhcyBcImRyb3BiZWhpbmRcIiwgYW5kIGFsdGVycyB0aGUgbGlmZWN5Y2xlIGluIHRoZSBzd2FwIGNhY2hlLiBJdCdzIGVzc2VudGlhbGx5IGFib3V0IGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCwgYWRkZWQgdG8gdGhlIExSVSAob3Igbm90KSwgYW5kIG1hbmFnZWQgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gVGhlIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGdvaW5nIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGhhdmUgYW55IGxvZ2ljIHRoYXQgd291bGQgY29uZGl0aW9uYWxseSBleGVjdXRlIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmUgYXJlbid0IGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYW55IGJvdW5kYXJ5IGNoZWNrcyBvciB2YXJpYWJsZSBsZW5ndGhzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblRoZSBwcmltYXJ5IGNvbmNlcm5zIEkgaGF2ZSBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIHRoZSB1c3VhbCBzdXNwZWN0czogdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzIChlLmcuLCBmb2xpb3MgYmVpbmcgbGVmdCBvZmYgdGhlIExSVSBvciBiZWluZyBkb3VibGUtZnJlZWQpLCBvciBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIFRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLlxuXG5MZXQncyBkbyBhIGRlZXAgZGl2ZSBhbmQgY29uZmlybSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBUaGUgaW1wb3J0YW50IHNlY3Rpb24gaXMgdGhhdCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBub3cgY2FsbHMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIGZvbGlvIGZvciB0aGUgc3dhcCBvciB6c3dhcCBlbnRyeS4gVGhlIGZvbGlvIG1lbW9yeSBpcyBwb3B1bGF0ZWQgYnkgZGVjb21wcmVzc2luZyB0aGUgenN3YXAgZW50cnkgaW50byBpdC4gSWYgdGhlIGRlY29tcHJlc3Npb24gZmFpbHMsIHRoZW4gdGhlIGZvbGlvIGlzIGRlbGV0ZWQgZnJvbSBzd2FwIGNhY2hlLCBvdGhlcndpc2UsIGl0IG1hcmtzIGl0IHVwLXRvLWRhdGUgYW5kIHdyaXRlcyBpdCBiYWNrLiBDcnVjaWFsbHksIHRoZXJlJ3Mgbm8gc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgKmV4cG9zZWQqIHRvIHVzZXIgc3BhY2UsIG9yIHdoZXJlIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgYWxsb2NhdGlvbiBhbmQgd3JpdGViYWNrIHBhdGguIFRoZSBjb2RlIGNhcmVmdWxseSBwb3B1bGF0ZXMgdGhlIGZvbGlvIHdpdGggdGhlIGRlY29tcHJlc3NlZCBkYXRhLiBUaGUgcHJpbWFyeSBjb25jZXJucyBJIHNlZSBhcmUgdXNlLWFmdGVyLWZyZWUgYnVncyAoZS5nLiwgZHJvcHBpbmcgYSByZWZlcmVuY2UgZWFybHkgYW5kIHRoZW4gYWNjZXNzaW5nIHRoZSBmb2xpbyksIG1lbW9yeSBsZWFrcywgb3IgYmFkIHBhZ2Ugc3RhdGUgaXNzdWVzIC0gYWxsIG9mIHdoaWNoIHdvdWxkIGJlIGZsYWdnZWQgYnkgc3RhbmRhcmQgVk0gZGVidWdnaW5nIHRvb2xzIG9yIEtBU0FOLlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBmb2xpbyBsaWZlY3ljbGUgaW4gdGhlIHN3YXAgY2FjaGUsIGludHJvZHVjZXMgYSBcImRyb3BiZWhpbmRcIiBtZWNoYW5pc20sIGFuZCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCAob2ZmLUxSVSkgYW5kIG1hbmFnZWQgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gVGhlIHBvdGVudGlhbCBidWdzIGFyZSBwcmltYXJpbHkgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgYW5kIHBhZ2Ugc3RhdGUgaXNzdWVzIC0gYWxsIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnIG9wdGlvbnMsIGFuZCBwYWdlIHJlZmVyZW5jZSB0cmFja2luZy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMgbm9yIHBhcnNpbmcgbG9naWMgb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiBpcyBub3QganVzdGlmaWVkIGhlcmUuIFdlJ3JlIGxvb2tpbmcgYXQgcmVmZXJlbmNlIGNvdW50aW5nLCBMUlUgbGlzdCBtYW5hZ2VtZW50LCBhbmQgdGhlIG92ZXJhbGwgc3dhcCBjYWNoZSBsaWZlY3ljbGUuIFRoZXJlZm9yZSwgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBWTSBkZWJ1ZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4gSSB0aGluayB0aGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjYWxsLiBObyBuZWVkIGZvciBhIEtNU0FOIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNzcsIk91dHB1dFRva2VucyI6MjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjU5OjQxLjQ2NTQwNDE2NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBmb2xpb3MgaW4gdGhlIHN3YXAgY2FjaGUsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBhIFxcXCJkcm9wYmVoaW5kXFxcIiBtZWNoYW5pc20gZm9yIHpzd2FwIHdyaXRlYmFjay4gSXQgY2hhbmdlcyBob3cgZm9saW9zIGFyZSBhbGxvY2F0ZWQgZm9yIHRoZSBzd2FwIGNhY2hlIChyZXR1cm5pbmcgdGhlbSBvZmYtTFJVKSBhbmQgbWFuYWdlcyB0aGVpciByZWZlcmVuY2VzIGR1cmluZyB3cml0ZWJhY2suXFxuXFxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBwYWdlIHJlZmVyZW5jZSBjb3VudGluZywgTFJVIGxpc3QgbWFuYWdlbWVudCwgYW5kIHN3YXAgY2FjaGUgb3BlcmF0aW9ucy4gVGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzIChlLmcuLCBmb2xpb3MgbGVmdCBvZmYgdGhlIExSVSksIG9yIGludmFsaWQgcGFnZSBzdGF0ZXMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZWJ1ZyBvcHRpb25zIChsaWtlIGBDT05GSUdfREVCVUdfVk1gKSwgYW5kIHBhZ2UgcmVmZXJlbmNlIHRyYWNraW5nLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggcGFyc2luZyBsb2dpYyBvciBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmb2xpb3MgYWxsb2NhdGVkIGFyZSBwb3B1bGF0ZWQgdmlhIGRlY29tcHJlc3Npb24gYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gc3dhcCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBleHBvc2VkLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG9mIGZvbGlvcyBpbiB0aGUgc3dhcCBjYWNoZSwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGEgXFxcImRyb3BiZWhpbmRcXFwiIG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrLiBJdCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCBmb3IgdGhlIHN3YXAgY2FjaGUgKHJldHVybmluZyB0aGVtIG9mZi1MUlUpIGFuZCBtYW5hZ2VzIHRoZWlyIHJlZmVyZW5jZXMgZHVyaW5nIHdyaXRlYmFjay5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBMUlUgbGlzdCBtYW5hZ2VtZW50LCBhbmQgc3dhcCBjYWNoZSBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MgKGUuZy4sIGZvbGlvcyBsZWZ0IG9mZiB0aGUgTFJVKSwgb3IgaW52YWxpZCBwYWdlIHN0YXRlcy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnIG9wdGlvbnMgKGxpa2UgYENPTkZJR19ERUJVR19WTWApLCBhbmQgcGFnZSByZWZlcmVuY2UgdHJhY2tpbmcuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBwYXJzaW5nIGxvZ2ljIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGZvbGlvcyBhbGxvY2F0ZWQgYXJlIHBvcHVsYXRlZCB2aWEgZGVjb21wcmVzc2lvbiBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byBzd2FwLCBhbmQgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGlzIGV4cG9zZWQuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64hgc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 14:26:56 +0000 UTC FinishedAt: 2026-08-25 14:59:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON", "SWAP", "MEMCG", "CGROUPS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "55ab7e14222e5f0b0fd9f7711ca391d2924b35e3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "ZSWAP_DEFAULT_ON", "ZSWAP_SHRINKER_DEFAULT_ON", "SWAP", "MEMCG", "CGROUPS" ], "series_id": "f13bdcdd-222c-4f3c-ad2e-565181dd9893" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_writeback_dropbehind_folio", "remove_mapping_reclaim", "__swap_cache_alloc_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWFwcGluZ19yZWNsYWltJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgZm9saW9zIGluIHRoZSBzd2FwIGNhY2hlLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgYSBcJiMzNDtkcm9wYmVoaW5kXCYjMzQ7IG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrLiBJdCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCBmb3IgdGhlIHN3YXAgY2FjaGUgKHJldHVybmluZyB0aGVtIG9mZi1MUlUpIGFuZCBtYW5hZ2VzIHRoZWlyIHJlZmVyZW5jZXMgZHVyaW5nIHdyaXRlYmFjay5cblxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBwYWdlIHJlZmVyZW5jZSBjb3VudGluZywgTFJVIGxpc3QgbWFuYWdlbWVudCwgYW5kIHN3YXAgY2FjaGUgb3BlcmF0aW9ucy4gVGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzIChlLmcuLCBmb2xpb3MgbGVmdCBvZmYgdGhlIExSVSksIG9yIGludmFsaWQgcGFnZSBzdGF0ZXMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZWJ1ZyBvcHRpb25zIChsaWtlIGBDT05GSUdfREVCVUdfVk1gKSwgYW5kIHBhZ2UgcmVmZXJlbmNlIHRyYWNraW5nLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IHBhcnNpbmcgbG9naWMgb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZm9saW9zIGFsbG9jYXRlZCBhcmUgcG9wdWxhdGVkIHZpYSBkZWNvbXByZXNzaW9uIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHN3YXAsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgZXhwb3NlZC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gZHJvcCBzd2FwIGNhY2hlIGZvbGlvcyBhZnRlciB6c3dhcCB3cml0ZWJhY2sgY29tcGxldGVzLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBMUlUgcG9sbHV0aW9uLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGFuZCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAsIGFuZCBtb2RpZmllcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCB0byB1c2UgdGhpcyBtZWNoYW5pc20uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAsIHpzd2FwLCBwYWdlIGNhY2hlKSB0aGF0IGFmZmVjdHMgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgYmVoYXZpb3IsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFlMDg2Mjk5ODY0MDQ5ZWQ3NzY5OGVhZmVjMGVjMzc2NjBkZWYxNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxNDoyOTowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCA4ZjBmNjhlMjQ1YmFhLi4yOWVjNjBkY2FlMjEzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMzc0LDYgJiM0MzszNzQsOCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xuIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0Mztsb25nIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTtcbiBcbiAjaWYgZGVmaW5lZChDT05GSUdfU1lTRlMpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxuIGV4dGVybiBpbnQgcmVjbGFpbV9yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKTtcbkBAIC00NjUsNiAmIzQzOzQ2Nyw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XG4gICovXG4gYm9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4mIzQzO3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiYjNDM7XG4gLyogQWxsb2NhdGUgLyBmcmVlIChoaWJlcm5hdGlvbikgZXhjbHVzaXZlIGVudHJpZXMgKi9cbiBzd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpO1xuIHZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xuQEAgLTQ3NSw2ICYjNDM7NDc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4gfVxuIFxuICNlbHNlIC8qIENPTkZJR19TV0FQICovXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIHtcbiBcdHJldHVybiBOVUxMO1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggZDcyMTk4NmQ1ZjQ2NS4uMDQwYzk3YTEyMWRlZCAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jXG5AQCAtMTY4Niw2ICYjNDM7MTY4Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7XG4gICovXG4gdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuJiM0MztcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xuJiM0MztcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4gXHQvKlxuQEAgLTE2OTUsNyAmIzQzOzE2OTcsMjQgQEAgdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHQgKiByZXVzZWQgYmVmb3JlIHRoZSBmb2xpb193YWtlX2JpdCgpLlxuIFx0ICovXG4gXHRmb2xpb19nZXQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNhbXBsZSB0aGlzIGJlZm9yZSBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoKSBjbGVhcnNcbiYjNDM7XHQgKiBQR193cml0ZWJhY2s6IHVudGlsIHRoZW4gYSByYWNpbmcgc3dhcGluIGNhbm5vdCByZW1vdmUgdGhlIGZvbGlvIGZyb21cbiYjNDM7XHQgKiB0aGUgc3dhcCBjYWNoZS4gQWZ0ZXJ3YXJkcyBpdCBjYW4sIGFuZCB0aGUgZHJvcCBiZWxvdyB0aGVuIGZpbmRzIGFcbiYjNDM7XHQgKiBub24tc3dhcGNhY2hlIGZvbGlvIGFuZCBwdXRzIGl0IGJhY2sgb24gdGhlIExSVSBpbnN0ZWFkLiBUaGVcbiYjNDM7XHQgKiByZWZlcmVuY2UgdGFrZW4gYWJvdmUga2VlcHMgdGhlIGZvbGlvIGFsaXZlIGFjcm9zcyB0aGF0IHdpbmRvdy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzd2FwX2Ryb3BiZWhpbmQgPSBmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcbiYjNDM7XG4gXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xuJiM0MztcbiYjNDM7XHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XG4mIzQzO1x0XHRzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jXG5pbmRleCBiMjNmNDk0ZmNjODNkLi41ODZjNzljM2JiM2QyIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lvLmNcbkBAIC00NTYsNiAmIzQzOzQ1NiwxMyBAQCBzdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRiaW8tXHUwMDNlYmlfZW5kX2lvID0gZW5kX3N3YXBfYmlvX3dyaXRlO1xuIFx0YmlvX2FkZF9mb2xpb19ub2ZhaWwoYmlvLCBmb2xpbywgZm9saW9fc2l6ZShmb2xpbyksIDApO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogRHJvcHBpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdGFrZXMgc2xlZXBpbmcgbG9ja3MsIHNvIHRoZVxuJiM0MztcdCAqIGNvbXBsZXRpb24gbXVzdCBub3QgcnVuIGluIGludGVycnVwdCBjb250ZXh0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuJiM0MztcdFx0YmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spO1xuJiM0MztcbiBcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbyk7XG4gXHRjb3VudF9zd3BvdXRfdm1fZXZlbnQoZm9saW8pO1xuIFx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaFxuQEAgLTMwNCw5ICYjNDM7MzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA3MjdhMTdlZTc4MjExLi4yMzFmYTg3Y2JiZTBjIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC00ODMsMTMgJiM0Mzs0ODMsMTEgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIFxuLVx0LyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi9cbi1cdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0cmV0dXJuIGZvbGlvO1xuIH1cbiBcbiAvKipcbi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbiYjNDM7ICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cbkBAIC01MDEsMTMgJiM0Mzs0OTksMTcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cbiAgKlxuJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlclxuJiM0MzsgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWVcbiYjNDM7ICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXG4mIzQzOyAqXG4gICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuXG4gICogUmV0dXJuOiBSZXR1cm5zIHRoZSBmb2xpbyBpZiBhbGxvY2F0aW9uIHN1Y2NlZWRlZCBhbmQgZm9saW8gaXMgaW4gdGhlIHN3YXBcbiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLlxuICAqL1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4mIzQzO3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiYjNDM7XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbiB7XG4gXHRpbnQgb3JkZXIsIGVycjtcbiBcdHN0cnVjdCBmb2xpbyAqcmV0O1xuQEAgLTUzNSw2ICYjNDM7NTM3LDQ3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8gLSBkcm9wIGEgZHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvXG4mIzQzOyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWRcbiYjNDM7ICpcbiYjNDM7ICogQ29udGV4dDogdGFzayBjb250ZXh0LCB3aXRoIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgZm9saW9fZW5kX3dyaXRlYmFjaygpXG4mIzQzOyAqIGRvbmF0ZWQgdG8gdXMuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbiYjNDM7XG4mIzQzO1x0Zm9saW9fbG9jayhmb2xpbyk7XG4mIzQzO1xuJiM0MztcdC8qIFRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkIG9mZiB0aGUgTFJVIGFuZCBub3RoaW5nIHJlLWFkZHMgaXQgaGVyZS4gKi9cbiYjNDM7XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbiYjNDM7XHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSlcbiYjNDM7XHRcdG1lbWNnID0gTlVMTDtcbiYjNDM7XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBHYXRlIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZ1xuJiM0MztcdCAqIHN3YXBpbiBtYXkgaGF2ZSBmcmVlZCB0aGUgc3dhcCBzbG90IChmb2xpb19mcmVlX3N3YXAoKSkgYW5kIGRyb3BwZWQgdGhlXG4mIzQzO1x0ICogZm9saW8gZnJvbSB0aGUgY2FjaGUsIGFuZCBpdCBtdXN0IG5vdCBydW4gb24gYSBub24tc3dhcGNhY2hlIGZvbGlvIChpdFxuJiM0MztcdCAqIHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJiMzOTtzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSB8fCBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHxcbiYjNDM7XHQgICAgIXJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3dhcF9hZGRyZXNzX3NwYWNlKGZvbGlvLVx1MDAzZXN3YXApLCBmb2xpbywgbWVtY2cpKSB7XG4mIzQzO1x0XHQvKiBSYWNlZDogdGhlIGZvbGlvIGlzIG5vdyBvd25lZCBieSB0aGUgc3dhcGluOyBwdXQgaXQgYmFjay4gKi9cbiYjNDM7XHRcdGZvbGlvX2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pO1xuJiM0MztcdFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4mIzQzO1xuJiM0MztcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4mIzQzO1x0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIElmIHdlIGFyZSB0aGUgb25seSB1c2VyLCB0aGVuIHRyeSB0byBmcmVlIHVwIHRoZSBzd2FwIGNhY2hlLlxuICAqXG5AQCAtNjQzLDEyICYjNDM7Njg2LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbiYjNDM7XHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzQzO1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIHBsdWcpO1xuIFx0aWYgKHJlYWRhaGVhZCkge1xuIFx0XHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcbkBAIC02ODMsMTIgJiM0Mzs3MjcsMTMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbiYjNDM7XHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSKGZvbGlvKSlcbiBcdFx0cmV0dXJuIGZvbGlvO1xuIFxuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggODQ4YmQzZTVlZWUyYi4uNGNjM2EzZWQ2ZGI2ZSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTc4MCw2ICYjNDM7NzgwLDIyIEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGxvbmcgX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1lZCxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFVuZnJlZXppbmcgdGhlIHJlZmNvdW50IHdpdGggMSBlZmZlY3RpdmVseVxuJiM0MztcdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbiYjNDM7XHRcdCAqIGF0b21pYyBvcGVyYXRpb24uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG4mIzQzO1x0XHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiByZW1vdmVfbWFwcGluZygpIC0gQXR0ZW1wdCB0byByZW1vdmUgYSBmb2xpbyBmcm9tIGl0cyBtYXBwaW5nLlxuICAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS5cbkBAIC03OTQsMTYgJiM0Mzs4MTAsMjggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqL1xuIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHlcbi1cdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbi1cdFx0ICogYXRvbWljIG9wZXJhdGlvbi5cbi1cdFx0ICovXG4tXHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG4tXHRcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIC0gUmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZywgYXMgcmVjbGFpbSBkb2VzLlxuJiM0MzsgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXG4mIzQzOyAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHJlbW92ZS5cbiYjNDM7ICogQHRhcmdldF9tZW1jZzogVGhlIG1lbWNnIHRvIGNoYXJnZSB0aGUgZXZpY3Rpb24gc2hhZG93IHRvOyB0aGUgY2FsbGVyIG11c3RcbiYjNDM7ICogICAgICAgICAgICAgICAga2VlcCBpdCBhbGl2ZSBhY3Jvc3MgdGhlIGNhbGwuXG4mIzQzOyAqXG4mIzQzOyAqIExpa2UgcmVtb3ZlX21hcHBpbmcoKSwgYnV0IHN0b3JlcyBhIHdvcmtpbmdzZXQgZXZpY3Rpb24gc2hhZG93IHRoZSB3YXkgcGFnZVxuJiM0MzsgKiByZWNsYWltIGRvZXMsIHNvIHRoYXQgYSBsYXRlciByZWZhdWx0IGNhbiBiZSBkZXRlY3RlZCBhbmQgdGhlIGZvbGlvXG4mIzQzOyAqIHJlLWFjdGl2YXRlZC5cbiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHJlbW92ZWQgZnJvbSB0aGUgbWFwcGluZy4gIDAgaWYgdGhlIGZvbGlvXG4mIzQzOyAqIGNvdWxkIG5vdCBiZSByZW1vdmVkLlxuJiM0MzsgKiBDb250ZXh0OiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50IG9uIHRoZSBmb2xpbyBhbmRcbiYjNDM7ICogaG9sZCBpdHMgbG9jay5cbiYjNDM7ICovXG4mIzQzO2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgdHJ1ZSwgdGFyZ2V0X21lbWNnKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2UuLmQxNjgyMmE1MTZlOGQgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMTAwMCw4ICYjNDM7MTAwMCw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuJiM0MztcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4mIzQzO1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDQ1LDEyICYjNDM7MTA0NSwyNiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0LyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqL1xuIFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXG4tXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cbi1cdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbiYjNDM7XHRmb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRHJvcCBvdXIgcmVmZXJlbmNlIGJlZm9yZSBzdGFydGluZyB3cml0ZWJhY2sgc28gdGhlIHN3YXAgY2FjaGUgaG9sZHNcbiYjNDM7XHQgKiB0aGUgb25seSBvbmU6IHRoZSBkcm9wIGluIGZvbGlvX2VuZF93cml0ZWJhY2soKSBuZWVkcyB0aGF0IGZvclxuJiM0MztcdCAqIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSB0byBzdWNjZWVkLCBvdGhlcndpc2UgdGhlIGZvbGlvIGlzIGhhbmRlZFxuJiM0MztcdCAqIGJhY2sgdG8gcmVjbGFpbSBpbnN0ZWFkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90aGluZyBjYW4gZnJlZSB0aGUgZm9saW8gaW4gdGhlIG1lYW50aW1lOiB3ZSBob2xkIHRoZSBmb2xpbyBsb2NrXG4mIzQzO1x0ICogdW50aWwgd3JpdGViYWNrIHN0YXJ0cywgUEdfd3JpdGViYWNrIHRoZW4gYmxvY2tzIHN3YXAgY2FjaGUgcmVtb3ZhbCxcbiYjNDM7XHQgKiBhbmQgZm9saW9fZW5kX3dyaXRlYmFjaygpIHRha2VzIGl0cyBvd24gcmVmZXJlbmNlIGJlZm9yZSBjbGVhcmluZ1xuJiM0MztcdCAqIFBHX3dyaXRlYmFjayBhbmQgZG9uYXRlcyBpdCB0byB0aGUgZHJvcC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4gXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcbiBcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4gb3V0OlxuIFx0aWYgKHJldCkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mjk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWFwcGluZ19yZWNsYWltJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGRyb3Agc3dhcCBjYWNoZSBmb2xpb3MgYWZ0ZXIgenN3YXAgd3JpdGViYWNrIGNvbXBsZXRlcywgYXZvaWRpbmcgdW5uZWNlc3NhcnkgTFJVIHBvbGx1dGlvbi4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBhbmQgbW9kaWZpZXMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgdG8gdXNlIHRoaXMgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChzd2FwLCB6c3dhcCwgcGFnZSBjYWNoZSkgdGhhdCBhZmZlY3RzIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGJlaGF2aW9yLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZTA4NjI5OTg2NDA0OWVkNzc2OThlYWZlYzBlYzM3NjYwZGVmMTVmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTQ6Mjk6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oCmluZGV4IDhmMGY2OGUyNDViYWEuLjI5ZWM2MGRjYWUyMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc3dhcC5oCkBAIC0zNzQsNiAmIzQzOzM3NCw4IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzOwogbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7CiYjNDM7bG9uZyByZW1vdmVfbWFwcGluZ19yZWNsYWltKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJCSAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSAmYW1wOyZhbXA7IGRlZmluZWQoQ09ORklHX05VTUEpCiBleHRlcm4gaW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7CkBAIC00NjUsNiAmIzQzOzQ2Nyw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7CiAgKi8KIGJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogCiYjNDM7dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzOwogLyogQWxsb2NhdGUgLyBmcmVlIChoaWJlcm5hdGlvbikgZXhjbHVzaXZlIGVudHJpZXMgKi8KIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7CiB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTsKQEAgLTQ3NSw2ICYjNDM7NDc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpCiB9CiAKICNlbHNlIC8qIENPTkZJR19TV0FQICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge30KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSkKIHsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCBkNzIxOTg2ZDVmNDY1Li4wNDBjOTdhMTIxZGVkIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0xNjg2LDYgJiM0MzsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTsKICAqLwogdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiYjNDM7CWJvb2wgc3dhcF9kcm9wYmVoaW5kOwomIzQzOwogCVZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7CiAKIAkvKgpAQCAtMTY5NSw3ICYjNDM7MTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbykKIAkgKiByZXVzZWQgYmVmb3JlIHRoZSBmb2xpb193YWtlX2JpdCgpLgogCSAqLwogCWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNhbXBsZSB0aGlzIGJlZm9yZSBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoKSBjbGVhcnMKJiM0MzsJICogUEdfd3JpdGViYWNrOiB1bnRpbCB0aGVuIGEgcmFjaW5nIHN3YXBpbiBjYW5ub3QgcmVtb3ZlIHRoZSBmb2xpbyBmcm9tCiYjNDM7CSAqIHRoZSBzd2FwIGNhY2hlLiBBZnRlcndhcmRzIGl0IGNhbiwgYW5kIHRoZSBkcm9wIGJlbG93IHRoZW4gZmluZHMgYQomIzQzOwkgKiBub24tc3dhcGNhY2hlIGZvbGlvIGFuZCBwdXRzIGl0IGJhY2sgb24gdGhlIExSVSBpbnN0ZWFkLiBUaGUKJiM0MzsJICogcmVmZXJlbmNlIHRha2VuIGFib3ZlIGtlZXBzIHRoZSBmb2xpbyBhbGl2ZSBhY3Jvc3MgdGhhdCB3aW5kb3cuCiYjNDM7CSAqLwomIzQzOwlzd2FwX2Ryb3BiZWhpbmQgPSBmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgJmFtcDsmYW1wOwomIzQzOwkJCSAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsKIAlmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwomIzQzOwlpZiAoc3dhcF9kcm9wYmVoaW5kKSB7CiYjNDM7CQlzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTsKIAlmb2xpb19wdXQoZm9saW8pOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jCmluZGV4IGIyM2Y0OTRmY2M4M2QuLjU4NmM3OWMzYmIzZDIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lvLmMKQEAgLTQ1Niw2ICYjNDM7NDU2LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmMoc3RydWN0IGZvbGlvICpmb2xpbywKIAliaW8tJmd0O2JpX2VuZF9pbyA9IGVuZF9zd2FwX2Jpb193cml0ZTsKIAliaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGZvbGlvLCBmb2xpb19zaXplKGZvbGlvKSwgMCk7CiAKJiM0MzsJLyoKJiM0MzsJICogRHJvcHBpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdGFrZXMgc2xlZXBpbmcgbG9ja3MsIHNvIHRoZQomIzQzOwkgKiBjb21wbGV0aW9uIG11c3Qgbm90IHJ1biBpbiBpbnRlcnJ1cHQgY29udGV4dC4KJiM0MzsJICovCiYjNDM7CWlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKQomIzQzOwkJYmlvX3NldF9mbGFnKGJpbywgQklPX0NPTVBMRVRFX0lOX1RBU0spOwomIzQzOwogCWJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbyk7CiAJY291bnRfc3dwb3V0X3ZtX2V2ZW50KGZvbGlvKTsKIAlmb2xpb19zdGFydF93cml0ZWJhY2soZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmgKQEAgLTMwNCw5ICYjNDM7MzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7CiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7CiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pOwotc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCi0JCQkJICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7CiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTsKIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi8KIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCA3MjdhMTdlZTc4MjExLi4yMzFmYTg3Y2JiZTBjIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC00ODMsMTMgJiM0Mzs0ODMsMTEgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJbm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7CiAKLQkvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqLwotCWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXJldHVybiBmb2xpbzsKIH0KIAogLyoqCi0gKiBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KJiM0MzsgKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLgogICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3QKICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXJzOiBhbGxvY2F0aW9uIG9yZGVycywgbXVzdCBiZSBub24gemVybwpAQCAtNTAxLDEzICYjNDM7NDk5LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieQogICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLgogICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgZm9saW8gaXMgbG9ja2VkIGFuZCBpcyBOT1Qgb24gdGhlIExSVS4gVGhlIGNhbGxlciBtdXN0IGVpdGhlcgomIzQzOyAqIGFkZCBpdCB0byB0aGUgTFJVIHdpdGggZm9saW9fYWRkX2xydSgpIHNvIHBhZ2UgcmVjbGFpbSBjYW4gZmluZCBpdCwgb3IgZnJlZQomIzQzOyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLgomIzQzOyAqCiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy4KICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwCiAgKiBjYWNoZS4gUmV0dXJucyBlcnJvciBjb2RlIGlmIGZhaWxlZCBkdWUgdG8gcmFjZSwgT09NIG9yIGludmFsaWQgYXJndW1lbnRzLgogICovCi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiYjNDM7c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAomIzQzOwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC01MzUsNiAmIzQzOzUzNyw0NyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvIC0gZHJvcCBhIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpbwomIzQzOyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWQKJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IHRhc2sgY29udGV4dCwgd2l0aCB0aGUgcmVmZXJlbmNlIHRha2VuIGJ5IGZvbGlvX2VuZF93cml0ZWJhY2soKQomIzQzOyAqIGRvbmF0ZWQgdG8gdXMuCiYjNDM7ICovCiYjNDM7dm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CiYjNDM7CiYjNDM7CWZvbGlvX2xvY2soZm9saW8pOwomIzQzOwomIzQzOwkvKiBUaGUgZm9saW8gd2FzIGFsbG9jYXRlZCBvZmYgdGhlIExSVSBhbmQgbm90aGluZyByZS1hZGRzIGl0IGhlcmUuICovCiYjNDM7CVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwltZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTsKJiM0MzsJaWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpCiYjNDM7CQltZW1jZyA9IE5VTEw7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBHYXRlIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZwomIzQzOwkgKiBzd2FwaW4gbWF5IGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZQomIzQzOwkgKiBmb2xpbyBmcm9tIHRoZSBjYWNoZSwgYW5kIGl0IG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW8gKGl0CiYjNDM7CSAqIHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJiMzOTtzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS4KJiM0MzsJICovCiYjNDM7CWlmICghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIHx8IGZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSB8fAomIzQzOwkgICAgIXJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3dhcF9hZGRyZXNzX3NwYWNlKGZvbGlvLSZndDtzd2FwKSwgZm9saW8sIG1lbWNnKSkgewomIzQzOwkJLyogUmFjZWQ6IHRoZSBmb2xpbyBpcyBub3cgb3duZWQgYnkgdGhlIHN3YXBpbjsgcHV0IGl0IGJhY2suICovCiYjNDM7CQlmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsJCWZvbGlvX2FkZF9scnUoZm9saW8pOwomIzQzOwl9CiYjNDM7CiYjNDM7CW1lbV9jZ3JvdXBfcHV0KG1lbWNnKTsKJiM0MzsKJiM0MzsJZm9saW9fdW5sb2NrKGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogSWYgd2UgYXJlIHRoZSBvbmx5IHVzZXIsIHRoZW4gdHJ5IHRvIGZyZWUgdXAgdGhlIHN3YXAgY2FjaGUuCiAgKgpAQCAtNjQzLDEyICYjNDM7Njg2LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLAogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwotCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpOwomIzQzOwkJZm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAJc3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTsKIAlpZiAocmVhZGFoZWFkKSB7CiAJCWZvbGlvX3NldF9yZWFkYWhlYWQoZm9saW8pOwpAQCAtNjgzLDEyICYjNDM7NzI3LDEzIEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsCiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCiAJCXJldHVybiBmb2xpbzsKIAomIzQzOwlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlzd2FwX3JlYWRfZm9saW8oZm9saW8sIE5VTEwpOwogCXJldHVybiBmb2xpbzsKIH0KZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggODQ4YmQzZTVlZWUyYi4uNGNjM2EzZWQ2ZGI2ZSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTc4MCw2ICYjNDM7NzgwLDIyIEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBsb25nIF9fcmVtb3ZlX21hcHBpbmdfdW5mcmVlemUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcmVjbGFpbWVkLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKQomIzQzO3sKJiM0MzsJaWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIFVuZnJlZXppbmcgdGhlIHJlZmNvdW50IHdpdGggMSBlZmZlY3RpdmVseQomIzQzOwkJICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXIKJiM0MzsJCSAqIGF0b21pYyBvcGVyYXRpb24uCiYjNDM7CQkgKi8KJiM0MzsJCWZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7CiYjNDM7CQlyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIC8qKgogICogcmVtb3ZlX21hcHBpbmcoKSAtIEF0dGVtcHQgdG8gcmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZy4KICAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS4KQEAgLTc5NCwxNiAmIzQzOzgxMCwyOCBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAgKi8KIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7Ci0JaWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkgewotCQkvKgotCQkgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHkKLQkJICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXIKLQkJICogYXRvbWljIG9wZXJhdGlvbi4KLQkJICovCi0JCWZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7Ci0JCXJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7Ci0JfQotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgLSBSZW1vdmUgYSBmb2xpbyBmcm9tIGl0cyBtYXBwaW5nLCBhcyByZWNsYWltIGRvZXMuCiYjNDM7ICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLgomIzQzOyAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHJlbW92ZS4KJiM0MzsgKiBAdGFyZ2V0X21lbWNnOiBUaGUgbWVtY2cgdG8gY2hhcmdlIHRoZSBldmljdGlvbiBzaGFkb3cgdG87IHRoZSBjYWxsZXIgbXVzdAomIzQzOyAqICAgICAgICAgICAgICAgIGtlZXAgaXQgYWxpdmUgYWNyb3NzIHRoZSBjYWxsLgomIzQzOyAqCiYjNDM7ICogTGlrZSByZW1vdmVfbWFwcGluZygpLCBidXQgc3RvcmVzIGEgd29ya2luZ3NldCBldmljdGlvbiBzaGFkb3cgdGhlIHdheSBwYWdlCiYjNDM7ICogcmVjbGFpbSBkb2VzLCBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmUgZGV0ZWN0ZWQgYW5kIHRoZSBmb2xpbwomIzQzOyAqIHJlLWFjdGl2YXRlZC4KJiM0MzsgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgcGFnZXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXBwaW5nLiAgMCBpZiB0aGUgZm9saW8KJiM0MzsgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC4KJiM0MzsgKiBDb250ZXh0OiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50IG9uIHRoZSBmb2xpbyBhbmQKJiM0MzsgKiBob2xkIGl0cyBsb2NrLgomIzQzOyAqLwomIzQzO2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZykKJiM0Mzt7CiYjNDM7CXJldHVybiBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKG1hcHBpbmcsIGZvbGlvLCB0cnVlLCB0YXJnZXRfbWVtY2cpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDc2MWNkNjk5ZTBhM2UuLmQxNjgyMmE1MTZlOGQgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMTAwMCw4ICYjNDM7MTAwMCw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJCXJldHVybiAtRUVYSVNUOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKLQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKLQkJCQkgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiYjNDM7CWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCiYjNDM7CQkJCQkgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiAJcHV0X3N3YXBfZGV2aWNlKHNpKTsKIAogCS8qCkBAIC0xMDQ1LDEyICYjNDM7MTA0NSwyNiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCS8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi8KIAlmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTsKIAotCS8qIG1vdmUgaXQgdG8gdGhlIHRhaWwgb2YgdGhlIGluYWN0aXZlIGxpc3QgYWZ0ZXIgZW5kX3dyaXRlYmFjayAqLwotCWZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTsKJiM0MzsJZm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEcm9wIG91ciByZWZlcmVuY2UgYmVmb3JlIHN0YXJ0aW5nIHdyaXRlYmFjayBzbyB0aGUgc3dhcCBjYWNoZSBob2xkcwomIzQzOwkgKiB0aGUgb25seSBvbmU6IHRoZSBkcm9wIGluIGZvbGlvX2VuZF93cml0ZWJhY2soKSBuZWVkcyB0aGF0IGZvcgomIzQzOwkgKiByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgdG8gc3VjY2VlZCwgb3RoZXJ3aXNlIHRoZSBmb2xpbyBpcyBoYW5kZWQKJiM0MzsJICogYmFjayB0byByZWNsYWltIGluc3RlYWQuCiYjNDM7CSAqCiYjNDM7CSAqIE5vdGhpbmcgY2FuIGZyZWUgdGhlIGZvbGlvIGluIHRoZSBtZWFudGltZTogd2UgaG9sZCB0aGUgZm9saW8gbG9jawomIzQzOwkgKiB1bnRpbCB3cml0ZWJhY2sgc3RhcnRzLCBQR193cml0ZWJhY2sgdGhlbiBibG9ja3Mgc3dhcCBjYWNoZSByZW1vdmFsLAomIzQzOwkgKiBhbmQgZm9saW9fZW5kX3dyaXRlYmFjaygpIHRha2VzIGl0cyBvd24gcmVmZXJlbmNlIGJlZm9yZSBjbGVhcmluZwomIzQzOwkgKiBQR193cml0ZWJhY2sgYW5kIGRvbmF0ZXMgaXQgdG8gdGhlIGRyb3AuCiYjNDM7CSAqLwomIzQzOwlmb2xpb19wdXQoZm9saW8pOwogCiAJLyogc3RhcnQgd3JpdGViYWNrICovCiAJX19zd2FwX3dyaXRlcGFnZShmb2xpbywgTlVMTCk7CiAKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiBvdXQ6CiAJaWYgKHJldCkgewogCQlzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1MjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE1lbW9yeSBNYW5hZ2VtZW50IFN1YnN5c3RlbSoqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZy4gVGhpcyBwYXRjaCBzZXJpZXMgaXMgdG91Y2hpbmcgc29tZSBwcmV0dHkgY3JpdGljYWwgYml0cyBvZiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBtb2RpZnlpbmcgaGVhZGVycyBhbmQgY29kZSBpbiBgc3dhcC5oYCwgYGZpbGVtYXAuY2AsIGBwYWdlX2lvLmNgLCBgc3dhcF9zdGF0ZS5jYCwgYHZtc2Nhbi5jYCwgYW5kIGB6c3dhcC5jYC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzd2FwLCB6c3dhcCwgYW5kIHRoZSBwYWdlIGNhY2hlIOKAkyB0aGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIHF1ZXN0aW9uLiBUaGlzICpkZWZpbml0ZWx5KiBuZWVkcyBmdXp6aW5nLgoKTm93LCBsZXQmIzM5O3MgZ2V0IHNwZWNpZmljIGFib3V0IHdoZXJlIHRvIGZvY3VzIHRoZSBmdXp6aW5nIGVmZm9ydC4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIGFkZGVkIG9yIG1vZGlmaWVkLiBBbHJpZ2h0LCBuZXcgZnVuY3Rpb25zOiBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgYW5kIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYC4gQW5kIHRoZW4gbW9kaWZpZWQgZnVuY3Rpb25zOiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgLCBhbmQgYHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmNgLiBUaG9zZSBhcmUgb3VyIG1haW4gdGFyZ2V0cy4KCk5leHQsIEkgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgY29udGV4dCBvZiB0aGUgZnV6emluZy4gTGV0IG1lIGNoZWNrIGlmIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIHN0YXRpYyBvciBub24tc3RhdGljLiBZdXAsIGl0JiMzOTtzIHN0YXRpYy4gT2theSwgbGV0JiMzOTtzIGNoZWNrIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLiBIbW0sIGJvdGggYXJlIG5vbi1zdGF0aWMuIFNvLCB0aGV5JiMzOTtyZSBleHBvc2VkIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcy4gYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIGFsc28gbm9uLXN0YXRpYywgc28gd2UgaGF2ZSBhIGZldyBlbnRyeSBwb2ludHMgdG8gY29uc2lkZXIuCgpPbmUgbW9yZSB0aGluZzogSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgd2UgaGF2ZSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgenN3YXAgYW5kIHN3YXAuIEl0IGxvb2tzIGxpa2Ugd2UgbmVlZCBgQ09ORklHX1pTV0FQYCwgYENPTkZJR19TV0FQYCwgYW5kIGBDT05GSUdfTUVNQ0dgLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBjb25maWdzIGFuZCBtYWtlIHN1cmUgdGhleSYjMzk7cmUgYWxsIHNldCBhcHByb3ByaWF0ZWx5IGZvciBvdXIgdGVzdGluZyBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXG4tLVxubW0vS2NvbmZpZy0yMS1cbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNC1cbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTU5PWNob2ljZVxuLS1cbm1tL0tjb25maWctNzYtXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxubW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7RGVmbGF0ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODItXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXG5tbS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtMWk9cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4LVxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0MlxubW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NC1cbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcbm1tL0tjb25maWctOTYtXHRib29sIFwmIzM0O0xaNFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTAwLVxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xubW0vS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O0xaNEhDXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDYtXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcbm1tL0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTExMy1cbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjgwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqWlNXQVAgRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gWlNXQVAgcmVsaWVzIGZ1bmRhbWVudGFsbHkgb24gdGhlIGV4aXN0ZW5jZSBhbmQgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIFNXQVAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIGFzc3VtcHRpb24sIGJ1dCBhc3N1bXB0aW9ucyBhcmUgdGhlIGVuZW15IG9mIHJvYnVzdCBzeXN0ZW1zLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgbGV0JiMzOTtzIG5vdCBqdXN0ICphc3N1bWUqIHRoYXQgY29ubmVjdGlvbiBpcyBzb2xpZC4gSSBuZWVkIHRvIGV4cGxpY2l0bHkgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgY29yZSBhcmNoaXRlY3R1cmFsIHJlbGF0aW9uc2hpcCBoZXJlLCBhbmQgYW55IGluc3RhYmlsaXR5IGluIFNXQVAsIG9yIGFuIGltcHJvcGVybHkgY29uZmlndXJlZCBkZXBlbmRlbmN5LCBjb3VsZCBjYXNjYWRlIGFuZCBjYXVzZSBzZXJpb3VzIGlzc3VlcyB3aXRoaW4gWlNXQVAmIzM5O3Mgb3ZlcmFsbCBmdW5jdGlvbi4gVGltZSB0byBkaWcgaW50byB0aG9zZSBaU1dBUCBkZXBlbmRlbmNpZXMgYW5kIG1hcCBvdXQgZXZlcnkgcG9pbnQgb2YgaW50ZWdyYXRpb24gdG8gZW5zdXJlIHN0YWJpbGl0eSBhbmQgcHJlZGljdCBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcy4gTGV0JiMzOTtzIHNlZSBob3cgZGVlcCB0aGlzIHJhYmJpdCBob2xlIGdvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG5tbS9LY29uZmlnOjE0Olx0ZGVwZW5kcyBvbiBNTVUgXHUwMDI2XHUwMDI2IEJMT0NLIFx1MDAyNlx1MDAyNiAhQVJDSF9OT19TV0FQXG5tbS9LY29uZmlnLTE1LVx0ZGVmYXVsdCB5XG4tLVxubW0vS2NvbmZpZz0yMj1jb25maWcgWlNXQVBcbm1tL0tjb25maWctMjMtXHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbm1tL0tjb25maWc6MjQ6XHRkZXBlbmRzIG9uIFNXQVBcbm1tL0tjb25maWctMjUtXHRzZWxlY3QgQ1JZUFRPXG4tLVxubW0vS2NvbmZpZz0zNT1jb25maWcgWlNXQVBfREVGQVVMVF9PTlxubW0vS2NvbmZpZy0zNi1cdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbm1tL0tjb25maWc6Mzc6XHRkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTM4LVx0aGVscFxuLS1cbm1tL0tjb25maWc9NDU9Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbm1tL0tjb25maWc6NDc6XHRkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTQ4LVx0ZGVmYXVsdCBuXG4tLVxubW0vS2NvbmZpZz01OT1jaG9pY2Vcbm1tL0tjb25maWctNjAtXHRwcm9tcHQgXCYjMzQ7RGVmYXVsdCBjb21wcmVzc29yXCYjMzQ7XG5tbS9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBaU1dBUFxubW0vS2NvbmZpZy02Mi1cdGRlZmF1bHQgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xuLS1cbm1tL0tjb25maWc9MTE0PWNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbm1tL0tjb25maWc6MTE2OiAgICAgICBkZXBlbmRzIG9uIFpTV0FQXG5tbS9LY29uZmlnLTExNy0gICAgICAgZGVmYXVsdCBcJiMzNDtkZWZsYXRlXCYjMzQ7IGlmIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXG4tLVxubW0vS2NvbmZpZz0xMzA9bWVudSBcJiMzNDtac21hbGxvYyBhbGxvY2F0b3Igb3B0aW9uc1wmIzM0O1xubW0vS2NvbmZpZzoxMzE6XHRkZXBlbmRzIG9uIFpTTUFMTE9DXG5tbS9LY29uZmlnLTEzMi1cbi0tXG5tbS9LY29uZmlnPTE3Mj1jb25maWcgS1ZGUkVFX1JDVV9CQVRDSEVEXG5tbS9LY29uZmlnLTE3My1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTc0Olx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZIFx1MDAyNlx1MDAyNiAhVElOWV9SQ1Vcbm1tL0tjb25maWc6MTc1Olx0ZGVwZW5kcyBvbiAhUkNVX1NUUklDVF9HUkFDRV9QRVJJT0Rcbm1tL0tjb25maWctMTc2LVxubW0vS2NvbmZpZz0xNzc9Y29uZmlnIFNMVUJfVElOWVxubW0vS2NvbmZpZy0xNzgtXHRib29sIFwmIzM0O0NvbmZpZ3VyZSBmb3IgbWluaW1hbCBtZW1vcnkgZm9vdHByaW50XCYjMzQ7XG5tbS9LY29uZmlnOjE3OTpcdGRlcGVuZHMgb24gRVhQRVJUIFx1MDAyNlx1MDAyNiAhQ09NUElMRV9URVNUXG5tbS9LY29uZmlnLTE4MC1cdHNlbGVjdCBTTEFCX01FUkdFX0RFRkFVTFRcbi0tXG5tbS9LY29uZmlnPTIwND1jb25maWcgU0xBQl9GUkVFTElTVF9SQU5ET01cbm1tL0tjb25maWctMjA1LVx0Ym9vbCBcJiMzNDtSYW5kb21pemUgc2xhYiBmcmVlbGlzdFwmIzM0O1xubW0vS2NvbmZpZzoyMDY6XHRkZXBlbmRzIG9uICFTTFVCX1RJTllcbm1tL0tjb25maWctMjA3LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MjEyPWNvbmZpZyBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXG5tbS9LY29uZmlnLTIxMy1cdGJvb2wgXCYjMzQ7SGFyZGVuIHNsYWIgZnJlZWxpc3QgbWV0YWRhdGFcJiMzNDtcbm1tL0tjb25maWc6MjE0Olx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXG5tbS9LY29uZmlnLTIxNS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTIyMT1jb25maWcgU0xBQl9CVUNLRVRTXG5tbS9LY29uZmlnLTIyMi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBhbGxvY2F0aW9uIGZyb20gc2VwYXJhdGUga21hbGxvYyBidWNrZXRzXCYjMzQ7XG5tbS9LY29uZmlnOjIyMzpcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxubW0vS2NvbmZpZy0yMjQtXHRkZWZhdWx0IFNMQUJfRlJFRUxJU1RfSEFSREVORURcbi0tXG5tbS9LY29uZmlnPTIzOD1jb25maWcgU0xVQl9TVEFUU1xuLS1cbm1tL0tjb25maWctMjQwLVx0Ym9vbCBcJiMzNDtFbmFibGUgcGVyZm9ybWFuY2Ugc3RhdGlzdGljc1wmIzM0O1xubW0vS2NvbmZpZzoyNDE6XHRkZXBlbmRzIG9uIFNZU0ZTIFx1MDAyNlx1MDAyNiAhU0xVQl9USU5ZXG5tbS9LY29uZmlnLTI0Mi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTI1MT1jb25maWcgS01BTExPQ19QQVJUSVRJT05fQ0FDSEVTXG5tbS9LY29uZmlnOjI1MjpcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxubW0vS2NvbmZpZy0yNTMtXHRib29sIFwmIzM0O1BhcnRpdGlvbmVkIHNsYWIgY2FjaGVzIGZvciBub3JtYWwga21hbGxvY1wmIzM0O1xuLS1cbm1tL0tjb25maWc9MjY3PWNob2ljZVxubW0vS2NvbmZpZy0yNjgtXHRwcm9tcHQgXCYjMzQ7UGFydGl0aW9uZWQgc2xhYiBjYWNoZSBtb2RlXCYjMzQ7XG5tbS9LY29uZmlnOjI2OTpcdGRlcGVuZHMgb24gS01BTExPQ19QQVJUSVRJT05fQ0FDSEVTXG5tbS9LY29uZmlnLTI3MC1cdGRlZmF1bHQgS01BTExPQ19QQVJUSVRJT05fVFlQRUQgaWYgQ0NfSEFTX0FMTE9DX1RPS0VOXG4tLVxubW0vS2NvbmZpZz0yODc9Y29uZmlnIEtNQUxMT0NfUEFSVElUSU9OX1RZUEVEXG5tbS9LY29uZmlnLTI4OC1cdGJvb2wgXCYjMzQ7VHlwZSBiYXNlZCBzbGFiIGNhY2hlIHNlbGVjdGlvbiBmb3Igbm9ybWFsIGttYWxsb2NcJiMzNDtcbm1tL0tjb25maWc6Mjg5Olx0ZGVwZW5kcyBvbiBDQ19IQVNfQUxMT0NfVE9LRU5cbm1tL0tjb25maWctMjkwLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MzU4PWNvbmZpZyBNTUFQX0FMTE9XX1VOSU5JVElBTElaRURcbm1tL0tjb25maWctMzU5LVx0Ym9vbCBcJiMzNDtBbGxvdyBtbWFwcGVkIGFub255bW91cyBtZW1vcnkgdG8gYmUgdW5pbml0aWFsaXplZFwmIzM0O1xubW0vS2NvbmZpZzozNjA6XHRkZXBlbmRzIG9uIEVYUEVSVCBcdTAwMjZcdTAwMjYgIU1NVVxubW0vS2NvbmZpZy0zNjEtXHRkZWZhdWx0IG5cbi0tXG5tbS9LY29uZmlnPTM4MD1jb25maWcgU0VMRUNUX01FTU9SWV9NT0RFTFxubW0vS2NvbmZpZy0zODEtXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjM4MjpcdGRlcGVuZHMgb24gQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMXG5tbS9LY29uZmlnLTM4My1cbm1tL0tjb25maWc9Mzg0PWNob2ljZVxubW0vS2NvbmZpZy0zODUtXHRwcm9tcHQgXCYjMzQ7TWVtb3J5IG1vZGVsXCYjMzQ7XG5tbS9LY29uZmlnOjM4NjpcdGRlcGVuZHMgb24gU0VMRUNUX01FTU9SWV9NT0RFTFxubW0vS2NvbmZpZy0zODctXHRkZWZhdWx0IFNQQVJTRU1FTV9NQU5VQUwgaWYgQVJDSF9TUEFSU0VNRU1fREVGQVVMVFxuLS1cbm1tL0tjb25maWc9Mzk1PWNvbmZpZyBGTEFUTUVNX01BTlVBTFxubW0vS2NvbmZpZy0zOTYtXHRib29sIFwmIzM0O0ZsYXQgTWVtb3J5XCYjMzQ7XG5tbS9LY29uZmlnOjM5NzpcdGRlcGVuZHMgb24gIUFSQ0hfU1BBUlNFTUVNX0VOQUJMRSB8fCBBUkNIX0ZMQVRNRU1fRU5BQkxFXG5tbS9LY29uZmlnLTM5OC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTQxMD1jb25maWcgU1BBUlNFTUVNX01BTlVBTFxubW0vS2NvbmZpZy00MTEtXHRib29sIFwmIzM0O1NwYXJzZSBNZW1vcnlcJiMzNDtcbm1tL0tjb25maWc6NDEyOlx0ZGVwZW5kcyBvbiBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcbm1tL0tjb25maWctNDEzLVx0aGVscFxuLS1cbm1tL0tjb25maWc9NDI1PWNvbmZpZyBTUEFSU0VNRU1cbm1tL0tjb25maWctNDI2LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo0Mjc6XHRkZXBlbmRzIG9uICghU0VMRUNUX01FTU9SWV9NT0RFTCBcdTAwMjZcdTAwMjYgQVJDSF9TUEFSU0VNRU1fRU5BQkxFKSB8fCBTUEFSU0VNRU1fTUFOVUFMXG5tbS9LY29uZmlnLTQyOC1cbm1tL0tjb25maWc9NDI5PWNvbmZpZyBGTEFUTUVNXG5tbS9LY29uZmlnLTQzMC1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NDMxOlx0ZGVwZW5kcyBvbiAhU1BBUlNFTUVNIHx8IEZMQVRNRU1fTUFOVUFMXG5tbS9LY29uZmlnLTQzMi1cbi0tXG5tbS9LY29uZmlnPTQ1MT1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcbm1tL0tjb25maWctNDUyLVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo0NTM6XHRkZXBlbmRzIG9uIFNQQVJTRU1FTSBcdTAwMjZcdTAwMjYgIVNQQVJTRU1FTV9TVEFUSUNcbm1tL0tjb25maWctNDU0LVxuLS1cbm1tL0tjb25maWc9NDU4PWNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxubW0vS2NvbmZpZy00NTktXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjQ2MDpcdGRlcGVuZHMgb24gU1BBUlNFTUVNIFx1MDAyNlx1MDAyNiBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcbm1tL0tjb25maWctNDYxLVx0aGVscFxuLS1cbm1tL0tjb25maWc9NDg0PWNvbmZpZyBIQVZFX0dVUF9GQVNUXG5tbS9LY29uZmlnOjQ4NTpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTQ4Ni1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTUwOD1jb25maWcgRVhDTFVTSVZFX1NZU1RFTV9SQU1cbm1tL0tjb25maWctNTA5LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo1MTA6XHRkZXBlbmRzIG9uICFERVZNRU0gfHwgU1RSSUNUX0RFVk1FTVxubW0vS2NvbmZpZy01MTEtXG4tLVxubW0vS2NvbmZpZz01MjM9bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xuLS1cbm1tL0tjb25maWctNTI1LVx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cbm1tL0tjb25maWc6NTI2Olx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxubW0vS2NvbmZpZzo1Mjc6XHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnOjUyODpcdGRlcGVuZHMgb24gNjRCSVRcbm1tL0tjb25maWctNTI5LVx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPIGlmIE5VTUFcbi0tXG5tbS9LY29uZmlnPTU5MT1jb25maWcgTUVNT1JZX0hPVFJFTU9WRVxuLS1cbm1tL0tjb25maWctNTkzLVx0c2VsZWN0IEhBVkVfQk9PVE1FTV9JTkZPX05PREUgaWYgWDg2XzY0XG5tbS9LY29uZmlnOjU5NDpcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTk1LVx0c2VsZWN0IE1JR1JBVElPTlxuLS1cbm1tL0tjb25maWc9NTk3PWNvbmZpZyBNSFBfTUVNTUFQX09OX01FTU9SWVxubW0vS2NvbmZpZy01OTgtXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjU5OTpcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUcgXHUwMDI2XHUwMDI2IFNQQVJTRU1FTV9WTUVNTUFQXG5tbS9LY29uZmlnOjYwMDpcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcbm1tL0tjb25maWctNjAxLVxuLS1cbm1tL0tjb25maWc9NjA0PWNvbmZpZyBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxuLS1cbm1tL0tjb25maWctNjEwLSMgRGVmYXVsdCB0byA0IGZvciB3aWRlciB0ZXN0aW5nLCB0aG91Z2ggOCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLlxubW0vS2NvbmZpZzo2MTE6IyBBUk0mIzM5O3MgYWRqdXN0X3B0ZSAodW51c2VkIGlmIFZJUFQpIGRlcGVuZHMgb24gbW0td2lkZSBwYWdlX3RhYmxlX2xvY2suXG5tbS9LY29uZmlnLTYxMi0jIFBBLVJJU0MgN3h4eCYjMzk7cyBzcGlubG9ja190IHdvdWxkIGVubGFyZ2Ugc3RydWN0IHBhZ2UgZnJvbSAzMiB0byA0NCBieXRlcy5cbi0tXG5tbS9LY29uZmlnPTYxOD1jb25maWcgU1BMSVRfUFRFX1BUTE9DS1Ncbm1tL0tjb25maWctNjE5LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzo2MjA6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzo2MjE6XHRkZXBlbmRzIG9uIFNNUFxubW0vS2NvbmZpZzo2MjI6XHRkZXBlbmRzIG9uIE5SX0NQVVMgXHUwMDNlPSA0XG5tbS9LY29uZmlnOjYyMzpcdGRlcGVuZHMgb24gIUFSTSB8fCBDUFVfQ0FDSEVfVklQVFxubW0vS2NvbmZpZzo2MjQ6XHRkZXBlbmRzIG9uICFQQVJJU0MgfHwgUEEyMFxubW0vS2NvbmZpZzo2MjU6XHRkZXBlbmRzIG9uICFTUEFSQzMyXG5tbS9LY29uZmlnOjYyNjpcdGRlcGVuZHMgb24gIVVNTFxubW0vS2NvbmZpZy02MjctXG4tLVxubW0vS2NvbmZpZz02MzE9Y29uZmlnIFNQTElUX1BNRF9QVExPQ0tTXG5tbS9LY29uZmlnLTYzMi1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6NjMzOlx0ZGVwZW5kcyBvbiBTUExJVF9QVEVfUFRMT0NLUyBcdTAwMjZcdTAwMjYgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DS1xubW0vS2NvbmZpZy02MzQtXG4tLVxubW0vS2NvbmZpZz02NDI9Y29uZmlnIEJBTExPT05fTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02NDQtXHRkZWZhdWx0IHlcbm1tL0tjb25maWc6NjQ1Olx0ZGVwZW5kcyBvbiBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IEJBTExPT05cbm1tL0tjb25maWctNjQ2LVx0aGVscFxuLS1cbm1tL0tjb25maWc9NjU0PWNvbmZpZyBDT01QQUNUSU9OXG4tLVxubW0vS2NvbmZpZy02NTctXHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnOjY1ODpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTY1OS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTY2OT1jb25maWcgQ09NUEFDVF9VTkVWSUNUQUJMRV9ERUZBVUxUXG5tbS9LY29uZmlnLTY3MC1cdGludFxubW0vS2NvbmZpZzo2NzE6XHRkZXBlbmRzIG9uIENPTVBBQ1RJT05cbm1tL0tjb25maWctNjcyLVx0ZGVmYXVsdCAwIGlmIFBSRUVNUFRfUlRcbi0tXG5tbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cbi0tXG5tbS9LY29uZmlnLTY4Ny1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZzo2ODg6XHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZy02ODktXHRzZWxlY3QgTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG5tbS9LY29uZmlnOjY5ODpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTY5OS1cbi0tXG5tbS9LY29uZmlnPTc0MD1jb25maWcgS1NNXG5tbS9LY29uZmlnLTc0MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXCYjMzQ7XG5tbS9LY29uZmlnOjc0MjpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTc0My1cdHNlbGVjdCBYWEhBU0hcbi0tXG5tbS9LY29uZmlnPTc1NT1jb25maWcgREVGQVVMVF9NTUFQX01JTl9BRERSXG5tbS9LY29uZmlnLTc1Ni1cdGludCBcJiMzNDtMb3cgYWRkcmVzcyBzcGFjZSB0byBwcm90ZWN0IGZyb20gdXNlciBhbGxvY2F0aW9uXCYjMzQ7XG5tbS9LY29uZmlnOjc1NzpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTc1OC1cdGRlZmF1bHQgNDA5NlxuLS1cbm1tL0tjb25maWc9Nzc3PWNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZzo3Nzg6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZzo3Nzk6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbm1tL0tjb25maWctNzgwLVx0Ym9vbCBcJiMzNDtFbmFibGUgcmVjb3ZlcnkgZnJvbSBoYXJkd2FyZSBtZW1vcnkgZXJyb3JzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz03ODg9Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxubW0vS2NvbmZpZy03ODktXHR0cmlzdGF0ZSBcJiMzNDtIV1BvaXNvbiBwYWdlcyBpbmplY3RvclwmIzM0O1xubW0vS2NvbmZpZzo3OTA6XHRkZXBlbmRzIG9uIE1FTU9SWV9GQUlMVVJFIFx1MDAyNlx1MDAyNiBERUJVR19LRVJORUwgXHUwMDI2XHUwMDI2IFBST0NfRlNcbm1tL0tjb25maWctNzkxLVx0c2VsZWN0IFBST0NfUEFHRV9NT05JVE9SXG4tLVxubW0vS2NvbmZpZz03OTM9Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1Ncbm1tL0tjb25maWctNzk0LVx0aW50IFwmIzM0O1R1cm4gb24gbW1hcCgpIGV4Y2VzcyBzcGFjZSB0cmltbWluZyBiZWZvcmUgYm9vdGluZ1wmIzM0O1xubW0vS2NvbmZpZzo3OTU6XHRkZXBlbmRzIG9uICFNTVVcbm1tL0tjb25maWctNzk2LVx0ZGVmYXVsdCAxXG4tLVxubW0vS2NvbmZpZz04Mjc9Y29uZmlnIFBFUlNJU1RFTlRfSFVHRV9aRVJPX0ZPTElPXG5tbS9LY29uZmlnLTgyOC1cdGJvb2wgXCYjMzQ7QWxsb2NhdGUgYSBQTUQgc2l6ZWQgZm9saW8gZm9yIHplcm9pbmdcJiMzNDtcbm1tL0tjb25maWc6ODI5Olx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzAtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz04NDY9bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04NDctXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbm1tL0tjb25maWc6ODQ4Olx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG5tbS9LY29uZmlnLTg0OS1cdHNlbGVjdCBDT01QQUNUSU9OXG4tLVxubW0vS2NvbmZpZz05ODI9Y29uZmlnIFRIUF9TV0FQXG5tbS9LY29uZmlnLTk4My1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6OTg0Olx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRTX1RIUF9TV0FQIFx1MDAyNlx1MDAyNiBTV0FQIFx1MDAyNlx1MDAyNiA2NEJJVFxubW0vS2NvbmZpZy05ODUtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDI4PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQXG5tbS9LY29uZmlnLTEwMjktXHRkZWZfYm9vbCBuXG5tbS9LY29uZmlnOjEwMzA6XHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTEwMzEtXG5tbS9LY29uZmlnPTEwMzI9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxubW0vS2NvbmZpZy0xMDMzLVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxMDM0Olx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbm1tL0tjb25maWctMTAzNS1cbm1tL0tjb25maWc9MTAzNj1jb25maWcgQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG5tbS9LY29uZmlnLTEwMzctXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjEwMzg6XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVAgXHUwMDI2XHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL0tjb25maWctMTAzOS1cbi0tXG5tbS9LY29uZmlnPTEwNTA9Y29uZmlnIE5FRURfUEVSX0NQVV9LTVxubW0vS2NvbmZpZzoxMDUxOlx0ZGVwZW5kcyBvbiAhU01QIHx8ICFNTVVcbm1tL0tjb25maWctMTA1Mi1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTEwNjc9Y29uZmlnIENNQVxubW0vS2NvbmZpZy0xMDY4LVx0Ym9vbCBcJiMzNDtDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3JcJiMzNDtcbm1tL0tjb25maWc6MTA2OTpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTEwNzAtXHRzZWxlY3QgTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZz0xMDgyPWNvbmZpZyBDTUFfREVCVUdGU1xubW0vS2NvbmZpZy0xMDgzLVx0Ym9vbCBcJiMzNDtDTUEgZGVidWdmcyBpbnRlcmZhY2VcJiMzNDtcbm1tL0tjb25maWc6MTA4NDpcdGRlcGVuZHMgb24gQ01BIFx1MDAyNlx1MDAyNiBERUJVR19GU1xubW0vS2NvbmZpZy0xMDg1LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTA4OD1jb25maWcgQ01BX1NZU0ZTXG5tbS9LY29uZmlnLTEwODktXHRib29sIFwmIzM0O0NNQSBpbmZvcm1hdGlvbiB0aHJvdWdoIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xubW0vS2NvbmZpZzoxMDkwOlx0ZGVwZW5kcyBvbiBDTUEgXHUwMDI2XHUwMDI2IFNZU0ZTXG5tbS9LY29uZmlnLTEwOTEtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xMDk1PWNvbmZpZyBDTUFfQVJFQVNcbm1tL0tjb25maWctMTA5Ni1cdGludCBcJiMzNDtNYXhpbXVtIGNvdW50IG9mIHRoZSBDTUEgYXJlYXNcJiMzNDtcbm1tL0tjb25maWc6MTA5NzpcdGRlcGVuZHMgb24gQ01BXG5tbS9LY29uZmlnLTEwOTgtXHRkZWZhdWx0IDIwIGlmIE5VTUFcbi0tXG5tbS9LY29uZmlnPTExNDI9Y29uZmlnIE1FTV9TT0ZUX0RJUlRZXG5tbS9LY29uZmlnLTExNDMtXHRib29sIFwmIzM0O1RyYWNrIG1lbW9yeSBjaGFuZ2VzXCYjMzQ7XG5tbS9LY29uZmlnOjExNDQ6XHRkZXBlbmRzIG9uIENIRUNLUE9JTlRfUkVTVE9SRSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1NPRlRfRElSVFkgXHUwMDI2XHUwMDI2IFBST0NfRlNcbm1tL0tjb25maWctMTE0NS1cdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxuLS1cbm1tL0tjb25maWc9MTE1Nz1jb25maWcgU1RBQ0tfTUFYX0RFRkFVTFRfU0laRV9NQlxuLS1cbm1tL0tjb25maWctMTE2MC1cdHJhbmdlIDggMjA0OFxubW0vS2NvbmZpZzoxMTYxOlx0ZGVwZW5kcyBvbiBTVEFDS19HUk9XU1VQIFx1MDAyNlx1MDAyNiAoITY0QklUIHx8IENPTVBBVClcbm1tL0tjb25maWctMTE2Mi1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTExNjk9Y29uZmlnIERFRkVSUkVEX1NUUlVDVF9QQUdFX0lOSVRcbm1tL0tjb25maWctMTE3MC1cdGJvb2wgXCYjMzQ7RGVmZXIgaW5pdGlhbGlzYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIGt0aHJlYWRzXCYjMzQ7XG5tbS9LY29uZmlnOjExNzE6XHRkZXBlbmRzIG9uIFNQQVJTRU1FTVxubW0vS2NvbmZpZzoxMTcyOlx0ZGVwZW5kcyBvbiAhTkVFRF9QRVJfQ1BVX0tNXG5tbS9LY29uZmlnOjExNzM6XHRkZXBlbmRzIG9uIDY0QklUXG5tbS9LY29uZmlnOjExNzQ6XHRkZXBlbmRzIG9uICFLTVNBTlxubW0vS2NvbmZpZy0xMTc1LVx0c2VsZWN0IFBBREFUQVxuLS1cbm1tL0tjb25maWc9MTE5Mz1jb25maWcgSURMRV9QQUdFX1RSQUNLSU5HXG5tbS9LY29uZmlnLTExOTQtXHRib29sIFwmIzM0O0VuYWJsZSBpZGxlIHBhZ2UgdHJhY2tpbmdcJiMzNDtcbm1tL0tjb25maWc6MTE5NTpcdGRlcGVuZHMgb24gU1lTRlMgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZy0xMTk2LVx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4tLVxubW0vS2NvbmZpZz0xMjMxPWNvbmZpZyBaT05FX0RNQTMyXG5tbS9LY29uZmlnLTEyMzItXHRib29sIFwmIzM0O1N1cHBvcnQgRE1BMzIgem9uZVwmIzM0OyBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcbm1tL0tjb25maWc6MTIzMzpcdGRlcGVuZHMgb24gIVg4Nl8zMlxubW0vS2NvbmZpZy0xMjM0LVx0ZGVmYXVsdCB5IGlmIEFSTTY0XG4tLVxubW0vS2NvbmZpZz0xMjM2PWNvbmZpZyBaT05FX0RFVklDRVxubW0vS2NvbmZpZy0xMjM3LVx0Ym9vbCBcJiMzNDtEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XCYjMzQ7XG5tbS9LY29uZmlnOjEyMzg6XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnOjEyMzk6XHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RSRU1PVkVcbm1tL0tjb25maWc6MTI0MDpcdGRlcGVuZHMgb24gU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctMTI0MS1cdHNlbGVjdCBYQVJSQVlfTVVMVElcbi0tXG5tbS9LY29uZmlnPTEyNjA9Y29uZmlnIEhNTV9NSVJST1Jcbm1tL0tjb25maWctMTI2MS1cdGJvb2xcbm1tL0tjb25maWc6MTI2MjpcdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnLTEyNjMtXG4tLVxubW0vS2NvbmZpZz0xMjY3PWNvbmZpZyBERVZJQ0VfUFJJVkFURVxubW0vS2NvbmZpZy0xMjY4LVx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbm1tL0tjb25maWc6MTI2OTpcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTI3MC1cdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnPTEzMDY9Y29uZmlnIEdVUF9URVNUXG5tbS9LY29uZmlnLTEzMDctXHRib29sIFwmIzM0O0VuYWJsZSBpbmZyYXN0cnVjdHVyZSBmb3IgZ2V0X3VzZXJfcGFnZXMoKS1yZWxhdGVkIHVuaXQgdGVzdHNcJiMzNDtcbm1tL0tjb25maWc6MTMwODpcdGRlcGVuZHMgb24gREVCVUdfRlNcbm1tL0tjb25maWctMTMwOS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEzMjY9Y29tbWVudCBcJiMzNDtHVVBfVEVTVCBuZWVkcyB0byBoYXZlIERFQlVHX0ZTIGVuYWJsZWRcJiMzNDtcbm1tL0tjb25maWc6MTMyNzpcdGRlcGVuZHMgb24gIUdVUF9URVNUIFx1MDAyNlx1MDAyNiAhREVCVUdfRlNcbm1tL0tjb25maWctMTMyOC1cbi0tXG5tbS9LY29uZmlnPTEzMzI9Y29uZmlnIERNQVBPT0xfVEVTVFxubW0vS2NvbmZpZy0xMzMzLVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGEgbW9kdWxlIHRvIHJ1biB0aW1lIHRlc3RzIG9uIGRtYV9wb29sXCYjMzQ7XG5tbS9LY29uZmlnOjEzMzQ6XHRkZXBlbmRzIG9uIEhBU19ETUFcbm1tL0tjb25maWctMTMzNS1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEzNTY9Y29uZmlnIFNFQ1JFVE1FTVxuLS1cbm1tL0tjb25maWctMTM1OC1cdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbWZkX3NlY3JldCgpIHN5c3RlbSBjYWxsXCYjMzQ7IGlmIEVYUEVSVFxubW0vS2NvbmZpZzoxMzU5Olx0ZGVwZW5kcyBvbiBBUkNIX0hBU19TRVRfRElSRUNUX01BUFxubW0vS2NvbmZpZy0xMzYwLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTM2NT1jb25maWcgQU5PTl9WTUFfTkFNRVxubW0vS2NvbmZpZy0xMzY2LVx0Ym9vbCBcJiMzNDtBbm9ueW1vdXMgVk1BIG5hbWUgc3VwcG9ydFwmIzM0O1xubW0vS2NvbmZpZzoxMzY3Olx0ZGVwZW5kcyBvbiBQUk9DX0ZTIFx1MDAyNlx1MDAyNiBBRFZJU0VfU1lTQ0FMTFMgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZy0xMzY4LVxuLS1cbm1tL0tjb25maWc9MTM4OT1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXG5tbS9LY29uZmlnLTEzOTAtXHRib29sIFwmIzM0O0VuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXCYjMzQ7XG5tbS9LY29uZmlnOjEzOTE6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy0xMzkyLVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTM5Nz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xMzk5LVx0ZGVmYXVsdCB5XG5tbS9LY29uZmlnOjE0MDA6XHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxubW0vS2NvbmZpZy0xNDAxLVxuLS1cbm1tL0tjb25maWc9MTQwOT1jb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDEwLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG5tbS9LY29uZmlnOjE0MTE6XHRkZXBlbmRzIG9uIE1NVVxubW0vS2NvbmZpZy0xNDEyLVx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG5tbS9LY29uZmlnOjE0MTM6XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctMTQxNC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTE0MTg9Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDE5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xubW0vS2NvbmZpZzoxNDIwOlx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MjEtXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDI0PWNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjUtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xubW0vS2NvbmZpZzoxNDI2Olx0ZGVwZW5kcyBvbiBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MjctXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDMzPWNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDM0LVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxNDM1Olx0ZGVwZW5kcyBvbiBMUlVfR0VOIFx1MDAyNlx1MDAyNiBBUkNIX0hBU19IV19QVEVfWU9VTkdcbm1tL0tjb25maWctMTQzNi0jIH1cbi0tXG5tbS9LY29uZmlnPTE0NDE9Y29uZmlnIFBFUl9WTUFfTE9DS1xubW0vS2NvbmZpZy0xNDQyLVx0ZGVmX2Jvb2wgeVxubW0vS2NvbmZpZzoxNDQzOlx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBTTVBcbm1tL0tjb25maWctMTQ0NC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTE0NTA9Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG5tbS9LY29uZmlnLTE0NTEtXHRib29sXG5tbS9LY29uZmlnOjE0NTI6XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG5tbS9LY29uZmlnLTE0NTMtXG4tLVxubW0vS2NvbmZpZz0xNDYzPWNvbmZpZyBOVU1BX0VNVVxubW0vS2NvbmZpZy0xNDY0LVx0Ym9vbCBcJiMzNDtOVU1BIGVtdWxhdGlvblwmIzM0O1xubW0vS2NvbmZpZzoxNDY1Olx0ZGVwZW5kcyBvbiBOVU1BX01FTUJMS1Ncbm1tL0tjb25maWc6MTQ2NjpcdGRlcGVuZHMgb24gWDg2IHx8IEdFTkVSSUNfQVJDSF9OVU1BXG5tbS9LY29uZmlnLTE0NjctXHRoZWxwXG4tLVxubW0vS2NvbmZpZz0xNDgxPWNvbmZpZyBQVF9SRUNMQUlNXG5tbS9LY29uZmlnLTE0ODItXHRkZWZfYm9vbCB5XG5tbS9LY29uZmlnOjE0ODM6XHRkZXBlbmRzIG9uIE1NVV9HQVRIRVJfUkNVX1RBQkxFX0ZSRUUgXHUwMDI2XHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxubW0vS2NvbmZpZy0xNDg0LVx0aGVscFxuLS1cbm1tL0tjb25maWc9MTUwMD1jb25maWcgTEFaWV9NTVVfTU9ERV9LVU5JVF9URVNUXG5tbS9LY29uZmlnLTE1MDEtXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgdGhlIGxhenkgTU1VIG1vZGVcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xubW0vS2NvbmZpZzoxNTAyOlx0ZGVwZW5kcyBvbiBBUkNIX0hBU19MQVpZX01NVV9NT0RFXG5tbS9LY29uZmlnOjE1MDM6XHRkZXBlbmRzIG9uIEtVTklUXG5tbS9LY29uZmlnLTE1MDQtXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDQxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWVtb3J5IE1hbmFnZW1lbnQgRGVlcCBEaXZlIC0gSW5pdGlhbCBBc3Nlc3NtZW50KioKCkFscmlnaHQsIFpTV0FQIGlzIG9mZmljaWFsbHkgb25saW5lIGFuZCBvcGVyYXRpb25hbC4gRXhjZWxsZW50LCB3ZSYjMzk7cmUgbWFraW5nIHByb2dyZXNzLiBOb3csIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIHRoZSBNRU1DRyAoTWVtb3J5IENvbnRyb2wgR3JvdXBzKSBtZXRyaWNzIGFuZCBiZWhhdmlvcnMuIFdlIGhhdmUgWlNXQVAsIGJ1dCAqaG93KiBpcyBpdCBwZXJmb3JtaW5nIGluIHRoZSBjb250ZXh0IG9mIG91ciBleGlzdGluZyBtZW1vcnkgaGllcmFyY2h5IGFuZCB3b3JrbG9hZCBpc29sYXRpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjb25maWd1cmF0aW9uIGlzIG9wdGltYWwgZm9yIHRoaXMgZGVwbG95bWVudC4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0cmFja2luZyB0aGUga2V5IE1FTUNHIHBhcmFtZXRlcnMsIGVzcGVjaWFsbHkgc3dhcCB1c2FnZSwgcGFnZSBmYXVsdCByYXRlcywgYW5kIHJlY2xhaW0gc3RhdGlzdGljcyBmb3IgZWFjaCByZWxldmFudCBjZ3JvdXAuIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZXNlIHdpdGggcGVyZm9ybWFuY2UgZGF0YSBmcm9tIG90aGVyIG1vbml0b3JpbmcgdG9vbHMgdG8gYXNzZXNzIGFueSBwb3NzaWJsZSBib3R0bGVuZWNrcyBvciByZWdyZXNzaW9ucyBub3cgdGhhdCBaU1dBUCBpcyBhY3RpdmUuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIHByb2JhYmx5IGludm9sdmUgdmlzdWFsaXppbmcgdGhlIHJlbGV2YW50IG1ldHJpY3Mgb3ZlciB0aW1lLCBhbmQgcG9zc2libHkgYWRqdXN0aW5nIHRoZSBzZXR0aW5ncyBvZiB0aGUgY2dyb3VwcyB0byBzZWUgaWYgd2UgY2FuIGFjaGlldmUgYmV0dGVyIG92ZXJhbGwgcGVyZm9ybWFuY2UsIHdoaWNoIGlzIHdoYXQgSSBhbHdheXMgYWltIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNjc9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXG4tLVxuaW5pdC9LY29uZmlnLTEwNzYtXG5pbml0L0tjb25maWc6MTA3Nzpjb25maWcgTUVNQ0dcbmluaXQvS2NvbmZpZy0xMDc4LVx0Ym9vbCBcJiMzNDtNZW1vcnkgY29udHJvbGxlclwmIzM0O1xuLS1cbmluaXQvS2NvbmZpZy0xMDg1LVxuaW5pdC9LY29uZmlnOjEwODY6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcbmluaXQvS2NvbmZpZy0xMDg3LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDkyLVxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5NC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5OS1cbmluaXQvS2NvbmZpZzoxMTAwOmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDEtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDUxNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3k6IE1FTUNHIGFuZCBDR1JPVVBTKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBsb29raW5nIGF0IE1FTUNHLCBhbmQgaXQmIzM5O3MgcmluZ2luZyBhIGJlbGwuIEkga25vdyBpdCYjMzk7cyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byBDR1JPVVBTIOKAkyB0aGV5JiMzOTtyZSBwcmFjdGljYWxseSBzeW1iaW90aWMgaW4gdGhlIExpbnV4IGtlcm5lbC4gU28sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciBpbnRvIE1FTUNHJiMzOTtzIGJlaGF2aW9yIG9yIHRyb3VibGVzaG9vdCBhbnkgaXNzdWVzLCBJICphYnNvbHV0ZWx5KiBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgQ0dST1VQUy4gRXZlcnl0aGluZyBkb3duc3RyZWFtIGZyb20gaGVyZSBoaW5nZXMgb24gdGhhdCBmb3VuZGF0aW9uYWwgbGF5ZXIuIFRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBDR1JPVVBTIHNpdHVhdGlvbi4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgaW5pdGlhbCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENHUk9VUFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwNDU9Y29uZmlnIFNMQUJfT0JKX0VYVFxuLS1cbmluaXQvS2NvbmZpZy0xMDQ3LVxuaW5pdC9LY29uZmlnOjEwNDg6bWVudWNvbmZpZyBDR1JPVVBTXG5pbml0L0tjb25maWctMTA0OS1cdGJvb2wgXCYjMzQ7Q29udHJvbCBHcm91cCBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Nzk2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYFpTV0FQYCwgYFNXQVBgLCBhbmQgYE1FTUNHYCDigJMgdGhvc2UgYXJlIHRoZSBrZXkgYXJlYXMgaW1wYWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIE15IGluaXRpYWwgdGFzayBpcyB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBiZWVuIHRvdWNoZWQuIFRpbWUgdG8gbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VlIHdoYXQgZWxzZSBoYXMgYmVlbiBhZGRlZCBvciBtb2RpZmllZCBpbiB0aGUgcmVsZXZhbnQgbW9kdWxlcy4KCkkmIzM5O3ZlIGdvdCB0aGUgYWZmZWN0ZWQgZmlsZXM6IGBtbS9maWxlbWFwLmNgLCBgbW0vcGFnZV9pby5jYCwgYG1tL3N3YXAuaGAsIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vdm1zY2FuLmNgLCBhbmQgYG1tL3pzd2FwLmNgLiBBbHJpZ2h0LCBzbyBgbW0venN3YXAuY2AgaXMgY2xlYXJseSBjb25kaXRpb25hbCBvbiBgQ09ORklHX1pTV0FQYCwgbWFraW5nIHNlbnNlLiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgYG1tL3BhZ2VfaW8uY2AgYXJlIHRpZWQgdG8gYENPTkZJR19TV0FQYC4gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL2ZpbGVtYXAuY2AgYXJlIGFsd2F5cyBjb21waWxlZC4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgYG1tL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBidWlsZCBkZXBlbmRlbmNpZXMgYW5kIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyBJIGhhdmVuJiMzOTt0IHNwb3R0ZWQgeWV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c3dhcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG5tbS9NYWtlZmlsZS04MC1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNDUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgc3dhcF9zdGF0ZS5vYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgc3dhcF9zdGF0ZS5vYC4gSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBpdHMgbGlrZWx5IHJvbGU7IHRoZSBuYW1lIHNjcmVhbXMgJiMzNDtjb250ZXh0IHN3aXRjaGluZyYjMzQ7IG9yIGF0IGxlYXN0IHNvbWUgcGFydCBvZiB0aGUgcHJvY2Vzcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgcHJlY2lzZWx5ICp3aGF0KiBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzIHdpdGhpbiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZS4gSXMgaXQgdGhlIGNvcmUgc3RhdGUgbWFuYWdlbWVudCwgb3IganVzdCBhIHNtYWxsIHBpZWNlIHRoYXQgaW50ZXJmYWNlcyB3aXRoIHNvbWUgaGFyZHdhcmUgcmVnaXN0ZXJzPyBJcyB0aGlzIHBhcnQgb2YgYSBtb25vbGl0aGljIGtlcm5lbCBpbXBsZW1lbnRhdGlvbiBvciBzb21ldGhpbmcgbW9yZSBtb2R1bGFyPyBBcmUgd2UgdGFsa2luZyBhYm91dCB1c2VyLXNwYWNlIHN3YXBwaW5nLCBrZXJuZWwtbGV2ZWwsIG9yIGJvdGg/CgpJJiMzOTtsbCBzdGFydCBieSBkaXNhc3NlbWJsaW5nIGl0LiBJJiMzOTttIGxvb2tpbmcgZm9yIGtleSBpbnN0cnVjdGlvbnMg4oCTIGBtb3ZgIHRvIHNwZWNpZmljIHJlZ2lzdGVycywgbGlrZWx5IHRob3NlIGFzc29jaWF0ZWQgd2l0aCB0aGUgUHJvZ3JhbSBTdGF0dXMgV29yZCwgc3RhY2sgbWFuaXB1bGF0aW9ucywgcGVyaGFwcyBzb21lIGBzeXNjYWxsYCBpbnN0cnVjdGlvbnMgdGhhdCB3b3VsZCB0aWUgaW50byB0aGUgb3BlcmF0aW5nIHN5c3RlbSYjMzk7cyBzd2FwIHByaW1pdGl2ZXMuIEkmIzM5O2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGhpbnRzIG9mIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaG9sZCBwcm9jZXNzIHN0YXRlLiBBcmUgdGhlcmUgcG9pbnRlcnMgdG8gdGFzayBjb250cm9sIGJsb2Nrcywgb3IgcGVyaGFwcyBhIG1vcmUgZWxlZ2FudCBkZXNjcmlwdG9yIHN0cnVjdHVyZT8KCknigJlsbCBsb29rIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMuIFRoaXMgaXMgYSB2ZXJ5IGNvbW1vbiBjbHVlIGFzIHRvIHdoZXRoZXIgb3Igbm90IGl0JiMzOTtzIGEgc3RhbmQtYWxvbmUgZnVuY3Rpb24sIG9yIGlmIGl0IGhhcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gd2FudCB0byBpZGVudGlmeSBob3cgaXQgZ2V0cyBjYWxsZWQuIElzIGl0IHBhcnQgb2YgYSBzY2hlZHVsZWQgaW50ZXJydXB0LCBhIHRyYXAsIG9yIGlzIGl0IHRyaWdnZXJlZCBkaXJlY3RseSBieSBzb21lIHNvZnR3YXJlIGV2ZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIGlzIGNyaXRpY2FsLiBUaGUgY2FsbGluZyBjb252ZW50aW9uIG9mIHRoZSBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBleHRyZW1lbHkgaW1wb3J0YW50IGhlcmUuCgpJIGFudGljaXBhdGUgc2VlaW5nIGFzc2VtYmx5IHJlbGF0ZWQgdG8gc2F2aW5nIGFuZCByZXN0b3JpbmcgcmVnaXN0ZXIgY29udGV4dHMsIG1hbmFnaW5nIHRoZSBwYWdlIHRhYmxlcywgYW5kIHBvc3NpYmx5IGRlYWxpbmcgd2l0aCBjYWNoZSBjb2hlcmVuY2UuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHBlcmZvcm1hbmNlLWNyaXRpY2FsLCBzbyBJIGV4cGVjdCB0aGUgY29kZSB0byBiZSBvcHRpbWl6ZWQg4oCTIGhhbmQtY29kZWQgYXNzZW1ibHkgaXMgYSByZWFsIHBvc3NpYmlsaXR5LiBJ4oCZbGwga2VlcCBhIGNsb3NlIGV5ZSBmb3IgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb24gaXNzdWVzIG9yIGFyZWFzIG9mIGNvbmNlcm4sIHN1Y2ggYXMgcmFjZSBjb25kaXRpb25zIG9yIHN1YnRsZSBtZW1vcnkgbGVha3MuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3N0YXRlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTc2PWVuZGlmXG5tbS9NYWtlZmlsZS03Ny1cbm1tL01ha2VmaWxlOjc4Om9iai0kKENPTkZJR19TV0FQKVx0JiM0Mzs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVx0JiM0Mzs9IHpzd2FwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4ODcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDaGVja2luZyBTd2FwIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBNYW5hZ2VtZW50KioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZiBhZ2Fpbi4gUmlnaHQsIGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfWlNXQVBgIGFyZSBkZWZpbml0ZWx5IG5lY2Vzc2FyeSwgSSBrbm93IHRoYXQuIEJ1dCB3aGVyZSBhcmUgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zPyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgZGVwZW5kZW5jeSBzZXR0aW5ncyBmb3IgdGhlc2UuIE15IG5leHQgc3RlcCBpcyB0byBsb29rIGF0IHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCByaWdodD8gVGhhdCYjMzk7cyBpbiB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHNvcnQgdGhpcyBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWNvbnRyb2xcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mjc9S0NPVl9JTlNUUlVNRU5UX2ttZW1sZWFrLm8gOj0gblxubW0vTWFrZWZpbGU6Mjg6S0NPVl9JTlNUUlVNRU5UX21lbWNvbnRyb2wubyA6PSBuXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT0xMDQ9b2JqLSQoQ09ORklHX01FTUNHX1YxKSAmIzQzOz0gbWVtY29udHJvbC12MS5vXG5tbS9NYWtlZmlsZToxMDU6b2JqLSQoQ09ORklHX01FTUNHKSAmIzQzOz0gbWVtY29udHJvbC5vIHZtcHJlc3N1cmUub1xubW0vTWFrZWZpbGUtMTA2LWlmZGVmIENPTkZJR19CUEZfU1lTQ0FMTFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IGJwZl9tZW1jb250cm9sLm9cbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjI0MwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gSWRlbnRpZnlpbmcgRm9jdXMgU3ltYm9scyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjb250cm9sIGdyb3VwcywgYW5kIGl0IGxvb2tzIGxpa2UgYENPTkZJR19NRU1DR2AgaXMgZGVmaW5pdGVseSByZWxldmFudCDigJMgdGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBhcHByb3ByaWF0ZSBmb2N1cyBzeW1ib2xzLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCB0byBmaW5kIHRoZSBrZXkgQVBJIGVudHJ5IHBvaW50cyBmb3IgdGhpcyBtZW1vcnkgcmVjbGFpbSBhbmQgc3dhcCB3cml0ZWJhY2sgc2NlbmFyaW8uCgpBbHJpZ2h0LCBpbml0aWFsIGNhbmRpZGF0ZXM6IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIHNlZW0gcHJvbWlzaW5nLCB0aG9zZSBsb29rIGxpa2UgcG90ZW50aWFsIGVudHJ5IHBvaW50cy4gSSBhbHNvIHNlZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLiBIbW0sIHRyaWNreS4gVGhlIGluc3RydWN0aW9ucyBkbyBtZW50aW9uIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucyBvdmVyIGludGVybmFscy4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLCBldmVuIHRob3VnaCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyBzdGF0aWMsIGl0JiMzOTtzICpub3QqIGlubGluZWQuIEl0IG11c3QgYmUgY2FsbGVkIGZyb20gc29tZXdoZXJlIGVsc2UsIHBvc3NpYmx5IGFzIGEgY2FsbGJhY2suIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyBhY3R1YWxseSBpbnZva2VkLiBUaGF0IHdpbGwgY2xhcmlmeSBpZiBpdCYjMzk7cyBhIHN1aXRhYmxlIGNhbmRpZGF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enN3YXBfd3JpdGViYWNrX2VudHJ5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0venN3YXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS96c3dhcC5jPTkyND1zdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0venN3YXAuYy05ODYtICovXG5tbS96c3dhcC5jOjk4NzpzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxubW0venN3YXAuYy05ODgtXHRcdFx0XHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXG4tLVxubW0venN3YXAuYz0xMTAyPXN0YXRpYyBlbnVtIGxydV9zdGF0dXMgc2hyaW5rX21lbWNnX2NiKHN0cnVjdCBsaXN0X2hlYWQgKml0ZW0sIHN0cnVjdCBsaXN0X2xydV9vbmUgKmwsXG4tLVxubW0venN3YXAuYy0xMTI1LVx0ICogMS4gV2UgZXh0cmFjdCB0aGUgc3dwX2VudHJ5X3QgdG8gdGhlIHN0YWNrLCBhbGxvd2luZ1xubW0venN3YXAuYzoxMTI2Olx0ICogICAgenN3YXBfd3JpdGViYWNrX2VudHJ5KCkgdG8gcGluIHRoZSBzd2FwIGVudHJ5IGFuZFxubW0venN3YXAuYy0xMTI3LVx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnkmIzM5O3Ncbi0tXG5tbS96c3dhcC5jLTExNjAtXG5tbS96c3dhcC5jOjExNjE6XHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XG5tbS96c3dhcC5jLTExNjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE1lbW9yeSBSZWNsYW1hdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgc2hyaW5rX21lbWNnX2NiYC4gUmlnaHQsIHRoaXMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCYjMzk7cyB1c2VkIHdpdGggYGxpc3RfbHJ1X3Nocmlua19jYmAuIE15IGJyYWluIGltbWVkaWF0ZWx5IG1ha2VzIHRoZSBjb25uZWN0aW9uOiBUaGlzIGlzIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWNsYWltIHByb2Nlc3Mgd2l0aGluIGEgY2dyb3VwIGNvbnRleHQuIEFuZCBJIHNlZSB0aGF0IGBzaHJpbmtfbWVtY2dfY2JgIGNhbGxzIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGF0IHN1Z2dlc3RzIHRoaXMgY2FsbGJhY2sgaXMgaW52b2x2ZWQgaW4gd3JpdGluZyBtZW1vcnkgcGFnZXMgdG8genN3YXAgd2hlbiBhIG1lbWNnIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSwgd2hpY2ggbWVhbnMgaXQgaXMgYXR0ZW1wdGluZyB0byBmcmVlIHVwIG1lbW9yeS4KClNpbmNlIHRoZSBwYWdlcyB3aWxsIGhhdmUgdG8gZ28gc29tZXdoZXJlLCBsZXQgbWUgY2hlY2sgYGZvbGlvX2VuZF93cml0ZWJhY2tgLiBUaGlzIGlzIHByb2JhYmx5IHdoZXJlIHRoZSBkZXRhaWxzIGFyZSByZWdhcmRpbmcgdGhlIGFjdHVhbCBhY3Rpb24gb2YgdGhlIHdyaXRlYmFjayBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB1bmRlcmx5aW5nIHBhZ2Ugc3RydWN0dXJlLCBhbmQgdGhlcmVmb3JlIGl0IGlzIHRoZSBjcnVjaWFsIHBhcnQgdGhhdCBlbnN1cmVzIHRoZSBtZW1vcnkgaXMgYWN0dWFsbHkgd3JpdHRlbiBiYWNrLCBwb3RlbnRpYWxseSB0byB0aGUgc3dhcCBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZvbGlvX2VuZF93cml0ZWJhY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTE2NDU9RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpO1xuLS1cbm1tL2ZpbGVtYXAuYy0xNjQ3LS8qKlxubW0vZmlsZW1hcC5jOjE2NDg6ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXG5tbS9maWxlbWFwLmMtMTY0OS0gKiBAZm9saW86IFRoZSBmb2xpby5cbi0tXG5tbS9maWxlbWFwLmMtMTY1NS0gKi9cbm1tL2ZpbGVtYXAuYzoxNjU2OnZvaWQgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9maWxlbWFwLmMtMTY1Ny17XG4tLVxubW0vZmlsZW1hcC5jLTE2NzEtXG5tbS9maWxlbWFwLmM6MTY3MjpcdGlmIChfX2ZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pKVxubW0vZmlsZW1hcC5jLTE2NzMtXHRcdGZvbGlvX3dha2VfYml0KGZvbGlvLCBQR193cml0ZWJhY2spO1xuLS1cbm1tL2ZpbGVtYXAuYy0xNjc2LX1cbm1tL2ZpbGVtYXAuYzoxNjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7XG5tbS9maWxlbWFwLmMtMTY3OC1cbm1tL2ZpbGVtYXAuYy0xNjc5LS8qKlxubW0vZmlsZW1hcC5jOjE2ODA6ICogZm9saW9fZW5kX3dyaXRlYmFjayAtIEVuZCB3cml0ZWJhY2sgYWdhaW5zdCBhIGZvbGlvLlxubW0vZmlsZW1hcC5jLTE2ODEtICogQGZvbGlvOiBUaGUgZm9saW8uXG4tLVxubW0vZmlsZW1hcC5jLTE2ODYtICovXG5tbS9maWxlbWFwLmM6MTY4Nzp2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjg4LXtcbi0tXG5tbS9maWxlbWFwLmMtMTcwMS1cdC8qXG5tbS9maWxlbWFwLmM6MTcwMjpcdCAqIFNhbXBsZSB0aGlzIGJlZm9yZSBmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoKSBjbGVhcnNcbm1tL2ZpbGVtYXAuYy0xNzAzLVx0ICogUEdfd3JpdGViYWNrOiB1bnRpbCB0aGVuIGEgcmFjaW5nIHN3YXBpbiBjYW5ub3QgcmVtb3ZlIHRoZSBmb2xpbyBmcm9tXG4tLVxubW0vZmlsZW1hcC5jLTE3MTAtXG5tbS9maWxlbWFwLmM6MTcxMTpcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmMtMTcxMi1cbi0tXG5tbS9maWxlbWFwLmMtMTcyMC19XG5tbS9maWxlbWFwLmM6MTcyMTpFWFBPUlRfU1lNQk9MKGZvbGlvX2VuZF93cml0ZWJhY2spO1xubW0vZmlsZW1hcC5jLTE3MjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3ODQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBGb2N1cyBTeW1ib2xzIGluIE1lbW9yeSBNYW5hZ2VtZW50KioKCkFscmlnaHQsIEkmIzM5O20gemVyb2luZyBpbiBvbiBhIGZldyBwcm9taXNpbmcgY2FuZGlkYXRlcyBmb3IgdHJhY2tpbmcsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBGaXJzdCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgIGZlZWxzIGxpa2UgYSBzb2xpZCBjaG9pY2Ug4oCTIGl0JiMzOTtzIGEgY3JpdGljYWwgcG9pbnQgaW4gdGhlIHdyaXRlYmFjayBwcm9jZXNzLCBhIGdvb2QgcGxhY2UgdG8gYmVnaW4uIFRoZW4sIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBsb29rcyBlcXVhbGx5IHJlbGV2YW50LCBzcGVjaWZpY2FsbHkgdGllZCB0byBzd2FwIEkvTyBhbmQgZm9saW8gb3BlcmF0aW9ucywgd2hpY2ggY291bGQgYmUgdmVyeSB0ZWxsaW5nLiBBbmQsIGxldCYjMzk7cyBhZGQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIHRvIHRoZSBsaXN0OyBoYW5kbGluZyBwYWdlIHJlY2xhbWF0aW9uIGlzIGFsd2F5cyBhIGNvbXBsZXggYXJlYSB0aGF0IG1lcml0cyBjbG9zZSBpbnNwZWN0aW9uLgoKTm93LCByZWdhcmRpbmcgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIEkmIzM5O20gYSBiaXQgY3VyaW91cy4gSXQmIzM5O3Mgbm90IGRlY2xhcmVkIHN0YXRpYywgd2hpY2ggc3VnZ2VzdHMgaXQgbWlnaHQgYmUgY2FsbGFibGUgZnJvbSBvdXRzaWRlIGl0cyBjb21waWxhdGlvbiB1bml0LiBCdXQsIHdoZXRoZXIgaXQmIzM5O3MgYWN0dWFsbHkgKmV4cG9ydGVkKiBpcyB0aGUga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgc3ltYm9scyB0YWJsZSB0byB2ZXJpZnkgaWYgaXQmIzM5O3MgdmlzaWJsZSwgYXMgdGhpcyB3aWxsIGluZmx1ZW5jZSBpdHMgdXRpbGl0eSBpbiBvdXIgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmM9NDAzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy00ODktLyoqXG5tbS9zd2FwX3N0YXRlLmM6NDkwOiAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtNDkxLSAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUwOS0gKi9cbm1tL3N3YXBfc3RhdGUuYzo1MTA6c3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxubW0vc3dhcF9zdGF0ZS5jLTUxMS1cdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTY3OT1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNjg4LVx0XHRcdHJldHVybiBmb2xpbztcbm1tL3N3YXBfc3RhdGUuYzo2ODk6XHRcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbm1tL3N3YXBfc3RhdGUuYy02OTAtXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NzIxPXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTcyOS1cdFx0XHRyZXR1cm4gZm9saW87XG5tbS9zd2FwX3N0YXRlLmM6NzMwOlx0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbm1tL3N3YXBfc3RhdGUuYy03MzEtXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBhIEtleSBTeW1ib2wgZm9yIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgKm5vdCogZXhwb3J0ZWQsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbnRlcm5hbGx5IHdpdGhpbiB0aGUga2VybmVsLiBJdOKAmXMgbm9uLXN0YXRpYywgaG93ZXZlciwgbWVhbmluZyBpdCYjMzk7cyBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIHdpdGhpbiBhIGxhcmdlciBjb21waWxhdGlvbiB1bml0LiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHVzZWQgd2l0aGluIGBtbS96c3dhcC5jYCBuYXJyb3dzIG15IGZvY3VzIGNvbnNpZGVyYWJseS4gWnN3YXAgaXMgbWVtb3J5IGNvbXByZXNzaW9uLCBzbyB0aGlzIGxpa2VseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGludGVyYWN0aW9uIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb21wcmVzc2VkIHN3YXAuIFRoaXMgbWFrZXMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgYSBwcmltZSBjYW5kaWRhdGUgdG8gZGlzc2VjdCBhbmQgdW5kZXJzdGFuZCBmdXJ0aGVyLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0lzIHRoaXMgdGhlIGFsbG9jYXRpb24gZnVuY3Rpb24gZm9yIHN3YXBjYWNoZSBmb2xpb3M/JiMzNDsgR2l2ZW4gdGhhdCBjb250ZXh0LCBJJiMzOTtsbCBnbyBhaGVhZCBhbmQgY2hlY2sgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIG5leHQuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgbmV4dCBzdGVwIGdpdmVuIHRoZSByZWxhdGlvbnNoaXAgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZW1vdmVfbWFwcGluZ19yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9ODExPWxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vdm1zY2FuLmMtODE2LS8qKlxubW0vdm1zY2FuLmM6ODE3OiAqIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSAtIFJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcsIGFzIHJlY2xhaW0gZG9lcy5cbm1tL3Ztc2Nhbi5jLTgxOC0gKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXG4tLVxubW0vdm1zY2FuLmMtODMwLSAqL1xubW0vdm1zY2FuLmM6ODMxOmxvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbm1tL3Ztc2Nhbi5jLTgzMi1cdFx0XHQgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkxMjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGVidWdnaW5nIE1lbW9yeSBSZWNsYW1hdGlvbiBpbiB0aGUgQmxvY2sgTGF5ZXIqKgoKT2theSwgc28gYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB2aXNpYmxlIGFuZCBwb3RlbnRpYWxseSB1c2VkIG91dHNpZGUgb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQmIzM5O3MgZGVmaW5lZCBpbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cgZm9yIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gb3RoZXIgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2xhaW1pbmcgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIGJsb2NrIGRldmljZS4KClNpbmNlIHRoaXMgaXMgcmVsYXRlZCB0byByZW1vdmluZyBhbmQgcmVjbGFpbWluZywgbXkgbmV4dCBvYnZpb3VzIHN0ZXAgaXMgdG8gZGlnIGludG8gYHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmNgLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYXN5bmNocm9ub3VzIHdyaXRlcyB0byBibG9jayBkZXZpY2VzIGR1cmluZyBzd2FwIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBmcmVlaW5nIHVwIHBhZ2VzLCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGNvdWxkIHZlcnkgd2VsbCBiZSBwYXJ0IG9mIHRoYXQgY3ljbGUuIFVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIHR3byBpbnRlcmFjdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZWNsYWltaW5nIHByb2Nlc3Mgd2hlbiB3cml0aW5nIGJhY2sgc3dhcCBwYWdlcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY2FsbCBjaGFpbiBhbmQgaG93IHRoZSByZWNsYWltIG9wZXJhdGlvbiBpcyBpbml0aWF0ZWQuIEtub3dpbmcgdGhlIGNvbnRleHQgd2lsbCBoZWxwIG1lIHdpdGggYW55IHBvdGVudGlhbCBidWctaHVudGluZyBvciBvcHRpbWl6YXRpb24gZWZmb3J0cyBpbiB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9wYWdlX2lvLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vcGFnZV9pby5jPTQyOT1zdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X3N5bmMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9wYWdlX2lvLmMtNDQ4LVxubW0vcGFnZV9pby5jOjQ0OTpzdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS9wYWdlX2lvLmMtNDUwLVx0XHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzKVxuLS1cbm1tL3BhZ2VfaW8uYz00NzM9dm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2lvY2IgKipzd2FwX3BsdWcpXG4tLVxubW0vcGFnZV9pby5jLTQ5Mi1cdGVsc2Vcbm1tL3BhZ2VfaW8uYzo0OTM6XHRcdHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmMoZm9saW8sIHNpcyk7XG5tbS9wYWdlX2lvLmMtNDk0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2MjcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgU3dhcCBXcml0ZWJhY2sgYW5kIFpTV0FQIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmNgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gbXkgZm9jdXMuIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIHJlbGF0ZWQgc3ltYm9scy4gTXkgYXR0ZW50aW9uIGdvZXMgdG86IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gVGhlc2UgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIEkgbmVlZCB0byB1bmRlcnN0YW5kIGluIHJlbGF0aW9uIHRvIHRoZSBzd2FwIHdyaXRlYmFjayBwcm9jZXNzLgoKTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZm9jdXNpbmcgb24gYFpTV0FQYCwgYFNXQVBgLCBhbmQgYE1FTUNHYC4gSSBuZWVkIHRvIHZlcmlmeSBhIHBvaW50IGhlcmUuIEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBhbGxvY2F0b3IgdGhhdCBgWlNXQVBgIHVzZXMuIERvZXMgaXQgKnJlcXVpcmUqIGBaU01BTExPQ2AsIG9yIGEgc2ltaWxhciBhbGxvY2F0b3I/CgpDaGVja2luZyBgbW0vS2NvbmZpZ2AsIEkgY2FuIHNlZToKYGNvbmZpZyBaU1dBUGAKYGRlcGVuZHMgb24gU1dBUGAKYHNlbGVjdCBDUllQVE9gCmBzZWxlY3QgWlBPT0xgCgpBaCwgaXQgZGVwZW5kcyBvbiBgU1dBUGAsIGFuZCBzZWxlY3RzIGBDUllQVE9gIGFuZCBgWlBPT0xgLiBTbyBpdCBkb2VzbiYjMzk7dCBzdHJpY3RseSAqcmVxdWlyZSogYFpTTUFMTE9DYCwgYnV0IGBaU01BTExPQ2AgKG9yIHNpbWlsYXIpIGlzIGEgY29tbW9ubHkgdXNlZCBhbGxvY2F0b3IgZm9yIGl0LiBUaGF0IG1ha2VzIHNlbnNlLgoKRmluYWxseSwgSSBuZWVkIHRvIG1ha2UgYSByZWNvbW1lbmRhdGlvbiBhYm91dCBlbmFibGluZyBgWlNXQVBfREVGQVVMVF9PTmAuIEdpdmVuIHRoZSBjdXJyZW50IGNvbnRleHQsIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMsIGVuYWJsaW5nIGBaU1dBUF9ERUZBVUxUX09OYCB3b3VsZCBiZSBhIGdvb2QgZGVmYXVsdC4gSXQgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBjaG9pY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTIyPWNvbmZpZyBaU1dBUFxuLS1cbm1tL0tjb25maWctMzQtXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG5tbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI3MAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQWgsIHllcywgY29uZmlybWVkLCBpdCYjMzk7cyBzZXQuIEdvb2QsIHRoYXQmIzM5O3Mgd2hhdCBJIGV4cGVjdGVkLgoKTm93LCBzaGlmdGluZyBnZWFycywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX0NHUk9VUFNgLiBJcyBgTUVNQ0dgIHN1ZmZpY2llbnQgb24gaXRzIG93biwgb3IgZG9lcyBpdCBkZXBlbmQgb24gYENHUk9VUFNgPyBObywgd2FpdC4uLiBsZXQmIzM5O3Mgbm90IGFzc3VtZS4gSSBzaG91bGQgY2hlY2sgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgb2YgYE1FTUNHYCB0byBiZSBzdXJlLiBJdCYjMzk7cyBiZXN0IHRvIGJlIHByZWNpc2UgaGVyZTsgSSYjMzk7bGwgdHJhY2UgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVwZW5kcyBvbi4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1ODUgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmluaXQvS2NvbmZpZz02Mz1jb25maWcgUlVTVENfVkVSU0lPTlxuLS1cbmluaXQvS2NvbmZpZy02Ny1cdCAgSXQgZG9lcyBub3QgZGVwZW5kIG9uIGBSVVNUYCBzaW5jZSB0aGF0IG9uZSBtYXkgbmVlZCB0byB1c2UgdGhlIHZlcnNpb25cbmluaXQvS2NvbmZpZzo2ODpcdCAgaW4gYSBgZGVwZW5kcyBvbmAuXG5pbml0L0tjb25maWctNjktXG4tLVxuaW5pdC9LY29uZmlnPTExMT1jb25maWcgR0NDX0FTTV9HT1RPX09VVFBVVF9CUk9LRU5cbmluaXQvS2NvbmZpZy0xMTItXHRib29sXG5pbml0L0tjb25maWc6MTEzOlx0ZGVwZW5kcyBvbiBDQ19JU19HQ0NcbmluaXQvS2NvbmZpZy0xMTQtXHRkZWZhdWx0IHkgaWYgR0NDX1ZFUlNJT04gXHUwMDNjIDExMDUwMFxuLS1cbmluaXQvS2NvbmZpZz0xMTg9Y29uZmlnIENDX0hBU19BU01fR09UT19PVVRQVVRcbmluaXQvS2NvbmZpZy0xMTktXHRkZWZfYm9vbCB5XG5pbml0L0tjb25maWc6MTIwOlx0ZGVwZW5kcyBvbiAhR0NDX0FTTV9HT1RPX09VVFBVVF9CUk9LRU5cbmluaXQvS2NvbmZpZzoxMjE6XHRkZXBlbmRzIG9uICQoc3VjY2VzcyxlY2hvICYjMzk7aW50IGZvbyhpbnQgeCkgeyBhc20gZ290byAoXCYjMzQ7XCYjMzQ7OiBcJiMzNDs9clwmIzM0Oyh4KSA6OjogYmFyKTsgcmV0dXJuIHg7IGJhcjogcmV0dXJuIDA7IH0mIzM5OyB8ICQoQ0MpIC14IGMgLSAtYyAtbyAvZGV2L251bGwpXG5pbml0L0tjb25maWctMTIyLVxuaW5pdC9LY29uZmlnPTEyMz1jb25maWcgQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXG5pbml0L0tjb25maWc6MTI0Olx0ZGVwZW5kcyBvbiBDQ19IQVNfQVNNX0dPVE9fT1VUUFVUXG5pbml0L0tjb25maWctMTI1LVx0IyBEZXRlY3QgYnVnZ3kgZ2NjIGFuZCBjbGFuZywgZml4ZWQgaW4gZ2NjLTExIGNsYW5nLTE0LlxuLS1cbmluaXQvS2NvbmZpZz0yMjg9Y29uZmlnIEJST0tFTl9PTl9TTVBcbmluaXQvS2NvbmZpZy0yMjktXHRib29sXG5pbml0L0tjb25maWc6MjMwOlx0ZGVwZW5kcyBvbiBCUk9LRU4gfHwgIVNNUFxuaW5pdC9LY29uZmlnLTIzMS1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz0yNDE9Y29uZmlnIENPTVBJTEVfVEVTVFxuaW5pdC9LY29uZmlnLTI0Mi1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBhbHNvIGRyaXZlcnMgd2hpY2ggd2lsbCBub3QgbG9hZFwmIzM0O1xuaW5pdC9LY29uZmlnOjI0MzpcdGRlcGVuZHMgb24gSEFTX0lPTUVNXG5pbml0L0tjb25maWctMjQ0LVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0yNzI9Y29uZmlnIFVBUElfSEVBREVSX1RFU1RcbmluaXQvS2NvbmZpZy0yNzMtXHRib29sIFwmIzM0O0NvbXBpbGUgdGVzdCBVQVBJIGhlYWRlcnNcJiMzNDtcbmluaXQvS2NvbmZpZzoyNzQ6XHRkZXBlbmRzIG9uIEhFQURFUlNfSU5TVEFMTFxuaW5pdC9LY29uZmlnLTI3NS1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MjkyPWNvbmZpZyBMT0NBTFZFUlNJT05fQVVUT1xuLS1cbmluaXQvS2NvbmZpZy0yOTQtXHRkZWZhdWx0IHlcbmluaXQvS2NvbmZpZzoyOTU6XHRkZXBlbmRzIG9uICFDT01QSUxFX1RFU1RcbmluaXQvS2NvbmZpZy0yOTYtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTM0Nj1jaG9pY2Vcbi0tXG5pbml0L0tjb25maWctMzQ4LVx0ZGVmYXVsdCBLRVJORUxfR1pJUFxuaW5pdC9LY29uZmlnOjM0OTpcdGRlcGVuZHMgb24gSEFWRV9LRVJORUxfR1pJUCB8fCBIQVZFX0tFUk5FTF9CWklQMiB8fCBIQVZFX0tFUk5FTF9MWk1BIHx8IEhBVkVfS0VSTkVMX1haIHx8IEhBVkVfS0VSTkVMX0xaTyB8fCBIQVZFX0tFUk5FTF9MWjQgfHwgSEFWRV9LRVJORUxfWlNURCB8fCBIQVZFX0tFUk5FTF9VTkNPTVBSRVNTRURcbmluaXQvS2NvbmZpZy0zNTAtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTM2OD1jb25maWcgS0VSTkVMX0daSVBcbmluaXQvS2NvbmZpZy0zNjktXHRib29sIFwmIzM0O0d6aXBcJiMzNDtcbmluaXQvS2NvbmZpZzozNzA6XHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0daSVBcbmluaXQvS2NvbmZpZy0zNzEtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTM3NT1jb25maWcgS0VSTkVMX0JaSVAyXG5pbml0L0tjb25maWctMzc2LVx0Ym9vbCBcJiMzNDtCemlwMlwmIzM0O1xuaW5pdC9LY29uZmlnOjM3NzpcdGRlcGVuZHMgb24gSEFWRV9LRVJORUxfQlpJUDJcbmluaXQvS2NvbmZpZy0zNzgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTM4NT1jb25maWcgS0VSTkVMX0xaTUFcbmluaXQvS2NvbmZpZy0zODYtXHRib29sIFwmIzM0O0xaTUFcJiMzNDtcbmluaXQvS2NvbmZpZzozODc6XHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0xaTUFcbmluaXQvS2NvbmZpZy0zODgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTM5Mz1jb25maWcgS0VSTkVMX1haXG5pbml0L0tjb25maWctMzk0LVx0Ym9vbCBcJiMzNDtYWlwmIzM0O1xuaW5pdC9LY29uZmlnOjM5NTpcdGRlcGVuZHMgb24gSEFWRV9LRVJORUxfWFpcbmluaXQvS2NvbmZpZy0zOTYtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTQwOT1jb25maWcgS0VSTkVMX0xaT1xuaW5pdC9LY29uZmlnLTQxMC1cdGJvb2wgXCYjMzQ7TFpPXCYjMzQ7XG5pbml0L0tjb25maWc6NDExOlx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9MWk9cbmluaXQvS2NvbmZpZy00MTItXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTQxNz1jb25maWcgS0VSTkVMX0xaNFxuaW5pdC9LY29uZmlnLTQxOC1cdGJvb2wgXCYjMzQ7TFo0XCYjMzQ7XG5pbml0L0tjb25maWc6NDE5Olx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9MWjRcbmluaXQvS2NvbmZpZy00MjAtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTQyOT1jb25maWcgS0VSTkVMX1pTVERcbmluaXQvS2NvbmZpZy00MzAtXHRib29sIFwmIzM0O1pTVERcJiMzNDtcbmluaXQvS2NvbmZpZzo0MzE6XHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX1pTVERcbmluaXQvS2NvbmZpZy00MzItXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTQzOT1jb25maWcgS0VSTkVMX1VOQ09NUFJFU1NFRFxuaW5pdC9LY29uZmlnLTQ0MC1cdGJvb2wgXCYjMzQ7Tm9uZVwmIzM0O1xuaW5pdC9LY29uZmlnOjQ0MTpcdGRlcGVuZHMgb24gSEFWRV9LRVJORUxfVU5DT01QUkVTU0VEXG5pbml0L0tjb25maWctNDQyLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz00ODU9Y29uZmlnIFNZU1ZJUENfU1lTQ1RMXG5pbml0L0tjb25maWctNDg2LVx0Ym9vbFxuaW5pdC9LY29uZmlnOjQ4NzpcdGRlcGVuZHMgb24gU1lTVklQQ1xuaW5pdC9LY29uZmlnOjQ4ODpcdGRlcGVuZHMgb24gU1lTQ1RMXG5pbml0L0tjb25maWctNDg5LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTQ5MT1jb25maWcgU1lTVklQQ19DT01QQVRcbmluaXQvS2NvbmZpZy00OTItXHRkZWZfYm9vbCB5XG5pbml0L0tjb25maWc6NDkzOlx0ZGVwZW5kcyBvbiBDT01QQVQgXHUwMDI2XHUwMDI2IFNZU1ZJUENcbmluaXQvS2NvbmZpZy00OTQtXG5pbml0L0tjb25maWc9NDk1PWNvbmZpZyBQT1NJWF9NUVVFVUVcbmluaXQvS2NvbmZpZy00OTYtXHRib29sIFwmIzM0O1BPU0lYIE1lc3NhZ2UgUXVldWVzXCYjMzQ7XG5pbml0L0tjb25maWc6NDk3Olx0ZGVwZW5kcyBvbiBORVRcbmluaXQvS2NvbmZpZy00OTgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTUxMT1jb25maWcgUE9TSVhfTVFVRVVFX1NZU0NUTFxuaW5pdC9LY29uZmlnLTUxMi1cdGJvb2xcbmluaXQvS2NvbmZpZzo1MTM6XHRkZXBlbmRzIG9uIFBPU0lYX01RVUVVRVxuaW5pdC9LY29uZmlnOjUxNDpcdGRlcGVuZHMgb24gU1lTQ1RMXG5pbml0L0tjb25maWctNTE1LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTUyOT1jb25maWcgQ1JPU1NfTUVNT1JZX0FUVEFDSFxuaW5pdC9LY29uZmlnLTUzMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHByb2Nlc3Nfdm1fcmVhZHYvd3JpdGV2IHN5c2NhbGxzXCYjMzQ7XG5pbml0L0tjb25maWc6NTMxOlx0ZGVwZW5kcyBvbiBNTVVcbmluaXQvS2NvbmZpZy01MzItXHRkZWZhdWx0IHlcbi0tXG5pbml0L0tjb25maWc9NTM5PWNvbmZpZyBBVURJVFxuaW5pdC9LY29uZmlnLTU0MC1cdGJvb2wgXCYjMzQ7QXVkaXRpbmcgc3VwcG9ydFwmIzM0O1xuaW5pdC9LY29uZmlnOjU0MTpcdGRlcGVuZHMgb24gTkVUXG5pbml0L0tjb25maWctNTQyLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz01NTE9Y29uZmlnIEFVRElUU1lTQ0FMTFxuaW5pdC9LY29uZmlnLTU1Mi1cdGRlZl9ib29sIHlcbmluaXQvS2NvbmZpZzo1NTM6XHRkZXBlbmRzIG9uIEFVRElUIFx1MDAyNlx1MDAyNiBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMXG5pbml0L0tjb25maWctNTU0LVx0c2VsZWN0IEZTTk9USUZZXG4tLVxuaW5pdC9LY29uZmlnPTU3Mj1jb25maWcgVElDS19DUFVfQUNDT1VOVElOR1xuaW5pdC9LY29uZmlnLTU3My1cdGJvb2wgXCYjMzQ7U2ltcGxlIHRpY2sgYmFzZWQgY3B1dGltZSBhY2NvdW50aW5nXCYjMzQ7XG5pbml0L0tjb25maWc6NTc0Olx0ZGVwZW5kcyBvbiAhUzM5MCBcdTAwMjZcdTAwMjYgIU5PX0haX0ZVTExcbmluaXQvS2NvbmZpZy01NzUtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTU4Mj1jb25maWcgVklSVF9DUFVfQUNDT1VOVElOR19OQVRJVkVcbmluaXQvS2NvbmZpZy01ODMtXHRib29sIFwmIzM0O0RldGVybWluaXN0aWMgdGFzayBhbmQgQ1BVIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuaW5pdC9LY29uZmlnOjU4NDpcdGRlcGVuZHMgb24gSEFWRV9WSVJUX0NQVV9BQ0NPVU5USU5HIFx1MDAyNlx1MDAyNiAhTk9fSFpfRlVMTFxuaW5pdC9LY29uZmlnLTU4NS1cdHNlbGVjdCBWSVJUX0NQVV9BQ0NPVU5USU5HXG4tLVxuaW5pdC9LY29uZmlnPTU5NT1jb25maWcgVklSVF9DUFVfQUNDT1VOVElOR19HRU5cbmluaXQvS2NvbmZpZy01OTYtXHRib29sIFwmIzM0O0Z1bGwgZHludGlja3MgQ1BVIHRpbWUgYWNjb3VudGluZ1wmIzM0O1xuaW5pdC9LY29uZmlnOjU5NzpcdGRlcGVuZHMgb24gSEFWRV9DT05URVhUX1RSQUNLSU5HX1VTRVJcbmluaXQvS2NvbmZpZzo1OTg6XHRkZXBlbmRzIG9uIEhBVkVfVklSVF9DUFVfQUNDT1VOVElOR19HRU5cbmluaXQvS2NvbmZpZzo1OTk6XHRkZXBlbmRzIG9uIEdFTkVSSUNfQ0xPQ0tFVkVOVFNcbmluaXQvS2NvbmZpZy02MDAtXHRzZWxlY3QgVklSVF9DUFVfQUNDT1VOVElOR1xuLS1cbmluaXQvS2NvbmZpZz02MTY9Y29uZmlnIElSUV9USU1FX0FDQ09VTlRJTkdcbmluaXQvS2NvbmZpZy02MTctXHRib29sIFwmIzM0O0ZpbmUgZ3JhbnVsYXJpdHkgdGFzayBsZXZlbCBJUlEgdGltZSBhY2NvdW50aW5nXCYjMzQ7XG5pbml0L0tjb25maWc6NjE4Olx0ZGVwZW5kcyBvbiBIQVZFX0lSUV9USU1FX0FDQ09VTlRJTkcgXHUwMDI2XHUwMDI2ICFWSVJUX0NQVV9BQ0NPVU5USU5HX05BVElWRVxuaW5pdC9LY29uZmlnLTYxOS1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9NjI3PWNvbmZpZyBIQVZFX1NDSEVEX0FWR19JUlFcbmluaXQvS2NvbmZpZy02MjgtXHRkZWZfYm9vbCB5XG5pbml0L0tjb25maWc6NjI5Olx0ZGVwZW5kcyBvbiBJUlFfVElNRV9BQ0NPVU5USU5HIHx8IFBBUkFWSVJUX1RJTUVfQUNDT1VOVElOR1xuaW5pdC9LY29uZmlnOjYzMDpcdGRlcGVuZHMgb24gU01QXG5pbml0L0tjb25maWctNjMxLVxuaW5pdC9LY29uZmlnPTYzMj1jb25maWcgU0NIRURfSFdfUFJFU1NVUkVcbi0tXG5pbml0L0tjb25maWctNjM1LVx0ZGVmYXVsdCB5IGlmIEFSTTY0XG5pbml0L0tjb25maWc6NjM2Olx0ZGVwZW5kcyBvbiBTTVBcbmluaXQvS2NvbmZpZzo2Mzc6XHRkZXBlbmRzIG9uIENQVV9GUkVRX1RIRVJNQUxcbmluaXQvS2NvbmZpZy02MzgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTY1MT1jb25maWcgQlNEX1BST0NFU1NfQUNDVFxuaW5pdC9LY29uZmlnLTY1Mi1cdGJvb2wgXCYjMzQ7QlNEIFByb2Nlc3MgQWNjb3VudGluZyAoREVQUkVDQVRFRClcJiMzNDtcbmluaXQvS2NvbmZpZzo2NTM6XHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuaW5pdC9LY29uZmlnLTY1NC1cdGRlZmF1bHQgblxuLS1cbmluaXQvS2NvbmZpZz02Njg9Y29uZmlnIEJTRF9QUk9DRVNTX0FDQ1RfVjNcbmluaXQvS2NvbmZpZy02NjktXHRib29sIFwmIzM0O0JTRCBQcm9jZXNzIEFjY291bnRpbmcgdmVyc2lvbiAzIGZpbGUgZm9ybWF0XCYjMzQ7XG5pbml0L0tjb25maWc6NjcwOlx0ZGVwZW5kcyBvbiBCU0RfUFJPQ0VTU19BQ0NUXG5pbml0L0tjb25maWctNjcxLVx0ZGVmYXVsdCBuXG4tLVxuaW5pdC9LY29uZmlnPTY4MD1jb25maWcgVEFTS1NUQVRTXG5pbml0L0tjb25maWctNjgxLVx0Ym9vbCBcJiMzNDtFeHBvcnQgdGFzay9wcm9jZXNzIHN0YXRpc3RpY3MgdGhyb3VnaCBuZXRsaW5rXCYjMzQ7XG5pbml0L0tjb25maWc6NjgyOlx0ZGVwZW5kcyBvbiBORVRcbmluaXQvS2NvbmZpZzo2ODM6XHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxuaW5pdC9LY29uZmlnLTY4NC1cdGRlZmF1bHQgblxuLS1cbmluaXQvS2NvbmZpZz02OTQ9Y29uZmlnIFRBU0tfREVMQVlfQUNDVFxuaW5pdC9LY29uZmlnLTY5NS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHBlci10YXNrIGRlbGF5IGFjY291bnRpbmdcJiMzNDtcbmluaXQvS2NvbmZpZzo2OTY6XHRkZXBlbmRzIG9uIFRBU0tTVEFUU1xuaW5pdC9LY29uZmlnLTY5Ny1cdHNlbGVjdCBTQ0hFRF9JTkZPXG4tLVxuaW5pdC9LY29uZmlnPTcwNj1jb25maWcgVEFTS19YQUNDVFxuaW5pdC9LY29uZmlnLTcwNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIGV4dGVuZGVkIGFjY291bnRpbmcgb3ZlciB0YXNrc3RhdHNcJiMzNDtcbmluaXQvS2NvbmZpZzo3MDg6XHRkZXBlbmRzIG9uIFRBU0tTVEFUU1xuaW5pdC9LY29uZmlnLTcwOS1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9NzE1PWNvbmZpZyBUQVNLX0lPX0FDQ09VTlRJTkdcbmluaXQvS2NvbmZpZy03MTYtXHRib29sIFwmIzM0O0VuYWJsZSBwZXItdGFzayBzdG9yYWdlIEkvTyBhY2NvdW50aW5nXCYjMzQ7XG5pbml0L0tjb25maWc6NzE3Olx0ZGVwZW5kcyBvbiBUQVNLX1hBQ0NUXG5pbml0L0tjb25maWctNzE4LVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz03NDQ9Y29uZmlnIFBTSV9ERUZBVUxUX0RJU0FCTEVEXG4tLVxuaW5pdC9LY29uZmlnLTc0Ni1cdGRlZmF1bHQgblxuaW5pdC9LY29uZmlnOjc0NzpcdGRlcGVuZHMgb24gUFNJXG5pbml0L0tjb25maWctNzQ4LVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz03NjY9Y29uZmlnIENQVV9JU09MQVRJT05cbmluaXQvS2NvbmZpZy03NjctXHRib29sIFwmIzM0O0NQVSBpc29sYXRpb25cJiMzNDtcbmluaXQvS2NvbmZpZzo3Njg6XHRkZXBlbmRzIG9uIFNNUFxuaW5pdC9LY29uZmlnLTc2OS1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz03OTI9Y29uZmlnIElLQ09ORklHX1BST0NcbmluaXQvS2NvbmZpZy03OTMtXHRib29sIFwmIzM0O0VuYWJsZSBhY2Nlc3MgdG8gLmNvbmZpZyB0aHJvdWdoIC9wcm9jL2NvbmZpZy5nelwmIzM0O1xuaW5pdC9LY29uZmlnOjc5NDpcdGRlcGVuZHMgb24gSUtDT05GSUcgXHUwMDI2XHUwMDI2IFBST0NfRlNcbmluaXQvS2NvbmZpZy03OTUtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTc5OT1jb25maWcgSUtIRUFERVJTXG5pbml0L0tjb25maWctODAwLVx0dHJpc3RhdGUgXCYjMzQ7RW5hYmxlIGtlcm5lbCBoZWFkZXJzIHRocm91Z2ggL3N5cy9rZXJuZWwva2hlYWRlcnMudGFyLnh6XCYjMzQ7XG5pbml0L0tjb25maWc6ODAxOlx0ZGVwZW5kcyBvbiBTWVNGU1xuaW5pdC9LY29uZmlnLTgwMi1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9ODA4PWNvbmZpZyBMT0dfQlVGX1NISUZUXG4tLVxuaW5pdC9LY29uZmlnLTgxMS1cdGRlZmF1bHQgMTdcbmluaXQvS2NvbmZpZzo4MTI6XHRkZXBlbmRzIG9uIFBSSU5US1xuaW5pdC9LY29uZmlnLTgxMy1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9ODI3PWNvbmZpZyBMT0dfQ1BVX01BWF9CVUZfU0hJRlRcbmluaXQvS2NvbmZpZy04MjgtXHRpbnQgXCYjMzQ7Q1BVIGtlcm5lbCBsb2cgYnVmZmVyIHNpemUgY29udHJpYnV0aW9uICgxMyA9XHUwMDNlIDggS0IsIDE3ID1cdTAwM2UgMTI4S0IpXCYjMzQ7XG5pbml0L0tjb25maWc6ODI5Olx0ZGVwZW5kcyBvbiBTTVBcbmluaXQvS2NvbmZpZy04MzAtXHRyYW5nZSAwIDIxXG4tLVxuaW5pdC9LY29uZmlnLTgzMi1cdGRlZmF1bHQgMTJcbmluaXQvS2NvbmZpZzo4MzM6XHRkZXBlbmRzIG9uIFBSSU5US1xuaW5pdC9LY29uZmlnLTgzNC1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9ODYzPWNvbmZpZyBQUklOVEtfSU5ERVhcbmluaXQvS2NvbmZpZy04NjQtXHRib29sIFwmIzM0O1ByaW50ayBpbmRleGluZyBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0O1xuaW5pdC9LY29uZmlnOjg2NTpcdGRlcGVuZHMgb24gUFJJTlRLIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuaW5pdC9LY29uZmlnLTg2Ni1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9ODg4PWNvbmZpZyBVQ0xBTVBfVEFTS1xuaW5pdC9LY29uZmlnLTg4OS1cdGJvb2wgXCYjMzQ7RW5hYmxlIHV0aWxpemF0aW9uIGNsYW1waW5nIGZvciBSVC9GQUlSIHRhc2tzXCYjMzQ7XG5pbml0L0tjb25maWc6ODkwOlx0ZGVwZW5kcyBvbiBDUFVfRlJFUV9HT1ZfU0NIRURVVElMXG5pbml0L0tjb25maWctODkxLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz05MDY9Y29uZmlnIFVDTEFNUF9CVUNLRVRTX0NPVU5UXG4tLVxuaW5pdC9LY29uZmlnLTkwOS1cdGRlZmF1bHQgNVxuaW5pdC9LY29uZmlnOjkxMDpcdGRlcGVuZHMgb24gVUNMQU1QX1RBU0tcbmluaXQvS2NvbmZpZy05MTEtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTkzNz1jb25maWcgU0NIRURfUFJPWFlfRVhFQ1xuLS1cbmluaXQvS2NvbmZpZy05MzktXHQjIEF2b2lkIHNvbWUgYnVpbGQgZmFpbHVyZXMgdy8gUFJFRU1QVF9SVCB1bnRpbCBpdCBjYW4gYmUgZml4ZWRcbmluaXQvS2NvbmZpZzo5NDA6XHRkZXBlbmRzIG9uICFQUkVFTVBUX1JUXG5pbml0L0tjb25maWctOTQxLVx0IyBOZWVkIHRvIGludmVzdGlnYXRlIGhvdyB0byBpbmZvcm0gc2NoZWRfZXh0IG9mIHNwbGl0IGNvbnRleHRzXG5pbml0L0tjb25maWc6OTQyOlx0ZGVwZW5kcyBvbiAhU0NIRURfQ0xBU1NfRVhUXG5pbml0L0tjb25maWctOTQzLVx0IyBOb3QgcGFydGljdWxhcmx5IHVzZWZ1bCB1bnRpbCB3ZSBnZXQgdG8gbXVsdGktcnEgcHJveHlpbmdcbmluaXQvS2NvbmZpZzo5NDQ6XHRkZXBlbmRzIG9uIEVYUEVSVFxuaW5pdC9LY29uZmlnLTk0NS1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MTAxND1jb25maWcgTlVNQV9CQUxBTkNJTkdcbmluaXQvS2NvbmZpZy0xMDE1LVx0Ym9vbCBcJiMzNDtNZW1vcnkgcGxhY2VtZW50IGF3YXJlIE5VTUEgc2NoZWR1bGVyXCYjMzQ7XG5pbml0L0tjb25maWc6MTAxNjpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xuaW5pdC9LY29uZmlnOjEwMTc6XHRkZXBlbmRzIG9uICFBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxuaW5pdC9LY29uZmlnOjEwMTg6XHRkZXBlbmRzIG9uIFNNUCBcdTAwMjZcdTAwMjYgTlVNQV9NSUdSQVRJT04gXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG5pbml0L0tjb25maWctMTAxOS1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MTAyNj1jb25maWcgU0NIRURfQ0FDSEVcbi0tXG5pbml0L0tjb25maWctMTAyOC1cdGRlZmF1bHQgeVxuaW5pdC9LY29uZmlnOjEwMjk6XHRkZXBlbmRzIG9uIFNNUFxuaW5pdC9LY29uZmlnLTEwMzAtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTEwMzc9Y29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRFxuLS1cbmluaXQvS2NvbmZpZy0xMDM5LVx0ZGVmYXVsdCB5XG5pbml0L0tjb25maWc6MTA0MDpcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcbmluaXQvS2NvbmZpZy0xMDQxLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0xMDg2PWNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4Ny1cdGJvb2xcbmluaXQvS2NvbmZpZzoxMDg4Olx0ZGVwZW5kcyBvbiBNRU1DR1xuaW5pdC9LY29uZmlnOjEwODk6XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG5pbml0L0tjb25maWc6MTA5MDpcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcdTAwMjZcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG5pbml0L0tjb25maWctMTA5MS1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz0xMDkzPWNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTQtXHRib29sXG5pbml0L0tjb25maWc6MTA5NTpcdGRlcGVuZHMgb24gTUVNQ0dcbmluaXQvS2NvbmZpZzoxMDk2Olx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuaW5pdC9LY29uZmlnOjEwOTc6XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG5pbml0L0tjb25maWctMTA5OC1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz0xMTAwPWNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDEtXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbmluaXQvS2NvbmZpZzoxMTAyOlx0ZGVwZW5kcyBvbiBNRU1DR1xuaW5pdC9LY29uZmlnLTExMDMtXHRkZWZhdWx0IG5cbi0tXG5pbml0L0tjb25maWc9MTExNz1jb25maWcgQkxLX0NHUk9VUFxuaW5pdC9LY29uZmlnLTExMTgtXHRib29sIFwmIzM0O0lPIGNvbnRyb2xsZXJcJiMzNDtcbmluaXQvS2NvbmZpZzoxMTE5Olx0ZGVwZW5kcyBvbiBCTE9DS1xuaW5pdC9LY29uZmlnLTExMjAtXHRkZWZhdWx0IG5cbi0tXG5pbml0L0tjb25maWc9MTEzOT1jb25maWcgQ0dST1VQX1dSSVRFQkFDS1xuaW5pdC9LY29uZmlnLTExNDAtXHRib29sXG5pbml0L0tjb25maWc6MTE0MTpcdGRlcGVuZHMgb24gTUVNQ0cgXHUwMDI2XHUwMDI2IEJMS19DR1JPVVBcbmluaXQvS2NvbmZpZy0xMTQyLVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTExNTk9Y29uZmlnIEZBSVJfR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTYwLVx0Ym9vbCBcJiMzNDtHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9PVEhFUlwmIzM0O1xuaW5pdC9LY29uZmlnOjExNjE6XHRkZXBlbmRzIG9uIENHUk9VUF9TQ0hFRFxuaW5pdC9LY29uZmlnLTExNjItXHRzZWxlY3QgR1JPVVBfU0NIRURfV0VJR0hUXG4tLVxuaW5pdC9LY29uZmlnPTExNjU9Y29uZmlnIENGU19CQU5EV0lEVEhcbmluaXQvS2NvbmZpZy0xMTY2LVx0Ym9vbCBcJiMzNDtDUFUgYmFuZHdpZHRoIHByb3Zpc2lvbmluZyBmb3IgRkFJUl9HUk9VUF9TQ0hFRFwmIzM0O1xuaW5pdC9LY29uZmlnOjExNjc6XHRkZXBlbmRzIG9uIEZBSVJfR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTY4LVx0c2VsZWN0IEdST1VQX1NDSEVEX0JBTkRXSURUSFxuLS1cbmluaXQvS2NvbmZpZz0xMTc3PWNvbmZpZyBSVF9HUk9VUF9TQ0hFRFxuaW5pdC9LY29uZmlnLTExNzgtXHRib29sIFwmIzM0O0dyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX1JSL0ZJRk9cJiMzNDtcbmluaXQvS2NvbmZpZzoxMTc5Olx0ZGVwZW5kcyBvbiBDR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTgwLVx0ZGVmYXVsdCBuXG4tLVxuaW5pdC9LY29uZmlnPTExODg9Y29uZmlnIFJUX0dST1VQX1NDSEVEX0RFRkFVTFRfRElTQUJMRURcbmluaXQvS2NvbmZpZy0xMTg5LVx0Ym9vbCBcJiMzNDtSZXF1aXJlIGJvb3QgcGFyYW1ldGVyIHRvIGVuYWJsZSBncm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPXCYjMzQ7XG5pbml0L0tjb25maWc6MTE5MDpcdGRlcGVuZHMgb24gUlRfR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMTkxLVx0ZGVmYXVsdCBuXG4tLVxuaW5pdC9LY29uZmlnPTExOTk9Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxuaW5pdC9LY29uZmlnLTEyMDAtXHRib29sXG5pbml0L0tjb25maWc6MTIwMTpcdGRlcGVuZHMgb24gU0NIRURfQ0xBU1NfRVhUIFx1MDAyNlx1MDAyNiBDR1JPVVBfU0NIRURcbmluaXQvS2NvbmZpZy0xMjAyLVx0c2VsZWN0IEdST1VQX1NDSEVEX1dFSUdIVFxuLS1cbmluaXQvS2NvbmZpZz0xMjA4PWNvbmZpZyBFWFRfU1VCX1NDSEVEXG5pbml0L0tjb25maWctMTIwOS0gICAgICAgIGRlZl9ib29sIHlcbmluaXQvS2NvbmZpZzoxMjEwOiAgICAgICAgZGVwZW5kcyBvbiBTQ0hFRF9DTEFTU19FWFQgXHUwMDI2XHUwMDI2IENHUk9VUFNcbmluaXQvS2NvbmZpZy0xMjExLVxuaW5pdC9LY29uZmlnPTEyMTI9Y29uZmlnIFNDSEVEX01NX0NJRFxuaW5pdC9LY29uZmlnLTEyMTMtXHRkZWZfYm9vbCB5XG5pbml0L0tjb25maWc6MTIxNDpcdGRlcGVuZHMgb24gU01QIFx1MDAyNlx1MDAyNiBSU0VRXG5pbml0L0tjb25maWctMTIxNS1cbmluaXQvS2NvbmZpZz0xMjE2PWNvbmZpZyBVQ0xBTVBfVEFTS19HUk9VUFxuaW5pdC9LY29uZmlnLTEyMTctXHRib29sIFwmIzM0O1V0aWxpemF0aW9uIGNsYW1waW5nIHBlciBncm91cCBvZiB0YXNrc1wmIzM0O1xuaW5pdC9LY29uZmlnOjEyMTg6XHRkZXBlbmRzIG9uIENHUk9VUF9TQ0hFRFxuaW5pdC9LY29uZmlnOjEyMTk6XHRkZXBlbmRzIG9uIFVDTEFNUF9UQVNLXG5pbml0L0tjb25maWctMTIyMC1cdGRlZmF1bHQgblxuLS1cbmluaXQvS2NvbmZpZz0xMjg1PWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxuaW5pdC9LY29uZmlnLTEyODYtXHRib29sIFwmIzM0O0h1Z2VUTEIgY29udHJvbGxlclwmIzM0O1xuaW5pdC9LY29uZmlnOjEyODc6XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxuaW5pdC9LY29uZmlnLTEyODgtXHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4tLVxuaW5pdC9LY29uZmlnPTEzMDE9Y29uZmlnIENQVVNFVFNcbmluaXQvS2NvbmZpZy0xMzAyLVx0Ym9vbCBcJiMzNDtDcHVzZXQgY29udHJvbGxlclwmIzM0O1xuaW5pdC9LY29uZmlnOjEzMDM6XHRkZXBlbmRzIG9uIFNNUFxuaW5pdC9LY29uZmlnLTEzMDQtXHRzZWxlY3QgVU5JT05fRklORFxuLS1cbmluaXQvS2NvbmZpZz0xMzE0PWNvbmZpZyBDUFVTRVRTX1YxXG5pbml0L0tjb25maWctMTMxNS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBjcHVzZXRzIGNvbnRyb2xsZXJcJiMzNDtcbmluaXQvS2NvbmZpZzoxMzE2Olx0ZGVwZW5kcyBvbiBDUFVTRVRTXG5pbml0L0tjb25maWctMTMxNy1cdGRlZmF1bHQgblxuLS1cbmluaXQvS2NvbmZpZz0xMzI4PWNvbmZpZyBQUk9DX1BJRF9DUFVTRVRcbmluaXQvS2NvbmZpZy0xMzI5LVx0Ym9vbCBcJiMzNDtJbmNsdWRlIGxlZ2FjeSAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvY3B1c2V0IGZpbGVcJiMzNDtcbmluaXQvS2NvbmZpZzoxMzMwOlx0ZGVwZW5kcyBvbiBDUFVTRVRTX1YxXG5pbml0L0tjb25maWctMTMzMS1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxuaW5pdC9LY29uZmlnLTEzNDYtXHRib29sIFwmIzM0O1BlcmYgY29udHJvbGxlclwmIzM0O1xuaW5pdC9LY29uZmlnOjEzNDc6XHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTXG5pbml0L0tjb25maWctMTM0OC1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MTM1Nj1jb25maWcgQ0dST1VQX0JQRlxuaW5pdC9LY29uZmlnLTEzNTctXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVCUEYgcHJvZ3JhbXMgYXR0YWNoZWQgdG8gY2dyb3Vwc1wmIzM0O1xuaW5pdC9LY29uZmlnOjEzNTg6XHRkZXBlbmRzIG9uIEJQRl9TWVNDQUxMXG5pbml0L0tjb25maWctMTM1OS1cdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXG4tLVxuaW5pdC9LY29uZmlnLTEzNjMtXG5pbml0L0tjb25maWc6MTM2NDpcdCAgSW4gd2hpY2ggY29udGV4dCB0aGVzZSBwcm9ncmFtcyBhcmUgYWNjZXNzZWQgZGVwZW5kcyBvbiB0aGUgdHlwZVxuaW5pdC9LY29uZmlnLTEzNjUtXHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcbi0tXG5pbml0L0tjb25maWc9MTM4Mz1jb25maWcgQ0dST1VQX0RFQlVHXG4tLVxuaW5pdC9LY29uZmlnLTEzODUtXHRkZWZhdWx0IG5cbmluaXQvS2NvbmZpZzoxMzg2Olx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUxcbmluaXQvS2NvbmZpZy0xMzg3LVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0xNDAxPW1lbnVjb25maWcgTkFNRVNQQUNFU1xuaW5pdC9LY29uZmlnLTE0MDItXHRib29sIFwmIzM0O05hbWVzcGFjZXMgc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbmluaXQvS2NvbmZpZzoxNDAzOlx0ZGVwZW5kcyBvbiBNVUxUSVVTRVJcbmluaXQvS2NvbmZpZy0xNDA0LVx0ZGVmYXVsdCAhRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE0MzA9Y29uZmlnIElQQ19OU1xuaW5pdC9LY29uZmlnLTE0MzEtXHRib29sIFwmIzM0O0lQQyBuYW1lc3BhY2VcJiMzNDtcbmluaXQvS2NvbmZpZzoxNDMyOlx0ZGVwZW5kcyBvbiAoU1lTVklQQyB8fCBQT1NJWF9NUVVFVUUpXG5pbml0L0tjb25maWctMTQzMy1cdGRlZmF1bHQgeVxuLS1cbmluaXQvS2NvbmZpZz0xNDYwPWNvbmZpZyBORVRfTlNcbmluaXQvS2NvbmZpZy0xNDYxLVx0Ym9vbCBcJiMzNDtOZXR3b3JrIG5hbWVzcGFjZVwmIzM0O1xuaW5pdC9LY29uZmlnOjE0NjI6XHRkZXBlbmRzIG9uIE5FVFxuaW5pdC9LY29uZmlnLTE0NjMtXHRkZWZhdWx0IHlcbi0tXG5pbml0L0tjb25maWc9MTQ3MD1jb25maWcgQ0hFQ0tQT0lOVF9SRVNUT1JFXG5pbml0L0tjb25maWctMTQ3MS1cdGJvb2wgXCYjMzQ7Q2hlY2twb2ludC9yZXN0b3JlIHN1cHBvcnRcJiMzNDtcbmluaXQvS2NvbmZpZzoxNDcyOlx0ZGVwZW5kcyBvbiBQUk9DX0ZTXG5pbml0L0tjb25maWctMTQ3My1cdHNlbGVjdCBQUk9DX0NISUxEUkVOXG4tLVxuaW5pdC9LY29uZmlnPTE1NDE9Y29uZmlnIEJPT1RfQ09ORklHX0ZPUkNFXG5pbml0L0tjb25maWctMTU0Mi1cdGJvb2wgXCYjMzQ7Rm9yY2UgdW5jb25kaXRpb25hbCBib290Y29uZmlnIHByb2Nlc3NpbmdcJiMzNDtcbmluaXQvS2NvbmZpZzoxNTQzOlx0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR1xuaW5pdC9LY29uZmlnLTE1NDQtXHRkZWZhdWx0IHkgaWYgQk9PVF9DT05GSUdfRU1CRURcbi0tXG5pbml0L0tjb25maWc9MTU1ND1jb25maWcgQk9PVF9DT05GSUdfRU1CRURcbmluaXQvS2NvbmZpZy0xNTU1LVx0Ym9vbCBcJiMzNDtFbWJlZCBib290Y29uZmlnIGZpbGUgaW4gdGhlIGtlcm5lbFwmIzM0O1xuaW5pdC9LY29uZmlnOjE1NTY6XHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHXG5pbml0L0tjb25maWctMTU1Ny1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MTU2NT1jb25maWcgQk9PVF9DT05GSUdfRU1CRURfRklMRVxuaW5pdC9LY29uZmlnLTE1NjYtXHRzdHJpbmcgXCYjMzQ7RW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIHBhdGhcJiMzNDtcbmluaXQvS2NvbmZpZzoxNTY3Olx0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR19FTUJFRFxuaW5pdC9LY29uZmlnLTE1NjgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTE1OTE9Y29uZmlnIElOSVRSQU1GU19QUkVTRVJWRV9NVElNRVxuaW5pdC9LY29uZmlnLTE1OTItXHRib29sIFwmIzM0O1ByZXNlcnZlIGNwaW8gYXJjaGl2ZSBtdGltZXMgaW4gaW5pdHJhbWZzXCYjMzQ7XG5pbml0L0tjb25maWc6MTU5MzpcdGRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkRcbmluaXQvS2NvbmZpZy0xNTk0LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTE2MDI9Y29uZmlnIElOSVRSQU1GU19URVNUXG5pbml0L0tjb25maWctMTYwMy1cdGJvb2wgXCYjMzQ7VGVzdCBpbml0cmFtZnMgY3BpbyBhcmNoaXZlIGV4dHJhY3Rpb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuaW5pdC9LY29uZmlnOjE2MDQ6XHRkZXBlbmRzIG9uIEJMS19ERVZfSU5JVFJEIFx1MDAyNlx1MDAyNiBLVU5JVD15XG5pbml0L0tjb25maWctMTYwNS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuaW5pdC9LY29uZmlnPTE2Mzg9Y29uZmlnIExEX0RFQURfQ09ERV9EQVRBX0VMSU1JTkFUSU9OXG5pbml0L0tjb25maWctMTYzOS1cdGJvb2wgXCYjMzQ7RGVhZCBjb2RlIGFuZCBkYXRhIGVsaW1pbmF0aW9uIChFWFBFUklNRU5UQUwpXCYjMzQ7XG5pbml0L0tjb25maWc6MTY0MDpcdGRlcGVuZHMgb24gSEFWRV9MRF9ERUFEX0NPREVfREFUQV9FTElNSU5BVElPTlxuaW5pdC9LY29uZmlnOjE2NDE6XHRkZXBlbmRzIG9uIEVYUEVSVFxuaW5pdC9LY29uZmlnOjE2NDI6XHRkZXBlbmRzIG9uICQoY2Mtb3B0aW9uLC1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zKVxuaW5pdC9LY29uZmlnOjE2NDM6XHRkZXBlbmRzIG9uICQobGQtb3B0aW9uLC0tZ2Mtc2VjdGlvbnMpXG5pbml0L0tjb25maWctMTY0NC1cdGhlbHBcbi0tXG5pbml0L0tjb25maWc9MTY1Nj1jb25maWcgTERfT1JQSEFOX1dBUk5cbmluaXQvS2NvbmZpZy0xNjU3LVx0ZGVmX2Jvb2wgeVxuaW5pdC9LY29uZmlnOjE2NTg6XHRkZXBlbmRzIG9uIEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxuaW5pdC9LY29uZmlnOjE2NTk6XHRkZXBlbmRzIG9uICQobGQtb3B0aW9uLC0tb3JwaGFuLWhhbmRsaW5nPXdhcm4pXG5pbml0L0tjb25maWc6MTY2MDpcdGRlcGVuZHMgb24gJChsZC1vcHRpb24sLS1vcnBoYW4taGFuZGxpbmc9ZXJyb3IpXG5pbml0L0tjb25maWctMTY2MS1cbmluaXQvS2NvbmZpZz0xNjYyPWNvbmZpZyBMRF9PUlBIQU5fV0FSTl9MRVZFTFxuaW5pdC9LY29uZmlnLTE2NjMtXHRzdHJpbmdcbmluaXQvS2NvbmZpZzoxNjY0Olx0ZGVwZW5kcyBvbiBMRF9PUlBIQU5fV0FSTlxuaW5pdC9LY29uZmlnLTE2NjUtXHRkZWZhdWx0IFwmIzM0O2Vycm9yXCYjMzQ7IGlmIFdFUlJPUlxuLS1cbmluaXQvS2NvbmZpZz0xNzE0PWNvbmZpZyBVSUQxNlxuaW5pdC9LY29uZmlnLTE3MTUtXHRib29sIFwmIzM0O0VuYWJsZSAxNi1iaXQgVUlEIHN5c3RlbSBjYWxsc1wmIzM0OyBpZiBFWFBFUlRcbmluaXQvS2NvbmZpZzoxNzE2Olx0ZGVwZW5kcyBvbiBIQVZFX1VJRDE2IFx1MDAyNlx1MDAyNiBNVUxUSVVTRVJcbmluaXQvS2NvbmZpZy0xNzE3LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTE3ODY9Y29uZmlnIFBSSU5US19SSU5HQlVGRkVSX0tVTklUX1RFU1RcbmluaXQvS2NvbmZpZy0xNzg3LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgVGVzdCBmb3IgdGhlIHByaW50ayByaW5nYnVmZmVyXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbmluaXQvS2NvbmZpZzoxNzg4Olx0ZGVwZW5kcyBvbiBQUklOVEsgXHUwMDI2XHUwMDI2IEtVTklUXG5pbml0L0tjb25maWctMTc4OS1cdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4tLVxuaW5pdC9LY29uZmlnPTE4MDg9Y29uZmlnIEVMRl9DT1JFXG5pbml0L0tjb25maWc6MTgwOTpcdGRlcGVuZHMgb24gQ09SRURVTVBcbmluaXQvS2NvbmZpZy0xODEwLVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTE4MTY9Y29uZmlnIFBDU1BLUl9QTEFURk9STVxuaW5pdC9LY29uZmlnLTE4MTctXHRib29sIFwmIzM0O0VuYWJsZSBQQy1TcGVha2VyIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG5pbml0L0tjb25maWc6MTgxODpcdGRlcGVuZHMgb24gSEFWRV9QQ1NQS1JfUExBVEZPUk1cbmluaXQvS2NvbmZpZy0xODE5LVx0c2VsZWN0IEk4MjUzX0xPQ0tcbi0tXG5pbml0L0tjb25maWc9MTgzMj1jb25maWcgRlVURVhcbmluaXQvS2NvbmZpZy0xODMzLVx0Ym9vbCBcJiMzNDtFbmFibGUgZnV0ZXggc3VwcG9ydFwmIzM0OyBpZiBFWFBFUlRcbmluaXQvS2NvbmZpZzoxODM0Olx0ZGVwZW5kcyBvbiAhKFNQQVJDMzIgXHUwMDI2XHUwMDI2IFNNUClcbmluaXQvS2NvbmZpZy0xODM1LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTE4NDI9Y29uZmlnIEZVVEVYX1BJXG5pbml0L0tjb25maWctMTg0My1cdGJvb2xcbmluaXQvS2NvbmZpZzoxODQ0Olx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgUlRfTVVURVhFU1xuaW5pdC9LY29uZmlnLTE4NDUtXHRkZWZhdWx0IHlcbi0tXG5pbml0L0tjb25maWc9MTg0Nz1jb25maWcgRlVURVhfUFJJVkFURV9IQVNIXG5pbml0L0tjb25maWctMTg0OC1cdGJvb2xcbmluaXQvS2NvbmZpZzoxODQ5Olx0ZGVwZW5kcyBvbiBGVVRFWCBcdTAwMjZcdTAwMjYgIUJBU0VfU01BTEwgXHUwMDI2XHUwMDI2IE1NVVxuaW5pdC9LY29uZmlnLTE4NTAtXHRkZWZhdWx0IHlcbi0tXG5pbml0L0tjb25maWc9MTg1Mj1jb25maWcgRlVURVhfTVBPTFxuaW5pdC9LY29uZmlnLTE4NTMtXHRib29sXG5pbml0L0tjb25maWc6MTg1NDpcdGRlcGVuZHMgb24gRlVURVggXHUwMDI2XHUwMDI2IE5VTUFcbmluaXQvS2NvbmZpZy0xODU1LVx0ZGVmYXVsdCB5XG4tLVxuaW5pdC9LY29uZmlnPTE4OTc9Y29uZmlnIFNITUVNXG4tLVxuaW5pdC9LY29uZmlnLTE4OTktXHRkZWZhdWx0IHlcbmluaXQvS2NvbmZpZzoxOTAwOlx0ZGVwZW5kcyBvbiBNTVVcbmluaXQvS2NvbmZpZy0xOTAxLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0xOTI1PWNvbmZpZyBHQ09WX1BST0ZJTEVfVVJJTkdcbmluaXQvS2NvbmZpZy0xOTI2LVx0Ym9vbCBcJiMzNDtFbmFibGUgR0NPViBwcm9maWxpbmcgb24gdGhlIGlvX3VyaW5nIHN1YnN5c3RlbVwmIzM0O1xuaW5pdC9LY29uZmlnOjE5Mjc6XHRkZXBlbmRzIG9uIElPX1VSSU5HIFx1MDAyNlx1MDAyNiBHQ09WX0tFUk5FTFxuaW5pdC9LY29uZmlnLTE5MjgtXHRoZWxwXG4tLVxuaW5pdC9LY29uZmlnPTE5Mzg9Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuLS1cbmluaXQvS2NvbmZpZy0xOTQwLVx0ZGVmYXVsdCBuXG5pbml0L0tjb25maWc6MTk0MTpcdGRlcGVuZHMgb24gSU9fVVJJTkdcbmluaXQvS2NvbmZpZy0xOTQyLVx0aGVscFxuLS1cbmluaXQvS2NvbmZpZz0xOTgxPWNvbmZpZyBSU0VRXG4tLVxuaW5pdC9LY29uZmlnLTE5ODMtXHRkZWZhdWx0IHlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk0NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIG15IGV4cGVydGlzZToKCioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIE1FTUNHIERlcGVuZGVuY3kqKgoKQWxyaWdodCwgc28gdGhlIE1FTUNHIHN1YnN5c3RlbeKApiBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIHJpZ2h0PyBObyBvdmVybHkgY29tcGxleCBwcmVyZXF1aXNpdGUgbW9kdWxlcyBvciBleG90aWMgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLiBKdXN0IHRoZSB1c3VhbCBzdXNwZWN0czogYEhBVkVfTk1JYCBhbmQgdGhlIGxpa2UuIEl0JiMzOTtzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCwgcmVseWluZyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIGNvbW1vbiBmdW5jdGlvbmFsaXRpZXMuICpCdXQgd2FpdCBhIHNlY29uZC4uLiogSSBoYXZlIGEgbmFnZ2luZyBmZWVsaW5nLiBJcyBpdCBhY3R1YWxseSBuZXN0ZWQgd2l0aGluIHRoZSBgQ0dST1VQU2AgZnJhbWV3b3JrPyBNeSBtZW1vcnkgaXMgYSBiaXQgaGF6eSBvbiB0aGF0IHNwZWNpZmljIHBvaW50LiBJdOKAmXMgY2VydGFpbmx5IGEgY29yZSBjb21wb25lbnQgdGhlc2UgZGF5cy4KCkkgbmVlZCB0byBjb25maXJtIGlmIGl0ICppcyogaW5kZWVkIGEgc3ViLW1vZHVsZSBvZiBgQ0dST1VQU2AgdG8gYmUgY2VydGFpbi4gTGV04oCZcyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyDigJMgYGluaXQvS2NvbmZpZ2AgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIFRoYXQmIzM5O2xsIHF1aWNrbHkgY2xhcmlmeSB0aGUgZGVwZW5kZW5jeSB0cmVlIGFuZCByZW1vdmUgYW55IGFtYmlndWl0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBleGFjdCBjb25maWd1cmF0aW9uIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Nz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Ni1cbmluaXQvS2NvbmZpZzoxMDc3OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzgtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODUtXG5pbml0L0tjb25maWc6MTA4Njpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODctXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwOTItXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDk0LVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk5LVxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTEwMS1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ1NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIENHUk9VUCBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB2ZXJpZnkgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYE1FTUNHYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7SXMgYE1FTUNHYCBlbmFibGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgQ0dST1VQU2Agc2V0dGluZ3M/JiMzNDsgVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAsIHRoZSBmb3VuZGF0aW9uYWwgY2hlY2suIEkgbmVlZCB0byBjb25maXJtIGlmIGl0JiMzOTtzIGV2ZW4gY29uZmlndXJlZCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiwgc28gY2hlY2tpbmcgaXRzIHByZXNlbmNlIGhlcmUgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUgYW5kIGdvIGZyb20gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgQ0dST1VQUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA0NT1jb25maWcgU0xBQl9PQkpfRVhUXG4tLVxuaW5pdC9LY29uZmlnLTEwNDctXG5pbml0L0tjb25maWc6MTA0ODptZW51Y29uZmlnIENHUk9VUFNcbmluaXQvS2NvbmZpZy0xMDQ5LVx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg3MDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFpzd2FwIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgY29uZmlndXJpbmcgWnN3YXAgYW5kIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZC4gRmlyc3QsIEkgbmVlZCB0byBlbnN1cmUgdGhlIHJpZ2h0IGNvbmZpZ3MgYXJlIGluIHBsYWNlLiBZZXMsIGBDR1JPVVBTYCBpcyBlc3NlbnRpYWwsIG5vIHF1ZXN0aW9uIGFib3V0IGl0LgoKTGV0JiMzOTtzIHB1bGwgdG9nZXRoZXIgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uczogYFpTV0FQYCwgYFNXQVBgLCBgTUVNQ0dgLCBhbmQgYENHUk9VUFNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkgYXJlIGFsbCBwcmVzZW50LiBSaWdodCwgYW5kIEkgc2hvdWxkIHJlbWVtYmVyIHRoYXQgYFpTV0FQYCBkZXBlbmRzIG9uIGBTV0FQYCwgYW5kIGBNRU1DR2AgZGVwZW5kcyBvbiBgQ0dST1VQU2AsIHNvIHRoZSBvcmRlciBtYXR0ZXJzLiBUaHVzLCBgWlNXQVBgLCBgU1dBUGAsIGBNRU1DR2AsIGBDR1JPVVBTYCBpcyB0aGUgY29ycmVjdCBzZXQuCgpMZXQmIzM5O3MgY29uc2lkZXIgd2hldGhlciB0byBlbmFibGUgYFpTV0FQYCBieSBkZWZhdWx0LiBZZXMsIGBaU1dBUF9ERUZBVUxUX09OYCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIFpzd2FwIGlzIGFjdHVhbGx5IHVzZWQgYnkgZGVmYXVsdC4KCk5vdywgbGV0JiMzOTtzIGtlZXAgYFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9gIGluIG1pbmQuIEl0JiMzOTtzIGEgZGVmYXVsdC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiBwb3RlbnRpYWwgY2FuZGlkYXRlczogYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgLiBMZXQmIzM5O3MgY29uZmlybSB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGluZGVlZCBub24tc3RhdGljLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgY3JpdGVyaW9uLiBZZXMsIGl0JiMzOTtzIG5vbi1zdGF0aWMgaW4gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGlzIGRlY2xhcmVkIGluIGBtbS9zd2FwLmhgLiBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgaXMgbm9uLXN0YXRpYyBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGlzIG5vbi1zdGF0aWMgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgZGVjbGFyZWQgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYC4gQW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYCBpcyBub24tc3RhdGljIGluIGBtbS9maWxlbWFwLmNgIGFuZCBleHBvcnRlZC4KCkhtbSwgdGhlcmUmIzM5O3MgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIHdoaWNoIGlzIHN0YXRpYyBidXQgaXQgdHJpZ2dlcnMgZHJvcGJlaGluZC4gU2luY2UgaXQmIzM5O3Mgc3RhdGljIHdlIGNhbiYjMzk7dCB1c2UgaXQuIEJ1dCwgaXQgaXMgY2FsbGVkIGJ5IGBzaHJpbmtfbWVtY2dfY2JgLCB3aGljaCBpcyBzdGF0aWMsIHNvIHRoYXQmIzM5O3Mgbm90IHVzZWZ1bCBlaXRoZXIuIFdoYXQgYWJvdXQgYHpzd2FwX3Nocmlua2VyX3NjYW5gPyBUaGF0JiMzOTtzIHN0YXRpYyBhcyB3ZWxsLgoKTGV0JiMzOTtzIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgYW4gZW50cnkgcG9pbnQsIGNhbGxlZCB3aGVuIHdyaXRlYmFjayBjb21wbGV0ZXMuIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpcyBjYWxsZWQgZnJvbSBgZm9saW9fZW5kX3dyaXRlYmFja2AuIFRoZW4sIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCBpcyBjYWxsZWQgZnJvbSBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AuIEZpbmFsbHksIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGNhbGxlZCBmcm9tIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYW5kIGBzd2FwaW5fc3luY2AuCgpTbywgdGhlIGN1cnJlbnQgcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMgYXJlOgotIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYAotIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYAotIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gCi0gYGZvbGlvX2VuZF93cml0ZWJhY2tgCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWcgYW5kIGluc3RydWN0aW9uIGRldGFpbHMuClRoZSBjb25maWdzIHdpbGwgYmU6Ci0gYFpTV0FQYAotIGBaU1dBUF9ERUZBVUxUX09OYAotIGBTV0FQYAotIGBNRU1DR2AKLSBgQ0dST1VQU2AKClRoZSBpbnN0cnVjdGlvbnMgZGljdGF0ZSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBhbmQgc2hvdWxkIGJlIGV4Y2x1ZGVkLiBJdCYjMzk7cyBjYWxsZWQgZm9yIGV2ZXJ5IHBhZ2Ugd3JpdGViYWNrIGNvbXBsZXRpb24uIExldCYjMzk7cyBleGNsdWRlIGl0IHRvIGF2b2lkIHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCgpUaGlzIGxlYXZlcyBtZSB3aXRoOiBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AsIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCwgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJJiMzOTtsbCBjb25zaWRlciBob3cgaG90IGVhY2ggaXMuIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpcyBzcGVjaWZpYyB0byB0aGlzIG5ldyBmZWF0dXJlLCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGlzIHNwZWNpZmljIHRvIHRoaXMgbmV3IGZlYXR1cmUgKGFuZCBwYWdlIHJlY2xhaW0pLCBzbyB0aG9zZSBzZWVtIG9rYXkuCgpgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgaXMgY2FsbGVkIGR1cmluZyBwYWdlIHJlY2xhaW0gYW5kIHN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQuIEl0JiMzOTtzIHNvbWV3aGF0IGhvdCBkdXJpbmcgbWVtb3J5IHByZXNzdXJlLCBidXQgbm90IGFzIGhvdCBhcyBgZm9saW9fZW5kX3dyaXRlYmFja2AuIEl0JiMzOTtzIGZpbmUgdG8gaW5jbHVkZS4KYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgY2FsbGVkIGR1cmluZyBzd2FwaW4gYW5kIHpzd2FwIHdyaXRlYmFjay4gSXQmIzM5O3MgZmluZSB0byBpbmNsdWRlLgpgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgaXMgY2FsbGVkIG9ubHkgZm9yIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpb3MgKHpzd2FwIHdyaXRlYmFjaykuIEl0JiMzOTtzIGZpbmUgdG8gaW5jbHVkZS4KCkkgbmVlZCB0byBjb25maXJtIGFsbCB0aGUgY29uZmlnIG5hbWVzLiBMZXQgbWUgZG91YmxlIGNoZWNrOgoKLSBgWgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTM1PWNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEyNTQKCQkJCQkJCW91dHB1dDogMjA4CgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFNocmlua2VyIEFkZGl0aW9uKioKCk9rYXksIHNvIHdlICpkbyogbmVlZCBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIFRoZSBzaHJpbmtlciBpcyBlc3NlbnRpYWwgZm9yIHRyaWdnZXJpbmcgenN3YXAgd3JpdGViYWNrLCBzbyB0aGF0JiMzOTtzIGEga2V5IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGJ5IGRlZmF1bHQuIFRoYXQgZmVlbHMgcmlnaHQsIGFuZCBpdCBtYWtlcyB0aGUgbW9zdCBzZW5zZS4KCkkmIzM5O20gdGhpbmtpbmcgd2UmIzM5O3JlIGdvaW5nIHRvIHdhbnQgdG8gaGF2ZSBhIGxvb2sgYXQgYSBmZXcgb3RoZXIgY29uZmlncyB0byBtYWtlIHN1cmUgZXZlcnl0aGluZyBsaW5lcyB1cC4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIGNvbmZpcm0gdGhhdCB3ZSYjMzk7dmUgZ290OiBgWlNXQVBgLCBgWlNXQVBfREVGQVVMVF9PTmAsIGFuZCBvZiBjb3Vyc2UgYFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05gLiBUaGVuLCBvZiBjb3Vyc2UsIHRoZSBvYnZpb3VzIG9uZXM6IGBTV0FQYCwgYE1FTUNHYCwgYW5kIGBDR1JPVVBTYC4gR290dGEgbWFrZSBzdXJlIGFsbCB0aGUgYnVpbGRpbmcgYmxvY2tzIGFyZSBpbiBwbGFjZSBmb3IgdGhpcyB0byB3b3JrIGFzIGV4cGVjdGVkLgoKTm93LCBsb29raW5nIGF0IHRoZSBjb2RlLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgd2F5IHRvIGRyb3Agc3dhcCBjYWNoZSBmb2xpb3MgKmFmdGVyKiB0aGUgenN3YXAgd3JpdGViYWNrIGlzIGNvbXBsZXRlLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHBvbGx1dGlvbiBvZiB0aGUgTFJVLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IG9wdGltaXphdGlvbi4gVGhhdCYjMzk7cyBnb29kLiBUaGV5JiMzOTtyZSBhZGRpbmcgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGFuZCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgZnVuY3Rpb25zLCBhbmQgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHRvIGxldmVyYWdlIHRoaXMgbmV3IG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgbW9kaWZpY2F0aW9uIHRvIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGRlYWxzIHdpdGggc3dhcCwgenN3YXAsIGFuZCB0aGUgcGFnZSBjYWNoZS4gSXQgZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgYmVoYXZpb3IsIHNvIGl0IGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciB0aGF0IGtpbmQgb2YgdGhvcm91Z2ggdGVzdGluZy4KCkxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBkbyB0byBtYWtlIHRoaXMgaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxNDo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7WlNXQVBfREVGQVVMVF9PTiYjMzQ7LAogICAgJiMzNDtaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7Q0dST1VQUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8mIzM0OywKICAgICYjMzQ7cmVtb3ZlX21hcHBpbmdfcmVjbGFpbSYjMzQ7LAogICAgJiMzNDtfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBkcm9wIHN3YXAgY2FjaGUgZm9saW9zIGFmdGVyIHpzd2FwIHdyaXRlYmFjayBjb21wbGV0ZXMsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IExSVSBwb2xsdXRpb24uIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgYW5kIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCwgYW5kIG1vZGlmaWVzIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHRvIHVzZSB0aGlzIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoc3dhcCwgenN3YXAsIHBhZ2UgY2FjaGUpIHRoYXQgYWZmZWN0cyBtZW1vcnkgcmVjbGFpbSBhbmQgc3dhcCBiZWhhdmlvciwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU1dBUCYjMzQ7LAogICAgJiMzNDtaU1dBUF9ERUZBVUxUX09OJiMzNDssCiAgICAmIzM0O1pTV0FQX1NIUklOS0VSX0RFRkFVTFRfT04mIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtDR1JPVVBTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWFwcGluZ19yZWNsYWltJiMzNDssCiAgICAmIzM0O19fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGRyb3Agc3dhcCBjYWNoZSBmb2xpb3MgYWZ0ZXIgenN3YXAgd3JpdGViYWNrIGNvbXBsZXRlcywgYXZvaWRpbmcgdW5uZWNlc3NhcnkgTFJVIHBvbGx1dGlvbi4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBhbmQgbW9kaWZpZXMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgdG8gdXNlIHRoaXMgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChzd2FwLCB6c3dhcCwgcGFnZSBjYWNoZSkgdGhhdCBhZmZlY3RzIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGJlaGF2aW9yLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDE0OjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6NTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBmb2xpb3MgaW4gdGhlIHN3YXAgY2FjaGUsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBhIFwmIzM0O2Ryb3BiZWhpbmRcJiMzNDsgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2suIEl0IGNoYW5nZXMgaG93IGZvbGlvcyBhcmUgYWxsb2NhdGVkIGZvciB0aGUgc3dhcCBjYWNoZSAocmV0dXJuaW5nIHRoZW0gb2ZmLUxSVSkgYW5kIG1hbmFnZXMgdGhlaXIgcmVmZXJlbmNlcyBkdXJpbmcgd3JpdGViYWNrLlxuXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBMUlUgbGlzdCBtYW5hZ2VtZW50LCBhbmQgc3dhcCBjYWNoZSBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MgKGUuZy4sIGZvbGlvcyBsZWZ0IG9mZiB0aGUgTFJVKSwgb3IgaW52YWxpZCBwYWdlIHN0YXRlcy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnIG9wdGlvbnMgKGxpa2UgYENPTkZJR19ERUJVR19WTWApLCBhbmQgcGFnZSByZWZlcmVuY2UgdHJhY2tpbmcuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggcGFyc2luZyBsb2dpYyBvciBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmb2xpb3MgYWxsb2NhdGVkIGFyZSBwb3B1bGF0ZWQgdmlhIGRlY29tcHJlc3Npb24gYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gc3dhcCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBleHBvc2VkLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWUwODYyOTk4NjQwNDllZDc3Njk4ZWFmZWMwZWMzNzY2MGRlZjE1ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDI1IDE0OjI5OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCA4ZjBmNjhlMjQ1YmFhLi4yOWVjNjBkY2FlMjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMzc0LDYgJiM0MzszNzQsOCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzaHJpbmtfYWxsX21lbW9yeSh1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzczsKIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbywKJiM0MzsJCQkgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19OVU1BKQogZXh0ZXJuIGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpOwpAQCAtNDY1LDYgJiM0Mzs0NjcsOCBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpOwogICovCiBib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAomIzQzO3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0MzsKIC8qIEFsbG9jYXRlIC8gZnJlZSAoaGliZXJuYXRpb24pIGV4Y2x1c2l2ZSBlbnRyaWVzICovCiBzd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpOwogdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7CkBAIC00NzUsNiAmIzQzOzQ3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF9kZXZpY2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKQogfQogCiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqLwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9CiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpCiB7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggZDcyMTk4NmQ1ZjQ2NS4uMDQwYzk3YTEyMWRlZCAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ZpbGVtYXAuYwpAQCAtMTY4Niw2ICYjNDM7MTY4Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7CiAgKi8KIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewomIzQzOwlib29sIHN3YXBfZHJvcGJlaGluZDsKJiM0MzsKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pOwogCiAJLyoKQEAgLTE2OTUsNyAmIzQzOzE2OTcsMjQgQEAgdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS4KIAkgKi8KIAlmb2xpb19nZXQoZm9saW8pOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTYW1wbGUgdGhpcyBiZWZvcmUgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKCkgY2xlYXJzCiYjNDM7CSAqIFBHX3dyaXRlYmFjazogdW50aWwgdGhlbiBhIHJhY2luZyBzd2FwaW4gY2Fubm90IHJlbW92ZSB0aGUgZm9saW8gZnJvbQomIzQzOwkgKiB0aGUgc3dhcCBjYWNoZS4gQWZ0ZXJ3YXJkcyBpdCBjYW4sIGFuZCB0aGUgZHJvcCBiZWxvdyB0aGVuIGZpbmRzIGEKJiM0MzsJICogbm9uLXN3YXBjYWNoZSBmb2xpbyBhbmQgcHV0cyBpdCBiYWNrIG9uIHRoZSBMUlUgaW5zdGVhZC4gVGhlCiYjNDM7CSAqIHJlZmVyZW5jZSB0YWtlbiBhYm92ZSBrZWVwcyB0aGUgZm9saW8gYWxpdmUgYWNyb3NzIHRoYXQgd2luZG93LgomIzQzOwkgKi8KJiM0MzsJc3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pICZhbXA7JmFtcDsKJiM0MzsJCQkgIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbyk7CiYjNDM7CiAJZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsKJiM0MzsJaWYgKHN3YXBfZHJvcGJlaGluZCkgewomIzQzOwkJc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhmb2xpbyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAlmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7CiAJZm9saW9fcHV0KGZvbGlvKTsKIH0KZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uYwppbmRleCBiMjNmNDk0ZmNjODNkLi41ODZjNzljM2JiM2QyIDEwMDY0NAotLS0gYS9tbS9wYWdlX2lvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pby5jCkBAIC00NTYsNiAmIzQzOzQ1NiwxMyBAQCBzdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJYmlvLSZndDtiaV9lbmRfaW8gPSBlbmRfc3dhcF9iaW9fd3JpdGU7CiAJYmlvX2FkZF9mb2xpb19ub2ZhaWwoYmlvLCBmb2xpbywgZm9saW9fc2l6ZShmb2xpbyksIDApOwogCiYjNDM7CS8qCiYjNDM7CSAqIERyb3BwaW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIHRha2VzIHNsZWVwaW5nIGxvY2tzLCBzbyB0aGUKJiM0MzsJICogY29tcGxldGlvbiBtdXN0IG5vdCBydW4gaW4gaW50ZXJydXB0IGNvbnRleHQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKSkKJiM0MzsJCWJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTsKJiM0MzsKIAliaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pOwogCWNvdW50X3N3cG91dF92bV9ldmVudChmb2xpbyk7CiAJZm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTsKZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaAppbmRleCA3N2QyZDE0ZWRhNDIxLi5mYzQ0ZGFhZTFkZTFmIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC0zMDQsOSAmIzQzOzMwNCw5IEBAIGJvb2wgc3dhcF9jYWNoZV9oYXNfZm9saW8oc3dwX2VudHJ5X3QgZW50cnkpOwogc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7CiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwomIzQzO3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssCiYjNDM7CQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7CiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovCiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7CmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggNzI3YTE3ZWU3ODIxMS4uMjMxZmE4N2NiYmUwYyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtNDgzLDEzICYjNDM7NDgzLDExIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCW5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTsKIAlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpOwogCi0JLyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi8KLQlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKIAlyZXR1cm4gZm9saW87CiB9CiAKIC8qKgotICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuCiYjNDM7ICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS4KICAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90CiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncwogICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm8KQEAgLTUwMSwxMyAmIzQzOzQ5OSwxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqIGRvaW5nIElPIChlLmcuIHN3YXAgaW4gb3IgenN3YXAgd3JpdGViYWNrKS4gVGhlIHN3YXAgc2xvdCBpbmRpY2F0ZWQgYnkKICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS4KICAqCiYjNDM7ICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXIKJiM0MzsgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWUKJiM0MzsgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy4KJiM0MzsgKgogICogQ29udGV4dDogQ2FsbGVyIG11c3QgcHJvdGVjdCB0aGUgc3dhcCBkZXZpY2Ugd2l0aCByZWZlcmVuY2UgY291bnQgb3IgbG9ja3MuCiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcAogICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy4KICAqLwotc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KQomIzQzO3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKJiM0MzsJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KQogewogCWludCBvcmRlciwgZXJyOwogCXN0cnVjdCBmb2xpbyAqcmV0OwpAQCAtNTM1LDYgJiM0Mzs1MzcsNDcgQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyAtIGRyb3AgYSBkcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW8KJiM0MzsgKiBAZm9saW86IHRoZSBvZmYtTFJVIGZvbGlvIHdob3NlIHdyaXRlYmFjayBoYXMgY29tcGxldGVkCiYjNDM7ICoKJiM0MzsgKiBDb250ZXh0OiB0YXNrIGNvbnRleHQsIHdpdGggdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBmb2xpb19lbmRfd3JpdGViYWNrKCkKJiM0MzsgKiBkb25hdGVkIHRvIHVzLgomIzQzOyAqLwomIzQzO3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0MzsJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwomIzQzOwomIzQzOwlmb2xpb19sb2NrKGZvbGlvKTsKJiM0MzsKJiM0MzsJLyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqLwomIzQzOwlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJbWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7CiYjNDM7CWlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKQomIzQzOwkJbWVtY2cgPSBOVUxMOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogR2F0ZSByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgb24gZm9saW9fdGVzdF9zd2FwY2FjaGUoKTogYSByYWNpbmcKJiM0MzsJICogc3dhcGluIG1heSBoYXZlIGZyZWVkIHRoZSBzd2FwIHNsb3QgKGZvbGlvX2ZyZWVfc3dhcCgpKSBhbmQgZHJvcHBlZCB0aGUKJiM0MzsJICogZm9saW8gZnJvbSB0aGUgY2FjaGUsIGFuZCBpdCBtdXN0IG5vdCBydW4gb24gYSBub24tc3dhcGNhY2hlIGZvbGlvIChpdAomIzQzOwkgKiB3b3VsZCB0cmlwIF9fcmVtb3ZlX21hcHBpbmcoKSYjMzk7cyBtYXBwaW5nID09IGZvbGlvX21hcHBpbmcoKSBjaGVjaykuCiYjNDM7CSAqLwomIzQzOwlpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSB8fCBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHwKJiM0MzsJICAgICFyZW1vdmVfbWFwcGluZ19yZWNsYWltKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby0mZ3Q7c3dhcCksIGZvbGlvLCBtZW1jZykpIHsKJiM0MzsJCS8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqLwomIzQzOwkJZm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7CiYjNDM7CQlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKJiM0MzsJfQomIzQzOwomIzQzOwltZW1fY2dyb3VwX3B1dChtZW1jZyk7CiYjNDM7CiYjNDM7CWZvbGlvX3VubG9jayhmb2xpbyk7CiYjNDM7CWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7fQomIzQzOwogLyoKICAqIElmIHdlIGFyZSB0aGUgb25seSB1c2VyLCB0aGVuIHRyeSB0byBmcmVlIHVwIHRoZSBzd2FwIGNhY2hlLgogICoKQEAgLTY0MywxMiAmIzQzOzY4NiwxMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKJiM0MzsJCWZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTsKIAl9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTsKIAogCWlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpCiAJCXJldHVybiBOVUxMOwogCiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXN3YXBfcmVhZF9mb2xpbyhmb2xpbywgcGx1Zyk7CiAJaWYgKHJlYWRhaGVhZCkgewogCQlmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTsKQEAgLTY4MywxMiAmIzQzOzcyNywxMyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLAogCQlmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTsKIAkJaWYgKGZvbGlvKQogCQkJcmV0dXJuIGZvbGlvOwotCQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7CiYjNDM7CQlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTsKIAl9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTsKIAogCWlmIChJU19FUlIoZm9saW8pKQogCQlyZXR1cm4gZm9saW87CiAKJiM0MzsJZm9saW9fYWRkX2xydShmb2xpbyk7CiAJc3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTsKIAlyZXR1cm4gZm9saW87CiB9CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDg0OGJkM2U1ZWVlMmIuLjRjYzNhM2VkNmRiNmUgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC03ODAsNiAmIzQzOzc4MCwyMiBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgbG9uZyBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1lZCwKJiM0MzsJCQkJICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZykKJiM0Mzt7CiYjNDM7CWlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCByZWNsYWltZWQsIHRhcmdldF9tZW1jZykpIHsKJiM0MzsJCS8qCiYjNDM7CQkgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHkKJiM0MzsJCSAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyCiYjNDM7CQkgKiBhdG9taWMgb3BlcmF0aW9uLgomIzQzOwkJICovCiYjNDM7CQlmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpOwomIzQzOwkJcmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuCiAgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuCkBAIC03OTQsMTYgJiM0Mzs4MTAsMjggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogICovCiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewotCWlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCkpIHsKLQkJLyoKLQkJICogVW5mcmVlemluZyB0aGUgcmVmY291bnQgd2l0aCAxIGVmZmVjdGl2ZWx5Ci0JCSAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyCi0JCSAqIGF0b21pYyBvcGVyYXRpb24uCi0JCSAqLwotCQlmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpOwotCQlyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pOwotCX0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIF9fcmVtb3ZlX21hcHBpbmdfdW5mcmVlemUobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIC0gUmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZywgYXMgcmVjbGFpbSBkb2VzLgomIzQzOyAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS4KJiM0MzsgKiBAZm9saW86IFRoZSBmb2xpbyB0byByZW1vdmUuCiYjNDM7ICogQHRhcmdldF9tZW1jZzogVGhlIG1lbWNnIHRvIGNoYXJnZSB0aGUgZXZpY3Rpb24gc2hhZG93IHRvOyB0aGUgY2FsbGVyIG11c3QKJiM0MzsgKiAgICAgICAgICAgICAgICBrZWVwIGl0IGFsaXZlIGFjcm9zcyB0aGUgY2FsbC4KJiM0MzsgKgomIzQzOyAqIExpa2UgcmVtb3ZlX21hcHBpbmcoKSwgYnV0IHN0b3JlcyBhIHdvcmtpbmdzZXQgZXZpY3Rpb24gc2hhZG93IHRoZSB3YXkgcGFnZQomIzQzOyAqIHJlY2xhaW0gZG9lcywgc28gdGhhdCBhIGxhdGVyIHJlZmF1bHQgY2FuIGJlIGRldGVjdGVkIGFuZCB0aGUgZm9saW8KJiM0MzsgKiByZS1hY3RpdmF0ZWQuCiYjNDM7ICogUmV0dXJuOiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHJlbW92ZWQgZnJvbSB0aGUgbWFwcGluZy4gIDAgaWYgdGhlIGZvbGlvCiYjNDM7ICogY291bGQgbm90IGJlIHJlbW92ZWQuCiYjNDM7ICogQ29udGV4dDogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBhIHNpbmdsZSByZWZjb3VudCBvbiB0aGUgZm9saW8gYW5kCiYjNDM7ICogaG9sZCBpdHMgbG9jay4KJiM0MzsgKi8KJiM0Mztsb25nIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiYjNDM7CQkJICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgdHJ1ZSwgdGFyZ2V0X21lbWNnKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCA3NjFjZDY5OWUwYTNlLi5kMTY4MjJhNTE2ZThkIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTEwMDAsOCAmIzQzOzEwMDAsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCQlyZXR1cm4gLUVFWElTVDsKIAogCW1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0JZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsCi0JCQkJICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwomIzQzOwlmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLAomIzQzOwkJCQkJIE5PX0lOVEVSTEVBVkVfSU5ERVgpOwogCXB1dF9zd2FwX2RldmljZShzaSk7CiAKIAkvKgpAQCAtMTA0NSwxMiAmIzQzOzEwNDUsMjYgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwKIAkvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovCiAJZm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7CiAKLQkvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi8KLQlmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7CiYjNDM7CWZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRHJvcCBvdXIgcmVmZXJlbmNlIGJlZm9yZSBzdGFydGluZyB3cml0ZWJhY2sgc28gdGhlIHN3YXAgY2FjaGUgaG9sZHMKJiM0MzsJICogdGhlIG9ubHkgb25lOiB0aGUgZHJvcCBpbiBmb2xpb19lbmRfd3JpdGViYWNrKCkgbmVlZHMgdGhhdCBmb3IKJiM0MzsJICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIHRvIHN1Y2NlZWQsIG90aGVyd2lzZSB0aGUgZm9saW8gaXMgaGFuZGVkCiYjNDM7CSAqIGJhY2sgdG8gcmVjbGFpbSBpbnN0ZWFkLgomIzQzOwkgKgomIzQzOwkgKiBOb3RoaW5nIGNhbiBmcmVlIHRoZSBmb2xpbyBpbiB0aGUgbWVhbnRpbWU6IHdlIGhvbGQgdGhlIGZvbGlvIGxvY2sKJiM0MzsJICogdW50aWwgd3JpdGViYWNrIHN0YXJ0cywgUEdfd3JpdGViYWNrIHRoZW4gYmxvY2tzIHN3YXAgY2FjaGUgcmVtb3ZhbCwKJiM0MzsJICogYW5kIGZvbGlvX2VuZF93cml0ZWJhY2soKSB0YWtlcyBpdHMgb3duIHJlZmVyZW5jZSBiZWZvcmUgY2xlYXJpbmcKJiM0MzsJICogUEdfd3JpdGViYWNrIGFuZCBkb25hdGVzIGl0IHRvIHRoZSBkcm9wLgomIzQzOwkgKi8KJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKIAogCS8qIHN0YXJ0IHdyaXRlYmFjayAqLwogCV9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpOwogCiYjNDM7CXJldHVybiAwOwomIzQzOwogb3V0OgogCWlmIChyZXQpIHsKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE3NwoJCQkJCQkJb3V0cHV0OiAyMzAKCQkJCQkJCXRob3VnaHRzOiAxMzIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBBbmFseXNpcyBvZiBTd2FwIENhY2hlIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggc2VyaWVzIHRvdWNoaW5nIHRoZSBzd2FwLCBwYWdlIGNhY2hlLCBhbmQgenN3YXAgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZXMgcmV2b2x2ZSBhcm91bmQgdGhpcyBuZXcgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGZ1bmN0aW9uIGFuZCBtb2RpZmljYXRpb25zIHRvIGZvbGlvIGhhbmRsaW5nIGR1cmluZyB3cml0ZWJhY2ssIHNwZWNpZmljYWxseSB0aGUgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudCBvZiBmb2xpb3Mgd2l0aGluIHRoZSBzd2FwIGNhY2hlLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gKm1pZ2h0KiB1bmlxdWVseSBjYXRjaC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIG1vZGlmaWVzIGhvdyBmb2xpb3MgYXJlIG1hcmtlZCBhcyAmIzM0O2Ryb3BiZWhpbmQmIzM0OywgYW5kIGFsdGVycyB0aGUgbGlmZWN5Y2xlIGluIHRoZSBzd2FwIGNhY2hlLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhYm91dCBob3cgZm9saW9zIGFyZSBhbGxvY2F0ZWQsIGFkZGVkIHRvIHRoZSBMUlUgKG9yIG5vdCksIGFuZCBtYW5hZ2VkIGR1cmluZyB6c3dhcCB3cml0ZWJhY2suIFRoZSBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBnb2luZyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBoYXZlIGFueSBsb2dpYyB0aGF0IHdvdWxkIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZSBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlIGFyZW4mIzM5O3QgYW55IG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBhbnkgYm91bmRhcnkgY2hlY2tzIG9yIHZhcmlhYmxlIGxlbmd0aHMgdGhhdCB3b3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcy4KClRoZSBwcmltYXJ5IGNvbmNlcm5zIEkgaGF2ZSBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIHRoZSB1c3VhbCBzdXNwZWN0czogdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzIChlLmcuLCBmb2xpb3MgYmVpbmcgbGVmdCBvZmYgdGhlIExSVSBvciBiZWluZyBkb3VibGUtZnJlZWQpLCBvciBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIFRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLgoKTGV0JiMzOTtzIGRvIGEgZGVlcCBkaXZlIGFuZCBjb25maXJtIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQuIFRoZSBpbXBvcnRhbnQgc2VjdGlvbiBpcyB0aGF0IGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIG5vdyBjYWxscyBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyB0aGUgZm9saW8gZm9yIHRoZSBzd2FwIG9yIHpzd2FwIGVudHJ5LiBUaGUgZm9saW8gbWVtb3J5IGlzIHBvcHVsYXRlZCBieSBkZWNvbXByZXNzaW5nIHRoZSB6c3dhcCBlbnRyeSBpbnRvIGl0LiBJZiB0aGUgZGVjb21wcmVzc2lvbiBmYWlscywgdGhlbiB0aGUgZm9saW8gaXMgZGVsZXRlZCBmcm9tIHN3YXAgY2FjaGUsIG90aGVyd2lzZSwgaXQgbWFya3MgaXQgdXAtdG8tZGF0ZSBhbmQgd3JpdGVzIGl0IGJhY2suIENydWNpYWxseSwgdGhlcmUmIzM5O3Mgbm8gc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgKmV4cG9zZWQqIHRvIHVzZXIgc3BhY2UsIG9yIHdoZXJlIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgYWxsb2NhdGlvbiBhbmQgd3JpdGViYWNrIHBhdGguIFRoZSBjb2RlIGNhcmVmdWxseSBwb3B1bGF0ZXMgdGhlIGZvbGlvIHdpdGggdGhlIGRlY29tcHJlc3NlZCBkYXRhLiBUaGUgcHJpbWFyeSBjb25jZXJucyBJIHNlZSBhcmUgdXNlLWFmdGVyLWZyZWUgYnVncyAoZS5nLiwgZHJvcHBpbmcgYSByZWZlcmVuY2UgZWFybHkgYW5kIHRoZW4gYWNjZXNzaW5nIHRoZSBmb2xpbyksIG1lbW9yeSBsZWFrcywgb3IgYmFkIHBhZ2Ugc3RhdGUgaXNzdWVzIC0gYWxsIG9mIHdoaWNoIHdvdWxkIGJlIGZsYWdnZWQgYnkgc3RhbmRhcmQgVk0gZGVidWdnaW5nIHRvb2xzIG9yIEtBU0FOLgoKSW4gc3VtbWFyeSwgdGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgZm9saW8gbGlmZWN5Y2xlIGluIHRoZSBzd2FwIGNhY2hlLCBpbnRyb2R1Y2VzIGEgJiMzNDtkcm9wYmVoaW5kJiMzNDsgbWVjaGFuaXNtLCBhbmQgY2hhbmdlcyBob3cgZm9saW9zIGFyZSBhbGxvY2F0ZWQgKG9mZi1MUlUpIGFuZCBtYW5hZ2VkIGR1cmluZyB6c3dhcCB3cml0ZWJhY2suIFRoZSBwb3RlbnRpYWwgYnVncyBhcmUgcHJpbWFyaWx5IHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIGFuZCBwYWdlIHN0YXRlIGlzc3VlcyAtIGFsbCBvZiB3aGljaCBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiwgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZWJ1ZyBvcHRpb25zLCBhbmQgcGFnZSByZWZlcmVuY2UgdHJhY2tpbmcuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IHVzZXItc3BhY2UgZGF0YSBzdHJ1Y3R1cmVzIG5vciBwYXJzaW5nIGxvZ2ljIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gS01TQU4gaXMgbm90IGp1c3RpZmllZCBoZXJlLiBXZSYjMzk7cmUgbG9va2luZyBhdCByZWZlcmVuY2UgY291bnRpbmcsIExSVSBsaXN0IG1hbmFnZW1lbnQsIGFuZCB0aGUgb3ZlcmFsbCBzd2FwIGNhY2hlIGxpZmVjeWNsZS4gVGhlcmVmb3JlLCBLQVNBTiBhbmQgdGhlIHN0YW5kYXJkIFZNIGRlYnVnIHRvb2xzIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIHBhdGNoLiBJIHRoaW5rIHRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNhbGwuIE5vIG5lZWQgZm9yIGEgS01TQU4gc2Vzc2lvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBmb2xpb3MgaW4gdGhlIHN3YXAgY2FjaGUsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBhIFwmIzM0O2Ryb3BiZWhpbmRcJiMzNDsgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2suIEl0IGNoYW5nZXMgaG93IGZvbGlvcyBhcmUgYWxsb2NhdGVkIGZvciB0aGUgc3dhcCBjYWNoZSAocmV0dXJuaW5nIHRoZW0gb2ZmLUxSVSkgYW5kIG1hbmFnZXMgdGhlaXIgcmVmZXJlbmNlcyBkdXJpbmcgd3JpdGViYWNrLlxuXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBMUlUgbGlzdCBtYW5hZ2VtZW50LCBhbmQgc3dhcCBjYWNoZSBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MgKGUuZy4sIGZvbGlvcyBsZWZ0IG9mZiB0aGUgTFJVKSwgb3IgaW52YWxpZCBwYWdlIHN0YXRlcy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnIG9wdGlvbnMgKGxpa2UgYENPTkZJR19ERUJVR19WTWApLCBhbmQgcGFnZSByZWZlcmVuY2UgdHJhY2tpbmcuXG5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggcGFyc2luZyBsb2dpYyBvciBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmb2xpb3MgYWxsb2NhdGVkIGFyZSBwb3B1bGF0ZWQgdmlhIGRlY29tcHJlc3Npb24gYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gc3dhcCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBleHBvc2VkLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgZm9saW9zIGluIHRoZSBzd2FwIGNhY2hlLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgYSBcJiMzNDtkcm9wYmVoaW5kXCYjMzQ7IG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrLiBJdCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCBmb3IgdGhlIHN3YXAgY2FjaGUgKHJldHVybmluZyB0aGVtIG9mZi1MUlUpIGFuZCBtYW5hZ2VzIHRoZWlyIHJlZmVyZW5jZXMgZHVyaW5nIHdyaXRlYmFjay5cblxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBwYWdlIHJlZmVyZW5jZSBjb3VudGluZywgTFJVIGxpc3QgbWFuYWdlbWVudCwgYW5kIHN3YXAgY2FjaGUgb3BlcmF0aW9ucy4gVGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzIChlLmcuLCBmb2xpb3MgbGVmdCBvZmYgdGhlIExSVSksIG9yIGludmFsaWQgcGFnZSBzdGF0ZXMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZWJ1ZyBvcHRpb25zIChsaWtlIGBDT05GSUdfREVCVUdfVk1gKSwgYW5kIHBhZ2UgcmVmZXJlbmNlIHRyYWNraW5nLlxuXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IHBhcnNpbmcgbG9naWMgb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZm9saW9zIGFsbG9jYXRlZCBhcmUgcG9wdWxhdGVkIHZpYSBkZWNvbXByZXNzaW9uIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHN3YXAsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgZXhwb3NlZC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjI5OjEwLjg4NDg3NDg2NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzA1ODA1NTg2MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIixcbiAgICBcIlpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIixcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb1wiLFxuICAgIFwicmVtb3ZlX21hcHBpbmdfcmVjbGFpbVwiLFxuICAgIFwiX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG9mIGZvbGlvcyBpbiB0aGUgc3dhcCBjYWNoZSwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGEgXFxcImRyb3BiZWhpbmRcXFwiIG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrLiBJdCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCBmb3IgdGhlIHN3YXAgY2FjaGUgKHJldHVybmluZyB0aGVtIG9mZi1MUlUpIGFuZCBtYW5hZ2VzIHRoZWlyIHJlZmVyZW5jZXMgZHVyaW5nIHdyaXRlYmFjay5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBMUlUgbGlzdCBtYW5hZ2VtZW50LCBhbmQgc3dhcCBjYWNoZSBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MgKGUuZy4sIGZvbGlvcyBsZWZ0IG9mZiB0aGUgTFJVKSwgb3IgaW52YWxpZCBwYWdlIHN0YXRlcy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnIG9wdGlvbnMgKGxpa2UgYENPTkZJR19ERUJVR19WTWApLCBhbmQgcGFnZSByZWZlcmVuY2UgdHJhY2tpbmcuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBwYXJzaW5nIGxvZ2ljIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGZvbGlvcyBhbGxvY2F0ZWQgYXJlIHBvcHVsYXRlZCB2aWEgZGVjb21wcmVzc2lvbiBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byBzd2FwLCBhbmQgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGlzIGV4cG9zZWQuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gZHJvcCBzd2FwIGNhY2hlIGZvbGlvcyBhZnRlciB6c3dhcCB3cml0ZWJhY2sgY29tcGxldGVzLCBhdm9pZGluZyB1bm5lY2Vzc2FyeSBMUlUgcG9sbHV0aW9uLiBJdCBhZGRzIG5ldyBmdW5jdGlvbnMgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGFuZCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAsIGFuZCBtb2RpZmllcyBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCB0byB1c2UgdGhpcyBtZWNoYW5pc20uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gKHN3YXAsIHpzd2FwLCBwYWdlIGNhY2hlKSB0aGF0IGFmZmVjdHMgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgYmVoYXZpb3IsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6Mjk6MTAuODg0ODgzOTQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTkwMjQ3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZTA4NjI5OTg2NDA0OWVkNzc2OThlYWZlYzBlYzM3NjYwZGVmMTVmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDE0OjI5OjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5pbmRleCA4ZjBmNjhlMjQ1YmFhLi4yOWVjNjBkY2FlMjEzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcXG5AQCAtMzc0LDYgKzM3NCw4IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfc2hyaW5rX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSxcXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XFxuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcXG4gbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xcbiBcXG4gI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbiBleHRlcm4gaW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XFxuQEAgLTQ2NSw2ICs0NjcsOCBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpO1xcbiAgKi9cXG4gYm9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIFxcbit2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK1xcbiAvKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xcbiBzd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpO1xcbiB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcXG5AQCAtNDc1LDYgKzQ3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF9kZXZpY2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxcbiB9XFxuIFxcbiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqL1xcbitzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXFxuIHtcXG4gXFx0cmV0dXJuIE5VTEw7XFxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xcbmluZGV4IGQ3MjE5ODZkNWY0NjUuLjA0MGM5N2ExMjFkZWQgMTAwNjQ0XFxuLS0tIGEvbW0vZmlsZW1hcC5jXFxuKysrIGIvbW0vZmlsZW1hcC5jXFxuQEAgLTE2ODYsNiArMTY4Niw4IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7XFxuICAqL1xcbiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbitcXHRib29sIHN3YXBfZHJvcGJlaGluZDtcXG4rXFxuIFxcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XFxuIFxcbiBcXHQvKlxcbkBAIC0xNjk1LDcgKzE2OTcsMjQgQEAgdm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdCAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuXFxuIFxcdCAqL1xcbiBcXHRmb2xpb19nZXQoZm9saW8pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2FtcGxlIHRoaXMgYmVmb3JlIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCgpIGNsZWFyc1xcbitcXHQgKiBQR193cml0ZWJhY2s6IHVudGlsIHRoZW4gYSByYWNpbmcgc3dhcGluIGNhbm5vdCByZW1vdmUgdGhlIGZvbGlvIGZyb21cXG4rXFx0ICogdGhlIHN3YXAgY2FjaGUuIEFmdGVyd2FyZHMgaXQgY2FuLCBhbmQgdGhlIGRyb3AgYmVsb3cgdGhlbiBmaW5kcyBhXFxuK1xcdCAqIG5vbi1zd2FwY2FjaGUgZm9saW8gYW5kIHB1dHMgaXQgYmFjayBvbiB0aGUgTFJVIGluc3RlYWQuIFRoZVxcbitcXHQgKiByZWZlcmVuY2UgdGFrZW4gYWJvdmUga2VlcHMgdGhlIGZvbGlvIGFsaXZlIGFjcm9zcyB0aGF0IHdpbmRvdy5cXG4rXFx0ICovXFxuK1xcdHN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbyk7XFxuK1xcbiBcXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xcbitcXG4rXFx0aWYgKHN3YXBfZHJvcGJlaGluZCkge1xcbitcXHRcXHRzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jXFxuaW5kZXggYjIzZjQ5NGZjYzgzZC4uNTg2Yzc5YzNiYjNkMiAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2lvLmNcXG4rKysgYi9tbS9wYWdlX2lvLmNcXG5AQCAtNDU2LDYgKzQ1NiwxMyBAQCBzdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0gZW5kX3N3YXBfYmlvX3dyaXRlO1xcbiBcXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGZvbGlvLCBmb2xpb19zaXplKGZvbGlvKSwgMCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBEcm9wcGluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSB0YWtlcyBzbGVlcGluZyBsb2Nrcywgc28gdGhlXFxuK1xcdCAqIGNvbXBsZXRpb24gbXVzdCBub3QgcnVuIGluIGludGVycnVwdCBjb250ZXh0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXFxuK1xcdFxcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcXG4rXFxuIFxcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbyk7XFxuIFxcdGNvdW50X3N3cG91dF92bV9ldmVudChmb2xpbyk7XFxuIFxcdGZvbGlvX3N0YXJ0X3dyaXRlYmFjayhmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5oXFxuKysrIGIvbW0vc3dhcC5oXFxuQEAgLTMwNCw5ICszMDQsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7XFxuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxcbi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XFxuIC8qIEJlbG93IGhlbHBlcnMgcmVxdWlyZSB0aGUgY2FsbGVyIHRvIGxvY2sgYW5kIHBhc3MgaW4gdGhlIHN3YXAgY2x1c3Rlci4gKi9cXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xcbmluZGV4IDcyN2ExN2VlNzgyMTEuLjIzMWZhODdjYmJlMGMgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXFxuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXFxuQEAgLTQ4MywxMyArNDgzLDExIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XFxuIFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XFxuIFxcbi1cXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xcbi1cXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiB9XFxuIFxcbiAvKipcXG4tICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXFxuKyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXFxuICAqIEB0YXJnX2VudHJ5OiBzd2FwIGVudHJ5IGluZGljYXRpbmcgdGhlIHRhcmdldCBzbG90XFxuICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzXFxuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXFxuQEAgLTUwMSwxMyArNDk5LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XFxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cXG4gICpcXG4rICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXJcXG4rICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXFxuKyAqIGl0IGRpcmVjdGx5IG9uY2UgZG9uZTsgYSBmb2xpbyBsZWZ0IG9mZiB0aGUgTFJVIGlzIHVucmVjbGFpbWFibGUgYW5kIGxlYWtzLlxcbisgKlxcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cXG4gICogUmV0dXJuOiBSZXR1cm5zIHRoZSBmb2xpbyBpZiBhbGxvY2F0aW9uIHN1Y2NlZWRlZCBhbmQgZm9saW8gaXMgaW4gdGhlIHN3YXBcXG4gICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy5cXG4gICovXFxuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuK1xcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4ge1xcbiBcXHRpbnQgb3JkZXIsIGVycjtcXG4gXFx0c3RydWN0IGZvbGlvICpyZXQ7XFxuQEAgLTUzNSw2ICs1MzcsNDcgQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8gLSBkcm9wIGEgZHJvcGJlaGluZCBzd2FwIGNhY2hlIGZvbGlvXFxuKyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWRcXG4rICpcXG4rICogQ29udGV4dDogdGFzayBjb250ZXh0LCB3aXRoIHRoZSByZWZlcmVuY2UgdGFrZW4gYnkgZm9saW9fZW5kX3dyaXRlYmFjaygpXFxuKyAqIGRvbmF0ZWQgdG8gdXMuXFxuKyAqL1xcbit2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuK1xcbitcXHRmb2xpb19sb2NrKGZvbGlvKTtcXG4rXFxuK1xcdC8qIFRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkIG9mZiB0aGUgTFJVIGFuZCBub3RoaW5nIHJlLWFkZHMgaXQgaGVyZS4gKi9cXG4rXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcXG4rXFx0aWYgKCFtZW1fY2dyb3VwX3RyeWdldChtZW1jZykpXFxuK1xcdFxcdG1lbWNnID0gTlVMTDtcXG4rXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBHYXRlIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZ1xcbitcXHQgKiBzd2FwaW4gbWF5IGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZVxcbitcXHQgKiBmb2xpbyBmcm9tIHRoZSBjYWNoZSwgYW5kIGl0IG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW8gKGl0XFxuK1xcdCAqIHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJ3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8XFxuK1xcdCAgICAhcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzd2FwX2FkZHJlc3Nfc3BhY2UoZm9saW8tXFx1MDAzZXN3YXApLCBmb2xpbywgbWVtY2cpKSB7XFxuK1xcdFxcdC8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqL1xcbitcXHRcXHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcXG4rXFx0XFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuK1xcdH1cXG4rXFxuK1xcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcXG4rXFxuK1xcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuK1xcdGZvbGlvX3B1dChmb2xpbyk7XFxuK31cXG4rXFxuIC8qXFxuICAqIElmIHdlIGFyZSB0aGUgb25seSB1c2VyLCB0aGVuIHRyeSB0byBmcmVlIHVwIHRoZSBzd2FwIGNhY2hlLlxcbiAgKlxcbkBAIC02NDMsMTIgKzY4NiwxMyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XFxuIFxcdFxcdGlmIChmb2xpbylcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbi1cXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbitcXHRcXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XFxuIFxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbiBcXG4gXFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTtcXG4gXFx0aWYgKHJlYWRhaGVhZCkge1xcbiBcXHRcXHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcXG5AQCAtNjgzLDEyICs3MjcsMTMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XFxuIFxcdFxcdGlmIChmb2xpbylcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbi1cXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XFxuK1xcdFxcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbiBcXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcXG4gXFxuIFxcdGlmIChJU19FUlIoZm9saW8pKVxcbiBcXHRcXHRyZXR1cm4gZm9saW87XFxuIFxcbitcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCA4NDhiZDNlNWVlZTJiLi40Y2MzYTNlZDZkYjZlIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNzgwLDYgKzc4MCwyMiBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgbG9uZyBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1lZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcXG4re1xcbitcXHRpZiAoX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgcmVjbGFpbWVkLCB0YXJnZXRfbWVtY2cpKSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFVuZnJlZXppbmcgdGhlIHJlZmNvdW50IHdpdGggMSBlZmZlY3RpdmVseVxcbitcXHRcXHQgKiBkcm9wcyB0aGUgcGFnZWNhY2hlIHJlZiBmb3IgdXMgd2l0aG91dCByZXF1aXJpbmcgYW5vdGhlclxcbitcXHRcXHQgKiBhdG9taWMgb3BlcmF0aW9uLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcXG4rXFx0XFx0cmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuXFxuICAqIEBtYXBwaW5nOiBUaGUgYWRkcmVzcyBzcGFjZS5cXG5AQCAtNzk0LDE2ICs4MTAsMjggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiAgKi9cXG4gbG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4ge1xcbi1cXHRpZiAoX19yZW1vdmVfbWFwcGluZyhtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpKSB7XFxuLVxcdFxcdC8qXFxuLVxcdFxcdCAqIFVuZnJlZXppbmcgdGhlIHJlZmNvdW50IHdpdGggMSBlZmZlY3RpdmVseVxcbi1cXHRcXHQgKiBkcm9wcyB0aGUgcGFnZWNhY2hlIHJlZiBmb3IgdXMgd2l0aG91dCByZXF1aXJpbmcgYW5vdGhlclxcbi1cXHRcXHQgKiBhdG9taWMgb3BlcmF0aW9uLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCAxKTtcXG4tXFx0XFx0cmV0dXJuIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tXFx0fVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIF9fcmVtb3ZlX21hcHBpbmdfdW5mcmVlemUobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSAtIFJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcsIGFzIHJlY2xhaW0gZG9lcy5cXG4rICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLlxcbisgKiBAZm9saW86IFRoZSBmb2xpbyB0byByZW1vdmUuXFxuKyAqIEB0YXJnZXRfbWVtY2c6IFRoZSBtZW1jZyB0byBjaGFyZ2UgdGhlIGV2aWN0aW9uIHNoYWRvdyB0bzsgdGhlIGNhbGxlciBtdXN0XFxuKyAqICAgICAgICAgICAgICAgIGtlZXAgaXQgYWxpdmUgYWNyb3NzIHRoZSBjYWxsLlxcbisgKlxcbisgKiBMaWtlIHJlbW92ZV9tYXBwaW5nKCksIGJ1dCBzdG9yZXMgYSB3b3JraW5nc2V0IGV2aWN0aW9uIHNoYWRvdyB0aGUgd2F5IHBhZ2VcXG4rICogcmVjbGFpbSBkb2VzLCBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmUgZGV0ZWN0ZWQgYW5kIHRoZSBmb2xpb1xcbisgKiByZS1hY3RpdmF0ZWQuXFxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpb1xcbisgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC5cXG4rICogQ29udGV4dDogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBhIHNpbmdsZSByZWZjb3VudCBvbiB0aGUgZm9saW8gYW5kXFxuKyAqIGhvbGQgaXRzIGxvY2suXFxuKyAqL1xcbitsb25nIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuK1xcdFxcdFxcdCAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxcbit7XFxuK1xcdHJldHVybiBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKG1hcHBpbmcsIGZvbGlvLCB0cnVlLCB0YXJnZXRfbWVtY2cpO1xcbiB9XFxuIFxcbiAvKipcXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcXG5pbmRleCA3NjFjZDY5OWUwYTNlLi5kMTY4MjJhNTE2ZThkIDEwMDY0NFxcbi0tLSBhL21tL3pzd2FwLmNcXG4rKysgYi9tbS96c3dhcC5jXFxuQEAgLTEwMDAsOCArMTAwMCw4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXG4gXFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG4tXFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcXG4rXFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcXG4rXFx0XFx0XFx0XFx0XFx0IE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xcbiBcXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xcbiBcXG4gXFx0LypcXG5AQCAtMTA0NSwxMiArMTA0NSwyNiBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHQvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovXFxuIFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbiBcXG4tXFx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXFxuLVxcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcXG4rXFx0Zm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRHJvcCBvdXIgcmVmZXJlbmNlIGJlZm9yZSBzdGFydGluZyB3cml0ZWJhY2sgc28gdGhlIHN3YXAgY2FjaGUgaG9sZHNcXG4rXFx0ICogdGhlIG9ubHkgb25lOiB0aGUgZHJvcCBpbiBmb2xpb19lbmRfd3JpdGViYWNrKCkgbmVlZHMgdGhhdCBmb3JcXG4rXFx0ICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIHRvIHN1Y2NlZWQsIG90aGVyd2lzZSB0aGUgZm9saW8gaXMgaGFuZGVkXFxuK1xcdCAqIGJhY2sgdG8gcmVjbGFpbSBpbnN0ZWFkLlxcbitcXHQgKlxcbitcXHQgKiBOb3RoaW5nIGNhbiBmcmVlIHRoZSBmb2xpbyBpbiB0aGUgbWVhbnRpbWU6IHdlIGhvbGQgdGhlIGZvbGlvIGxvY2tcXG4rXFx0ICogdW50aWwgd3JpdGViYWNrIHN0YXJ0cywgUEdfd3JpdGViYWNrIHRoZW4gYmxvY2tzIHN3YXAgY2FjaGUgcmVtb3ZhbCxcXG4rXFx0ICogYW5kIGZvbGlvX2VuZF93cml0ZWJhY2soKSB0YWtlcyBpdHMgb3duIHJlZmVyZW5jZSBiZWZvcmUgY2xlYXJpbmdcXG4rXFx0ICogUEdfd3JpdGViYWNrIGFuZCBkb25hdGVzIGl0IHRvIHRoZSBkcm9wLlxcbitcXHQgKi9cXG4rXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4gXFxuIFxcdC8qIHN0YXJ0IHdyaXRlYmFjayAqL1xcbiBcXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcXG4gXFxuK1xcdHJldHVybiAwO1xcbitcXG4gb3V0OlxcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6Mjk6MTEuNDQ0ODkzNzIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTUwOTUxMTU1MjgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gICAgXCJyZW1vdmVfbWFwcGluZ19yZWNsYWltXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGRyb3Agc3dhcCBjYWNoZSBmb2xpb3MgYWZ0ZXIgenN3YXAgd3JpdGViYWNrIGNvbXBsZXRlcywgYXZvaWRpbmcgdW5uZWNlc3NhcnkgTFJVIHBvbGx1dGlvbi4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBhbmQgbW9kaWZpZXMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgdG8gdXNlIHRoaXMgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChzd2FwLCB6c3dhcCwgcGFnZSBjYWNoZSkgdGhhdCBhZmZlY3RzIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGJlaGF2aW9yLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFlMDg2Mjk5ODY0MDQ5ZWQ3NzY5OGVhZmVjMGVjMzc2NjBkZWYxNWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxNDoyOTowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbmluZGV4IDhmMGY2OGUyNDViYWEuLjI5ZWM2MGRjYWUyMTMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmhcbkBAIC0zNzQsNiArMzc0LDggQEAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9zaHJpbmtfbm9kZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLFxuIGV4dGVybiB1bnNpZ25lZCBsb25nIHNocmlua19hbGxfbWVtb3J5KHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpO1xuIGV4dGVybiBpbnQgdm1fc3dhcHBpbmVzcztcbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitsb25nIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpO1xuIFxuICNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG4gZXh0ZXJuIGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuQEAgLTQ2NSw2ICs0NjcsOCBAQCB2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpO1xuICAqL1xuIGJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbitcbiAvKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xuIHN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XG4gdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7XG5AQCAtNDc1LDYgKzQ3OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfc3dhcF9kZXZpY2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpKVxuIH1cbiBcbiAjZWxzZSAvKiBDT05GSUdfU1dBUCAqL1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9XG4gc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxuIHtcbiBcdHJldHVybiBOVUxMO1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggZDcyMTk4NmQ1ZjQ2NS4uMDQwYzk3YTEyMWRlZCAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtMTY4Niw2ICsxNjg2LDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcbiAgKi9cbiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4rXHRib29sIHN3YXBfZHJvcGJlaGluZDtcbitcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pLCBmb2xpbyk7XG4gXG4gXHQvKlxuQEAgLTE2OTUsNyArMTY5NywyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdCAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuXG4gXHQgKi9cbiBcdGZvbGlvX2dldChmb2xpbyk7XG4rXG4rXHQvKlxuK1x0ICogU2FtcGxlIHRoaXMgYmVmb3JlIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCgpIGNsZWFyc1xuK1x0ICogUEdfd3JpdGViYWNrOiB1bnRpbCB0aGVuIGEgcmFjaW5nIHN3YXBpbiBjYW5ub3QgcmVtb3ZlIHRoZSBmb2xpbyBmcm9tXG4rXHQgKiB0aGUgc3dhcCBjYWNoZS4gQWZ0ZXJ3YXJkcyBpdCBjYW4sIGFuZCB0aGUgZHJvcCBiZWxvdyB0aGVuIGZpbmRzIGFcbitcdCAqIG5vbi1zd2FwY2FjaGUgZm9saW8gYW5kIHB1dHMgaXQgYmFjayBvbiB0aGUgTFJVIGluc3RlYWQuIFRoZVxuK1x0ICogcmVmZXJlbmNlIHRha2VuIGFib3ZlIGtlZXBzIHRoZSBmb2xpbyBhbGl2ZSBhY3Jvc3MgdGhhdCB3aW5kb3cuXG4rXHQgKi9cbitcdHN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbyk7XG4rXG4gXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xuK1xuK1x0aWYgKHN3YXBfZHJvcGJlaGluZCkge1xuK1x0XHRzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jXG5pbmRleCBiMjNmNDk0ZmNjODNkLi41ODZjNzljM2JiM2QyIDEwMDY0NFxuLS0tIGEvbW0vcGFnZV9pby5jXG4rKysgYi9tbS9wYWdlX2lvLmNcbkBAIC00NTYsNiArNDU2LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmMoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBlbmRfc3dhcF9iaW9fd3JpdGU7XG4gXHRiaW9fYWRkX2ZvbGlvX25vZmFpbChiaW8sIGZvbGlvLCBmb2xpb19zaXplKGZvbGlvKSwgMCk7XG4gXG4rXHQvKlxuK1x0ICogRHJvcHBpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdGFrZXMgc2xlZXBpbmcgbG9ja3MsIHNvIHRoZVxuK1x0ICogY29tcGxldGlvbiBtdXN0IG5vdCBydW4gaW4gaW50ZXJydXB0IGNvbnRleHQuXG4rXHQgKi9cbitcdGlmIChmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pKVxuK1x0XHRiaW9fc2V0X2ZsYWcoYmlvLCBCSU9fQ09NUExFVEVfSU5fVEFTSyk7XG4rXG4gXHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pO1xuIFx0Y291bnRfc3dwb3V0X3ZtX2V2ZW50KGZvbGlvKTtcbiBcdGZvbGlvX3N0YXJ0X3dyaXRlYmFjayhmb2xpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA3N2QyZDE0ZWRhNDIxLi5mYzQ0ZGFhZTFkZTFmIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0zMDQsOSArMzA0LDkgQEAgYm9vbCBzd2FwX2NhY2hlX2hhc19mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2dldF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuK1x0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA3MjdhMTdlZTc4MjExLi4yMzFmYTg3Y2JiZTBjIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC00ODMsMTMgKzQ4MywxMSBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XG4gXG4tXHQvKiBDYWxsZXIgd2lsbCBpbml0aWF0ZSByZWFkIGludG8gbG9ja2VkIG5ld19mb2xpbyAqL1xuLVx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuIC8qKlxuLSAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxuKyAqIF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4gICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcbiAgKiBAZ2ZwOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFnc1xuICAqIEBvcmRlcnM6IGFsbG9jYXRpb24gb3JkZXJzLCBtdXN0IGJlIG5vbiB6ZXJvXG5AQCAtNTAxLDEzICs0OTksMTcgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogZG9pbmcgSU8gKGUuZy4gc3dhcCBpbiBvciB6c3dhcCB3cml0ZWJhY2spLiBUaGUgc3dhcCBzbG90IGluZGljYXRlZCBieVxuICAqIEB0YXJnX2VudHJ5IG11c3QgaGF2ZSBhIG5vbi16ZXJvIHN3YXAgY291bnQgKHN3YXBwZWQgb3V0KS5cbiAgKlxuKyAqIFRoZSByZXR1cm5lZCBmb2xpbyBpcyBsb2NrZWQgYW5kIGlzIE5PVCBvbiB0aGUgTFJVLiBUaGUgY2FsbGVyIG11c3QgZWl0aGVyXG4rICogYWRkIGl0IHRvIHRoZSBMUlUgd2l0aCBmb2xpb19hZGRfbHJ1KCkgc28gcGFnZSByZWNsYWltIGNhbiBmaW5kIGl0LCBvciBmcmVlXG4rICogaXQgZGlyZWN0bHkgb25jZSBkb25lOyBhIGZvbGlvIGxlZnQgb2ZmIHRoZSBMUlUgaXMgdW5yZWNsYWltYWJsZSBhbmQgbGVha3MuXG4rICpcbiAgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBwcm90ZWN0IHRoZSBzd2FwIGRldmljZSB3aXRoIHJlZmVyZW5jZSBjb3VudCBvciBsb2Nrcy5cbiAgKiBSZXR1cm46IFJldHVybnMgdGhlIGZvbGlvIGlmIGFsbG9jYXRpb24gc3VjY2VlZGVkIGFuZCBmb2xpbyBpcyBpbiB0aGUgc3dhcFxuICAqIGNhY2hlLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYgZmFpbGVkIGR1ZSB0byByYWNlLCBPT00gb3IgaW52YWxpZCBhcmd1bWVudHMuXG4gICovXG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcbitzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTM1LDYgKzUzNyw0NyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyAtIGRyb3AgYSBkcm9wYmVoaW5kIHN3YXAgY2FjaGUgZm9saW9cbisgKiBAZm9saW86IHRoZSBvZmYtTFJVIGZvbGlvIHdob3NlIHdyaXRlYmFjayBoYXMgY29tcGxldGVkXG4rICpcbisgKiBDb250ZXh0OiB0YXNrIGNvbnRleHQsIHdpdGggdGhlIHJlZmVyZW5jZSB0YWtlbiBieSBmb2xpb19lbmRfd3JpdGViYWNrKClcbisgKiBkb25hdGVkIHRvIHVzLlxuKyAqL1xuK3ZvaWQgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbitcbitcdGZvbGlvX2xvY2soZm9saW8pO1xuK1xuK1x0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0bWVtY2cgPSBmb2xpb19tZW1jZyhmb2xpbyk7XG4rXHRpZiAoIW1lbV9jZ3JvdXBfdHJ5Z2V0KG1lbWNnKSlcbitcdFx0bWVtY2cgPSBOVUxMO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHQvKlxuK1x0ICogR2F0ZSByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgb24gZm9saW9fdGVzdF9zd2FwY2FjaGUoKTogYSByYWNpbmdcbitcdCAqIHN3YXBpbiBtYXkgaGF2ZSBmcmVlZCB0aGUgc3dhcCBzbG90IChmb2xpb19mcmVlX3N3YXAoKSkgYW5kIGRyb3BwZWQgdGhlXG4rXHQgKiBmb2xpbyBmcm9tIHRoZSBjYWNoZSwgYW5kIGl0IG11c3Qgbm90IHJ1biBvbiBhIG5vbi1zd2FwY2FjaGUgZm9saW8gKGl0XG4rXHQgKiB3b3VsZCB0cmlwIF9fcmVtb3ZlX21hcHBpbmcoKSdzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS5cbitcdCAqL1xuK1x0aWYgKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgfHwgZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pIHx8XG4rXHQgICAgIXJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oc3dhcF9hZGRyZXNzX3NwYWNlKGZvbGlvLVx1MDAzZXN3YXApLCBmb2xpbywgbWVtY2cpKSB7XG4rXHRcdC8qIFJhY2VkOiB0aGUgZm9saW8gaXMgbm93IG93bmVkIGJ5IHRoZSBzd2FwaW47IHB1dCBpdCBiYWNrLiAqL1xuK1x0XHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcbitcdFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4rXHR9XG4rXG4rXHRtZW1fY2dyb3VwX3B1dChtZW1jZyk7XG4rXG4rXHRmb2xpb191bmxvY2soZm9saW8pO1xuK1x0Zm9saW9fcHV0KGZvbGlvKTtcbit9XG4rXG4gLypcbiAgKiBJZiB3ZSBhcmUgdGhlIG9ubHkgdXNlciwgdGhlbiB0cnkgdG8gZnJlZSB1cCB0aGUgc3dhcCBjYWNoZS5cbiAgKlxuQEAgLTY0MywxMiArNjg2LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbitcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBwbHVnKTtcbiBcdGlmIChyZWFkYWhlYWQpIHtcbiBcdFx0Zm9saW9fc2V0X3JlYWRhaGVhZChmb2xpbyk7XG5AQCAtNjgzLDEyICs3MjcsMTMgQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbiBcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XG4gXHRcdGlmIChmb2xpbylcbiBcdFx0XHRyZXR1cm4gZm9saW87XG4tXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbitcdFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuIFx0XHRyZXR1cm4gZm9saW87XG4gXG4rXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHN3YXBfcmVhZF9mb2xpbyhmb2xpbywgTlVMTCk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IDg0OGJkM2U1ZWVlMmIuLjRjYzNhM2VkNmRiNmUgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC03ODAsNiArNzgwLDIyIEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgbG9uZyBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCByZWNsYWltZWQsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxuK3tcbitcdGlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCByZWNsYWltZWQsIHRhcmdldF9tZW1jZykpIHtcbitcdFx0LypcbitcdFx0ICogVW5mcmVlemluZyB0aGUgcmVmY291bnQgd2l0aCAxIGVmZmVjdGl2ZWx5XG4rXHRcdCAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyXG4rXHRcdCAqIGF0b21pYyBvcGVyYXRpb24uXG4rXHRcdCAqL1xuK1x0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xuK1x0XHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIC8qKlxuICAqIHJlbW92ZV9tYXBwaW5nKCkgLSBBdHRlbXB0IHRvIHJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcuXG4gICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLlxuQEAgLTc5NCwxNiArODEwLDI4IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAgKi9cbiBsb25nIHJlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbi1cdGlmIChfX3JlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCkpIHtcbi1cdFx0Lypcbi1cdFx0ICogVW5mcmVlemluZyB0aGUgcmVmY291bnQgd2l0aCAxIGVmZmVjdGl2ZWx5XG4tXHRcdCAqIGRyb3BzIHRoZSBwYWdlY2FjaGUgcmVmIGZvciB1cyB3aXRob3V0IHJlcXVpcmluZyBhbm90aGVyXG4tXHRcdCAqIGF0b21pYyBvcGVyYXRpb24uXG4tXHRcdCAqL1xuLVx0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIDEpO1xuLVx0XHRyZXR1cm4gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuLVx0fVxuLVx0cmV0dXJuIDA7XG4rXHRyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgZmFsc2UsIE5VTEwpO1xuK31cbitcbisvKipcbisgKiByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgLSBSZW1vdmUgYSBmb2xpbyBmcm9tIGl0cyBtYXBwaW5nLCBhcyByZWNsYWltIGRvZXMuXG4rICogQG1hcHBpbmc6IFRoZSBhZGRyZXNzIHNwYWNlLlxuKyAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHJlbW92ZS5cbisgKiBAdGFyZ2V0X21lbWNnOiBUaGUgbWVtY2cgdG8gY2hhcmdlIHRoZSBldmljdGlvbiBzaGFkb3cgdG87IHRoZSBjYWxsZXIgbXVzdFxuKyAqICAgICAgICAgICAgICAgIGtlZXAgaXQgYWxpdmUgYWNyb3NzIHRoZSBjYWxsLlxuKyAqXG4rICogTGlrZSByZW1vdmVfbWFwcGluZygpLCBidXQgc3RvcmVzIGEgd29ya2luZ3NldCBldmljdGlvbiBzaGFkb3cgdGhlIHdheSBwYWdlXG4rICogcmVjbGFpbSBkb2VzLCBzbyB0aGF0IGEgbGF0ZXIgcmVmYXVsdCBjYW4gYmUgZGV0ZWN0ZWQgYW5kIHRoZSBmb2xpb1xuKyAqIHJlLWFjdGl2YXRlZC5cbisgKiBSZXR1cm46IFRoZSBudW1iZXIgb2YgcGFnZXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXBwaW5nLiAgMCBpZiB0aGUgZm9saW9cbisgKiBjb3VsZCBub3QgYmUgcmVtb3ZlZC5cbisgKiBDb250ZXh0OiBUaGUgY2FsbGVyIHNob3VsZCBoYXZlIGEgc2luZ2xlIHJlZmNvdW50IG9uIHRoZSBmb2xpbyBhbmRcbisgKiBob2xkIGl0cyBsb2NrLlxuKyAqL1xuK2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHQgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbit7XG4rXHRyZXR1cm4gX19yZW1vdmVfbWFwcGluZ191bmZyZWV6ZShtYXBwaW5nLCBmb2xpbywgdHJ1ZSwgdGFyZ2V0X21lbWNnKTtcbiB9XG4gXG4gLyoqXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2UuLmQxNjgyMmE1MTZlOGQgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4rKysgYi9tbS96c3dhcC5jXG5AQCAtMTAwMCw4ICsxMDAwLDggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuLVx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4tXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4rXHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuK1x0XHRcdFx0XHQgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4gXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xuIFxuIFx0LypcbkBAIC0xMDQ1LDEyICsxMDQ1LDI2IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHQvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovXG4gXHRmb2xpb19tYXJrX3VwdG9kYXRlKGZvbGlvKTtcbiBcbi1cdC8qIG1vdmUgaXQgdG8gdGhlIHRhaWwgb2YgdGhlIGluYWN0aXZlIGxpc3QgYWZ0ZXIgZW5kX3dyaXRlYmFjayAqL1xuLVx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xuK1x0Zm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xuK1xuK1x0LypcbitcdCAqIERyb3Agb3VyIHJlZmVyZW5jZSBiZWZvcmUgc3RhcnRpbmcgd3JpdGViYWNrIHNvIHRoZSBzd2FwIGNhY2hlIGhvbGRzXG4rXHQgKiB0aGUgb25seSBvbmU6IHRoZSBkcm9wIGluIGZvbGlvX2VuZF93cml0ZWJhY2soKSBuZWVkcyB0aGF0IGZvclxuK1x0ICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIHRvIHN1Y2NlZWQsIG90aGVyd2lzZSB0aGUgZm9saW8gaXMgaGFuZGVkXG4rXHQgKiBiYWNrIHRvIHJlY2xhaW0gaW5zdGVhZC5cbitcdCAqXG4rXHQgKiBOb3RoaW5nIGNhbiBmcmVlIHRoZSBmb2xpbyBpbiB0aGUgbWVhbnRpbWU6IHdlIGhvbGQgdGhlIGZvbGlvIGxvY2tcbitcdCAqIHVudGlsIHdyaXRlYmFjayBzdGFydHMsIFBHX3dyaXRlYmFjayB0aGVuIGJsb2NrcyBzd2FwIGNhY2hlIHJlbW92YWwsXG4rXHQgKiBhbmQgZm9saW9fZW5kX3dyaXRlYmFjaygpIHRha2VzIGl0cyBvd24gcmVmZXJlbmNlIGJlZm9yZSBjbGVhcmluZ1xuK1x0ICogUEdfd3JpdGViYWNrIGFuZCBkb25hdGVzIGl0IHRvIHRoZSBkcm9wLlxuK1x0ICovXG4rXHRmb2xpb19wdXQoZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4gXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcbiBcbitcdHJldHVybiAwO1xuK1xuIG91dDpcbiBcdGlmIChyZXQpIHtcbiBcdFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6Mjk6MTEuNDQ0ODk1NjkzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU0OTcxNjI4OTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBNZW1vcnkgTWFuYWdlbWVudCBTdWJzeXN0ZW0qKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIFRoaXMgcGF0Y2ggc2VyaWVzIGlzIHRvdWNoaW5nIHNvbWUgcHJldHR5IGNyaXRpY2FsIGJpdHMgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCdzIG1vZGlmeWluZyBoZWFkZXJzIGFuZCBjb2RlIGluIGBzd2FwLmhgLCBgZmlsZW1hcC5jYCwgYHBhZ2VfaW8uY2AsIGBzd2FwX3N0YXRlLmNgLCBgdm1zY2FuLmNgLCBhbmQgYHpzd2FwLmNgLiBXZSdyZSBkZWFsaW5nIHdpdGggc3dhcCwgenN3YXAsIGFuZCB0aGUgcGFnZSBjYWNoZSDigJMgdGhhdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vIHF1ZXN0aW9uLiBUaGlzICpkZWZpbml0ZWx5KiBuZWVkcyBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIGdldCBzcGVjaWZpYyBhYm91dCB3aGVyZSB0byBmb2N1cyB0aGUgZnV6emluZyBlZmZvcnQuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBhZGRlZCBvciBtb2RpZmllZC4gQWxyaWdodCwgbmV3IGZ1bmN0aW9uczogYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGFuZCBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AuIEFuZCB0aGVuIG1vZGlmaWVkIGZ1bmN0aW9uczogYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jYC4gVGhvc2UgYXJlIG91ciBtYWluIHRhcmdldHMuXG5cbk5leHQsIEkgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIHNjb3BlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgY29udGV4dCBvZiB0aGUgZnV6emluZy4gTGV0IG1lIGNoZWNrIGlmIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIHN0YXRpYyBvciBub24tc3RhdGljLiBZdXAsIGl0J3Mgc3RhdGljLiBPa2F5LCBsZXQncyBjaGVjayBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgYW5kIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYC4gSG1tLCBib3RoIGFyZSBub24tc3RhdGljLiBTbywgdGhleSdyZSBleHBvc2VkIGFuZCBjYW4gYmUgY2FsbGVkIGZyb20gb3RoZXIgbW9kdWxlcy4gYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIGFsc28gbm9uLXN0YXRpYywgc28gd2UgaGF2ZSBhIGZldyBlbnRyeSBwb2ludHMgdG8gY29uc2lkZXIuXG5cbk9uZSBtb3JlIHRoaW5nOiBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCB3ZSBoYXZlIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSB6c3dhcCBhbmQgc3dhcC4gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBDT05GSUdfWlNXQVBgLCBgQ09ORklHX1NXQVBgLCBhbmQgYENPTkZJR19NRU1DR2AuIFRpbWUgdG8gZG91YmxlLWNoZWNrIHRob3NlIGNvbmZpZ3MgYW5kIG1ha2Ugc3VyZSB0aGV5J3JlIGFsbCBzZXQgYXBwcm9wcmlhdGVseSBmb3Igb3VyIHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODAsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozMTo0Ni40MTY1MjY4ODlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNzMwMDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxuLS1cXG5tbS9LY29uZmlnLTIxLVxcbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0zNC1cXG5tbS9LY29uZmlnOjM1OmNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctNDQtXFxubW0vS2NvbmZpZzo0NTpjb25maWcgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlxcbm1tL0tjb25maWctNDYtXFx0Ym9vbCBcXFwiU2hyaW5rIHRoZSB6c3dhcCBwb29sIG9uIG1lbW9yeSBwcmVzc3VyZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTc2LVxcbm1tL0tjb25maWc6Nzc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9ERUZMQVRFXFxubW0vS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWZsYXRlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04Mi1cXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXFxubW0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJMWk9cXFwiXFxuLS1cXG5tbS9LY29uZmlnLTg4LVxcbm1tL0tjb25maWc6ODk6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF84NDJcXG5tbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQtXFxubW0vS2NvbmZpZzo5NTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaNFxcbm1tL0tjb25maWctOTYtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDAtXFxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xcbm1tL0tjb25maWctMTAyLVxcdGJvb2wgXFxcIkxaNEhDXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xMDYtXFxubW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9aU1REXFxubW0vS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbm1tL0tjb25maWc9MTEyPWVuZGNob2ljZVxcbm1tL0tjb25maWctMTEzLVxcbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcXG5tbS9LY29uZmlnLTExNS0gICAgICAgc3RyaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjMxOjQ2LjkwNzI2MjQzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MzM0NTQzOTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKlpTV0FQIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgc28gWlNXQVAgcmVsaWVzIGZ1bmRhbWVudGFsbHkgb24gdGhlIGV4aXN0ZW5jZSBhbmQgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIFNXQVAuIFRoYXQncyB0aGUgYmFzZWxpbmUgYXNzdW1wdGlvbiwgYnV0IGFzc3VtcHRpb25zIGFyZSB0aGUgZW5lbXkgb2Ygcm9idXN0IHN5c3RlbXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBub3QganVzdCAqYXNzdW1lKiB0aGF0IGNvbm5lY3Rpb24gaXMgc29saWQuIEkgbmVlZCB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzLiBXZSdyZSB0YWxraW5nIGFib3V0IGEgY29yZSBhcmNoaXRlY3R1cmFsIHJlbGF0aW9uc2hpcCBoZXJlLCBhbmQgYW55IGluc3RhYmlsaXR5IGluIFNXQVAsIG9yIGFuIGltcHJvcGVybHkgY29uZmlndXJlZCBkZXBlbmRlbmN5LCBjb3VsZCBjYXNjYWRlIGFuZCBjYXVzZSBzZXJpb3VzIGlzc3VlcyB3aXRoaW4gWlNXQVAncyBvdmVyYWxsIGZ1bmN0aW9uLiBUaW1lIHRvIGRpZyBpbnRvIHRob3NlIFpTV0FQIGRlcGVuZGVuY2llcyBhbmQgbWFwIG91dCBldmVyeSBwb2ludCBvZiBpbnRlZ3JhdGlvbiB0byBlbnN1cmUgc3RhYmlsaXR5IGFuZCBwcmVkaWN0IHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBMZXQncyBzZWUgaG93IGRlZXAgdGhpcyByYWJiaXQgaG9sZSBnb2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjgwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MzE6NTEuMzQwNzE5NTE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwODg0Mjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxubW0vS2NvbmZpZzoxNDpcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxubW0vS2NvbmZpZy0xNS1cXHRkZWZhdWx0IHlcXG4tLVxcbm1tL0tjb25maWc9MjI9Y29uZmlnIFpTV0FQXFxubW0vS2NvbmZpZy0yMy1cXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbm1tL0tjb25maWc6MjQ6XFx0ZGVwZW5kcyBvbiBTV0FQXFxubW0vS2NvbmZpZy0yNS1cXHRzZWxlY3QgQ1JZUFRPXFxuLS1cXG5tbS9LY29uZmlnPTM1PWNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG5tbS9LY29uZmlnOjM3OlxcdGRlcGVuZHMgb24gWlNXQVBcXG5tbS9LY29uZmlnLTM4LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9NDU9Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxubW0vS2NvbmZpZzo0NzpcXHRkZXBlbmRzIG9uIFpTV0FQXFxubW0vS2NvbmZpZy00OC1cXHRkZWZhdWx0IG5cXG4tLVxcbm1tL0tjb25maWc9NTk9Y2hvaWNlXFxubW0vS2NvbmZpZy02MC1cXHRwcm9tcHQgXFxcIkRlZmF1bHQgY29tcHJlc3NvclxcXCJcXG5tbS9LY29uZmlnOjYxOlxcdGRlcGVuZHMgb24gWlNXQVBcXG5tbS9LY29uZmlnLTYyLVxcdGRlZmF1bHQgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbi0tXFxubW0vS2NvbmZpZz0xMTQ9Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcXG5tbS9LY29uZmlnOjExNjogICAgICAgZGVwZW5kcyBvbiBaU1dBUFxcbm1tL0tjb25maWctMTE3LSAgICAgICBkZWZhdWx0IFxcXCJkZWZsYXRlXFxcIiBpZiBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbi0tXFxubW0vS2NvbmZpZz0xMzA9bWVudSBcXFwiWnNtYWxsb2MgYWxsb2NhdG9yIG9wdGlvbnNcXFwiXFxubW0vS2NvbmZpZzoxMzE6XFx0ZGVwZW5kcyBvbiBaU01BTExPQ1xcbm1tL0tjb25maWctMTMyLVxcbi0tXFxubW0vS2NvbmZpZz0xNzI9Y29uZmlnIEtWRlJFRV9SQ1VfQkFUQ0hFRFxcbm1tL0tjb25maWctMTczLVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE3NDpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTlkgXFx1MDAyNlxcdTAwMjYgIVRJTllfUkNVXFxubW0vS2NvbmZpZzoxNzU6XFx0ZGVwZW5kcyBvbiAhUkNVX1NUUklDVF9HUkFDRV9QRVJJT0RcXG5tbS9LY29uZmlnLTE3Ni1cXG5tbS9LY29uZmlnPTE3Nz1jb25maWcgU0xVQl9USU5ZXFxubW0vS2NvbmZpZy0xNzgtXFx0Ym9vbCBcXFwiQ29uZmlndXJlIGZvciBtaW5pbWFsIG1lbW9yeSBmb290cHJpbnRcXFwiXFxubW0vS2NvbmZpZzoxNzk6XFx0ZGVwZW5kcyBvbiBFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIUNPTVBJTEVfVEVTVFxcbm1tL0tjb25maWctMTgwLVxcdHNlbGVjdCBTTEFCX01FUkdFX0RFRkFVTFRcXG4tLVxcbm1tL0tjb25maWc9MjA0PWNvbmZpZyBTTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL0tjb25maWctMjA1LVxcdGJvb2wgXFxcIlJhbmRvbWl6ZSBzbGFiIGZyZWVsaXN0XFxcIlxcbm1tL0tjb25maWc6MjA2OlxcdGRlcGVuZHMgb24gIVNMVUJfVElOWVxcbm1tL0tjb25maWctMjA3LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MjEyPWNvbmZpZyBTTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXFxubW0vS2NvbmZpZy0yMTMtXFx0Ym9vbCBcXFwiSGFyZGVuIHNsYWIgZnJlZWxpc3QgbWV0YWRhdGFcXFwiXFxubW0vS2NvbmZpZzoyMTQ6XFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXFxubW0vS2NvbmZpZy0yMTUtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0yMjE9Y29uZmlnIFNMQUJfQlVDS0VUU1xcbm1tL0tjb25maWctMjIyLVxcdGJvb2wgXFxcIlN1cHBvcnQgYWxsb2NhdGlvbiBmcm9tIHNlcGFyYXRlIGttYWxsb2MgYnVja2V0c1xcXCJcXG5tbS9LY29uZmlnOjIyMzpcXHRkZXBlbmRzIG9uICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTIyNC1cXHRkZWZhdWx0IFNMQUJfRlJFRUxJU1RfSEFSREVORURcXG4tLVxcbm1tL0tjb25maWc9MjM4PWNvbmZpZyBTTFVCX1NUQVRTXFxuLS1cXG5tbS9LY29uZmlnLTI0MC1cXHRib29sIFxcXCJFbmFibGUgcGVyZm9ybWFuY2Ugc3RhdGlzdGljc1xcXCJcXG5tbS9LY29uZmlnOjI0MTpcXHRkZXBlbmRzIG9uIFNZU0ZTIFxcdTAwMjZcXHUwMDI2ICFTTFVCX1RJTllcXG5tbS9LY29uZmlnLTI0Mi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTI1MT1jb25maWcgS01BTExPQ19QQVJUSVRJT05fQ0FDSEVTXFxubW0vS2NvbmZpZzoyNTI6XFx0ZGVwZW5kcyBvbiAhU0xVQl9USU5ZXFxubW0vS2NvbmZpZy0yNTMtXFx0Ym9vbCBcXFwiUGFydGl0aW9uZWQgc2xhYiBjYWNoZXMgZm9yIG5vcm1hbCBrbWFsbG9jXFxcIlxcbi0tXFxubW0vS2NvbmZpZz0yNjc9Y2hvaWNlXFxubW0vS2NvbmZpZy0yNjgtXFx0cHJvbXB0IFxcXCJQYXJ0aXRpb25lZCBzbGFiIGNhY2hlIG1vZGVcXFwiXFxubW0vS2NvbmZpZzoyNjk6XFx0ZGVwZW5kcyBvbiBLTUFMTE9DX1BBUlRJVElPTl9DQUNIRVNcXG5tbS9LY29uZmlnLTI3MC1cXHRkZWZhdWx0IEtNQUxMT0NfUEFSVElUSU9OX1RZUEVEIGlmIENDX0hBU19BTExPQ19UT0tFTlxcbi0tXFxubW0vS2NvbmZpZz0yODc9Y29uZmlnIEtNQUxMT0NfUEFSVElUSU9OX1RZUEVEXFxubW0vS2NvbmZpZy0yODgtXFx0Ym9vbCBcXFwiVHlwZSBiYXNlZCBzbGFiIGNhY2hlIHNlbGVjdGlvbiBmb3Igbm9ybWFsIGttYWxsb2NcXFwiXFxubW0vS2NvbmZpZzoyODk6XFx0ZGVwZW5kcyBvbiBDQ19IQVNfQUxMT0NfVE9LRU5cXG5tbS9LY29uZmlnLTI5MC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTM1OD1jb25maWcgTU1BUF9BTExPV19VTklOSVRJQUxJWkVEXFxubW0vS2NvbmZpZy0zNTktXFx0Ym9vbCBcXFwiQWxsb3cgbW1hcHBlZCBhbm9ueW1vdXMgbWVtb3J5IHRvIGJlIHVuaW5pdGlhbGl6ZWRcXFwiXFxubW0vS2NvbmZpZzozNjA6XFx0ZGVwZW5kcyBvbiBFWFBFUlQgXFx1MDAyNlxcdTAwMjYgIU1NVVxcbm1tL0tjb25maWctMzYxLVxcdGRlZmF1bHQgblxcbi0tXFxubW0vS2NvbmZpZz0zODA9Y29uZmlnIFNFTEVDVF9NRU1PUllfTU9ERUxcXG5tbS9LY29uZmlnLTM4MS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzozODI6XFx0ZGVwZW5kcyBvbiBBUkNIX1NFTEVDVF9NRU1PUllfTU9ERUxcXG5tbS9LY29uZmlnLTM4My1cXG5tbS9LY29uZmlnPTM4ND1jaG9pY2VcXG5tbS9LY29uZmlnLTM4NS1cXHRwcm9tcHQgXFxcIk1lbW9yeSBtb2RlbFxcXCJcXG5tbS9LY29uZmlnOjM4NjpcXHRkZXBlbmRzIG9uIFNFTEVDVF9NRU1PUllfTU9ERUxcXG5tbS9LY29uZmlnLTM4Ny1cXHRkZWZhdWx0IFNQQVJTRU1FTV9NQU5VQUwgaWYgQVJDSF9TUEFSU0VNRU1fREVGQVVMVFxcbi0tXFxubW0vS2NvbmZpZz0zOTU9Y29uZmlnIEZMQVRNRU1fTUFOVUFMXFxubW0vS2NvbmZpZy0zOTYtXFx0Ym9vbCBcXFwiRmxhdCBNZW1vcnlcXFwiXFxubW0vS2NvbmZpZzozOTc6XFx0ZGVwZW5kcyBvbiAhQVJDSF9TUEFSU0VNRU1fRU5BQkxFIHx8IEFSQ0hfRkxBVE1FTV9FTkFCTEVcXG5tbS9LY29uZmlnLTM5OC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTQxMD1jb25maWcgU1BBUlNFTUVNX01BTlVBTFxcbm1tL0tjb25maWctNDExLVxcdGJvb2wgXFxcIlNwYXJzZSBNZW1vcnlcXFwiXFxubW0vS2NvbmZpZzo0MTI6XFx0ZGVwZW5kcyBvbiBBUkNIX1NQQVJTRU1FTV9FTkFCTEVcXG5tbS9LY29uZmlnLTQxMy1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTQyNT1jb25maWcgU1BBUlNFTUVNXFxubW0vS2NvbmZpZy00MjYtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NDI3OlxcdGRlcGVuZHMgb24gKCFTRUxFQ1RfTUVNT1JZX01PREVMIFxcdTAwMjZcXHUwMDI2IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRSkgfHwgU1BBUlNFTUVNX01BTlVBTFxcbm1tL0tjb25maWctNDI4LVxcbm1tL0tjb25maWc9NDI5PWNvbmZpZyBGTEFUTUVNXFxubW0vS2NvbmZpZy00MzAtXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NDMxOlxcdGRlcGVuZHMgb24gIVNQQVJTRU1FTSB8fCBGTEFUTUVNX01BTlVBTFxcbm1tL0tjb25maWctNDMyLVxcbi0tXFxubW0vS2NvbmZpZz00NTE9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxubW0vS2NvbmZpZy00NTItXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NDUzOlxcdGRlcGVuZHMgb24gU1BBUlNFTUVNIFxcdTAwMjZcXHUwMDI2ICFTUEFSU0VNRU1fU1RBVElDXFxubW0vS2NvbmZpZy00NTQtXFxuLS1cXG5tbS9LY29uZmlnPTQ1OD1jb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcXG5tbS9LY29uZmlnLTQ1OS1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo0NjA6XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU0gXFx1MDAyNlxcdTAwMjYgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXFxubW0vS2NvbmZpZy00NjEtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz00ODQ9Y29uZmlnIEhBVkVfR1VQX0ZBU1RcXG5tbS9LY29uZmlnOjQ4NTpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctNDg2LVxcdGJvb2xcXG4tLVxcbm1tL0tjb25maWc9NTA4PWNvbmZpZyBFWENMVVNJVkVfU1lTVEVNX1JBTVxcbm1tL0tjb25maWctNTA5LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjUxMDpcXHRkZXBlbmRzIG9uICFERVZNRU0gfHwgU1RSSUNUX0RFVk1FTVxcbm1tL0tjb25maWctNTExLVxcbi0tXFxubW0vS2NvbmZpZz01MjM9bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbi0tXFxubW0vS2NvbmZpZy01MjUtXFx0c2VsZWN0IE1FTU9SWV9JU09MQVRJT05cXG5tbS9LY29uZmlnOjUyNjpcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxubW0vS2NvbmZpZzo1Mjc6XFx0ZGVwZW5kcyBvbiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbm1tL0tjb25maWc6NTI4OlxcdGRlcGVuZHMgb24gNjRCSVRcXG5tbS9LY29uZmlnLTUyOS1cXHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxcbi0tXFxubW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcXG4tLVxcbm1tL0tjb25maWctNTkzLVxcdHNlbGVjdCBIQVZFX0JPT1RNRU1fSU5GT19OT0RFIGlmIFg4Nl82NFxcbm1tL0tjb25maWc6NTk0OlxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTU5NS1cXHRzZWxlY3QgTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnPTU5Nz1jb25maWcgTUhQX01FTU1BUF9PTl9NRU1PUllcXG5tbS9LY29uZmlnLTU5OC1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo1OTk6XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVRyBcXHUwMDI2XFx1MDAyNiBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWc6NjAwOlxcdGRlcGVuZHMgb24gQVJDSF9NSFBfTUVNTUFQX09OX01FTU9SWV9FTkFCTEVcXG5tbS9LY29uZmlnLTYwMS1cXG4tLVxcbm1tL0tjb25maWc9NjA0PWNvbmZpZyBBUkNIX01IUF9NRU1NQVBfT05fTUVNT1JZX0VOQUJMRVxcbi0tXFxubW0vS2NvbmZpZy02MTAtIyBEZWZhdWx0IHRvIDQgZm9yIHdpZGVyIHRlc3RpbmcsIHRob3VnaCA4IG1pZ2h0IGJlIG1vcmUgYXBwcm9wcmlhdGUuXFxubW0vS2NvbmZpZzo2MTE6IyBBUk0ncyBhZGp1c3RfcHRlICh1bnVzZWQgaWYgVklQVCkgZGVwZW5kcyBvbiBtbS13aWRlIHBhZ2VfdGFibGVfbG9jay5cXG5tbS9LY29uZmlnLTYxMi0jIFBBLVJJU0MgN3h4eCdzIHNwaW5sb2NrX3Qgd291bGQgZW5sYXJnZSBzdHJ1Y3QgcGFnZSBmcm9tIDMyIHRvIDQ0IGJ5dGVzLlxcbi0tXFxubW0vS2NvbmZpZz02MTg9Y29uZmlnIFNQTElUX1BURV9QVExPQ0tTXFxubW0vS2NvbmZpZy02MTktXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NjIwOlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZzo2MjE6XFx0ZGVwZW5kcyBvbiBTTVBcXG5tbS9LY29uZmlnOjYyMjpcXHRkZXBlbmRzIG9uIE5SX0NQVVMgXFx1MDAzZT0gNFxcbm1tL0tjb25maWc6NjIzOlxcdGRlcGVuZHMgb24gIUFSTSB8fCBDUFVfQ0FDSEVfVklQVFxcbm1tL0tjb25maWc6NjI0OlxcdGRlcGVuZHMgb24gIVBBUklTQyB8fCBQQTIwXFxubW0vS2NvbmZpZzo2MjU6XFx0ZGVwZW5kcyBvbiAhU1BBUkMzMlxcbm1tL0tjb25maWc6NjI2OlxcdGRlcGVuZHMgb24gIVVNTFxcbm1tL0tjb25maWctNjI3LVxcbi0tXFxubW0vS2NvbmZpZz02MzE9Y29uZmlnIFNQTElUX1BNRF9QVExPQ0tTXFxubW0vS2NvbmZpZy02MzItXFx0ZGVmX2Jvb2wgeVxcbm1tL0tjb25maWc6NjMzOlxcdGRlcGVuZHMgb24gU1BMSVRfUFRFX1BUTE9DS1MgXFx1MDAyNlxcdTAwMjYgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DS1xcbm1tL0tjb25maWctNjM0LVxcbi0tXFxubW0vS2NvbmZpZz02NDI9Y29uZmlnIEJBTExPT05fTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY0NC1cXHRkZWZhdWx0IHlcXG5tbS9LY29uZmlnOjY0NTpcXHRkZXBlbmRzIG9uIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBCQUxMT09OXFxubW0vS2NvbmZpZy02NDYtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz02NTQ9Y29uZmlnIENPTVBBQ1RJT05cXG4tLVxcbm1tL0tjb25maWctNjU3LVxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnOjY1ODpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctNjU5LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9NjY5PWNvbmZpZyBDT01QQUNUX1VORVZJQ1RBQkxFX0RFRkFVTFRcXG5tbS9LY29uZmlnLTY3MC1cXHRpbnRcXG5tbS9LY29uZmlnOjY3MTpcXHRkZXBlbmRzIG9uIENPTVBBQ1RJT05cXG5tbS9LY29uZmlnLTY3Mi1cXHRkZWZhdWx0IDAgaWYgUFJFRU1QVF9SVFxcbi0tXFxubW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY4Ny1cXHRkZWZhdWx0IHlcXG5tbS9LY29uZmlnOjY4ODpcXHRkZXBlbmRzIG9uIE5VTUEgXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vS2NvbmZpZy02ODktXFx0c2VsZWN0IE1JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxcbm1tL0tjb25maWctNjk3LVxcdGJvb2xcXG5tbS9LY29uZmlnOjY5ODpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctNjk5LVxcbi0tXFxubW0vS2NvbmZpZz03NDA9Y29uZmlnIEtTTVxcbm1tL0tjb25maWctNzQxLVxcdGJvb2wgXFxcIkVuYWJsZSBLU00gZm9yIHBhZ2UgbWVyZ2luZ1xcXCJcXG5tbS9LY29uZmlnOjc0MjpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctNzQzLVxcdHNlbGVjdCBYWEhBU0hcXG4tLVxcbm1tL0tjb25maWc9NzU1PWNvbmZpZyBERUZBVUxUX01NQVBfTUlOX0FERFJcXG5tbS9LY29uZmlnLTc1Ni1cXHRpbnQgXFxcIkxvdyBhZGRyZXNzIHNwYWNlIHRvIHByb3RlY3QgZnJvbSB1c2VyIGFsbG9jYXRpb25cXFwiXFxubW0vS2NvbmZpZzo3NTc6XFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnLTc1OC1cXHRkZWZhdWx0IDQwOTZcXG4tLVxcbm1tL0tjb25maWc9Nzc3PWNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWc6Nzc4OlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZzo3Nzk6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX01FTU9SWV9GQUlMVVJFXFxubW0vS2NvbmZpZy03ODAtXFx0Ym9vbCBcXFwiRW5hYmxlIHJlY292ZXJ5IGZyb20gaGFyZHdhcmUgbWVtb3J5IGVycm9yc1xcXCJcXG4tLVxcbm1tL0tjb25maWc9Nzg4PWNvbmZpZyBIV1BPSVNPTl9JTkpFQ1RcXG5tbS9LY29uZmlnLTc4OS1cXHR0cmlzdGF0ZSBcXFwiSFdQb2lzb24gcGFnZXMgaW5qZWN0b3JcXFwiXFxubW0vS2NvbmZpZzo3OTA6XFx0ZGVwZW5kcyBvbiBNRU1PUllfRkFJTFVSRSBcXHUwMDI2XFx1MDAyNiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgUFJPQ19GU1xcbm1tL0tjb25maWctNzkxLVxcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxcbi0tXFxubW0vS2NvbmZpZz03OTM9Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1NcXG5tbS9LY29uZmlnLTc5NC1cXHRpbnQgXFxcIlR1cm4gb24gbW1hcCgpIGV4Y2VzcyBzcGFjZSB0cmltbWluZyBiZWZvcmUgYm9vdGluZ1xcXCJcXG5tbS9LY29uZmlnOjc5NTpcXHRkZXBlbmRzIG9uICFNTVVcXG5tbS9LY29uZmlnLTc5Ni1cXHRkZWZhdWx0IDFcXG4tLVxcbm1tL0tjb25maWc9ODI3PWNvbmZpZyBQRVJTSVNURU5UX0hVR0VfWkVST19GT0xJT1xcbm1tL0tjb25maWctODI4LVxcdGJvb2wgXFxcIkFsbG9jYXRlIGEgUE1EIHNpemVkIGZvbGlvIGZvciB6ZXJvaW5nXFxcIlxcbm1tL0tjb25maWc6ODI5OlxcdGRlcGVuZHMgb24gVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTgzMC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTg0Nj1tZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04NDctXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG5tbS9LY29uZmlnOjg0ODpcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiAhUFJFRU1QVF9SVFxcbm1tL0tjb25maWctODQ5LVxcdHNlbGVjdCBDT01QQUNUSU9OXFxuLS1cXG5tbS9LY29uZmlnPTk4Mj1jb25maWcgVEhQX1NXQVBcXG5tbS9LY29uZmlnLTk4My1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzo5ODQ6XFx0ZGVwZW5kcyBvbiBBUkNIX1dBTlRTX1RIUF9TV0FQIFxcdTAwMjZcXHUwMDI2IFNXQVAgXFx1MDAyNlxcdTAwMjYgNjRCSVRcXG5tbS9LY29uZmlnLTk4NS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEwMjg9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRV9QRk5NQVBcXG5tbS9LY29uZmlnLTEwMjktXFx0ZGVmX2Jvb2wgblxcbm1tL0tjb25maWc6MTAzMDpcXHRkZXBlbmRzIG9uIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy0xMDMxLVxcbm1tL0tjb25maWc9MTAzMj1jb25maWcgQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDMzLVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjEwMzQ6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbm1tL0tjb25maWctMTAzNS1cXG5tbS9LY29uZmlnPTEwMzY9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxcbm1tL0tjb25maWctMTAzNy1cXHRkZWZfYm9vbCB5XFxubW0vS2NvbmZpZzoxMDM4OlxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vS2NvbmZpZy0xMDM5LVxcbi0tXFxubW0vS2NvbmZpZz0xMDUwPWNvbmZpZyBORUVEX1BFUl9DUFVfS01cXG5tbS9LY29uZmlnOjEwNTE6XFx0ZGVwZW5kcyBvbiAhU01QIHx8ICFNTVVcXG5tbS9LY29uZmlnLTEwNTItXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz0xMDY3PWNvbmZpZyBDTUFcXG5tbS9LY29uZmlnLTEwNjgtXFx0Ym9vbCBcXFwiQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yXFxcIlxcbm1tL0tjb25maWc6MTA2OTpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctMTA3MC1cXHRzZWxlY3QgTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnPTEwODI9Y29uZmlnIENNQV9ERUJVR0ZTXFxubW0vS2NvbmZpZy0xMDgzLVxcdGJvb2wgXFxcIkNNQSBkZWJ1Z2ZzIGludGVyZmFjZVxcXCJcXG5tbS9LY29uZmlnOjEwODQ6XFx0ZGVwZW5kcyBvbiBDTUEgXFx1MDAyNlxcdTAwMjYgREVCVUdfRlNcXG5tbS9LY29uZmlnLTEwODUtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMDg4PWNvbmZpZyBDTUFfU1lTRlNcXG5tbS9LY29uZmlnLTEwODktXFx0Ym9vbCBcXFwiQ01BIGluZm9ybWF0aW9uIHRocm91Z2ggc3lzZnMgaW50ZXJmYWNlXFxcIlxcbm1tL0tjb25maWc6MTA5MDpcXHRkZXBlbmRzIG9uIENNQSBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbm1tL0tjb25maWctMTA5MS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEwOTU9Y29uZmlnIENNQV9BUkVBU1xcbm1tL0tjb25maWctMTA5Ni1cXHRpbnQgXFxcIk1heGltdW0gY291bnQgb2YgdGhlIENNQSBhcmVhc1xcXCJcXG5tbS9LY29uZmlnOjEwOTc6XFx0ZGVwZW5kcyBvbiBDTUFcXG5tbS9LY29uZmlnLTEwOTgtXFx0ZGVmYXVsdCAyMCBpZiBOVU1BXFxuLS1cXG5tbS9LY29uZmlnPTExNDI9Y29uZmlnIE1FTV9TT0ZUX0RJUlRZXFxubW0vS2NvbmZpZy0xMTQzLVxcdGJvb2wgXFxcIlRyYWNrIG1lbW9yeSBjaGFuZ2VzXFxcIlxcbm1tL0tjb25maWc6MTE0NDpcXHRkZXBlbmRzIG9uIENIRUNLUE9JTlRfUkVTVE9SRSBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfU09GVF9ESVJUWSBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxubW0vS2NvbmZpZy0xMTQ1LVxcdHNlbGVjdCBQUk9DX1BBR0VfTU9OSVRPUlxcbi0tXFxubW0vS2NvbmZpZz0xMTU3PWNvbmZpZyBTVEFDS19NQVhfREVGQVVMVF9TSVpFX01CXFxuLS1cXG5tbS9LY29uZmlnLTExNjAtXFx0cmFuZ2UgOCAyMDQ4XFxubW0vS2NvbmZpZzoxMTYxOlxcdGRlcGVuZHMgb24gU1RBQ0tfR1JPV1NVUCBcXHUwMDI2XFx1MDAyNiAoITY0QklUIHx8IENPTVBBVClcXG5tbS9LY29uZmlnLTExNjItXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMTY5PWNvbmZpZyBERUZFUlJFRF9TVFJVQ1RfUEFHRV9JTklUXFxubW0vS2NvbmZpZy0xMTcwLVxcdGJvb2wgXFxcIkRlZmVyIGluaXRpYWxpc2F0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byBrdGhyZWFkc1xcXCJcXG5tbS9LY29uZmlnOjExNzE6XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1cXG5tbS9LY29uZmlnOjExNzI6XFx0ZGVwZW5kcyBvbiAhTkVFRF9QRVJfQ1BVX0tNXFxubW0vS2NvbmZpZzoxMTczOlxcdGRlcGVuZHMgb24gNjRCSVRcXG5tbS9LY29uZmlnOjExNzQ6XFx0ZGVwZW5kcyBvbiAhS01TQU5cXG5tbS9LY29uZmlnLTExNzUtXFx0c2VsZWN0IFBBREFUQVxcbi0tXFxubW0vS2NvbmZpZz0xMTkzPWNvbmZpZyBJRExFX1BBR0VfVFJBQ0tJTkdcXG5tbS9LY29uZmlnLTExOTQtXFx0Ym9vbCBcXFwiRW5hYmxlIGlkbGUgcGFnZSB0cmFja2luZ1xcXCJcXG5tbS9LY29uZmlnOjExOTU6XFx0ZGVwZW5kcyBvbiBTWVNGUyBcXHUwMDI2XFx1MDAyNiBNTVVcXG5tbS9LY29uZmlnLTExOTYtXFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuLS1cXG5tbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcXG5tbS9LY29uZmlnLTEyMzItXFx0Ym9vbCBcXFwiU3VwcG9ydCBETUEzMiB6b25lXFxcIiBpZiBBUkNIX0hBU19aT05FX0RNQV9TRVRcXG5tbS9LY29uZmlnOjEyMzM6XFx0ZGVwZW5kcyBvbiAhWDg2XzMyXFxubW0vS2NvbmZpZy0xMjM0LVxcdGRlZmF1bHQgeSBpZiBBUk02NFxcbi0tXFxubW0vS2NvbmZpZz0xMjM2PWNvbmZpZyBaT05FX0RFVklDRVxcbm1tL0tjb25maWctMTIzNy1cXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbm1tL0tjb25maWc6MTIzODpcXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZzoxMjM5OlxcdGRlcGVuZHMgb24gTUVNT1JZX0hPVFJFTU9WRVxcbm1tL0tjb25maWc6MTI0MDpcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxubW0vS2NvbmZpZy0xMjQxLVxcdHNlbGVjdCBYQVJSQVlfTVVMVElcXG4tLVxcbm1tL0tjb25maWc9MTI2MD1jb25maWcgSE1NX01JUlJPUlxcbm1tL0tjb25maWctMTI2MS1cXHRib29sXFxubW0vS2NvbmZpZzoxMjYyOlxcdGRlcGVuZHMgb24gTU1VXFxubW0vS2NvbmZpZy0xMjYzLVxcbi0tXFxubW0vS2NvbmZpZz0xMjY3PWNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTI2OC1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxubW0vS2NvbmZpZzoxMjY5OlxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG5tbS9LY29uZmlnLTEyNzAtXFx0c2VsZWN0IEdFVF9GUkVFX1JFR0lPTlxcbi0tXFxubW0vS2NvbmZpZz0xMzA2PWNvbmZpZyBHVVBfVEVTVFxcbm1tL0tjb25maWctMTMwNy1cXHRib29sIFxcXCJFbmFibGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdldF91c2VyX3BhZ2VzKCktcmVsYXRlZCB1bml0IHRlc3RzXFxcIlxcbm1tL0tjb25maWc6MTMwODpcXHRkZXBlbmRzIG9uIERFQlVHX0ZTXFxubW0vS2NvbmZpZy0xMzA5LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTMyNj1jb21tZW50IFxcXCJHVVBfVEVTVCBuZWVkcyB0byBoYXZlIERFQlVHX0ZTIGVuYWJsZWRcXFwiXFxubW0vS2NvbmZpZzoxMzI3OlxcdGRlcGVuZHMgb24gIUdVUF9URVNUIFxcdTAwMjZcXHUwMDI2ICFERUJVR19GU1xcbm1tL0tjb25maWctMTMyOC1cXG4tLVxcbm1tL0tjb25maWc9MTMzMj1jb25maWcgRE1BUE9PTF9URVNUXFxubW0vS2NvbmZpZy0xMzMzLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgYSBtb2R1bGUgdG8gcnVuIHRpbWUgdGVzdHMgb24gZG1hX3Bvb2xcXFwiXFxubW0vS2NvbmZpZzoxMzM0OlxcdGRlcGVuZHMgb24gSEFTX0RNQVxcbm1tL0tjb25maWctMTMzNS1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEzNTY9Y29uZmlnIFNFQ1JFVE1FTVxcbi0tXFxubW0vS2NvbmZpZy0xMzU4LVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1mZF9zZWNyZXQoKSBzeXN0ZW0gY2FsbFxcXCIgaWYgRVhQRVJUXFxubW0vS2NvbmZpZzoxMzU5OlxcdGRlcGVuZHMgb24gQVJDSF9IQVNfU0VUX0RJUkVDVF9NQVBcXG5tbS9LY29uZmlnLTEzNjAtXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xMzY1PWNvbmZpZyBBTk9OX1ZNQV9OQU1FXFxubW0vS2NvbmZpZy0xMzY2LVxcdGJvb2wgXFxcIkFub255bW91cyBWTUEgbmFtZSBzdXBwb3J0XFxcIlxcbm1tL0tjb25maWc6MTM2NzpcXHRkZXBlbmRzIG9uIFBST0NfRlMgXFx1MDAyNlxcdTAwMjYgQURWSVNFX1NZU0NBTExTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbm1tL0tjb25maWctMTM2OC1cXG4tLVxcbm1tL0tjb25maWc9MTM4OT1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxubW0vS2NvbmZpZy0xMzkwLVxcdGJvb2wgXFxcIkVuYWJsZSB1c2VyZmF1bHRmZCgpIHN5c3RlbSBjYWxsXFxcIlxcbm1tL0tjb25maWc6MTM5MTpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctMTM5Mi1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTEzOTc9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzk5LVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWc6MTQwMDpcXHRkZXBlbmRzIG9uIEhBVkVfQVJDSF9VU0VSRkFVTFRGRF9XUFxcbm1tL0tjb25maWctMTQwMS1cXG4tLVxcbm1tL0tjb25maWc9MTQwOT1jb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQxMC1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbm1tL0tjb25maWc6MTQxMTpcXHRkZXBlbmRzIG9uIE1NVVxcbm1tL0tjb25maWctMTQxMi1cXHQjIG1ha2Ugc3VyZSBmb2xpby1cXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXFxubW0vS2NvbmZpZzoxNDEzOlxcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctMTQxNC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTE0MTg9Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxOS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG5tbS9LY29uZmlnOjE0MjA6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDIxLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQyND1jb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQyNS1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxubW0vS2NvbmZpZzoxNDI2OlxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbm1tL0tjb25maWctMTQyNy1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTE0MzM9Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDM0LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE0MzU6XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbm1tL0tjb25maWctMTQzNi0jIH1cXG4tLVxcbm1tL0tjb25maWc9MTQ0MT1jb25maWcgUEVSX1ZNQV9MT0NLXFxubW0vS2NvbmZpZy0xNDQyLVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE0NDM6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcXHUwMDI2XFx1MDAyNiBNTVUgXFx1MDAyNlxcdTAwMjYgU01QXFxubW0vS2NvbmZpZy0xNDQ0LVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTQ1MD1jb25maWcgTE9DS19NTV9BTkRfRklORF9WTUFcXG5tbS9LY29uZmlnLTE0NTEtXFx0Ym9vbFxcbm1tL0tjb25maWc6MTQ1MjpcXHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXFxubW0vS2NvbmZpZy0xNDUzLVxcbi0tXFxubW0vS2NvbmZpZz0xNDYzPWNvbmZpZyBOVU1BX0VNVVxcbm1tL0tjb25maWctMTQ2NC1cXHRib29sIFxcXCJOVU1BIGVtdWxhdGlvblxcXCJcXG5tbS9LY29uZmlnOjE0NjU6XFx0ZGVwZW5kcyBvbiBOVU1BX01FTUJMS1NcXG5tbS9LY29uZmlnOjE0NjY6XFx0ZGVwZW5kcyBvbiBYODYgfHwgR0VORVJJQ19BUkNIX05VTUFcXG5tbS9LY29uZmlnLTE0NjctXFx0aGVscFxcbi0tXFxubW0vS2NvbmZpZz0xNDgxPWNvbmZpZyBQVF9SRUNMQUlNXFxubW0vS2NvbmZpZy0xNDgyLVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjE0ODM6XFx0ZGVwZW5kcyBvbiBNTVVfR0FUSEVSX1JDVV9UQUJMRV9GUkVFIFxcdTAwMjZcXHUwMDI2ICFIQVZFX0FSQ0hfVExCX1JFTU9WRV9UQUJMRVxcbm1tL0tjb25maWctMTQ4NC1cXHRoZWxwXFxuLS1cXG5tbS9LY29uZmlnPTE1MDA9Y29uZmlnIExBWllfTU1VX01PREVfS1VOSVRfVEVTVFxcbm1tL0tjb25maWctMTUwMS1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIHRoZSBsYXp5IE1NVSBtb2RlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxubW0vS2NvbmZpZzoxNTAyOlxcdGRlcGVuZHMgb24gQVJDSF9IQVNfTEFaWV9NTVVfTU9ERVxcbm1tL0tjb25maWc6MTUwMzpcXHRkZXBlbmRzIG9uIEtVTklUXFxubW0vS2NvbmZpZy0xNTA0LVxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjMxOjUxLjQyMTYwODIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0NTMxMzkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWVtb3J5IE1hbmFnZW1lbnQgRGVlcCBEaXZlIC0gSW5pdGlhbCBBc3Nlc3NtZW50KipcblxuQWxyaWdodCwgWlNXQVAgaXMgb2ZmaWNpYWxseSBvbmxpbmUgYW5kIG9wZXJhdGlvbmFsLiBFeGNlbGxlbnQsIHdlJ3JlIG1ha2luZyBwcm9ncmVzcy4gTm93LCBteSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgTUVNQ0cgKE1lbW9yeSBDb250cm9sIEdyb3VwcykgbWV0cmljcyBhbmQgYmVoYXZpb3JzLiBXZSBoYXZlIFpTV0FQLCBidXQgKmhvdyogaXMgaXQgcGVyZm9ybWluZyBpbiB0aGUgY29udGV4dCBvZiBvdXIgZXhpc3RpbmcgbWVtb3J5IGhpZXJhcmNoeSBhbmQgd29ya2xvYWQgaXNvbGF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBvcHRpbWFsIGZvciB0aGlzIGRlcGxveW1lbnQuIE15IGZvY3VzIHdpbGwgYmUgb24gdHJhY2tpbmcgdGhlIGtleSBNRU1DRyBwYXJhbWV0ZXJzLCBlc3BlY2lhbGx5IHN3YXAgdXNhZ2UsIHBhZ2UgZmF1bHQgcmF0ZXMsIGFuZCByZWNsYWltIHN0YXRpc3RpY3MgZm9yIGVhY2ggcmVsZXZhbnQgY2dyb3VwLiBJJ2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZXNlIHdpdGggcGVyZm9ybWFuY2UgZGF0YSBmcm9tIG90aGVyIG1vbml0b3JpbmcgdG9vbHMgdG8gYXNzZXNzIGFueSBwb3NzaWJsZSBib3R0bGVuZWNrcyBvciByZWdyZXNzaW9ucyBub3cgdGhhdCBaU1dBUCBpcyBhY3RpdmUuIFRoaXMgaW52ZXN0aWdhdGlvbiB3aWxsIHByb2JhYmx5IGludm9sdmUgdmlzdWFsaXppbmcgdGhlIHJlbGV2YW50IG1ldHJpY3Mgb3ZlciB0aW1lLCBhbmQgcG9zc2libHkgYWRqdXN0aW5nIHRoZSBzZXR0aW5ncyBvZiB0aGUgY2dyb3VwcyB0byBzZWUgaWYgd2UgY2FuIGFjaGlldmUgYmV0dGVyIG92ZXJhbGwgcGVyZm9ybWFuY2UsIHdoaWNoIGlzIHdoYXQgSSBhbHdheXMgYWltIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwNDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozMTo1NS42NjY5MjU1NTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAyMTc4NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2Nz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDc2LVxcbmluaXQvS2NvbmZpZzoxMDc3OmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc4LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODUtXFxuaW5pdC9LY29uZmlnOjEwODY6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4Ny1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5Mi1cXG5pbml0L0tjb25maWc6MTA5Mzpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5NC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5OS1cXG5pbml0L0tjb25maWc6MTEwMDpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTEwMS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozMTo1NS43MjcxNDc0NTJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDY0NzI2MDA3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3k6IE1FTUNHIGFuZCBDR1JPVVBTKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBsb29raW5nIGF0IE1FTUNHLCBhbmQgaXQncyByaW5naW5nIGEgYmVsbC4gSSBrbm93IGl0J3MgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gQ0dST1VQUyDigJMgdGhleSdyZSBwcmFjdGljYWxseSBzeW1iaW90aWMgaW4gdGhlIExpbnV4IGtlcm5lbC4gU28sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZWZvcmUgSSBkaWcgYW55IGRlZXBlciBpbnRvIE1FTUNHJ3MgYmVoYXZpb3Igb3IgdHJvdWJsZXNob290IGFueSBpc3N1ZXMsIEkgKmFic29sdXRlbHkqIG5lZWQgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiBDR1JPVVBTLiBFdmVyeXRoaW5nIGRvd25zdHJlYW0gZnJvbSBoZXJlIGhpbmdlcyBvbiB0aGF0IGZvdW5kYXRpb25hbCBsYXllci4gVGltZSB0byBnZXQgYSBoYW5kbGUgb24gdGhlIENHUk9VUFMgc2l0dWF0aW9uLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGluaXRpYWwgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTE3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MzY6MDIuMTk5NzUwNzM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzE0NzIzNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIENHUk9VUFNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5pdC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDQ1PWNvbmZpZyBTTEFCX09CSl9FWFRcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDQ3LVxcbmluaXQvS2NvbmZpZzoxMDQ4Om1lbnVjb25maWcgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xMDQ5LVxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MzY6MDIuNjMxMjI3MjAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTcwMzA0OTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBDaGFuZ2VzKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBaU1dBUGAsIGBTV0FQYCwgYW5kIGBNRU1DR2Ag4oCTIHRob3NlIGFyZSB0aGUga2V5IGFyZWFzIGltcGFjdGVkIGJ5IHRoaXMgY2hhbmdlLiBNeSBpbml0aWFsIHRhc2sgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBiZWVuIHRvdWNoZWQuIFRpbWUgdG8gbG9vayBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gc2VlIHdoYXQgZWxzZSBoYXMgYmVlbiBhZGRlZCBvciBtb2RpZmllZCBpbiB0aGUgcmVsZXZhbnQgbW9kdWxlcy5cblxuSSd2ZSBnb3QgdGhlIGFmZmVjdGVkIGZpbGVzOiBgbW0vZmlsZW1hcC5jYCwgYG1tL3BhZ2VfaW8uY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3Ztc2Nhbi5jYCwgYW5kIGBtbS96c3dhcC5jYC4gQWxyaWdodCwgc28gYG1tL3pzd2FwLmNgIGlzIGNsZWFybHkgY29uZGl0aW9uYWwgb24gYENPTkZJR19aU1dBUGAsIG1ha2luZyBzZW5zZS4gYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGBtbS9wYWdlX2lvLmNgIGFyZSB0aWVkIHRvIGBDT05GSUdfU1dBUGAuIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9maWxlbWFwLmNgIGFyZSBhbHdheXMgY29tcGlsZWQuXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIGJ1aWxkIGRlcGVuZGVuY2llcyBhbmQgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIEkgaGF2ZW4ndCBzcG90dGVkIHlldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ3OTYsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6MzY6NDkuMjAxNTM2MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NTI5NjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzd2FwXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc4PW9iai0kKENPTkZJR19TV0FQKVxcdCs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xcbm1tL01ha2VmaWxlOjc5Om9iai0kKENPTkZJR19aU1dBUClcXHQrPSB6c3dhcC5vXFxubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXFx0Kz0gZG1hcG9vbC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM2OjQ5LjMwOTA3MTQwMloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODk0NDA5Mjg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHN3YXBfc3RhdGUub2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgc3dhcF9zdGF0ZS5vYC4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGl0cyBsaWtlbHkgcm9sZTsgdGhlIG5hbWUgc2NyZWFtcyBcImNvbnRleHQgc3dpdGNoaW5nXCIgb3IgYXQgbGVhc3Qgc29tZSBwYXJ0IG9mIHRoZSBwcm9jZXNzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBwcmVjaXNlbHkgKndoYXQqIGZ1bmN0aW9uYWxpdHkgaXQgcHJvdmlkZXMgd2l0aGluIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBJcyBpdCB0aGUgY29yZSBzdGF0ZSBtYW5hZ2VtZW50LCBvciBqdXN0IGEgc21hbGwgcGllY2UgdGhhdCBpbnRlcmZhY2VzIHdpdGggc29tZSBoYXJkd2FyZSByZWdpc3RlcnM/IElzIHRoaXMgcGFydCBvZiBhIG1vbm9saXRoaWMga2VybmVsIGltcGxlbWVudGF0aW9uIG9yIHNvbWV0aGluZyBtb3JlIG1vZHVsYXI/IEFyZSB3ZSB0YWxraW5nIGFib3V0IHVzZXItc3BhY2Ugc3dhcHBpbmcsIGtlcm5lbC1sZXZlbCwgb3IgYm90aD9cblxuSSdsbCBzdGFydCBieSBkaXNhc3NlbWJsaW5nIGl0LiBJJ20gbG9va2luZyBmb3Iga2V5IGluc3RydWN0aW9ucyDigJMgYG1vdmAgdG8gc3BlY2lmaWMgcmVnaXN0ZXJzLCBsaWtlbHkgdGhvc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBQcm9ncmFtIFN0YXR1cyBXb3JkLCBzdGFjayBtYW5pcHVsYXRpb25zLCBwZXJoYXBzIHNvbWUgYHN5c2NhbGxgIGluc3RydWN0aW9ucyB0aGF0IHdvdWxkIHRpZSBpbnRvIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3Mgc3dhcCBwcmltaXRpdmVzLiBJJ2xsIGJlIHNlYXJjaGluZyBmb3IgYW55IGhpbnRzIG9mIGludGVycnVwdCBoYW5kbGluZyBsb2dpYy4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IGFueSBkYXRhIHN0cnVjdHVyZXMgdGhhdCBob2xkIHByb2Nlc3Mgc3RhdGUuIEFyZSB0aGVyZSBwb2ludGVycyB0byB0YXNrIGNvbnRyb2wgYmxvY2tzLCBvciBwZXJoYXBzIGEgbW9yZSBlbGVnYW50IGRlc2NyaXB0b3Igc3RydWN0dXJlP1xuXG5J4oCZbGwgbG9vayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBvYmplY3QgZmlsZXMgb3IgbGlicmFyaWVzLiBUaGlzIGlzIGEgdmVyeSBjb21tb24gY2x1ZSBhcyB0byB3aGV0aGVyIG9yIG5vdCBpdCdzIGEgc3RhbmQtYWxvbmUgZnVuY3Rpb24sIG9yIGlmIGl0IGhhcyBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gd2FudCB0byBpZGVudGlmeSBob3cgaXQgZ2V0cyBjYWxsZWQuIElzIGl0IHBhcnQgb2YgYSBzY2hlZHVsZWQgaW50ZXJydXB0LCBhIHRyYXAsIG9yIGlzIGl0IHRyaWdnZXJlZCBkaXJlY3RseSBieSBzb21lIHNvZnR3YXJlIGV2ZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHBhdGhzIGlzIGNyaXRpY2FsLiBUaGUgY2FsbGluZyBjb252ZW50aW9uIG9mIHRoZSBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBleHRyZW1lbHkgaW1wb3J0YW50IGhlcmUuXG5cbkkgYW50aWNpcGF0ZSBzZWVpbmcgYXNzZW1ibHkgcmVsYXRlZCB0byBzYXZpbmcgYW5kIHJlc3RvcmluZyByZWdpc3RlciBjb250ZXh0cywgbWFuYWdpbmcgdGhlIHBhZ2UgdGFibGVzLCBhbmQgcG9zc2libHkgZGVhbGluZyB3aXRoIGNhY2hlIGNvaGVyZW5jZS4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwsIHNvIEkgZXhwZWN0IHRoZSBjb2RlIHRvIGJlIG9wdGltaXplZCDigJMgaGFuZC1jb2RlZCBhc3NlbWJseSBpcyBhIHJlYWwgcG9zc2liaWxpdHkuIEnigJlsbCBrZWVwIGEgY2xvc2UgZXllIGZvciBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbiBpc3N1ZXMgb3IgYXJlYXMgb2YgY29uY2Vybiwgc3VjaCBhcyByYWNlIGNvbmRpdGlvbnMgb3Igc3VidGxlIG1lbW9yeSBsZWFrcy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM0NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjA4LjI1MzE2NjgxMVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2NjA4Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfc3RhdGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NzY9ZW5kaWZcXG5tbS9NYWtlZmlsZS03Ny1cXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozNzowOC43MTk3ODA1MTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzExMTYyODczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyBTd2FwIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgc3R1ZmYgYWdhaW4uIFJpZ2h0LCBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX1pTV0FQYCBhcmUgZGVmaW5pdGVseSBuZWNlc3NhcnksIEkga25vdyB0aGF0LiBCdXQgd2hlcmUgYXJlIHRoZSByZWxldmFudCBkZWZpbml0aW9ucz8gSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIGRlcGVuZGVuY3kgc2V0dGluZ3MgZm9yIHRoZXNlLiBNeSBuZXh0IHN0ZXAgaXMgdG8gbG9vayBhdCB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgcmlnaHQ/IFRoYXQncyBpbiB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHNvcnQgdGhpcyBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODg3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6Mzc6MTUuODMxNDEyMDAxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTQ1NTQzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1jb250cm9sXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZS0yOS1LQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG4tLVxcbm1tL01ha2VmaWxlPTEwND1vYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozNzoxNS45MTI4NzM0MjVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwNzM0NzY1ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIElkZW50aWZ5aW5nIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGNvbnRyb2wgZ3JvdXBzLCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX01FTUNHYCBpcyBkZWZpbml0ZWx5IHJlbGV2YW50IOKAkyB0aGF0J3MgdGhlIGJhc2VsaW5lLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYXBwcm9wcmlhdGUgZm9jdXMgc3ltYm9scy4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IHRvIGZpbmQgdGhlIGtleSBBUEkgZW50cnkgcG9pbnRzIGZvciB0aGlzIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIHdyaXRlYmFjayBzY2VuYXJpby5cblxuQWxyaWdodCwgaW5pdGlhbCBjYW5kaWRhdGVzOiBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgYW5kIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCBzZWVtIHByb21pc2luZywgdGhvc2UgbG9vayBsaWtlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMuIEkgYWxzbyBzZWUgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIGJ1dCB0aGF0J3Mgc3RhdGljLiBIbW0sIHRyaWNreS4gVGhlIGluc3RydWN0aW9ucyBkbyBtZW50aW9uIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGZ1bmN0aW9ucyBvdmVyIGludGVybmFscy4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLCBldmVuIHRob3VnaCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBpcyBzdGF0aWMsIGl0J3MgKm5vdCogaW5saW5lZC4gSXQgbXVzdCBiZSBjYWxsZWQgZnJvbSBzb21ld2hlcmUgZWxzZSwgcG9zc2libHkgYXMgYSBjYWxsYmFjay4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHdoZXJlIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIGFjdHVhbGx5IGludm9rZWQuIFRoYXQgd2lsbCBjbGFyaWZ5IGlmIGl0J3MgYSBzdWl0YWJsZSBjYW5kaWRhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MjQzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjI3Ljk4NjM1MzcyMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ5Mzk0NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienN3YXBfd3JpdGViYWNrX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzd2FwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venN3YXAuYz05MjQ9c3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0venN3YXAuYy05ODYtICovXFxubW0venN3YXAuYzo5ODc6c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG5tbS96c3dhcC5jLTk4OC1cXHRcXHRcXHRcXHQgc3dwX2VudHJ5X3Qgc3dwZW50cnkpXFxuLS1cXG5tbS96c3dhcC5jPTExMDI9c3RhdGljIGVudW0gbHJ1X3N0YXR1cyBzaHJpbmtfbWVtY2dfY2Ioc3RydWN0IGxpc3RfaGVhZCAqaXRlbSwgc3RydWN0IGxpc3RfbHJ1X29uZSAqbCxcXG4tLVxcbm1tL3pzd2FwLmMtMTEyNS1cXHQgKiAxLiBXZSBleHRyYWN0IHRoZSBzd3BfZW50cnlfdCB0byB0aGUgc3RhY2ssIGFsbG93aW5nXFxubW0venN3YXAuYzoxMTI2OlxcdCAqICAgIHpzd2FwX3dyaXRlYmFja19lbnRyeSgpIHRvIHBpbiB0aGUgc3dhcCBlbnRyeSBhbmRcXG5tbS96c3dhcC5jLTExMjctXFx0ICogICAgdGhlbiB2YWxpZGF0ZSB0aGUgenN3YXAgZW50cnkgYWdhaW5zdCB0aGF0IHN3YXAgZW50cnknc1xcbi0tXFxubW0venN3YXAuYy0xMTYwLVxcbm1tL3pzd2FwLmM6MTE2MTpcXHR3cml0ZWJhY2tfcmVzdWx0ID0genN3YXBfd3JpdGViYWNrX2VudHJ5KGVudHJ5LCBzd3BlbnRyeSk7XFxubW0venN3YXAuYy0xMTYyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozNzoyOC4wNDEyOTg5NDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNTY2NTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IFJlY2xhbWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgc2hyaW5rX21lbWNnX2NiYC4gUmlnaHQsIHRoaXMgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiDigJMgc3BlY2lmaWNhbGx5LCBpdCdzIHVzZWQgd2l0aCBgbGlzdF9scnVfc2hyaW5rX2NiYC4gTXkgYnJhaW4gaW1tZWRpYXRlbHkgbWFrZXMgdGhlIGNvbm5lY3Rpb246IFRoaXMgaXMgcGFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlY2xhaW0gcHJvY2VzcyB3aXRoaW4gYSBjZ3JvdXAgY29udGV4dC4gQW5kIEkgc2VlIHRoYXQgYHNocmlua19tZW1jZ19jYmAgY2FsbHMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoYXQgc3VnZ2VzdHMgdGhpcyBjYWxsYmFjayBpcyBpbnZvbHZlZCBpbiB3cml0aW5nIG1lbW9yeSBwYWdlcyB0byB6c3dhcCB3aGVuIGEgbWVtY2cgaXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCB3aGljaCBtZWFucyBpdCBpcyBhdHRlbXB0aW5nIHRvIGZyZWUgdXAgbWVtb3J5LlxuXG5TaW5jZSB0aGUgcGFnZXMgd2lsbCBoYXZlIHRvIGdvIHNvbWV3aGVyZSwgbGV0IG1lIGNoZWNrIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gVGhpcyBpcyBwcm9iYWJseSB3aGVyZSB0aGUgZGV0YWlscyBhcmUgcmVnYXJkaW5nIHRoZSBhY3R1YWwgYWN0aW9uIG9mIHRoZSB3cml0ZWJhY2sgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgdW5kZXJseWluZyBwYWdlIHN0cnVjdHVyZSwgYW5kIHRoZXJlZm9yZSBpdCBpcyB0aGUgY3J1Y2lhbCBwYXJ0IHRoYXQgZW5zdXJlcyB0aGUgbWVtb3J5IGlzIGFjdHVhbGx5IHdyaXR0ZW4gYmFjaywgcG90ZW50aWFsbHkgdG8gdGhlIHN3YXAgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjk2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjMyLjc2Njk2NzY5OFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3MjkyMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fZW5kX3dyaXRlYmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9maWxlbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZmlsZW1hcC5jPTE2NDU9RVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpO1xcbi0tXFxubW0vZmlsZW1hcC5jLTE2NDctLyoqXFxubW0vZmlsZW1hcC5jOjE2NDg6ICogZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kIC0gRW5kIHdyaXRlYmFjayBhZ2FpbnN0IGEgZm9saW8uXFxubW0vZmlsZW1hcC5jLTE2NDktICogQGZvbGlvOiBUaGUgZm9saW8uXFxuLS1cXG5tbS9maWxlbWFwLmMtMTY1NS0gKi9cXG5tbS9maWxlbWFwLmM6MTY1Njp2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL2ZpbGVtYXAuYy0xNjU3LXtcXG4tLVxcbm1tL2ZpbGVtYXAuYy0xNjcxLVxcbm1tL2ZpbGVtYXAuYzoxNjcyOlxcdGlmIChfX2ZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pKVxcbm1tL2ZpbGVtYXAuYy0xNjczLVxcdFxcdGZvbGlvX3dha2VfYml0KGZvbGlvLCBQR193cml0ZWJhY2spO1xcbi0tXFxubW0vZmlsZW1hcC5jLTE2NzYtfVxcbm1tL2ZpbGVtYXAuYzoxNjc3OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZCk7XFxubW0vZmlsZW1hcC5jLTE2NzgtXFxubW0vZmlsZW1hcC5jLTE2NzktLyoqXFxubW0vZmlsZW1hcC5jOjE2ODA6ICogZm9saW9fZW5kX3dyaXRlYmFjayAtIEVuZCB3cml0ZWJhY2sgYWdhaW5zdCBhIGZvbGlvLlxcbm1tL2ZpbGVtYXAuYy0xNjgxLSAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbi0tXFxubW0vZmlsZW1hcC5jLTE2ODYtICovXFxubW0vZmlsZW1hcC5jOjE2ODc6dm9pZCBmb2xpb19lbmRfd3JpdGViYWNrKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTE2ODgte1xcbi0tXFxubW0vZmlsZW1hcC5jLTE3MDEtXFx0LypcXG5tbS9maWxlbWFwLmM6MTcwMjpcXHQgKiBTYW1wbGUgdGhpcyBiZWZvcmUgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKCkgY2xlYXJzXFxubW0vZmlsZW1hcC5jLTE3MDMtXFx0ICogUEdfd3JpdGViYWNrOiB1bnRpbCB0aGVuIGEgcmFjaW5nIHN3YXBpbiBjYW5ub3QgcmVtb3ZlIHRoZSBmb2xpbyBmcm9tXFxuLS1cXG5tbS9maWxlbWFwLmMtMTcxMC1cXG5tbS9maWxlbWFwLmM6MTcxMTpcXHRmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQoZm9saW8pO1xcbm1tL2ZpbGVtYXAuYy0xNzEyLVxcbi0tXFxubW0vZmlsZW1hcC5jLTE3MjAtfVxcbm1tL2ZpbGVtYXAuYzoxNzIxOkVYUE9SVF9TWU1CT0woZm9saW9fZW5kX3dyaXRlYmFjayk7XFxubW0vZmlsZW1hcC5jLTE3MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjMyLjgyODcwMTQwNFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzYwNDc0MTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEZvY3VzIFN5bWJvbHMgaW4gTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBJJ20gemVyb2luZyBpbiBvbiBhIGZldyBwcm9taXNpbmcgY2FuZGlkYXRlcyBmb3IgdHJhY2tpbmcsIGxpa2VseSBmb3IgcGVyZm9ybWFuY2UgYW5hbHlzaXMgb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBGaXJzdCwgYGZvbGlvX2VuZF93cml0ZWJhY2tgIGZlZWxzIGxpa2UgYSBzb2xpZCBjaG9pY2Ug4oCTIGl0J3MgYSBjcml0aWNhbCBwb2ludCBpbiB0aGUgd3JpdGViYWNrIHByb2Nlc3MsIGEgZ29vZCBwbGFjZSB0byBiZWdpbi4gVGhlbiwgYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGxvb2tzIGVxdWFsbHkgcmVsZXZhbnQsIHNwZWNpZmljYWxseSB0aWVkIHRvIHN3YXAgSS9PIGFuZCBmb2xpbyBvcGVyYXRpb25zLCB3aGljaCBjb3VsZCBiZSB2ZXJ5IHRlbGxpbmcuIEFuZCwgbGV0J3MgYWRkIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCB0byB0aGUgbGlzdDsgaGFuZGxpbmcgcGFnZSByZWNsYW1hdGlvbiBpcyBhbHdheXMgYSBjb21wbGV4IGFyZWEgdGhhdCBtZXJpdHMgY2xvc2UgaW5zcGVjdGlvbi5cblxuTm93LCByZWdhcmRpbmcgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIEknbSBhIGJpdCBjdXJpb3VzLiBJdCdzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIHdoaWNoIHN1Z2dlc3RzIGl0IG1pZ2h0IGJlIGNhbGxhYmxlIGZyb20gb3V0c2lkZSBpdHMgY29tcGlsYXRpb24gdW5pdC4gQnV0LCB3aGV0aGVyIGl0J3MgYWN0dWFsbHkgKmV4cG9ydGVkKiBpcyB0aGUga2V5IHF1ZXN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgc3ltYm9scyB0YWJsZSB0byB2ZXJpZnkgaWYgaXQncyB2aXNpYmxlLCBhcyB0aGlzIHdpbGwgaW5mbHVlbmNlIGl0cyB1dGlsaXR5IGluIG91ciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozNzozOS4xODkyMDMzMjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDMwMTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwX3N0YXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcF9zdGF0ZS5jPTQwMz1zdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy00ODktLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjQ5MDogKiBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy00OTEtICogQHRhcmdfZW50cnk6IHN3YXAgZW50cnkgaW5kaWNhdGluZyB0aGUgdGFyZ2V0IHNsb3RcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy01MDktICovXFxubW0vc3dhcF9zdGF0ZS5jOjUxMDpzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxubW0vc3dhcF9zdGF0ZS5jLTUxMS1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jPTY3OT1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy02ODgtXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbm1tL3N3YXBfc3RhdGUuYzo2ODk6XFx0XFx0Zm9saW8gPSBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy02OTAtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NzIxPXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNzI5LVxcdFxcdFxcdHJldHVybiBmb2xpbztcXG5tbS9zd2FwX3N0YXRlLmM6NzMwOlxcdFxcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy03MzEtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjM5LjI2MzI0NzczOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjIxNjUyODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIGEgS2V5IFN5bWJvbCBmb3IgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gVGhlIGtleSB0aGluZyBoZXJlIGlzIHRoYXQgaXQncyAqbm90KiBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIGludGVyZXN0aW5nIGludGVybmFsbHkgd2l0aGluIHRoZSBrZXJuZWwuIEl04oCZcyBub24tc3RhdGljLCBob3dldmVyLCBtZWFuaW5nIGl0J3MgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSB3aXRoaW4gYSBsYXJnZXIgY29tcGlsYXRpb24gdW5pdC4gVGhlIGZhY3QgdGhhdCBpdCdzIHVzZWQgd2l0aGluIGBtbS96c3dhcC5jYCBuYXJyb3dzIG15IGZvY3VzIGNvbnNpZGVyYWJseS4gWnN3YXAgaXMgbWVtb3J5IGNvbXByZXNzaW9uLCBzbyB0aGlzIGxpa2VseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIGludGVyYWN0aW9uIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjb21wcmVzc2VkIHN3YXAuIFRoaXMgbWFrZXMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgYSBwcmltZSBjYW5kaWRhdGUgdG8gZGlzc2VjdCBhbmQgdW5kZXJzdGFuZCBmdXJ0aGVyLiBJJ20gdGhpbmtpbmcsIFwiSXMgdGhpcyB0aGUgYWxsb2NhdGlvbiBmdW5jdGlvbiBmb3Igc3dhcGNhY2hlIGZvbGlvcz9cIiBHaXZlbiB0aGF0IGNvbnRleHQsIEknbGwgZ28gYWhlYWQgYW5kIGNoZWNrIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCBuZXh0LiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIG5leHQgc3RlcCBnaXZlbiB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2NTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozNzo0Ny40ODQ5MDQwM1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5MzEzMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVtb3ZlX21hcHBpbmdfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MTE9bG9uZyByZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNi0vKipcXG5tbS92bXNjYW4uYzo4MTc6ICogcmVtb3ZlX21hcHBpbmdfcmVjbGFpbSgpIC0gUmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZywgYXMgcmVjbGFpbSBkb2VzLlxcbm1tL3Ztc2Nhbi5jLTgxOC0gKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXFxuLS1cXG5tbS92bXNjYW4uYy04MzAtICovXFxubW0vdm1zY2FuLmM6ODMxOmxvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS92bXNjYW4uYy04MzItXFx0XFx0XFx0ICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjQ3LjU0NTg0MDUxNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY5MjAwMzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgTWVtb3J5IFJlY2xhbWF0aW9uIGluIHRoZSBCbG9jayBMYXllcioqXG5cbk9rYXksIHNvIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCBpc24ndCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCBpbXBsaWVzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB2aXNpYmxlIGFuZCBwb3RlbnRpYWxseSB1c2VkIG91dHNpZGUgb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQgaXQncyBkZWZpbmVkIGluLiBUaGF0J3MgZ29vZCB0byBrbm93IGZvciBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIG90aGVyIGZ1bmN0aW9ucywgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiByZWNsYWltaW5nIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBibG9jayBkZXZpY2UuXG5cblNpbmNlIHRoaXMgaXMgcmVsYXRlZCB0byByZW1vdmluZyBhbmQgcmVjbGFpbWluZywgbXkgbmV4dCBvYnZpb3VzIHN0ZXAgaXMgdG8gZGlnIGludG8gYHN3YXBfd3JpdGVwYWdlX2JkZXZfYXN5bmNgLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgYXN5bmNocm9ub3VzIHdyaXRlcyB0byBibG9jayBkZXZpY2VzIGR1cmluZyBzd2FwIG9wZXJhdGlvbnMuIEl0J3MgbGlrZWx5IGludm9sdmVkIGluIGZyZWVpbmcgdXAgcGFnZXMsIGFuZCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgY291bGQgdmVyeSB3ZWxsIGJlIHBhcnQgb2YgdGhhdCBjeWNsZS4gVW5kZXJzdGFuZGluZyBob3cgdGhlc2UgdHdvIGludGVyYWN0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlY2xhaW1pbmcgcHJvY2VzcyB3aGVuIHdyaXRpbmcgYmFjayBzd2FwIHBhZ2VzLiBJJ20gbG9va2luZyBmb3IgdGhlIGNhbGwgY2hhaW4gYW5kIGhvdyB0aGUgcmVjbGFpbSBvcGVyYXRpb24gaXMgaW5pdGlhdGVkLiBLbm93aW5nIHRoZSBjb250ZXh0IHdpbGwgaGVscCBtZSB3aXRoIGFueSBwb3RlbnRpYWwgYnVnLWh1bnRpbmcgb3Igb3B0aW1pemF0aW9uIGVmZm9ydHMgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTEyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjUxLjgxNTA0MzQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDU4ODcxMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF93cml0ZXBhZ2VfYmRldl9hc3luY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9wYWdlX2lvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9pby5jPTQyOT1zdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X3N5bmMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3BhZ2VfaW8uYy00NDgtXFxubW0vcGFnZV9pby5jOjQ0OTpzdGF0aWMgdm9pZCBzd2FwX3dyaXRlcGFnZV9iZGV2X2FzeW5jKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vcGFnZV9pby5jLTQ1MC1cXHRcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2lzKVxcbi0tXFxubW0vcGFnZV9pby5jPTQ3Mz12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfaW9jYiAqKnN3YXBfcGx1ZylcXG4tLVxcbm1tL3BhZ2VfaW8uYy00OTItXFx0ZWxzZVxcbm1tL3BhZ2VfaW8uYzo0OTM6XFx0XFx0c3dhcF93cml0ZXBhZ2VfYmRldl9hc3luYyhmb2xpbywgc2lzKTtcXG5tbS9wYWdlX2lvLmMtNDk0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6Mzc6NTEuOTIwOTM3ODcyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NzcwNjg2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgU3dhcCBXcml0ZWJhY2sgYW5kIFpTV0FQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgc3dhcF93cml0ZXBhZ2VfYmRldl9hc3luY2AgaXMgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biBteSBmb2N1cy4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgcmVsYXRlZCBzeW1ib2xzLiBNeSBhdHRlbnRpb24gZ29lcyB0bzogYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAsIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBhbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaW4gcmVsYXRpb24gdG8gdGhlIHN3YXAgd3JpdGViYWNrIHByb2Nlc3MuXG5cbk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZm9jdXNpbmcgb24gYFpTV0FQYCwgYFNXQVBgLCBhbmQgYE1FTUNHYC4gSSBuZWVkIHRvIHZlcmlmeSBhIHBvaW50IGhlcmUuIEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBhbGxvY2F0b3IgdGhhdCBgWlNXQVBgIHVzZXMuIERvZXMgaXQgKnJlcXVpcmUqIGBaU01BTExPQ2AsIG9yIGEgc2ltaWxhciBhbGxvY2F0b3I/XG5cbkNoZWNraW5nIGBtbS9LY29uZmlnYCwgSSBjYW4gc2VlOlxuYGNvbmZpZyBaU1dBUGBcbmBkZXBlbmRzIG9uIFNXQVBgXG5gc2VsZWN0IENSWVBUT2BcbmBzZWxlY3QgWlBPT0xgXG5cbkFoLCBpdCBkZXBlbmRzIG9uIGBTV0FQYCwgYW5kIHNlbGVjdHMgYENSWVBUT2AgYW5kIGBaUE9PTGAuIFNvIGl0IGRvZXNuJ3Qgc3RyaWN0bHkgKnJlcXVpcmUqIGBaU01BTExPQ2AsIGJ1dCBgWlNNQUxMT0NgIChvciBzaW1pbGFyKSBpcyBhIGNvbW1vbmx5IHVzZWQgYWxsb2NhdG9yIGZvciBpdC4gVGhhdCBtYWtlcyBzZW5zZS5cblxuRmluYWxseSwgSSBuZWVkIHRvIG1ha2UgYSByZWNvbW1lbmRhdGlvbiBhYm91dCBlbmFibGluZyBgWlNXQVBfREVGQVVMVF9PTmAuIEdpdmVuIHRoZSBjdXJyZW50IGNvbnRleHQsIGFuZCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBkZXBlbmRlbmNpZXMsIGVuYWJsaW5nIGBaU1dBUF9ERUZBVUxUX09OYCB3b3VsZCBiZSBhIGdvb2QgZGVmYXVsdC4gSXQgc2VlbXMgbGlrZSB0aGUgY29ycmVjdCBjaG9pY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjI3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjU5LjQ5ODAwOTMwMVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMzA4MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0yMj1jb25maWcgWlNXQVBcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM3OjU5LjYwODMyMjQ0M1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTAyNjgzMTcwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlLCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWk9gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gQWgsIHllcywgY29uZmlybWVkLCBpdCdzIHNldC4gR29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC5cblxuTm93LCBzaGlmdGluZyBnZWFycywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBDT05GSUdfTUVNQ0dgIGFuZCBgQ09ORklHX0NHUk9VUFNgLiBJcyBgTUVNQ0dgIHN1ZmZpY2llbnQgb24gaXRzIG93biwgb3IgZG9lcyBpdCBkZXBlbmQgb24gYENHUk9VUFNgPyBObywgd2FpdC4uLiBsZXQncyBub3QgYXNzdW1lLiBJIHNob3VsZCBjaGVjayB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiBgTUVNQ0dgIHRvIGJlIHN1cmUuIEl0J3MgYmVzdCB0byBiZSBwcmVjaXNlIGhlcmU7IEknbGwgdHJhY2UgdGhyb3VnaCB0aGUgZGVwZW5kZW5jaWVzIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNzAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDozOToyMC42MzUxNTYyNDJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNzc1MDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb24uKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1ODUgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmluaXQvS2NvbmZpZz02Mz1jb25maWcgUlVTVENfVkVSU0lPTlxcbi0tXFxuaW5pdC9LY29uZmlnLTY3LVxcdCAgSXQgZG9lcyBub3QgZGVwZW5kIG9uIGBSVVNUYCBzaW5jZSB0aGF0IG9uZSBtYXkgbmVlZCB0byB1c2UgdGhlIHZlcnNpb25cXG5pbml0L0tjb25maWc6Njg6XFx0ICBpbiBhIGBkZXBlbmRzIG9uYC5cXG5pbml0L0tjb25maWctNjktXFxuLS1cXG5pbml0L0tjb25maWc9MTExPWNvbmZpZyBHQ0NfQVNNX0dPVE9fT1VUUFVUX0JST0tFTlxcbmluaXQvS2NvbmZpZy0xMTItXFx0Ym9vbFxcbmluaXQvS2NvbmZpZzoxMTM6XFx0ZGVwZW5kcyBvbiBDQ19JU19HQ0NcXG5pbml0L0tjb25maWctMTE0LVxcdGRlZmF1bHQgeSBpZiBHQ0NfVkVSU0lPTiBcXHUwMDNjIDExMDUwMFxcbi0tXFxuaW5pdC9LY29uZmlnPTExOD1jb25maWcgQ0NfSEFTX0FTTV9HT1RPX09VVFBVVFxcbmluaXQvS2NvbmZpZy0xMTktXFx0ZGVmX2Jvb2wgeVxcbmluaXQvS2NvbmZpZzoxMjA6XFx0ZGVwZW5kcyBvbiAhR0NDX0FTTV9HT1RPX09VVFBVVF9CUk9LRU5cXG5pbml0L0tjb25maWc6MTIxOlxcdGRlcGVuZHMgb24gJChzdWNjZXNzLGVjaG8gJ2ludCBmb28oaW50IHgpIHsgYXNtIGdvdG8gKFxcXCJcXFwiOiBcXFwiPXJcXFwiKHgpIDo6OiBiYXIpOyByZXR1cm4geDsgYmFyOiByZXR1cm4gMDsgfScgfCAkKENDKSAteCBjIC0gLWMgLW8gL2Rldi9udWxsKVxcbmluaXQvS2NvbmZpZy0xMjItXFxuaW5pdC9LY29uZmlnPTEyMz1jb25maWcgQ0NfSEFTX0FTTV9HT1RPX1RJRURfT1VUUFVUXFxuaW5pdC9LY29uZmlnOjEyNDpcXHRkZXBlbmRzIG9uIENDX0hBU19BU01fR09UT19PVVRQVVRcXG5pbml0L0tjb25maWctMTI1LVxcdCMgRGV0ZWN0IGJ1Z2d5IGdjYyBhbmQgY2xhbmcsIGZpeGVkIGluIGdjYy0xMSBjbGFuZy0xNC5cXG4tLVxcbmluaXQvS2NvbmZpZz0yMjg9Y29uZmlnIEJST0tFTl9PTl9TTVBcXG5pbml0L0tjb25maWctMjI5LVxcdGJvb2xcXG5pbml0L0tjb25maWc6MjMwOlxcdGRlcGVuZHMgb24gQlJPS0VOIHx8ICFTTVBcXG5pbml0L0tjb25maWctMjMxLVxcdGRlZmF1bHQgeVxcbi0tXFxuaW5pdC9LY29uZmlnPTI0MT1jb25maWcgQ09NUElMRV9URVNUXFxuaW5pdC9LY29uZmlnLTI0Mi1cXHRib29sIFxcXCJDb21waWxlIGFsc28gZHJpdmVycyB3aGljaCB3aWxsIG5vdCBsb2FkXFxcIlxcbmluaXQvS2NvbmZpZzoyNDM6XFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU1cXG5pbml0L0tjb25maWctMjQ0LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0yNzI9Y29uZmlnIFVBUElfSEVBREVSX1RFU1RcXG5pbml0L0tjb25maWctMjczLVxcdGJvb2wgXFxcIkNvbXBpbGUgdGVzdCBVQVBJIGhlYWRlcnNcXFwiXFxuaW5pdC9LY29uZmlnOjI3NDpcXHRkZXBlbmRzIG9uIEhFQURFUlNfSU5TVEFMTFxcbmluaXQvS2NvbmZpZy0yNzUtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTI5Mj1jb25maWcgTE9DQUxWRVJTSU9OX0FVVE9cXG4tLVxcbmluaXQvS2NvbmZpZy0yOTQtXFx0ZGVmYXVsdCB5XFxuaW5pdC9LY29uZmlnOjI5NTpcXHRkZXBlbmRzIG9uICFDT01QSUxFX1RFU1RcXG5pbml0L0tjb25maWctMjk2LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0zNDY9Y2hvaWNlXFxuLS1cXG5pbml0L0tjb25maWctMzQ4LVxcdGRlZmF1bHQgS0VSTkVMX0daSVBcXG5pbml0L0tjb25maWc6MzQ5OlxcdGRlcGVuZHMgb24gSEFWRV9LRVJORUxfR1pJUCB8fCBIQVZFX0tFUk5FTF9CWklQMiB8fCBIQVZFX0tFUk5FTF9MWk1BIHx8IEhBVkVfS0VSTkVMX1haIHx8IEhBVkVfS0VSTkVMX0xaTyB8fCBIQVZFX0tFUk5FTF9MWjQgfHwgSEFWRV9LRVJORUxfWlNURCB8fCBIQVZFX0tFUk5FTF9VTkNPTVBSRVNTRURcXG5pbml0L0tjb25maWctMzUwLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0zNjg9Y29uZmlnIEtFUk5FTF9HWklQXFxuaW5pdC9LY29uZmlnLTM2OS1cXHRib29sIFxcXCJHemlwXFxcIlxcbmluaXQvS2NvbmZpZzozNzA6XFx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9HWklQXFxuaW5pdC9LY29uZmlnLTM3MS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9Mzc1PWNvbmZpZyBLRVJORUxfQlpJUDJcXG5pbml0L0tjb25maWctMzc2LVxcdGJvb2wgXFxcIkJ6aXAyXFxcIlxcbmluaXQvS2NvbmZpZzozNzc6XFx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9CWklQMlxcbmluaXQvS2NvbmZpZy0zNzgtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTM4NT1jb25maWcgS0VSTkVMX0xaTUFcXG5pbml0L0tjb25maWctMzg2LVxcdGJvb2wgXFxcIkxaTUFcXFwiXFxuaW5pdC9LY29uZmlnOjM4NzpcXHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0xaTUFcXG5pbml0L0tjb25maWctMzg4LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0zOTM9Y29uZmlnIEtFUk5FTF9YWlxcbmluaXQvS2NvbmZpZy0zOTQtXFx0Ym9vbCBcXFwiWFpcXFwiXFxuaW5pdC9LY29uZmlnOjM5NTpcXHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX1haXFxuaW5pdC9LY29uZmlnLTM5Ni1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NDA5PWNvbmZpZyBLRVJORUxfTFpPXFxuaW5pdC9LY29uZmlnLTQxMC1cXHRib29sIFxcXCJMWk9cXFwiXFxuaW5pdC9LY29uZmlnOjQxMTpcXHRkZXBlbmRzIG9uIEhBVkVfS0VSTkVMX0xaT1xcbmluaXQvS2NvbmZpZy00MTItXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTQxNz1jb25maWcgS0VSTkVMX0xaNFxcbmluaXQvS2NvbmZpZy00MTgtXFx0Ym9vbCBcXFwiTFo0XFxcIlxcbmluaXQvS2NvbmZpZzo0MTk6XFx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9MWjRcXG5pbml0L0tjb25maWctNDIwLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz00Mjk9Y29uZmlnIEtFUk5FTF9aU1REXFxuaW5pdC9LY29uZmlnLTQzMC1cXHRib29sIFxcXCJaU1REXFxcIlxcbmluaXQvS2NvbmZpZzo0MzE6XFx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9aU1REXFxuaW5pdC9LY29uZmlnLTQzMi1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NDM5PWNvbmZpZyBLRVJORUxfVU5DT01QUkVTU0VEXFxuaW5pdC9LY29uZmlnLTQ0MC1cXHRib29sIFxcXCJOb25lXFxcIlxcbmluaXQvS2NvbmZpZzo0NDE6XFx0ZGVwZW5kcyBvbiBIQVZFX0tFUk5FTF9VTkNPTVBSRVNTRURcXG5pbml0L0tjb25maWctNDQyLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz00ODU9Y29uZmlnIFNZU1ZJUENfU1lTQ1RMXFxuaW5pdC9LY29uZmlnLTQ4Ni1cXHRib29sXFxuaW5pdC9LY29uZmlnOjQ4NzpcXHRkZXBlbmRzIG9uIFNZU1ZJUENcXG5pbml0L0tjb25maWc6NDg4OlxcdGRlcGVuZHMgb24gU1lTQ1RMXFxuaW5pdC9LY29uZmlnLTQ4OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz00OTE9Y29uZmlnIFNZU1ZJUENfQ09NUEFUXFxuaW5pdC9LY29uZmlnLTQ5Mi1cXHRkZWZfYm9vbCB5XFxuaW5pdC9LY29uZmlnOjQ5MzpcXHRkZXBlbmRzIG9uIENPTVBBVCBcXHUwMDI2XFx1MDAyNiBTWVNWSVBDXFxuaW5pdC9LY29uZmlnLTQ5NC1cXG5pbml0L0tjb25maWc9NDk1PWNvbmZpZyBQT1NJWF9NUVVFVUVcXG5pbml0L0tjb25maWctNDk2LVxcdGJvb2wgXFxcIlBPU0lYIE1lc3NhZ2UgUXVldWVzXFxcIlxcbmluaXQvS2NvbmZpZzo0OTc6XFx0ZGVwZW5kcyBvbiBORVRcXG5pbml0L0tjb25maWctNDk4LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz01MTE9Y29uZmlnIFBPU0lYX01RVUVVRV9TWVNDVExcXG5pbml0L0tjb25maWctNTEyLVxcdGJvb2xcXG5pbml0L0tjb25maWc6NTEzOlxcdGRlcGVuZHMgb24gUE9TSVhfTVFVRVVFXFxuaW5pdC9LY29uZmlnOjUxNDpcXHRkZXBlbmRzIG9uIFNZU0NUTFxcbmluaXQvS2NvbmZpZy01MTUtXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9NTI5PWNvbmZpZyBDUk9TU19NRU1PUllfQVRUQUNIXFxuaW5pdC9LY29uZmlnLTUzMC1cXHRib29sIFxcXCJFbmFibGUgcHJvY2Vzc192bV9yZWFkdi93cml0ZXYgc3lzY2FsbHNcXFwiXFxuaW5pdC9LY29uZmlnOjUzMTpcXHRkZXBlbmRzIG9uIE1NVVxcbmluaXQvS2NvbmZpZy01MzItXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9NTM5PWNvbmZpZyBBVURJVFxcbmluaXQvS2NvbmZpZy01NDAtXFx0Ym9vbCBcXFwiQXVkaXRpbmcgc3VwcG9ydFxcXCJcXG5pbml0L0tjb25maWc6NTQxOlxcdGRlcGVuZHMgb24gTkVUXFxuaW5pdC9LY29uZmlnLTU0Mi1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NTUxPWNvbmZpZyBBVURJVFNZU0NBTExcXG5pbml0L0tjb25maWctNTUyLVxcdGRlZl9ib29sIHlcXG5pbml0L0tjb25maWc6NTUzOlxcdGRlcGVuZHMgb24gQVVESVQgXFx1MDAyNlxcdTAwMjYgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTFxcbmluaXQvS2NvbmZpZy01NTQtXFx0c2VsZWN0IEZTTk9USUZZXFxuLS1cXG5pbml0L0tjb25maWc9NTcyPWNvbmZpZyBUSUNLX0NQVV9BQ0NPVU5USU5HXFxuaW5pdC9LY29uZmlnLTU3My1cXHRib29sIFxcXCJTaW1wbGUgdGljayBiYXNlZCBjcHV0aW1lIGFjY291bnRpbmdcXFwiXFxuaW5pdC9LY29uZmlnOjU3NDpcXHRkZXBlbmRzIG9uICFTMzkwIFxcdTAwMjZcXHUwMDI2ICFOT19IWl9GVUxMXFxuaW5pdC9LY29uZmlnLTU3NS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NTgyPWNvbmZpZyBWSVJUX0NQVV9BQ0NPVU5USU5HX05BVElWRVxcbmluaXQvS2NvbmZpZy01ODMtXFx0Ym9vbCBcXFwiRGV0ZXJtaW5pc3RpYyB0YXNrIGFuZCBDUFUgdGltZSBhY2NvdW50aW5nXFxcIlxcbmluaXQvS2NvbmZpZzo1ODQ6XFx0ZGVwZW5kcyBvbiBIQVZFX1ZJUlRfQ1BVX0FDQ09VTlRJTkcgXFx1MDAyNlxcdTAwMjYgIU5PX0haX0ZVTExcXG5pbml0L0tjb25maWctNTg1LVxcdHNlbGVjdCBWSVJUX0NQVV9BQ0NPVU5USU5HXFxuLS1cXG5pbml0L0tjb25maWc9NTk1PWNvbmZpZyBWSVJUX0NQVV9BQ0NPVU5USU5HX0dFTlxcbmluaXQvS2NvbmZpZy01OTYtXFx0Ym9vbCBcXFwiRnVsbCBkeW50aWNrcyBDUFUgdGltZSBhY2NvdW50aW5nXFxcIlxcbmluaXQvS2NvbmZpZzo1OTc6XFx0ZGVwZW5kcyBvbiBIQVZFX0NPTlRFWFRfVFJBQ0tJTkdfVVNFUlxcbmluaXQvS2NvbmZpZzo1OTg6XFx0ZGVwZW5kcyBvbiBIQVZFX1ZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOXFxuaW5pdC9LY29uZmlnOjU5OTpcXHRkZXBlbmRzIG9uIEdFTkVSSUNfQ0xPQ0tFVkVOVFNcXG5pbml0L0tjb25maWctNjAwLVxcdHNlbGVjdCBWSVJUX0NQVV9BQ0NPVU5USU5HXFxuLS1cXG5pbml0L0tjb25maWc9NjE2PWNvbmZpZyBJUlFfVElNRV9BQ0NPVU5USU5HXFxuaW5pdC9LY29uZmlnLTYxNy1cXHRib29sIFxcXCJGaW5lIGdyYW51bGFyaXR5IHRhc2sgbGV2ZWwgSVJRIHRpbWUgYWNjb3VudGluZ1xcXCJcXG5pbml0L0tjb25maWc6NjE4OlxcdGRlcGVuZHMgb24gSEFWRV9JUlFfVElNRV9BQ0NPVU5USU5HIFxcdTAwMjZcXHUwMDI2ICFWSVJUX0NQVV9BQ0NPVU5USU5HX05BVElWRVxcbmluaXQvS2NvbmZpZy02MTktXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTYyNz1jb25maWcgSEFWRV9TQ0hFRF9BVkdfSVJRXFxuaW5pdC9LY29uZmlnLTYyOC1cXHRkZWZfYm9vbCB5XFxuaW5pdC9LY29uZmlnOjYyOTpcXHRkZXBlbmRzIG9uIElSUV9USU1FX0FDQ09VTlRJTkcgfHwgUEFSQVZJUlRfVElNRV9BQ0NPVU5USU5HXFxuaW5pdC9LY29uZmlnOjYzMDpcXHRkZXBlbmRzIG9uIFNNUFxcbmluaXQvS2NvbmZpZy02MzEtXFxuaW5pdC9LY29uZmlnPTYzMj1jb25maWcgU0NIRURfSFdfUFJFU1NVUkVcXG4tLVxcbmluaXQvS2NvbmZpZy02MzUtXFx0ZGVmYXVsdCB5IGlmIEFSTTY0XFxuaW5pdC9LY29uZmlnOjYzNjpcXHRkZXBlbmRzIG9uIFNNUFxcbmluaXQvS2NvbmZpZzo2Mzc6XFx0ZGVwZW5kcyBvbiBDUFVfRlJFUV9USEVSTUFMXFxuaW5pdC9LY29uZmlnLTYzOC1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NjUxPWNvbmZpZyBCU0RfUFJPQ0VTU19BQ0NUXFxuaW5pdC9LY29uZmlnLTY1Mi1cXHRib29sIFxcXCJCU0QgUHJvY2VzcyBBY2NvdW50aW5nIChERVBSRUNBVEVEKVxcXCJcXG5pbml0L0tjb25maWc6NjUzOlxcdGRlcGVuZHMgb24gTVVMVElVU0VSXFxuaW5pdC9LY29uZmlnLTY1NC1cXHRkZWZhdWx0IG5cXG4tLVxcbmluaXQvS2NvbmZpZz02Njg9Y29uZmlnIEJTRF9QUk9DRVNTX0FDQ1RfVjNcXG5pbml0L0tjb25maWctNjY5LVxcdGJvb2wgXFxcIkJTRCBQcm9jZXNzIEFjY291bnRpbmcgdmVyc2lvbiAzIGZpbGUgZm9ybWF0XFxcIlxcbmluaXQvS2NvbmZpZzo2NzA6XFx0ZGVwZW5kcyBvbiBCU0RfUFJPQ0VTU19BQ0NUXFxuaW5pdC9LY29uZmlnLTY3MS1cXHRkZWZhdWx0IG5cXG4tLVxcbmluaXQvS2NvbmZpZz02ODA9Y29uZmlnIFRBU0tTVEFUU1xcbmluaXQvS2NvbmZpZy02ODEtXFx0Ym9vbCBcXFwiRXhwb3J0IHRhc2svcHJvY2VzcyBzdGF0aXN0aWNzIHRocm91Z2ggbmV0bGlua1xcXCJcXG5pbml0L0tjb25maWc6NjgyOlxcdGRlcGVuZHMgb24gTkVUXFxuaW5pdC9LY29uZmlnOjY4MzpcXHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxcbmluaXQvS2NvbmZpZy02ODQtXFx0ZGVmYXVsdCBuXFxuLS1cXG5pbml0L0tjb25maWc9Njk0PWNvbmZpZyBUQVNLX0RFTEFZX0FDQ1RcXG5pbml0L0tjb25maWctNjk1LVxcdGJvb2wgXFxcIkVuYWJsZSBwZXItdGFzayBkZWxheSBhY2NvdW50aW5nXFxcIlxcbmluaXQvS2NvbmZpZzo2OTY6XFx0ZGVwZW5kcyBvbiBUQVNLU1RBVFNcXG5pbml0L0tjb25maWctNjk3LVxcdHNlbGVjdCBTQ0hFRF9JTkZPXFxuLS1cXG5pbml0L0tjb25maWc9NzA2PWNvbmZpZyBUQVNLX1hBQ0NUXFxuaW5pdC9LY29uZmlnLTcwNy1cXHRib29sIFxcXCJFbmFibGUgZXh0ZW5kZWQgYWNjb3VudGluZyBvdmVyIHRhc2tzdGF0c1xcXCJcXG5pbml0L0tjb25maWc6NzA4OlxcdGRlcGVuZHMgb24gVEFTS1NUQVRTXFxuaW5pdC9LY29uZmlnLTcwOS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NzE1PWNvbmZpZyBUQVNLX0lPX0FDQ09VTlRJTkdcXG5pbml0L0tjb25maWctNzE2LVxcdGJvb2wgXFxcIkVuYWJsZSBwZXItdGFzayBzdG9yYWdlIEkvTyBhY2NvdW50aW5nXFxcIlxcbmluaXQvS2NvbmZpZzo3MTc6XFx0ZGVwZW5kcyBvbiBUQVNLX1hBQ0NUXFxuaW5pdC9LY29uZmlnLTcxOC1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NzQ0PWNvbmZpZyBQU0lfREVGQVVMVF9ESVNBQkxFRFxcbi0tXFxuaW5pdC9LY29uZmlnLTc0Ni1cXHRkZWZhdWx0IG5cXG5pbml0L0tjb25maWc6NzQ3OlxcdGRlcGVuZHMgb24gUFNJXFxuaW5pdC9LY29uZmlnLTc0OC1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9NzY2PWNvbmZpZyBDUFVfSVNPTEFUSU9OXFxuaW5pdC9LY29uZmlnLTc2Ny1cXHRib29sIFxcXCJDUFUgaXNvbGF0aW9uXFxcIlxcbmluaXQvS2NvbmZpZzo3Njg6XFx0ZGVwZW5kcyBvbiBTTVBcXG5pbml0L0tjb25maWctNzY5LVxcdGRlZmF1bHQgeVxcbi0tXFxuaW5pdC9LY29uZmlnPTc5Mj1jb25maWcgSUtDT05GSUdfUFJPQ1xcbmluaXQvS2NvbmZpZy03OTMtXFx0Ym9vbCBcXFwiRW5hYmxlIGFjY2VzcyB0byAuY29uZmlnIHRocm91Z2ggL3Byb2MvY29uZmlnLmd6XFxcIlxcbmluaXQvS2NvbmZpZzo3OTQ6XFx0ZGVwZW5kcyBvbiBJS0NPTkZJRyBcXHUwMDI2XFx1MDAyNiBQUk9DX0ZTXFxuaW5pdC9LY29uZmlnLTc5NS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9Nzk5PWNvbmZpZyBJS0hFQURFUlNcXG5pbml0L0tjb25maWctODAwLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUga2VybmVsIGhlYWRlcnMgdGhyb3VnaCAvc3lzL2tlcm5lbC9raGVhZGVycy50YXIueHpcXFwiXFxuaW5pdC9LY29uZmlnOjgwMTpcXHRkZXBlbmRzIG9uIFNZU0ZTXFxuaW5pdC9LY29uZmlnLTgwMi1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9ODA4PWNvbmZpZyBMT0dfQlVGX1NISUZUXFxuLS1cXG5pbml0L0tjb25maWctODExLVxcdGRlZmF1bHQgMTdcXG5pbml0L0tjb25maWc6ODEyOlxcdGRlcGVuZHMgb24gUFJJTlRLXFxuaW5pdC9LY29uZmlnLTgxMy1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9ODI3PWNvbmZpZyBMT0dfQ1BVX01BWF9CVUZfU0hJRlRcXG5pbml0L0tjb25maWctODI4LVxcdGludCBcXFwiQ1BVIGtlcm5lbCBsb2cgYnVmZmVyIHNpemUgY29udHJpYnV0aW9uICgxMyA9XFx1MDAzZSA4IEtCLCAxNyA9XFx1MDAzZSAxMjhLQilcXFwiXFxuaW5pdC9LY29uZmlnOjgyOTpcXHRkZXBlbmRzIG9uIFNNUFxcbmluaXQvS2NvbmZpZy04MzAtXFx0cmFuZ2UgMCAyMVxcbi0tXFxuaW5pdC9LY29uZmlnLTgzMi1cXHRkZWZhdWx0IDEyXFxuaW5pdC9LY29uZmlnOjgzMzpcXHRkZXBlbmRzIG9uIFBSSU5US1xcbmluaXQvS2NvbmZpZy04MzQtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTg2Mz1jb25maWcgUFJJTlRLX0lOREVYXFxuaW5pdC9LY29uZmlnLTg2NC1cXHRib29sIFxcXCJQcmludGsgaW5kZXhpbmcgZGVidWdmcyBpbnRlcmZhY2VcXFwiXFxuaW5pdC9LY29uZmlnOjg2NTpcXHRkZXBlbmRzIG9uIFBSSU5USyBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbmluaXQvS2NvbmZpZy04NjYtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTg4OD1jb25maWcgVUNMQU1QX1RBU0tcXG5pbml0L0tjb25maWctODg5LVxcdGJvb2wgXFxcIkVuYWJsZSB1dGlsaXphdGlvbiBjbGFtcGluZyBmb3IgUlQvRkFJUiB0YXNrc1xcXCJcXG5pbml0L0tjb25maWc6ODkwOlxcdGRlcGVuZHMgb24gQ1BVX0ZSRVFfR09WX1NDSEVEVVRJTFxcbmluaXQvS2NvbmZpZy04OTEtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTkwNj1jb25maWcgVUNMQU1QX0JVQ0tFVFNfQ09VTlRcXG4tLVxcbmluaXQvS2NvbmZpZy05MDktXFx0ZGVmYXVsdCA1XFxuaW5pdC9LY29uZmlnOjkxMDpcXHRkZXBlbmRzIG9uIFVDTEFNUF9UQVNLXFxuaW5pdC9LY29uZmlnLTkxMS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9OTM3PWNvbmZpZyBTQ0hFRF9QUk9YWV9FWEVDXFxuLS1cXG5pbml0L0tjb25maWctOTM5LVxcdCMgQXZvaWQgc29tZSBidWlsZCBmYWlsdXJlcyB3LyBQUkVFTVBUX1JUIHVudGlsIGl0IGNhbiBiZSBmaXhlZFxcbmluaXQvS2NvbmZpZzo5NDA6XFx0ZGVwZW5kcyBvbiAhUFJFRU1QVF9SVFxcbmluaXQvS2NvbmZpZy05NDEtXFx0IyBOZWVkIHRvIGludmVzdGlnYXRlIGhvdyB0byBpbmZvcm0gc2NoZWRfZXh0IG9mIHNwbGl0IGNvbnRleHRzXFxuaW5pdC9LY29uZmlnOjk0MjpcXHRkZXBlbmRzIG9uICFTQ0hFRF9DTEFTU19FWFRcXG5pbml0L0tjb25maWctOTQzLVxcdCMgTm90IHBhcnRpY3VsYXJseSB1c2VmdWwgdW50aWwgd2UgZ2V0IHRvIG11bHRpLXJxIHByb3h5aW5nXFxuaW5pdC9LY29uZmlnOjk0NDpcXHRkZXBlbmRzIG9uIEVYUEVSVFxcbmluaXQvS2NvbmZpZy05NDUtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTEwMTQ9Y29uZmlnIE5VTUFfQkFMQU5DSU5HXFxuaW5pdC9LY29uZmlnLTEwMTUtXFx0Ym9vbCBcXFwiTWVtb3J5IHBsYWNlbWVudCBhd2FyZSBOVU1BIHNjaGVkdWxlclxcXCJcXG5pbml0L0tjb25maWc6MTAxNjpcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcXG5pbml0L0tjb25maWc6MTAxNzpcXHRkZXBlbmRzIG9uICFBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxcbmluaXQvS2NvbmZpZzoxMDE4OlxcdGRlcGVuZHMgb24gU01QIFxcdTAwMjZcXHUwMDI2IE5VTUFfTUlHUkFUSU9OIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuaW5pdC9LY29uZmlnLTEwMTktXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTEwMjY9Y29uZmlnIFNDSEVEX0NBQ0hFXFxuLS1cXG5pbml0L0tjb25maWctMTAyOC1cXHRkZWZhdWx0IHlcXG5pbml0L0tjb25maWc6MTAyOTpcXHRkZXBlbmRzIG9uIFNNUFxcbmluaXQvS2NvbmZpZy0xMDMwLVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0xMDM3PWNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDM5LVxcdGRlZmF1bHQgeVxcbmluaXQvS2NvbmZpZzoxMDQwOlxcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcXG5pbml0L0tjb25maWctMTA0MS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9MTA4Nj1jb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg3LVxcdGJvb2xcXG5pbml0L0tjb25maWc6MTA4ODpcXHRkZXBlbmRzIG9uIE1FTUNHXFxuaW5pdC9LY29uZmlnOjEwODk6XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbmluaXQvS2NvbmZpZzoxMDkwOlxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG5pbml0L0tjb25maWctMTA5MS1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xMDkzPWNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk0LVxcdGJvb2xcXG5pbml0L0tjb25maWc6MTA5NTpcXHRkZXBlbmRzIG9uIE1FTUNHXFxuaW5pdC9LY29uZmlnOjEwOTY6XFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxcbmluaXQvS2NvbmZpZzoxMDk3OlxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbmluaXQvS2NvbmZpZy0xMDk4LVxcdGRlZmF1bHQgeVxcbi0tXFxuaW5pdC9LY29uZmlnPTExMDA9Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5pbml0L0tjb25maWc6MTEwMjpcXHRkZXBlbmRzIG9uIE1FTUNHXFxuaW5pdC9LY29uZmlnLTExMDMtXFx0ZGVmYXVsdCBuXFxuLS1cXG5pbml0L0tjb25maWc9MTExNz1jb25maWcgQkxLX0NHUk9VUFxcbmluaXQvS2NvbmZpZy0xMTE4LVxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuaW5pdC9LY29uZmlnOjExMTk6XFx0ZGVwZW5kcyBvbiBCTE9DS1xcbmluaXQvS2NvbmZpZy0xMTIwLVxcdGRlZmF1bHQgblxcbi0tXFxuaW5pdC9LY29uZmlnPTExMzk9Y29uZmlnIENHUk9VUF9XUklURUJBQ0tcXG5pbml0L0tjb25maWctMTE0MC1cXHRib29sXFxuaW5pdC9LY29uZmlnOjExNDE6XFx0ZGVwZW5kcyBvbiBNRU1DRyBcXHUwMDI2XFx1MDAyNiBCTEtfQ0dST1VQXFxuaW5pdC9LY29uZmlnLTExNDItXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9MTE1OT1jb25maWcgRkFJUl9HUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMTYwLVxcdGJvb2wgXFxcIkdyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX09USEVSXFxcIlxcbmluaXQvS2NvbmZpZzoxMTYxOlxcdGRlcGVuZHMgb24gQ0dST1VQX1NDSEVEXFxuaW5pdC9LY29uZmlnLTExNjItXFx0c2VsZWN0IEdST1VQX1NDSEVEX1dFSUdIVFxcbi0tXFxuaW5pdC9LY29uZmlnPTExNjU9Y29uZmlnIENGU19CQU5EV0lEVEhcXG5pbml0L0tjb25maWctMTE2Ni1cXHRib29sIFxcXCJDUFUgYmFuZHdpZHRoIHByb3Zpc2lvbmluZyBmb3IgRkFJUl9HUk9VUF9TQ0hFRFxcXCJcXG5pbml0L0tjb25maWc6MTE2NzpcXHRkZXBlbmRzIG9uIEZBSVJfR1JPVVBfU0NIRURcXG5pbml0L0tjb25maWctMTE2OC1cXHRzZWxlY3QgR1JPVVBfU0NIRURfQkFORFdJRFRIXFxuLS1cXG5pbml0L0tjb25maWc9MTE3Nz1jb25maWcgUlRfR1JPVVBfU0NIRURcXG5pbml0L0tjb25maWctMTE3OC1cXHRib29sIFxcXCJHcm91cCBzY2hlZHVsaW5nIGZvciBTQ0hFRF9SUi9GSUZPXFxcIlxcbmluaXQvS2NvbmZpZzoxMTc5OlxcdGRlcGVuZHMgb24gQ0dST1VQX1NDSEVEXFxuaW5pdC9LY29uZmlnLTExODAtXFx0ZGVmYXVsdCBuXFxuLS1cXG5pbml0L0tjb25maWc9MTE4OD1jb25maWcgUlRfR1JPVVBfU0NIRURfREVGQVVMVF9ESVNBQkxFRFxcbmluaXQvS2NvbmZpZy0xMTg5LVxcdGJvb2wgXFxcIlJlcXVpcmUgYm9vdCBwYXJhbWV0ZXIgdG8gZW5hYmxlIGdyb3VwIHNjaGVkdWxpbmcgZm9yIFNDSEVEX1JSL0ZJRk9cXFwiXFxuaW5pdC9LY29uZmlnOjExOTA6XFx0ZGVwZW5kcyBvbiBSVF9HUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMTkxLVxcdGRlZmF1bHQgblxcbi0tXFxuaW5pdC9LY29uZmlnPTExOTk9Y29uZmlnIEVYVF9HUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMjAwLVxcdGJvb2xcXG5pbml0L0tjb25maWc6MTIwMTpcXHRkZXBlbmRzIG9uIFNDSEVEX0NMQVNTX0VYVCBcXHUwMDI2XFx1MDAyNiBDR1JPVVBfU0NIRURcXG5pbml0L0tjb25maWctMTIwMi1cXHRzZWxlY3QgR1JPVVBfU0NIRURfV0VJR0hUXFxuLS1cXG5pbml0L0tjb25maWc9MTIwOD1jb25maWcgRVhUX1NVQl9TQ0hFRFxcbmluaXQvS2NvbmZpZy0xMjA5LSAgICAgICAgZGVmX2Jvb2wgeVxcbmluaXQvS2NvbmZpZzoxMjEwOiAgICAgICAgZGVwZW5kcyBvbiBTQ0hFRF9DTEFTU19FWFQgXFx1MDAyNlxcdTAwMjYgQ0dST1VQU1xcbmluaXQvS2NvbmZpZy0xMjExLVxcbmluaXQvS2NvbmZpZz0xMjEyPWNvbmZpZyBTQ0hFRF9NTV9DSURcXG5pbml0L0tjb25maWctMTIxMy1cXHRkZWZfYm9vbCB5XFxuaW5pdC9LY29uZmlnOjEyMTQ6XFx0ZGVwZW5kcyBvbiBTTVAgXFx1MDAyNlxcdTAwMjYgUlNFUVxcbmluaXQvS2NvbmZpZy0xMjE1LVxcbmluaXQvS2NvbmZpZz0xMjE2PWNvbmZpZyBVQ0xBTVBfVEFTS19HUk9VUFxcbmluaXQvS2NvbmZpZy0xMjE3LVxcdGJvb2wgXFxcIlV0aWxpemF0aW9uIGNsYW1waW5nIHBlciBncm91cCBvZiB0YXNrc1xcXCJcXG5pbml0L0tjb25maWc6MTIxODpcXHRkZXBlbmRzIG9uIENHUk9VUF9TQ0hFRFxcbmluaXQvS2NvbmZpZzoxMjE5OlxcdGRlcGVuZHMgb24gVUNMQU1QX1RBU0tcXG5pbml0L0tjb25maWctMTIyMC1cXHRkZWZhdWx0IG5cXG4tLVxcbmluaXQvS2NvbmZpZz0xMjg1PWNvbmZpZyBDR1JPVVBfSFVHRVRMQlxcbmluaXQvS2NvbmZpZy0xMjg2LVxcdGJvb2wgXFxcIkh1Z2VUTEIgY29udHJvbGxlclxcXCJcXG5pbml0L0tjb25maWc6MTI4NzpcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRVxcbmluaXQvS2NvbmZpZy0xMjg4LVxcdHNlbGVjdCBQQUdFX0NPVU5URVJcXG4tLVxcbmluaXQvS2NvbmZpZz0xMzAxPWNvbmZpZyBDUFVTRVRTXFxuaW5pdC9LY29uZmlnLTEzMDItXFx0Ym9vbCBcXFwiQ3B1c2V0IGNvbnRyb2xsZXJcXFwiXFxuaW5pdC9LY29uZmlnOjEzMDM6XFx0ZGVwZW5kcyBvbiBTTVBcXG5pbml0L0tjb25maWctMTMwNC1cXHRzZWxlY3QgVU5JT05fRklORFxcbi0tXFxuaW5pdC9LY29uZmlnPTEzMTQ9Y29uZmlnIENQVVNFVFNfVjFcXG5pbml0L0tjb25maWctMTMxNS1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIGNwdXNldHMgY29udHJvbGxlclxcXCJcXG5pbml0L0tjb25maWc6MTMxNjpcXHRkZXBlbmRzIG9uIENQVVNFVFNcXG5pbml0L0tjb25maWctMTMxNy1cXHRkZWZhdWx0IG5cXG4tLVxcbmluaXQvS2NvbmZpZz0xMzI4PWNvbmZpZyBQUk9DX1BJRF9DUFVTRVRcXG5pbml0L0tjb25maWctMTMyOS1cXHRib29sIFxcXCJJbmNsdWRlIGxlZ2FjeSAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9jcHVzZXQgZmlsZVxcXCJcXG5pbml0L0tjb25maWc6MTMzMDpcXHRkZXBlbmRzIG9uIENQVVNFVFNfVjFcXG5pbml0L0tjb25maWctMTMzMS1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xMzQ1PWNvbmZpZyBDR1JPVVBfUEVSRlxcbmluaXQvS2NvbmZpZy0xMzQ2LVxcdGJvb2wgXFxcIlBlcmYgY29udHJvbGxlclxcXCJcXG5pbml0L0tjb25maWc6MTM0NzpcXHRkZXBlbmRzIG9uIFBFUkZfRVZFTlRTXFxuaW5pdC9LY29uZmlnLTEzNDgtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTEzNTY9Y29uZmlnIENHUk9VUF9CUEZcXG5pbml0L0tjb25maWctMTM1Ny1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBlQlBGIHByb2dyYW1zIGF0dGFjaGVkIHRvIGNncm91cHNcXFwiXFxuaW5pdC9LY29uZmlnOjEzNTg6XFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTFxcbmluaXQvS2NvbmZpZy0xMzU5LVxcdHNlbGVjdCBTT0NLX0NHUk9VUF9EQVRBXFxuLS1cXG5pbml0L0tjb25maWctMTM2My1cXG5pbml0L0tjb25maWc6MTM2NDpcXHQgIEluIHdoaWNoIGNvbnRleHQgdGhlc2UgcHJvZ3JhbXMgYXJlIGFjY2Vzc2VkIGRlcGVuZHMgb24gdGhlIHR5cGVcXG5pbml0L0tjb25maWctMTM2NS1cXHQgIG9mIGF0dGFjaG1lbnQuIEZvciBpbnN0YW5jZSwgcHJvZ3JhbXMgdGhhdCBhcmUgYXR0YWNoZWQgdXNpbmdcXG4tLVxcbmluaXQvS2NvbmZpZz0xMzgzPWNvbmZpZyBDR1JPVVBfREVCVUdcXG4tLVxcbmluaXQvS2NvbmZpZy0xMzg1LVxcdGRlZmF1bHQgblxcbmluaXQvS2NvbmZpZzoxMzg2OlxcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMXFxuaW5pdC9LY29uZmlnLTEzODctXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTE0MDE9bWVudWNvbmZpZyBOQU1FU1BBQ0VTXFxuaW5pdC9LY29uZmlnLTE0MDItXFx0Ym9vbCBcXFwiTmFtZXNwYWNlcyBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5pbml0L0tjb25maWc6MTQwMzpcXHRkZXBlbmRzIG9uIE1VTFRJVVNFUlxcbmluaXQvS2NvbmZpZy0xNDA0LVxcdGRlZmF1bHQgIUVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE0MzA9Y29uZmlnIElQQ19OU1xcbmluaXQvS2NvbmZpZy0xNDMxLVxcdGJvb2wgXFxcIklQQyBuYW1lc3BhY2VcXFwiXFxuaW5pdC9LY29uZmlnOjE0MzI6XFx0ZGVwZW5kcyBvbiAoU1lTVklQQyB8fCBQT1NJWF9NUVVFVUUpXFxuaW5pdC9LY29uZmlnLTE0MzMtXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9MTQ2MD1jb25maWcgTkVUX05TXFxuaW5pdC9LY29uZmlnLTE0NjEtXFx0Ym9vbCBcXFwiTmV0d29yayBuYW1lc3BhY2VcXFwiXFxuaW5pdC9LY29uZmlnOjE0NjI6XFx0ZGVwZW5kcyBvbiBORVRcXG5pbml0L0tjb25maWctMTQ2My1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xNDcwPWNvbmZpZyBDSEVDS1BPSU5UX1JFU1RPUkVcXG5pbml0L0tjb25maWctMTQ3MS1cXHRib29sIFxcXCJDaGVja3BvaW50L3Jlc3RvcmUgc3VwcG9ydFxcXCJcXG5pbml0L0tjb25maWc6MTQ3MjpcXHRkZXBlbmRzIG9uIFBST0NfRlNcXG5pbml0L0tjb25maWctMTQ3My1cXHRzZWxlY3QgUFJPQ19DSElMRFJFTlxcbi0tXFxuaW5pdC9LY29uZmlnPTE1NDE9Y29uZmlnIEJPT1RfQ09ORklHX0ZPUkNFXFxuaW5pdC9LY29uZmlnLTE1NDItXFx0Ym9vbCBcXFwiRm9yY2UgdW5jb25kaXRpb25hbCBib290Y29uZmlnIHByb2Nlc3NpbmdcXFwiXFxuaW5pdC9LY29uZmlnOjE1NDM6XFx0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR1xcbmluaXQvS2NvbmZpZy0xNTQ0LVxcdGRlZmF1bHQgeSBpZiBCT09UX0NPTkZJR19FTUJFRFxcbi0tXFxuaW5pdC9LY29uZmlnPTE1NTQ9Y29uZmlnIEJPT1RfQ09ORklHX0VNQkVEXFxuaW5pdC9LY29uZmlnLTE1NTUtXFx0Ym9vbCBcXFwiRW1iZWQgYm9vdGNvbmZpZyBmaWxlIGluIHRoZSBrZXJuZWxcXFwiXFxuaW5pdC9LY29uZmlnOjE1NTY6XFx0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR1xcbmluaXQvS2NvbmZpZy0xNTU3LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0xNTY1PWNvbmZpZyBCT09UX0NPTkZJR19FTUJFRF9GSUxFXFxuaW5pdC9LY29uZmlnLTE1NjYtXFx0c3RyaW5nIFxcXCJFbWJlZGRlZCBib290Y29uZmlnIGZpbGUgcGF0aFxcXCJcXG5pbml0L0tjb25maWc6MTU2NzpcXHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEXFxuaW5pdC9LY29uZmlnLTE1NjgtXFx0aGVscFxcbi0tXFxuaW5pdC9LY29uZmlnPTE1OTE9Y29uZmlnIElOSVRSQU1GU19QUkVTRVJWRV9NVElNRVxcbmluaXQvS2NvbmZpZy0xNTkyLVxcdGJvb2wgXFxcIlByZXNlcnZlIGNwaW8gYXJjaGl2ZSBtdGltZXMgaW4gaW5pdHJhbWZzXFxcIlxcbmluaXQvS2NvbmZpZzoxNTkzOlxcdGRlcGVuZHMgb24gQkxLX0RFVl9JTklUUkRcXG5pbml0L0tjb25maWctMTU5NC1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xNjAyPWNvbmZpZyBJTklUUkFNRlNfVEVTVFxcbmluaXQvS2NvbmZpZy0xNjAzLVxcdGJvb2wgXFxcIlRlc3QgaW5pdHJhbWZzIGNwaW8gYXJjaGl2ZSBleHRyYWN0aW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuaW5pdC9LY29uZmlnOjE2MDQ6XFx0ZGVwZW5kcyBvbiBCTEtfREVWX0lOSVRSRCBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuaW5pdC9LY29uZmlnLTE2MDUtXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmluaXQvS2NvbmZpZz0xNjM4PWNvbmZpZyBMRF9ERUFEX0NPREVfREFUQV9FTElNSU5BVElPTlxcbmluaXQvS2NvbmZpZy0xNjM5LVxcdGJvb2wgXFxcIkRlYWQgY29kZSBhbmQgZGF0YSBlbGltaW5hdGlvbiAoRVhQRVJJTUVOVEFMKVxcXCJcXG5pbml0L0tjb25maWc6MTY0MDpcXHRkZXBlbmRzIG9uIEhBVkVfTERfREVBRF9DT0RFX0RBVEFfRUxJTUlOQVRJT05cXG5pbml0L0tjb25maWc6MTY0MTpcXHRkZXBlbmRzIG9uIEVYUEVSVFxcbmluaXQvS2NvbmZpZzoxNjQyOlxcdGRlcGVuZHMgb24gJChjYy1vcHRpb24sLWZmdW5jdGlvbi1zZWN0aW9ucyAtZmRhdGEtc2VjdGlvbnMpXFxuaW5pdC9LY29uZmlnOjE2NDM6XFx0ZGVwZW5kcyBvbiAkKGxkLW9wdGlvbiwtLWdjLXNlY3Rpb25zKVxcbmluaXQvS2NvbmZpZy0xNjQ0LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0xNjU2PWNvbmZpZyBMRF9PUlBIQU5fV0FSTlxcbmluaXQvS2NvbmZpZy0xNjU3LVxcdGRlZl9ib29sIHlcXG5pbml0L0tjb25maWc6MTY1ODpcXHRkZXBlbmRzIG9uIEFSQ0hfV0FOVF9MRF9PUlBIQU5fV0FSTlxcbmluaXQvS2NvbmZpZzoxNjU5OlxcdGRlcGVuZHMgb24gJChsZC1vcHRpb24sLS1vcnBoYW4taGFuZGxpbmc9d2FybilcXG5pbml0L0tjb25maWc6MTY2MDpcXHRkZXBlbmRzIG9uICQobGQtb3B0aW9uLC0tb3JwaGFuLWhhbmRsaW5nPWVycm9yKVxcbmluaXQvS2NvbmZpZy0xNjYxLVxcbmluaXQvS2NvbmZpZz0xNjYyPWNvbmZpZyBMRF9PUlBIQU5fV0FSTl9MRVZFTFxcbmluaXQvS2NvbmZpZy0xNjYzLVxcdHN0cmluZ1xcbmluaXQvS2NvbmZpZzoxNjY0OlxcdGRlcGVuZHMgb24gTERfT1JQSEFOX1dBUk5cXG5pbml0L0tjb25maWctMTY2NS1cXHRkZWZhdWx0IFxcXCJlcnJvclxcXCIgaWYgV0VSUk9SXFxuLS1cXG5pbml0L0tjb25maWc9MTcxND1jb25maWcgVUlEMTZcXG5pbml0L0tjb25maWctMTcxNS1cXHRib29sIFxcXCJFbmFibGUgMTYtYml0IFVJRCBzeXN0ZW0gY2FsbHNcXFwiIGlmIEVYUEVSVFxcbmluaXQvS2NvbmZpZzoxNzE2OlxcdGRlcGVuZHMgb24gSEFWRV9VSUQxNiBcXHUwMDI2XFx1MDAyNiBNVUxUSVVTRVJcXG5pbml0L0tjb25maWctMTcxNy1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xNzg2PWNvbmZpZyBQUklOVEtfUklOR0JVRkZFUl9LVU5JVF9URVNUXFxuaW5pdC9LY29uZmlnLTE3ODctXFx0dHJpc3RhdGUgXFxcIktVbml0IFRlc3QgZm9yIHRoZSBwcmludGsgcmluZ2J1ZmZlclxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbmluaXQvS2NvbmZpZzoxNzg4OlxcdGRlcGVuZHMgb24gUFJJTlRLIFxcdTAwMjZcXHUwMDI2IEtVTklUXFxuaW5pdC9LY29uZmlnLTE3ODktXFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4tLVxcbmluaXQvS2NvbmZpZz0xODA4PWNvbmZpZyBFTEZfQ09SRVxcbmluaXQvS2NvbmZpZzoxODA5OlxcdGRlcGVuZHMgb24gQ09SRURVTVBcXG5pbml0L0tjb25maWctMTgxMC1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xODE2PWNvbmZpZyBQQ1NQS1JfUExBVEZPUk1cXG5pbml0L0tjb25maWctMTgxNy1cXHRib29sIFxcXCJFbmFibGUgUEMtU3BlYWtlciBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5pbml0L0tjb25maWc6MTgxODpcXHRkZXBlbmRzIG9uIEhBVkVfUENTUEtSX1BMQVRGT1JNXFxuaW5pdC9LY29uZmlnLTE4MTktXFx0c2VsZWN0IEk4MjUzX0xPQ0tcXG4tLVxcbmluaXQvS2NvbmZpZz0xODMyPWNvbmZpZyBGVVRFWFxcbmluaXQvS2NvbmZpZy0xODMzLVxcdGJvb2wgXFxcIkVuYWJsZSBmdXRleCBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5pbml0L0tjb25maWc6MTgzNDpcXHRkZXBlbmRzIG9uICEoU1BBUkMzMiBcXHUwMDI2XFx1MDAyNiBTTVApXFxuaW5pdC9LY29uZmlnLTE4MzUtXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9MTg0Mj1jb25maWcgRlVURVhfUElcXG5pbml0L0tjb25maWctMTg0My1cXHRib29sXFxuaW5pdC9LY29uZmlnOjE4NDQ6XFx0ZGVwZW5kcyBvbiBGVVRFWCBcXHUwMDI2XFx1MDAyNiBSVF9NVVRFWEVTXFxuaW5pdC9LY29uZmlnLTE4NDUtXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9MTg0Nz1jb25maWcgRlVURVhfUFJJVkFURV9IQVNIXFxuaW5pdC9LY29uZmlnLTE4NDgtXFx0Ym9vbFxcbmluaXQvS2NvbmZpZzoxODQ5OlxcdGRlcGVuZHMgb24gRlVURVggXFx1MDAyNlxcdTAwMjYgIUJBU0VfU01BTEwgXFx1MDAyNlxcdTAwMjYgTU1VXFxuaW5pdC9LY29uZmlnLTE4NTAtXFx0ZGVmYXVsdCB5XFxuLS1cXG5pbml0L0tjb25maWc9MTg1Mj1jb25maWcgRlVURVhfTVBPTFxcbmluaXQvS2NvbmZpZy0xODUzLVxcdGJvb2xcXG5pbml0L0tjb25maWc6MTg1NDpcXHRkZXBlbmRzIG9uIEZVVEVYIFxcdTAwMjZcXHUwMDI2IE5VTUFcXG5pbml0L0tjb25maWctMTg1NS1cXHRkZWZhdWx0IHlcXG4tLVxcbmluaXQvS2NvbmZpZz0xODk3PWNvbmZpZyBTSE1FTVxcbi0tXFxuaW5pdC9LY29uZmlnLTE4OTktXFx0ZGVmYXVsdCB5XFxuaW5pdC9LY29uZmlnOjE5MDA6XFx0ZGVwZW5kcyBvbiBNTVVcXG5pbml0L0tjb25maWctMTkwMS1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9MTkyNT1jb25maWcgR0NPVl9QUk9GSUxFX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MjYtXFx0Ym9vbCBcXFwiRW5hYmxlIEdDT1YgcHJvZmlsaW5nIG9uIHRoZSBpb191cmluZyBzdWJzeXN0ZW1cXFwiXFxuaW5pdC9LY29uZmlnOjE5Mjc6XFx0ZGVwZW5kcyBvbiBJT19VUklORyBcXHUwMDI2XFx1MDAyNiBHQ09WX0tFUk5FTFxcbmluaXQvS2NvbmZpZy0xOTI4LVxcdGhlbHBcXG4tLVxcbmluaXQvS2NvbmZpZz0xOTM4PWNvbmZpZyBJT19VUklOR19NT0NLX0ZJTEVcXG4tLVxcbmluaXQvS2NvbmZpZy0xOTQwLVxcdGRlZmF1bHQgblxcbmluaXQvS2NvbmZpZzoxOTQxOlxcdGRlcGVuZHMgb24gSU9fVVJJTkdcXG5pbml0L0tjb25maWctMTk0Mi1cXHRoZWxwXFxuLS1cXG5pbml0L0tjb25maWc9MTk4MT1jb25maWcgUlNFUVxcbi0tXFxuaW5pdC9LY29uZmlnLTE5ODMtXFx0ZGVmYXVsdCB5XFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjM5OjIwLjY3NjkzNTE1OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTI0MzAzODQ3MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIE1FTUNHIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgTUVNQ0cgc3Vic3lzdGVt4oCmIGl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCwgcmlnaHQ/IE5vIG92ZXJseSBjb21wbGV4IHByZXJlcXVpc2l0ZSBtb2R1bGVzIG9yIGV4b3RpYyBoYXJkd2FyZSBkZXBlbmRlbmNpZXMuIEp1c3QgdGhlIHVzdWFsIHN1c3BlY3RzOiBgSEFWRV9OTUlgIGFuZCB0aGUgbGlrZS4gSXQncyBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHJlbHlpbmcgb24gdGhlIGF2YWlsYWJpbGl0eSBvZiBjb21tb24gZnVuY3Rpb25hbGl0aWVzLiAqQnV0IHdhaXQgYSBzZWNvbmQuLi4qIEkgaGF2ZSBhIG5hZ2dpbmcgZmVlbGluZy4gSXMgaXQgYWN0dWFsbHkgbmVzdGVkIHdpdGhpbiB0aGUgYENHUk9VUFNgIGZyYW1ld29yaz8gTXkgbWVtb3J5IGlzIGEgYml0IGhhenkgb24gdGhhdCBzcGVjaWZpYyBwb2ludC4gSXTigJlzIGNlcnRhaW5seSBhIGNvcmUgY29tcG9uZW50IHRoZXNlIGRheXMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGl0ICppcyogaW5kZWVkIGEgc3ViLW1vZHVsZSBvZiBgQ0dST1VQU2AgdG8gYmUgY2VydGFpbi4gTGV04oCZcyBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyDigJMgYGluaXQvS2NvbmZpZ2AgaXMgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQuIFRoYXQnbGwgcXVpY2tseSBjbGFyaWZ5IHRoZSBkZXBlbmRlbmN5IHRyZWUgYW5kIHJlbW92ZSBhbnkgYW1iaWd1aXR5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGV4YWN0IGNvbmZpZ3VyYXRpb24gZGV0YWlscy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NDQsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDo0MjozMy4xMDczMjI3NjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzIyNzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNRU1DR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNjc9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA3Ni1cXG5pbml0L0tjb25maWc6MTA3Nzpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA3OC1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDg1LVxcbmluaXQvS2NvbmZpZzoxMDg2OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuaW5pdC9LY29uZmlnLTEwODctXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTItXFxuaW5pdC9LY29uZmlnOjEwOTM6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuaW5pdC9LY29uZmlnLTEwOTQtXFx0Ym9vbFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwOTktXFxuaW5pdC9LY29uZmlnOjExMDA6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDEtXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6NDI6MzMuMTUwMDQ5NTYxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTE4MzQ2NjA4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ2hlY2tpbmcgQ0dST1VQIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHNvbWV0aGluZyByZWxhdGVkIHRvIGBNRU1DR2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIklzIGBNRU1DR2AgZW5hYmxlZCB3aXRoaW4gdGhlIGBtZW51Y29uZmlnIENHUk9VUFNgIHNldHRpbmdzP1wiIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBmaXJzdCBzdGVwLCB0aGUgZm91bmRhdGlvbmFsIGNoZWNrLiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCdzIGV2ZW4gY29uZmlndXJlZCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uLCBzbyBjaGVja2luZyBpdHMgcHJlc2VuY2UgaGVyZSBpcyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydC4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlIGFuZCBnbyBmcm9tIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQ1NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjQ1OjM0LjMzMzUxNzkwNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NTM4ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbnVjb25maWcgQ0dST1VQU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNDU9Y29uZmlnIFNMQUJfT0JKX0VYVFxcbi0tXFxuaW5pdC9LY29uZmlnLTEwNDctXFxuaW5pdC9LY29uZmlnOjEwNDg6bWVudWNvbmZpZyBDR1JPVVBTXFxuaW5pdC9LY29uZmlnLTEwNDktXFx0Ym9vbCBcXFwiQ29udHJvbCBHcm91cCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDo0NTozNC40MzkwNjQxNzhaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI0NzcxNDc0NTg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFpzd2FwIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvbmZpZ3VyaW5nIFpzd2FwIGFuZCBpZGVudGlmeWluZyBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBTZWVtcyBzdHJhaWdodGZvcndhcmQuIEZpcnN0LCBJIG5lZWQgdG8gZW5zdXJlIHRoZSByaWdodCBjb25maWdzIGFyZSBpbiBwbGFjZS4gWWVzLCBgQ0dST1VQU2AgaXMgZXNzZW50aWFsLCBubyBxdWVzdGlvbiBhYm91dCBpdC5cblxuTGV0J3MgcHVsbCB0b2dldGhlciB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zOiBgWlNXQVBgLCBgU1dBUGAsIGBNRU1DR2AsIGFuZCBgQ0dST1VQU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhleSBhcmUgYWxsIHByZXNlbnQuIFJpZ2h0LCBhbmQgSSBzaG91bGQgcmVtZW1iZXIgdGhhdCBgWlNXQVBgIGRlcGVuZHMgb24gYFNXQVBgLCBhbmQgYE1FTUNHYCBkZXBlbmRzIG9uIGBDR1JPVVBTYCwgc28gdGhlIG9yZGVyIG1hdHRlcnMuIFRodXMsIGBaU1dBUGAsIGBTV0FQYCwgYE1FTUNHYCwgYENHUk9VUFNgIGlzIHRoZSBjb3JyZWN0IHNldC5cblxuTGV0J3MgY29uc2lkZXIgd2hldGhlciB0byBlbmFibGUgYFpTV0FQYCBieSBkZWZhdWx0LiBZZXMsIGBaU1dBUF9ERUZBVUxUX09OYCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIFpzd2FwIGlzIGFjdHVhbGx5IHVzZWQgYnkgZGVmYXVsdC5cblxuTm93LCBsZXQncyBrZWVwIGBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPYCBpbiBtaW5kLiBJdCdzIGEgZGVmYXVsdC5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCBhIGxpc3Qgb2YgcG90ZW50aWFsIGNhbmRpZGF0ZXM6IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBgX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gTGV0J3MgY29uZmlybSB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGluZGVlZCBub24tc3RhdGljLCB3aGljaCBpcyBhbiBpbXBvcnRhbnQgY3JpdGVyaW9uLiBZZXMsIGl0J3Mgbm9uLXN0YXRpYyBpbiBgbW0vc3dhcF9zdGF0ZS5jYCBhbmQgaXMgZGVjbGFyZWQgaW4gYG1tL3N3YXAuaGAuIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpcyBub24tc3RhdGljIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgaXMgbm9uLXN0YXRpYyBpbiBgbW0vdm1zY2FuLmNgIGFuZCBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBBbmQgYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIG5vbi1zdGF0aWMgaW4gYG1tL2ZpbGVtYXAuY2AgYW5kIGV4cG9ydGVkLlxuXG5IbW0sIHRoZXJlJ3MgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAsIHdoaWNoIGlzIHN0YXRpYyBidXQgaXQgdHJpZ2dlcnMgZHJvcGJlaGluZC4gU2luY2UgaXQncyBzdGF0aWMgd2UgY2FuJ3QgdXNlIGl0LiBCdXQsIGl0IGlzIGNhbGxlZCBieSBgc2hyaW5rX21lbWNnX2NiYCwgd2hpY2ggaXMgc3RhdGljLCBzbyB0aGF0J3Mgbm90IHVzZWZ1bCBlaXRoZXIuIFdoYXQgYWJvdXQgYHpzd2FwX3Nocmlua2VyX3NjYW5gPyBUaGF0J3Mgc3RhdGljIGFzIHdlbGwuXG5cbkxldCdzIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgYW4gZW50cnkgcG9pbnQsIGNhbGxlZCB3aGVuIHdyaXRlYmFjayBjb21wbGV0ZXMuIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBpcyBjYWxsZWQgZnJvbSBgZm9saW9fZW5kX3dyaXRlYmFja2AuIFRoZW4sIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCBpcyBjYWxsZWQgZnJvbSBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AuIEZpbmFsbHksIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzIGNhbGxlZCBmcm9tIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCBgc3dhcF9jYWNoZV9yZWFkX2ZvbGlvYCwgYW5kIGBzd2FwaW5fc3luY2AuXG5cblNvLCB0aGUgY3VycmVudCBwb3RlbnRpYWwgZm9jdXMgc3ltYm9scyBhcmU6XG4tIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYFxuLSBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWBcbi0gYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2Bcbi0gYGZvbGlvX2VuZF93cml0ZWJhY2tgXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgY29uZmlnIGFuZCBpbnN0cnVjdGlvbiBkZXRhaWxzLlxuVGhlIGNvbmZpZ3Mgd2lsbCBiZTpcbi0gYFpTV0FQYFxuLSBgWlNXQVBfREVGQVVMVF9PTmBcbi0gYFNXQVBgXG4tIGBNRU1DR2Bcbi0gYENHUk9VUFNgXG5cblRoZSBpbnN0cnVjdGlvbnMgZGljdGF0ZSB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGZvbGlvX2VuZF93cml0ZWJhY2tgIGlzIGEgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbiBhbmQgc2hvdWxkIGJlIGV4Y2x1ZGVkLiBJdCdzIGNhbGxlZCBmb3IgZXZlcnkgcGFnZSB3cml0ZWJhY2sgY29tcGxldGlvbi4gTGV0J3MgZXhjbHVkZSBpdCB0byBhdm9pZCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuXG5UaGlzIGxlYXZlcyBtZSB3aXRoOiBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AsIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCwgYW5kIGBfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9gLiBJJ2xsIGNvbnNpZGVyIGhvdyBob3QgZWFjaCBpcy4gYHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gIGlzIHNwZWNpZmljIHRvIHRoaXMgbmV3IGZlYXR1cmUsIGFuZCBgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbWAgaXMgc3BlY2lmaWMgdG8gdGhpcyBuZXcgZmVhdHVyZSAoYW5kIHBhZ2UgcmVjbGFpbSksIHNvIHRob3NlIHNlZW0gb2theS5cblxuYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGlzIGNhbGxlZCBkdXJpbmcgcGFnZSByZWNsYWltIGFuZCBzd2FwIHdyaXRlYmFjayBkcm9wYmVoaW5kLiBJdCdzIHNvbWV3aGF0IGhvdCBkdXJpbmcgbWVtb3J5IHByZXNzdXJlLCBidXQgbm90IGFzIGhvdCBhcyBgZm9saW9fZW5kX3dyaXRlYmFja2AuIEl0J3MgZmluZSB0byBpbmNsdWRlLlxuYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgY2FsbGVkIGR1cmluZyBzd2FwaW4gYW5kIHpzd2FwIHdyaXRlYmFjay4gSXQncyBmaW5lIHRvIGluY2x1ZGUuXG5gc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgaXMgY2FsbGVkIG9ubHkgZm9yIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpb3MgKHpzd2FwIHdyaXRlYmFjaykuIEl0J3MgZmluZSB0byBpbmNsdWRlLlxuXG5JIG5lZWQgdG8gY29uZmlybSBhbGwgdGhlIGNvbmZpZyBuYW1lcy4gTGV0IG1lIGRvdWJsZSBjaGVjazpcblxuLSBgWlxuXG4iLCJJbnB1dFRva2VucyI6Mjg3MDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjQ5OjE5LjIxMDU0MjU4MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNzcwNTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0zNT1jb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbi0tXFxubW0vS2NvbmZpZy00NC1cXG5tbS9LY29uZmlnOjQ1OmNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxubW0vS2NvbmZpZy00Ni1cXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDo0OToxOS4zMjQzMjEzOTRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxNDk2NTUwNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFNocmlua2VyIEFkZGl0aW9uKipcblxuT2theSwgc28gd2UgKmRvKiBuZWVkIGBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OYC4gVGhlIHNocmlua2VyIGlzIGVzc2VudGlhbCBmb3IgdHJpZ2dlcmluZyB6c3dhcCB3cml0ZWJhY2ssIHNvIHRoYXQncyBhIGtleSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBieSBkZWZhdWx0LiBUaGF0IGZlZWxzIHJpZ2h0LCBhbmQgaXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UuXG5cbkknbSB0aGlua2luZyB3ZSdyZSBnb2luZyB0byB3YW50IHRvIGhhdmUgYSBsb29rIGF0IGEgZmV3IG90aGVyIGNvbmZpZ3MgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAuIEknbSBnb2luZyB0byB3YW50IHRvIGNvbmZpcm0gdGhhdCB3ZSd2ZSBnb3Q6IGBaU1dBUGAsIGBaU1dBUF9ERUZBVUxUX09OYCwgYW5kIG9mIGNvdXJzZSBgWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTmAuIFRoZW4sIG9mIGNvdXJzZSwgdGhlIG9idmlvdXMgb25lczogYFNXQVBgLCBgTUVNQ0dgLCBhbmQgYENHUk9VUFNgLiBHb3R0YSBtYWtlIHN1cmUgYWxsIHRoZSBidWlsZGluZyBibG9ja3MgYXJlIGluIHBsYWNlIGZvciB0aGlzIHRvIHdvcmsgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgY29kZSwgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIHdheSB0byBkcm9wIHN3YXAgY2FjaGUgZm9saW9zICphZnRlciogdGhlIHpzd2FwIHdyaXRlYmFjayBpcyBjb21wbGV0ZS4gSXQncyBkZXNpZ25lZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHBvbGx1dGlvbiBvZiB0aGUgTFJVLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IG9wdGltaXphdGlvbi4gVGhhdCdzIGdvb2QuIFRoZXkncmUgYWRkaW5nIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gIGZ1bmN0aW9ucywgYW5kIHRoZXkncmUgbW9kaWZ5aW5nIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHRvIGxldmVyYWdlIHRoaXMgbmV3IG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNvcmUgbW9kaWZpY2F0aW9uIHRvIGhvdyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGRlYWxzIHdpdGggc3dhcCwgenN3YXAsIGFuZCB0aGUgcGFnZSBjYWNoZS4gSXQgZnVuZGFtZW50YWxseSBhbHRlcnMgbWVtb3J5IHJlY2xhaW0gYW5kIHN3YXAgYmVoYXZpb3IsIHNvIGl0IGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGFuZCBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIEl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIHRoYXQga2luZCBvZiB0aG9yb3VnaCB0ZXN0aW5nLlxuXG5MZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHNlZSB3aGF0IHdlIGNhbiBkbyB0byBtYWtlIHRoaXMgaGFwcGVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI1NCwiT3V0cHV0VG9rZW5zIjoyMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTQ6NTQ6MjAuODIwODc1NjI3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1NTY4MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiWlNXQVBfREVGQVVMVF9PTlwiLFxuICAgIFwiWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTlwiLFxuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkNHUk9VUFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gICAgXCJyZW1vdmVfbWFwcGluZ19yZWNsYWltXCIsXG4gICAgXCJfX3N3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIGRyb3Agc3dhcCBjYWNoZSBmb2xpb3MgYWZ0ZXIgenN3YXAgd3JpdGViYWNrIGNvbXBsZXRlcywgYXZvaWRpbmcgdW5uZWNlc3NhcnkgTFJVIHBvbGx1dGlvbi4gSXQgYWRkcyBuZXcgZnVuY3Rpb25zIGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgYHJlbW92ZV9tYXBwaW5nX3JlY2xhaW1gLCBhbmQgbW9kaWZpZXMgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgdG8gdXNlIHRoaXMgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIChzd2FwLCB6c3dhcCwgcGFnZSBjYWNoZSkgdGhhdCBhZmZlY3RzIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwIGJlaGF2aW9yLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlpTV0FQX0RFRkFVTFRfT05cIixcbiAgICBcIlpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cIixcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJDR1JPVVBTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb1wiLFxuICAgIFwicmVtb3ZlX21hcHBpbmdfcmVjbGFpbVwiLFxuICAgIFwiX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byBkcm9wIHN3YXAgY2FjaGUgZm9saW9zIGFmdGVyIHpzd2FwIHdyaXRlYmFjayBjb21wbGV0ZXMsIGF2b2lkaW5nIHVubmVjZXNzYXJ5IExSVSBwb2xsdXRpb24uIEl0IGFkZHMgbmV3IGZ1bmN0aW9ucyBgc3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgYW5kIGByZW1vdmVfbWFwcGluZ19yZWNsYWltYCwgYW5kIG1vZGlmaWVzIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIHRvIHVzZSB0aGlzIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoc3dhcCwgenN3YXAsIHBhZ2UgY2FjaGUpIHRoYXQgYWZmZWN0cyBtZW1vcnkgcmVjbGFpbSBhbmQgc3dhcCBiZWhhdmlvciwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDo1NDoyMC45NTY0NTAyODdaIiwiU2VxIjozOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDUwODk3MzQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjU0OjIwLjk1Njk5MTcwN1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjozMjA1MDg0Mjc5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsaWZlY3ljbGUgb2YgZm9saW9zIGluIHRoZSBzd2FwIGNhY2hlLCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgYSBcXFwiZHJvcGJlaGluZFxcXCIgbWVjaGFuaXNtIGZvciB6c3dhcCB3cml0ZWJhY2suIEl0IGNoYW5nZXMgaG93IGZvbGlvcyBhcmUgYWxsb2NhdGVkIGZvciB0aGUgc3dhcCBjYWNoZSAocmV0dXJuaW5nIHRoZW0gb2ZmLUxSVSkgYW5kIG1hbmFnZXMgdGhlaXIgcmVmZXJlbmNlcyBkdXJpbmcgd3JpdGViYWNrLlxcblxcblRoZXNlIGNoYW5nZXMgcHJpbWFyaWx5IGludm9sdmUgcGFnZSByZWZlcmVuY2UgY291bnRpbmcsIExSVSBsaXN0IG1hbmFnZW1lbnQsIGFuZCBzd2FwIGNhY2hlIG9wZXJhdGlvbnMuIFRoZSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgYmUgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcyAoZS5nLiwgZm9saW9zIGxlZnQgb2ZmIHRoZSBMUlUpLCBvciBpbnZhbGlkIHBhZ2Ugc3RhdGVzLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgZGVidWcgb3B0aW9ucyAobGlrZSBgQ09ORklHX0RFQlVHX1ZNYCksIGFuZCBwYWdlIHJlZmVyZW5jZSB0cmFja2luZy5cXG5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IHBhcnNpbmcgbG9naWMgb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZm9saW9zIGFsbG9jYXRlZCBhcmUgcG9wdWxhdGVkIHZpYSBkZWNvbXByZXNzaW9uIGJlZm9yZSBiZWluZyB3cml0dGVuIHRvIHN3YXAsIGFuZCBubyB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgaXMgZXhwb3NlZC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWUwODYyOTk4NjQwNDllZDc3Njk4ZWFmZWMwZWMzNzY2MGRlZjE1ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDE0OjI5OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggOGYwZjY4ZTI0NWJhYS4uMjllYzYwZGNhZTIxMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTM3NCw2ICszNzQsOCBAQCBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3Nocmlua19ub2RlKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sXG4gZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2FsbF9tZW1vcnkodW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gZXh0ZXJuIGludCB2bV9zd2FwcGluZXNzO1xuIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK2xvbmcgcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbitcdFx0XHQgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZyk7XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbiBleHRlcm4gaW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSk7XG5AQCAtNDY1LDYgKzQ2Nyw4IEBAIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XG4gICovXG4gYm9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4rdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuK1xuIC8qIEFsbG9jYXRlIC8gZnJlZSAoaGliZXJuYXRpb24pIGV4Y2x1c2l2ZSBlbnRyaWVzICovXG4gc3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTtcbiB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcbkBAIC00NzUsNiArNDc5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHB1dF9zd2FwX2RldmljZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4gfVxuIFxuICNlbHNlIC8qIENPTkZJR19TV0FQICovXG4rc3RhdGljIGlubGluZSB2b2lkIHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge31cbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpnZXRfc3dhcF9kZXZpY2Uoc3dwX2VudHJ5X3QgZW50cnkpXG4ge1xuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCBkNzIxOTg2ZDVmNDY1Li4wNDBjOTdhMTIxZGVkIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0xNjg2LDYgKzE2ODYsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpO1xuICAqL1xuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbitcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xuK1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiBcbiBcdC8qXG5AQCAtMTY5NSw3ICsxNjk3LDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cbiBcdCAqL1xuIFx0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbitcdC8qXG4rXHQgKiBTYW1wbGUgdGhpcyBiZWZvcmUgZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKCkgY2xlYXJzXG4rXHQgKiBQR193cml0ZWJhY2s6IHVudGlsIHRoZW4gYSByYWNpbmcgc3dhcGluIGNhbm5vdCByZW1vdmUgdGhlIGZvbGlvIGZyb21cbitcdCAqIHRoZSBzd2FwIGNhY2hlLiBBZnRlcndhcmRzIGl0IGNhbiwgYW5kIHRoZSBkcm9wIGJlbG93IHRoZW4gZmluZHMgYVxuK1x0ICogbm9uLXN3YXBjYWNoZSBmb2xpbyBhbmQgcHV0cyBpdCBiYWNrIG9uIHRoZSBMUlUgaW5zdGVhZC4gVGhlXG4rXHQgKiByZWZlcmVuY2UgdGFrZW4gYWJvdmUga2VlcHMgdGhlIGZvbGlvIGFsaXZlIGFjcm9zcyB0aGF0IHdpbmRvdy5cbitcdCAqL1xuK1x0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcbitcbiBcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG4rXG4rXHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XG4rXHRcdHN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lvLmMgYi9tbS9wYWdlX2lvLmNcbmluZGV4IGIyM2Y0OTRmY2M4M2QuLjU4NmM3OWMzYmIzZDIgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2lvLmNcbisrKyBiL21tL3BhZ2VfaW8uY1xuQEAgLTQ1Niw2ICs0NTYsMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZXBhZ2VfYmRldl9hc3luYyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0YmlvLVx1MDAzZWJpX2VuZF9pbyA9IGVuZF9zd2FwX2Jpb193cml0ZTtcbiBcdGJpb19hZGRfZm9saW9fbm9mYWlsKGJpbywgZm9saW8sIGZvbGlvX3NpemUoZm9saW8pLCAwKTtcbiBcbitcdC8qXG4rXHQgKiBEcm9wcGluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSB0YWtlcyBzbGVlcGluZyBsb2Nrcywgc28gdGhlXG4rXHQgKiBjb21wbGV0aW9uIG11c3Qgbm90IHJ1biBpbiBpbnRlcnJ1cHQgY29udGV4dC5cbitcdCAqL1xuK1x0aWYgKGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbykpXG4rXHRcdGJpb19zZXRfZmxhZyhiaW8sIEJJT19DT01QTEVURV9JTl9UQVNLKTtcbitcbiBcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbyk7XG4gXHRjb3VudF9zd3BvdXRfdm1fZXZlbnQoZm9saW8pO1xuIFx0Zm9saW9fc3RhcnRfd3JpdGViYWNrKGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDc3ZDJkMTRlZGE0MjEuLmZjNDRkYWFlMWRlMWYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMwNCw5ICszMDQsOSBAQCBib29sIHN3YXBfY2FjaGVfaGFzX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfZ2V0X2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5KTtcbiB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4rXHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcbiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDcyN2ExN2VlNzgyMTEuLjIzMWZhODdjYmJlMGMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTQ4MywxMyArNDgzLDExIEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgbnJfcGFnZXMpO1xuIFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcbiBcbi1cdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXG4tXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG4gLyoqXG4tICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXG4rICogX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvIC0gQWxsb2NhdGUgZm9saW8gZm9yIHN3YXBwZWQgb3V0IHNsb3QgaW4gc3dhcCBjYWNoZS5cbiAgKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuICAqIEBnZnA6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzXG4gICogQG9yZGVyczogYWxsb2NhdGlvbiBvcmRlcnMsIG11c3QgYmUgbm9uIHplcm9cbkBAIC01MDEsMTMgKzQ5OSwxNyBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiBkb2luZyBJTyAoZS5nLiBzd2FwIGluIG9yIHpzd2FwIHdyaXRlYmFjaykuIFRoZSBzd2FwIHNsb3QgaW5kaWNhdGVkIGJ5XG4gICogQHRhcmdfZW50cnkgbXVzdCBoYXZlIGEgbm9uLXplcm8gc3dhcCBjb3VudCAoc3dhcHBlZCBvdXQpLlxuICAqXG4rICogVGhlIHJldHVybmVkIGZvbGlvIGlzIGxvY2tlZCBhbmQgaXMgTk9UIG9uIHRoZSBMUlUuIFRoZSBjYWxsZXIgbXVzdCBlaXRoZXJcbisgKiBhZGQgaXQgdG8gdGhlIExSVSB3aXRoIGZvbGlvX2FkZF9scnUoKSBzbyBwYWdlIHJlY2xhaW0gY2FuIGZpbmQgaXQsIG9yIGZyZWVcbisgKiBpdCBkaXJlY3RseSBvbmNlIGRvbmU7IGEgZm9saW8gbGVmdCBvZmYgdGhlIExSVSBpcyB1bnJlY2xhaW1hYmxlIGFuZCBsZWFrcy5cbisgKlxuICAqIENvbnRleHQ6IENhbGxlciBtdXN0IHByb3RlY3QgdGhlIHN3YXAgZGV2aWNlIHdpdGggcmVmZXJlbmNlIGNvdW50IG9yIGxvY2tzLlxuICAqIFJldHVybjogUmV0dXJucyB0aGUgZm9saW8gaWYgYWxsb2NhdGlvbiBzdWNjZWVkZWQgYW5kIGZvbGlvIGlzIGluIHRoZSBzd2FwXG4gICogY2FjaGUuIFJldHVybnMgZXJyb3IgY29kZSBpZiBmYWlsZWQgZHVlIHRvIHJhY2UsIE9PTSBvciBpbnZhbGlkIGFyZ3VtZW50cy5cbiAgKi9cbi1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK3N0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbitcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4ge1xuIFx0aW50IG9yZGVyLCBlcnI7XG4gXHRzdHJ1Y3QgZm9saW8gKnJldDtcbkBAIC01MzUsNiArNTM3LDQ3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbisvKipcbisgKiBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvIC0gZHJvcCBhIGRyb3BiZWhpbmQgc3dhcCBjYWNoZSBmb2xpb1xuKyAqIEBmb2xpbzogdGhlIG9mZi1MUlUgZm9saW8gd2hvc2Ugd3JpdGViYWNrIGhhcyBjb21wbGV0ZWRcbisgKlxuKyAqIENvbnRleHQ6IHRhc2sgY29udGV4dCwgd2l0aCB0aGUgcmVmZXJlbmNlIHRha2VuIGJ5IGZvbGlvX2VuZF93cml0ZWJhY2soKVxuKyAqIGRvbmF0ZWQgdG8gdXMuXG4rICovXG4rdm9pZCBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4re1xuK1x0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuK1xuK1x0Zm9saW9fbG9jayhmb2xpbyk7XG4rXG4rXHQvKiBUaGUgZm9saW8gd2FzIGFsbG9jYXRlZCBvZmYgdGhlIExSVSBhbmQgbm90aGluZyByZS1hZGRzIGl0IGhlcmUuICovXG4rXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRtZW1jZyA9IGZvbGlvX21lbWNnKGZvbGlvKTtcbitcdGlmICghbWVtX2Nncm91cF90cnlnZXQobWVtY2cpKVxuK1x0XHRtZW1jZyA9IE5VTEw7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdC8qXG4rXHQgKiBHYXRlIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZ1xuK1x0ICogc3dhcGluIG1heSBoYXZlIGZyZWVkIHRoZSBzd2FwIHNsb3QgKGZvbGlvX2ZyZWVfc3dhcCgpKSBhbmQgZHJvcHBlZCB0aGVcbitcdCAqIGZvbGlvIGZyb20gdGhlIGNhY2hlLCBhbmQgaXQgbXVzdCBub3QgcnVuIG9uIGEgbm9uLXN3YXBjYWNoZSBmb2xpbyAoaXRcbitcdCAqIHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJ3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLlxuK1x0ICovXG4rXHRpZiAoIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSB8fCBmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykgfHxcbitcdCAgICAhcmVtb3ZlX21hcHBpbmdfcmVjbGFpbShzd2FwX2FkZHJlc3Nfc3BhY2UoZm9saW8tXHUwMDNlc3dhcCksIGZvbGlvLCBtZW1jZykpIHtcbitcdFx0LyogUmFjZWQ6IHRoZSBmb2xpbyBpcyBub3cgb3duZWQgYnkgdGhlIHN3YXBpbjsgcHV0IGl0IGJhY2suICovXG4rXHRcdGZvbGlvX2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pO1xuK1x0XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbitcdH1cbitcbitcdG1lbV9jZ3JvdXBfcHV0KG1lbWNnKTtcbitcbitcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXHRmb2xpb19wdXQoZm9saW8pO1xuK31cbitcbiAvKlxuICAqIElmIHdlIGFyZSB0aGUgb25seSB1c2VyLCB0aGVuIHRyeSB0byBmcmVlIHVwIHRoZSBzd2FwIGNhY2hlLlxuICAqXG5AQCAtNjQzLDEyICs2ODYsMTMgQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuK1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlJfT1JfTlVMTChmb2xpbykpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRzd2FwX3JlYWRfZm9saW8oZm9saW8sIHBsdWcpO1xuIFx0aWYgKHJlYWRhaGVhZCkge1xuIFx0XHRmb2xpb19zZXRfcmVhZGFoZWFkKGZvbGlvKTtcbkBAIC02ODMsMTIgKzcyNywxMyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuK1x0XHRmb2xpbyA9IF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG4gXHRcdHJldHVybiBmb2xpbztcbiBcbitcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuIFx0c3dhcF9yZWFkX2ZvbGlvKGZvbGlvLCBOVUxMKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggODQ4YmQzZTVlZWUyYi4uNGNjM2EzZWQ2ZGI2ZSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTc4MCw2ICs3ODAsMjIgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBsb25nIF9fcmVtb3ZlX21hcHBpbmdfdW5mcmVlemUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4rXHRcdFx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHJlY2xhaW1lZCxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXG4re1xuK1x0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIHJlY2xhaW1lZCwgdGFyZ2V0X21lbWNnKSkge1xuK1x0XHQvKlxuK1x0XHQgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHlcbitcdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbitcdFx0ICogYXRvbWljIG9wZXJhdGlvbi5cbitcdFx0ICovXG4rXHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG4rXHRcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLyoqXG4gICogcmVtb3ZlX21hcHBpbmcoKSAtIEF0dGVtcHQgdG8gcmVtb3ZlIGEgZm9saW8gZnJvbSBpdHMgbWFwcGluZy5cbiAgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXG5AQCAtNzk0LDE2ICs4MTAsMjggQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqL1xuIGxvbmcgcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuLVx0aWYgKF9fcmVtb3ZlX21hcHBpbmcobWFwcGluZywgZm9saW8sIGZhbHNlLCBOVUxMKSkge1xuLVx0XHQvKlxuLVx0XHQgKiBVbmZyZWV6aW5nIHRoZSByZWZjb3VudCB3aXRoIDEgZWZmZWN0aXZlbHlcbi1cdFx0ICogZHJvcHMgdGhlIHBhZ2VjYWNoZSByZWYgZm9yIHVzIHdpdGhvdXQgcmVxdWlyaW5nIGFub3RoZXJcbi1cdFx0ICogYXRvbWljIG9wZXJhdGlvbi5cbi1cdFx0ICovXG4tXHRcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgMSk7XG4tXHRcdHJldHVybiBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKG1hcHBpbmcsIGZvbGlvLCBmYWxzZSwgTlVMTCk7XG4rfVxuK1xuKy8qKlxuKyAqIHJlbW92ZV9tYXBwaW5nX3JlY2xhaW0oKSAtIFJlbW92ZSBhIGZvbGlvIGZyb20gaXRzIG1hcHBpbmcsIGFzIHJlY2xhaW0gZG9lcy5cbisgKiBAbWFwcGluZzogVGhlIGFkZHJlc3Mgc3BhY2UuXG4rICogQGZvbGlvOiBUaGUgZm9saW8gdG8gcmVtb3ZlLlxuKyAqIEB0YXJnZXRfbWVtY2c6IFRoZSBtZW1jZyB0byBjaGFyZ2UgdGhlIGV2aWN0aW9uIHNoYWRvdyB0bzsgdGhlIGNhbGxlciBtdXN0XG4rICogICAgICAgICAgICAgICAga2VlcCBpdCBhbGl2ZSBhY3Jvc3MgdGhlIGNhbGwuXG4rICpcbisgKiBMaWtlIHJlbW92ZV9tYXBwaW5nKCksIGJ1dCBzdG9yZXMgYSB3b3JraW5nc2V0IGV2aWN0aW9uIHNoYWRvdyB0aGUgd2F5IHBhZ2VcbisgKiByZWNsYWltIGRvZXMsIHNvIHRoYXQgYSBsYXRlciByZWZhdWx0IGNhbiBiZSBkZXRlY3RlZCBhbmQgdGhlIGZvbGlvXG4rICogcmUtYWN0aXZhdGVkLlxuKyAqIFJldHVybjogVGhlIG51bWJlciBvZiBwYWdlcyByZW1vdmVkIGZyb20gdGhlIG1hcHBpbmcuICAwIGlmIHRoZSBmb2xpb1xuKyAqIGNvdWxkIG5vdCBiZSByZW1vdmVkLlxuKyAqIENvbnRleHQ6IFRoZSBjYWxsZXIgc2hvdWxkIGhhdmUgYSBzaW5nbGUgcmVmY291bnQgb24gdGhlIGZvbGlvIGFuZFxuKyAqIGhvbGQgaXRzIGxvY2suXG4rICovXG4rbG9uZyByZW1vdmVfbWFwcGluZ19yZWNsYWltKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuK1x0XHRcdCAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqdGFyZ2V0X21lbWNnKVxuK3tcbitcdHJldHVybiBfX3JlbW92ZV9tYXBwaW5nX3VuZnJlZXplKG1hcHBpbmcsIGZvbGlvLCB0cnVlLCB0YXJnZXRfbWVtY2cpO1xuIH1cbiBcbiAvKipcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggNzYxY2Q2OTllMGEzZS4uZDE2ODIyYTUxNmU4ZCAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0xMDAwLDggKzEwMDAsOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcbiBcdG1wb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4tXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCxcbi1cdFx0XHRcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcbitcdGZvbGlvID0gX19zd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4rXHRcdFx0XHRcdCBOT19JTlRFUkxFQVZFX0lOREVYKTtcbiBcdHB1dF9zd2FwX2RldmljZShzaSk7XG4gXG4gXHQvKlxuQEAgLTEwNDUsMTIgKzEwNDUsMjYgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdC8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi9cbiBcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFxuLVx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXG4tXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XG4rXHRmb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG4rXG4rXHQvKlxuK1x0ICogRHJvcCBvdXIgcmVmZXJlbmNlIGJlZm9yZSBzdGFydGluZyB3cml0ZWJhY2sgc28gdGhlIHN3YXAgY2FjaGUgaG9sZHNcbitcdCAqIHRoZSBvbmx5IG9uZTogdGhlIGRyb3AgaW4gZm9saW9fZW5kX3dyaXRlYmFjaygpIG5lZWRzIHRoYXQgZm9yXG4rXHQgKiByZW1vdmVfbWFwcGluZ19yZWNsYWltKCkgdG8gc3VjY2VlZCwgb3RoZXJ3aXNlIHRoZSBmb2xpbyBpcyBoYW5kZWRcbitcdCAqIGJhY2sgdG8gcmVjbGFpbSBpbnN0ZWFkLlxuK1x0ICpcbitcdCAqIE5vdGhpbmcgY2FuIGZyZWUgdGhlIGZvbGlvIGluIHRoZSBtZWFudGltZTogd2UgaG9sZCB0aGUgZm9saW8gbG9ja1xuK1x0ICogdW50aWwgd3JpdGViYWNrIHN0YXJ0cywgUEdfd3JpdGViYWNrIHRoZW4gYmxvY2tzIHN3YXAgY2FjaGUgcmVtb3ZhbCxcbitcdCAqIGFuZCBmb2xpb19lbmRfd3JpdGViYWNrKCkgdGFrZXMgaXRzIG93biByZWZlcmVuY2UgYmVmb3JlIGNsZWFyaW5nXG4rXHQgKiBQR193cml0ZWJhY2sgYW5kIGRvbmF0ZXMgaXQgdG8gdGhlIGRyb3AuXG4rXHQgKi9cbitcdGZvbGlvX3B1dChmb2xpbyk7XG4gXG4gXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbiBcdF9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpO1xuIFxuK1x0cmV0dXJuIDA7XG4rXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxNDo1NDoyMC45NTY5OTIzNjdaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNTA4NDA5MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBBbmFseXNpcyBvZiBTd2FwIENhY2hlIFBhdGNoIFNlcmllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIHBhdGNoIHNlcmllcyB0b3VjaGluZyB0aGUgc3dhcCwgcGFnZSBjYWNoZSwgYW5kIHpzd2FwIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIHRoaXMgbmV3IGBzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBmdW5jdGlvbiBhbmQgbW9kaWZpY2F0aW9ucyB0byBmb2xpbyBoYW5kbGluZyBkdXJpbmcgd3JpdGViYWNrLCBzcGVjaWZpY2FsbHkgdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgZm9saW9zIHdpdGhpbiB0aGUgc3dhcCBjYWNoZS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gKm1pZ2h0KiB1bmlxdWVseSBjYXRjaC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIG1vZGlmaWVzIGhvdyBmb2xpb3MgYXJlIG1hcmtlZCBhcyBcImRyb3BiZWhpbmRcIiwgYW5kIGFsdGVycyB0aGUgbGlmZWN5Y2xlIGluIHRoZSBzd2FwIGNhY2hlLiBJdCdzIGVzc2VudGlhbGx5IGFib3V0IGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCwgYWRkZWQgdG8gdGhlIExSVSAob3Igbm90KSwgYW5kIG1hbmFnZWQgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gVGhlIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIGdvaW5nIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGhhdmUgYW55IGxvZ2ljIHRoYXQgd291bGQgY29uZGl0aW9uYWxseSBleGVjdXRlIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmUgYXJlbid0IGFueSBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYW55IGJvdW5kYXJ5IGNoZWNrcyBvciB2YXJpYWJsZSBsZW5ndGhzIHRoYXQgd291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblRoZSBwcmltYXJ5IGNvbmNlcm5zIEkgaGF2ZSBhcmUgbGlrZWx5IGdvaW5nIHRvIGJlIHRoZSB1c3VhbCBzdXNwZWN0czogdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzIChlLmcuLCBmb2xpb3MgYmVpbmcgbGVmdCBvZmYgdGhlIExSVSBvciBiZWluZyBkb3VibGUtZnJlZWQpLCBvciBwb3RlbnRpYWwgbG9ja2luZyBpc3N1ZXMuIFRoZXNlIGFyZSBwcmVjaXNlbHkgdGhlIHR5cGVzIG9mIGJ1Z3MgdGhhdCBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgYXJlIGRlc2lnbmVkIHRvIGNhdGNoLlxuXG5MZXQncyBkbyBhIGRlZXAgZGl2ZSBhbmQgY29uZmlybSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkLiBUaGUgaW1wb3J0YW50IHNlY3Rpb24gaXMgdGhhdCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCBub3cgY2FsbHMgYF9fc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AuIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgdGhlIGZvbGlvIGZvciB0aGUgc3dhcCBvciB6c3dhcCBlbnRyeS4gVGhlIGZvbGlvIG1lbW9yeSBpcyBwb3B1bGF0ZWQgYnkgZGVjb21wcmVzc2luZyB0aGUgenN3YXAgZW50cnkgaW50byBpdC4gSWYgdGhlIGRlY29tcHJlc3Npb24gZmFpbHMsIHRoZW4gdGhlIGZvbGlvIGlzIGRlbGV0ZWQgZnJvbSBzd2FwIGNhY2hlLCBvdGhlcndpc2UsIGl0IG1hcmtzIGl0IHVwLXRvLWRhdGUgYW5kIHdyaXRlcyBpdCBiYWNrLiBDcnVjaWFsbHksIHRoZXJlJ3Mgbm8gc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgKmV4cG9zZWQqIHRvIHVzZXIgc3BhY2UsIG9yIHdoZXJlIGNvbnRyb2wgZmxvdyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHdpdGhpbiB0aGUgYWxsb2NhdGlvbiBhbmQgd3JpdGViYWNrIHBhdGguIFRoZSBjb2RlIGNhcmVmdWxseSBwb3B1bGF0ZXMgdGhlIGZvbGlvIHdpdGggdGhlIGRlY29tcHJlc3NlZCBkYXRhLiBUaGUgcHJpbWFyeSBjb25jZXJucyBJIHNlZSBhcmUgdXNlLWFmdGVyLWZyZWUgYnVncyAoZS5nLiwgZHJvcHBpbmcgYSByZWZlcmVuY2UgZWFybHkgYW5kIHRoZW4gYWNjZXNzaW5nIHRoZSBmb2xpbyksIG1lbW9yeSBsZWFrcywgb3IgYmFkIHBhZ2Ugc3RhdGUgaXNzdWVzIC0gYWxsIG9mIHdoaWNoIHdvdWxkIGJlIGZsYWdnZWQgYnkgc3RhbmRhcmQgVk0gZGVidWdnaW5nIHRvb2xzIG9yIEtBU0FOLlxuXG5JbiBzdW1tYXJ5LCB0aGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBmb2xpbyBsaWZlY3ljbGUgaW4gdGhlIHN3YXAgY2FjaGUsIGludHJvZHVjZXMgYSBcImRyb3BiZWhpbmRcIiBtZWNoYW5pc20sIGFuZCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCAob2ZmLUxSVSkgYW5kIG1hbmFnZWQgZHVyaW5nIHpzd2FwIHdyaXRlYmFjay4gVGhlIHBvdGVudGlhbCBidWdzIGFyZSBwcmltYXJpbHkgdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgYW5kIHBhZ2Ugc3RhdGUgaXNzdWVzIC0gYWxsIG9mIHdoaWNoIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnIG9wdGlvbnMsIGFuZCBwYWdlIHJlZmVyZW5jZSB0cmFja2luZy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBuZXcgdXNlci1zcGFjZSBkYXRhIHN0cnVjdHVyZXMgbm9yIHBhcnNpbmcgbG9naWMgb3IgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBLTVNBTiBpcyBub3QganVzdGlmaWVkIGhlcmUuIFdlJ3JlIGxvb2tpbmcgYXQgcmVmZXJlbmNlIGNvdW50aW5nLCBMUlUgbGlzdCBtYW5hZ2VtZW50LCBhbmQgdGhlIG92ZXJhbGwgc3dhcCBjYWNoZSBsaWZlY3ljbGUuIFRoZXJlZm9yZSwgS0FTQU4gYW5kIHRoZSBzdGFuZGFyZCBWTSBkZWJ1ZyB0b29scyBhcmUgc3VmZmljaWVudCBmb3IgdGhpcyBwYXRjaC4gSSB0aGluayB0aGlzIGlzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjYWxsLiBObyBuZWVkIGZvciBhIEtNU0FOIHNlc3Npb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNzcsIk91dHB1dFRva2VucyI6MjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMyMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDE0OjU5OjQxLjQ2NTQwNDE2NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxpZmVjeWNsZSBvZiBmb2xpb3MgaW4gdGhlIHN3YXAgY2FjaGUsIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBhIFxcXCJkcm9wYmVoaW5kXFxcIiBtZWNoYW5pc20gZm9yIHpzd2FwIHdyaXRlYmFjay4gSXQgY2hhbmdlcyBob3cgZm9saW9zIGFyZSBhbGxvY2F0ZWQgZm9yIHRoZSBzd2FwIGNhY2hlIChyZXR1cm5pbmcgdGhlbSBvZmYtTFJVKSBhbmQgbWFuYWdlcyB0aGVpciByZWZlcmVuY2VzIGR1cmluZyB3cml0ZWJhY2suXFxuXFxuVGhlc2UgY2hhbmdlcyBwcmltYXJpbHkgaW52b2x2ZSBwYWdlIHJlZmVyZW5jZSBjb3VudGluZywgTFJVIGxpc3QgbWFuYWdlbWVudCwgYW5kIHN3YXAgY2FjaGUgb3BlcmF0aW9ucy4gVGhlIHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBiZSB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzIChlLmcuLCBmb2xpb3MgbGVmdCBvZmYgdGhlIExSVSksIG9yIGludmFsaWQgcGFnZSBzdGF0ZXMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQga2VybmVsIG1lbW9yeSBkZWJ1ZyBvcHRpb25zIChsaWtlIGBDT05GSUdfREVCVUdfVk1gKSwgYW5kIHBhZ2UgcmVmZXJlbmNlIHRyYWNraW5nLlxcblxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggcGFyc2luZyBsb2dpYyBvciBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBmb2xpb3MgYWxsb2NhdGVkIGFyZSBwb3B1bGF0ZWQgdmlhIGRlY29tcHJlc3Npb24gYmVmb3JlIGJlaW5nIHdyaXR0ZW4gdG8gc3dhcCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBpcyBleHBvc2VkLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbGlmZWN5Y2xlIG9mIGZvbGlvcyBpbiB0aGUgc3dhcCBjYWNoZSwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGEgXFxcImRyb3BiZWhpbmRcXFwiIG1lY2hhbmlzbSBmb3IgenN3YXAgd3JpdGViYWNrLiBJdCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCBmb3IgdGhlIHN3YXAgY2FjaGUgKHJldHVybmluZyB0aGVtIG9mZi1MUlUpIGFuZCBtYW5hZ2VzIHRoZWlyIHJlZmVyZW5jZXMgZHVyaW5nIHdyaXRlYmFjay5cXG5cXG5UaGVzZSBjaGFuZ2VzIHByaW1hcmlseSBpbnZvbHZlIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nLCBMUlUgbGlzdCBtYW5hZ2VtZW50LCBhbmQgc3dhcCBjYWNoZSBvcGVyYXRpb25zLiBUaGUgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIGJlIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MgKGUuZy4sIGZvbGlvcyBsZWZ0IG9mZiB0aGUgTFJVKSwgb3IgaW52YWxpZCBwYWdlIHN0YXRlcy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBrZXJuZWwgbWVtb3J5IGRlYnVnIG9wdGlvbnMgKGxpa2UgYENPTkZJR19ERUJVR19WTWApLCBhbmQgcGFnZSByZWZlcmVuY2UgdHJhY2tpbmcuXFxuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBwYXJzaW5nIGxvZ2ljIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGluZyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGZvbGlvcyBhbGxvY2F0ZWQgYXJlIHBvcHVsYXRlZCB2aWEgZGVjb21wcmVzc2lvbiBiZWZvcmUgYmVpbmcgd3JpdHRlbiB0byBzd2FwLCBhbmQgbm8gdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IGlzIGV4cG9zZWQuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow64hgc[1] Phase: Succeeded StartedAt: 2026-08-25 14:59:53 +0000 UTC FinishedAt: 2026-08-25 14:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 14:59:53 +0000 UTC FinishedAt: 2026-08-25 14:59:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2] Phase: Succeeded StartedAt: 2026-08-25 14:59:53 +0000 UTC FinishedAt: 2026-08-25 18:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 14:59:53 +0000 UTC FinishedAt: 2026-08-25 18:49:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 14:59:53 +0000 UTC FinishedAt: 2026-08-25 15:00:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 14:59:53 +0000 UTC FinishedAt: 2026-08-25 14:59:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64hgc/series-workflow64hgc-convert-artifact-1614868739/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 15:00:03 +0000 UTC FinishedAt: 2026-08-25 15:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 15:00:03 +0000 UTC FinishedAt: 2026-08-25 15:17:38 +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:*87e3c482-1eda-4aeb-b7be-e10a06fba20f,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-workflow64hgc/series-workflow64hgc-convert-artifact-1614868739/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": "bc34a7a8-7dac-448a-a6ea-ed2d214207fc", "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-workflow64hgc/series-workflow64hgc-build-action-4000555377/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 15:00:03 +0000 UTC FinishedAt: 2026-08-25 15:17:28 +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:*87e3c482-1eda-4aeb-b7be-e10a06fba20f,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-workflow64hgc/series-workflow64hgc-convert-artifact-1614868739/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": "bc34a7a8-7dac-448a-a6ea-ed2d214207fc", "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-workflow64hgc/series-workflow64hgc-build-action-4000555377/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 15:17:38 +0000 UTC FinishedAt: 2026-08-25 15:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 15:17:38 +0000 UTC FinishedAt: 2026-08-25 15:17:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 15:17:38 +0000 UTC FinishedAt: 2026-08-25 15:17:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 15:17:38 +0000 UTC FinishedAt: 2026-08-25 15:17:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow64hgc/series-workflow64hgc-convert-artifact-2125817274/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 15:17:48 +0000 UTC FinishedAt: 2026-08-25 15:19:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 15:17:48 +0000 UTC FinishedAt: 2026-08-25 15:19:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bc34a7a8-7dac-448a-a6ea-ed2d214207fc,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-workflow64hgc/series-workflow64hgc-build-action-4000555377/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-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 15:19:46 +0000 UTC FinishedAt: 2026-08-25 15:19:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 15:19:46 +0000 UTC FinishedAt: 2026-08-25 15:19:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 15:19:46 +0000 UTC FinishedAt: 2026-08-25 15:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 15:19:46 +0000 UTC FinishedAt: 2026-08-25 15:37:06 +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:*87e3c482-1eda-4aeb-b7be-e10a06fba20f,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-workflow64hgc/series-workflow64hgc-convert-artifact-2125817274/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": "c8982764-b59f-474d-8df4-b5a6d3621706", "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-workflow64hgc/series-workflow64hgc-build-action-300160030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 15:19:46 +0000 UTC FinishedAt: 2026-08-25 15:36:56 +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:*87e3c482-1eda-4aeb-b7be-e10a06fba20f,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-workflow64hgc/series-workflow64hgc-convert-artifact-2125817274/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": "c8982764-b59f-474d-8df4-b5a6d3621706", "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-workflow64hgc/series-workflow64hgc-build-action-300160030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 15:37:06 +0000 UTC FinishedAt: 2026-08-25 15:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 15:37:06 +0000 UTC FinishedAt: 2026-08-25 15:37:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 15:37:06 +0000 UTC FinishedAt: 2026-08-25 15:39:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 15:37:06 +0000 UTC FinishedAt: 2026-08-25 15:39:04 +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:*c8982764-b59f-474d-8df4-b5a6d3621706,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-workflow64hgc/series-workflow64hgc-build-action-300160030/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-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 15:39:14 +0000 UTC FinishedAt: 2026-08-25 18:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 15:39:14 +0000 UTC FinishedAt: 2026-08-25 18:49:04 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"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:*bc34a7a8-7dac-448a-a6ea-ed2d214207fc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c8982764-b59f-474d-8df4-b5a6d3621706,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-workflow64hgc/series-workflow64hgc-build-action-4000555377/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-workflow64hgc/series-workflow64hgc-build-action-300160030/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 15:39:14 +0000 UTC FinishedAt: 2026-08-25 15:39:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 15:39:14 +0000 UTC FinishedAt: 2026-08-25 15:39:19 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"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-workflow64hgc/series-workflow64hgc-convert-artifact-360350191/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 15:39:14 +0000 UTC FinishedAt: 2026-08-25 15:39:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 15:39:14 +0000 UTC FinishedAt: 2026-08-25 15:39:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 15:39:14 +0000 UTC FinishedAt: 2026-08-25 15:39:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 15:39:24 +0000 UTC FinishedAt: 2026-08-25 18:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow64hgc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["swap_writeback_dropbehind_folio","remove_mapping_reclaim","__swap_cache_alloc_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55ab7e14222e5f0b0fd9f7711ca391d2924b35e3","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","ZSWAP_DEFAULT_ON","ZSWAP_SHRINKER_DEFAULT_ON","SWAP","MEMCG","CGROUPS"],"series_id":"f13bdcdd-222c-4f3c-ad2e-565181dd9893","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 15:39:24 +0000 UTC FinishedAt: 2026-08-25 18:48:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bc34a7a8-7dac-448a-a6ea-ed2d214207fc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c8982764-b59f-474d-8df4-b5a6d3621706,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-workflow64hgc/series-workflow64hgc-build-action-4000555377/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-workflow64hgc/series-workflow64hgc-build-action-300160030/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-workflow64hgc/series-workflow64hgc-convert-artifact-360350191/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,}