Name: series-workflow8g7lg Phase: Succeeded StartedAt: 2026-07-24 06:33:58 +0000 UTC FinishedAt: 2026-07-24 12:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[0] Phase: Succeeded StartedAt: 2026-07-24 06:33:58 +0000 UTC FinishedAt: 2026-07-24 07:03:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 06:33:58 +0000 UTC FinishedAt: 2026-07-24 07:03:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "34ce64d8a6eb370d963f35a161723a8833fc6cae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "MIGRATION", "MEMORY_FAILURE", "PTE_MARKER_UFFD_WP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "34ce64d8a6eb370d963f35a161723a8833fc6cae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "MIGRATION", "MEMORY_FAILURE", "PTE_MARKER_UFFD_WP" ], "series_id": "be9e84fe-35d2-47d8-b39f-306cd3092cc9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "do_non_swap_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19ub25fc3dhcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dHJhY3RzIHRoZSBoYW5kbGluZyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIChtaWdyYXRpb24sIGRldmljZSBleGNsdXNpdmUsIGRldmljZSBwcml2YXRlLCBod3BvaXNvbiwgbWFya2VycykgZnJvbSBgZG9fc3dhcF9wYWdlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBjb2RlIHRvIHVzZSBmb2xpby1iYXNlZCBBUElzIChgZm9saW9fdHJ5bG9ja2AsIGBmb2xpb19nZXRgLCBldGMuKSBpbnN0ZWFkIG9mIHBhZ2UtYmFzZWQgQVBJcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHZhcmlvdXMgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNDE3OTk3ZjZiMTY3MmUxOTBjZDk3ODA0ZWE1YjNkOTFiZjEzMWFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDc6MDE6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZDVlODc2MjRmNjkyMDUuLjUwZDhlOTJhZWY5MTcwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtNDgxNSw2ICYjNDM7NDgxNSw3NCBAQCBzdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcbiBcdH0gd2hpbGUgKC0tbnJfcGFnZXMpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgZG9fbm9uX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHNvZnRsZWFmX3QgZW50cnk7XG4mIzQzO1x0dm1fZmF1bHRfdCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHZtZi1cdTAwM2VvcmlnX3B0ZSk7XG4mIzQzO1x0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbiYjNDM7XHRcdG1pZ3JhdGlvbl9lbnRyeV93YWl0KHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCxcbiYjNDM7XHRcdFx0XHQgICAgIHZtZi1cdTAwM2VhZGRyZXNzKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XG4mIzQzO1x0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuJiM0MztcdFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xuJiM0MztcbiYjNDM7XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogbWlncmF0ZV90b19yYW0gaXMgbm90IHlldCByZWFkeSB0byBvcGVyYXRlXG4mIzQzO1x0XHRcdCAqIHVuZGVyIFZNQSBsb2NrLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4mIzQzO1x0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuJiM0MztcdFx0dm1mLVx1MDAzZXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLVx1MDAzZXZtX21tLCB2bWYtXHUwMDNlcG1kLFxuJiM0MztcdFx0XHRcdFx0XHR2bWYtXHUwMDNlYWRkcmVzcywgXHUwMDI2dm1mLVx1MDAzZXB0bCk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXZtZi1cdTAwM2VwdGUgfHxcbiYjNDM7XHRcdFx0ICAgICAhcHRlX3NhbWUocHRlcF9nZXQodm1mLVx1MDAzZXB0ZSksXG4mIzQzO1x0XHRcdFx0XHR2bWYtXHUwMDNlb3JpZ19wdGUpKSlcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEdldCBhIGZvbGlvIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBmb2xpbyBjYW4mIzM5O3QgYmVcbiYjNDM7XHRcdCAqIGZyZWVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG4mIzQzO1xuJiM0MztcdFx0XHRmb2xpb19nZXQoZm9saW8pO1xuJiM0MztcdFx0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuJiM0MztcdFx0XHRwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0XHRyZXQgPSBwZ21hcC1cdTAwM2VvcHMtXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcbiYjNDM7XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHB0ZV91bm1hcCh2bWYtXHUwMDNlcHRlKTtcbiYjNDM7XHRcdFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi1cdTAwM2VwdGwpO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfaHdwb2lzb24oZW50cnkpKSB7XG4mIzQzO1x0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjtcbiYjNDM7XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcbiYjNDM7XHRcdHJldCA9IGhhbmRsZV9wdGVfbWFya2VyKHZtZik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHByaW50X2JhZF9wdGUodm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgdm1mLVx1MDAzZW9yaWdfcHRlLCBOVUxMKTtcbiYjNDM7XHRcdHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0aWYgKHZtZi1cdTAwM2VwdGUpXG4mIzQzO1x0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBXZSBlbnRlciB3aXRoIGVpdGhlciB0aGUgVk1BIGxvY2sgb3IgdGhlIG1tYXBfbG9jayBoZWxkIChzZWVcbiAgKiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSwgYW5kIHB0ZSBtYXBwZWQgYnV0IG5vdCB5ZXQgbG9ja2VkLlxuQEAgLTQ4NDUsNTYgJiM0Mzs0OTEzLDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXG4gXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHZtZi1cdTAwM2VvcmlnX3B0ZSk7XG4gXHRpZiAodW5saWtlbHkoIXNvZnRsZWFmX2lzX3N3YXAoZW50cnkpKSkge1xuLVx0XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSkge1xuLVx0XHRcdG1pZ3JhdGlvbl9lbnRyeV93YWl0KHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCxcbi1cdFx0XHRcdFx0ICAgICB2bWYtXHUwMDNlYWRkcmVzcyk7XG4tXHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbi1cdFx0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuLVx0XHRcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XG4tXHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4tXHRcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIG1pZ3JhdGVfdG9fcmFtIGlzIG5vdCB5ZXQgcmVhZHkgdG8gb3BlcmF0ZVxuLVx0XHRcdFx0ICogdW5kZXIgVk1BIGxvY2suXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuLVx0XHRcdFx0cmV0ID0gVk1fRkFVTFRfUkVUUlk7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0dm1mLVx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcbi1cdFx0XHR2bWYtXHUwMDNlcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtXHUwMDNldm1fbW0sIHZtZi1cdTAwM2VwbWQsXG4tXHRcdFx0XHRcdHZtZi1cdTAwM2VhZGRyZXNzLCBcdTAwMjZ2bWYtXHUwMDNlcHRsKTtcbi1cdFx0XHRpZiAodW5saWtlbHkoIXZtZi1cdTAwM2VwdGUgfHxcbi1cdFx0XHRcdCAgICAgIXB0ZV9zYW1lKHB0ZXBfZ2V0KHZtZi1cdTAwM2VwdGUpLFxuLVx0XHRcdFx0XHRcdFx0dm1mLVx1MDAzZW9yaWdfcHRlKSkpXG4tXHRcdFx0XHRnb3RvIHVubG9jaztcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEdldCBhIHBhZ2UgcmVmZXJlbmNlIHdoaWxlIHdlIGtub3cgdGhlIHBhZ2UgY2FuJiMzOTt0IGJlXG4tXHRcdFx0ICogZnJlZWQuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHRyeWxvY2tfcGFnZSh2bWYtXHUwMDNlcGFnZSkpIHtcbi1cdFx0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG4tXG4tXHRcdFx0XHRnZXRfcGFnZSh2bWYtXHUwMDNlcGFnZSk7XG4tXHRcdFx0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuLVx0XHRcdFx0cGdtYXAgPSBwYWdlX3BnbWFwKHZtZi1cdTAwM2VwYWdlKTtcbi1cdFx0XHRcdHJldCA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xuLVx0XHRcdFx0dW5sb2NrX3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuLVx0XHRcdFx0cHV0X3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRwdGVfdW5tYXAodm1mLVx1MDAzZXB0ZSk7XG4tXHRcdFx0XHRzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChlbnRyeSwgdm1mLVx1MDAzZXB0bCk7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2h3cG9pc29uKGVudHJ5KSkge1xuLVx0XHRcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OO1xuLVx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcbi1cdFx0XHRyZXQgPSBoYW5kbGVfcHRlX21hcmtlcih2bWYpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHByaW50X2JhZF9wdGUodm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgdm1mLVx1MDAzZW9yaWdfcHRlLCBOVUxMKTtcbi1cdFx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4tXHRcdH1cbiYjNDM7XHRcdHJldCA9IGRvX25vbl9zd2FwX3BhZ2Uodm1mKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19ub25fc3dhcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dHJhY3RzIHRoZSBoYW5kbGluZyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIChtaWdyYXRpb24sIGRldmljZSBleGNsdXNpdmUsIGRldmljZSBwcml2YXRlLCBod3BvaXNvbiwgbWFya2VycykgZnJvbSBgZG9fc3dhcF9wYWdlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBjb2RlIHRvIHVzZSBmb2xpby1iYXNlZCBBUElzIChgZm9saW9fdHJ5bG9ja2AsIGBmb2xpb19nZXRgLCBldGMuKSBpbnN0ZWFkIG9mIHBhZ2UtYmFzZWQgQVBJcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHZhcmlvdXMgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0MTc5OTdmNmIxNjcyZTE5MGNkOTc4MDRlYTViM2Q5MWJmMTMxYWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAyNCAwNzowMToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZDVlODc2MjRmNjkyMDUuLjUwZDhlOTJhZWY5MTcwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDgxNSw2ICYjNDM7NDgxNSw3NCBAQCBzdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwKIAl9IHdoaWxlICgtLW5yX3BhZ2VzKTsKIH0KIAomIzQzO3N0YXRpYyB2bV9mYXVsdF90IGRvX25vbl9zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0mZ3Q7dm1hOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzb2Z0bGVhZl90IGVudHJ5OwomIzQzOwl2bV9mYXVsdF90IHJldCA9IDA7CiYjNDM7CiYjNDM7CWVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUodm1mLSZndDtvcmlnX3B0ZSk7CiYjNDM7CWlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7CiYjNDM7CQltaWdyYXRpb25fZW50cnlfd2FpdCh2bWEtJmd0O3ZtX21tLCB2bWYtJmd0O3BtZCwKJiM0MzsJCQkJICAgICB2bWYtJmd0O2FkZHJlc3MpOwomIzQzOwl9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7CiYjNDM7CQl2bWYtJmd0O3BhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTsKJiM0MzsJCXJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7CiYjNDM7CX0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7CiYjNDM7CiYjNDM7CQlpZiAodm1mLSZndDtmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBtaWdyYXRlX3RvX3JhbSBpcyBub3QgeWV0IHJlYWR5IHRvIG9wZXJhdGUKJiM0MzsJCQkgKiB1bmRlciBWTUEgbG9jay4KJiM0MzsJCQkgKi8KJiM0MzsJCQl2bWFfZW5kX3JlYWQodm1hKTsKJiM0MzsJCQlyZXR1cm4gVk1fRkFVTFRfUkVUUlk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl2bWYtJmd0O3BhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTsKJiM0MzsJCXZtZi0mZ3Q7cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtJmd0O3ZtX21tLCB2bWYtJmd0O3BtZCwKJiM0MzsJCQkJCQl2bWYtJmd0O2FkZHJlc3MsICZhbXA7dm1mLSZndDtwdGwpOwomIzQzOwkJaWYgKHVubGlrZWx5KCF2bWYtJmd0O3B0ZSB8fAomIzQzOwkJCSAgICAgIXB0ZV9zYW1lKHB0ZXBfZ2V0KHZtZi0mZ3Q7cHRlKSwKJiM0MzsJCQkJCXZtZi0mZ3Q7b3JpZ19wdGUpKSkKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBHZXQgYSBmb2xpbyByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgZm9saW8gY2FuJiMzOTt0IGJlCiYjNDM7CQkgKiBmcmVlZC4KJiM0MzsJCSAqLwomIzQzOwkJZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi0mZ3Q7cGFnZSk7CiYjNDM7CQlpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKJiM0MzsJCQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwomIzQzOwomIzQzOwkJCWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CQkJcHRlX3VubWFwX3VubG9jayh2bWYtJmd0O3B0ZSwgdm1mLSZndDtwdGwpOwomIzQzOwkJCXBnbWFwID0gcGFnZV9wZ21hcCh2bWYtJmd0O3BhZ2UpOwomIzQzOwkJCXJldCA9IHBnbWFwLSZndDtvcHMtJmd0O21pZ3JhdGVfdG9fcmFtKHZtZik7CiYjNDM7CQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlwdGVfdW5tYXAodm1mLSZndDtwdGUpOwomIzQzOwkJCXNvZnRsZWFmX2VudHJ5X3dhaXRfb25fbG9ja2VkKGVudHJ5LCB2bWYtJmd0O3B0bCk7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSBpZiAoc29mdGxlYWZfaXNfaHdwb2lzb24oZW50cnkpKSB7CiYjNDM7CQlyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjsKJiM0MzsJfSBlbHNlIGlmIChzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKSB7CiYjNDM7CQlyZXQgPSBoYW5kbGVfcHRlX21hcmtlcih2bWYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcHJpbnRfYmFkX3B0ZSh2bWEsIHZtZi0mZ3Q7YWRkcmVzcywgdm1mLSZndDtvcmlnX3B0ZSwgTlVMTCk7CiYjNDM7CQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CWlmICh2bWYtJmd0O3B0ZSkKJiM0MzsJCXB0ZV91bm1hcF91bmxvY2sodm1mLSZndDtwdGUsIHZtZi0mZ3Q7cHRsKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKgogICogV2UgZW50ZXIgd2l0aCBlaXRoZXIgdGhlIFZNQSBsb2NrIG9yIHRoZSBtbWFwX2xvY2sgaGVsZCAoc2VlCiAgKiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSwgYW5kIHB0ZSBtYXBwZWQgYnV0IG5vdCB5ZXQgbG9ja2VkLgpAQCAtNDg0NSw1NiAmIzQzOzQ5MTMsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAogCWVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUodm1mLSZndDtvcmlnX3B0ZSk7CiAJaWYgKHVubGlrZWx5KCFzb2Z0bGVhZl9pc19zd2FwKGVudHJ5KSkpIHsKLQkJaWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHsKLQkJCW1pZ3JhdGlvbl9lbnRyeV93YWl0KHZtYS0mZ3Q7dm1fbW0sIHZtZi0mZ3Q7cG1kLAotCQkJCQkgICAgIHZtZi0mZ3Q7YWRkcmVzcyk7Ci0JCX0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHsKLQkJCXZtZi0mZ3Q7cGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpOwotCQkJcmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTsKLQkJfSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHsKLQkJCWlmICh2bWYtJmd0O2ZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHsKLQkJCQkvKgotCQkJCSAqIG1pZ3JhdGVfdG9fcmFtIGlzIG5vdCB5ZXQgcmVhZHkgdG8gb3BlcmF0ZQotCQkJCSAqIHVuZGVyIFZNQSBsb2NrLgotCQkJCSAqLwotCQkJCXZtYV9lbmRfcmVhZCh2bWEpOwotCQkJCXJldCA9IFZNX0ZBVUxUX1JFVFJZOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQl2bWYtJmd0O3BhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTsKLQkJCXZtZi0mZ3Q7cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtJmd0O3ZtX21tLCB2bWYtJmd0O3BtZCwKLQkJCQkJdm1mLSZndDthZGRyZXNzLCAmYW1wO3ZtZi0mZ3Q7cHRsKTsKLQkJCWlmICh1bmxpa2VseSghdm1mLSZndDtwdGUgfHwKLQkJCQkgICAgICFwdGVfc2FtZShwdGVwX2dldCh2bWYtJmd0O3B0ZSksCi0JCQkJCQkJdm1mLSZndDtvcmlnX3B0ZSkpKQotCQkJCWdvdG8gdW5sb2NrOwotCi0JCQkvKgotCQkJICogR2V0IGEgcGFnZSByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgcGFnZSBjYW4mIzM5O3QgYmUKLQkJCSAqIGZyZWVkLgotCQkJICovCi0JCQlpZiAodHJ5bG9ja19wYWdlKHZtZi0mZ3Q7cGFnZSkpIHsKLQkJCQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwotCi0JCQkJZ2V0X3BhZ2Uodm1mLSZndDtwYWdlKTsKLQkJCQlwdGVfdW5tYXBfdW5sb2NrKHZtZi0mZ3Q7cHRlLCB2bWYtJmd0O3B0bCk7Ci0JCQkJcGdtYXAgPSBwYWdlX3BnbWFwKHZtZi0mZ3Q7cGFnZSk7Ci0JCQkJcmV0ID0gcGdtYXAtJmd0O29wcy0mZ3Q7bWlncmF0ZV90b19yYW0odm1mKTsKLQkJCQl1bmxvY2tfcGFnZSh2bWYtJmd0O3BhZ2UpOwotCQkJCXB1dF9wYWdlKHZtZi0mZ3Q7cGFnZSk7Ci0JCQl9IGVsc2UgewotCQkJCXB0ZV91bm1hcCh2bWYtJmd0O3B0ZSk7Ci0JCQkJc29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi0mZ3Q7cHRsKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkpIHsKLQkJCXJldCA9IFZNX0ZBVUxUX0hXUE9JU09OOwotCQl9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHsKLQkJCXJldCA9IGhhbmRsZV9wdGVfbWFya2VyKHZtZik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludF9iYWRfcHRlKHZtYSwgdm1mLSZndDthZGRyZXNzLCB2bWYtJmd0O29yaWdfcHRlLCBOVUxMKTsKLQkJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKLQkJfQomIzQzOwkJcmV0ID0gZG9fbm9uX3N3YXBfcGFnZSh2bWYpOwogCQlnb3RvIG91dDsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaDogRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgbW0vbWVtb3J5LmNgLiBGcm9tIHdoYXQgSSBzZWUsIGl0JiMzOTtzIGVzc2VudGlhbGx5IHJlZmFjdG9yaW5nIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbi4gVGhlIGtleSBtb3ZlIGlzIGV4dHJhY3RpbmcgdGhlIG5vbi1zd2FwIHNvZnRsZWFmIGVudHJ5IGhhbmRsaW5nIGludG8gYSBuZXcgZnVuY3Rpb24sIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgbG9va3MgbGlrZSBhIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnMsIHdoaWNoIGlzIGdvb2QuCgpCdXQgaXQmIzM5O3MgbW9yZSB0aGFuIGp1c3QgYSBjb2RlIG9yZ2FuaXphdGlvbiBleGVyY2lzZSwgSSBzZWUgdGhhdCB0aGV5IGFyZSBzd2FwcGluZyBvdXQgdGhlIGxlZ2FjeSBgcGFnZWAgb3BlcmF0aW9ucyB3aXRoIHRoZWlyIGBmb2xpb2AgY291bnRlcnBhcnRzLCBzdWNoIGFzIGB0cnlsb2NrX3BhZ2VgIHdpdGggYGZvbGlvX3RyeWxvY2tgLCBgZ2V0X3BhZ2VgIHdpdGggYGZvbGlvX2dldGAsIGFuZCBzbyBvbi4gVGhhdCBpcyBpbnRlcmVzdGluZywgc28gdGhpcyBwYXRjaCBpcyBhIGJpdCBtb3JlIHN1YnN0YW50aWFsIHRoYW4ganVzdCByZW9yZ2FuaXphdGlvbi4KClRoZSBiaWdnZXIgcXVlc3Rpb24gaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgd2l0aG91dCBhIGRvdWJ0LCB5ZXMuIEFueSBtb2RpZmljYXRpb24gdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgZG9fc3dhcF9wYWdlYCAob3IgaW4gdGhpcyBjYXNlLCB0aGUgZXh0cmFjdGVkIGBkb19ub25fc3dhcF9wYWdlYCkgbmVlZHMgdG8gYmUgc2NydXRpbml6ZWQuIFRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcyDigJMgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBmdW5jdGlvbiBhbmQgdGhlIGNoYW5nZSBvZiBmdW5kYW1lbnRhbCBwYWdlIG9wZXJhdGlvbnMg4oCTIGFyZSBwZXJmZWN0IGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzLiBgZG9fbm9uX3N3YXBfcGFnZWAgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kIGFzIHRoZSBwcmltYXJ5IHRhcmdldC4gSXQmIzM5O3MgbmV3IGFuZCBjb250YWlucyB0aGUgY29yZSBsb2dpYyB0aGF0IHdhcyByZWZhY3RvcmVkLiBgZG9fc3dhcF9wYWdlYCBpdHNlbGYgaXMgYWxzbyBhIHZhbGlkIHRhcmdldCwgYWx0aG91Z2ggaXQmIzM5O3MgbGlrZWx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGl0IG1heSBuZWVkIGEgdGFyZ2V0ZWQgYXBwcm9hY2guIE9oLCB3YWl0LCBgZG9fbm9uX3N3YXBfcGFnZWAgaXMgc3RhdGljLCB3aGljaCBpcyBhY3R1YWxseSBncmVhdCBiZWNhdXNlIHRoaXMgc2ltcGxpZmllcyB0aGUgZnV6emluZyBzZXR1cC4KCkZpbmFsbHksIHdoYXQgYWJvdXQgYW55IHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zPyBgbW0vbWVtb3J5LmNgIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgZ3JlYXQgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgIG9yIGBtaWdyYXRlX3RvX3JhbWAgdGhvdWdoLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBBIHF1aWNrIGdyZXAgb2YgdGhlIGNvZGUgc2hvdWxkIHJldmVhbCBpZiB0aGVzZSBhcmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTEwNDk9c3RhdGljIHZvaWQgc21hcHNfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTA4Mi1cdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSkge1xuZnMvcHJvYy90YXNrX21tdS5jOjEwODM6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbmZzL3Byb2MvdGFza19tbXUuYy0xMDg0LVx0XHRcdFx0cHJlc2VudCA9IHRydWU7XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MjU2PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjgtLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNjk6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzAtICogd3JpdGFibGUgZW50cnk/XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc1LSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjc2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODEtLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODI6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlIGVudHJ5P1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjgzLSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODYtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODc6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODgte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTM1NT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaGFzX3Bmbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2MS1cdFx0cmV0dXJuIHRydWU7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNjI6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MDQ9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA2Olx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX2Zyb21fcG1kKHBtZCkpO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MzU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3ZhbGlkX3BtZF9lbnRyeShzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzNy1cdC8qIE9ubHkgZGV2aWNlIHByaXZhdGUsIG1pZ3JhdGlvbiBlbnRyaWVzIHZhbGlkIGZvciBQTUQuICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2Mzg6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MzktXHRcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSk7XG4tLVxubW0vaG1tLmM9MjQxPXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaG1tLmMtMjcyLVx0XHQgKi9cbm1tL2htbS5jOjI3MzpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL2htbS5jLTI3NC1cdFx0ICAgIHBhZ2VfcGdtYXAoc29mdGxlYWZfdG9fcGFnZShlbnRyeSkpLVx1MDAzZW93bmVyID09XG4tLVxubW0vaG1tLmMtMjc2LVx0XHRcdGNwdV9mbGFncyA9IEhNTV9QRk5fVkFMSUQ7XG5tbS9obW0uYzoyNzc6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL2htbS5jLTI3OC1cdFx0XHRcdGNwdV9mbGFncyB8PSBITU1fUEZOX1dSSVRFO1xuLS1cbm1tL2htbS5jLTI5MC1cbm1tL2htbS5jOjI5MTpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbm1tL2htbS5jLTI5Mi1cdFx0XHRnb3RvIGZhdWx0O1xuLS1cbm1tL2htbS5jPTM0MT1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vaG1tLmMtMzUxLVxubW0vaG1tLmM6MzUyOlx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL2htbS5jLTM1My1cdCAgICBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSktXHUwMDNlcGdtYXAtXHUwMDNlb3duZXIgPT1cbi0tXG5tbS9obW0uYy0zNTktXG5tbS9obW0uYzozNjA6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9obW0uYy0zNjEtXHRcdFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XG4tLVxubW0vaG1tLmMtMzc4LVx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG5tbS9obW0uYzozNzk6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5tbS9obW0uYy0zODAtXHRcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xODA5PXN0YXRpYyB2b2lkIGNvcHlfaHVnZV9ub25fcHJlc2VudF9wbWQoXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xODI4LVx0XHRzZXRfcG1kX2F0KHNyY19tbSwgYWRkciwgc3JjX3BtZCwgcG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTgyOTpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG5tbS9odWdlX21lbW9yeS5jLTE4MzAtXHRcdC8qXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xODMzLVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTgzNDpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xubW0vaHVnZV9tZW1vcnkuYy0xODM1LVx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNjAxPXN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI2MjItXHRcdFx0bmV3cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkobmV3cG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MjYyMzpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG5tbS9odWdlX21lbW9yeS5jLTI2MjQtXHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDk3PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzE5MC1cbm1tL2h1Z2VfbWVtb3J5LmM6MzE5MTpcdFx0d3JpdGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSk7XG5tbS9odWdlX21lbW9yeS5jLTMxOTItXHRcdGFub25fZXhjbHVzaXZlID0gUGFnZUFub25FeGNsdXNpdmUocGFnZSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00OTYxPWludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00OTkwLVxubW0vaHVnZV9tZW1vcnkuYzo0OTkxOlx0XHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKG9sZF9lbnRyeSk7XG5tbS9odWdlX21lbW9yeS5jLTQ5OTItXHRcdHNvZnRkaXJ0eSA9IHBtZF9zd3Bfc29mdF9kaXJ0eShwbWR2YWwpO1xuLS1cbm1tL21lbW9yeS5jPTEwMDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9tZW1vcnkuYy0xMDQzLVx0XHR9XG5tbS9tZW1vcnkuYzoxMDQ0Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTEwNDUtXHRcdHBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcbi0tXG5tbS9tZW1vcnkuYy0xMDY4LVx0XHQgKi9cbm1tL21lbW9yeS5jOjEwNjk6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9tZW1vcnkuYy0xMDcwLVx0XHQgICAgaXNfY293X21hcHBpbmcodm1fZmxhZ3MpKSB7XG4tLVxubW0vbWVtb3J5LmM9MTgxMT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTgyMC1cdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xubW0vbWVtb3J5LmM6MTgyMTpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21lbW9yeS5jLTE4MjItXHQgICAgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbi0tXG5tbS9tZW1vcnkuYz00ODE4PXN0YXRpYyB2bV9mYXVsdF90IGRvX25vbl9zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDgzMS1cdFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcbm1tL21lbW9yeS5jOjQ4MzI6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtNDgzMy1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNz1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNjktXG5tbS9taWdyYXRlX2RldmljZS5jOjE3MDpcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTcxLVx0XHQgICAgIShtaWdyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpKSB7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xODEtXG5tbS9taWdyYXRlX2RldmljZS5jOjE4MjpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTgzLVx0XHRcdHdyaXRlID0gTUlHUkFURV9QRk5fV1JJVEU7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTI5OS1cdFx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jOjMwMDpcdFx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzAxLVx0XHRcdFx0Z290byBuZXh0O1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzMzLVx0XHRcdFx0XHRNSUdSQVRFX1BGTl9NSUdSQVRFO1xubW0vbWlncmF0ZV9kZXZpY2UuYzozMzQ6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzM1LVx0XHRcdFx0bXBmbiB8PSBNSUdSQVRFX1BGTl9XUklURTtcbi0tXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21wcm90ZWN0LmMtMjM2LVx0XHRcdG5ld3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KG5ld3B0ZSk7XG5tbS9tcHJvdGVjdC5jOjIzNzpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG5tbS9tcHJvdGVjdC5jLTIzOC1cdFx0Lypcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTkzPXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9jYWNoZWRfd3JpdGFibGUoc29mdGxlYWZfdCBlbnRyeSlcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xOTQte1xubW0vcGFnZV90YWJsZV9jaGVjay5jOjE5NTpcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgfHxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xOTYtXHRcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSk7XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTY9c3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLFxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcwLVx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjcxOlx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcyLVx0XHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzAtXHRcdC8qIEhhbmRsZSB1bi1hZGRyZXNzYWJsZSBaT05FX0RFVklDRSBtZW1vcnkgKi9cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEzMTpcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzItXHRcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXG4tLVxubW0vcm1hcC5jPTI0NjE9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0yNjQ5LVxubW0vcm1hcC5jOjI2NTA6XHRcdFx0d3JpdGFibGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSk7XG5tbS9ybWFwLmMtMjY1MS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBhcmVhIG9mIGV4cGVydGlzZToKCioqRXhhbWluaW5nIERldmljZSBQcml2YXRlIE1lbW9yeSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzICYjMzQ7ZGV2aWNlIHByaXZhdGUgbWVtb3J5JiMzNDsgYW5kIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgdHJpZ2dlcmluZyBhIGNvbm5lY3Rpb24gdG8gYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBpbiBgbW0vS2NvbmZpZ2Ag4oCTIGJlY2F1c2UgbWVtb3J5IG1hbmFnZW1lbnQgaXMgd2hlcmUgZGV2aWNlLXNwZWNpZmljIG1lbW9yeSBhc3NpZ25tZW50cyB3b3VsZCBiZSBsaWtlbHkgaGFuZGxlZC4gQnV0IGBsaWIvS2NvbmZpZ2AgaXMgYWxzbyBhIHBvc3NpYmxlIGxvY2F0aW9uLCBzaW5jZSB0aGUgYERFVklDRV9QUklWQVRFYCBwYXJhbWV0ZXIgbWlnaHQgcmVwcmVzZW50IGEgZ2VuZXJpYyBzZXR0aW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UgdHdvIGxvY2F0aW9ucyBhbmQgdHJhY2UgdGhlIHJlZmVyZW5jZXMgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyNDg9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWctMTI1MC1cbm1tL0tjb25maWc6MTI1MTpjb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI1Mi1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIEtlcm5lbCBTb2Z0bGVhZiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBzZXR0aW5nLiBUaGF0JiMzOTtzIG9uZSBjb25maWcgcmVsYXRlZCB0byB0aGlzIHNvZnRsZWFmIHN5c3RlbSwgSSBrbm93IHRoYXQgZm9yIGNlcnRhaW4uIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBlbnVtZXJhdGUgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4KCkxldCYjMzk7cyBzZWXigKYgSSByZWNhbGwgdGhlcmUmIzM5O3MgYSBjb25uZWN0aW9uIGJldHdlZW4gYHNvZnRsZWFmX2lzX21pZ3JhdGlvbmAgYW5kIHNvbWV0aGluZyBjYWxsZWQgYENPTkZJR19NSUdSQVRJT05gLiBSaWdodCwgbWFrZXMgc2Vuc2UsIHRoYXQgdGllcyBpbiB3aXRoIG1lbW9yeSBtaWdyYXRpb24uIEFuZCBgc29mdGxlYWZfaXNfaHdwb2lzb25gIHNlZW1zIHRvIHJlbGF0ZSB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZXJyb3JzLiBGaW5hbGx5LCB0aGVyZSYjMzk7cyBgc29mdGxlYWZfaXNfbWFya2VyYCwgd2hpY2ggc291bmRzIGxpa2UgaXQmIzM5O3MgY29ubmVjdGVkIHRvIGBDT05GSUdfUFRFX01BUktFUmAuCgpUbyBnZXQgYSBkZWZpbml0aXZlIHBpY3R1cmUgb2YgdGhlc2UgY29ubmVjdGlvbnMgYW5kIHBvdGVudGlhbGx5IGZpbmQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIGBtbS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhvc2UgYXNzb2NpYXRpb25zIGFuZCBsb29rIGZvciBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBtYXkgcmVsYXRlIHRvIHRoZSBzb2Z0bGVhZiBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUlHUkFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NjcxPWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjgxLVxubW0vS2NvbmZpZzo2ODI6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02ODMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA5OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1lbW9yeSBGYWlsdXJlIGFuZCBQYWdlIFRhYmxlIEVudHJpZXMgLSBBIFF1aWNrIENoZWNrKioKClJpZ2h0LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gYSBmZXcgdGhpbmdzLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgYGNvbmZpZyBNRU1PUllfRkFJTFVSRWAuIFdlIGFsbCBrbm93IHdoYXQgaXQgKnNob3VsZCogZG8sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSB3aGF0IEkgZXhwZWN0IGluICp0aGlzKiBhcmNoaXRlY3R1cmUva2VybmVsIHZlcnNpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHVuY29ycmVjdGFibGUgbWVtb3J5IGVycm9ycyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcnVubmluZyBwcm9jZXNzZXMsIGFuZCB0aGUgdHJhZGVvZmZzIGJldHdlZW4gZmF1bHQgdG9sZXJhbmNlIGFuZCBzeXN0ZW0gcmVzcG9uc2l2ZW5lc3MuIEFyZSB3ZSBsb2dnaW5nIGVub3VnaCBpbmZvcm1hdGlvbj8gQXJlIHRoZSBlcnJvciBoYW5kbGluZyByb3V0aW5lcyByb2J1c3QgZW5vdWdoIGZvciB0aGUgZXhwZWN0ZWQgd29ya2xvYWRzPyBEb2VzIHRoZSBjaG9zZW4gcG9saWN5IGNvcnJlY3RseSBiYWxhbmNlIG1pbmltaXppbmcgZGF0YSBsb3NzIGFuZCBtYXhpbWl6aW5nIHRoZSBjaGFuY2Ugb2YgcmVjb3Zlcnk/CgpUaGVuLCBJJiMzOTtsbCBxdWlja2x5IGxvb2sgYXQgYGNvbmZpZyBQVEVfTUFSS0VSYC4gV2hhdCAqZXhhY3RseSogYXJlIHRoZSBmbGFncyB3ZSYjMzk7cmUgdXNpbmc/IEl0JiMzOTtzIG5vdCBqdXN0IGFib3V0IHRoZSAqcHJlc2VuY2UqIG9mIHRoZSBtYXJrZXIsIGJ1dCB3aGF0IGl0ICptZWFucyogaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBBcmUgd2UgdXNpbmcgdGhlIG1hcmtlciBmb3IgZGVidWdnaW5nLCBzZWN1cml0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFyZSBhbHdheXMgYSBjb25jZXJuOyBhcmUgdGhlc2UgbWFya2VycyBiZWluZyBoYW5kbGVkIGVmZmljaWVudGx5IGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzLCBvciBpcyB0aGVyZSBhIG1lYXN1cmFibGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQ/IEl0JiMzOTtzIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgc3VyZSB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjA9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2Mi1cbm1tL0tjb25maWc6NzYzOmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjQtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDkxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBDb25maWd1cmF0aW9uIC0gUFRFX01BUktFUioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHN0YXR1cyBhbmQgZGVmaW5pdGlvbiBvZiBgY29uZmlnIFBURV9NQVJLRVJgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGUga2VybmVsLCBwcm9iYWJseSByZWxhdGVkIHRvIHBhZ2UgdGFibGUgZW50cmllcy4gVGhlIHRlcm0gJiMzNDtNQVJLRVImIzM0OyBpbXBsaWVzIGl0JiMzOTtzIHVzZWQgZm9yIHNvbWUga2luZCBvZiB0cmFja2luZyBvciBsYWJlbGluZyB3aXRoaW4gdGhvc2UgZW50cmllcywgcG9zc2libHkgZm9yIGRlYnVnZ2luZywgc2VjdXJpdHksIG9yIG1lbW9yeSBtYW5hZ2VtZW50IHB1cnBvc2VzLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHB1cnBvc2UuIElzIGl0IGEgY29tcGlsZS10aW1lIG9wdGlvbj8gV2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCB3aGVuIGl0JiMzOTtzIHNlbGVjdGVkPyBNb3JlIHNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGl0cyBpbXBhY3Qgb24gdGhlIFBURSBzdHJ1Y3R1cmUgaXRzZWxmIOKAkyBkb2VzIGl0IGFkZCBhIGJpdCwgYSBmaWVsZCwgb3IgYSBtb3JlIGNvbXBsZXggbWV0YWRhdGEgc3RydWN0dXJlIHdpdGhpbiB0aGUgZW50cnk/IEkmIzM5O2xsIGFsc28gd2FudCB0byBrbm93IGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc2VjdXJpdHkgc3Vic3lzdGVtcy4gRm9yIGV4YW1wbGUsIGRvZXMgaXQgcGxheSBhIHJvbGUgaW4gYWRkcmVzcyBzcGFjZSBsYXlvdXQgcmFuZG9taXphdGlvbiAoQVNMUiksIGtlcm5lbCBhZGRyZXNzIHNwYWNlIHJhbmRvbWl6YXRpb24gKEtBU0xSKSwgb3IgcGVyaGFwcyBldmVuIHNvbWUgZm9ybSBvZiBrZXJuZWwgdGFpbnQgdHJhY2tpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgc3VjaCBhcyBpbmNyZWFzZWQgb3ZlcmhlYWQgZHVyaW5nIFRMQiBzaG9vdGRvd25zIG9yIHBhZ2UgdGFibGUgd2Fsa3M/CgpCYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgSSBjYW4gZGVkdWNlIGhvdyBpdCBtaWdodCBiZSB1c2VkLiBEb2VzIGl0IGluZmx1ZW5jZSB0aGUgdmlydHVhbCBtZW1vcnkgbWFwIG9yIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUFRFJiMzOTtzIHVzYWdlIGFuZCBvd25lcnNoaXA/CgpVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIGFzc2VzcyBpdHMgc2lnbmlmaWNhbmNlIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8ga25vdyBpdHMgaW1wYWN0IG9uIG1lbW9yeSBwcm90ZWN0aW9uLCBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLCBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBURV9NQVJLRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcbi0tXG5tbS9LY29uZmlnLTEzODgtXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxubW0vS2NvbmZpZy0xMzkwLVx0Ym9vbCBcJiMzNDtVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byBQVEUgTWFya2VyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYFBURV9NQVJLRVJgIGlzIHNldCB0byBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAuIFRoYXQgcmluZ3MgYSBiZWxsLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb24gb2YgdGhhdCBtYXJrZXIgbG9naWMgcmVzaWRlcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc29mdGxlYWZfaXNfbWFya2VyYC4gR290dGEgYmUgc3VyZSBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0bGVhZl9pc19tYXJrZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTI2MzY9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX2h1Z2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNjQ5LVx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY1MDpcdGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkgfHwgc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSlcbmZzL3Byb2MvdGFza19tbXUuYy0yNjUxLVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzE1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19od3BvaXNvbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMyMC0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjMyMTogKiBzb2Z0bGVhZl9pc19tYXJrZXIoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIG1hcmtlcj9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMyMi0gKiBAZW50cnk6IExlYWYgZW50cnkuXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzI1LSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzI2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMyNy17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzMyLSAqIHNvZnRsZWFmX3RvX21hcmtlcigpIC0gT2J0YWluIG1hcmtlciBhc3NvY2lhdGVkIHdpdGggbGVhZiBlbnRyeS5cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjMzMzogKiBAZW50cnk6IExlYWYgZW50cnksIHNvZnRsZWFmX2lzX21hcmtlcihAZW50cnkpIG11c3QgcmV0dXJuIHRydWUuXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMzQtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0zMzc9c3RhdGljIGlubGluZSBwdGVfbWFya2VyIHNvZnRsZWFmX3RvX21hcmtlcihzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzM4LXtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjMzOTpcdFZNX1dBUk5fT05fT05DRSghc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNDAtXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NDQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19wb2lzb25fbWFya2VyKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NDYte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDQ3Olx0aWYgKCFzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDQ4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NDU5PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19ndWFyZF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ2MC17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0NjE6XHRpZiAoIXNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NjItXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00NzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3VmZmRfd3BfbWFya2VyKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00Nzcte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDc4Olx0aWYgKCFzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDc5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfbWFya2VyKHB0ZV90IHB0ZSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU0Ni17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1NDc6XHRyZXR1cm4gc29mdGxlYWZfaXNfbWFya2VyKHNvZnRsZWFmX2Zyb21fcHRlKHB0ZSkpO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTQ4LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTc3LVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTc4Olx0aWYgKCFzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTc5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWVtb3J5LmM9MTAwMT1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL21lbW9yeS5jLTEwODgtXHRcdHJldHVybiAtRU5PRU5UO1xubW0vbWVtb3J5LmM6MTA4OTpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtMTA5MC1cdFx0cHRlX21hcmtlciBtYXJrZXIgPSBjb3B5X3B0ZV9tYXJrZXIoZW50cnksIGRzdF92bWEpO1xuLS1cbm1tL21lbW9yeS5jPTQ4MTg9c3RhdGljIHZtX2ZhdWx0X3QgZG9fbm9uX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00ODcwLVx0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjtcbm1tL21lbW9yeS5jOjQ4NzE6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTQ4NzItXHRcdHJldCA9IGhhbmRsZV9wdGVfbWFya2VyKHZtZik7XG4tLVxubW0vbXByb3RlY3QuYz0yMTQ9c3RhdGljIGxvbmcgY2hhbmdlX3NvZnRsZWFmX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tcHJvdGVjdC5jLTI0NS1cdFx0XHRuZXdwdGUgPSBwdGVfc3dwX21rdWZmZChuZXdwdGUpO1xubW0vbXByb3RlY3QuYzoyNDY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcbm1tL21wcm90ZWN0LmMtMjQ3LVx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBNZW1vcnkgTWFuYWdlbWVudCBDb3JlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIEl0IGxvb2tzIGxpa2UgYGRvX3N3YXBfcGFnZWAgaXMgYmVpbmcgc3BsaXQgaW50byBgZG9fbm9uX3N3YXBfcGFnZWAsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3JpbmcuIFRoZXkmIzM5O3JlIGFsc28gdXBkYXRpbmcgc29tZSBjcnVjaWFsIGxvY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBmdW5jdGlvbnM6IGB0cnlsb2NrX3BhZ2VgIGlzIG5vdyBgZm9saW9fdHJ5bG9ja2AsIGFuZCBgZ2V0X3BhZ2VgIGlzIGJlY29taW5nIGBmb2xpb19nZXRgLiBUaGlzIGlzIGRlZmluaXRlbHkgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3BhY2UuIEl0IHN1Z2dlc3RzIGEgbW92ZSB0b3dhcmQgZm9saW8tYmFzZWQgb3BlcmF0aW9ucywgbGlrZWx5IGFpbWluZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIG9yIGZsZXhpYmlsaXR5LgoKUmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgaW1wYWN0ZWQuIFRoZSBjb25maWdzIHRoYXQgYXJlIGVuYWJsZWQgc3VnZ2VzdCB0aGlzIGlzIHRpZWQgdG8gcHJpdmF0ZSBkZXZpY2VzLCBtaWdyYXRpb24sIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBhbmQgVUZGRCB3aXRoIHdyaXRlIHByb3RlY3Rpb24gbWFya2VycyAoYFBURV9NQVJLRVJfVUZGRF9XUGApLiBIb2xkIG9uIGEgc2Vjb25kLCB0aGF0IFVGRkQgV1AgbWFya2VyLCBJJiMzOTttIGdldHRpbmcgYSBmZWVsaW5nIHRoYXQgbWlnaHQgbm90IGJlIHRoZSAqb25seSogbWFya2VyIHRoaXMgY2hhbmdlIGNvbmNlcm5zLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBjb25maWcgUFRFX01BUktFUmAgZW50cnkgaW4gYG1tL0tjb25maWdgLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBHb3R0YSBiZSB0aG9yb3VnaCB3aXRoIGNoYW5nZXMgdGhpcyBsb3ctbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQVEVfTUFSS0VSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4Mj1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xMzg4LVxubW0vS2NvbmZpZzoxMzg5OmNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbm1tL0tjb25maWctMTM5MC1cdGJvb2wgXCYjMzQ7VXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4OTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBQVEUgTWFya2VyIERlZmluaXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGBQVEVfTUFSS0VSYCBtYWNybyBpcyBkZWZpbmVkLiBTZWVtcyBsaWtlIHRoZSBzdGFuZGFyZCBwbGFjZXMgdG8gbG9vayBhcmUgZ29pbmcgdG8gYmUgaW4gdGhlIGtlcm5lbCBoZWFkZXJzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgIGZpcnN0LCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIGEgbG90IG9mIHRoZSBwYWdlIHRhYmxlIHJlbGF0ZWQgbWFjcm9zIHRlbmQgdG8gbGl2ZS4gSWYgaXQgaXNuJiMzOTt0IHRoZXJlLCBvciBpZiBpdCYjMzk7cyBzb21laG93IGRlcGVuZGVudCBvbiBhIEtjb25maWcgb3B0aW9uLCB0aGVuIEkmIzM5O2xsIGRlbHZlIGludG8gYG1tL0tjb25maWdgLiBJdCYjMzk7cyBwb3NzaWJsZSBpdCYjMzk7cyBjb250cm9sbGVkIGJ5IGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGZlYXR1cmUgY29uZmlndXJhdGlvbiwgc28ga25vd2luZyBpdHMgZXhhY3QgZGVmaW5pdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0LiBJJiMzOTtsbCBwcmlvcml0aXplIGVmZmljaWVuY3kgYW5kIHF1aWNrbHkgc2NhbiB0aG9zZSBmaWxlcyBmb3IgYW55IGNsdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFRFX01BUktFUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzODI9bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxuLS1cbm1tL0tjb25maWctMTM4OC1cbm1tL0tjb25maWc6MTM4OTpjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG5tbS9LY29uZmlnLTEzOTAtXHRib29sIFwmIzM0O1VzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydCBmb3Igc2htZW0vaHVnZXRsYmZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjIwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYFBURV9NQVJLRVJgIGhlcmUuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgJiMzNDtIYW5nIG9uIGEgc2VjLCB3YXNuJiMzOTt0IHRoYXQgYSBjb25maWd1cmF0aW9uIHN5bWJvbD8mIzM0OyBJdCBqdXN0ICpmZWVscyogbGlrZSBhIGNvbmZpZyBvcHRpb24uIFJpZ2h0LCBiZXR0ZXIgY29uZmlybSB0aGF0IGluc3RpbmN0LiBUaGUgbG9naWNhbCBwbGFjZSB0byBnbyBmb3IgY29uZmlybWF0aW9uIGlzIGBtbS9LY29uZmlnYCwgdGhhdCYjMzk7cyB0aGUgaG9tZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCwgaXNuJiMzOTt0IGl0PyBMZXQmIzM5O3MgZ28gY2hlY2sgZm9yIGBQVEVfTUFSS0VSYCB0aGVyZSBhbmQgc2VlIHdoYXQgd2UgZmluZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdGhpbmcgaXMgZGVmaW5lZCBhbmQgaWYgSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBhbGwgdGhhdCBmdW4gY29uZmlnIHN0dWZmIHRoYXQgY2FuIHRyaXAgeW91IHVwLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLgpZb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS4KRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsCnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC48L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBURV9NQVJLRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHByb2Nlc3MgdGhpc+KApgoKKipBbmFseXppbmcgdGhlIFBURSBNYXJrZXIgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgSSByZWNvZ25pemUgdGhhdCBgUFRFX01BUktFUl9VRkZEX1dQYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIGhlcmUuIFRoYXQgbWFrZXMgc2Vuc2UuIEJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBgY29uZmlnIFBURV9NQVJLRVJgIHdpdGhpbiBgbW0vS2NvbmZpZ2AuIFdhaXQsIGhvbGQgb24gYSBzZWNvbmTigKYgSSYjMzk7dmUgYWxyZWFkeSBzY3J1dGluaXplZCB0aGF0IEtjb25maWcgZW50cnksIGhhdmVuJiMzOTt0IEk/IE5vIG5lZWQgdG8gcmUtdHJlYWQgdGhhdCBncm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BURV9NQVJLRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS91c2VyZmF1bHRmZC5yc3Q9MzkzPVJXUCBtYXJrZXI6IHRoZSBuZXh0IGFjY2VzcyByZS1wb3B1bGF0ZXMgdGhlIHJhbmdlIHdpdGhvdXQgcHJvdGVjdGlvbi5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdXNlcmZhdWx0ZmQucnN0OjM5NDpVbmxpa2UgV1AgKHdoaWNoIHBlcnNpc3RzIHZpYSBgYFBURV9NQVJLRVJfVUZGRF9XUGBgKSwgdGhlcmUgaXMgbm9cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdXNlcmZhdWx0ZmQucnN0LTM5NS1wZXJzaXN0ZW50IFJXUCBtYXJrZXIgdG9kYXkuIFRoZSB1c2VyIG5lZWRzIHRvIHJlLWFybSB0aGUgcmFuZ2Ugd2l0aFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTk0OT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zd3Bfb2Zmc2V0X3JzdGUoc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xOTU4LSAqIFRoaXMgaXMgYWxzbyB0cnVlIGZvciBzd2FwIGVudHJpZXMsIGFuZCB0aGVpciBzd2FwIHR5cGUgYW5kIG9mZnNldCBlbmNvZGluZy5cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTk1OTogKiBGb3IgaHVnZXRsYmZzIFBURV9NQVJLRVIgc3VwcG9ydCwgczM5MCBoYXMgaW50ZXJuYWwgX19zd3BfdHlwZV9yc3RlKCkgYW5kXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE5NjAtICogX19zd3Bfb2Zmc2V0X3JzdGUoKSBoZWxwZXJzIHRvIGNvcnJlY3RseSBoYW5kbGUgUlNURSBzd2FwIGVudHJpZXMuXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTI1MDM9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjUxMy1cdFx0c2V0X3B0ZV9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSxcbmZzL3Byb2MvdGFza19tbXUuYzoyNTE0Olx0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yNTE1LVx0fSBlbHNlIHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjYzNj1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfaHVnZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI2NDQtXHRcdHNldF9odWdlX3B0ZV9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY0NTpcdFx0XHRcdG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApLCBwc2l6ZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY0Ni1cdFx0cmV0dXJuO1xuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg9MTY9c3RhdGljIGlubGluZSBib29sIHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKHZvaWQpXG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oLTE3LXtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg6MTg6XHRyZXR1cm4gcGd0YWJsZV9zdXBwb3J0c191ZmZkKCkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUCk7XG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oLTE5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0xNjA9c3RhdGljIGlubGluZSBlbnVtIHNvZnRsZWFmX3R5cGUgc29mdGxlYWZfdHlwZShzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTE5Mi0jZW5kaWZcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE5MzpcdGNhc2UgU1dQX1BURV9NQVJLRVI6XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xOTQtXHRcdHJldHVybiBTT0ZUTEVBRl9NQVJLRVI7XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzM3PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBzb2Z0bGVhZl90b19tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNDAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNDE6XHRyZXR1cm4gc3dwX29mZnNldChlbnRyeSkgXHUwMDI2IFBURV9NQVJLRVJfTUFTSztcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0Mi19XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NDQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19wb2lzb25fbWFya2VyKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDQ5LVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDUwOlx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXHUwMDI2IFBURV9NQVJLRVJfUE9JU09ORUQ7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NTEtfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ1OT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZ3VhcmRfbWFya2VyKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDYzLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDY0Olx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXHUwMDI2IFBURV9NQVJLRVJfR1VBUkQ7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NjUtfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ3Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00ODAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0ODE6XHRyZXR1cm4gc29mdGxlYWZfdG9fbWFya2VyKGVudHJ5KSBcdTAwMjYgUFRFX01BUktFUl9VRkZEX1dQO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDgyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU1NT1zdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTU5LVx0LyogQWx3YXlzIGNvcHkgZXJyb3IgZW50cmllcy4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYwOlx0cHRlX21hcmtlciBkc3RtID0gc3JjbSBcdTAwMjYgKFBURV9NQVJLRVJfUE9JU09ORUQgfCBQVEVfTUFSS0VSX0dVQVJEKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYxLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01NjItXHQvKiBPbmx5IGNvcHkgUFRFIG1hcmtlcnMgaWYgVUZGRCByZWdpc3RlciBtYXRjaGVzLiAqL1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1NjM6XHRpZiAoKHNyY20gXHUwMDI2IFBURV9NQVJLRVJfVUZGRF9XUCkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3dwKGRzdF92bWEpKVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1NjQ6XHRcdGRzdG0gfD0gUFRFX01BUktFUl9VRkZEX1dQO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01NjUtXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD01ODI9cHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTYxNC1cdFx0c2V0X3B0ZV9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NjE1Olx0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNjE2LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD0yOT1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTU0LSAqL1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NTU6I2RlZmluZSBTV1BfUFRFX01BUktFUl9OVU0gMVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTY6I2RlZmluZSBTV1BfUFRFX01BUktFUiAgICAgKE1BWF9TV0FQRklMRVMgJiM0MzsgU1dQX0hXUE9JU09OX05VTSAmIzQzOyBcXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTctXHRcdFx0ICAgIFNXUF9NSUdSQVRJT05fTlVNICYjNDM7IFNXUF9ERVZJQ0VfTlVNKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTExMC1cdFNXUF9NSUdSQVRJT05fTlVNIC0gU1dQX0hXUE9JU09OX05VTSAtIFxcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDoxMTE6XHRTV1BfUFRFX01BUktFUl9OVU0pXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0xMTItXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MjgxPXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfbWFya2VyO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjgyLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MjgzOiNkZWZpbmUgIFBURV9NQVJLRVJfVUZGRF9XUFx0XHRcdEJJVCgwKVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjg0LS8qXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjkyLSAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MjkzOiNkZWZpbmUgIFBURV9NQVJLRVJfUE9JU09ORURcdFx0XHRCSVQoMSlcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI5NC0vKlxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI5OC0gKi9cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjI5OTojZGVmaW5lICBQVEVfTUFSS0VSX0dVQVJEXHRcdFx0QklUKDIpXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMDA6I2RlZmluZSAgUFRFX01BUktFUl9NQVNLXHRcdFx0KEJJVCgzKSAtIDEpXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMDEtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMDI9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3B0ZV9tYXJrZXJfZW50cnkocHRlX21hcmtlciBtYXJrZXIpXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMDMte1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzA0Olx0cmV0dXJuIHN3cF9lbnRyeShTV1BfUFRFX01BUktFUiwgbWFya2VyKTtcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMwNS19XG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzEyPXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9wb2lzb25lZF9zd3BfZW50cnkodm9pZClcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMxMy17XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMTQ6XHRyZXR1cm4gbWFrZV9wdGVfbWFya2VyX2VudHJ5KFBURV9NQVJLRVJfUE9JU09ORUQpO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzE1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMTc9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzE4LXtcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMxOTpcdHJldHVybiBtYWtlX3B0ZV9tYXJrZXJfZW50cnkoUFRFX01BUktFUl9HVUFSRCk7XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjAtfVxuLS1cbm1tL0tjb25maWc9MTM4Mj1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xMzg4LVxubW0vS2NvbmZpZzoxMzg5OmNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbm1tL0tjb25maWctMTM5MC1cdGJvb2wgXCYjMzQ7VXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcJiMzNDtcbi0tXG5tbS9odWdldGxiLmM9NTIxMz12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUyNzQtXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXG5tbS9odWdldGxiLmM6NTI3NTpcdFx0XHRcdFx0XHRtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSxcbm1tL2h1Z2V0bGIuYy01Mjc2LVx0XHRcdFx0XHRcdHN6KTtcbi0tXG5tbS9odWdldGxiLmMtNTMxMC1cdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXG5tbS9odWdldGxiLmM6NTMxMTpcdFx0XHRcdFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksXG5tbS9odWdldGxiLmMtNTMxMi1cdFx0XHRcdFx0c3opO1xuLS1cbm1tL2h1Z2V0bGIuYz02MDEyPXZtX2ZhdWx0X3QgaHVnZXRsYl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTYwNjktXG5tbS9odWdldGxiLmM6NjA3MDpcdFx0aWYgKG1hcmtlciBcdTAwMjYgUFRFX01BUktFUl9QT0lTT05FRCkge1xubW0vaHVnZXRsYi5jLTYwNzEtXHRcdFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxuLS1cbm1tL2h1Z2V0bGIuYy02MDczLVx0XHRcdGdvdG8gb3V0X211dGV4O1xubW0vaHVnZXRsYi5jOjYwNzQ6XHRcdH0gZWxzZSBpZiAoV0FSTl9PTl9PTkNFKG1hcmtlciBcdTAwMjYgUFRFX01BUktFUl9HVUFSRCkpIHtcbm1tL2h1Z2V0bGIuYy02MDc1LVx0XHRcdC8qIFRoaXMgaXNuJiMzOTt0IHN1cHBvcnRlZCBpbiBodWdldGxiLiAqL1xuLS1cbm1tL2h1Z2V0bGIuYz02Mjc1PWludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG4tLVxubW0vaHVnZXRsYi5jLTYzMDUtXG5tbS9odWdldGxiLmM6NjMwNjpcdFx0X2RzdF9wdGUgPSBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9QT0lTT05FRCk7XG5tbS9odWdldGxiLmMtNjMwNy1cdFx0c2V0X2h1Z2VfcHRlX2F0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUsIF9kc3RfcHRlLCBzaXplKTtcbi0tXG5tbS9odWdldGxiLmM9NjQ5Nj1sb25nIGh1Z2V0bGJfY2hhbmdlX3Byb3RlY3Rpb24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTY1NzQtXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXG5tbS9odWdldGxiLmM6NjU3NTpcdFx0XHRcdFx0XHRtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSxcbm1tL2h1Z2V0bGIuYy02NTc2LVx0XHRcdFx0XHRcdHBzaXplKTtcbi0tXG5tbS9tYWR2aXNlLmM9MTEwMz1zdGF0aWMgaW50IGd1YXJkX2luc3RhbGxfc2V0X3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCxcbi0tXG5tbS9tYWR2aXNlLmMtMTEwOC1cdC8qIFNpbXBseSBpbnN0YWxsIGEgUFRFIG1hcmtlciwgdGhpcyBjYXVzZXMgc2VnZmF1bHQgb24gYWNjZXNzLiAqL1xubW0vbWFkdmlzZS5jOjExMDk6XHQqcHRlcCA9IG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX0dVQVJEKTtcbm1tL21hZHZpc2UuYy0xMTEwLVx0KCpucl9wYWdlcykmIzQzOyYjNDM7O1xuLS1cbm1tL21lbW9yeS5jPTQ2MjA9c3RhdGljIHZtX2ZhdWx0X3QgcHRlX21hcmtlcl9jbGVhcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00NjMwLVx0ICogVGhpcyBzaG91bGQgYWxzbyBjb3ZlciB0aGUgY2FzZSB3aGVyZSBlLmcuIHRoZSBwdGUgY2hhbmdlZFxubW0vbWVtb3J5LmM6NDYzMTpcdCAqIHF1aWNrbHkgZnJvbSBhIFBURV9NQVJLRVJfVUZGRF9XUCBpbnRvIFBURV9NQVJLRVJfUE9JU09ORUQuXG5tbS9tZW1vcnkuYy00NjMyLVx0ICogU28gcHRlX2lzX21hcmtlcigpIGNoZWNrIGlzIG5vdCBlbm91Z2ggdG8gc2FmZWx5IGRyb3AgdGhlIHB0ZS5cbi0tXG5tbS9tZW1vcnkuYz00NjY0PXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfbWFya2VyKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ2NzYtXHQvKiBIaWdoZXIgcHJpb3JpdHkgdGhhbiB1ZmZkLXdwIHdoZW4gZGF0YSBjb3JydXB0ZWQgKi9cbm1tL21lbW9yeS5jOjQ2Nzc6XHRpZiAobWFya2VyIFx1MDAyNiBQVEVfTUFSS0VSX1BPSVNPTkVEKVxubW0vbWVtb3J5LmMtNDY3OC1cdFx0cmV0dXJuIFZNX0ZBVUxUX0hXUE9JU09OO1xuLS1cbm1tL21lbW9yeS5jLTQ2ODAtXHQvKiBIaXR0aW5nIGEgZ3VhcmQgcGFnZSBpcyBhbHdheXMgYSBmYXRhbCBjb25kaXRpb24uICovXG5tbS9tZW1vcnkuYzo0NjgxOlx0aWYgKG1hcmtlciBcdTAwMjYgUFRFX01BUktFUl9HVUFSRClcbm1tL21lbW9yeS5jLTQ2ODItXHRcdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xuLS1cbm1tL21wcm90ZWN0LmM9MzMxPXN0YXRpYyBsb25nIGNoYW5nZV9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tcHJvdGVjdC5jLTQyNy1cdFx0XHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXG5tbS9tcHJvdGVjdC5jOjQyODpcdFx0XHRcdFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xubW0vbXByb3RlY3QuYy00MjktXHRcdFx0XHRwYWdlcyYjNDM7JiM0Mzs7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz03MzQ9c3RhdGljIGludCBtZmlsbF9hdG9taWNfcHRlX3BvaXNvbihzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNzQzLVxubW0vdXNlcmZhdWx0ZmQuYzo3NDQ6XHRfZHN0X3B0ZSA9IG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1BPSVNPTkVEKTtcbm1tL3VzZXJmYXVsdGZkLmMtNzQ1LVx0cmV0ID0gLUVBR0FJTjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9Mj1DT05GSUdfVVNFUkZBVUxURkQ9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnOjM6Q09ORklHX1BURV9NQVJLRVJfVUZGRF9XUD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNC1DT05GSUdfVEVTVF9WTUFMTE9DPW1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MTMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUFRFX01BUktFUiBDb25maWd1cmF0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFBURV9NQVJLRVJfVUZGRF9XUGAgY29uZmlnIOKAkyB0aGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIGZvciBQVEUgbWFya2VycywgcmlnaHQ/IEhtbSwgaGFuZyBvbiwgdGhlcmUgYXJlIGFsc28gYFBURV9NQVJLRVJfUE9JU09ORURgIGFuZCBgUFRFX01BUktFUl9HVUFSRGAuIEFyZSB0aG9zZSBkZXBlbmRlbnQgb24gYW55IG90aGVyIGNvbmZpZ3M/IEl0IGxvb2tzIGxpa2UgYFBURV9NQVJLRVJfUE9JU09ORURgIGlzIGVpdGhlciB1c2VkIHVuY29uZGl0aW9uYWxseSBvciBwZXJoYXBzIGxpbmtlZCB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYW5kIGBQVEVfTUFSS0VSX0dVQVJEYCBzZWVtcyB1bmNvbmRpdGlvbmFsIGFzIHdlbGwuCgpUaGVyZWZvcmUsIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjb25maWcgdG8gY29uc2lkZXIgZm9yIGluY2x1c2lvbi4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAsIGBDT05GSUdfTUlHUkFUSU9OYCwgYW5kIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIHRvby4KCk5vdywgbGV0IG1lIGRpZyBpbnRvIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIHNwZWNpZmljYWxseS4gSSYjMzk7bGwgY2hlY2sgYG1tL0tjb25maWdgIGZvciB0aGF0IG9uZS4gQWgsIG9rYXksIGl0IGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gTGV0IG1lIGNoZWNrIHRoYXQgY29uZmlnLiBgQ09ORklHX1pPTkVfREVWSUNFYCBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIFdoaWxlIEkgdW5kZXJzdGFuZCB0aGUgaGllcmFyY2h5IGhlcmUsIEkgZG9uJiMzOTt0IG5lZWQgdG8gbGlzdCBhbGwgdGhvc2UgZGVwZW5kZW5jaWVzLCBzbyBJIGNhbiBqdXN0IHJlbWVtYmVyIGBERVZJQ0VfUFJJVkFURWAsIGBNSUdSQVRJT05gLCBgTUVNT1JZX0ZBSUxVUkVgLCBhbmQsIG9mIGNvdXJzZSwgYFBURV9NQVJLRVJfVUZGRF9XUGAuCgpXYWl0IGEgbWludXRlLCB0aGlzIHBhdGNoIGlzIGV4dHJhY3RpbmcgYGRvX25vbl9zd2FwX3BhZ2VgIGZyb20gYGRvX3N3YXBfcGFnZWAsIGludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBgZG9fbm9uX3N3YXBfcGFnZWAgZnVuY3Rpb24gd2lsbCBoYW5kbGUgYSB2YXJpZXR5IG9mIGNhc2VzLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGhhbmRsaW5nIHRoaW5ncyBsaWtlOgotIGBzb2Z0bGVhZl9pc19taWdyYXRpb25gCi0gYHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmVgCi0gYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYAotIGBzb2Z0bGVhZl9pc19od3BvaXNvbmAKLSBgc29mdGxlYWZfaXNfbWFya2VyYAoKUmlnaHQsIHRoZSBwb2ludCBpcyB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZWAgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9Mjg3PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI5OC0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI5OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UtZXhjbHVzaXZlIGVudHJ5P1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzAwLSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMDMtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozMDQ6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMwNS17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYzLVx0XHRyZXR1cm4gdHJ1ZTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM2NDpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2NS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vaG1tLmM9MjQxPXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaG1tLmMtMjkzLVxubW0vaG1tLmM6Mjk0Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXG5tbS9obW0uYy0yOTUtXHRcdFx0Z290byBmYXVsdDtcbi0tXG5tbS9tZW1vcnkuYz0xMDAxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vbWVtb3J5LmMtMTA3Ny1cdFx0fVxubW0vbWVtb3J5LmM6MTA3ODpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTEwNzktXHRcdC8qXG4tLVxubW0vbWVtb3J5LmM9MTgxMT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTgyMS1cdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21lbW9yeS5jOjE4MjI6XHQgICAgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTE4MjMtXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4tLVxubW0vbWVtb3J5LmM9NDgxOD1zdGF0aWMgdm1fZmF1bHRfdCBkb19ub25fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ4MjgtXHRcdFx0XHQgICAgIHZtZi1cdTAwM2VhZGRyZXNzKTtcbm1tL21lbW9yeS5jOjQ4Mjk6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XG5tbS9tZW1vcnkuYy00ODMwLVx0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03MS1cdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo3MjpcdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTczLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTMxLVx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEzMjpcdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzMy1cdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzE2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmVgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hpY2ggY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlYCBzZXR0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhpcyBiZWhhdmlvciwgb3IgbW9yZSBzcGVjaWZpY2FsbHksIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBvciBzd2l0Y2hlcyBhcmUuIEl0JiMzOTtzIGNydWNpYWwgZm9yIG1lIHRvIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBlbGVtZW50cy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgYm9vbGVhbiBmbGFnLCBvciBpcyBpdCBhIG1vcmUgY29tcGxleCBzZXR1cCB3aXRoIG11bHRpcGxlIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byB0cmFjZT8gUGVyaGFwcyBpdCYjMzk7cyBidXJpZWQgaW4gc29tZSBvYnNjdXJlIHNlY3Rpb24gb2YgdGhlIHN5c3RlbSBjb25maWcgdGhhdCBJJiMzOTttIG92ZXJsb29raW5nPyBUaW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NXUF9ERVZJQ0VfRVhDTFVTSVZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oPTE2MD1zdGF0aWMgaW5saW5lIGVudW0gc29mdGxlYWZfdHlwZSBzb2Z0bGVhZl90eXBlKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTg1LVx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE4NjpcdGNhc2UgU1dQX0RFVklDRV9FWENMVVNJVkU6XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODctXHRcdHJldHVybiBTT0ZUTEVBRl9ERVZJQ0VfRVhDTFVTSVZFO1xuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oPTI5PXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNjgtICogV2hlbiBhIHBhZ2UgaXMgbWFwcGVkIGJ5IHRoZSBkZXZpY2UgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3Mgd2Ugc2V0IHRoZSBDUFUgcGFnZVxuaW5jbHVkZS9saW51eC9zd2FwLmg6Njk6ICogdGFibGUgZW50cmllcyB0byBhIHNwZWNpYWwgU1dQX0RFVklDRV9FWENMVVNJVkUgZW50cnkuXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03MC0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03NC0jZGVmaW5lIFNXUF9ERVZJQ0VfUkVBRCAoTUFYX1NXQVBGSUxFUyYjNDM7U1dQX0hXUE9JU09OX05VTSYjNDM7U1dQX01JR1JBVElPTl9OVU0mIzQzOzEpXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo3NTojZGVmaW5lIFNXUF9ERVZJQ0VfRVhDTFVTSVZFIChNQVhfU1dBUEZJTEVTJiM0MztTV1BfSFdQT0lTT05fTlVNJiM0MztTV1BfTUlHUkFUSU9OX05VTSYjNDM7MilcbmluY2x1ZGUvbGludXgvc3dhcC5oLTc2LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTQ2PXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTQ3LXtcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjE0ODpcdHJldHVybiBzd3BfZW50cnkoU1dQX0RFVklDRV9FWENMVVNJVkUsIG9mZnNldCk7XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNDktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk0MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkNoZWNraW5nIGZvciBgU1dQX0RFVklDRV9FWENMVVNJVkVgKioKCkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gc3dhcHBpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHN3YXAgc3BhY2UsIGFuZCB0aGF0IHVzdWFsbHkgcmVzaWRlcyBpbiB0aGUga2VybmVsIGhlYWRlcnMuIE15IG11c2NsZSBtZW1vcnkgdGVsbHMgbWUgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFRoYXQgaGVhZGVyIGZpbGUgaXMgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciBzd2FwLXJlbGF0ZWQgc3RydWN0dXJlcywgY29uc3RhbnRzLCBhbmQgbWFjcm9zIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgYFNXUF9ERVZJQ0VfRVhDTFVTSVZFYCwgc28sIEkmIzM5O2xsIGdvIGNoZWNrIHRoYXQgaGVhZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWSUNFX1BSSVZBVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjQ4PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNTAtXG5tbS9LY29uZmlnOjEyNTE6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNTItXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFN3YXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYFNXUF9ERVZJQ0VfRVhDTFVTSVZFYCBiZWluZyBjb25kaXRpb25hbGx5IGVuYWJsZWQuIFJpZ2h0LCBpdCYjMzk7cyB0aWVkIHRvIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb24uIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBzd2FwIGRlZmluaXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgZXhhY3RseSB0aGF0IGZsYWcgbGl2ZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIEFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGFyb3VuZCBsaW5lIDc1LCBnaXZlIG9yIHRha2UuIEdvdHRhIHF1aWNrbHkgY29uZmlybSB0aGUgZXhhY3QgbG9jYXRpb24gYW5kIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBleGNsdXNpb24gd29ya3MgYmFzZWQgb24gdGhlIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHQgKiBVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgc3VwcG9ydC4gU2VlIGluY2x1ZGUvbGludXgvaG1tLmggYW5kXG4gIDYxOlx0ICogRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LiBTaG9ydCBkZXNjcmlwdGlvbiBpcyB3ZSBuZWVkIHN0cnVjdCBwYWdlcyBmb3JcbiAgNjI6XHQgKiBkZXZpY2UgbWVtb3J5IHRoYXQgaXMgdW5hZGRyZXNzYWJsZSAoaW5hY2Nlc3NpYmxlKSBieSBDUFUsIHNvIHRoYXQgd2UgY2FuXG4gIDYzOlx0ICogbWlncmF0ZSBwYXJ0IG9mIGEgcHJvY2VzcyBtZW1vcnkgdG8gZGV2aWNlIG1lbW9yeS5cbiAgNjQ6XHQgKlxuICA2NTpcdCAqIFdoZW4gYSBwYWdlIGlzIG1pZ3JhdGVkIGZyb20gQ1BVIHRvIGRldmljZSwgd2Ugc2V0IHRoZSBDUFUgcGFnZSB0YWJsZSBlbnRyeVxuICA2NjpcdCAqIHRvIGEgc3BlY2lhbCBTV1BfREVWSUNFX3tSRUFEfFdSSVRFfSBlbnRyeS5cbiAgNjc6XHQgKlxuICA2ODpcdCAqIFdoZW4gYSBwYWdlIGlzIG1hcHBlZCBieSB0aGUgZGV2aWNlIGZvciBleGNsdXNpdmUgYWNjZXNzIHdlIHNldCB0aGUgQ1BVIHBhZ2VcbiAgNjk6XHQgKiB0YWJsZSBlbnRyaWVzIHRvIGEgc3BlY2lhbCBTV1BfREVWSUNFX0VYQ0xVU0lWRSBlbnRyeS5cbiAgNzA6XHQgKi9cbiAgNzE6XHQjaWZkZWYgQ09ORklHX0RFVklDRV9QUklWQVRFXG4gIDcyOlx0I2RlZmluZSBTV1BfREVWSUNFX05VTSAzXG4gIDczOlx0I2RlZmluZSBTV1BfREVWSUNFX1dSSVRFIChNQVhfU1dBUEZJTEVTJiM0MztTV1BfSFdQT0lTT05fTlVNJiM0MztTV1BfTUlHUkFUSU9OX05VTSlcbiAgNzQ6XHQjZGVmaW5lIFNXUF9ERVZJQ0VfUkVBRCAoTUFYX1NXQVBGSUxFUyYjNDM7U1dQX0hXUE9JU09OX05VTSYjNDM7U1dQX01JR1JBVElPTl9OVU0mIzQzOzEpXG4gIDc1Olx0I2RlZmluZSBTV1BfREVWSUNFX0VYQ0xVU0lWRSAoTUFYX1NXQVBGSUxFUyYjNDM7U1dQX0hXUE9JU09OX05VTSYjNDM7U1dQX01JR1JBVElPTl9OVU0mIzQzOzIpXG4gIDc2Olx0I2Vsc2VcbiAgNzc6XHQjZGVmaW5lIFNXUF9ERVZJQ0VfTlVNIDBcbiAgNzg6XHQjZW5kaWZcbiAgNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MTYKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcmVmYWN0b3JpbmcgdGhlIGhhbmRsaW5nIG9mIHNvbWUgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIG1vdmluZyB0aGUgbG9naWMgZm9yIG5vbi1zd2FwIHNvZnRsZWFmIGVudHJpZXMgb3V0IG9mIGBkb19zd2FwX3BhZ2VgIGFuZCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgZG9fbm9uX3N3YXBfcGFnZWAuIFRoaXMgaW5jbHVkZXMgaGFuZGxpbmcgbWlncmF0aW9uLCBkZXZpY2UtZXhjbHVzaXZlIHBhZ2VzLCBkZXZpY2UgcHJpdmF0ZSBwYWdlcywgbWVtb3J5IGZhaWx1cmVzIChod3BvaXNvbiksIGFuZCBtYXJrZXJzLiBUaGUgcGF0Y2ggaXMgYWxzbyBtYWtpbmcgdGhlIHN3aXRjaCB0byBmb2xpby1iYXNlZCBBUElzIGxpa2UgYGZvbGlvX3RyeWxvY2tgIGFuZCBgZm9saW9fZ2V0YC4gQSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgREVWSUNFX1BSSVZBVEVgLCBgTUlHUkFUSU9OYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGBQVEVfTUFSS0VSX1VGRkRfV1BgLiBUaGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHNwZWNpZmljYWxseSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSBpbiBoYW5kbGluZyBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIG1haW4gZm9jdXMgaXMgaW5kZWVkIGBkb19ub25fc3dhcF9wYWdlYC4gVGhpcyBuZXcgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYGRvX3N3YXBfcGFnZWAuIGBkb19zd2FwX3BhZ2VgIGlzIGRlZmluaXRlbHkgYSBob3QgcGF0aCBiZWNhdXNlIGl0IGhhbmRsZXMgc3dhcCBmYXVsdHMuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGBkb19ub25fc3dhcF9wYWdlYCBpcyBvbmx5IGNhbGxlZCBmb3IgdGhlIGxlc3MgY29tbW9uIHNjZW5hcmlvcyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgZnVuY3Rpb24gdG8gZm9jdXMgb24gZm9yIGFuYWx5c2lzLgoKSSYjMzk7dmUgYWxzbyBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgZmFpcmx5IHN0YW5kYXJkLiBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX01NVWAgYXJlIG5lY2Vzc2FyeSwgYnV0IHVzdWFsbHkgZW5hYmxlZC4KClNvLCBJIHdvdWxkIHNheSB0aGlzIHBhdGNoIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CgoqICAgKipXb3J0aEZ1enppbmcqKjogKlRydWUqCiogICAqKkZvY3VzU3ltYm9scyoqOiBgWyYjMzQ7ZG9fbm9uX3N3YXBfcGFnZSYjMzQ7XWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgWyYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywgJiMzNDtNSUdSQVRJT04mIzM0OywgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LCAmIzM0O1BURV9NQVJLRVJfVUZGRF9XUCYjMzQ7XWAKKiAgICoqUmVhc29uaW5nKio6ICYjMzQ7VGhlIHBhdGNoIGV4dHJhY3RzIHRoZSBoYW5kbGluZyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIChtaWdyYXRpb24sIGRldmljZSBleGNsdXNpdmUsIGRldmljZSBwcml2YXRlLCBod3BvaXNvbiwgbWFya2VycykgZnJvbSBgZG9fc3dhcF9wYWdlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBjb2RlIHRvIHVzZSBmb2xpby1iYXNlZCBBUElzIChgZm9saW9fdHJ5bG9ja2AsIGBmb2xpb19nZXRgLCBldGMuKSBpbnN0ZWFkIG9mIHBhZ2UtYmFzZWQgQVBJcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHZhcmlvdXMgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19ub25fc3dhcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dHJhY3RzIHRoZSBoYW5kbGluZyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIChtaWdyYXRpb24sIGRldmljZSBleGNsdXNpdmUsIGRldmljZSBwcml2YXRlLCBod3BvaXNvbiwgbWFya2VycykgZnJvbSBgZG9fc3dhcF9wYWdlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBjb2RlIHRvIHVzZSBmb2xpby1iYXNlZCBBUElzIChgZm9saW9fdHJ5bG9ja2AsIGBmb2xpb19nZXRgLCBldGMuKSBpbnN0ZWFkIG9mIHBhZ2UtYmFzZWQgQVBJcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHZhcmlvdXMgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19ub25fc3dhcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dHJhY3RzIHRoZSBoYW5kbGluZyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIChtaWdyYXRpb24sIGRldmljZSBleGNsdXNpdmUsIGRldmljZSBwcml2YXRlLCBod3BvaXNvbiwgbWFya2VycykgZnJvbSBgZG9fc3dhcF9wYWdlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBjb2RlIHRvIHVzZSBmb2xpby1iYXNlZCBBUElzIChgZm9saW9fdHJ5bG9ja2AsIGBmb2xpb19nZXRgLCBldGMuKSBpbnN0ZWFkIG9mIHBhZ2UtYmFzZWQgQVBJcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHZhcmlvdXMgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMToxNC43NzQxMTM4NzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY3NTA2OTg2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX25vbl9zd2FwX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRyYWN0cyB0aGUgaGFuZGxpbmcgb2Ygbm9uLXN3YXAgc29mdGxlYWYgZW50cmllcyAobWlncmF0aW9uLCBkZXZpY2UgZXhjbHVzaXZlLCBkZXZpY2UgcHJpdmF0ZSwgaHdwb2lzb24sIG1hcmtlcnMpIGZyb20gYGRvX3N3YXBfcGFnZWAgaW50byBhIG5ldyBmdW5jdGlvbiBgZG9fbm9uX3N3YXBfcGFnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgY29kZSB0byB1c2UgZm9saW8tYmFzZWQgQVBJcyAoYGZvbGlvX3RyeWxvY2tgLCBgZm9saW9fZ2V0YCwgZXRjLikgaW5zdGVhZCBvZiBwYWdlLWJhc2VkIEFQSXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciB2YXJpb3VzIHNwZWNpYWwgcGFnZSB0YWJsZSBlbnRyaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMToxNC43NzQxMjQzNTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjg4Nzg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM0MTc5OTdmNmIxNjcyZTE5MGNkOTc4MDRlYTViM2Q5MWJmMTMxYWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDc6MDE6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IGQ1ZTg3NjI0ZjY5MjA1Li41MGQ4ZTkyYWVmOTE3MCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTQ4MTUsNiArNDgxNSw3NCBAQCBzdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcXG4gXFx0fSB3aGlsZSAoLS1ucl9wYWdlcyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2bV9mYXVsdF90IGRvX25vbl9zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuK3tcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXFx1MDAzZXZtYTtcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0c29mdGxlYWZfdCBlbnRyeTtcXG4rXFx0dm1fZmF1bHRfdCByZXQgPSAwO1xcbitcXG4rXFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZSh2bWYtXFx1MDAzZW9yaWdfcHRlKTtcXG4rXFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcXG4rXFx0XFx0bWlncmF0aW9uX2VudHJ5X3dhaXQodm1hLVxcdTAwM2V2bV9tbSwgdm1mLVxcdTAwM2VwbWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG4rXFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xcbitcXHRcXHR2bWYtXFx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4rXFx0XFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcXG4rXFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG4rXFxuK1xcdFxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBtaWdyYXRlX3RvX3JhbSBpcyBub3QgeWV0IHJlYWR5IHRvIG9wZXJhdGVcXG4rXFx0XFx0XFx0ICogdW5kZXIgVk1BIGxvY2suXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4rXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1JFVFJZO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR2bWYtXFx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4rXFx0XFx0dm1mLVxcdTAwM2VwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cXHUwMDNldm1fbW0sIHZtZi1cXHUwMDNlcG1kLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR2bWYtXFx1MDAzZWFkZHJlc3MsIFxcdTAwMjZ2bWYtXFx1MDAzZXB0bCk7XFxuK1xcdFxcdGlmICh1bmxpa2VseSghdm1mLVxcdTAwM2VwdGUgfHxcXG4rXFx0XFx0XFx0ICAgICAhcHRlX3NhbWUocHRlcF9nZXQodm1mLVxcdTAwM2VwdGUpLFxcbitcXHRcXHRcXHRcXHRcXHR2bWYtXFx1MDAzZW9yaWdfcHRlKSkpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogR2V0IGEgZm9saW8gcmVmZXJlbmNlIHdoaWxlIHdlIGtub3cgdGhlIGZvbGlvIGNhbid0IGJlXFxuK1xcdFxcdCAqIGZyZWVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cXHUwMDNlcGFnZSk7XFxuK1xcdFxcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwO1xcbitcXG4rXFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4rXFx0XFx0XFx0cHRlX3VubWFwX3VubG9jayh2bWYtXFx1MDAzZXB0ZSwgdm1mLVxcdTAwM2VwdGwpO1xcbitcXHRcXHRcXHRwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLVxcdTAwM2VwYWdlKTtcXG4rXFx0XFx0XFx0cmV0ID0gcGdtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcXG4rXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cHRlX3VubWFwKHZtZi1cXHUwMDNlcHRlKTtcXG4rXFx0XFx0XFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi1cXHUwMDNlcHRsKTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2h3cG9pc29uKGVudHJ5KSkge1xcbitcXHRcXHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjtcXG4rXFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKSB7XFxuK1xcdFxcdHJldCA9IGhhbmRsZV9wdGVfbWFya2VyKHZtZik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHByaW50X2JhZF9wdGUodm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHZtZi1cXHUwMDNlb3JpZ19wdGUsIE5VTEwpO1xcbitcXHRcXHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK1xcbit1bmxvY2s6XFxuK1xcdGlmICh2bWYtXFx1MDAzZXB0ZSlcXG4rXFx0XFx0cHRlX3VubWFwX3VubG9jayh2bWYtXFx1MDAzZXB0ZSwgdm1mLVxcdTAwM2VwdGwpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKlxcbiAgKiBXZSBlbnRlciB3aXRoIGVpdGhlciB0aGUgVk1BIGxvY2sgb3IgdGhlIG1tYXBfbG9jayBoZWxkIChzZWVcXG4gICogRkFVTFRfRkxBR19WTUFfTE9DSyksIGFuZCBwdGUgbWFwcGVkIGJ1dCBub3QgeWV0IGxvY2tlZC5cXG5AQCAtNDg0NSw1NiArNDkxMyw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXG4gXFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZSh2bWYtXFx1MDAzZW9yaWdfcHRlKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFzb2Z0bGVhZl9pc19zd2FwKGVudHJ5KSkpIHtcXG4tXFx0XFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcXG4tXFx0XFx0XFx0bWlncmF0aW9uX2VudHJ5X3dhaXQodm1hLVxcdTAwM2V2bV9tbSwgdm1mLVxcdTAwM2VwbWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xcbi1cXHRcXHRcXHR2bWYtXFx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4tXFx0XFx0XFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG4tXFx0XFx0XFx0aWYgKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XFxuLVxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdCAqIG1pZ3JhdGVfdG9fcmFtIGlzIG5vdCB5ZXQgcmVhZHkgdG8gb3BlcmF0ZVxcbi1cXHRcXHRcXHRcXHQgKiB1bmRlciBWTUEgbG9jay5cXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHZtYV9lbmRfcmVhZCh2bWEpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBWTV9GQVVMVF9SRVRSWTtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdHZtZi1cXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbi1cXHRcXHRcXHR2bWYtXFx1MDAzZXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLVxcdTAwM2V2bV9tbSwgdm1mLVxcdTAwM2VwbWQsXFxuLVxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlYWRkcmVzcywgXFx1MDAyNnZtZi1cXHUwMDNlcHRsKTtcXG4tXFx0XFx0XFx0aWYgKHVubGlrZWx5KCF2bWYtXFx1MDAzZXB0ZSB8fFxcbi1cXHRcXHRcXHRcXHQgICAgICFwdGVfc2FtZShwdGVwX2dldCh2bWYtXFx1MDAzZXB0ZSksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlb3JpZ19wdGUpKSlcXG4tXFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBHZXQgYSBwYWdlIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBwYWdlIGNhbid0IGJlXFxuLVxcdFxcdFxcdCAqIGZyZWVkLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKHRyeWxvY2tfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XFxuLVxcbi1cXHRcXHRcXHRcXHRnZXRfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZXB0bCk7XFxuLVxcdFxcdFxcdFxcdHBnbWFwID0gcGFnZV9wZ21hcCh2bWYtXFx1MDAzZXBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBwZ21hcC1cXHUwMDNlb3BzLVxcdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xcbi1cXHRcXHRcXHRcXHR1bmxvY2tfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRwdXRfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRwdGVfdW5tYXAodm1mLVxcdTAwM2VwdGUpO1xcbi1cXHRcXHRcXHRcXHRzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChlbnRyeSwgdm1mLVxcdTAwM2VwdGwpO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfaHdwb2lzb24oZW50cnkpKSB7XFxuLVxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OO1xcbi1cXHRcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcXG4tXFx0XFx0XFx0cmV0ID0gaGFuZGxlX3B0ZV9tYXJrZXIodm1mKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cHJpbnRfYmFkX3B0ZSh2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcywgdm1mLVxcdTAwM2VvcmlnX3B0ZSwgTlVMTCk7XFxuLVxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcXG4tXFx0XFx0fVxcbitcXHRcXHRyZXQgPSBkb19ub25fc3dhcF9wYWdlKHZtZik7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMToxNS42MDIzODE3NDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDU5MjI0MTY5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX25vbl9zd2FwX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRyYWN0cyB0aGUgaGFuZGxpbmcgb2Ygbm9uLXN3YXAgc29mdGxlYWYgZW50cmllcyAobWlncmF0aW9uLCBkZXZpY2UgZXhjbHVzaXZlLCBkZXZpY2UgcHJpdmF0ZSwgaHdwb2lzb24sIG1hcmtlcnMpIGZyb20gYGRvX3N3YXBfcGFnZWAgaW50byBhIG5ldyBmdW5jdGlvbiBgZG9fbm9uX3N3YXBfcGFnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgY29kZSB0byB1c2UgZm9saW8tYmFzZWQgQVBJcyAoYGZvbGlvX3RyeWxvY2tgLCBgZm9saW9fZ2V0YCwgZXRjLikgaW5zdGVhZCBvZiBwYWdlLWJhc2VkIEFQSXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciB2YXJpb3VzIHNwZWNpYWwgcGFnZSB0YWJsZSBlbnRyaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM0MTc5OTdmNmIxNjcyZTE5MGNkOTc4MDRlYTViM2Q5MWJmMTMxYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAwNzowMToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGQ1ZTg3NjI0ZjY5MjA1Li41MGQ4ZTkyYWVmOTE3MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4MTUsNiArNDgxNSw3NCBAQCBzdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcbiBcdH0gd2hpbGUgKC0tbnJfcGFnZXMpO1xuIH1cbiBcbitzdGF0aWMgdm1fZmF1bHRfdCBkb19ub25fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuK3tcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRzb2Z0bGVhZl90IGVudHJ5O1xuK1x0dm1fZmF1bHRfdCByZXQgPSAwO1xuK1xuK1x0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZSh2bWYtXHUwMDNlb3JpZ19wdGUpO1xuK1x0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbitcdFx0bWlncmF0aW9uX2VudHJ5X3dhaXQodm1hLVx1MDAzZXZtX21tLCB2bWYtXHUwMDNlcG1kLFxuK1x0XHRcdFx0ICAgICB2bWYtXHUwMDNlYWRkcmVzcyk7XG4rXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XG4rXHRcdHZtZi1cdTAwM2VwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4rXHRcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XG4rXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xuK1xuK1x0XHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBtaWdyYXRlX3RvX3JhbSBpcyBub3QgeWV0IHJlYWR5IHRvIG9wZXJhdGVcbitcdFx0XHQgKiB1bmRlciBWTUEgbG9jay5cbitcdFx0XHQgKi9cbitcdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbitcdFx0XHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG4rXHRcdH1cbitcbitcdFx0dm1mLVx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcbitcdFx0dm1mLVx1MDAzZXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLVx1MDAzZXZtX21tLCB2bWYtXHUwMDNlcG1kLFxuK1x0XHRcdFx0XHRcdHZtZi1cdTAwM2VhZGRyZXNzLCBcdTAwMjZ2bWYtXHUwMDNlcHRsKTtcbitcdFx0aWYgKHVubGlrZWx5KCF2bWYtXHUwMDNlcHRlIHx8XG4rXHRcdFx0ICAgICAhcHRlX3NhbWUocHRlcF9nZXQodm1mLVx1MDAzZXB0ZSksXG4rXHRcdFx0XHRcdHZtZi1cdTAwM2VvcmlnX3B0ZSkpKVxuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBHZXQgYSBmb2xpbyByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgZm9saW8gY2FuJ3QgYmVcbitcdFx0ICogZnJlZWQuXG4rXHRcdCAqL1xuK1x0XHRmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpO1xuK1x0XHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbitcdFx0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwO1xuK1xuK1x0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4rXHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbitcdFx0XHRwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLVx1MDAzZXBhZ2UpO1xuK1x0XHRcdHJldCA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xuK1x0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwdGVfdW5tYXAodm1mLVx1MDAzZXB0ZSk7XG4rXHRcdFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi1cdTAwM2VwdGwpO1xuK1x0XHR9XG4rXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2h3cG9pc29uKGVudHJ5KSkge1xuK1x0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjtcbitcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSkge1xuK1x0XHRyZXQgPSBoYW5kbGVfcHRlX21hcmtlcih2bWYpO1xuK1x0fSBlbHNlIHtcbitcdFx0cHJpbnRfYmFkX3B0ZSh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCB2bWYtXHUwMDNlb3JpZ19wdGUsIE5VTEwpO1xuK1x0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK1xuK3VubG9jazpcbitcdGlmICh2bWYtXHUwMDNlcHRlKVxuK1x0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLypcbiAgKiBXZSBlbnRlciB3aXRoIGVpdGhlciB0aGUgVk1BIGxvY2sgb3IgdGhlIG1tYXBfbG9jayBoZWxkIChzZWVcbiAgKiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSwgYW5kIHB0ZSBtYXBwZWQgYnV0IG5vdCB5ZXQgbG9ja2VkLlxuQEAgLTQ4NDUsNTYgKzQ5MTMsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcbiBcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUodm1mLVx1MDAzZW9yaWdfcHRlKTtcbiBcdGlmICh1bmxpa2VseSghc29mdGxlYWZfaXNfc3dhcChlbnRyeSkpKSB7XG4tXHRcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XG4tXHRcdFx0bWlncmF0aW9uX2VudHJ5X3dhaXQodm1hLVx1MDAzZXZtX21tLCB2bWYtXHUwMDNlcG1kLFxuLVx0XHRcdFx0XHQgICAgIHZtZi1cdTAwM2VhZGRyZXNzKTtcbi1cdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xuLVx0XHRcdHZtZi1cdTAwM2VwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4tXHRcdFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcbi1cdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbi1cdFx0XHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XG4tXHRcdFx0XHQvKlxuLVx0XHRcdFx0ICogbWlncmF0ZV90b19yYW0gaXMgbm90IHlldCByZWFkeSB0byBvcGVyYXRlXG4tXHRcdFx0XHQgKiB1bmRlciBWTUEgbG9jay5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4tXHRcdFx0XHRyZXQgPSBWTV9GQVVMVF9SRVRSWTtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuLVx0XHRcdHZtZi1cdTAwM2VwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCxcbi1cdFx0XHRcdFx0dm1mLVx1MDAzZWFkZHJlc3MsIFx1MDAyNnZtZi1cdTAwM2VwdGwpO1xuLVx0XHRcdGlmICh1bmxpa2VseSghdm1mLVx1MDAzZXB0ZSB8fFxuLVx0XHRcdFx0ICAgICAhcHRlX3NhbWUocHRlcF9nZXQodm1mLVx1MDAzZXB0ZSksXG4tXHRcdFx0XHRcdFx0XHR2bWYtXHUwMDNlb3JpZ19wdGUpKSlcbi1cdFx0XHRcdGdvdG8gdW5sb2NrO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogR2V0IGEgcGFnZSByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgcGFnZSBjYW4ndCBiZVxuLVx0XHRcdCAqIGZyZWVkLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICh0cnlsb2NrX3BhZ2Uodm1mLVx1MDAzZXBhZ2UpKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwO1xuLVxuLVx0XHRcdFx0Z2V0X3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuLVx0XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbi1cdFx0XHRcdHBnbWFwID0gcGFnZV9wZ21hcCh2bWYtXHUwMDNlcGFnZSk7XG4tXHRcdFx0XHRyZXQgPSBwZ21hcC1cdTAwM2VvcHMtXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcbi1cdFx0XHRcdHVubG9ja19wYWdlKHZtZi1cdTAwM2VwYWdlKTtcbi1cdFx0XHRcdHB1dF9wYWdlKHZtZi1cdTAwM2VwYWdlKTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cHRlX3VubWFwKHZtZi1cdTAwM2VwdGUpO1xuLVx0XHRcdFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi1cdTAwM2VwdGwpO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkpIHtcbi1cdFx0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjtcbi1cdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKSB7XG4tXHRcdFx0cmV0ID0gaGFuZGxlX3B0ZV9tYXJrZXIodm1mKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwcmludF9iYWRfcHRlKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VvcmlnX3B0ZSwgTlVMTCk7XG4tXHRcdFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuLVx0XHR9XG4rXHRcdHJldCA9IGRvX25vbl9zd2FwX3BhZ2Uodm1mKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMToxNS42MDIzODU3NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTUwMDIxMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoOiBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBtbS9tZW1vcnkuY2AuIEZyb20gd2hhdCBJIHNlZSwgaXQncyBlc3NlbnRpYWxseSByZWZhY3RvcmluZyB0aGUgYGRvX3N3YXBfcGFnZWAgZnVuY3Rpb24uIFRoZSBrZXkgbW92ZSBpcyBleHRyYWN0aW5nIHRoZSBub24tc3dhcCBzb2Z0bGVhZiBlbnRyeSBoYW5kbGluZyBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgZG9fbm9uX3N3YXBfcGFnZWAuIEl0IGxvb2tzIGxpa2UgYSBjbGVhbiBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLCB3aGljaCBpcyBnb29kLlxuXG5CdXQgaXQncyBtb3JlIHRoYW4ganVzdCBhIGNvZGUgb3JnYW5pemF0aW9uIGV4ZXJjaXNlLCBJIHNlZSB0aGF0IHRoZXkgYXJlIHN3YXBwaW5nIG91dCB0aGUgbGVnYWN5IGBwYWdlYCBvcGVyYXRpb25zIHdpdGggdGhlaXIgYGZvbGlvYCBjb3VudGVycGFydHMsIHN1Y2ggYXMgYHRyeWxvY2tfcGFnZWAgd2l0aCBgZm9saW9fdHJ5bG9ja2AsIGBnZXRfcGFnZWAgd2l0aCBgZm9saW9fZ2V0YCwgYW5kIHNvIG9uLiBUaGF0IGlzIGludGVyZXN0aW5nLCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IG1vcmUgc3Vic3RhbnRpYWwgdGhhbiBqdXN0IHJlb3JnYW5pemF0aW9uLlxuXG5UaGUgYmlnZ2VyIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidCwgeWVzLiBBbnkgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGxpa2UgYGRvX3N3YXBfcGFnZWAgKG9yIGluIHRoaXMgY2FzZSwgdGhlIGV4dHJhY3RlZCBgZG9fbm9uX3N3YXBfcGFnZWApIG5lZWRzIHRvIGJlIHNjcnV0aW5pemVkLiBUaGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMg4oCTIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgZnVuY3Rpb24gYW5kIHRoZSBjaGFuZ2Ugb2YgZnVuZGFtZW50YWwgcGFnZSBvcGVyYXRpb25zIOKAkyBhcmUgcGVyZmVjdCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuIGBkb19ub25fc3dhcF9wYWdlYCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgYXMgdGhlIHByaW1hcnkgdGFyZ2V0LiBJdCdzIG5ldyBhbmQgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgdGhhdCB3YXMgcmVmYWN0b3JlZC4gYGRvX3N3YXBfcGFnZWAgaXRzZWxmIGlzIGFsc28gYSB2YWxpZCB0YXJnZXQsIGFsdGhvdWdoIGl0J3MgbGlrZWx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGl0IG1heSBuZWVkIGEgdGFyZ2V0ZWQgYXBwcm9hY2guIE9oLCB3YWl0LCBgZG9fbm9uX3N3YXBfcGFnZWAgaXMgc3RhdGljLCB3aGljaCBpcyBhY3R1YWxseSBncmVhdCBiZWNhdXNlIHRoaXMgc2ltcGxpZmllcyB0aGUgZnV6emluZyBzZXR1cC5cblxuRmluYWxseSwgd2hhdCBhYm91dCBhbnkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnM/IGBtbS9tZW1vcnkuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLCB3aGljaCBpcyBncmVhdCBiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgb3IgYG1pZ3JhdGVfdG9fcmFtYCB0aG91Z2gsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEEgcXVpY2sgZ3JlcCBvZiB0aGUgY29kZSBzaG91bGQgcmV2ZWFsIGlmIHRoZXNlIGFyZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjIzLjc1MjQxMjMxNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDk4ODAxNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0xMDQ5PXN0YXRpYyB2b2lkIHNtYXBzX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTA4Mi1cXHRcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjEwODM6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTA4NC1cXHRcXHRcXHRcXHRwcmVzZW50ID0gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI1Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjgtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjY5OiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3MC0gKiB3cml0YWJsZSBlbnRyeT9cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3NS0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNzY6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4MS0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODI6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlIGVudHJ5P1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4My0gKiBAZW50cnk6IExlYWYgZW50cnkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODYtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjg3OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0zNTU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2hhc19wZm4oc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2MS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNjI6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNjMtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MDQ9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDY6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX2Zyb21fcG1kKHBtZCkpO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MzU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3ZhbGlkX3BtZF9lbnRyeShzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM3LVxcdC8qIE9ubHkgZGV2aWNlIHByaXZhdGUsIG1pZ3JhdGlvbiBlbnRyaWVzIHZhbGlkIGZvciBQTUQuICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjM4OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MzktXFx0XFx0c29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KTtcXG4tLVxcbm1tL2htbS5jPTI0MT1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaG1tLmMtMjcyLVxcdFxcdCAqL1xcbm1tL2htbS5jOjI3MzpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vaG1tLmMtMjc0LVxcdFxcdCAgICBwYWdlX3BnbWFwKHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpKS1cXHUwMDNlb3duZXIgPT1cXG4tLVxcbm1tL2htbS5jLTI3Ni1cXHRcXHRcXHRjcHVfZmxhZ3MgPSBITU1fUEZOX1ZBTElEO1xcbm1tL2htbS5jOjI3NzpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL2htbS5jLTI3OC1cXHRcXHRcXHRcXHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcXG4tLVxcbm1tL2htbS5jLTI5MC1cXG5tbS9obW0uYzoyOTE6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9obW0uYy0yOTItXFx0XFx0XFx0Z290byBmYXVsdDtcXG4tLVxcbm1tL2htbS5jPTM0MT1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9obW0uYy0zNTEtXFxubW0vaG1tLmM6MzUyOlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9obW0uYy0zNTMtXFx0ICAgIHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KS1cXHUwMDNlcGdtYXAtXFx1MDAzZW93bmVyID09XFxuLS1cXG5tbS9obW0uYy0zNTktXFxubW0vaG1tLmM6MzYwOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vaG1tLmMtMzYxLVxcdFxcdFxcdGNwdV9mbGFncyB8PSBITU1fUEZOX1dSSVRFO1xcbi0tXFxubW0vaG1tLmMtMzc4LVxcdGlmIChyZXF1aXJlZF9mYXVsdCkge1xcbm1tL2htbS5jOjM3OTpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbm1tL2htbS5jLTM4MC1cXHRcXHRcXHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTgwOT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODI4LVxcdFxcdHNldF9wbWRfYXQoc3JjX21tLCBhZGRyLCBzcmNfcG1kLCBwbWQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTgyOTpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzMC1cXHRcXHQvKlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODMzLVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTgzNDpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0xODM1LVxcdFxcdFxcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI2MDE9c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNjIyLVxcdFxcdFxcdG5ld3BtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KG5ld3BtZCk7XFxubW0vaHVnZV9tZW1vcnkuYzoyNjIzOlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0yNjI0LVxcdFxcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwOTc9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxOTAtXFxubW0vaHVnZV9tZW1vcnkuYzozMTkxOlxcdFxcdHdyaXRlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzE5Mi1cXHRcXHRhbm9uX2V4Y2x1c2l2ZSA9IFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00OTYxPWludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ5OTAtXFxubW0vaHVnZV9tZW1vcnkuYzo0OTkxOlxcdFxcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUob2xkX2VudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jLTQ5OTItXFx0XFx0c29mdGRpcnR5ID0gcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZHZhbCk7XFxuLS1cXG5tbS9tZW1vcnkuYz0xMDAxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9tZW1vcnkuYy0xMDQzLVxcdFxcdH1cXG5tbS9tZW1vcnkuYzoxMDQ0OlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtMTA0NS1cXHRcXHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XFxuLS1cXG5tbS9tZW1vcnkuYy0xMDY4LVxcdFxcdCAqL1xcbm1tL21lbW9yeS5jOjEwNjk6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbW9yeS5jLTEwNzAtXFx0XFx0ICAgIGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkge1xcbi0tXFxubW0vbWVtb3J5LmM9MTgxMT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODIwLVxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbm1tL21lbW9yeS5jOjE4MjE6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21lbW9yeS5jLTE4MjItXFx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XFxuLS1cXG5tbS9tZW1vcnkuYz00ODE4PXN0YXRpYyB2bV9mYXVsdF90IGRvX25vbl9zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00ODMxLVxcdFxcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XFxubW0vbWVtb3J5LmM6NDgzMjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbm1tL21lbW9yeS5jLTQ4MzMtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNz1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE2OS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE3MDpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTcxLVxcdFxcdCAgICAhKG1pZ3JhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSkge1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xODEtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxODI6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTE4My1cXHRcXHRcXHR3cml0ZSA9IE1JR1JBVEVfUEZOX1dSSVRFO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjk5LVxcdFxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjMwMDpcXHRcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTMwMS1cXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTMzMy1cXHRcXHRcXHRcXHRcXHRNSUdSQVRFX1BGTl9NSUdSQVRFO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzM0OlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMzUtXFx0XFx0XFx0XFx0bXBmbiB8PSBNSUdSQVRFX1BGTl9XUklURTtcXG4tLVxcbm1tL21wcm90ZWN0LmM9MjE0PXN0YXRpYyBsb25nIGNoYW5nZV9zb2Z0bGVhZl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tcHJvdGVjdC5jLTIzNi1cXHRcXHRcXHRuZXdwdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShuZXdwdGUpO1xcbm1tL21wcm90ZWN0LmM6MjM3OlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XFxubW0vbXByb3RlY3QuYy0yMzgtXFx0XFx0LypcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xOTM9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2NhY2hlZF93cml0YWJsZShzb2Z0bGVhZl90IGVudHJ5KVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xOTQte1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxOTU6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSB8fFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xOTYtXFx0XFx0c29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcwLVxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjcxOlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzItXFx0XFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzMC1cXHRcXHQvKiBIYW5kbGUgdW4tYWRkcmVzc2FibGUgWk9ORV9ERVZJQ0UgbWVtb3J5ICovXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTMxOlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTMyLVxcdFxcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXFxuLS1cXG5tbS9ybWFwLmM9MjQ2MT1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjY0OS1cXG5tbS9ybWFwLmM6MjY1MDpcXHRcXHRcXHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcXG5tbS9ybWFwLmMtMjY1MS1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjI5Ljg1MTIzNDI5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzQzNzkyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBhcmVhIG9mIGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgRGV2aWNlIFByaXZhdGUgTWVtb3J5IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyBcImRldmljZSBwcml2YXRlIG1lbW9yeVwiIGFuZCB0aGF0J3MgaW1tZWRpYXRlbHkgdHJpZ2dlcmluZyBhIGNvbm5lY3Rpb24gdG8gYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGluIGBtbS9LY29uZmlnYCDigJMgYmVjYXVzZSBtZW1vcnkgbWFuYWdlbWVudCBpcyB3aGVyZSBkZXZpY2Utc3BlY2lmaWMgbWVtb3J5IGFzc2lnbm1lbnRzIHdvdWxkIGJlIGxpa2VseSBoYW5kbGVkLiBCdXQgYGxpYi9LY29uZmlnYCBpcyBhbHNvIGEgcG9zc2libGUgbG9jYXRpb24sIHNpbmNlIHRoZSBgREVWSUNFX1BSSVZBVEVgIHBhcmFtZXRlciBtaWdodCByZXByZXNlbnQgYSBnZW5lcmljIHNldHRpbmcuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuIEknbGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gbG9jYXRpb25zIGFuZCB0cmFjZSB0aGUgcmVmZXJlbmNlcyBpZiBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTozMy4zODU2MTc0NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0NTQ1Mzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX1BSSVZBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjQ4PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI1MC1cXG5tbS9LY29uZmlnOjEyNTE6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjUyLVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MzguMjMxMTE0NDYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0MzI0NTMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBLZXJuZWwgU29mdGxlYWYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIHNldHRpbmcuIFRoYXQncyBvbmUgY29uZmlnIHJlbGF0ZWQgdG8gdGhpcyBzb2Z0bGVhZiBzeXN0ZW0sIEkga25vdyB0aGF0IGZvciBjZXJ0YWluLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUgSSd2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBlbnVtZXJhdGUgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy5cblxuTGV0J3Mgc2Vl4oCmIEkgcmVjYWxsIHRoZXJlJ3MgYSBjb25uZWN0aW9uIGJldHdlZW4gYHNvZnRsZWFmX2lzX21pZ3JhdGlvbmAgYW5kIHNvbWV0aGluZyBjYWxsZWQgYENPTkZJR19NSUdSQVRJT05gLiBSaWdodCwgbWFrZXMgc2Vuc2UsIHRoYXQgdGllcyBpbiB3aXRoIG1lbW9yeSBtaWdyYXRpb24uIEFuZCBgc29mdGxlYWZfaXNfaHdwb2lzb25gIHNlZW1zIHRvIHJlbGF0ZSB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZXJyb3JzLiBGaW5hbGx5LCB0aGVyZSdzIGBzb2Z0bGVhZl9pc19tYXJrZXJgLCB3aGljaCBzb3VuZHMgbGlrZSBpdCdzIGNvbm5lY3RlZCB0byBgQ09ORklHX1BURV9NQVJLRVJgLlxuXG5UbyBnZXQgYSBkZWZpbml0aXZlIHBpY3R1cmUgb2YgdGhlc2UgY29ubmVjdGlvbnMgYW5kIHBvdGVudGlhbGx5IGZpbmQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJ2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gYG1tL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJJ2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhvc2UgYXNzb2NpYXRpb25zIGFuZCBsb29rIGZvciBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBtYXkgcmVsYXRlIHRvIHRoZSBzb2Z0bGVhZiBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjQxLjk3NDM2Mjg5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjkzNTg1MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02NzE9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY4MS1cXG5tbS9LY29uZmlnOjY4Mjpjb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTo0OC4yNjc5NTQwNTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTA1MjE3NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNZW1vcnkgRmFpbHVyZSBhbmQgUGFnZSBUYWJsZSBFbnRyaWVzIC0gQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGZldyB0aGluZ3MuIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiBgY29uZmlnIE1FTU9SWV9GQUlMVVJFYC4gV2UgYWxsIGtub3cgd2hhdCBpdCAqc2hvdWxkKiBkbywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIHdoYXQgSSBleHBlY3QgaW4gKnRoaXMqIGFyY2hpdGVjdHVyZS9rZXJuZWwgdmVyc2lvbi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB1bmNvcnJlY3RhYmxlIG1lbW9yeSBlcnJvcnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJ1bm5pbmcgcHJvY2Vzc2VzLCBhbmQgdGhlIHRyYWRlb2ZmcyBiZXR3ZWVuIGZhdWx0IHRvbGVyYW5jZSBhbmQgc3lzdGVtIHJlc3BvbnNpdmVuZXNzLiBBcmUgd2UgbG9nZ2luZyBlbm91Z2ggaW5mb3JtYXRpb24/IEFyZSB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMgcm9idXN0IGVub3VnaCBmb3IgdGhlIGV4cGVjdGVkIHdvcmtsb2Fkcz8gRG9lcyB0aGUgY2hvc2VuIHBvbGljeSBjb3JyZWN0bHkgYmFsYW5jZSBtaW5pbWl6aW5nIGRhdGEgbG9zcyBhbmQgbWF4aW1pemluZyB0aGUgY2hhbmNlIG9mIHJlY292ZXJ5P1xuXG5UaGVuLCBJJ2xsIHF1aWNrbHkgbG9vayBhdCBgY29uZmlnIFBURV9NQVJLRVJgLiBXaGF0ICpleGFjdGx5KiBhcmUgdGhlIGZsYWdzIHdlJ3JlIHVzaW5nPyBJdCdzIG5vdCBqdXN0IGFib3V0IHRoZSAqcHJlc2VuY2UqIG9mIHRoZSBtYXJrZXIsIGJ1dCB3aGF0IGl0ICptZWFucyogaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBBcmUgd2UgdXNpbmcgdGhlIG1hcmtlciBmb3IgZGVidWdnaW5nLCBzZWN1cml0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFyZSBhbHdheXMgYSBjb25jZXJuOyBhcmUgdGhlc2UgbWFya2VycyBiZWluZyBoYW5kbGVkIGVmZmljaWVudGx5IGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzLCBvciBpcyB0aGVyZSBhIG1lYXN1cmFibGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQ/IEl0J3MganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBzdXJlIHdlJ3JlIG9uIHRoZSByaWdodCB0cmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA5OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjU0LjM3MzE3NTQ4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzODg2NjI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NjA9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzYyLVxcbm1tL0tjb25maWc6NzYzOmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzY0LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjU5LjkxMjA1MTY3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg3MTc4MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIENvbmZpZ3VyYXRpb24gLSBQVEVfTUFSS0VSKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHN0YXR1cyBhbmQgZGVmaW5pdGlvbiBvZiBgY29uZmlnIFBURV9NQVJLRVJgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGUga2VybmVsLCBwcm9iYWJseSByZWxhdGVkIHRvIHBhZ2UgdGFibGUgZW50cmllcy4gVGhlIHRlcm0gXCJNQVJLRVJcIiBpbXBsaWVzIGl0J3MgdXNlZCBmb3Igc29tZSBraW5kIG9mIHRyYWNraW5nIG9yIGxhYmVsaW5nIHdpdGhpbiB0aG9zZSBlbnRyaWVzLCBwb3NzaWJseSBmb3IgZGVidWdnaW5nLCBzZWN1cml0eSwgb3IgbWVtb3J5IG1hbmFnZW1lbnQgcHVycG9zZXMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlLiBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpb24/IFdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgd2hlbiBpdCdzIHNlbGVjdGVkPyBNb3JlIHNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBkZXRlcm1pbmUgaXRzIGltcGFjdCBvbiB0aGUgUFRFIHN0cnVjdHVyZSBpdHNlbGYg4oCTIGRvZXMgaXQgYWRkIGEgYml0LCBhIGZpZWxkLCBvciBhIG1vcmUgY29tcGxleCBtZXRhZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBlbnRyeT8gSSdsbCBhbHNvIHdhbnQgdG8ga25vdyBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHNlY3VyaXR5IHN1YnN5c3RlbXMuIEZvciBleGFtcGxlLCBkb2VzIGl0IHBsYXkgYSByb2xlIGluIGFkZHJlc3Mgc3BhY2UgbGF5b3V0IHJhbmRvbWl6YXRpb24gKEFTTFIpLCBrZXJuZWwgYWRkcmVzcyBzcGFjZSByYW5kb21pemF0aW9uIChLQVNMUiksIG9yIHBlcmhhcHMgZXZlbiBzb21lIGZvcm0gb2Yga2VybmVsIHRhaW50IHRyYWNraW5nPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIHN1Y2ggYXMgaW5jcmVhc2VkIG92ZXJoZWFkIGR1cmluZyBUTEIgc2hvb3Rkb3ducyBvciBwYWdlIHRhYmxlIHdhbGtzP1xuXG5CYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgSSBjYW4gZGVkdWNlIGhvdyBpdCBtaWdodCBiZSB1c2VkLiBEb2VzIGl0IGluZmx1ZW5jZSB0aGUgdmlydHVhbCBtZW1vcnkgbWFwIG9yIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUFRFJ3MgdXNhZ2UgYW5kIG93bmVyc2hpcD9cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBhc3Nlc3MgaXRzIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSB3YW50IHRvIGtub3cgaXRzIGltcGFjdCBvbiBtZW1vcnkgcHJvdGVjdGlvbiwgZGVidWdnaW5nIGNhcGFiaWxpdGllcywgYW5kIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjowNC4yOTkyMzMzNDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjk4MzkxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURV9NQVJLRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6MDkuNjI5MDgyMjYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDA5NDcwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gUFRFIE1hcmtlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYFBURV9NQVJLRVJgIGlzIHNldCB0byBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAuIFRoYXQgcmluZ3MgYSBiZWxsLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb24gb2YgdGhhdCBtYXJrZXIgbG9naWMgcmVzaWRlcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzb2Z0bGVhZl9pc19tYXJrZXJgLiBHb3R0YSBiZSBzdXJlIGFib3V0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjoxMy4wMzAwMzM0MDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjEyODIzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdGxlYWZfaXNfbWFya2VyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0yNjM2PXN0YXRpYyB2b2lkIG1ha2VfdWZmZF93cF9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNjQ5LVxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyNjUwOlxcdGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkgfHwgc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY1MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0zMTU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2h3cG9pc29uKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMjAtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzIxOiAqIHNvZnRsZWFmX2lzX21hcmtlcigpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgbWFya2VyP1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMyMi0gKiBAZW50cnk6IExlYWYgZW50cnkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMjUtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzI2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMjcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzMyLSAqIHNvZnRsZWFmX3RvX21hcmtlcigpIC0gT2J0YWluIG1hcmtlciBhc3NvY2lhdGVkIHdpdGggbGVhZiBlbnRyeS5cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozMzM6ICogQGVudHJ5OiBMZWFmIGVudHJ5LCBzb2Z0bGVhZl9pc19tYXJrZXIoQGVudHJ5KSBtdXN0IHJldHVybiB0cnVlLlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMzNC0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzM3PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBzb2Z0bGVhZl90b19tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMzgte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjMzOTpcXHRWTV9XQVJOX09OX09OQ0UoIXNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ0NT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfcG9pc29uX21hcmtlcihzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ0Ni17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDQ3OlxcdGlmICghc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NDgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NDU5PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19ndWFyZF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NjAte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ2MTpcXHRpZiAoIXNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDYyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ3Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00Nzcte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ3ODpcXHRpZiAoIXNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDc5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU0NT1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX21hcmtlcihwdGVfdCBwdGUpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTQ2LXtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1NDc6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX21hcmtlcihzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpKTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01NDgtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTc0PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfdWZmZF9tYXJrZXIocHRlX3QgcHRlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTc3LVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU3ODpcXHRpZiAoIXNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTc5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL21lbW9yeS5jPTEwMDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL21lbW9yeS5jLTEwODgtXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxubW0vbWVtb3J5LmM6MTA4OTpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy0xMDkwLVxcdFxcdHB0ZV9tYXJrZXIgbWFya2VyID0gY29weV9wdGVfbWFya2VyKGVudHJ5LCBkc3Rfdm1hKTtcXG4tLVxcbm1tL21lbW9yeS5jPTQ4MTg9c3RhdGljIHZtX2ZhdWx0X3QgZG9fbm9uX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ4NzAtXFx0XFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT047XFxubW0vbWVtb3J5LmM6NDg3MTpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy00ODcyLVxcdFxcdHJldCA9IGhhbmRsZV9wdGVfbWFya2VyKHZtZik7XFxuLS1cXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbXByb3RlY3QuYy0yNDUtXFx0XFx0XFx0bmV3cHRlID0gcHRlX3N3cF9ta3VmZmQobmV3cHRlKTtcXG5tbS9tcHJvdGVjdC5jOjI0NjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcXG5tbS9tcHJvdGVjdC5jLTI0Ny1cXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjoxOS4yNTEzMjIwNjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwNjQyMjM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBNZW1vcnkgTWFuYWdlbWVudCBDb3JlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudC4gSXQgbG9va3MgbGlrZSBgZG9fc3dhcF9wYWdlYCBpcyBiZWluZyBzcGxpdCBpbnRvIGBkb19ub25fc3dhcF9wYWdlYCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZy4gVGhleSdyZSBhbHNvIHVwZGF0aW5nIHNvbWUgY3J1Y2lhbCBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgZnVuY3Rpb25zOiBgdHJ5bG9ja19wYWdlYCBpcyBub3cgYGZvbGlvX3RyeWxvY2tgLCBhbmQgYGdldF9wYWdlYCBpcyBiZWNvbWluZyBgZm9saW9fZ2V0YC4gVGhpcyBpcyBkZWZpbml0ZWx5IGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHNwYWNlLiBJdCBzdWdnZXN0cyBhIG1vdmUgdG93YXJkIGZvbGlvLWJhc2VkIG9wZXJhdGlvbnMsIGxpa2VseSBhaW1pbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZSBvciBmbGV4aWJpbGl0eS5cblxuUmlnaHQsIGxldCdzIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBpbXBhY3RlZC4gVGhlIGNvbmZpZ3MgdGhhdCBhcmUgZW5hYmxlZCBzdWdnZXN0IHRoaXMgaXMgdGllZCB0byBwcml2YXRlIGRldmljZXMsIG1pZ3JhdGlvbiwgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcsIGFuZCBVRkZEIHdpdGggd3JpdGUgcHJvdGVjdGlvbiBtYXJrZXJzIChgUFRFX01BUktFUl9VRkZEX1dQYCkuIEhvbGQgb24gYSBzZWNvbmQsIHRoYXQgVUZGRCBXUCBtYXJrZXIsIEknbSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IG1pZ2h0IG5vdCBiZSB0aGUgKm9ubHkqIG1hcmtlciB0aGlzIGNoYW5nZSBjb25jZXJucy4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgY29uZmlnIFBURV9NQVJLRVJgIGVudHJ5IGluIGBtbS9LY29uZmlnYCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZS4gR290dGEgYmUgdGhvcm91Z2ggd2l0aCBjaGFuZ2VzIHRoaXMgbG93LWxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjoyNC4xNTc3NDc4MzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjY5ODk5ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURV9NQVJLRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6MjkuNzg0NzQ0NTU0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzI4Mzc1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFBURSBNYXJrZXIgRGVmaW5pdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGBQVEVfTUFSS0VSYCBtYWNybyBpcyBkZWZpbmVkLiBTZWVtcyBsaWtlIHRoZSBzdGFuZGFyZCBwbGFjZXMgdG8gbG9vayBhcmUgZ29pbmcgdG8gYmUgaW4gdGhlIGtlcm5lbCBoZWFkZXJzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAgZmlyc3QsIHNpbmNlIHRoYXQncyB3aGVyZSBhIGxvdCBvZiB0aGUgcGFnZSB0YWJsZSByZWxhdGVkIG1hY3JvcyB0ZW5kIHRvIGxpdmUuIElmIGl0IGlzbid0IHRoZXJlLCBvciBpZiBpdCdzIHNvbWVob3cgZGVwZW5kZW50IG9uIGEgS2NvbmZpZyBvcHRpb24sIHRoZW4gSSdsbCBkZWx2ZSBpbnRvIGBtbS9LY29uZmlnYC4gSXQncyBwb3NzaWJsZSBpdCdzIGNvbnRyb2xsZWQgYnkgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgZmVhdHVyZSBjb25maWd1cmF0aW9uLCBzbyBrbm93aW5nIGl0cyBleGFjdCBkZWZpbml0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuIEknbGwgcHJpb3JpdGl6ZSBlZmZpY2llbmN5IGFuZCBxdWlja2x5IHNjYW4gdGhvc2UgZmlsZXMgZm9yIGFueSBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjozNS41MTc1ODc1MzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzI2MDU5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURV9NQVJLRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6NDAuOTUwMjA0ODI1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzI2ODQzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgUFRFX01BUktFUmAgaGVyZS4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCBcIkhhbmcgb24gYSBzZWMsIHdhc24ndCB0aGF0IGEgY29uZmlndXJhdGlvbiBzeW1ib2w/XCIgSXQganVzdCAqZmVlbHMqIGxpa2UgYSBjb25maWcgb3B0aW9uLiBSaWdodCwgYmV0dGVyIGNvbmZpcm0gdGhhdCBpbnN0aW5jdC4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gZ28gZm9yIGNvbmZpcm1hdGlvbiBpcyBgbW0vS2NvbmZpZ2AsIHRoYXQncyB0aGUgaG9tZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCwgaXNuJ3QgaXQ/IExldCdzIGdvIGNoZWNrIGZvciBgUFRFX01BUktFUmAgdGhlcmUgYW5kIHNlZSB3aGF0IHdlIGZpbmQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRoaW5nIGlzIGRlZmluZWQgYW5kIGlmIEkgbmVlZCB0byB3b3JyeSBhYm91dCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgYWxsIHRoYXQgZnVuIGNvbmZpZyBzdHVmZiB0aGF0IGNhbiB0cmlwIHlvdSB1cC4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjIwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6NDYuMzgyODkyMzYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA4MCwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVEVfTUFSS0VSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiWW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLlxcbllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxcbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxcbnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6NDYuMzgyOTc3NDMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDgxODM2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBwcm9jZXNzIHRoaXPigKZcblxuKipBbmFseXppbmcgdGhlIFBURSBNYXJrZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBJIHJlY29nbml6ZSB0aGF0IGBQVEVfTUFSS0VSX1VGRkRfV1BgIGlzIHRoZSByZWxldmFudCBjb25maWcgaGVyZS4gVGhhdCBtYWtlcyBzZW5zZS4gQnV0IGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBkb3VibGUtY2hlY2sgYGNvbmZpZyBQVEVfTUFSS0VSYCB3aXRoaW4gYG1tL0tjb25maWdgLiBXYWl0LCBob2xkIG9uIGEgc2Vjb25k4oCmIEkndmUgYWxyZWFkeSBzY3J1dGluaXplZCB0aGF0IEtjb25maWcgZW50cnksIGhhdmVuJ3QgST8gTm8gbmVlZCB0byByZS10cmVhZCB0aGF0IGdyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjo1MS4zMzExNjQ2MDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDQxMzg5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUFRFX01BUktFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3VzZXJmYXVsdGZkLnJzdD0zOTM9UldQIG1hcmtlcjogdGhlIG5leHQgYWNjZXNzIHJlLXBvcHVsYXRlcyB0aGUgcmFuZ2Ugd2l0aG91dCBwcm90ZWN0aW9uLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdXNlcmZhdWx0ZmQucnN0OjM5NDpVbmxpa2UgV1AgKHdoaWNoIHBlcnNpc3RzIHZpYSBgYFBURV9NQVJLRVJfVUZGRF9XUGBgKSwgdGhlcmUgaXMgbm9cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3VzZXJmYXVsdGZkLnJzdC0zOTUtcGVyc2lzdGVudCBSV1AgbWFya2VyIHRvZGF5LiBUaGUgdXNlciBuZWVkcyB0byByZS1hcm0gdGhlIHJhbmdlIHdpdGhcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTk0OT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zd3Bfb2Zmc2V0X3JzdGUoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE5NTgtICogVGhpcyBpcyBhbHNvIHRydWUgZm9yIHN3YXAgZW50cmllcywgYW5kIHRoZWlyIHN3YXAgdHlwZSBhbmQgb2Zmc2V0IGVuY29kaW5nLlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTk1OTogKiBGb3IgaHVnZXRsYmZzIFBURV9NQVJLRVIgc3VwcG9ydCwgczM5MCBoYXMgaW50ZXJuYWwgX19zd3BfdHlwZV9yc3RlKCkgYW5kXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xOTYwLSAqIF9fc3dwX29mZnNldF9yc3RlKCkgaGVscGVycyB0byBjb3JyZWN0bHkgaGFuZGxlIFJTVEUgc3dhcCBlbnRyaWVzLlxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTI1MDM9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNTEzLVxcdFxcdHNldF9wdGVfYXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxcbmZzL3Byb2MvdGFza19tbXUuYzoyNTE0OlxcdFxcdFxcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjUxNS1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTI2MzY9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX2h1Z2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI2NDQtXFx0XFx0c2V0X2h1Z2VfcHRlX2F0KHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsXFxuZnMvcHJvYy90YXNrX21tdS5jOjI2NDU6XFx0XFx0XFx0XFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksIHBzaXplKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY0Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oPTE2PXN0YXRpYyBpbmxpbmUgYm9vbCB1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcih2b2lkKVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTcte1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg6MTg6XFx0cmV0dXJuIHBndGFibGVfc3VwcG9ydHNfdWZmZCgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUCk7XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaC0xOS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0xNjA9c3RhdGljIGlubGluZSBlbnVtIHNvZnRsZWFmX3R5cGUgc29mdGxlYWZfdHlwZShzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTkyLSNlbmRpZlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE5MzpcXHRjYXNlIFNXUF9QVEVfTUFSS0VSOlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTE5NC1cXHRcXHRyZXR1cm4gU09GVExFQUZfTUFSS0VSO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzM3PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBzb2Z0bGVhZl90b19tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0MC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNDE6XFx0cmV0dXJuIHN3cF9vZmZzZXQoZW50cnkpIFxcdTAwMjYgUFRFX01BUktFUl9NQVNLO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0Mi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00NDU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3BvaXNvbl9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ0OS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0NTA6XFx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXFx1MDAyNiBQVEVfTUFSS0VSX1BPSVNPTkVEO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ1MS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00NTk9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2d1YXJkX21hcmtlcihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDYzLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ2NDpcXHRyZXR1cm4gc29mdGxlYWZfdG9fbWFya2VyKGVudHJ5KSBcXHUwMDI2IFBURV9NQVJLRVJfR1VBUkQ7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDY1LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ3Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ4MC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0ODE6XFx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1A7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDgyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTU1PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBjb3B5X3B0ZV9tYXJrZXIoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU1OS1cXHQvKiBBbHdheXMgY29weSBlcnJvciBlbnRyaWVzLiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYwOlxcdHB0ZV9tYXJrZXIgZHN0bSA9IHNyY20gXFx1MDAyNiAoUFRFX01BUktFUl9QT0lTT05FRCB8IFBURV9NQVJLRVJfR1VBUkQpO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYxLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYyLVxcdC8qIE9ubHkgY29weSBQVEUgbWFya2VycyBpZiBVRkZEIHJlZ2lzdGVyIG1hdGNoZXMuICovXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1NjM6XFx0aWYgKChzcmNtIFxcdTAwMjYgUFRFX01BUktFUl9VRkZEX1dQKSBcXHUwMDI2XFx1MDAyNiB1c2VyZmF1bHRmZF93cChkc3Rfdm1hKSlcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjU2NDpcXHRcXHRkc3RtIHw9IFBURV9NQVJLRVJfVUZGRF9XUDtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU2NS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTgyPXB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTYxNC1cXHRcXHRzZXRfcHRlX2F0KHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSxcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjYxNTpcXHRcXHRcXHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC02MTYtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD0yOT1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTQtICovXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTU6I2RlZmluZSBTV1BfUFRFX01BUktFUl9OVU0gMVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjU2OiNkZWZpbmUgU1dQX1BURV9NQVJLRVIgICAgIChNQVhfU1dBUEZJTEVTICsgU1dQX0hXUE9JU09OX05VTSArIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01Ny1cXHRcXHRcXHQgICAgU1dQX01JR1JBVElPTl9OVU0gKyBTV1BfREVWSUNFX05VTSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTExMC1cXHRTV1BfTUlHUkFUSU9OX05VTSAtIFNXUF9IV1BPSVNPTl9OVU0gLSBcXFxcXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6MTExOlxcdFNXUF9QVEVfTUFSS0VSX05VTSlcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0xMTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0yODE9dHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV9tYXJrZXI7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjgyLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjI4MzojZGVmaW5lICBQVEVfTUFSS0VSX1VGRkRfV1BcXHRcXHRcXHRCSVQoMClcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0yODQtLypcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI5Mi0gKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoyOTM6I2RlZmluZSAgUFRFX01BUktFUl9QT0lTT05FRFxcdFxcdFxcdEJJVCgxKVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI5NC0vKlxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjk4LSAqL1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjI5OTojZGVmaW5lICBQVEVfTUFSS0VSX0dVQVJEXFx0XFx0XFx0QklUKDIpXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzAwOiNkZWZpbmUgIFBURV9NQVJLRVJfTUFTS1xcdFxcdFxcdChCSVQoMykgLSAxKVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMwMS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMDI9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3B0ZV9tYXJrZXJfZW50cnkocHRlX21hcmtlciBtYXJrZXIpXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzAzLXtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMDQ6XFx0cmV0dXJuIHN3cF9lbnRyeShTV1BfUFRFX01BUktFUiwgbWFya2VyKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMDUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzEyPXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9wb2lzb25lZF9zd3BfZW50cnkodm9pZClcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMTMte1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMxNDpcXHRyZXR1cm4gbWFrZV9wdGVfbWFya2VyX2VudHJ5KFBURV9NQVJLRVJfUE9JU09ORUQpO1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMxNS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMTc9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMxOC17XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzE5OlxcdHJldHVybiBtYWtlX3B0ZV9tYXJrZXJfZW50cnkoUFRFX01BUktFUl9HVUFSRCk7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIwLX1cXG4tLVxcbm1tL0tjb25maWc9MTM4Mj1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTEzODgtXFxubW0vS2NvbmZpZzoxMzg5OmNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG5tbS9LY29uZmlnLTEzOTAtXFx0Ym9vbCBcXFwiVXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcXFwiXFxuLS1cXG5tbS9odWdldGxiLmM9NTIxMz12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTI3NC1cXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXFxubW0vaHVnZXRsYi5jOjUyNzU6XFx0XFx0XFx0XFx0XFx0XFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksXFxubW0vaHVnZXRsYi5jLTUyNzYtXFx0XFx0XFx0XFx0XFx0XFx0c3opO1xcbi0tXFxubW0vaHVnZXRsYi5jLTUzMTAtXFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLFxcbm1tL2h1Z2V0bGIuYzo1MzExOlxcdFxcdFxcdFxcdFxcdG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApLFxcbm1tL2h1Z2V0bGIuYy01MzEyLVxcdFxcdFxcdFxcdFxcdHN6KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz02MDEyPXZtX2ZhdWx0X3QgaHVnZXRsYl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNjA2OS1cXG5tbS9odWdldGxiLmM6NjA3MDpcXHRcXHRpZiAobWFya2VyIFxcdTAwMjYgUFRFX01BUktFUl9QT0lTT05FRCkge1xcbm1tL2h1Z2V0bGIuYy02MDcxLVxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIHxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MDczLVxcdFxcdFxcdGdvdG8gb3V0X211dGV4O1xcbm1tL2h1Z2V0bGIuYzo2MDc0OlxcdFxcdH0gZWxzZSBpZiAoV0FSTl9PTl9PTkNFKG1hcmtlciBcXHUwMDI2IFBURV9NQVJLRVJfR1VBUkQpKSB7XFxubW0vaHVnZXRsYi5jLTYwNzUtXFx0XFx0XFx0LyogVGhpcyBpc24ndCBzdXBwb3J0ZWQgaW4gaHVnZXRsYi4gKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYz02Mjc1PWludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXFxuLS1cXG5tbS9odWdldGxiLmMtNjMwNS1cXG5tbS9odWdldGxiLmM6NjMwNjpcXHRcXHRfZHN0X3B0ZSA9IG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1BPSVNPTkVEKTtcXG5tbS9odWdldGxiLmMtNjMwNy1cXHRcXHRzZXRfaHVnZV9wdGVfYXQoZHN0X21tLCBkc3RfYWRkciwgZHN0X3B0ZSwgX2RzdF9wdGUsIHNpemUpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTY0OTY9bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY1NzQtXFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLFxcbm1tL2h1Z2V0bGIuYzo2NTc1OlxcdFxcdFxcdFxcdFxcdFxcdG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApLFxcbm1tL2h1Z2V0bGIuYy02NTc2LVxcdFxcdFxcdFxcdFxcdFxcdHBzaXplKTtcXG4tLVxcbm1tL21hZHZpc2UuYz0xMTAzPXN0YXRpYyBpbnQgZ3VhcmRfaW5zdGFsbF9zZXRfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0LFxcbi0tXFxubW0vbWFkdmlzZS5jLTExMDgtXFx0LyogU2ltcGx5IGluc3RhbGwgYSBQVEUgbWFya2VyLCB0aGlzIGNhdXNlcyBzZWdmYXVsdCBvbiBhY2Nlc3MuICovXFxubW0vbWFkdmlzZS5jOjExMDk6XFx0KnB0ZXAgPSBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9HVUFSRCk7XFxubW0vbWFkdmlzZS5jLTExMTAtXFx0KCpucl9wYWdlcykrKztcXG4tLVxcbm1tL21lbW9yeS5jPTQ2MjA9c3RhdGljIHZtX2ZhdWx0X3QgcHRlX21hcmtlcl9jbGVhcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ2MzAtXFx0ICogVGhpcyBzaG91bGQgYWxzbyBjb3ZlciB0aGUgY2FzZSB3aGVyZSBlLmcuIHRoZSBwdGUgY2hhbmdlZFxcbm1tL21lbW9yeS5jOjQ2MzE6XFx0ICogcXVpY2tseSBmcm9tIGEgUFRFX01BUktFUl9VRkZEX1dQIGludG8gUFRFX01BUktFUl9QT0lTT05FRC5cXG5tbS9tZW1vcnkuYy00NjMyLVxcdCAqIFNvIHB0ZV9pc19tYXJrZXIoKSBjaGVjayBpcyBub3QgZW5vdWdoIHRvIHNhZmVseSBkcm9wIHRoZSBwdGUuXFxuLS1cXG5tbS9tZW1vcnkuYz00NjY0PXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfbWFya2VyKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDY3Ni1cXHQvKiBIaWdoZXIgcHJpb3JpdHkgdGhhbiB1ZmZkLXdwIHdoZW4gZGF0YSBjb3JydXB0ZWQgKi9cXG5tbS9tZW1vcnkuYzo0Njc3OlxcdGlmIChtYXJrZXIgXFx1MDAyNiBQVEVfTUFSS0VSX1BPSVNPTkVEKVxcbm1tL21lbW9yeS5jLTQ2NzgtXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX0hXUE9JU09OO1xcbi0tXFxubW0vbWVtb3J5LmMtNDY4MC1cXHQvKiBIaXR0aW5nIGEgZ3VhcmQgcGFnZSBpcyBhbHdheXMgYSBmYXRhbCBjb25kaXRpb24uICovXFxubW0vbWVtb3J5LmM6NDY4MTpcXHRpZiAobWFya2VyIFxcdTAwMjYgUFRFX01BUktFUl9HVUFSRClcXG5tbS9tZW1vcnkuYy00NjgyLVxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xcbi0tXFxubW0vbXByb3RlY3QuYz0zMzE9c3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbXByb3RlY3QuYy00MjctXFx0XFx0XFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXFxubW0vbXByb3RlY3QuYzo0Mjg6XFx0XFx0XFx0XFx0XFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xcbm1tL21wcm90ZWN0LmMtNDI5LVxcdFxcdFxcdFxcdHBhZ2VzKys7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTczND1zdGF0aWMgaW50IG1maWxsX2F0b21pY19wdGVfcG9pc29uKHN0cnVjdCBtZmlsbF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTc0My1cXG5tbS91c2VyZmF1bHRmZC5jOjc0NDpcXHRfZHN0X3B0ZSA9IG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1BPSVNPTkVEKTtcXG5tbS91c2VyZmF1bHRmZC5jLTc0NS1cXHRyZXQgPSAtRUFHQUlOO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTI9Q09ORklHX1VTRVJGQVVMVEZEPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc6MzpDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNC1DT05GSUdfVEVTVF9WTUFMTE9DPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6NTYuNDM1MzEwMzQyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzYwMDM5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUFRFX01BUktFUiBDb25maWd1cmF0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBQVEVfTUFSS0VSX1VGRkRfV1BgIGNvbmZpZyDigJMgdGhhdCdzIHRoZSBvbmUgSSBuZWVkIGZvciBQVEUgbWFya2VycywgcmlnaHQ/IEhtbSwgaGFuZyBvbiwgdGhlcmUgYXJlIGFsc28gYFBURV9NQVJLRVJfUE9JU09ORURgIGFuZCBgUFRFX01BUktFUl9HVUFSRGAuIEFyZSB0aG9zZSBkZXBlbmRlbnQgb24gYW55IG90aGVyIGNvbmZpZ3M/IEl0IGxvb2tzIGxpa2UgYFBURV9NQVJLRVJfUE9JU09ORURgIGlzIGVpdGhlciB1c2VkIHVuY29uZGl0aW9uYWxseSBvciBwZXJoYXBzIGxpbmtlZCB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYW5kIGBQVEVfTUFSS0VSX0dVQVJEYCBzZWVtcyB1bmNvbmRpdGlvbmFsIGFzIHdlbGwuXG5cblRoZXJlZm9yZSwgYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgIGlzIGRlZmluaXRlbHkgYSBnb29kIGNvbmZpZyB0byBjb25zaWRlciBmb3IgaW5jbHVzaW9uLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCwgYENPTkZJR19NSUdSQVRJT05gLCBhbmQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgdG9vLlxuXG5Ob3csIGxldCBtZSBkaWcgaW50byBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBzcGVjaWZpY2FsbHkuIEknbGwgY2hlY2sgYG1tL0tjb25maWdgIGZvciB0aGF0IG9uZS4gQWgsIG9rYXksIGl0IGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gTGV0IG1lIGNoZWNrIHRoYXQgY29uZmlnLiBgQ09ORklHX1pPTkVfREVWSUNFYCBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIFdoaWxlIEkgdW5kZXJzdGFuZCB0aGUgaGllcmFyY2h5IGhlcmUsIEkgZG9uJ3QgbmVlZCB0byBsaXN0IGFsbCB0aG9zZSBkZXBlbmRlbmNpZXMsIHNvIEkgY2FuIGp1c3QgcmVtZW1iZXIgYERFVklDRV9QUklWQVRFYCwgYE1JR1JBVElPTmAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCwgb2YgY291cnNlLCBgUFRFX01BUktFUl9VRkZEX1dQYC5cblxuV2FpdCBhIG1pbnV0ZSwgdGhpcyBwYXRjaCBpcyBleHRyYWN0aW5nIGBkb19ub25fc3dhcF9wYWdlYCBmcm9tIGBkb19zd2FwX3BhZ2VgLCBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgYGRvX25vbl9zd2FwX3BhZ2VgIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIGEgdmFyaWV0eSBvZiBjYXNlcywgaXQgbG9va3MgbGlrZSBpdCdzIGhhbmRsaW5nIHRoaW5ncyBsaWtlOlxuLSBgc29mdGxlYWZfaXNfbWlncmF0aW9uYFxuLSBgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZWBcbi0gYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYFxuLSBgc29mdGxlYWZfaXNfaHdwb2lzb25gXG4tIGBzb2Z0bGVhZl9pc19tYXJrZXJgXG5cblJpZ2h0LCB0aGUgcG9pbnQgaXMgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgYHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmVgIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUxMywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMzowMy41NzEzMTc3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyNzcxODI5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI4Nz1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI5OC0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyOTk6ICogc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeT9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMDAtICogQGVudHJ5OiBMZWFmIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzAzLSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjMwNDpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMwNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0zNTU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2hhc19wZm4oc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNjQ6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2NS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2htbS5jPTI0MT1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaG1tLmMtMjkzLVxcbm1tL2htbS5jOjI5NDpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXFxubW0vaG1tLmMtMjk1LVxcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuLS1cXG5tbS9tZW1vcnkuYz0xMDAxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9tZW1vcnkuYy0xMDc3LVxcdFxcdH1cXG5tbS9tZW1vcnkuYzoxMDc4OlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy0xMDc5LVxcdFxcdC8qXFxuLS1cXG5tbS9tZW1vcnkuYz0xODExPXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTE4MjEtXFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21lbW9yeS5jOjE4MjI6XFx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtMTgyMy1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmM9NDgxOD1zdGF0aWMgdm1fZmF1bHRfdCBkb19ub25fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDgyOC1cXHRcXHRcXHRcXHQgICAgIHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxubW0vbWVtb3J5LmM6NDgyOTpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtNDgzMC1cXHRcXHR2bWYtXFx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcxLVxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6NzI6XFx0XFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03My1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzEtXFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMzI6XFx0XFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzMtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMzowOS4zOTkwNDM5OTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4MDMwNjg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZWAgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIHN0cmFpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hpY2ggY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlYCBzZXR0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzIGJlaGF2aW9yLCBvciBtb3JlIHNwZWNpZmljYWxseSwgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIG9yIHN3aXRjaGVzIGFyZS4gSXQncyBjcnVjaWFsIGZvciBtZSB0byBxdWlja2x5IGlzb2xhdGUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZWxlbWVudHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGJvb2xlYW4gZmxhZywgb3IgaXMgaXQgYSBtb3JlIGNvbXBsZXggc2V0dXAgd2l0aCBtdWx0aXBsZSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gdHJhY2U/IFBlcmhhcHMgaXQncyBidXJpZWQgaW4gc29tZSBvYnNjdXJlIHNlY3Rpb24gb2YgdGhlIHN5c3RlbSBjb25maWcgdGhhdCBJJ20gb3Zlcmxvb2tpbmc/IFRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMTYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMzoxNC4yNzkzNTQ3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE2MjUzODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNXUF9ERVZJQ0VfRVhDTFVTSVZFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTE2MD1zdGF0aWMgaW5saW5lIGVudW0gc29mdGxlYWZfdHlwZSBzb2Z0bGVhZl90eXBlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODUtXFx0XFx0cmV0dXJuIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQ7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTg2OlxcdGNhc2UgU1dQX0RFVklDRV9FWENMVVNJVkU6XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTg3LVxcdFxcdHJldHVybiBTT0ZUTEVBRl9ERVZJQ0VfRVhDTFVTSVZFO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9Mjk9c3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTY4LSAqIFdoZW4gYSBwYWdlIGlzIG1hcHBlZCBieSB0aGUgZGV2aWNlIGZvciBleGNsdXNpdmUgYWNjZXNzIHdlIHNldCB0aGUgQ1BVIHBhZ2VcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo2OTogKiB0YWJsZSBlbnRyaWVzIHRvIGEgc3BlY2lhbCBTV1BfREVWSUNFX0VYQ0xVU0lWRSBlbnRyeS5cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03MC0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTc0LSNkZWZpbmUgU1dQX0RFVklDRV9SRUFEIChNQVhfU1dBUEZJTEVTK1NXUF9IV1BPSVNPTl9OVU0rU1dQX01JR1JBVElPTl9OVU0rMSlcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo3NTojZGVmaW5lIFNXUF9ERVZJQ0VfRVhDTFVTSVZFIChNQVhfU1dBUEZJTEVTK1NXUF9IV1BPSVNPTl9OVU0rU1dQX01JR1JBVElPTl9OVU0rMilcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03Ni0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTQ2PXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE0Ny17XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MTQ4OlxcdHJldHVybiBzd3BfZW50cnkoU1dQX0RFVklDRV9FWENMVVNJVkUsIG9mZnNldCk7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTQ5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MTkuNzk1NjE3OTgyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDk0MTU1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqQ2hlY2tpbmcgZm9yIGBTV1BfREVWSUNFX0VYQ0xVU0lWRWAqKlxuXG5BbHJpZ2h0LCB0aGUgdGFzayBhdCBoYW5kIGludm9sdmVzIHNvbWV0aGluZyByZWxhdGVkIHRvIHN3YXBwaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBzd2FwIHNwYWNlLCBhbmQgdGhhdCB1c3VhbGx5IHJlc2lkZXMgaW4gdGhlIGtlcm5lbCBoZWFkZXJzLiBNeSBtdXNjbGUgbWVtb3J5IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBUaGF0IGhlYWRlciBmaWxlIGlzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3Igc3dhcC1yZWxhdGVkIHN0cnVjdHVyZXMsIGNvbnN0YW50cywgYW5kIG1hY3JvcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgYFNXUF9ERVZJQ0VfRVhDTFVTSVZFYCwgc28sIEknbGwgZ28gY2hlY2sgdGhhdCBoZWFkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTQzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MjMuMjA1MDM3NjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTk5NDMwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI0OD1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuLS1cXG5tbS9LY29uZmlnLTEyNTAtXFxubW0vS2NvbmZpZzoxMjUxOmNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTI1Mi1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAzOjI3LjgwNTA1OTQ4MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ2NjcxMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTd2FwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYFNXUF9ERVZJQ0VfRVhDTFVTSVZFYCBiZWluZyBjb25kaXRpb25hbGx5IGVuYWJsZWQuIFJpZ2h0LCBpdCdzIHRpZWQgdG8gc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJ3Mgc3dhcCBkZWZpbml0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIGV4YWN0bHkgdGhhdCBmbGFnIGxpdmVzLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIEFuZCBJJ20gcHJldHR5IHN1cmUgaXQncyBhcm91bmQgbGluZSA3NSwgZ2l2ZSBvciB0YWtlLiBHb3R0YSBxdWlja2x5IGNvbmZpcm0gdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZXhjbHVzaW9uIHdvcmtzIGJhc2VkIG9uIHRoZSBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjIxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MzIuMDUxNzM0NzI1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHQgKiBVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgc3VwcG9ydC4gU2VlIGluY2x1ZGUvbGludXgvaG1tLmggYW5kXFxuICA2MTpcXHQgKiBEb2N1bWVudGF0aW9uL21tL2htbS5yc3QuIFNob3J0IGRlc2NyaXB0aW9uIGlzIHdlIG5lZWQgc3RydWN0IHBhZ2VzIGZvclxcbiAgNjI6XFx0ICogZGV2aWNlIG1lbW9yeSB0aGF0IGlzIHVuYWRkcmVzc2FibGUgKGluYWNjZXNzaWJsZSkgYnkgQ1BVLCBzbyB0aGF0IHdlIGNhblxcbiAgNjM6XFx0ICogbWlncmF0ZSBwYXJ0IG9mIGEgcHJvY2VzcyBtZW1vcnkgdG8gZGV2aWNlIG1lbW9yeS5cXG4gIDY0OlxcdCAqXFxuICA2NTpcXHQgKiBXaGVuIGEgcGFnZSBpcyBtaWdyYXRlZCBmcm9tIENQVSB0byBkZXZpY2UsIHdlIHNldCB0aGUgQ1BVIHBhZ2UgdGFibGUgZW50cnlcXG4gIDY2OlxcdCAqIHRvIGEgc3BlY2lhbCBTV1BfREVWSUNFX3tSRUFEfFdSSVRFfSBlbnRyeS5cXG4gIDY3OlxcdCAqXFxuICA2ODpcXHQgKiBXaGVuIGEgcGFnZSBpcyBtYXBwZWQgYnkgdGhlIGRldmljZSBmb3IgZXhjbHVzaXZlIGFjY2VzcyB3ZSBzZXQgdGhlIENQVSBwYWdlXFxuICA2OTpcXHQgKiB0YWJsZSBlbnRyaWVzIHRvIGEgc3BlY2lhbCBTV1BfREVWSUNFX0VYQ0xVU0lWRSBlbnRyeS5cXG4gIDcwOlxcdCAqL1xcbiAgNzE6XFx0I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbiAgNzI6XFx0I2RlZmluZSBTV1BfREVWSUNFX05VTSAzXFxuICA3MzpcXHQjZGVmaW5lIFNXUF9ERVZJQ0VfV1JJVEUgKE1BWF9TV0FQRklMRVMrU1dQX0hXUE9JU09OX05VTStTV1BfTUlHUkFUSU9OX05VTSlcXG4gIDc0OlxcdCNkZWZpbmUgU1dQX0RFVklDRV9SRUFEIChNQVhfU1dBUEZJTEVTK1NXUF9IV1BPSVNPTl9OVU0rU1dQX01JR1JBVElPTl9OVU0rMSlcXG4gIDc1OlxcdCNkZWZpbmUgU1dQX0RFVklDRV9FWENMVVNJVkUgKE1BWF9TV0FQRklMRVMrU1dQX0hXUE9JU09OX05VTStTV1BfTUlHUkFUSU9OX05VTSsyKVxcbiAgNzY6XFx0I2Vsc2VcXG4gIDc3OlxcdCNkZWZpbmUgU1dQX0RFVklDRV9OVU0gMFxcbiAgNzg6XFx0I2VuZGlmXFxuICA3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MzIuMDUxOTM1MDU2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNjAzNTQyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHJlZmFjdG9yaW5nIHRoZSBoYW5kbGluZyBvZiBzb21lIHNwZWNpYWwgcGFnZSB0YWJsZSBlbnRyaWVzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBtb3ZpbmcgdGhlIGxvZ2ljIGZvciBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIG91dCBvZiBgZG9fc3dhcF9wYWdlYCBhbmQgaW50byBhIG5ldyBmdW5jdGlvbiwgYGRvX25vbl9zd2FwX3BhZ2VgLiBUaGlzIGluY2x1ZGVzIGhhbmRsaW5nIG1pZ3JhdGlvbiwgZGV2aWNlLWV4Y2x1c2l2ZSBwYWdlcywgZGV2aWNlIHByaXZhdGUgcGFnZXMsIG1lbW9yeSBmYWlsdXJlcyAoaHdwb2lzb24pLCBhbmQgbWFya2Vycy4gVGhlIHBhdGNoIGlzIGFsc28gbWFraW5nIHRoZSBzd2l0Y2ggdG8gZm9saW8tYmFzZWQgQVBJcyBsaWtlIGBmb2xpb190cnlsb2NrYCBhbmQgYGZvbGlvX2dldGAuIEEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbi5cblxuTGV0J3MgYnJlYWsgaXQgZG93bi4gSSd2ZSBpZGVudGlmaWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYERFVklDRV9QUklWQVRFYCwgYE1JR1JBVElPTmAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgUFRFX01BUktFUl9VRkZEX1dQYC4gVGhlc2UgYXJlIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UgaW4gaGFuZGxpbmcgbm9uLXN3YXAgc29mdGxlYWYgZW50cmllcy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgbWFpbiBmb2N1cyBpcyBpbmRlZWQgYGRvX25vbl9zd2FwX3BhZ2VgLiBUaGlzIG5ldyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgZG9fc3dhcF9wYWdlYC4gYGRvX3N3YXBfcGFnZWAgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoIGJlY2F1c2UgaXQgaGFuZGxlcyBzd2FwIGZhdWx0cy4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYGRvX25vbl9zd2FwX3BhZ2VgIGlzIG9ubHkgY2FsbGVkIGZvciB0aGUgbGVzcyBjb21tb24gc2NlbmFyaW9zIG9mIG5vbi1zd2FwIHNvZnRsZWFmIGVudHJpZXMuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCBmdW5jdGlvbiB0byBmb2N1cyBvbiBmb3IgYW5hbHlzaXMuXG5cbkkndmUgYWxzbyBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgZmFpcmx5IHN0YW5kYXJkLiBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX01NVWAgYXJlIG5lY2Vzc2FyeSwgYnV0IHVzdWFsbHkgZW5hYmxlZC5cblxuU28sIEkgd291bGQgc2F5IHRoaXMgcGF0Y2ggaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6ICpUcnVlKlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJkb19ub25fc3dhcF9wYWdlXCJdYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW1wiREVWSUNFX1BSSVZBVEVcIiwgXCJNSUdSQVRJT05cIiwgXCJNRU1PUllfRkFJTFVSRVwiLCBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXWBcbiogICAqKlJlYXNvbmluZyoqOiBcIlRoZSBwYXRjaCBleHRyYWN0cyB0aGUgaGFuZGxpbmcgb2Ygbm9uLXN3YXAgc29mdGxlYWYgZW50cmllcyAobWlncmF0aW9uLCBkZXZpY2UgZXhjbHVzaXZlLCBkZXZpY2UgcHJpdmF0ZSwgaHdwb2lzb24sIG1hcmtlcnMpIGZyb20gYGRvX3N3YXBfcGFnZWAgaW50byBhIG5ldyBmdW5jdGlvbiBgZG9fbm9uX3N3YXBfcGFnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgY29kZSB0byB1c2UgZm9saW8tYmFzZWQgQVBJcyAoYGZvbGlvX3RyeWxvY2tgLCBgZm9saW9fZ2V0YCwgZXRjLikgaW5zdGVhZCBvZiBwYWdlLWJhc2VkIEFQSXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciB2YXJpb3VzIHNwZWNpYWwgcGFnZSB0YWJsZSBlbnRyaWVzLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODE2LCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAzOjQxLjMxMjI5Mjg4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjUwMDAyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX25vbl9zd2FwX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRyYWN0cyB0aGUgaGFuZGxpbmcgb2Ygbm9uLXN3YXAgc29mdGxlYWYgZW50cmllcyAobWlncmF0aW9uLCBkZXZpY2UgZXhjbHVzaXZlLCBkZXZpY2UgcHJpdmF0ZSwgaHdwb2lzb24sIG1hcmtlcnMpIGZyb20gYGRvX3N3YXBfcGFnZWAgaW50byBhIG5ldyBmdW5jdGlvbiBgZG9fbm9uX3N3YXBfcGFnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgY29kZSB0byB1c2UgZm9saW8tYmFzZWQgQVBJcyAoYGZvbGlvX3RyeWxvY2tgLCBgZm9saW9fZ2V0YCwgZXRjLikgaW5zdGVhZCBvZiBwYWdlLWJhc2VkIEFQSXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciB2YXJpb3VzIHNwZWNpYWwgcGFnZSB0YWJsZSBlbnRyaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJQVEVfTUFSS0VSX1VGRkRfV1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19ub25fc3dhcF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0cmFjdHMgdGhlIGhhbmRsaW5nIG9mIG5vbi1zd2FwIHNvZnRsZWFmIGVudHJpZXMgKG1pZ3JhdGlvbiwgZGV2aWNlIGV4Y2x1c2l2ZSwgZGV2aWNlIHByaXZhdGUsIGh3cG9pc29uLCBtYXJrZXJzKSBmcm9tIGBkb19zd2FwX3BhZ2VgIGludG8gYSBuZXcgZnVuY3Rpb24gYGRvX25vbl9zd2FwX3BhZ2VgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGNvZGUgdG8gdXNlIGZvbGlvLWJhc2VkIEFQSXMgKGBmb2xpb190cnlsb2NrYCwgYGZvbGlvX2dldGAsIGV0Yy4pIGluc3RlYWQgb2YgcGFnZS1iYXNlZCBBUElzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgcGFnZSBmYXVsdCBoYW5kbGluZyBmb3IgdmFyaW91cyBzcGVjaWFsIHBhZ2UgdGFibGUgZW50cmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8g7lg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 06:33:58 +0000 UTC FinishedAt: 2026-07-24 07:03:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "34ce64d8a6eb370d963f35a161723a8833fc6cae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "MIGRATION", "MEMORY_FAILURE", "PTE_MARKER_UFFD_WP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "34ce64d8a6eb370d963f35a161723a8833fc6cae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DEVICE_PRIVATE", "MIGRATION", "MEMORY_FAILURE", "PTE_MARKER_UFFD_WP" ], "series_id": "be9e84fe-35d2-47d8-b39f-306cd3092cc9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "do_non_swap_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19ub25fc3dhcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dHJhY3RzIHRoZSBoYW5kbGluZyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIChtaWdyYXRpb24sIGRldmljZSBleGNsdXNpdmUsIGRldmljZSBwcml2YXRlLCBod3BvaXNvbiwgbWFya2VycykgZnJvbSBgZG9fc3dhcF9wYWdlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBjb2RlIHRvIHVzZSBmb2xpby1iYXNlZCBBUElzIChgZm9saW9fdHJ5bG9ja2AsIGBmb2xpb19nZXRgLCBldGMuKSBpbnN0ZWFkIG9mIHBhZ2UtYmFzZWQgQVBJcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHZhcmlvdXMgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzNDE3OTk3ZjZiMTY3MmUxOTBjZDk3ODA0ZWE1YjNkOTFiZjEzMWFiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDc6MDE6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZDVlODc2MjRmNjkyMDUuLjUwZDhlOTJhZWY5MTcwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jXG5AQCAtNDgxNSw2ICYjNDM7NDgxNSw3NCBAQCBzdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcbiBcdH0gd2hpbGUgKC0tbnJfcGFnZXMpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZtX2ZhdWx0X3QgZG9fbm9uX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuJiM0MztcdHNvZnRsZWFmX3QgZW50cnk7XG4mIzQzO1x0dm1fZmF1bHRfdCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHZtZi1cdTAwM2VvcmlnX3B0ZSk7XG4mIzQzO1x0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbiYjNDM7XHRcdG1pZ3JhdGlvbl9lbnRyeV93YWl0KHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCxcbiYjNDM7XHRcdFx0XHQgICAgIHZtZi1cdTAwM2VhZGRyZXNzKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XG4mIzQzO1x0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuJiM0MztcdFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xuJiM0MztcbiYjNDM7XHRcdGlmICh2bWYtXHUwMDNlZmxhZ3MgXHUwMDI2IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogbWlncmF0ZV90b19yYW0gaXMgbm90IHlldCByZWFkeSB0byBvcGVyYXRlXG4mIzQzO1x0XHRcdCAqIHVuZGVyIFZNQSBsb2NrLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4mIzQzO1x0XHRcdHJldHVybiBWTV9GQVVMVF9SRVRSWTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuJiM0MztcdFx0dm1mLVx1MDAzZXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLVx1MDAzZXZtX21tLCB2bWYtXHUwMDNlcG1kLFxuJiM0MztcdFx0XHRcdFx0XHR2bWYtXHUwMDNlYWRkcmVzcywgXHUwMDI2dm1mLVx1MDAzZXB0bCk7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXZtZi1cdTAwM2VwdGUgfHxcbiYjNDM7XHRcdFx0ICAgICAhcHRlX3NhbWUocHRlcF9nZXQodm1mLVx1MDAzZXB0ZSksXG4mIzQzO1x0XHRcdFx0XHR2bWYtXHUwMDNlb3JpZ19wdGUpKSlcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEdldCBhIGZvbGlvIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBmb2xpbyBjYW4mIzM5O3QgYmVcbiYjNDM7XHRcdCAqIGZyZWVkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0aWYgKGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG4mIzQzO1xuJiM0MztcdFx0XHRmb2xpb19nZXQoZm9saW8pO1xuJiM0MztcdFx0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuJiM0MztcdFx0XHRwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLVx1MDAzZXBhZ2UpO1xuJiM0MztcdFx0XHRyZXQgPSBwZ21hcC1cdTAwM2VvcHMtXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcbiYjNDM7XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjNDM7XHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHB0ZV91bm1hcCh2bWYtXHUwMDNlcHRlKTtcbiYjNDM7XHRcdFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi1cdTAwM2VwdGwpO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfaHdwb2lzb24oZW50cnkpKSB7XG4mIzQzO1x0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjtcbiYjNDM7XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcbiYjNDM7XHRcdHJldCA9IGhhbmRsZV9wdGVfbWFya2VyKHZtZik7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHByaW50X2JhZF9wdGUodm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgdm1mLVx1MDAzZW9yaWdfcHRlLCBOVUxMKTtcbiYjNDM7XHRcdHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0aWYgKHZtZi1cdTAwM2VwdGUpXG4mIzQzO1x0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBXZSBlbnRlciB3aXRoIGVpdGhlciB0aGUgVk1BIGxvY2sgb3IgdGhlIG1tYXBfbG9jayBoZWxkIChzZWVcbiAgKiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSwgYW5kIHB0ZSBtYXBwZWQgYnV0IG5vdCB5ZXQgbG9ja2VkLlxuQEAgLTQ4NDUsNTYgJiM0Mzs0OTEzLDcgQEAgdm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4gXG4gXHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHZtZi1cdTAwM2VvcmlnX3B0ZSk7XG4gXHRpZiAodW5saWtlbHkoIXNvZnRsZWFmX2lzX3N3YXAoZW50cnkpKSkge1xuLVx0XHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KSkge1xuLVx0XHRcdG1pZ3JhdGlvbl9lbnRyeV93YWl0KHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCxcbi1cdFx0XHRcdFx0ICAgICB2bWYtXHUwMDNlYWRkcmVzcyk7XG4tXHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbi1cdFx0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuLVx0XHRcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XG4tXHRcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG4tXHRcdFx0aWYgKHZtZi1cdTAwM2VmbGFncyBcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIG1pZ3JhdGVfdG9fcmFtIGlzIG5vdCB5ZXQgcmVhZHkgdG8gb3BlcmF0ZVxuLVx0XHRcdFx0ICogdW5kZXIgVk1BIGxvY2suXG4tXHRcdFx0XHQgKi9cbi1cdFx0XHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuLVx0XHRcdFx0cmV0ID0gVk1fRkFVTFRfUkVUUlk7XG4tXHRcdFx0XHRnb3RvIG91dDtcbi1cdFx0XHR9XG4tXG4tXHRcdFx0dm1mLVx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcbi1cdFx0XHR2bWYtXHUwMDNlcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtXHUwMDNldm1fbW0sIHZtZi1cdTAwM2VwbWQsXG4tXHRcdFx0XHRcdHZtZi1cdTAwM2VhZGRyZXNzLCBcdTAwMjZ2bWYtXHUwMDNlcHRsKTtcbi1cdFx0XHRpZiAodW5saWtlbHkoIXZtZi1cdTAwM2VwdGUgfHxcbi1cdFx0XHRcdCAgICAgIXB0ZV9zYW1lKHB0ZXBfZ2V0KHZtZi1cdTAwM2VwdGUpLFxuLVx0XHRcdFx0XHRcdFx0dm1mLVx1MDAzZW9yaWdfcHRlKSkpXG4tXHRcdFx0XHRnb3RvIHVubG9jaztcbi1cbi1cdFx0XHQvKlxuLVx0XHRcdCAqIEdldCBhIHBhZ2UgcmVmZXJlbmNlIHdoaWxlIHdlIGtub3cgdGhlIHBhZ2UgY2FuJiMzOTt0IGJlXG4tXHRcdFx0ICogZnJlZWQuXG4tXHRcdFx0ICovXG4tXHRcdFx0aWYgKHRyeWxvY2tfcGFnZSh2bWYtXHUwMDNlcGFnZSkpIHtcbi1cdFx0XHRcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XG4tXG4tXHRcdFx0XHRnZXRfcGFnZSh2bWYtXHUwMDNlcGFnZSk7XG4tXHRcdFx0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuLVx0XHRcdFx0cGdtYXAgPSBwYWdlX3BnbWFwKHZtZi1cdTAwM2VwYWdlKTtcbi1cdFx0XHRcdHJldCA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xuLVx0XHRcdFx0dW5sb2NrX3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuLVx0XHRcdFx0cHV0X3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRwdGVfdW5tYXAodm1mLVx1MDAzZXB0ZSk7XG4tXHRcdFx0XHRzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChlbnRyeSwgdm1mLVx1MDAzZXB0bCk7XG4tXHRcdFx0fVxuLVx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2h3cG9pc29uKGVudHJ5KSkge1xuLVx0XHRcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OO1xuLVx0XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcbi1cdFx0XHRyZXQgPSBoYW5kbGVfcHRlX21hcmtlcih2bWYpO1xuLVx0XHR9IGVsc2Uge1xuLVx0XHRcdHByaW50X2JhZF9wdGUodm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgdm1mLVx1MDAzZW9yaWdfcHRlLCBOVUxMKTtcbi1cdFx0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4tXHRcdH1cbiYjNDM7XHRcdHJldCA9IGRvX25vbl9zd2FwX3BhZ2Uodm1mKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19ub25fc3dhcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dHJhY3RzIHRoZSBoYW5kbGluZyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIChtaWdyYXRpb24sIGRldmljZSBleGNsdXNpdmUsIGRldmljZSBwcml2YXRlLCBod3BvaXNvbiwgbWFya2VycykgZnJvbSBgZG9fc3dhcF9wYWdlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBjb2RlIHRvIHVzZSBmb2xpby1iYXNlZCBBUElzIChgZm9saW9fdHJ5bG9ja2AsIGBmb2xpb19nZXRgLCBldGMuKSBpbnN0ZWFkIG9mIHBhZ2UtYmFzZWQgQVBJcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHZhcmlvdXMgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM0MTc5OTdmNmIxNjcyZTE5MGNkOTc4MDRlYTViM2Q5MWJmMTMxYWIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAyNCAwNzowMToxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggZDVlODc2MjRmNjkyMDUuLjUwZDhlOTJhZWY5MTcwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtNDgxNSw2ICYjNDM7NDgxNSw3NCBAQCBzdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwKIAl9IHdoaWxlICgtLW5yX3BhZ2VzKTsKIH0KIAomIzQzO3N0YXRpYyB2bV9mYXVsdF90IGRvX25vbl9zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0mZ3Q7dm1hOwomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzb2Z0bGVhZl90IGVudHJ5OwomIzQzOwl2bV9mYXVsdF90IHJldCA9IDA7CiYjNDM7CiYjNDM7CWVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUodm1mLSZndDtvcmlnX3B0ZSk7CiYjNDM7CWlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7CiYjNDM7CQltaWdyYXRpb25fZW50cnlfd2FpdCh2bWEtJmd0O3ZtX21tLCB2bWYtJmd0O3BtZCwKJiM0MzsJCQkJICAgICB2bWYtJmd0O2FkZHJlc3MpOwomIzQzOwl9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7CiYjNDM7CQl2bWYtJmd0O3BhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTsKJiM0MzsJCXJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7CiYjNDM7CX0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7CiYjNDM7CiYjNDM7CQlpZiAodm1mLSZndDtmbGFncyAmYW1wOyBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBtaWdyYXRlX3RvX3JhbSBpcyBub3QgeWV0IHJlYWR5IHRvIG9wZXJhdGUKJiM0MzsJCQkgKiB1bmRlciBWTUEgbG9jay4KJiM0MzsJCQkgKi8KJiM0MzsJCQl2bWFfZW5kX3JlYWQodm1hKTsKJiM0MzsJCQlyZXR1cm4gVk1fRkFVTFRfUkVUUlk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQl2bWYtJmd0O3BhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTsKJiM0MzsJCXZtZi0mZ3Q7cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtJmd0O3ZtX21tLCB2bWYtJmd0O3BtZCwKJiM0MzsJCQkJCQl2bWYtJmd0O2FkZHJlc3MsICZhbXA7dm1mLSZndDtwdGwpOwomIzQzOwkJaWYgKHVubGlrZWx5KCF2bWYtJmd0O3B0ZSB8fAomIzQzOwkJCSAgICAgIXB0ZV9zYW1lKHB0ZXBfZ2V0KHZtZi0mZ3Q7cHRlKSwKJiM0MzsJCQkJCXZtZi0mZ3Q7b3JpZ19wdGUpKSkKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBHZXQgYSBmb2xpbyByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgZm9saW8gY2FuJiMzOTt0IGJlCiYjNDM7CQkgKiBmcmVlZC4KJiM0MzsJCSAqLwomIzQzOwkJZm9saW8gPSBwYWdlX2ZvbGlvKHZtZi0mZ3Q7cGFnZSk7CiYjNDM7CQlpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKJiM0MzsJCQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwomIzQzOwomIzQzOwkJCWZvbGlvX2dldChmb2xpbyk7CiYjNDM7CQkJcHRlX3VubWFwX3VubG9jayh2bWYtJmd0O3B0ZSwgdm1mLSZndDtwdGwpOwomIzQzOwkJCXBnbWFwID0gcGFnZV9wZ21hcCh2bWYtJmd0O3BhZ2UpOwomIzQzOwkJCXJldCA9IHBnbWFwLSZndDtvcHMtJmd0O21pZ3JhdGVfdG9fcmFtKHZtZik7CiYjNDM7CQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKJiM0MzsJCQlmb2xpb19wdXQoZm9saW8pOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlwdGVfdW5tYXAodm1mLSZndDtwdGUpOwomIzQzOwkJCXNvZnRsZWFmX2VudHJ5X3dhaXRfb25fbG9ja2VkKGVudHJ5LCB2bWYtJmd0O3B0bCk7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSBpZiAoc29mdGxlYWZfaXNfaHdwb2lzb24oZW50cnkpKSB7CiYjNDM7CQlyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjsKJiM0MzsJfSBlbHNlIGlmIChzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKSB7CiYjNDM7CQlyZXQgPSBoYW5kbGVfcHRlX21hcmtlcih2bWYpOwomIzQzOwl9IGVsc2UgewomIzQzOwkJcHJpbnRfYmFkX3B0ZSh2bWEsIHZtZi0mZ3Q7YWRkcmVzcywgdm1mLSZndDtvcmlnX3B0ZSwgTlVMTCk7CiYjNDM7CQlyZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MzsKJiM0Mzt1bmxvY2s6CiYjNDM7CWlmICh2bWYtJmd0O3B0ZSkKJiM0MzsJCXB0ZV91bm1hcF91bmxvY2sodm1mLSZndDtwdGUsIHZtZi0mZ3Q7cHRsKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKgogICogV2UgZW50ZXIgd2l0aCBlaXRoZXIgdGhlIFZNQSBsb2NrIG9yIHRoZSBtbWFwX2xvY2sgaGVsZCAoc2VlCiAgKiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSwgYW5kIHB0ZSBtYXBwZWQgYnV0IG5vdCB5ZXQgbG9ja2VkLgpAQCAtNDg0NSw1NiAmIzQzOzQ5MTMsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIAogCWVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUodm1mLSZndDtvcmlnX3B0ZSk7CiAJaWYgKHVubGlrZWx5KCFzb2Z0bGVhZl9pc19zd2FwKGVudHJ5KSkpIHsKLQkJaWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHsKLQkJCW1pZ3JhdGlvbl9lbnRyeV93YWl0KHZtYS0mZ3Q7dm1fbW0sIHZtZi0mZ3Q7cG1kLAotCQkJCQkgICAgIHZtZi0mZ3Q7YWRkcmVzcyk7Ci0JCX0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHsKLQkJCXZtZi0mZ3Q7cGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpOwotCQkJcmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTsKLQkJfSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHsKLQkJCWlmICh2bWYtJmd0O2ZsYWdzICZhbXA7IEZBVUxUX0ZMQUdfVk1BX0xPQ0spIHsKLQkJCQkvKgotCQkJCSAqIG1pZ3JhdGVfdG9fcmFtIGlzIG5vdCB5ZXQgcmVhZHkgdG8gb3BlcmF0ZQotCQkJCSAqIHVuZGVyIFZNQSBsb2NrLgotCQkJCSAqLwotCQkJCXZtYV9lbmRfcmVhZCh2bWEpOwotCQkJCXJldCA9IFZNX0ZBVUxUX1JFVFJZOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQl2bWYtJmd0O3BhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTsKLQkJCXZtZi0mZ3Q7cHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtJmd0O3ZtX21tLCB2bWYtJmd0O3BtZCwKLQkJCQkJdm1mLSZndDthZGRyZXNzLCAmYW1wO3ZtZi0mZ3Q7cHRsKTsKLQkJCWlmICh1bmxpa2VseSghdm1mLSZndDtwdGUgfHwKLQkJCQkgICAgICFwdGVfc2FtZShwdGVwX2dldCh2bWYtJmd0O3B0ZSksCi0JCQkJCQkJdm1mLSZndDtvcmlnX3B0ZSkpKQotCQkJCWdvdG8gdW5sb2NrOwotCi0JCQkvKgotCQkJICogR2V0IGEgcGFnZSByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgcGFnZSBjYW4mIzM5O3QgYmUKLQkJCSAqIGZyZWVkLgotCQkJICovCi0JCQlpZiAodHJ5bG9ja19wYWdlKHZtZi0mZ3Q7cGFnZSkpIHsKLQkJCQlzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwOwotCi0JCQkJZ2V0X3BhZ2Uodm1mLSZndDtwYWdlKTsKLQkJCQlwdGVfdW5tYXBfdW5sb2NrKHZtZi0mZ3Q7cHRlLCB2bWYtJmd0O3B0bCk7Ci0JCQkJcGdtYXAgPSBwYWdlX3BnbWFwKHZtZi0mZ3Q7cGFnZSk7Ci0JCQkJcmV0ID0gcGdtYXAtJmd0O29wcy0mZ3Q7bWlncmF0ZV90b19yYW0odm1mKTsKLQkJCQl1bmxvY2tfcGFnZSh2bWYtJmd0O3BhZ2UpOwotCQkJCXB1dF9wYWdlKHZtZi0mZ3Q7cGFnZSk7Ci0JCQl9IGVsc2UgewotCQkJCXB0ZV91bm1hcCh2bWYtJmd0O3B0ZSk7Ci0JCQkJc29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi0mZ3Q7cHRsKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkpIHsKLQkJCXJldCA9IFZNX0ZBVUxUX0hXUE9JU09OOwotCQl9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHsKLQkJCXJldCA9IGhhbmRsZV9wdGVfbWFya2VyKHZtZik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludF9iYWRfcHRlKHZtYSwgdm1mLSZndDthZGRyZXNzLCB2bWYtJmd0O29yaWdfcHRlLCBOVUxMKTsKLQkJCXJldCA9IFZNX0ZBVUxUX1NJR0JVUzsKLQkJfQomIzQzOwkJcmV0ID0gZG9fbm9uX3N3YXBfcGFnZSh2bWYpOwogCQlnb3RvIG91dDsKIAl9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2NQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaDogRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgbW0vbWVtb3J5LmNgLiBGcm9tIHdoYXQgSSBzZWUsIGl0JiMzOTtzIGVzc2VudGlhbGx5IHJlZmFjdG9yaW5nIHRoZSBgZG9fc3dhcF9wYWdlYCBmdW5jdGlvbi4gVGhlIGtleSBtb3ZlIGlzIGV4dHJhY3RpbmcgdGhlIG5vbi1zd2FwIHNvZnRsZWFmIGVudHJ5IGhhbmRsaW5nIGludG8gYSBuZXcgZnVuY3Rpb24sIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgbG9va3MgbGlrZSBhIGNsZWFuIHNlcGFyYXRpb24gb2YgY29uY2VybnMsIHdoaWNoIGlzIGdvb2QuCgpCdXQgaXQmIzM5O3MgbW9yZSB0aGFuIGp1c3QgYSBjb2RlIG9yZ2FuaXphdGlvbiBleGVyY2lzZSwgSSBzZWUgdGhhdCB0aGV5IGFyZSBzd2FwcGluZyBvdXQgdGhlIGxlZ2FjeSBgcGFnZWAgb3BlcmF0aW9ucyB3aXRoIHRoZWlyIGBmb2xpb2AgY291bnRlcnBhcnRzLCBzdWNoIGFzIGB0cnlsb2NrX3BhZ2VgIHdpdGggYGZvbGlvX3RyeWxvY2tgLCBgZ2V0X3BhZ2VgIHdpdGggYGZvbGlvX2dldGAsIGFuZCBzbyBvbi4gVGhhdCBpcyBpbnRlcmVzdGluZywgc28gdGhpcyBwYXRjaCBpcyBhIGJpdCBtb3JlIHN1YnN0YW50aWFsIHRoYW4ganVzdCByZW9yZ2FuaXphdGlvbi4KClRoZSBiaWdnZXIgcXVlc3Rpb24gaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseSwgd2l0aG91dCBhIGRvdWJ0LCB5ZXMuIEFueSBtb2RpZmljYXRpb24gdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgbGlrZSBgZG9fc3dhcF9wYWdlYCAob3IgaW4gdGhpcyBjYXNlLCB0aGUgZXh0cmFjdGVkIGBkb19ub25fc3dhcF9wYWdlYCkgbmVlZHMgdG8gYmUgc2NydXRpbml6ZWQuIFRoZSBuYXR1cmUgb2YgdGhlc2UgY2hhbmdlcyDigJMgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBmdW5jdGlvbiBhbmQgdGhlIGNoYW5nZSBvZiBmdW5kYW1lbnRhbCBwYWdlIG9wZXJhdGlvbnMg4oCTIGFyZSBwZXJmZWN0IGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGUgYmVzdCBmb2N1cyBzeW1ib2xzLiBgZG9fbm9uX3N3YXBfcGFnZWAgaW1tZWRpYXRlbHkgc3ByaW5ncyB0byBtaW5kIGFzIHRoZSBwcmltYXJ5IHRhcmdldC4gSXQmIzM5O3MgbmV3IGFuZCBjb250YWlucyB0aGUgY29yZSBsb2dpYyB0aGF0IHdhcyByZWZhY3RvcmVkLiBgZG9fc3dhcF9wYWdlYCBpdHNlbGYgaXMgYWxzbyBhIHZhbGlkIHRhcmdldCwgYWx0aG91Z2ggaXQmIzM5O3MgbGlrZWx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGl0IG1heSBuZWVkIGEgdGFyZ2V0ZWQgYXBwcm9hY2guIE9oLCB3YWl0LCBgZG9fbm9uX3N3YXBfcGFnZWAgaXMgc3RhdGljLCB3aGljaCBpcyBhY3R1YWxseSBncmVhdCBiZWNhdXNlIHRoaXMgc2ltcGxpZmllcyB0aGUgZnV6emluZyBzZXR1cC4KCkZpbmFsbHksIHdoYXQgYWJvdXQgYW55IHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zPyBgbW0vbWVtb3J5LmNgIGlzIGFsd2F5cyBjb21waWxlZCwgd2hpY2ggaXMgZ3JlYXQgYmVjYXVzZSBpdCBzaW1wbGlmaWVzIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBmb3IgYW55IHNwZWNpYWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVgIG9yIGBtaWdyYXRlX3RvX3JhbWAgdGhvdWdoLCBqdXN0IHRvIGJlIHRob3JvdWdoLiBBIHF1aWNrIGdyZXAgb2YgdGhlIGNvZGUgc2hvdWxkIHJldmVhbCBpZiB0aGVzZSBhcmUgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTEwNDk9c3RhdGljIHZvaWQgc21hcHNfcHRlX2VudHJ5KHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTA4Mi1cdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSkge1xuZnMvcHJvYy90YXNrX21tdS5jOjEwODM6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbmZzL3Byb2MvdGFza19tbXUuYy0xMDg0LVx0XHRcdFx0cHJlc2VudCA9IHRydWU7XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MjU2PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19taWdyYXRpb24oc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjgtLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNjk6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNzAtICogd3JpdGFibGUgZW50cnk/XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc1LSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjc2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODEtLyoqXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODI6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlIGVudHJ5P1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjgzLSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODYtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODc6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODgte1xuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTM1NT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaGFzX3Bmbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2MS1cdFx0cmV0dXJuIHRydWU7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNjI6XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYzLVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MDQ9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MDUte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjA2Olx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX2Zyb21fcG1kKHBtZCkpO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA3LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MzU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3ZhbGlkX3BtZF9lbnRyeShzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYzNy1cdC8qIE9ubHkgZGV2aWNlIHByaXZhdGUsIG1pZ3JhdGlvbiBlbnRyaWVzIHZhbGlkIGZvciBQTUQuICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2Mzg6XHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MzktXHRcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSk7XG4tLVxubW0vaG1tLmM9MjQxPXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaG1tLmMtMjcyLVx0XHQgKi9cbm1tL2htbS5jOjI3MzpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL2htbS5jLTI3NC1cdFx0ICAgIHBhZ2VfcGdtYXAoc29mdGxlYWZfdG9fcGFnZShlbnRyeSkpLVx1MDAzZW93bmVyID09XG4tLVxubW0vaG1tLmMtMjc2LVx0XHRcdGNwdV9mbGFncyA9IEhNTV9QRk5fVkFMSUQ7XG5tbS9obW0uYzoyNzc6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL2htbS5jLTI3OC1cdFx0XHRcdGNwdV9mbGFncyB8PSBITU1fUEZOX1dSSVRFO1xuLS1cbm1tL2htbS5jLTI5MC1cbm1tL2htbS5jOjI5MTpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbm1tL2htbS5jLTI5Mi1cdFx0XHRnb3RvIGZhdWx0O1xuLS1cbm1tL2htbS5jPTM0MT1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vaG1tLmMtMzUxLVxubW0vaG1tLmM6MzUyOlx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL2htbS5jLTM1My1cdCAgICBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSktXHUwMDNlcGdtYXAtXHUwMDNlb3duZXIgPT1cbi0tXG5tbS9obW0uYy0zNTktXG5tbS9obW0uYzozNjA6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXG5tbS9obW0uYy0zNjEtXHRcdFx0Y3B1X2ZsYWdzIHw9IEhNTV9QRk5fV1JJVEU7XG4tLVxubW0vaG1tLmMtMzc4LVx0aWYgKHJlcXVpcmVkX2ZhdWx0KSB7XG5tbS9obW0uYzozNzk6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpXG5tbS9obW0uYy0zODAtXHRcdFx0cmV0dXJuIGhtbV9yZWNvcmRfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xODA5PXN0YXRpYyB2b2lkIGNvcHlfaHVnZV9ub25fcHJlc2VudF9wbWQoXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xODI4LVx0XHRzZXRfcG1kX2F0KHNyY19tbSwgYWRkciwgc3JjX3BtZCwgcG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTgyOTpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XG5tbS9odWdlX21lbW9yeS5jLTE4MzAtXHRcdC8qXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xODMzLVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTgzNDpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xubW0vaHVnZV9tZW1vcnkuYy0xODM1LVx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNjAxPXN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI2MjItXHRcdFx0bmV3cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkobmV3cG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MjYyMzpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG5tbS9odWdlX21lbW9yeS5jLTI2MjQtXHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDk3PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzE5MC1cbm1tL2h1Z2VfbWVtb3J5LmM6MzE5MTpcdFx0d3JpdGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSk7XG5tbS9odWdlX21lbW9yeS5jLTMxOTItXHRcdGFub25fZXhjbHVzaXZlID0gUGFnZUFub25FeGNsdXNpdmUocGFnZSk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz00OTYxPWludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00OTkwLVxubW0vaHVnZV9tZW1vcnkuYzo0OTkxOlx0XHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKG9sZF9lbnRyeSk7XG5tbS9odWdlX21lbW9yeS5jLTQ5OTItXHRcdHNvZnRkaXJ0eSA9IHBtZF9zd3Bfc29mdF9kaXJ0eShwbWR2YWwpO1xuLS1cbm1tL21lbW9yeS5jPTEwMDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9tZW1vcnkuYy0xMDQzLVx0XHR9XG5tbS9tZW1vcnkuYzoxMDQ0Olx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTEwNDUtXHRcdHBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcbi0tXG5tbS9tZW1vcnkuYy0xMDY4LVx0XHQgKi9cbm1tL21lbW9yeS5jOjEwNjk6XHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9tZW1vcnkuYy0xMDcwLVx0XHQgICAgaXNfY293X21hcHBpbmcodm1fZmxhZ3MpKSB7XG4tLVxubW0vbWVtb3J5LmM9MTgxMT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTgyMC1cdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xubW0vbWVtb3J5LmM6MTgyMTpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21lbW9yeS5jLTE4MjItXHQgICAgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbi0tXG5tbS9tZW1vcnkuYz00ODE4PXN0YXRpYyB2bV9mYXVsdF90IGRvX25vbl9zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNDgzMS1cdFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcbm1tL21lbW9yeS5jOjQ4MzI6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtNDgzMy1cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNz1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xNjktXG5tbS9taWdyYXRlX2RldmljZS5jOjE3MDpcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTcxLVx0XHQgICAgIShtaWdyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpKSB7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0xODEtXG5tbS9taWdyYXRlX2RldmljZS5jOjE4MjpcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTgzLVx0XHRcdHdyaXRlID0gTUlHUkFURV9QRk5fV1JJVEU7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTI5OS1cdFx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZSk7XG5tbS9taWdyYXRlX2RldmljZS5jOjMwMDpcdFx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzAxLVx0XHRcdFx0Z290byBuZXh0O1xuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzMzLVx0XHRcdFx0XHRNSUdSQVRFX1BGTl9NSUdSQVRFO1xubW0vbWlncmF0ZV9kZXZpY2UuYzozMzQ6XHRcdFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMzM1LVx0XHRcdFx0bXBmbiB8PSBNSUdSQVRFX1BGTl9XUklURTtcbi0tXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21wcm90ZWN0LmMtMjM2LVx0XHRcdG5ld3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KG5ld3B0ZSk7XG5tbS9tcHJvdGVjdC5jOjIzNzpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG5tbS9tcHJvdGVjdC5jLTIzOC1cdFx0Lypcbi0tXG5tbS9wYWdlX3RhYmxlX2NoZWNrLmM9MTkzPXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9jYWNoZWRfd3JpdGFibGUoc29mdGxlYWZfdCBlbnRyeSlcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xOTQte1xubW0vcGFnZV90YWJsZV9jaGVjay5jOjE5NTpcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkgfHxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xOTYtXHRcdHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSk7XG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmM9MTY9c3RhdGljIGJvb2wgbWFwX3B0ZShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHBtZF90ICpwbWR2YWxwLFxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcwLVx0XHRlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcHRlKHB0ZW50KTtcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjcxOlx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcyLVx0XHQgICAgIXNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzAtXHRcdC8qIEhhbmRsZSB1bi1hZGRyZXNzYWJsZSBaT05FX0RFVklDRSBtZW1vcnkgKi9cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEzMTpcdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzItXHRcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXG4tLVxubW0vcm1hcC5jPTI0NjE9c3RhdGljIGJvb2wgdHJ5X3RvX21pZ3JhdGVfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0yNjQ5LVxubW0vcm1hcC5jOjI2NTA6XHRcdFx0d3JpdGFibGUgPSBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSk7XG5tbS9ybWFwLmMtMjY1MS1cdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNjYKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBhcmVhIG9mIGV4cGVydGlzZToKCioqRXhhbWluaW5nIERldmljZSBQcml2YXRlIE1lbW9yeSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIHRoZSBjbHVlIGlzICYjMzQ7ZGV2aWNlIHByaXZhdGUgbWVtb3J5JiMzNDsgYW5kIHRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgdHJpZ2dlcmluZyBhIGNvbm5lY3Rpb24gdG8gYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYnVpbGQgc3lzdGVtLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBpbiBgbW0vS2NvbmZpZ2Ag4oCTIGJlY2F1c2UgbWVtb3J5IG1hbmFnZW1lbnQgaXMgd2hlcmUgZGV2aWNlLXNwZWNpZmljIG1lbW9yeSBhc3NpZ25tZW50cyB3b3VsZCBiZSBsaWtlbHkgaGFuZGxlZC4gQnV0IGBsaWIvS2NvbmZpZ2AgaXMgYWxzbyBhIHBvc3NpYmxlIGxvY2F0aW9uLCBzaW5jZSB0aGUgYERFVklDRV9QUklWQVRFYCBwYXJhbWV0ZXIgbWlnaHQgcmVwcmVzZW50IGEgZ2VuZXJpYyBzZXR0aW5nLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UgdHdvIGxvY2F0aW9ucyBhbmQgdHJhY2UgdGhlIHJlZmVyZW5jZXMgaWYgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyNDg9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWctMTI1MC1cbm1tL0tjb25maWc6MTI1MTpjb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI1Mi1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIEtlcm5lbCBTb2Z0bGVhZiBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBzZXR0aW5nLiBUaGF0JiMzOTtzIG9uZSBjb25maWcgcmVsYXRlZCB0byB0aGlzIHNvZnRsZWFmIHN5c3RlbSwgSSBrbm93IHRoYXQgZm9yIGNlcnRhaW4uIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBlbnVtZXJhdGUgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4KCkxldCYjMzk7cyBzZWXigKYgSSByZWNhbGwgdGhlcmUmIzM5O3MgYSBjb25uZWN0aW9uIGJldHdlZW4gYHNvZnRsZWFmX2lzX21pZ3JhdGlvbmAgYW5kIHNvbWV0aGluZyBjYWxsZWQgYENPTkZJR19NSUdSQVRJT05gLiBSaWdodCwgbWFrZXMgc2Vuc2UsIHRoYXQgdGllcyBpbiB3aXRoIG1lbW9yeSBtaWdyYXRpb24uIEFuZCBgc29mdGxlYWZfaXNfaHdwb2lzb25gIHNlZW1zIHRvIHJlbGF0ZSB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZXJyb3JzLiBGaW5hbGx5LCB0aGVyZSYjMzk7cyBgc29mdGxlYWZfaXNfbWFya2VyYCwgd2hpY2ggc291bmRzIGxpa2UgaXQmIzM5O3MgY29ubmVjdGVkIHRvIGBDT05GSUdfUFRFX01BUktFUmAuCgpUbyBnZXQgYSBkZWZpbml0aXZlIHBpY3R1cmUgb2YgdGhlc2UgY29ubmVjdGlvbnMgYW5kIHBvdGVudGlhbGx5IGZpbmQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGRpcmVjdGx5IHRvIGBtbS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhvc2UgYXNzb2NpYXRpb25zIGFuZCBsb29rIGZvciBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBtYXkgcmVsYXRlIHRvIHRoZSBzb2Z0bGVhZiBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUlHUkFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NjcxPWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjgxLVxubW0vS2NvbmZpZzo2ODI6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02ODMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA5OQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk1lbW9yeSBGYWlsdXJlIGFuZCBQYWdlIFRhYmxlIEVudHJpZXMgLSBBIFF1aWNrIENoZWNrKioKClJpZ2h0LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNvbmZpcm0gYSBmZXcgdGhpbmdzLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgdG8gZG91YmxlLWNoZWNrIHRoZSBpbXBsaWNhdGlvbnMgb2YgYGNvbmZpZyBNRU1PUllfRkFJTFVSRWAuIFdlIGFsbCBrbm93IHdoYXQgaXQgKnNob3VsZCogZG8sIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSB3aGF0IEkgZXhwZWN0IGluICp0aGlzKiBhcmNoaXRlY3R1cmUva2VybmVsIHZlcnNpb24uIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHVuY29ycmVjdGFibGUgbWVtb3J5IGVycm9ycyBpbiB0aGUgY29udGV4dCBvZiB0aGUgcnVubmluZyBwcm9jZXNzZXMsIGFuZCB0aGUgdHJhZGVvZmZzIGJldHdlZW4gZmF1bHQgdG9sZXJhbmNlIGFuZCBzeXN0ZW0gcmVzcG9uc2l2ZW5lc3MuIEFyZSB3ZSBsb2dnaW5nIGVub3VnaCBpbmZvcm1hdGlvbj8gQXJlIHRoZSBlcnJvciBoYW5kbGluZyByb3V0aW5lcyByb2J1c3QgZW5vdWdoIGZvciB0aGUgZXhwZWN0ZWQgd29ya2xvYWRzPyBEb2VzIHRoZSBjaG9zZW4gcG9saWN5IGNvcnJlY3RseSBiYWxhbmNlIG1pbmltaXppbmcgZGF0YSBsb3NzIGFuZCBtYXhpbWl6aW5nIHRoZSBjaGFuY2Ugb2YgcmVjb3Zlcnk/CgpUaGVuLCBJJiMzOTtsbCBxdWlja2x5IGxvb2sgYXQgYGNvbmZpZyBQVEVfTUFSS0VSYC4gV2hhdCAqZXhhY3RseSogYXJlIHRoZSBmbGFncyB3ZSYjMzk7cmUgdXNpbmc/IEl0JiMzOTtzIG5vdCBqdXN0IGFib3V0IHRoZSAqcHJlc2VuY2UqIG9mIHRoZSBtYXJrZXIsIGJ1dCB3aGF0IGl0ICptZWFucyogaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBBcmUgd2UgdXNpbmcgdGhlIG1hcmtlciBmb3IgZGVidWdnaW5nLCBzZWN1cml0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFyZSBhbHdheXMgYSBjb25jZXJuOyBhcmUgdGhlc2UgbWFya2VycyBiZWluZyBoYW5kbGVkIGVmZmljaWVudGx5IGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzLCBvciBpcyB0aGVyZSBhIG1lYXN1cmFibGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQ/IEl0JiMzOTtzIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2sgdG8gYmUgc3VyZSB3ZSYjMzk7cmUgb24gdGhlIHJpZ2h0IHRyYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNT1JZX0ZBSUxVUkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03NjA9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcbi0tXG5tbS9LY29uZmlnLTc2Mi1cbm1tL0tjb25maWc6NzYzOmNvbmZpZyBNRU1PUllfRkFJTFVSRVxubW0vS2NvbmZpZy03NjQtXHRkZXBlbmRzIG9uIE1NVVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDkxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBDb25maWd1cmF0aW9uIC0gUFRFX01BUktFUioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHN0YXR1cyBhbmQgZGVmaW5pdGlvbiBvZiBgY29uZmlnIFBURV9NQVJLRVJgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGUga2VybmVsLCBwcm9iYWJseSByZWxhdGVkIHRvIHBhZ2UgdGFibGUgZW50cmllcy4gVGhlIHRlcm0gJiMzNDtNQVJLRVImIzM0OyBpbXBsaWVzIGl0JiMzOTtzIHVzZWQgZm9yIHNvbWUga2luZCBvZiB0cmFja2luZyBvciBsYWJlbGluZyB3aXRoaW4gdGhvc2UgZW50cmllcywgcG9zc2libHkgZm9yIGRlYnVnZ2luZywgc2VjdXJpdHksIG9yIG1lbW9yeSBtYW5hZ2VtZW50IHB1cnBvc2VzLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGV4YWN0IHB1cnBvc2UuIElzIGl0IGEgY29tcGlsZS10aW1lIG9wdGlvbj8gV2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCB3aGVuIGl0JiMzOTtzIHNlbGVjdGVkPyBNb3JlIHNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZGV0ZXJtaW5lIGl0cyBpbXBhY3Qgb24gdGhlIFBURSBzdHJ1Y3R1cmUgaXRzZWxmIOKAkyBkb2VzIGl0IGFkZCBhIGJpdCwgYSBmaWVsZCwgb3IgYSBtb3JlIGNvbXBsZXggbWV0YWRhdGEgc3RydWN0dXJlIHdpdGhpbiB0aGUgZW50cnk/IEkmIzM5O2xsIGFsc28gd2FudCB0byBrbm93IGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc2VjdXJpdHkgc3Vic3lzdGVtcy4gRm9yIGV4YW1wbGUsIGRvZXMgaXQgcGxheSBhIHJvbGUgaW4gYWRkcmVzcyBzcGFjZSBsYXlvdXQgcmFuZG9taXphdGlvbiAoQVNMUiksIGtlcm5lbCBhZGRyZXNzIHNwYWNlIHJhbmRvbWl6YXRpb24gKEtBU0xSKSwgb3IgcGVyaGFwcyBldmVuIHNvbWUgZm9ybSBvZiBrZXJuZWwgdGFpbnQgdHJhY2tpbmc/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucywgc3VjaCBhcyBpbmNyZWFzZWQgb3ZlcmhlYWQgZHVyaW5nIFRMQiBzaG9vdGRvd25zIG9yIHBhZ2UgdGFibGUgd2Fsa3M/CgpCYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgSSBjYW4gZGVkdWNlIGhvdyBpdCBtaWdodCBiZSB1c2VkLiBEb2VzIGl0IGluZmx1ZW5jZSB0aGUgdmlydHVhbCBtZW1vcnkgbWFwIG9yIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUFRFJiMzOTtzIHVzYWdlIGFuZCBvd25lcnNoaXA/CgpVbHRpbWF0ZWx5LCBteSBnb2FsIGlzIHRvIGFzc2VzcyBpdHMgc2lnbmlmaWNhbmNlIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8ga25vdyBpdHMgaW1wYWN0IG9uIG1lbW9yeSBwcm90ZWN0aW9uLCBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLCBhbmQgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBURV9NQVJLRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcbi0tXG5tbS9LY29uZmlnLTEzODgtXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxubW0vS2NvbmZpZy0xMzkwLVx0Ym9vbCBcJiMzNDtVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTMyCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpZ2dpbmcgaW50byBQVEUgTWFya2VyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYFBURV9NQVJLRVJgIGlzIHNldCB0byBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAuIFRoYXQgcmluZ3MgYSBiZWxsLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb24gb2YgdGhhdCBtYXJrZXIgbG9naWMgcmVzaWRlcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJlZmVyZW5jZSBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgc29mdGxlYWZfaXNfbWFya2VyYC4gR290dGEgYmUgc3VyZSBhYm91dCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb2Z0bGVhZl9pc19tYXJrZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTI2MzY9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX2h1Z2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yNjQ5LVx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZShwdGVudCk7XG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY1MDpcdGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkgfHwgc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSlcbmZzL3Byb2MvdGFza19tbXUuYy0yNjUxLVx0XHRyZXR1cm47XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzE1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19od3BvaXNvbihzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMyMC0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjMyMTogKiBzb2Z0bGVhZl9pc19tYXJrZXIoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIG1hcmtlcj9cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMyMi0gKiBAZW50cnk6IExlYWYgZW50cnkuXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzI1LSAqL1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzI2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMyNy17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzMyLSAqIHNvZnRsZWFmX3RvX21hcmtlcigpIC0gT2J0YWluIG1hcmtlciBhc3NvY2lhdGVkIHdpdGggbGVhZiBlbnRyeS5cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjMzMzogKiBAZW50cnk6IExlYWYgZW50cnksIHNvZnRsZWFmX2lzX21hcmtlcihAZW50cnkpIG11c3QgcmV0dXJuIHRydWUuXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMzQtICpcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0zMzc9c3RhdGljIGlubGluZSBwdGVfbWFya2VyIHNvZnRsZWFmX3RvX21hcmtlcihzb2Z0bGVhZl90IGVudHJ5KVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzM4LXtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjMzOTpcdFZNX1dBUk5fT05fT05DRSghc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSk7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNDAtXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NDQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19wb2lzb25fbWFya2VyKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NDYte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDQ3Olx0aWYgKCFzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDQ4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NDU5PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19ndWFyZF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ2MC17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0NjE6XHRpZiAoIXNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NjItXHRcdHJldHVybiBmYWxzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00NzY9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3VmZmRfd3BfbWFya2VyKHNvZnRsZWFmX3QgZW50cnkpXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00Nzcte1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDc4Olx0aWYgKCFzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDc5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfbWFya2VyKHB0ZV90IHB0ZSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTU0Ni17XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1NDc6XHRyZXR1cm4gc29mdGxlYWZfaXNfbWFya2VyKHNvZnRsZWFmX2Zyb21fcHRlKHB0ZSkpO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTQ4LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD01NzQ9c3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTc3LVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NTc4Olx0aWYgKCFzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTc5LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vbWVtb3J5LmM9MTAwMT1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL21lbW9yeS5jLTEwODgtXHRcdHJldHVybiAtRU5PRU5UO1xubW0vbWVtb3J5LmM6MTA4OTpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSkge1xubW0vbWVtb3J5LmMtMTA5MC1cdFx0cHRlX21hcmtlciBtYXJrZXIgPSBjb3B5X3B0ZV9tYXJrZXIoZW50cnksIGRzdF92bWEpO1xuLS1cbm1tL21lbW9yeS5jPTQ4MTg9c3RhdGljIHZtX2ZhdWx0X3QgZG9fbm9uX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00ODcwLVx0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjtcbm1tL21lbW9yeS5jOjQ4NzE6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTQ4NzItXHRcdHJldCA9IGhhbmRsZV9wdGVfbWFya2VyKHZtZik7XG4tLVxubW0vbXByb3RlY3QuYz0yMTQ9c3RhdGljIGxvbmcgY2hhbmdlX3NvZnRsZWFmX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tcHJvdGVjdC5jLTI0NS1cdFx0XHRuZXdwdGUgPSBwdGVfc3dwX21rdWZmZChuZXdwdGUpO1xubW0vbXByb3RlY3QuYzoyNDY6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcbm1tL21wcm90ZWN0LmMtMjQ3LVx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM5NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZhY3RvcmluZyBNZW1vcnkgTWFuYWdlbWVudCBDb3JlKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIEl0IGxvb2tzIGxpa2UgYGRvX3N3YXBfcGFnZWAgaXMgYmVpbmcgc3BsaXQgaW50byBgZG9fbm9uX3N3YXBfcGFnZWAsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgcmVmYWN0b3JpbmcuIFRoZXkmIzM5O3JlIGFsc28gdXBkYXRpbmcgc29tZSBjcnVjaWFsIGxvY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBmdW5jdGlvbnM6IGB0cnlsb2NrX3BhZ2VgIGlzIG5vdyBgZm9saW9fdHJ5bG9ja2AsIGFuZCBgZ2V0X3BhZ2VgIGlzIGJlY29taW5nIGBmb2xpb19nZXRgLiBUaGlzIGlzIGRlZmluaXRlbHkgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgc3BhY2UuIEl0IHN1Z2dlc3RzIGEgbW92ZSB0b3dhcmQgZm9saW8tYmFzZWQgb3BlcmF0aW9ucywgbGlrZWx5IGFpbWluZyBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIG9yIGZsZXhpYmlsaXR5LgoKUmlnaHQsIGxldCYjMzk7cyBzZWUgd2hhdCBmZWF0dXJlcyBhcmUgaW1wYWN0ZWQuIFRoZSBjb25maWdzIHRoYXQgYXJlIGVuYWJsZWQgc3VnZ2VzdCB0aGlzIGlzIHRpZWQgdG8gcHJpdmF0ZSBkZXZpY2VzLCBtaWdyYXRpb24sIG1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nLCBhbmQgVUZGRCB3aXRoIHdyaXRlIHByb3RlY3Rpb24gbWFya2VycyAoYFBURV9NQVJLRVJfVUZGRF9XUGApLiBIb2xkIG9uIGEgc2Vjb25kLCB0aGF0IFVGRkQgV1AgbWFya2VyLCBJJiMzOTttIGdldHRpbmcgYSBmZWVsaW5nIHRoYXQgbWlnaHQgbm90IGJlIHRoZSAqb25seSogbWFya2VyIHRoaXMgY2hhbmdlIGNvbmNlcm5zLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIGBjb25maWcgUFRFX01BUktFUmAgZW50cnkgaW4gYG1tL0tjb25maWdgLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlLiBHb3R0YSBiZSB0aG9yb3VnaCB3aXRoIGNoYW5nZXMgdGhpcyBsb3ctbGV2ZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQVEVfTUFSS0VSJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4Mj1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xMzg4LVxubW0vS2NvbmZpZzoxMzg5OmNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbm1tL0tjb25maWctMTM5MC1cdGJvb2wgXCYjMzQ7VXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4OTAKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBQVEUgTWFya2VyIERlZmluaXRpb24qKgoKUmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGBQVEVfTUFSS0VSYCBtYWNybyBpcyBkZWZpbmVkLiBTZWVtcyBsaWtlIHRoZSBzdGFuZGFyZCBwbGFjZXMgdG8gbG9vayBhcmUgZ29pbmcgdG8gYmUgaW4gdGhlIGtlcm5lbCBoZWFkZXJzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgaW5jbHVkZS9saW51eC9sZWFmb3BzLmhgIGZpcnN0LCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIGEgbG90IG9mIHRoZSBwYWdlIHRhYmxlIHJlbGF0ZWQgbWFjcm9zIHRlbmQgdG8gbGl2ZS4gSWYgaXQgaXNuJiMzOTt0IHRoZXJlLCBvciBpZiBpdCYjMzk7cyBzb21laG93IGRlcGVuZGVudCBvbiBhIEtjb25maWcgb3B0aW9uLCB0aGVuIEkmIzM5O2xsIGRlbHZlIGludG8gYG1tL0tjb25maWdgLiBJdCYjMzk7cyBwb3NzaWJsZSBpdCYjMzk7cyBjb250cm9sbGVkIGJ5IGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGZlYXR1cmUgY29uZmlndXJhdGlvbiwgc28ga25vd2luZyBpdHMgZXhhY3QgZGVmaW5pdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgaW1wYWN0LiBJJiMzOTtsbCBwcmlvcml0aXplIGVmZmljaWVuY3kgYW5kIHF1aWNrbHkgc2NhbiB0aG9zZSBmaWxlcyBmb3IgYW55IGNsdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFRFX01BUktFUiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzODI9bWVudWNvbmZpZyBVU0VSRkFVTFRGRFxuLS1cbm1tL0tjb25maWctMTM4OC1cbm1tL0tjb25maWc6MTM4OTpjb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG5tbS9LY29uZmlnLTEzOTAtXHRib29sIFwmIzM0O1VzZXJmYXVsdGZkIHdyaXRlIHByb3RlY3Rpb24gc3VwcG9ydCBmb3Igc2htZW0vaHVnZXRsYmZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjIwCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkZWFsaW5nIHdpdGggYFBURV9NQVJLRVJgIGhlcmUuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgJiMzNDtIYW5nIG9uIGEgc2VjLCB3YXNuJiMzOTt0IHRoYXQgYSBjb25maWd1cmF0aW9uIHN5bWJvbD8mIzM0OyBJdCBqdXN0ICpmZWVscyogbGlrZSBhIGNvbmZpZyBvcHRpb24uIFJpZ2h0LCBiZXR0ZXIgY29uZmlybSB0aGF0IGluc3RpbmN0LiBUaGUgbG9naWNhbCBwbGFjZSB0byBnbyBmb3IgY29uZmlybWF0aW9uIGlzIGBtbS9LY29uZmlnYCwgdGhhdCYjMzk7cyB0aGUgaG9tZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCwgaXNuJiMzOTt0IGl0PyBMZXQmIzM5O3MgZ28gY2hlY2sgZm9yIGBQVEVfTUFSS0VSYCB0aGVyZSBhbmQgc2VlIHdoYXQgd2UgZmluZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdGhpbmcgaXMgZGVmaW5lZCBhbmQgaWYgSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGRlcGVuZGVuY2llcywgZGVmYXVsdHMsIGFuZCBhbGwgdGhhdCBmdW4gY29uZmlnIHN0dWZmIHRoYXQgY2FuIHRyaXAgeW91IHVwLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLgpZb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS4KRG8gTk9UIHJlcXVlc3QgaXQgYWdhaW4uIFlvdSBNVVNUIHN5bnRoZXNpemUgdGhlIGluZm9ybWF0aW9uIHlvdSBhbHJlYWR5IGhhdmUsCnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC48L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBURV9NQVJLRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NjgKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIHByb2Nlc3MgdGhpc+KApgoKKipBbmFseXppbmcgdGhlIFBURSBNYXJrZXIgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgSSByZWNvZ25pemUgdGhhdCBgUFRFX01BUktFUl9VRkZEX1dQYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnIGhlcmUuIFRoYXQgbWFrZXMgc2Vuc2UuIEJ1dCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBgY29uZmlnIFBURV9NQVJLRVJgIHdpdGhpbiBgbW0vS2NvbmZpZ2AuIFdhaXQsIGhvbGQgb24gYSBzZWNvbmTigKYgSSYjMzk7dmUgYWxyZWFkeSBzY3J1dGluaXplZCB0aGF0IEtjb25maWcgZW50cnksIGhhdmVuJiMzOTt0IEk/IE5vIG5lZWQgdG8gcmUtdHJlYWQgdGhhdCBncm91bmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BURV9NQVJLRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS91c2VyZmF1bHRmZC5yc3Q9MzkzPVJXUCBtYXJrZXI6IHRoZSBuZXh0IGFjY2VzcyByZS1wb3B1bGF0ZXMgdGhlIHJhbmdlIHdpdGhvdXQgcHJvdGVjdGlvbi5cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdXNlcmZhdWx0ZmQucnN0OjM5NDpVbmxpa2UgV1AgKHdoaWNoIHBlcnNpc3RzIHZpYSBgYFBURV9NQVJLRVJfVUZGRF9XUGBgKSwgdGhlcmUgaXMgbm9cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdXNlcmZhdWx0ZmQucnN0LTM5NS1wZXJzaXN0ZW50IFJXUCBtYXJrZXIgdG9kYXkuIFRoZSB1c2VyIG5lZWRzIHRvIHJlLWFybSB0aGUgcmFuZ2Ugd2l0aFxuLS1cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTk0OT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zd3Bfb2Zmc2V0X3JzdGUoc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xOTU4LSAqIFRoaXMgaXMgYWxzbyB0cnVlIGZvciBzd2FwIGVudHJpZXMsIGFuZCB0aGVpciBzd2FwIHR5cGUgYW5kIG9mZnNldCBlbmNvZGluZy5cbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTk1OTogKiBGb3IgaHVnZXRsYmZzIFBURV9NQVJLRVIgc3VwcG9ydCwgczM5MCBoYXMgaW50ZXJuYWwgX19zd3BfdHlwZV9yc3RlKCkgYW5kXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE5NjAtICogX19zd3Bfb2Zmc2V0X3JzdGUoKSBoZWxwZXJzIHRvIGNvcnJlY3RseSBoYW5kbGUgUlNURSBzd2FwIGVudHJpZXMuXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTI1MDM9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjUxMy1cdFx0c2V0X3B0ZV9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSxcbmZzL3Byb2MvdGFza19tbXUuYzoyNTE0Olx0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbmZzL3Byb2MvdGFza19tbXUuYy0yNTE1LVx0fSBlbHNlIHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjYzNj1zdGF0aWMgdm9pZCBtYWtlX3VmZmRfd3BfaHVnZV9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI2NDQtXHRcdHNldF9odWdlX3B0ZV9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjY0NTpcdFx0XHRcdG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApLCBwc2l6ZSk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY0Ni1cdFx0cmV0dXJuO1xuLS1cbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg9MTY9c3RhdGljIGlubGluZSBib29sIHVmZmRfc3VwcG9ydHNfd3BfbWFya2VyKHZvaWQpXG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oLTE3LXtcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg6MTg6XHRyZXR1cm4gcGd0YWJsZV9zdXBwb3J0c191ZmZkKCkgXHUwMDI2XHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUCk7XG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oLTE5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0xNjA9c3RhdGljIGlubGluZSBlbnVtIHNvZnRsZWFmX3R5cGUgc29mdGxlYWZfdHlwZShzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTE5Mi0jZW5kaWZcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE5MzpcdGNhc2UgU1dQX1BURV9NQVJLRVI6XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xOTQtXHRcdHJldHVybiBTT0ZUTEVBRl9NQVJLRVI7XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzM3PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBzb2Z0bGVhZl90b19tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNDAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNDE6XHRyZXR1cm4gc3dwX29mZnNldChlbnRyeSkgXHUwMDI2IFBURV9NQVJLRVJfTUFTSztcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0Mi19XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NDQ1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19wb2lzb25fbWFya2VyKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDQ5LVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDUwOlx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXHUwMDI2IFBURV9NQVJLRVJfUE9JU09ORUQ7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NTEtfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ1OT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZ3VhcmRfbWFya2VyKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDYzLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDY0Olx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXHUwMDI2IFBURV9NQVJLRVJfR1VBUkQ7XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NjUtfVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ3Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00ODAtXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0ODE6XHRyZXR1cm4gc29mdGxlYWZfdG9fbWFya2VyKGVudHJ5KSBcdTAwMjYgUFRFX01BUktFUl9VRkZEX1dQO1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDgyLX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTU1NT1zdGF0aWMgaW5saW5lIHB0ZV9tYXJrZXIgY29weV9wdGVfbWFya2VyKFxuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTU5LVx0LyogQWx3YXlzIGNvcHkgZXJyb3IgZW50cmllcy4gKi9cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYwOlx0cHRlX21hcmtlciBkc3RtID0gc3JjbSBcdTAwMjYgKFBURV9NQVJLRVJfUE9JU09ORUQgfCBQVEVfTUFSS0VSX0dVQVJEKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYxLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01NjItXHQvKiBPbmx5IGNvcHkgUFRFIG1hcmtlcnMgaWYgVUZGRCByZWdpc3RlciBtYXRjaGVzLiAqL1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1NjM6XHRpZiAoKHNyY20gXHUwMDI2IFBURV9NQVJLRVJfVUZGRF9XUCkgXHUwMDI2XHUwMDI2IHVzZXJmYXVsdGZkX3dwKGRzdF92bWEpKVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1NjQ6XHRcdGRzdG0gfD0gUFRFX01BUktFUl9VRkZEX1dQO1xuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC01NjUtXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD01ODI9cHRlX2luc3RhbGxfdWZmZF93cF9pZl9uZWVkZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTYxNC1cdFx0c2V0X3B0ZV9hdCh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NjE1Olx0XHRcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNjE2LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD0yOT1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTU0LSAqL1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NTU6I2RlZmluZSBTV1BfUFRFX01BUktFUl9OVU0gMVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTY6I2RlZmluZSBTV1BfUFRFX01BUktFUiAgICAgKE1BWF9TV0FQRklMRVMgJiM0MzsgU1dQX0hXUE9JU09OX05VTSAmIzQzOyBcXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTctXHRcdFx0ICAgIFNXUF9NSUdSQVRJT05fTlVNICYjNDM7IFNXUF9ERVZJQ0VfTlVNKVxuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTExMC1cdFNXUF9NSUdSQVRJT05fTlVNIC0gU1dQX0hXUE9JU09OX05VTSAtIFxcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDoxMTE6XHRTV1BfUFRFX01BUktFUl9OVU0pXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0xMTItXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MjgxPXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfbWFya2VyO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjgyLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MjgzOiNkZWZpbmUgIFBURV9NQVJLRVJfVUZGRF9XUFx0XHRcdEJJVCgwKVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjg0LS8qXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjkyLSAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MjkzOiNkZWZpbmUgIFBURV9NQVJLRVJfUE9JU09ORURcdFx0XHRCSVQoMSlcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI5NC0vKlxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI5OC0gKi9cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjI5OTojZGVmaW5lICBQVEVfTUFSS0VSX0dVQVJEXHRcdFx0QklUKDIpXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMDA6I2RlZmluZSAgUFRFX01BUktFUl9NQVNLXHRcdFx0KEJJVCgzKSAtIDEpXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMDEtXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMDI9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3B0ZV9tYXJrZXJfZW50cnkocHRlX21hcmtlciBtYXJrZXIpXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMDMte1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzA0Olx0cmV0dXJuIHN3cF9lbnRyeShTV1BfUFRFX01BUktFUiwgbWFya2VyKTtcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMwNS19XG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzEyPXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9wb2lzb25lZF9zd3BfZW50cnkodm9pZClcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMxMy17XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMTQ6XHRyZXR1cm4gbWFrZV9wdGVfbWFya2VyX2VudHJ5KFBURV9NQVJLRVJfUE9JU09ORUQpO1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzE1LX1cbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMTc9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzE4LXtcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMxOTpcdHJldHVybiBtYWtlX3B0ZV9tYXJrZXJfZW50cnkoUFRFX01BUktFUl9HVUFSRCk7XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjAtfVxuLS1cbm1tL0tjb25maWc9MTM4Mj1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXG4tLVxubW0vS2NvbmZpZy0xMzg4LVxubW0vS2NvbmZpZzoxMzg5OmNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbm1tL0tjb25maWctMTM5MC1cdGJvb2wgXCYjMzQ7VXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcJiMzNDtcbi0tXG5tbS9odWdldGxiLmM9NTIxMz12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTUyNzQtXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXG5tbS9odWdldGxiLmM6NTI3NTpcdFx0XHRcdFx0XHRtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSxcbm1tL2h1Z2V0bGIuYy01Mjc2LVx0XHRcdFx0XHRcdHN6KTtcbi0tXG5tbS9odWdldGxiLmMtNTMxMC1cdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXG5tbS9odWdldGxiLmM6NTMxMTpcdFx0XHRcdFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksXG5tbS9odWdldGxiLmMtNTMxMi1cdFx0XHRcdFx0c3opO1xuLS1cbm1tL2h1Z2V0bGIuYz02MDEyPXZtX2ZhdWx0X3QgaHVnZXRsYl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTYwNjktXG5tbS9odWdldGxiLmM6NjA3MDpcdFx0aWYgKG1hcmtlciBcdTAwMjYgUFRFX01BUktFUl9QT0lTT05FRCkge1xubW0vaHVnZXRsYi5jLTYwNzEtXHRcdFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfFxuLS1cbm1tL2h1Z2V0bGIuYy02MDczLVx0XHRcdGdvdG8gb3V0X211dGV4O1xubW0vaHVnZXRsYi5jOjYwNzQ6XHRcdH0gZWxzZSBpZiAoV0FSTl9PTl9PTkNFKG1hcmtlciBcdTAwMjYgUFRFX01BUktFUl9HVUFSRCkpIHtcbm1tL2h1Z2V0bGIuYy02MDc1LVx0XHRcdC8qIFRoaXMgaXNuJiMzOTt0IHN1cHBvcnRlZCBpbiBodWdldGxiLiAqL1xuLS1cbm1tL2h1Z2V0bGIuYz02Mjc1PWludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXG4tLVxubW0vaHVnZXRsYi5jLTYzMDUtXG5tbS9odWdldGxiLmM6NjMwNjpcdFx0X2RzdF9wdGUgPSBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9QT0lTT05FRCk7XG5tbS9odWdldGxiLmMtNjMwNy1cdFx0c2V0X2h1Z2VfcHRlX2F0KGRzdF9tbSwgZHN0X2FkZHIsIGRzdF9wdGUsIF9kc3RfcHRlLCBzaXplKTtcbi0tXG5tbS9odWdldGxiLmM9NjQ5Nj1sb25nIGh1Z2V0bGJfY2hhbmdlX3Byb3RlY3Rpb24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTY1NzQtXHRcdFx0XHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXG5tbS9odWdldGxiLmM6NjU3NTpcdFx0XHRcdFx0XHRtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSxcbm1tL2h1Z2V0bGIuYy02NTc2LVx0XHRcdFx0XHRcdHBzaXplKTtcbi0tXG5tbS9tYWR2aXNlLmM9MTEwMz1zdGF0aWMgaW50IGd1YXJkX2luc3RhbGxfc2V0X3B0ZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbmV4dCxcbi0tXG5tbS9tYWR2aXNlLmMtMTEwOC1cdC8qIFNpbXBseSBpbnN0YWxsIGEgUFRFIG1hcmtlciwgdGhpcyBjYXVzZXMgc2VnZmF1bHQgb24gYWNjZXNzLiAqL1xubW0vbWFkdmlzZS5jOjExMDk6XHQqcHRlcCA9IG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX0dVQVJEKTtcbm1tL21hZHZpc2UuYy0xMTEwLVx0KCpucl9wYWdlcykmIzQzOyYjNDM7O1xuLS1cbm1tL21lbW9yeS5jPTQ2MjA9c3RhdGljIHZtX2ZhdWx0X3QgcHRlX21hcmtlcl9jbGVhcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00NjMwLVx0ICogVGhpcyBzaG91bGQgYWxzbyBjb3ZlciB0aGUgY2FzZSB3aGVyZSBlLmcuIHRoZSBwdGUgY2hhbmdlZFxubW0vbWVtb3J5LmM6NDYzMTpcdCAqIHF1aWNrbHkgZnJvbSBhIFBURV9NQVJLRVJfVUZGRF9XUCBpbnRvIFBURV9NQVJLRVJfUE9JU09ORUQuXG5tbS9tZW1vcnkuYy00NjMyLVx0ICogU28gcHRlX2lzX21hcmtlcigpIGNoZWNrIGlzIG5vdCBlbm91Z2ggdG8gc2FmZWx5IGRyb3AgdGhlIHB0ZS5cbi0tXG5tbS9tZW1vcnkuYz00NjY0PXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfbWFya2VyKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ2NzYtXHQvKiBIaWdoZXIgcHJpb3JpdHkgdGhhbiB1ZmZkLXdwIHdoZW4gZGF0YSBjb3JydXB0ZWQgKi9cbm1tL21lbW9yeS5jOjQ2Nzc6XHRpZiAobWFya2VyIFx1MDAyNiBQVEVfTUFSS0VSX1BPSVNPTkVEKVxubW0vbWVtb3J5LmMtNDY3OC1cdFx0cmV0dXJuIFZNX0ZBVUxUX0hXUE9JU09OO1xuLS1cbm1tL21lbW9yeS5jLTQ2ODAtXHQvKiBIaXR0aW5nIGEgZ3VhcmQgcGFnZSBpcyBhbHdheXMgYSBmYXRhbCBjb25kaXRpb24uICovXG5tbS9tZW1vcnkuYzo0NjgxOlx0aWYgKG1hcmtlciBcdTAwMjYgUFRFX01BUktFUl9HVUFSRClcbm1tL21lbW9yeS5jLTQ2ODItXHRcdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xuLS1cbm1tL21wcm90ZWN0LmM9MzMxPXN0YXRpYyBsb25nIGNoYW5nZV9wdGVfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tcHJvdGVjdC5jLTQyNy1cdFx0XHRcdHNldF9wdGVfYXQodm1hLVx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXG5tbS9tcHJvdGVjdC5jOjQyODpcdFx0XHRcdFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xubW0vbXByb3RlY3QuYy00MjktXHRcdFx0XHRwYWdlcyYjNDM7JiM0Mzs7XG4tLVxubW0vdXNlcmZhdWx0ZmQuYz03MzQ9c3RhdGljIGludCBtZmlsbF9hdG9taWNfcHRlX3BvaXNvbihzdHJ1Y3QgbWZpbGxfc3RhdGUgKnN0YXRlKVxuLS1cbm1tL3VzZXJmYXVsdGZkLmMtNzQzLVxubW0vdXNlcmZhdWx0ZmQuYzo3NDQ6XHRfZHN0X3B0ZSA9IG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1BPSVNPTkVEKTtcbm1tL3VzZXJmYXVsdGZkLmMtNzQ1LVx0cmV0ID0gLUVBR0FJTjtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc9Mj1DT05GSUdfVVNFUkZBVUxURkQ9eVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnOjM6Q09ORklHX1BURV9NQVJLRVJfVUZGRF9XUD15XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNC1DT05GSUdfVEVTVF9WTUFMTE9DPW1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU1MTMKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUFRFX01BUktFUiBDb25maWd1cmF0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYFBURV9NQVJLRVJfVUZGRF9XUGAgY29uZmlnIOKAkyB0aGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIGZvciBQVEUgbWFya2VycywgcmlnaHQ/IEhtbSwgaGFuZyBvbiwgdGhlcmUgYXJlIGFsc28gYFBURV9NQVJLRVJfUE9JU09ORURgIGFuZCBgUFRFX01BUktFUl9HVUFSRGAuIEFyZSB0aG9zZSBkZXBlbmRlbnQgb24gYW55IG90aGVyIGNvbmZpZ3M/IEl0IGxvb2tzIGxpa2UgYFBURV9NQVJLRVJfUE9JU09ORURgIGlzIGVpdGhlciB1c2VkIHVuY29uZGl0aW9uYWxseSBvciBwZXJoYXBzIGxpbmtlZCB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYW5kIGBQVEVfTUFSS0VSX0dVQVJEYCBzZWVtcyB1bmNvbmRpdGlvbmFsIGFzIHdlbGwuCgpUaGVyZWZvcmUsIGBDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQYCBpcyBkZWZpbml0ZWx5IGEgZ29vZCBjb25maWcgdG8gY29uc2lkZXIgZm9yIGluY2x1c2lvbi4gQmV5b25kIHRoYXQsIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgYENPTkZJR19ERVZJQ0VfUFJJVkFURWAsIGBDT05GSUdfTUlHUkFUSU9OYCwgYW5kIGBDT05GSUdfTUVNT1JZX0ZBSUxVUkVgIHRvby4KCk5vdywgbGV0IG1lIGRpZyBpbnRvIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIHNwZWNpZmljYWxseS4gSSYjMzk7bGwgY2hlY2sgYG1tL0tjb25maWdgIGZvciB0aGF0IG9uZS4gQWgsIG9rYXksIGl0IGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gTGV0IG1lIGNoZWNrIHRoYXQgY29uZmlnLiBgQ09ORklHX1pPTkVfREVWSUNFYCBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIFdoaWxlIEkgdW5kZXJzdGFuZCB0aGUgaGllcmFyY2h5IGhlcmUsIEkgZG9uJiMzOTt0IG5lZWQgdG8gbGlzdCBhbGwgdGhvc2UgZGVwZW5kZW5jaWVzLCBzbyBJIGNhbiBqdXN0IHJlbWVtYmVyIGBERVZJQ0VfUFJJVkFURWAsIGBNSUdSQVRJT05gLCBgTUVNT1JZX0ZBSUxVUkVgLCBhbmQsIG9mIGNvdXJzZSwgYFBURV9NQVJLRVJfVUZGRF9XUGAuCgpXYWl0IGEgbWludXRlLCB0aGlzIHBhdGNoIGlzIGV4dHJhY3RpbmcgYGRvX25vbl9zd2FwX3BhZ2VgIGZyb20gYGRvX3N3YXBfcGFnZWAsIGludGVyZXN0aW5nLiBJdCBzZWVtcyBsaWtlIHRoZSBgZG9fbm9uX3N3YXBfcGFnZWAgZnVuY3Rpb24gd2lsbCBoYW5kbGUgYSB2YXJpZXR5IG9mIGNhc2VzLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGhhbmRsaW5nIHRoaW5ncyBsaWtlOgotIGBzb2Z0bGVhZl9pc19taWdyYXRpb25gCi0gYHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmVgCi0gYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYAotIGBzb2Z0bGVhZl9pc19od3BvaXNvbmAKLSBgc29mdGxlYWZfaXNfbWFya2VyYAoKUmlnaHQsIHRoZSBwb2ludCBpcyB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZWAgd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9sZWFmb3BzLmg9Mjg3PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl90IGVudHJ5KVxuLS1cbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI5OC0vKipcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjI5OTogKiBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UtZXhjbHVzaXZlIGVudHJ5P1xuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzAwLSAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbi0tXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMDMtICovXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozMDQ6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoc29mdGxlYWZfdCBlbnRyeSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMwNS17XG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzU1PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9oYXNfcGZuKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzYzLVx0XHRyZXR1cm4gdHJ1ZTtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjM2NDpcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2NS1cdFx0cmV0dXJuIHRydWU7XG4tLVxubW0vaG1tLmM9MjQxPXN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfcHRlKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaG1tLmMtMjkzLVxubW0vaG1tLmM6Mjk0Olx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXG5tbS9obW0uYy0yOTUtXHRcdFx0Z290byBmYXVsdDtcbi0tXG5tbS9tZW1vcnkuYz0xMDAxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vbWVtb3J5LmMtMTA3Ny1cdFx0fVxubW0vbWVtb3J5LmM6MTA3ODpcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTEwNzktXHRcdC8qXG4tLVxubW0vbWVtb3J5LmM9MTgxMT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbWVtb3J5LmMtMTgyMS1cdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcbm1tL21lbW9yeS5jOjE4MjI6XHQgICAgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcbm1tL21lbW9yeS5jLTE4MjMtXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4tLVxubW0vbWVtb3J5LmM9NDgxOD1zdGF0aWMgdm1fZmF1bHRfdCBkb19ub25fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTQ4MjgtXHRcdFx0XHQgICAgIHZtZi1cdTAwM2VhZGRyZXNzKTtcbm1tL21lbW9yeS5jOjQ4Mjk6XHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XG5tbS9tZW1vcnkuYy00ODMwLVx0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuLS1cbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03MS1cdFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXHUwMDI2XHUwMDI2XG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzo3MjpcdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTczLVx0XHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXG4tLVxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTMxLVx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSBcdTAwMjZcdTAwMjZcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjEzMjpcdFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzMy1cdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MzE2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgZXhwZWN0YXRpb24gdGhhdCBJJiMzOTttIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgYHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmVgIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIHN0cmFpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hpY2ggY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlYCBzZXR0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHRyaWdnZXJpbmcgdGhpcyBiZWhhdmlvciwgb3IgbW9yZSBzcGVjaWZpY2FsbHksIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBvciBzd2l0Y2hlcyBhcmUuIEl0JiMzOTtzIGNydWNpYWwgZm9yIG1lIHRvIHF1aWNrbHkgaXNvbGF0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBlbGVtZW50cy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgYm9vbGVhbiBmbGFnLCBvciBpcyBpdCBhIG1vcmUgY29tcGxleCBzZXR1cCB3aXRoIG11bHRpcGxlIGRlcGVuZGVuY2llcyB0aGF0IEkgbmVlZCB0byB0cmFjZT8gUGVyaGFwcyBpdCYjMzk7cyBidXJpZWQgaW4gc29tZSBvYnNjdXJlIHNlY3Rpb24gb2YgdGhlIHN5c3RlbSBjb25maWcgdGhhdCBJJiMzOTttIG92ZXJsb29raW5nPyBUaW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NXUF9ERVZJQ0VfRVhDTFVTSVZFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbGVhZm9wcy5oPTE2MD1zdGF0aWMgaW5saW5lIGVudW0gc29mdGxlYWZfdHlwZSBzb2Z0bGVhZl90eXBlKHNvZnRsZWFmX3QgZW50cnkpXG4tLVxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTg1LVx0XHRyZXR1cm4gU09GVExFQUZfREVWSUNFX1BSSVZBVEVfUkVBRDtcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE4NjpcdGNhc2UgU1dQX0RFVklDRV9FWENMVVNJVkU6XG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODctXHRcdHJldHVybiBTT0ZUTEVBRl9ERVZJQ0VfRVhDTFVTSVZFO1xuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oPTI5PXN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa3N3YXBkKHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNjgtICogV2hlbiBhIHBhZ2UgaXMgbWFwcGVkIGJ5IHRoZSBkZXZpY2UgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3Mgd2Ugc2V0IHRoZSBDUFUgcGFnZVxuaW5jbHVkZS9saW51eC9zd2FwLmg6Njk6ICogdGFibGUgZW50cmllcyB0byBhIHNwZWNpYWwgU1dQX0RFVklDRV9FWENMVVNJVkUgZW50cnkuXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03MC0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03NC0jZGVmaW5lIFNXUF9ERVZJQ0VfUkVBRCAoTUFYX1NXQVBGSUxFUyYjNDM7U1dQX0hXUE9JU09OX05VTSYjNDM7U1dQX01JR1JBVElPTl9OVU0mIzQzOzEpXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo3NTojZGVmaW5lIFNXUF9ERVZJQ0VfRVhDTFVTSVZFIChNQVhfU1dBUEZJTEVTJiM0MztTV1BfSFdQT0lTT05fTlVNJiM0MztTV1BfTUlHUkFUSU9OX05VTSYjNDM7MilcbmluY2x1ZGUvbGludXgvc3dhcC5oLTc2LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTQ2PXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTQ3LXtcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjE0ODpcdHJldHVybiBzd3BfZW50cnkoU1dQX0RFVklDRV9FWENMVVNJVkUsIG9mZnNldCk7XG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0xNDktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk0MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6CgoqKkNoZWNraW5nIGZvciBgU1dQX0RFVklDRV9FWENMVVNJVkVgKioKCkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgaW52b2x2ZXMgc29tZXRoaW5nIHJlbGF0ZWQgdG8gc3dhcHBpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZWZpbml0aW9ucyByZWxhdGVkIHRvIHN3YXAgc3BhY2UsIGFuZCB0aGF0IHVzdWFsbHkgcmVzaWRlcyBpbiB0aGUga2VybmVsIGhlYWRlcnMuIE15IG11c2NsZSBtZW1vcnkgdGVsbHMgbWUgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIFRoYXQgaGVhZGVyIGZpbGUgaXMgdGhlIGRlZmluaXRpdmUgc291cmNlIGZvciBzd2FwLXJlbGF0ZWQgc3RydWN0dXJlcywgY29uc3RhbnRzLCBhbmQgbWFjcm9zIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgYFNXUF9ERVZJQ0VfRVhDTFVTSVZFYCwgc28sIEkmIzM5O2xsIGdvIGNoZWNrIHRoYXQgaGVhZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWSUNFX1BSSVZBVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjQ4PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNTAtXG5tbS9LY29uZmlnOjEyNTE6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNTItXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFN3YXAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYFNXUF9ERVZJQ0VfRVhDTFVTSVZFYCBiZWluZyBjb25kaXRpb25hbGx5IGVuYWJsZWQuIFJpZ2h0LCBpdCYjMzk7cyB0aWVkIHRvIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb24uIFRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBzd2FwIGRlZmluaXRpb25zLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgZXhhY3RseSB0aGF0IGZsYWcgbGl2ZXMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIEFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGFyb3VuZCBsaW5lIDc1LCBnaXZlIG9yIHRha2UuIEdvdHRhIHF1aWNrbHkgY29uZmlybSB0aGUgZXhhY3QgbG9jYXRpb24gYW5kIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBleGNsdXNpb24gd29ya3MgYmFzZWQgb24gdGhlIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3N3YXAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNjA6XHQgKiBVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgc3VwcG9ydC4gU2VlIGluY2x1ZGUvbGludXgvaG1tLmggYW5kXG4gIDYxOlx0ICogRG9jdW1lbnRhdGlvbi9tbS9obW0ucnN0LiBTaG9ydCBkZXNjcmlwdGlvbiBpcyB3ZSBuZWVkIHN0cnVjdCBwYWdlcyBmb3JcbiAgNjI6XHQgKiBkZXZpY2UgbWVtb3J5IHRoYXQgaXMgdW5hZGRyZXNzYWJsZSAoaW5hY2Nlc3NpYmxlKSBieSBDUFUsIHNvIHRoYXQgd2UgY2FuXG4gIDYzOlx0ICogbWlncmF0ZSBwYXJ0IG9mIGEgcHJvY2VzcyBtZW1vcnkgdG8gZGV2aWNlIG1lbW9yeS5cbiAgNjQ6XHQgKlxuICA2NTpcdCAqIFdoZW4gYSBwYWdlIGlzIG1pZ3JhdGVkIGZyb20gQ1BVIHRvIGRldmljZSwgd2Ugc2V0IHRoZSBDUFUgcGFnZSB0YWJsZSBlbnRyeVxuICA2NjpcdCAqIHRvIGEgc3BlY2lhbCBTV1BfREVWSUNFX3tSRUFEfFdSSVRFfSBlbnRyeS5cbiAgNjc6XHQgKlxuICA2ODpcdCAqIFdoZW4gYSBwYWdlIGlzIG1hcHBlZCBieSB0aGUgZGV2aWNlIGZvciBleGNsdXNpdmUgYWNjZXNzIHdlIHNldCB0aGUgQ1BVIHBhZ2VcbiAgNjk6XHQgKiB0YWJsZSBlbnRyaWVzIHRvIGEgc3BlY2lhbCBTV1BfREVWSUNFX0VYQ0xVU0lWRSBlbnRyeS5cbiAgNzA6XHQgKi9cbiAgNzE6XHQjaWZkZWYgQ09ORklHX0RFVklDRV9QUklWQVRFXG4gIDcyOlx0I2RlZmluZSBTV1BfREVWSUNFX05VTSAzXG4gIDczOlx0I2RlZmluZSBTV1BfREVWSUNFX1dSSVRFIChNQVhfU1dBUEZJTEVTJiM0MztTV1BfSFdQT0lTT05fTlVNJiM0MztTV1BfTUlHUkFUSU9OX05VTSlcbiAgNzQ6XHQjZGVmaW5lIFNXUF9ERVZJQ0VfUkVBRCAoTUFYX1NXQVBGSUxFUyYjNDM7U1dQX0hXUE9JU09OX05VTSYjNDM7U1dQX01JR1JBVElPTl9OVU0mIzQzOzEpXG4gIDc1Olx0I2RlZmluZSBTV1BfREVWSUNFX0VYQ0xVU0lWRSAoTUFYX1NXQVBGSUxFUyYjNDM7U1dQX0hXUE9JU09OX05VTSYjNDM7U1dQX01JR1JBVElPTl9OVU0mIzQzOzIpXG4gIDc2Olx0I2Vsc2VcbiAgNzc6XHQjZGVmaW5lIFNXUF9ERVZJQ0VfTlVNIDBcbiAgNzg6XHQjZW5kaWZcbiAgNzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg4MTYKCQkJCQkJCW91dHB1dDogMTY5CgkJCQkJCQl0aG91Z2h0czogNTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgcmVmYWN0b3JpbmcgdGhlIGhhbmRsaW5nIG9mIHNvbWUgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIG1vdmluZyB0aGUgbG9naWMgZm9yIG5vbi1zd2FwIHNvZnRsZWFmIGVudHJpZXMgb3V0IG9mIGBkb19zd2FwX3BhZ2VgIGFuZCBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgZG9fbm9uX3N3YXBfcGFnZWAuIFRoaXMgaW5jbHVkZXMgaGFuZGxpbmcgbWlncmF0aW9uLCBkZXZpY2UtZXhjbHVzaXZlIHBhZ2VzLCBkZXZpY2UgcHJpdmF0ZSBwYWdlcywgbWVtb3J5IGZhaWx1cmVzIChod3BvaXNvbiksIGFuZCBtYXJrZXJzLiBUaGUgcGF0Y2ggaXMgYWxzbyBtYWtpbmcgdGhlIHN3aXRjaCB0byBmb2xpby1iYXNlZCBBUElzIGxpa2UgYGZvbGlvX3RyeWxvY2tgIGFuZCBgZm9saW9fZ2V0YC4gQSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IEkgc2hvdWxkIGtlZXAgYW4gZXllIG9uLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgREVWSUNFX1BSSVZBVEVgLCBgTUlHUkFUSU9OYCwgYE1FTU9SWV9GQUlMVVJFYCwgYW5kIGBQVEVfTUFSS0VSX1VGRkRfV1BgLiBUaGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHNwZWNpZmljYWxseSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZSBpbiBoYW5kbGluZyBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzLgoKSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIG1haW4gZm9jdXMgaXMgaW5kZWVkIGBkb19ub25fc3dhcF9wYWdlYC4gVGhpcyBuZXcgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYGRvX3N3YXBfcGFnZWAuIGBkb19zd2FwX3BhZ2VgIGlzIGRlZmluaXRlbHkgYSBob3QgcGF0aCBiZWNhdXNlIGl0IGhhbmRsZXMgc3dhcCBmYXVsdHMuIFRoZSBrZXkgaGVyZSBpcyB0aGF0IGBkb19ub25fc3dhcF9wYWdlYCBpcyBvbmx5IGNhbGxlZCBmb3IgdGhlIGxlc3MgY29tbW9uIHNjZW5hcmlvcyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzLiBUaGlzIG1ha2VzIGl0IGEgZ3JlYXQgZnVuY3Rpb24gdG8gZm9jdXMgb24gZm9yIGFuYWx5c2lzLgoKSSYjMzk7dmUgYWxzbyBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgZmFpcmx5IHN0YW5kYXJkLiBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX01NVWAgYXJlIG5lY2Vzc2FyeSwgYnV0IHVzdWFsbHkgZW5hYmxlZC4KClNvLCBJIHdvdWxkIHNheSB0aGlzIHBhdGNoIGhhcyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6CgoqICAgKipXb3J0aEZ1enppbmcqKjogKlRydWUqCiogICAqKkZvY3VzU3ltYm9scyoqOiBgWyYjMzQ7ZG9fbm9uX3N3YXBfcGFnZSYjMzQ7XWAKKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgWyYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywgJiMzNDtNSUdSQVRJT04mIzM0OywgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LCAmIzM0O1BURV9NQVJLRVJfVUZGRF9XUCYjMzQ7XWAKKiAgICoqUmVhc29uaW5nKio6ICYjMzQ7VGhlIHBhdGNoIGV4dHJhY3RzIHRoZSBoYW5kbGluZyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIChtaWdyYXRpb24sIGRldmljZSBleGNsdXNpdmUsIGRldmljZSBwcml2YXRlLCBod3BvaXNvbiwgbWFya2VycykgZnJvbSBgZG9fc3dhcF9wYWdlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBjb2RlIHRvIHVzZSBmb2xpby1iYXNlZCBBUElzIChgZm9saW9fdHJ5bG9ja2AsIGBmb2xpb19nZXRgLCBldGMuKSBpbnN0ZWFkIG9mIHBhZ2UtYmFzZWQgQVBJcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHZhcmlvdXMgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuJiMzNDsKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19ub25fc3dhcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dHJhY3RzIHRoZSBoYW5kbGluZyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIChtaWdyYXRpb24sIGRldmljZSBleGNsdXNpdmUsIGRldmljZSBwcml2YXRlLCBod3BvaXNvbiwgbWFya2VycykgZnJvbSBgZG9fc3dhcF9wYWdlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBjb2RlIHRvIHVzZSBmb2xpby1iYXNlZCBBUElzIChgZm9saW9fdHJ5bG9ja2AsIGBmb2xpb19nZXRgLCBldGMuKSBpbnN0ZWFkIG9mIHBhZ2UtYmFzZWQgQVBJcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHZhcmlvdXMgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtNRU1PUllfRkFJTFVSRSYjMzQ7LAogICAgJiMzNDtQVEVfTUFSS0VSX1VGRkRfV1AmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19ub25fc3dhcF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGV4dHJhY3RzIHRoZSBoYW5kbGluZyBvZiBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIChtaWdyYXRpb24sIGRldmljZSBleGNsdXNpdmUsIGRldmljZSBwcml2YXRlLCBod3BvaXNvbiwgbWFya2VycykgZnJvbSBgZG9fc3dhcF9wYWdlYCBpbnRvIGEgbmV3IGZ1bmN0aW9uIGBkb19ub25fc3dhcF9wYWdlYC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBjb2RlIHRvIHVzZSBmb2xpby1iYXNlZCBBUElzIChgZm9saW9fdHJ5bG9ja2AsIGBmb2xpb19nZXRgLCBldGMuKSBpbnN0ZWFkIG9mIHBhZ2UtYmFzZWQgQVBJcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIHBhZ2UgZmF1bHQgaGFuZGxpbmcgZm9yIHZhcmlvdXMgc3BlY2lhbCBwYWdlIHRhYmxlIGVudHJpZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMToxNC43NzQxMTM4NzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY3NTA2OTg2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX25vbl9zd2FwX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRyYWN0cyB0aGUgaGFuZGxpbmcgb2Ygbm9uLXN3YXAgc29mdGxlYWYgZW50cmllcyAobWlncmF0aW9uLCBkZXZpY2UgZXhjbHVzaXZlLCBkZXZpY2UgcHJpdmF0ZSwgaHdwb2lzb24sIG1hcmtlcnMpIGZyb20gYGRvX3N3YXBfcGFnZWAgaW50byBhIG5ldyBmdW5jdGlvbiBgZG9fbm9uX3N3YXBfcGFnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgY29kZSB0byB1c2UgZm9saW8tYmFzZWQgQVBJcyAoYGZvbGlvX3RyeWxvY2tgLCBgZm9saW9fZ2V0YCwgZXRjLikgaW5zdGVhZCBvZiBwYWdlLWJhc2VkIEFQSXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciB2YXJpb3VzIHNwZWNpYWwgcGFnZSB0YWJsZSBlbnRyaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMToxNC43NzQxMjQzNTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjg4Nzg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM0MTc5OTdmNmIxNjcyZTE5MGNkOTc4MDRlYTViM2Q5MWJmMTMxYWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMjQgMDc6MDE6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xcbmluZGV4IGQ1ZTg3NjI0ZjY5MjA1Li41MGQ4ZTkyYWVmOTE3MCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1vcnkuY1xcbisrKyBiL21tL21lbW9yeS5jXFxuQEAgLTQ4MTUsNiArNDgxNSw3NCBAQCBzdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcXG4gXFx0fSB3aGlsZSAoLS1ucl9wYWdlcyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2bV9mYXVsdF90IGRvX25vbl9zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuK3tcXG4rXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXFx1MDAzZXZtYTtcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0c29mdGxlYWZfdCBlbnRyeTtcXG4rXFx0dm1fZmF1bHRfdCByZXQgPSAwO1xcbitcXG4rXFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZSh2bWYtXFx1MDAzZW9yaWdfcHRlKTtcXG4rXFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcXG4rXFx0XFx0bWlncmF0aW9uX2VudHJ5X3dhaXQodm1hLVxcdTAwM2V2bV9tbSwgdm1mLVxcdTAwM2VwbWQsXFxuK1xcdFxcdFxcdFxcdCAgICAgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG4rXFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xcbitcXHRcXHR2bWYtXFx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4rXFx0XFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcXG4rXFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG4rXFxuK1xcdFxcdGlmICh2bWYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRkFVTFRfRkxBR19WTUFfTE9DSykge1xcbitcXHRcXHRcXHQvKlxcbitcXHRcXHRcXHQgKiBtaWdyYXRlX3RvX3JhbSBpcyBub3QgeWV0IHJlYWR5IHRvIG9wZXJhdGVcXG4rXFx0XFx0XFx0ICogdW5kZXIgVk1BIGxvY2suXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR2bWFfZW5kX3JlYWQodm1hKTtcXG4rXFx0XFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1JFVFJZO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR2bWYtXFx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4rXFx0XFx0dm1mLVxcdTAwM2VwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cXHUwMDNldm1fbW0sIHZtZi1cXHUwMDNlcG1kLFxcbitcXHRcXHRcXHRcXHRcXHRcXHR2bWYtXFx1MDAzZWFkZHJlc3MsIFxcdTAwMjZ2bWYtXFx1MDAzZXB0bCk7XFxuK1xcdFxcdGlmICh1bmxpa2VseSghdm1mLVxcdTAwM2VwdGUgfHxcXG4rXFx0XFx0XFx0ICAgICAhcHRlX3NhbWUocHRlcF9nZXQodm1mLVxcdTAwM2VwdGUpLFxcbitcXHRcXHRcXHRcXHRcXHR2bWYtXFx1MDAzZW9yaWdfcHRlKSkpXFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogR2V0IGEgZm9saW8gcmVmZXJlbmNlIHdoaWxlIHdlIGtub3cgdGhlIGZvbGlvIGNhbid0IGJlXFxuK1xcdFxcdCAqIGZyZWVkLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHZtZi1cXHUwMDNlcGFnZSk7XFxuK1xcdFxcdGlmIChmb2xpb190cnlsb2NrKGZvbGlvKSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwO1xcbitcXG4rXFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4rXFx0XFx0XFx0cHRlX3VubWFwX3VubG9jayh2bWYtXFx1MDAzZXB0ZSwgdm1mLVxcdTAwM2VwdGwpO1xcbitcXHRcXHRcXHRwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLVxcdTAwM2VwYWdlKTtcXG4rXFx0XFx0XFx0cmV0ID0gcGdtYXAtXFx1MDAzZW9wcy1cXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcXG4rXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4rXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0cHRlX3VubWFwKHZtZi1cXHUwMDNlcHRlKTtcXG4rXFx0XFx0XFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi1cXHUwMDNlcHRsKTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2h3cG9pc29uKGVudHJ5KSkge1xcbitcXHRcXHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjtcXG4rXFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKSB7XFxuK1xcdFxcdHJldCA9IGhhbmRsZV9wdGVfbWFya2VyKHZtZik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHByaW50X2JhZF9wdGUodm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIHZtZi1cXHUwMDNlb3JpZ19wdGUsIE5VTEwpO1xcbitcXHRcXHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK1xcbit1bmxvY2s6XFxuK1xcdGlmICh2bWYtXFx1MDAzZXB0ZSlcXG4rXFx0XFx0cHRlX3VubWFwX3VubG9jayh2bWYtXFx1MDAzZXB0ZSwgdm1mLVxcdTAwM2VwdGwpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKlxcbiAgKiBXZSBlbnRlciB3aXRoIGVpdGhlciB0aGUgVk1BIGxvY2sgb3IgdGhlIG1tYXBfbG9jayBoZWxkIChzZWVcXG4gICogRkFVTFRfRkxBR19WTUFfTE9DSyksIGFuZCBwdGUgbWFwcGVkIGJ1dCBub3QgeWV0IGxvY2tlZC5cXG5AQCAtNDg0NSw1NiArNDkxMyw3IEBAIHZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbiBcXG4gXFx0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZSh2bWYtXFx1MDAzZW9yaWdfcHRlKTtcXG4gXFx0aWYgKHVubGlrZWx5KCFzb2Z0bGVhZl9pc19zd2FwKGVudHJ5KSkpIHtcXG4tXFx0XFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcXG4tXFx0XFx0XFx0bWlncmF0aW9uX2VudHJ5X3dhaXQodm1hLVxcdTAwM2V2bV9tbSwgdm1mLVxcdTAwM2VwbWQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgdm1mLVxcdTAwM2VhZGRyZXNzKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xcbi1cXHRcXHRcXHR2bWYtXFx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4tXFx0XFx0XFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcXG4tXFx0XFx0XFx0aWYgKHZtZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XFxuLVxcdFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdFxcdCAqIG1pZ3JhdGVfdG9fcmFtIGlzIG5vdCB5ZXQgcmVhZHkgdG8gb3BlcmF0ZVxcbi1cXHRcXHRcXHRcXHQgKiB1bmRlciBWTUEgbG9jay5cXG4tXFx0XFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdFxcdHZtYV9lbmRfcmVhZCh2bWEpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBWTV9GQVVMVF9SRVRSWTtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdHZtZi1cXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbi1cXHRcXHRcXHR2bWYtXFx1MDAzZXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLVxcdTAwM2V2bV9tbSwgdm1mLVxcdTAwM2VwbWQsXFxuLVxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlYWRkcmVzcywgXFx1MDAyNnZtZi1cXHUwMDNlcHRsKTtcXG4tXFx0XFx0XFx0aWYgKHVubGlrZWx5KCF2bWYtXFx1MDAzZXB0ZSB8fFxcbi1cXHRcXHRcXHRcXHQgICAgICFwdGVfc2FtZShwdGVwX2dldCh2bWYtXFx1MDAzZXB0ZSksXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdHZtZi1cXHUwMDNlb3JpZ19wdGUpKSlcXG4tXFx0XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuLVxcbi1cXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHQgKiBHZXQgYSBwYWdlIHJlZmVyZW5jZSB3aGlsZSB3ZSBrbm93IHRoZSBwYWdlIGNhbid0IGJlXFxuLVxcdFxcdFxcdCAqIGZyZWVkLlxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0aWYgKHRyeWxvY2tfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXA7XFxuLVxcbi1cXHRcXHRcXHRcXHRnZXRfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cXHUwMDNlcHRlLCB2bWYtXFx1MDAzZXB0bCk7XFxuLVxcdFxcdFxcdFxcdHBnbWFwID0gcGFnZV9wZ21hcCh2bWYtXFx1MDAzZXBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBwZ21hcC1cXHUwMDNlb3BzLVxcdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xcbi1cXHRcXHRcXHRcXHR1bmxvY2tfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbi1cXHRcXHRcXHRcXHRwdXRfcGFnZSh2bWYtXFx1MDAzZXBhZ2UpO1xcbi1cXHRcXHRcXHR9IGVsc2Uge1xcbi1cXHRcXHRcXHRcXHRwdGVfdW5tYXAodm1mLVxcdTAwM2VwdGUpO1xcbi1cXHRcXHRcXHRcXHRzb2Z0bGVhZl9lbnRyeV93YWl0X29uX2xvY2tlZChlbnRyeSwgdm1mLVxcdTAwM2VwdGwpO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfaHdwb2lzb24oZW50cnkpKSB7XFxuLVxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OO1xcbi1cXHRcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcXG4tXFx0XFx0XFx0cmV0ID0gaGFuZGxlX3B0ZV9tYXJrZXIodm1mKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cHJpbnRfYmFkX3B0ZSh2bWEsIHZtZi1cXHUwMDNlYWRkcmVzcywgdm1mLVxcdTAwM2VvcmlnX3B0ZSwgTlVMTCk7XFxuLVxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcXG4tXFx0XFx0fVxcbitcXHRcXHRyZXQgPSBkb19ub25fc3dhcF9wYWdlKHZtZik7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMToxNS42MDIzODE3NDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDU5MjI0MTY5ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX25vbl9zd2FwX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRyYWN0cyB0aGUgaGFuZGxpbmcgb2Ygbm9uLXN3YXAgc29mdGxlYWYgZW50cmllcyAobWlncmF0aW9uLCBkZXZpY2UgZXhjbHVzaXZlLCBkZXZpY2UgcHJpdmF0ZSwgaHdwb2lzb24sIG1hcmtlcnMpIGZyb20gYGRvX3N3YXBfcGFnZWAgaW50byBhIG5ldyBmdW5jdGlvbiBgZG9fbm9uX3N3YXBfcGFnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgY29kZSB0byB1c2UgZm9saW8tYmFzZWQgQVBJcyAoYGZvbGlvX3RyeWxvY2tgLCBgZm9saW9fZ2V0YCwgZXRjLikgaW5zdGVhZCBvZiBwYWdlLWJhc2VkIEFQSXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciB2YXJpb3VzIHNwZWNpYWwgcGFnZSB0YWJsZSBlbnRyaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM0MTc5OTdmNmIxNjcyZTE5MGNkOTc4MDRlYTViM2Q5MWJmMTMxYWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAwNzowMToxMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGQ1ZTg3NjI0ZjY5MjA1Li41MGQ4ZTkyYWVmOTE3MCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4rKysgYi9tbS9tZW1vcnkuY1xuQEAgLTQ4MTUsNiArNDgxNSw3NCBAQCBzdGF0aWMgdm9pZCBjaGVja19zd2FwX2V4Y2x1c2l2ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSxcbiBcdH0gd2hpbGUgKC0tbnJfcGFnZXMpO1xuIH1cbiBcbitzdGF0aWMgdm1fZmF1bHRfdCBkb19ub25fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuK3tcbitcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbitcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXHRzb2Z0bGVhZl90IGVudHJ5O1xuK1x0dm1fZmF1bHRfdCByZXQgPSAwO1xuK1xuK1x0ZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3B0ZSh2bWYtXHUwMDNlb3JpZ19wdGUpO1xuK1x0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbitcdFx0bWlncmF0aW9uX2VudHJ5X3dhaXQodm1hLVx1MDAzZXZtX21tLCB2bWYtXHUwMDNlcG1kLFxuK1x0XHRcdFx0ICAgICB2bWYtXHUwMDNlYWRkcmVzcyk7XG4rXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XG4rXHRcdHZtZi1cdTAwM2VwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4rXHRcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XG4rXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xuK1xuK1x0XHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBtaWdyYXRlX3RvX3JhbSBpcyBub3QgeWV0IHJlYWR5IHRvIG9wZXJhdGVcbitcdFx0XHQgKiB1bmRlciBWTUEgbG9jay5cbitcdFx0XHQgKi9cbitcdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbitcdFx0XHRyZXR1cm4gVk1fRkFVTFRfUkVUUlk7XG4rXHRcdH1cbitcbitcdFx0dm1mLVx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcbitcdFx0dm1mLVx1MDAzZXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLVx1MDAzZXZtX21tLCB2bWYtXHUwMDNlcG1kLFxuK1x0XHRcdFx0XHRcdHZtZi1cdTAwM2VhZGRyZXNzLCBcdTAwMjZ2bWYtXHUwMDNlcHRsKTtcbitcdFx0aWYgKHVubGlrZWx5KCF2bWYtXHUwMDNlcHRlIHx8XG4rXHRcdFx0ICAgICAhcHRlX3NhbWUocHRlcF9nZXQodm1mLVx1MDAzZXB0ZSksXG4rXHRcdFx0XHRcdHZtZi1cdTAwM2VvcmlnX3B0ZSkpKVxuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBHZXQgYSBmb2xpbyByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgZm9saW8gY2FuJ3QgYmVcbitcdFx0ICogZnJlZWQuXG4rXHRcdCAqL1xuK1x0XHRmb2xpbyA9IHBhZ2VfZm9saW8odm1mLVx1MDAzZXBhZ2UpO1xuK1x0XHRpZiAoZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbitcdFx0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwO1xuK1xuK1x0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4rXHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbitcdFx0XHRwZ21hcCA9IHBhZ2VfcGdtYXAodm1mLVx1MDAzZXBhZ2UpO1xuK1x0XHRcdHJldCA9IHBnbWFwLVx1MDAzZW9wcy1cdTAwM2VtaWdyYXRlX3RvX3JhbSh2bWYpO1xuK1x0XHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4rXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRwdGVfdW5tYXAodm1mLVx1MDAzZXB0ZSk7XG4rXHRcdFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi1cdTAwM2VwdGwpO1xuK1x0XHR9XG4rXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2h3cG9pc29uKGVudHJ5KSkge1xuK1x0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjtcbitcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSkge1xuK1x0XHRyZXQgPSBoYW5kbGVfcHRlX21hcmtlcih2bWYpO1xuK1x0fSBlbHNlIHtcbitcdFx0cHJpbnRfYmFkX3B0ZSh2bWEsIHZtZi1cdTAwM2VhZGRyZXNzLCB2bWYtXHUwMDNlb3JpZ19wdGUsIE5VTEwpO1xuK1x0XHRyZXQgPSBWTV9GQVVMVF9TSUdCVVM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK1xuK3VubG9jazpcbitcdGlmICh2bWYtXHUwMDNlcHRlKVxuK1x0XHRwdGVfdW5tYXBfdW5sb2NrKHZtZi1cdTAwM2VwdGUsIHZtZi1cdTAwM2VwdGwpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLypcbiAgKiBXZSBlbnRlciB3aXRoIGVpdGhlciB0aGUgVk1BIGxvY2sgb3IgdGhlIG1tYXBfbG9jayBoZWxkIChzZWVcbiAgKiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSwgYW5kIHB0ZSBtYXBwZWQgYnV0IG5vdCB5ZXQgbG9ja2VkLlxuQEAgLTQ4NDUsNTYgKzQ5MTMsNyBAQCB2bV9mYXVsdF90IGRvX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbiBcbiBcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUodm1mLVx1MDAzZW9yaWdfcHRlKTtcbiBcdGlmICh1bmxpa2VseSghc29mdGxlYWZfaXNfc3dhcChlbnRyeSkpKSB7XG4tXHRcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XG4tXHRcdFx0bWlncmF0aW9uX2VudHJ5X3dhaXQodm1hLVx1MDAzZXZtX21tLCB2bWYtXHUwMDNlcG1kLFxuLVx0XHRcdFx0XHQgICAgIHZtZi1cdTAwM2VhZGRyZXNzKTtcbi1cdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSkge1xuLVx0XHRcdHZtZi1cdTAwM2VwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4tXHRcdFx0cmV0ID0gcmVtb3ZlX2RldmljZV9leGNsdXNpdmVfZW50cnkodm1mKTtcbi1cdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkpIHtcbi1cdFx0XHRpZiAodm1mLVx1MDAzZWZsYWdzIFx1MDAyNiBGQVVMVF9GTEFHX1ZNQV9MT0NLKSB7XG4tXHRcdFx0XHQvKlxuLVx0XHRcdFx0ICogbWlncmF0ZV90b19yYW0gaXMgbm90IHlldCByZWFkeSB0byBvcGVyYXRlXG4tXHRcdFx0XHQgKiB1bmRlciBWTUEgbG9jay5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4tXHRcdFx0XHRyZXQgPSBWTV9GQVVMVF9SRVRSWTtcbi1cdFx0XHRcdGdvdG8gb3V0O1xuLVx0XHRcdH1cbi1cbi1cdFx0XHR2bWYtXHUwMDNlcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuLVx0XHRcdHZtZi1cdTAwM2VwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cdTAwM2V2bV9tbSwgdm1mLVx1MDAzZXBtZCxcbi1cdFx0XHRcdFx0dm1mLVx1MDAzZWFkZHJlc3MsIFx1MDAyNnZtZi1cdTAwM2VwdGwpO1xuLVx0XHRcdGlmICh1bmxpa2VseSghdm1mLVx1MDAzZXB0ZSB8fFxuLVx0XHRcdFx0ICAgICAhcHRlX3NhbWUocHRlcF9nZXQodm1mLVx1MDAzZXB0ZSksXG4tXHRcdFx0XHRcdFx0XHR2bWYtXHUwMDNlb3JpZ19wdGUpKSlcbi1cdFx0XHRcdGdvdG8gdW5sb2NrO1xuLVxuLVx0XHRcdC8qXG4tXHRcdFx0ICogR2V0IGEgcGFnZSByZWZlcmVuY2Ugd2hpbGUgd2Uga25vdyB0aGUgcGFnZSBjYW4ndCBiZVxuLVx0XHRcdCAqIGZyZWVkLlxuLVx0XHRcdCAqL1xuLVx0XHRcdGlmICh0cnlsb2NrX3BhZ2Uodm1mLVx1MDAzZXBhZ2UpKSB7XG4tXHRcdFx0XHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwO1xuLVxuLVx0XHRcdFx0Z2V0X3BhZ2Uodm1mLVx1MDAzZXBhZ2UpO1xuLVx0XHRcdFx0cHRlX3VubWFwX3VubG9jayh2bWYtXHUwMDNlcHRlLCB2bWYtXHUwMDNlcHRsKTtcbi1cdFx0XHRcdHBnbWFwID0gcGFnZV9wZ21hcCh2bWYtXHUwMDNlcGFnZSk7XG4tXHRcdFx0XHRyZXQgPSBwZ21hcC1cdTAwM2VvcHMtXHUwMDNlbWlncmF0ZV90b19yYW0odm1mKTtcbi1cdFx0XHRcdHVubG9ja19wYWdlKHZtZi1cdTAwM2VwYWdlKTtcbi1cdFx0XHRcdHB1dF9wYWdlKHZtZi1cdTAwM2VwYWdlKTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0cHRlX3VubWFwKHZtZi1cdTAwM2VwdGUpO1xuLVx0XHRcdFx0c29mdGxlYWZfZW50cnlfd2FpdF9vbl9sb2NrZWQoZW50cnksIHZtZi1cdTAwM2VwdGwpO1xuLVx0XHRcdH1cbi1cdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkpIHtcbi1cdFx0XHRyZXQgPSBWTV9GQVVMVF9IV1BPSVNPTjtcbi1cdFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19tYXJrZXIoZW50cnkpKSB7XG4tXHRcdFx0cmV0ID0gaGFuZGxlX3B0ZV9tYXJrZXIodm1mKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHRwcmludF9iYWRfcHRlKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIHZtZi1cdTAwM2VvcmlnX3B0ZSwgTlVMTCk7XG4tXHRcdFx0cmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuLVx0XHR9XG4rXHRcdHJldCA9IGRvX25vbl9zd2FwX3BhZ2Uodm1mKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMToxNS42MDIzODU3NThaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MTUwMDIxMzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoOiBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHRvdWNoaW5nIGBtbS9tZW1vcnkuY2AuIEZyb20gd2hhdCBJIHNlZSwgaXQncyBlc3NlbnRpYWxseSByZWZhY3RvcmluZyB0aGUgYGRvX3N3YXBfcGFnZWAgZnVuY3Rpb24uIFRoZSBrZXkgbW92ZSBpcyBleHRyYWN0aW5nIHRoZSBub24tc3dhcCBzb2Z0bGVhZiBlbnRyeSBoYW5kbGluZyBpbnRvIGEgbmV3IGZ1bmN0aW9uLCBgZG9fbm9uX3N3YXBfcGFnZWAuIEl0IGxvb2tzIGxpa2UgYSBjbGVhbiBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLCB3aGljaCBpcyBnb29kLlxuXG5CdXQgaXQncyBtb3JlIHRoYW4ganVzdCBhIGNvZGUgb3JnYW5pemF0aW9uIGV4ZXJjaXNlLCBJIHNlZSB0aGF0IHRoZXkgYXJlIHN3YXBwaW5nIG91dCB0aGUgbGVnYWN5IGBwYWdlYCBvcGVyYXRpb25zIHdpdGggdGhlaXIgYGZvbGlvYCBjb3VudGVycGFydHMsIHN1Y2ggYXMgYHRyeWxvY2tfcGFnZWAgd2l0aCBgZm9saW9fdHJ5bG9ja2AsIGBnZXRfcGFnZWAgd2l0aCBgZm9saW9fZ2V0YCwgYW5kIHNvIG9uLiBUaGF0IGlzIGludGVyZXN0aW5nLCBzbyB0aGlzIHBhdGNoIGlzIGEgYml0IG1vcmUgc3Vic3RhbnRpYWwgdGhhbiBqdXN0IHJlb3JnYW5pemF0aW9uLlxuXG5UaGUgYmlnZ2VyIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHksIHdpdGhvdXQgYSBkb3VidCwgeWVzLiBBbnkgbW9kaWZpY2F0aW9uIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGxpa2UgYGRvX3N3YXBfcGFnZWAgKG9yIGluIHRoaXMgY2FzZSwgdGhlIGV4dHJhY3RlZCBgZG9fbm9uX3N3YXBfcGFnZWApIG5lZWRzIHRvIGJlIHNjcnV0aW5pemVkLiBUaGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMg4oCTIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBuZXcgZnVuY3Rpb24gYW5kIHRoZSBjaGFuZ2Ugb2YgZnVuZGFtZW50YWwgcGFnZSBvcGVyYXRpb25zIOKAkyBhcmUgcGVyZmVjdCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoZSBiZXN0IGZvY3VzIHN5bWJvbHMuIGBkb19ub25fc3dhcF9wYWdlYCBpbW1lZGlhdGVseSBzcHJpbmdzIHRvIG1pbmQgYXMgdGhlIHByaW1hcnkgdGFyZ2V0LiBJdCdzIG5ldyBhbmQgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgdGhhdCB3YXMgcmVmYWN0b3JlZC4gYGRvX3N3YXBfcGFnZWAgaXRzZWxmIGlzIGFsc28gYSB2YWxpZCB0YXJnZXQsIGFsdGhvdWdoIGl0J3MgbGlrZWx5IGEgaG90LXBhdGggZnVuY3Rpb24sIHNvIGl0IG1heSBuZWVkIGEgdGFyZ2V0ZWQgYXBwcm9hY2guIE9oLCB3YWl0LCBgZG9fbm9uX3N3YXBfcGFnZWAgaXMgc3RhdGljLCB3aGljaCBpcyBhY3R1YWxseSBncmVhdCBiZWNhdXNlIHRoaXMgc2ltcGxpZmllcyB0aGUgZnV6emluZyBzZXR1cC5cblxuRmluYWxseSwgd2hhdCBhYm91dCBhbnkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnM/IGBtbS9tZW1vcnkuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLCB3aGljaCBpcyBncmVhdCBiZWNhdXNlIGl0IHNpbXBsaWZpZXMgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGZvciBhbnkgc3BlY2lhbCBjb25maWd1cmF0aW9ucyByZWxhdGVkIHRvIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgb3IgYG1pZ3JhdGVfdG9fcmFtYCB0aG91Z2gsIGp1c3QgdG8gYmUgdGhvcm91Z2guIEEgcXVpY2sgZ3JlcCBvZiB0aGUgY29kZSBzaG91bGQgcmV2ZWFsIGlmIHRoZXNlIGFyZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2NSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjIzLjc1MjQxMjMxNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDk4ODAxNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0xMDQ5PXN0YXRpYyB2b2lkIHNtYXBzX3B0ZV9lbnRyeShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTA4Mi1cXHRcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjEwODM6XFx0XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTA4NC1cXHRcXHRcXHRcXHRwcmVzZW50ID0gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI1Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfbWlncmF0aW9uKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yNjgtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MjY5OiAqIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKCkgLSBJcyB0aGlzIGxlYWYgZW50cnkgYSBkZXZpY2UgcHJpdmF0ZVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3MC0gKiB3cml0YWJsZSBlbnRyeT9cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI3NS0gKi9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyNzY6c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKHNvZnRsZWFmX3QgZW50cnkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMjc3LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4MS0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyODI6ICogc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoKSAtIElzIHRoaXMgbGVhZiBlbnRyeSBhIGRldmljZSBwcml2YXRlIGVudHJ5P1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4My0gKiBAZW50cnk6IExlYWYgZW50cnkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0yODYtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6Mjg3OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI4OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0zNTU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2hhc19wZm4oc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2MS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNjI6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zNjMtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MDQ9c3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjA1LXtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo2MDY6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKHNvZnRsZWFmX2Zyb21fcG1kKHBtZCkpO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTYwNy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD02MzU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3ZhbGlkX3BtZF9lbnRyeShzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNjM3LVxcdC8qIE9ubHkgZGV2aWNlIHByaXZhdGUsIG1pZ3JhdGlvbiBlbnRyaWVzIHZhbGlkIGZvciBQTUQuICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NjM4OlxcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC02MzktXFx0XFx0c29mdGxlYWZfaXNfbWlncmF0aW9uKGVudHJ5KTtcXG4tLVxcbm1tL2htbS5jPTI0MT1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaG1tLmMtMjcyLVxcdFxcdCAqL1xcbm1tL2htbS5jOjI3MzpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vaG1tLmMtMjc0LVxcdFxcdCAgICBwYWdlX3BnbWFwKHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpKS1cXHUwMDNlb3duZXIgPT1cXG4tLVxcbm1tL2htbS5jLTI3Ni1cXHRcXHRcXHRjcHVfZmxhZ3MgPSBITU1fUEZOX1ZBTElEO1xcbm1tL2htbS5jOjI3NzpcXHRcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKVxcbm1tL2htbS5jLTI3OC1cXHRcXHRcXHRcXHRjcHVfZmxhZ3MgfD0gSE1NX1BGTl9XUklURTtcXG4tLVxcbm1tL2htbS5jLTI5MC1cXG5tbS9obW0uYzoyOTE6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9obW0uYy0yOTItXFx0XFx0XFx0Z290byBmYXVsdDtcXG4tLVxcbm1tL2htbS5jPTM0MT1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9obW0uYy0zNTEtXFxubW0vaG1tLmM6MzUyOlxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9obW0uYy0zNTMtXFx0ICAgIHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KS1cXHUwMDNlcGdtYXAtXFx1MDAzZW93bmVyID09XFxuLS1cXG5tbS9obW0uYy0zNTktXFxubW0vaG1tLmM6MzYwOlxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vaG1tLmMtMzYxLVxcdFxcdFxcdGNwdV9mbGFncyB8PSBITU1fUEZOX1dSSVRFO1xcbi0tXFxubW0vaG1tLmMtMzc4LVxcdGlmIChyZXF1aXJlZF9mYXVsdCkge1xcbm1tL2htbS5jOjM3OTpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKVxcbm1tL2htbS5jLTM4MC1cXHRcXHRcXHRyZXR1cm4gaG1tX3JlY29yZF9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTgwOT1zdGF0aWMgdm9pZCBjb3B5X2h1Z2Vfbm9uX3ByZXNlbnRfcG1kKFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODI4LVxcdFxcdHNldF9wbWRfYXQoc3JjX21tLCBhZGRyLCBzcmNfcG1kLCBwbWQpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTgyOTpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTgzMC1cXHRcXHQvKlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xODMzLVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTgzNDpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0xODM1LVxcdFxcdFxcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI2MDE9c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNjIyLVxcdFxcdFxcdG5ld3BtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KG5ld3BtZCk7XFxubW0vaHVnZV9tZW1vcnkuYzoyNjIzOlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0yNjI0LVxcdFxcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwOTc9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxOTAtXFxubW0vaHVnZV9tZW1vcnkuYzozMTkxOlxcdFxcdHdyaXRlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMzE5Mi1cXHRcXHRhbm9uX2V4Y2x1c2l2ZSA9IFBhZ2VBbm9uRXhjbHVzaXZlKHBhZ2UpO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00OTYxPWludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ5OTAtXFxubW0vaHVnZV9tZW1vcnkuYzo0OTkxOlxcdFxcdHdyaXRhYmxlID0gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUob2xkX2VudHJ5KTtcXG5tbS9odWdlX21lbW9yeS5jLTQ5OTItXFx0XFx0c29mdGRpcnR5ID0gcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZHZhbCk7XFxuLS1cXG5tbS9tZW1vcnkuYz0xMDAxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9tZW1vcnkuYy0xMDQzLVxcdFxcdH1cXG5tbS9tZW1vcnkuYzoxMDQ0OlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtMTA0NS1cXHRcXHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XFxuLS1cXG5tbS9tZW1vcnkuYy0xMDY4LVxcdFxcdCAqL1xcbm1tL21lbW9yeS5jOjEwNjk6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSBcXHUwMDI2XFx1MDAyNlxcbm1tL21lbW9yeS5jLTEwNzAtXFx0XFx0ICAgIGlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkge1xcbi0tXFxubW0vbWVtb3J5LmM9MTgxMT1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODIwLVxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbm1tL21lbW9yeS5jOjE4MjE6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21lbW9yeS5jLTE4MjItXFx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XFxuLS1cXG5tbS9tZW1vcnkuYz00ODE4PXN0YXRpYyB2bV9mYXVsdF90IGRvX25vbl9zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00ODMxLVxcdFxcdHJldCA9IHJlbW92ZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHZtZik7XFxubW0vbWVtb3J5LmM6NDgzMjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSkge1xcbm1tL21lbW9yeS5jLTQ4MzMtXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNz1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTE2OS1cXG5tbS9taWdyYXRlX2RldmljZS5jOjE3MDpcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTcxLVxcdFxcdCAgICAhKG1pZ3JhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSkge1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xODEtXFxubW0vbWlncmF0ZV9kZXZpY2UuYzoxODI6XFx0XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTE4My1cXHRcXHRcXHR3cml0ZSA9IE1JR1JBVEVfUEZOX1dSSVRFO1xcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDU9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjk5LVxcdFxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlKTtcXG5tbS9taWdyYXRlX2RldmljZS5jOjMwMDpcXHRcXHRcXHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSlcXG5tbS9taWdyYXRlX2RldmljZS5jLTMwMS1cXHRcXHRcXHRcXHRnb3RvIG5leHQ7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTMzMy1cXHRcXHRcXHRcXHRcXHRNSUdSQVRFX1BGTl9NSUdSQVRFO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MzM0OlxcdFxcdFxcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0zMzUtXFx0XFx0XFx0XFx0bXBmbiB8PSBNSUdSQVRFX1BGTl9XUklURTtcXG4tLVxcbm1tL21wcm90ZWN0LmM9MjE0PXN0YXRpYyBsb25nIGNoYW5nZV9zb2Z0bGVhZl9wdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tcHJvdGVjdC5jLTIzNi1cXHRcXHRcXHRuZXdwdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShuZXdwdGUpO1xcbm1tL21wcm90ZWN0LmM6MjM3OlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XFxubW0vbXByb3RlY3QuYy0yMzgtXFx0XFx0LypcXG4tLVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYz0xOTM9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2NhY2hlZF93cml0YWJsZShzb2Z0bGVhZl90IGVudHJ5KVxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xOTQte1xcbm1tL3BhZ2VfdGFibGVfY2hlY2suYzoxOTU6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSB8fFxcbm1tL3BhZ2VfdGFibGVfY2hlY2suYy0xOTYtXFx0XFx0c29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KTtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcwLVxcdFxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jOjcxOlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtNzItXFx0XFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTEwNz1zdGF0aWMgYm9vbCBjaGVja19wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBsb25nIHB0ZV9ucilcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTEzMC1cXHRcXHQvKiBIYW5kbGUgdW4tYWRkcmVzc2FibGUgWk9ORV9ERVZJQ0UgbWVtb3J5ICovXFxubW0vcGFnZV92bWFfbWFwcGVkLmM6MTMxOlxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV92bWFfbWFwcGVkLmMtMTMyLVxcdFxcdCAgICAhc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXFxuLS1cXG5tbS9ybWFwLmM9MjQ2MT1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjY0OS1cXG5tbS9ybWFwLmM6MjY1MDpcXHRcXHRcXHR3cml0YWJsZSA9IHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KTtcXG5tbS9ybWFwLmMtMjY1MS1cXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjI5Ljg1MTIzNDI5NloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MzQzNzkyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyB0aGUgY29udGV4dCBpcyBteSBhcmVhIG9mIGV4cGVydGlzZTpcblxuKipFeGFtaW5pbmcgRGV2aWNlIFByaXZhdGUgTWVtb3J5IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyBcImRldmljZSBwcml2YXRlIG1lbW9yeVwiIGFuZCB0aGF0J3MgaW1tZWRpYXRlbHkgdHJpZ2dlcmluZyBhIGNvbm5lY3Rpb24gdG8gYENPTkZJR19ERVZJQ0VfUFJJVkFURWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGlzIGRlZmluZWQgYW5kIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBsb29rIGluIGBtbS9LY29uZmlnYCDigJMgYmVjYXVzZSBtZW1vcnkgbWFuYWdlbWVudCBpcyB3aGVyZSBkZXZpY2Utc3BlY2lmaWMgbWVtb3J5IGFzc2lnbm1lbnRzIHdvdWxkIGJlIGxpa2VseSBoYW5kbGVkLiBCdXQgYGxpYi9LY29uZmlnYCBpcyBhbHNvIGEgcG9zc2libGUgbG9jYXRpb24sIHNpbmNlIHRoZSBgREVWSUNFX1BSSVZBVEVgIHBhcmFtZXRlciBtaWdodCByZXByZXNlbnQgYSBnZW5lcmljIHNldHRpbmcuIExldCdzIHNlZSB3aGF0J3MgaW4gdGhlcmUuIEknbGwgc3RhcnQgd2l0aCB0aG9zZSB0d28gbG9jYXRpb25zIGFuZCB0cmFjZSB0aGUgcmVmZXJlbmNlcyBpZiBuZWNlc3NhcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNjYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTozMy4zODU2MTc0NDJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0NTQ1Mzk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREVWSUNFX1BSSVZBVEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMjQ4PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cXG4tLVxcbm1tL0tjb25maWctMTI1MC1cXG5tbS9LY29uZmlnOjEyNTE6Y29uZmlnIERFVklDRV9QUklWQVRFXFxubW0vS2NvbmZpZy0xMjUyLVxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDE6MzguMjMxMTE0NDYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc0MzI0NTMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBPcHRpb25zIGZvciBLZXJuZWwgU29mdGxlYWYgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBDT05GSUdfREVWSUNFX1BSSVZBVEVgIHNldHRpbmcuIFRoYXQncyBvbmUgY29uZmlnIHJlbGF0ZWQgdG8gdGhpcyBzb2Z0bGVhZiBzeXN0ZW0sIEkga25vdyB0aGF0IGZvciBjZXJ0YWluLiBCdXQgSSBuZWVkIHRvIGJlIHN1cmUgSSd2ZSBnb3QgdGhlIGZ1bGwgcGljdHVyZSBoZXJlLiBJIHNob3VsZCBwcm9iYWJseSBlbnVtZXJhdGUgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy5cblxuTGV0J3Mgc2Vl4oCmIEkgcmVjYWxsIHRoZXJlJ3MgYSBjb25uZWN0aW9uIGJldHdlZW4gYHNvZnRsZWFmX2lzX21pZ3JhdGlvbmAgYW5kIHNvbWV0aGluZyBjYWxsZWQgYENPTkZJR19NSUdSQVRJT05gLiBSaWdodCwgbWFrZXMgc2Vuc2UsIHRoYXQgdGllcyBpbiB3aXRoIG1lbW9yeSBtaWdyYXRpb24uIEFuZCBgc29mdGxlYWZfaXNfaHdwb2lzb25gIHNlZW1zIHRvIHJlbGF0ZSB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciBkZWFsaW5nIHdpdGggaGFyZHdhcmUgZXJyb3JzLiBGaW5hbGx5LCB0aGVyZSdzIGBzb2Z0bGVhZl9pc19tYXJrZXJgLCB3aGljaCBzb3VuZHMgbGlrZSBpdCdzIGNvbm5lY3RlZCB0byBgQ09ORklHX1BURV9NQVJLRVJgLlxuXG5UbyBnZXQgYSBkZWZpbml0aXZlIHBpY3R1cmUgb2YgdGhlc2UgY29ubmVjdGlvbnMgYW5kIHBvdGVudGlhbGx5IGZpbmQgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucywgbXkgbmV4dCBzdGVwIGlzIGNsZWFyLiBJJ2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gYG1tL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGFyZSBkZWZpbmVkLiBJJ2xsIG1ha2Ugc3VyZSB0byB2ZXJpZnkgdGhvc2UgYXNzb2NpYXRpb25zIGFuZCBsb29rIGZvciBhbnkgb3RoZXIgY29uZmlnIG9wdGlvbnMgdGhhdCBtYXkgcmVsYXRlIHRvIHRoZSBzb2Z0bGVhZiBpbmZyYXN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjQxLjk3NDM2Mjg5MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjkzNTg1MDQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02NzE9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY4MS1cXG5tbS9LY29uZmlnOjY4Mjpjb25maWcgTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02ODMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMTo0OC4yNjc5NTQwNTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTA1MjE3NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNZW1vcnkgRmFpbHVyZSBhbmQgUGFnZSBUYWJsZSBFbnRyaWVzIC0gQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSBhIGZldyB0aGluZ3MuIEZpcnN0LCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB0byBkb3VibGUtY2hlY2sgdGhlIGltcGxpY2F0aW9ucyBvZiBgY29uZmlnIE1FTU9SWV9GQUlMVVJFYC4gV2UgYWxsIGtub3cgd2hhdCBpdCAqc2hvdWxkKiBkbywgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIHdoYXQgSSBleHBlY3QgaW4gKnRoaXMqIGFyY2hpdGVjdHVyZS9rZXJuZWwgdmVyc2lvbi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB1bmNvcnJlY3RhYmxlIG1lbW9yeSBlcnJvcnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHJ1bm5pbmcgcHJvY2Vzc2VzLCBhbmQgdGhlIHRyYWRlb2ZmcyBiZXR3ZWVuIGZhdWx0IHRvbGVyYW5jZSBhbmQgc3lzdGVtIHJlc3BvbnNpdmVuZXNzLiBBcmUgd2UgbG9nZ2luZyBlbm91Z2ggaW5mb3JtYXRpb24/IEFyZSB0aGUgZXJyb3IgaGFuZGxpbmcgcm91dGluZXMgcm9idXN0IGVub3VnaCBmb3IgdGhlIGV4cGVjdGVkIHdvcmtsb2Fkcz8gRG9lcyB0aGUgY2hvc2VuIHBvbGljeSBjb3JyZWN0bHkgYmFsYW5jZSBtaW5pbWl6aW5nIGRhdGEgbG9zcyBhbmQgbWF4aW1pemluZyB0aGUgY2hhbmNlIG9mIHJlY292ZXJ5P1xuXG5UaGVuLCBJJ2xsIHF1aWNrbHkgbG9vayBhdCBgY29uZmlnIFBURV9NQVJLRVJgLiBXaGF0ICpleGFjdGx5KiBhcmUgdGhlIGZsYWdzIHdlJ3JlIHVzaW5nPyBJdCdzIG5vdCBqdXN0IGFib3V0IHRoZSAqcHJlc2VuY2UqIG9mIHRoZSBtYXJrZXIsIGJ1dCB3aGF0IGl0ICptZWFucyogaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBBcmUgd2UgdXNpbmcgdGhlIG1hcmtlciBmb3IgZGVidWdnaW5nLCBzZWN1cml0eSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlIGFyZSBhbHdheXMgYSBjb25jZXJuOyBhcmUgdGhlc2UgbWFya2VycyBiZWluZyBoYW5kbGVkIGVmZmljaWVudGx5IGR1cmluZyBwYWdlIHRhYmxlIHdhbGtzLCBvciBpcyB0aGVyZSBhIG1lYXN1cmFibGUgcGVyZm9ybWFuY2Ugb3ZlcmhlYWQ/IEl0J3MganVzdCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBiZSBzdXJlIHdlJ3JlIG9uIHRoZSByaWdodCB0cmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA5OSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjU0LjM3MzE3NTQ4M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzODg2NjI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0ZBSUxVUkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz03NjA9Y29uZmlnIEFSQ0hfU1VQUE9SVFNfTUVNT1JZX0ZBSUxVUkVcXG4tLVxcbm1tL0tjb25maWctNzYyLVxcbm1tL0tjb25maWc6NzYzOmNvbmZpZyBNRU1PUllfRkFJTFVSRVxcbm1tL0tjb25maWctNzY0LVxcdGRlcGVuZHMgb24gTU1VXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAxOjU5LjkxMjA1MTY3MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg3MTc4MzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIENvbmZpZ3VyYXRpb24gLSBQVEVfTUFSS0VSKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIHN0YXR1cyBhbmQgZGVmaW5pdGlvbiBvZiBgY29uZmlnIFBURV9NQVJLRVJgLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGUga2VybmVsLCBwcm9iYWJseSByZWxhdGVkIHRvIHBhZ2UgdGFibGUgZW50cmllcy4gVGhlIHRlcm0gXCJNQVJLRVJcIiBpbXBsaWVzIGl0J3MgdXNlZCBmb3Igc29tZSBraW5kIG9mIHRyYWNraW5nIG9yIGxhYmVsaW5nIHdpdGhpbiB0aG9zZSBlbnRyaWVzLCBwb3NzaWJseSBmb3IgZGVidWdnaW5nLCBzZWN1cml0eSwgb3IgbWVtb3J5IG1hbmFnZW1lbnQgcHVycG9zZXMuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBleGFjdCBwdXJwb3NlLiBJcyBpdCBhIGNvbXBpbGUtdGltZSBvcHRpb24/IFdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgd2hlbiBpdCdzIHNlbGVjdGVkPyBNb3JlIHNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBkZXRlcm1pbmUgaXRzIGltcGFjdCBvbiB0aGUgUFRFIHN0cnVjdHVyZSBpdHNlbGYg4oCTIGRvZXMgaXQgYWRkIGEgYml0LCBhIGZpZWxkLCBvciBhIG1vcmUgY29tcGxleCBtZXRhZGF0YSBzdHJ1Y3R1cmUgd2l0aGluIHRoZSBlbnRyeT8gSSdsbCBhbHNvIHdhbnQgdG8ga25vdyBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHNlY3VyaXR5IHN1YnN5c3RlbXMuIEZvciBleGFtcGxlLCBkb2VzIGl0IHBsYXkgYSByb2xlIGluIGFkZHJlc3Mgc3BhY2UgbGF5b3V0IHJhbmRvbWl6YXRpb24gKEFTTFIpLCBrZXJuZWwgYWRkcmVzcyBzcGFjZSByYW5kb21pemF0aW9uIChLQVNMUiksIG9yIHBlcmhhcHMgZXZlbiBzb21lIGZvcm0gb2Yga2VybmVsIHRhaW50IHRyYWNraW5nPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIHN1Y2ggYXMgaW5jcmVhc2VkIG92ZXJoZWFkIGR1cmluZyBUTEIgc2hvb3Rkb3ducyBvciBwYWdlIHRhYmxlIHdhbGtzP1xuXG5CYXNlZCBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dCwgSSBjYW4gZGVkdWNlIGhvdyBpdCBtaWdodCBiZSB1c2VkLiBEb2VzIGl0IGluZmx1ZW5jZSB0aGUgdmlydHVhbCBtZW1vcnkgbWFwIG9yIHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUFRFJ3MgdXNhZ2UgYW5kIG93bmVyc2hpcD9cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBhc3Nlc3MgaXRzIHNpZ25pZmljYW5jZSB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSB3YW50IHRvIGtub3cgaXRzIGltcGFjdCBvbiBtZW1vcnkgcHJvdGVjdGlvbiwgZGVidWdnaW5nIGNhcGFiaWxpdGllcywgYW5kIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0OTEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjowNC4yOTkyMzMzNDNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMjk4MzkxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURV9NQVJLRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6MDkuNjI5MDgyMjYxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDA5NDcwMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEaWdnaW5nIGludG8gUFRFIE1hcmtlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYFBURV9NQVJLRVJgIGlzIHNldCB0byBgQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUGAuIFRoYXQgcmluZ3MgYSBiZWxsLCBidXQgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHdoZXJlIHRoZSBjb3JlIGRlZmluaXRpb24gb2YgdGhhdCBtYXJrZXIgbG9naWMgcmVzaWRlcy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmVmZXJlbmNlIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBzb2Z0bGVhZl9pc19tYXJrZXJgLiBHb3R0YSBiZSBzdXJlIGFib3V0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MzIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjoxMy4wMzAwMzM0MDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMjEyODIzNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic29mdGxlYWZfaXNfbWFya2VyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0yNjM2PXN0YXRpYyB2b2lkIG1ha2VfdWZmZF93cF9odWdlX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNjQ5LVxcdGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wdGUocHRlbnQpO1xcbmZzL3Byb2MvdGFza19tbXUuYzoyNjUwOlxcdGlmIChzb2Z0bGVhZl9pc19od3BvaXNvbihlbnRyeSkgfHwgc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSlcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY1MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0zMTU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2h3cG9pc29uKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMjAtLyoqXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzIxOiAqIHNvZnRsZWFmX2lzX21hcmtlcigpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgbWFya2VyP1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMyMi0gKiBAZW50cnk6IExlYWYgZW50cnkuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMjUtICovXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MzI2OnN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMjcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzMyLSAqIHNvZnRsZWFmX3RvX21hcmtlcigpIC0gT2J0YWluIG1hcmtlciBhc3NvY2lhdGVkIHdpdGggbGVhZiBlbnRyeS5cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozMzM6ICogQGVudHJ5OiBMZWFmIGVudHJ5LCBzb2Z0bGVhZl9pc19tYXJrZXIoQGVudHJ5KSBtdXN0IHJldHVybiB0cnVlLlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMzNC0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzM3PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBzb2Z0bGVhZl90b19tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMzgte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjMzOTpcXHRWTV9XQVJOX09OX09OQ0UoIXNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0MC1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ0NT1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfcG9pc29uX21hcmtlcihzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ0Ni17XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6NDQ3OlxcdGlmICghc29mdGxlYWZfaXNfbWFya2VyKGVudHJ5KSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NDgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NDU5PXN0YXRpYyBpbmxpbmUgYm9vbCBzb2Z0bGVhZl9pc19ndWFyZF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00NjAte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ2MTpcXHRpZiAoIXNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDYyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ3Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC00Nzcte1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ3ODpcXHRpZiAoIXNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDc5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTU0NT1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX21hcmtlcihwdGVfdCBwdGUpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTQ2LXtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo1NDc6XFx0cmV0dXJuIHNvZnRsZWFmX2lzX21hcmtlcihzb2Z0bGVhZl9mcm9tX3B0ZShwdGUpKTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC01NDgtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9NTc0PXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfdWZmZF9tYXJrZXIocHRlX3QgcHRlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTc3LVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjU3ODpcXHRpZiAoIXNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNTc5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL21lbW9yeS5jPTEwMDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL21lbW9yeS5jLTEwODgtXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxubW0vbWVtb3J5LmM6MTA4OTpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy0xMDkwLVxcdFxcdHB0ZV9tYXJrZXIgbWFya2VyID0gY29weV9wdGVfbWFya2VyKGVudHJ5LCBkc3Rfdm1hKTtcXG4tLVxcbm1tL21lbW9yeS5jPTQ4MTg9c3RhdGljIHZtX2ZhdWx0X3QgZG9fbm9uX3N3YXBfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ4NzAtXFx0XFx0cmV0ID0gVk1fRkFVTFRfSFdQT0lTT047XFxubW0vbWVtb3J5LmM6NDg3MTpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy00ODcyLVxcdFxcdHJldCA9IGhhbmRsZV9wdGVfbWFya2VyKHZtZik7XFxuLS1cXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbXByb3RlY3QuYy0yNDUtXFx0XFx0XFx0bmV3cHRlID0gcHRlX3N3cF9ta3VmZmQobmV3cHRlKTtcXG5tbS9tcHJvdGVjdC5jOjI0NjpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21hcmtlcihlbnRyeSkpIHtcXG5tbS9tcHJvdGVjdC5jLTI0Ny1cXHRcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjoxOS4yNTEzMjIwNjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkwNjQyMjM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZhY3RvcmluZyBNZW1vcnkgTWFuYWdlbWVudCBDb3JlKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBtYWtpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgY2hhbmdlcyBpbiBtZW1vcnkgbWFuYWdlbWVudC4gSXQgbG9va3MgbGlrZSBgZG9fc3dhcF9wYWdlYCBpcyBiZWluZyBzcGxpdCBpbnRvIGBkb19ub25fc3dhcF9wYWdlYCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCByZWZhY3RvcmluZy4gVGhleSdyZSBhbHNvIHVwZGF0aW5nIHNvbWUgY3J1Y2lhbCBsb2NraW5nIGFuZCByZWZlcmVuY2UgY291bnRpbmcgZnVuY3Rpb25zOiBgdHJ5bG9ja19wYWdlYCBpcyBub3cgYGZvbGlvX3RyeWxvY2tgLCBhbmQgYGdldF9wYWdlYCBpcyBiZWNvbWluZyBgZm9saW9fZ2V0YC4gVGhpcyBpcyBkZWZpbml0ZWx5IGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHNwYWNlLiBJdCBzdWdnZXN0cyBhIG1vdmUgdG93YXJkIGZvbGlvLWJhc2VkIG9wZXJhdGlvbnMsIGxpa2VseSBhaW1pbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZSBvciBmbGV4aWJpbGl0eS5cblxuUmlnaHQsIGxldCdzIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBpbXBhY3RlZC4gVGhlIGNvbmZpZ3MgdGhhdCBhcmUgZW5hYmxlZCBzdWdnZXN0IHRoaXMgaXMgdGllZCB0byBwcml2YXRlIGRldmljZXMsIG1pZ3JhdGlvbiwgbWVtb3J5IGZhaWx1cmUgaGFuZGxpbmcsIGFuZCBVRkZEIHdpdGggd3JpdGUgcHJvdGVjdGlvbiBtYXJrZXJzIChgUFRFX01BUktFUl9VRkZEX1dQYCkuIEhvbGQgb24gYSBzZWNvbmQsIHRoYXQgVUZGRCBXUCBtYXJrZXIsIEknbSBnZXR0aW5nIGEgZmVlbGluZyB0aGF0IG1pZ2h0IG5vdCBiZSB0aGUgKm9ubHkqIG1hcmtlciB0aGlzIGNoYW5nZSBjb25jZXJucy4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBgY29uZmlnIFBURV9NQVJLRVJgIGVudHJ5IGluIGBtbS9LY29uZmlnYCwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZS4gR290dGEgYmUgdGhvcm91Z2ggd2l0aCBjaGFuZ2VzIHRoaXMgbG93LWxldmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM5NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjoyNC4xNTc3NDc4MzNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjY5ODk5ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURV9NQVJLRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6MjkuNzg0NzQ0NTU0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MzI4Mzc1NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFBURSBNYXJrZXIgRGVmaW5pdGlvbioqXG5cblJpZ2h0LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhlIGBQVEVfTUFSS0VSYCBtYWNybyBpcyBkZWZpbmVkLiBTZWVtcyBsaWtlIHRoZSBzdGFuZGFyZCBwbGFjZXMgdG8gbG9vayBhcmUgZ29pbmcgdG8gYmUgaW4gdGhlIGtlcm5lbCBoZWFkZXJzIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGBpbmNsdWRlL2xpbnV4L2xlYWZvcHMuaGAgZmlyc3QsIHNpbmNlIHRoYXQncyB3aGVyZSBhIGxvdCBvZiB0aGUgcGFnZSB0YWJsZSByZWxhdGVkIG1hY3JvcyB0ZW5kIHRvIGxpdmUuIElmIGl0IGlzbid0IHRoZXJlLCBvciBpZiBpdCdzIHNvbWVob3cgZGVwZW5kZW50IG9uIGEgS2NvbmZpZyBvcHRpb24sIHRoZW4gSSdsbCBkZWx2ZSBpbnRvIGBtbS9LY29uZmlnYC4gSXQncyBwb3NzaWJsZSBpdCdzIGNvbnRyb2xsZWQgYnkgYSBzcGVjaWZpYyBhcmNoaXRlY3R1cmUgb3IgZmVhdHVyZSBjb25maWd1cmF0aW9uLCBzbyBrbm93aW5nIGl0cyBleGFjdCBkZWZpbml0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBpbXBhY3QuIEknbGwgcHJpb3JpdGl6ZSBlZmZpY2llbmN5IGFuZCBxdWlja2x5IHNjYW4gdGhvc2UgZmlsZXMgZm9yIGFueSBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4OTAsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjozNS41MTc1ODc1MzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0MzI2MDU5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURV9NQVJLRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzgyPW1lbnVjb25maWcgVVNFUkZBVUxURkRcXG4tLVxcbm1tL0tjb25maWctMTM4OC1cXG5tbS9LY29uZmlnOjEzODk6Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbm1tL0tjb25maWctMTM5MC1cXHRib29sIFxcXCJVc2VyZmF1bHRmZCB3cml0ZSBwcm90ZWN0aW9uIHN1cHBvcnQgZm9yIHNobWVtL2h1Z2V0bGJmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6NDAuOTUwMjA0ODI1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzI2ODQzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRlYWxpbmcgd2l0aCBgUFRFX01BUktFUmAgaGVyZS4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCBcIkhhbmcgb24gYSBzZWMsIHdhc24ndCB0aGF0IGEgY29uZmlndXJhdGlvbiBzeW1ib2w/XCIgSXQganVzdCAqZmVlbHMqIGxpa2UgYSBjb25maWcgb3B0aW9uLiBSaWdodCwgYmV0dGVyIGNvbmZpcm0gdGhhdCBpbnN0aW5jdC4gVGhlIGxvZ2ljYWwgcGxhY2UgdG8gZ28gZm9yIGNvbmZpcm1hdGlvbiBpcyBgbW0vS2NvbmZpZ2AsIHRoYXQncyB0aGUgaG9tZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgaW4gdGhlIGtlcm5lbCwgaXNuJ3QgaXQ/IExldCdzIGdvIGNoZWNrIGZvciBgUFRFX01BUktFUmAgdGhlcmUgYW5kIHNlZSB3aGF0IHdlIGZpbmQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRoaW5nIGlzIGRlZmluZWQgYW5kIGlmIEkgbmVlZCB0byB3b3JyeSBhYm91dCBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgYWxsIHRoYXQgZnVuIGNvbmZpZyBzdHVmZiB0aGF0IGNhbiB0cmlwIHlvdSB1cC4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjIwLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6NDYuMzgyODkyMzYzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTA4MCwiRXJyb3IiOiJZb3UgYXJlIHJlcGVhdGluZyB0aGUgc2FtZSB0b29sIGNhbGwgd2l0aCB0aGUgZXhhY3Qgc2FtZSBhcmd1bWVudHMuXG5Zb3UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgb2YgdGhpcyBleGFjdCB0b29sIGNhbGwgaW4geW91ciBjb252ZXJzYXRpb24gaGlzdG9yeS5cbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxudHJ5IGEgY29tcGxldGVseSBkaWZmZXJlbnQgdG9vbCwgb3IgcHJvY2VlZCB0byB0aGUgbmV4dCBzdGVwLiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVEVfTUFSS0VSXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwiWW91IGFyZSByZXBlYXRpbmcgdGhlIHNhbWUgdG9vbCBjYWxsIHdpdGggdGhlIGV4YWN0IHNhbWUgYXJndW1lbnRzLlxcbllvdSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCBvZiB0aGlzIGV4YWN0IHRvb2wgY2FsbCBpbiB5b3VyIGNvbnZlcnNhdGlvbiBoaXN0b3J5LlxcbkRvIE5PVCByZXF1ZXN0IGl0IGFnYWluLiBZb3UgTVVTVCBzeW50aGVzaXplIHRoZSBpbmZvcm1hdGlvbiB5b3UgYWxyZWFkeSBoYXZlLFxcbnRyeSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRvb2wsIG9yIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6NDYuMzgyOTc3NDMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NDgxODM2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBwcm9jZXNzIHRoaXPigKZcblxuKipBbmFseXppbmcgdGhlIFBURSBNYXJrZXIgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBJIHJlY29nbml6ZSB0aGF0IGBQVEVfTUFSS0VSX1VGRkRfV1BgIGlzIHRoZSByZWxldmFudCBjb25maWcgaGVyZS4gVGhhdCBtYWtlcyBzZW5zZS4gQnV0IGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBkb3VibGUtY2hlY2sgYGNvbmZpZyBQVEVfTUFSS0VSYCB3aXRoaW4gYG1tL0tjb25maWdgLiBXYWl0LCBob2xkIG9uIGEgc2Vjb25k4oCmIEkndmUgYWxyZWFkeSBzY3J1dGluaXplZCB0aGF0IEtjb25maWcgZW50cnksIGhhdmVuJ3QgST8gTm8gbmVlZCB0byByZS10cmVhZCB0aGF0IGdyb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjgsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMjo1MS4zMzExNjQ2MDVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDQxMzg5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUFRFX01BUktFUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3VzZXJmYXVsdGZkLnJzdD0zOTM9UldQIG1hcmtlcjogdGhlIG5leHQgYWNjZXNzIHJlLXBvcHVsYXRlcyB0aGUgcmFuZ2Ugd2l0aG91dCBwcm90ZWN0aW9uLlxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vdXNlcmZhdWx0ZmQucnN0OjM5NDpVbmxpa2UgV1AgKHdoaWNoIHBlcnNpc3RzIHZpYSBgYFBURV9NQVJLRVJfVUZGRF9XUGBgKSwgdGhlcmUgaXMgbm9cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3VzZXJmYXVsdGZkLnJzdC0zOTUtcGVyc2lzdGVudCBSV1AgbWFya2VyIHRvZGF5LiBUaGUgdXNlciBuZWVkcyB0byByZS1hcm0gdGhlIHJhbmdlIHdpdGhcXG4tLVxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTk0OT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zd3Bfb2Zmc2V0X3JzdGUoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE5NTgtICogVGhpcyBpcyBhbHNvIHRydWUgZm9yIHN3YXAgZW50cmllcywgYW5kIHRoZWlyIHN3YXAgdHlwZSBhbmQgb2Zmc2V0IGVuY29kaW5nLlxcbmFyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MTk1OTogKiBGb3IgaHVnZXRsYmZzIFBURV9NQVJLRVIgc3VwcG9ydCwgczM5MCBoYXMgaW50ZXJuYWwgX19zd3BfdHlwZV9yc3RlKCkgYW5kXFxuYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaC0xOTYwLSAqIF9fc3dwX29mZnNldF9yc3RlKCkgaGVscGVycyB0byBjb3JyZWN0bHkgaGFuZGxlIFJTVEUgc3dhcCBlbnRyaWVzLlxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTI1MDM9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yNTEzLVxcdFxcdHNldF9wdGVfYXQodm1hLVxcdTAwM2V2bV9tbSwgYWRkciwgcHRlLFxcbmZzL3Byb2MvdGFza19tbXUuYzoyNTE0OlxcdFxcdFxcdCAgIG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjUxNS1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTI2MzY9c3RhdGljIHZvaWQgbWFrZV91ZmZkX3dwX2h1Z2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTI2NDQtXFx0XFx0c2V0X2h1Z2VfcHRlX2F0KHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZXAsXFxuZnMvcHJvYy90YXNrX21tdS5jOjI2NDU6XFx0XFx0XFx0XFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksIHBzaXplKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjY0Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oPTE2PXN0YXRpYyBpbmxpbmUgYm9vbCB1ZmZkX3N1cHBvcnRzX3dwX21hcmtlcih2b2lkKVxcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmgtMTcte1xcbmluY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg6MTg6XFx0cmV0dXJuIHBndGFibGVfc3VwcG9ydHNfdWZmZCgpIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX1BURV9NQVJLRVJfVUZGRF9XUCk7XFxuaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlX3VmZmQuaC0xOS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0xNjA9c3RhdGljIGlubGluZSBlbnVtIHNvZnRsZWFmX3R5cGUgc29mdGxlYWZfdHlwZShzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTkyLSNlbmRpZlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjE5MzpcXHRjYXNlIFNXUF9QVEVfTUFSS0VSOlxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTE5NC1cXHRcXHRyZXR1cm4gU09GVExFQUZfTUFSS0VSO1xcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg9MzM3PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBzb2Z0bGVhZl90b19tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0MC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNDE6XFx0cmV0dXJuIHN3cF9vZmZzZXQoZW50cnkpIFxcdTAwMjYgUFRFX01BUktFUl9NQVNLO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM0Mi19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00NDU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX3BvaXNvbl9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ0OS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0NTA6XFx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXFx1MDAyNiBQVEVfTUFSS0VSX1BPSVNPTkVEO1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ1MS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD00NTk9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2lzX2d1YXJkX21hcmtlcihzb2Z0bGVhZl90IGVudHJ5KVxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDYzLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjQ2NDpcXHRyZXR1cm4gc29mdGxlYWZfdG9fbWFya2VyKGVudHJ5KSBcXHUwMDI2IFBURV9NQVJLRVJfR1VBUkQ7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDY1LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTQ3Nj1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfdWZmZF93cF9tYXJrZXIoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTQ4MC1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDo0ODE6XFx0cmV0dXJuIHNvZnRsZWFmX3RvX21hcmtlcihlbnRyeSkgXFx1MDAyNiBQVEVfTUFSS0VSX1VGRkRfV1A7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtNDgyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTU1PXN0YXRpYyBpbmxpbmUgcHRlX21hcmtlciBjb3B5X3B0ZV9tYXJrZXIoXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU1OS1cXHQvKiBBbHdheXMgY29weSBlcnJvciBlbnRyaWVzLiAqL1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6NTYwOlxcdHB0ZV9tYXJrZXIgZHN0bSA9IHNyY20gXFx1MDAyNiAoUFRFX01BUktFUl9QT0lTT05FRCB8IFBURV9NQVJLRVJfR1VBUkQpO1xcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYxLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtNTYyLVxcdC8qIE9ubHkgY29weSBQVEUgbWFya2VycyBpZiBVRkZEIHJlZ2lzdGVyIG1hdGNoZXMuICovXFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDo1NjM6XFx0aWYgKChzcmNtIFxcdTAwMjYgUFRFX01BUktFUl9VRkZEX1dQKSBcXHUwMDI2XFx1MDAyNiB1c2VyZmF1bHRmZF93cChkc3Rfdm1hKSlcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjU2NDpcXHRcXHRkc3RtIHw9IFBURV9NQVJLRVJfVUZGRF9XUDtcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTU2NS1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg9NTgyPXB0ZV9pbnN0YWxsX3VmZmRfd3BfaWZfbmVlZGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTYxNC1cXHRcXHRzZXRfcHRlX2F0KHZtYS1cXHUwMDNldm1fbW0sIGFkZHIsIHB0ZSxcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjYxNTpcXHRcXHRcXHQgICBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9VRkZEX1dQKSk7XFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC02MTYtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaD0yOT1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tzd2FwZCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNTQtICovXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6NTU6I2RlZmluZSBTV1BfUFRFX01BUktFUl9OVU0gMVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjU2OiNkZWZpbmUgU1dQX1BURV9NQVJLRVIgICAgIChNQVhfU1dBUEZJTEVTICsgU1dQX0hXUE9JU09OX05VTSArIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC01Ny1cXHRcXHRcXHQgICAgU1dQX01JR1JBVElPTl9OVU0gKyBTV1BfREVWSUNFX05VTSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTExMC1cXHRTV1BfTUlHUkFUSU9OX05VTSAtIFNXUF9IV1BPSVNPTl9OVU0gLSBcXFxcXFxuaW5jbHVkZS9saW51eC9zd2FwLmg6MTExOlxcdFNXUF9QVEVfTUFSS0VSX05VTSlcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC0xMTItXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0yODE9dHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV9tYXJrZXI7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjgyLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjI4MzojZGVmaW5lICBQVEVfTUFSS0VSX1VGRkRfV1BcXHRcXHRcXHRCSVQoMClcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0yODQtLypcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI5Mi0gKi9cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDoyOTM6I2RlZmluZSAgUFRFX01BUktFUl9QT0lTT05FRFxcdFxcdFxcdEJJVCgxKVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTI5NC0vKlxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMjk4LSAqL1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjI5OTojZGVmaW5lICBQVEVfTUFSS0VSX0dVQVJEXFx0XFx0XFx0QklUKDIpXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzAwOiNkZWZpbmUgIFBURV9NQVJLRVJfTUFTS1xcdFxcdFxcdChCSVQoMykgLSAxKVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMwMS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMDI9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX3B0ZV9tYXJrZXJfZW50cnkocHRlX21hcmtlciBtYXJrZXIpXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzAzLXtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMDQ6XFx0cmV0dXJuIHN3cF9lbnRyeShTV1BfUFRFX01BUktFUiwgbWFya2VyKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMDUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzEyPXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9wb2lzb25lZF9zd3BfZW50cnkodm9pZClcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMTMte1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMxNDpcXHRyZXR1cm4gbWFrZV9wdGVfbWFya2VyX2VudHJ5KFBURV9NQVJLRVJfUE9JU09ORUQpO1xcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMxNS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zMTc9c3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMxOC17XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzE5OlxcdHJldHVybiBtYWtlX3B0ZV9tYXJrZXJfZW50cnkoUFRFX01BUktFUl9HVUFSRCk7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzIwLX1cXG4tLVxcbm1tL0tjb25maWc9MTM4Mj1tZW51Y29uZmlnIFVTRVJGQVVMVEZEXFxuLS1cXG5tbS9LY29uZmlnLTEzODgtXFxubW0vS2NvbmZpZzoxMzg5OmNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG5tbS9LY29uZmlnLTEzOTAtXFx0Ym9vbCBcXFwiVXNlcmZhdWx0ZmQgd3JpdGUgcHJvdGVjdGlvbiBzdXBwb3J0IGZvciBzaG1lbS9odWdldGxiZnNcXFwiXFxuLS1cXG5tbS9odWdldGxiLmM9NTIxMz12b2lkIF9fdW5tYXBfaHVnZXBhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNTI3NC1cXHRcXHRcXHRcXHRzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsXFxubW0vaHVnZXRsYi5jOjUyNzU6XFx0XFx0XFx0XFx0XFx0XFx0bWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCksXFxubW0vaHVnZXRsYi5jLTUyNzYtXFx0XFx0XFx0XFx0XFx0XFx0c3opO1xcbi0tXFxubW0vaHVnZXRsYi5jLTUzMTAtXFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLFxcbm1tL2h1Z2V0bGIuYzo1MzExOlxcdFxcdFxcdFxcdFxcdG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApLFxcbm1tL2h1Z2V0bGIuYy01MzEyLVxcdFxcdFxcdFxcdFxcdHN6KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYz02MDEyPXZtX2ZhdWx0X3QgaHVnZXRsYl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtNjA2OS1cXG5tbS9odWdldGxiLmM6NjA3MDpcXHRcXHRpZiAobWFya2VyIFxcdTAwMjYgUFRFX01BUktFUl9QT0lTT05FRCkge1xcbm1tL2h1Z2V0bGIuYy02MDcxLVxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFIHxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MDczLVxcdFxcdFxcdGdvdG8gb3V0X211dGV4O1xcbm1tL2h1Z2V0bGIuYzo2MDc0OlxcdFxcdH0gZWxzZSBpZiAoV0FSTl9PTl9PTkNFKG1hcmtlciBcXHUwMDI2IFBURV9NQVJLRVJfR1VBUkQpKSB7XFxubW0vaHVnZXRsYi5jLTYwNzUtXFx0XFx0XFx0LyogVGhpcyBpc24ndCBzdXBwb3J0ZWQgaW4gaHVnZXRsYi4gKi9cXG4tLVxcbm1tL2h1Z2V0bGIuYz02Mjc1PWludCBodWdldGxiX21maWxsX2F0b21pY19wdGUocHRlX3QgKmRzdF9wdGUsXFxuLS1cXG5tbS9odWdldGxiLmMtNjMwNS1cXG5tbS9odWdldGxiLmM6NjMwNjpcXHRcXHRfZHN0X3B0ZSA9IG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1BPSVNPTkVEKTtcXG5tbS9odWdldGxiLmMtNjMwNy1cXHRcXHRzZXRfaHVnZV9wdGVfYXQoZHN0X21tLCBkc3RfYWRkciwgZHN0X3B0ZSwgX2RzdF9wdGUsIHNpemUpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTY0OTY9bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY1NzQtXFx0XFx0XFx0XFx0c2V0X2h1Z2VfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGVwLFxcbm1tL2h1Z2V0bGIuYzo2NTc1OlxcdFxcdFxcdFxcdFxcdFxcdG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1VGRkRfV1ApLFxcbm1tL2h1Z2V0bGIuYy02NTc2LVxcdFxcdFxcdFxcdFxcdFxcdHBzaXplKTtcXG4tLVxcbm1tL21hZHZpc2UuYz0xMTAzPXN0YXRpYyBpbnQgZ3VhcmRfaW5zdGFsbF9zZXRfcHRlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0LFxcbi0tXFxubW0vbWFkdmlzZS5jLTExMDgtXFx0LyogU2ltcGx5IGluc3RhbGwgYSBQVEUgbWFya2VyLCB0aGlzIGNhdXNlcyBzZWdmYXVsdCBvbiBhY2Nlc3MuICovXFxubW0vbWFkdmlzZS5jOjExMDk6XFx0KnB0ZXAgPSBtYWtlX3B0ZV9tYXJrZXIoUFRFX01BUktFUl9HVUFSRCk7XFxubW0vbWFkdmlzZS5jLTExMTAtXFx0KCpucl9wYWdlcykrKztcXG4tLVxcbm1tL21lbW9yeS5jPTQ2MjA9c3RhdGljIHZtX2ZhdWx0X3QgcHRlX21hcmtlcl9jbGVhcihzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTQ2MzAtXFx0ICogVGhpcyBzaG91bGQgYWxzbyBjb3ZlciB0aGUgY2FzZSB3aGVyZSBlLmcuIHRoZSBwdGUgY2hhbmdlZFxcbm1tL21lbW9yeS5jOjQ2MzE6XFx0ICogcXVpY2tseSBmcm9tIGEgUFRFX01BUktFUl9VRkZEX1dQIGludG8gUFRFX01BUktFUl9QT0lTT05FRC5cXG5tbS9tZW1vcnkuYy00NjMyLVxcdCAqIFNvIHB0ZV9pc19tYXJrZXIoKSBjaGVjayBpcyBub3QgZW5vdWdoIHRvIHNhZmVseSBkcm9wIHRoZSBwdGUuXFxuLS1cXG5tbS9tZW1vcnkuYz00NjY0PXN0YXRpYyB2bV9mYXVsdF90IGhhbmRsZV9wdGVfbWFya2VyKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDY3Ni1cXHQvKiBIaWdoZXIgcHJpb3JpdHkgdGhhbiB1ZmZkLXdwIHdoZW4gZGF0YSBjb3JydXB0ZWQgKi9cXG5tbS9tZW1vcnkuYzo0Njc3OlxcdGlmIChtYXJrZXIgXFx1MDAyNiBQVEVfTUFSS0VSX1BPSVNPTkVEKVxcbm1tL21lbW9yeS5jLTQ2NzgtXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX0hXUE9JU09OO1xcbi0tXFxubW0vbWVtb3J5LmMtNDY4MC1cXHQvKiBIaXR0aW5nIGEgZ3VhcmQgcGFnZSBpcyBhbHdheXMgYSBmYXRhbCBjb25kaXRpb24uICovXFxubW0vbWVtb3J5LmM6NDY4MTpcXHRpZiAobWFya2VyIFxcdTAwMjYgUFRFX01BUktFUl9HVUFSRClcXG5tbS9tZW1vcnkuYy00NjgyLVxcdFxcdHJldHVybiBWTV9GQVVMVF9TSUdTRUdWO1xcbi0tXFxubW0vbXByb3RlY3QuYz0zMzE9c3RhdGljIGxvbmcgY2hhbmdlX3B0ZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbXByb3RlY3QuYy00MjctXFx0XFx0XFx0XFx0c2V0X3B0ZV9hdCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBwdGUsXFxubW0vbXByb3RlY3QuYzo0Mjg6XFx0XFx0XFx0XFx0XFx0ICAgbWFrZV9wdGVfbWFya2VyKFBURV9NQVJLRVJfVUZGRF9XUCkpO1xcbm1tL21wcm90ZWN0LmMtNDI5LVxcdFxcdFxcdFxcdHBhZ2VzKys7XFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jPTczND1zdGF0aWMgaW50IG1maWxsX2F0b21pY19wdGVfcG9pc29uKHN0cnVjdCBtZmlsbF9zdGF0ZSAqc3RhdGUpXFxuLS1cXG5tbS91c2VyZmF1bHRmZC5jLTc0My1cXG5tbS91c2VyZmF1bHRmZC5jOjc0NDpcXHRfZHN0X3B0ZSA9IG1ha2VfcHRlX21hcmtlcihQVEVfTUFSS0VSX1BPSVNPTkVEKTtcXG5tbS91c2VyZmF1bHRmZC5jLTc0NS1cXHRyZXQgPSAtRUFHQUlOO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vY29uZmlnPTI9Q09ORklHX1VTRVJGQVVMVEZEPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWc6MzpDT05GSUdfUFRFX01BUktFUl9VRkZEX1dQPXlcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9jb25maWctNC1DT05GSUdfVEVTVF9WTUFMTE9DPW1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDI6NTYuNDM1MzEwMzQyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMzYwMDM5MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUFRFX01BUktFUiBDb25maWd1cmF0aW9uIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBQVEVfTUFSS0VSX1VGRkRfV1BgIGNvbmZpZyDigJMgdGhhdCdzIHRoZSBvbmUgSSBuZWVkIGZvciBQVEUgbWFya2VycywgcmlnaHQ/IEhtbSwgaGFuZyBvbiwgdGhlcmUgYXJlIGFsc28gYFBURV9NQVJLRVJfUE9JU09ORURgIGFuZCBgUFRFX01BUktFUl9HVUFSRGAuIEFyZSB0aG9zZSBkZXBlbmRlbnQgb24gYW55IG90aGVyIGNvbmZpZ3M/IEl0IGxvb2tzIGxpa2UgYFBURV9NQVJLRVJfUE9JU09ORURgIGlzIGVpdGhlciB1c2VkIHVuY29uZGl0aW9uYWxseSBvciBwZXJoYXBzIGxpbmtlZCB0byBgQ09ORklHX01FTU9SWV9GQUlMVVJFYCwgYW5kIGBQVEVfTUFSS0VSX0dVQVJEYCBzZWVtcyB1bmNvbmRpdGlvbmFsIGFzIHdlbGwuXG5cblRoZXJlZm9yZSwgYENPTkZJR19QVEVfTUFSS0VSX1VGRkRfV1BgIGlzIGRlZmluaXRlbHkgYSBnb29kIGNvbmZpZyB0byBjb25zaWRlciBmb3IgaW5jbHVzaW9uLiBCZXlvbmQgdGhhdCwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBgQ09ORklHX0RFVklDRV9QUklWQVRFYCwgYENPTkZJR19NSUdSQVRJT05gLCBhbmQgYENPTkZJR19NRU1PUllfRkFJTFVSRWAgdG9vLlxuXG5Ob3csIGxldCBtZSBkaWcgaW50byBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBzcGVjaWZpY2FsbHkuIEknbGwgY2hlY2sgYG1tL0tjb25maWdgIGZvciB0aGF0IG9uZS4gQWgsIG9rYXksIGl0IGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYC4gTGV0IG1lIGNoZWNrIHRoYXQgY29uZmlnLiBgQ09ORklHX1pPTkVfREVWSUNFYCBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIFdoaWxlIEkgdW5kZXJzdGFuZCB0aGUgaGllcmFyY2h5IGhlcmUsIEkgZG9uJ3QgbmVlZCB0byBsaXN0IGFsbCB0aG9zZSBkZXBlbmRlbmNpZXMsIHNvIEkgY2FuIGp1c3QgcmVtZW1iZXIgYERFVklDRV9QUklWQVRFYCwgYE1JR1JBVElPTmAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCwgb2YgY291cnNlLCBgUFRFX01BUktFUl9VRkZEX1dQYC5cblxuV2FpdCBhIG1pbnV0ZSwgdGhpcyBwYXRjaCBpcyBleHRyYWN0aW5nIGBkb19ub25fc3dhcF9wYWdlYCBmcm9tIGBkb19zd2FwX3BhZ2VgLCBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgYGRvX25vbl9zd2FwX3BhZ2VgIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIGEgdmFyaWV0eSBvZiBjYXNlcywgaXQgbG9va3MgbGlrZSBpdCdzIGhhbmRsaW5nIHRoaW5ncyBsaWtlOlxuLSBgc29mdGxlYWZfaXNfbWlncmF0aW9uYFxuLSBgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZWBcbi0gYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYFxuLSBgc29mdGxlYWZfaXNfaHdwb2lzb25gXG4tIGBzb2Z0bGVhZl9pc19tYXJrZXJgXG5cblJpZ2h0LCB0aGUgcG9pbnQgaXMgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBob3cgYHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmVgIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUxMywiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMzowMy41NzEzMTc3MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgyNzcxODI5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTI4Nz1zdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTI5OC0vKipcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDoyOTk6ICogc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZSgpIC0gSXMgdGhpcyBsZWFmIGVudHJ5IGEgZGV2aWNlLWV4Y2x1c2l2ZSBlbnRyeT9cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0zMDAtICogQGVudHJ5OiBMZWFmIGVudHJ5Llxcbi0tXFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMzAzLSAqL1xcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oOjMwNDpzdGF0aWMgaW5saW5lIGJvb2wgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShzb2Z0bGVhZl90IGVudHJ5KVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTMwNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaD0zNTU9c3RhdGljIGlubGluZSBib29sIHNvZnRsZWFmX2hhc19wZm4oc29mdGxlYWZfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2My1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaDozNjQ6XFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKVxcbmluY2x1ZGUvbGludXgvbGVhZm9wcy5oLTM2NS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2htbS5jPTI0MT1zdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vaG1tLmMtMjkzLVxcbm1tL2htbS5jOjI5NDpcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpXFxubW0vaG1tLmMtMjk1LVxcdFxcdFxcdGdvdG8gZmF1bHQ7XFxuLS1cXG5tbS9tZW1vcnkuYz0xMDAxPWNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXFxuLS1cXG5tbS9tZW1vcnkuYy0xMDc3LVxcdFxcdH1cXG5tbS9tZW1vcnkuYzoxMDc4OlxcdH0gZWxzZSBpZiAoc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZShlbnRyeSkpIHtcXG5tbS9tZW1vcnkuYy0xMDc5LVxcdFxcdC8qXFxuLS1cXG5tbS9tZW1vcnkuYz0xODExPXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21lbW9yeS5jLTE4MjEtXFx0aWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxcbm1tL21lbW9yeS5jOjE4MjI6XFx0ICAgIHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtMTgyMy1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xcbi0tXFxubW0vbWVtb3J5LmM9NDgxOD1zdGF0aWMgdm1fZmF1bHRfdCBkb19ub25fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNDgyOC1cXHRcXHRcXHRcXHQgICAgIHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxubW0vbWVtb3J5LmM6NDgyOTpcXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9leGNsdXNpdmUoZW50cnkpKSB7XFxubW0vbWVtb3J5LmMtNDgzMC1cXHRcXHR2bWYtXFx1MDAzZXBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jPTE2PXN0YXRpYyBib29sIG1hcF9wdGUoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBwbWRfdCAqcG1kdmFscCxcXG4tLVxcbm1tL3BhZ2Vfdm1hX21hcHBlZC5jLTcxLVxcdFxcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIFxcdTAwMjZcXHUwMDI2XFxubW0vcGFnZV92bWFfbWFwcGVkLmM6NzI6XFx0XFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy03My1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYz0xMDc9c3RhdGljIGJvb2wgY2hlY2tfcHRlKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgbG9uZyBwdGVfbnIpXFxuLS1cXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzEtXFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYzoxMzI6XFx0XFx0ICAgICFzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlKGVudHJ5KSlcXG5tbS9wYWdlX3ZtYV9tYXBwZWQuYy0xMzMtXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMzowOS4zOTkwNDM5OTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4MDMwNjg4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSdtIGRpc2N1c3NpbmcgdGhpcyB3aXRoIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgc29mdGxlYWZfaXNfZGV2aWNlX2V4Y2x1c2l2ZWAgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBsZXQncyBkaXZlIHN0cmFpZ2h0IGluLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hpY2ggY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlIGBzb2Z0bGVhZl9pc19kZXZpY2VfZXhjbHVzaXZlYCBzZXR0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgdHJpZ2dlcmluZyB0aGlzIGJlaGF2aW9yLCBvciBtb3JlIHNwZWNpZmljYWxseSwgd2hhdCB0aGUgZGVwZW5kZW5jaWVzIG9yIHN3aXRjaGVzIGFyZS4gSXQncyBjcnVjaWFsIGZvciBtZSB0byBxdWlja2x5IGlzb2xhdGUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZWxlbWVudHMuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGJvb2xlYW4gZmxhZywgb3IgaXMgaXQgYSBtb3JlIGNvbXBsZXggc2V0dXAgd2l0aCBtdWx0aXBsZSBkZXBlbmRlbmNpZXMgdGhhdCBJIG5lZWQgdG8gdHJhY2U/IFBlcmhhcHMgaXQncyBidXJpZWQgaW4gc29tZSBvYnNjdXJlIHNlY3Rpb24gb2YgdGhlIHN5c3RlbSBjb25maWcgdGhhdCBJJ20gb3Zlcmxvb2tpbmc/IFRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTczMTYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQwNzowMzoxNC4yNzkzNTQ3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTE2MjUzODMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNXUF9ERVZJQ0VfRVhDTFVTSVZFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbGVhZm9wcy5oPTE2MD1zdGF0aWMgaW5saW5lIGVudW0gc29mdGxlYWZfdHlwZSBzb2Z0bGVhZl90eXBlKHNvZnRsZWFmX3QgZW50cnkpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaC0xODUtXFx0XFx0cmV0dXJuIFNPRlRMRUFGX0RFVklDRV9QUklWQVRFX1JFQUQ7XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmg6MTg2OlxcdGNhc2UgU1dQX0RFVklDRV9FWENMVVNJVkU6XFxuaW5jbHVkZS9saW51eC9sZWFmb3BzLmgtMTg3LVxcdFxcdHJldHVybiBTT0ZUTEVBRl9ERVZJQ0VfRVhDTFVTSVZFO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9Mjk9c3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rc3dhcGQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTY4LSAqIFdoZW4gYSBwYWdlIGlzIG1hcHBlZCBieSB0aGUgZGV2aWNlIGZvciBleGNsdXNpdmUgYWNjZXNzIHdlIHNldCB0aGUgQ1BVIHBhZ2VcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo2OTogKiB0YWJsZSBlbnRyaWVzIHRvIGEgc3BlY2lhbCBTV1BfREVWSUNFX0VYQ0xVU0lWRSBlbnRyeS5cXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03MC0gKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTc0LSNkZWZpbmUgU1dQX0RFVklDRV9SRUFEIChNQVhfU1dBUEZJTEVTK1NXUF9IV1BPSVNPTl9OVU0rU1dQX01JR1JBVElPTl9OVU0rMSlcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo3NTojZGVmaW5lIFNXUF9ERVZJQ0VfRVhDTFVTSVZFIChNQVhfU1dBUEZJTEVTK1NXUF9IV1BPSVNPTl9OVU0rU1dQX01JR1JBVElPTl9OVU0rMilcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaC03Ni0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MTQ2PXN0YXRpYyBpbmxpbmUgc3dwX2VudHJ5X3QgbWFrZV9kZXZpY2VfZXhjbHVzaXZlX2VudHJ5KHBnb2ZmX3Qgb2Zmc2V0KVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTE0Ny17XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MTQ4OlxcdHJldHVybiBzd3BfZW50cnkoU1dQX0RFVklDRV9FWENMVVNJVkUsIG9mZnNldCk7XFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMTQ5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MTkuNzk1NjE3OTgyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MDk0MTU1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXM6XG5cbioqQ2hlY2tpbmcgZm9yIGBTV1BfREVWSUNFX0VYQ0xVU0lWRWAqKlxuXG5BbHJpZ2h0LCB0aGUgdGFzayBhdCBoYW5kIGludm9sdmVzIHNvbWV0aGluZyByZWxhdGVkIHRvIHN3YXBwaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBzd2FwIHNwYWNlLCBhbmQgdGhhdCB1c3VhbGx5IHJlc2lkZXMgaW4gdGhlIGtlcm5lbCBoZWFkZXJzLiBNeSBtdXNjbGUgbWVtb3J5IHRlbGxzIG1lIHRoZSBwbGFjZSB0byBzdGFydCBpcyBgaW5jbHVkZS9saW51eC9zd2FwLmhgLiBUaGF0IGhlYWRlciBmaWxlIGlzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBmb3Igc3dhcC1yZWxhdGVkIHN0cnVjdHVyZXMsIGNvbnN0YW50cywgYW5kIG1hY3JvcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gVGhlcmVmb3JlLCBJJ20gZ29pbmcgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgYFNXUF9ERVZJQ0VfRVhDTFVTSVZFYCwgc28sIEknbGwgZ28gY2hlY2sgdGhhdCBoZWFkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTQzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MjMuMjA1MDM3NjlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTk5NDMwMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI0OD1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuLS1cXG5tbS9LY29uZmlnLTEyNTAtXFxubW0vS2NvbmZpZzoxMjUxOmNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTI1Mi1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAzOjI3LjgwNTA1OTQ4MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ2NjcxMjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTd2FwIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHJlbWVtYmVyIHNlZWluZyBzb21ldGhpbmcgYWJvdXQgYFNXUF9ERVZJQ0VfRVhDTFVTSVZFYCBiZWluZyBjb25kaXRpb25hbGx5IGVuYWJsZWQuIFJpZ2h0LCBpdCdzIHRpZWQgdG8gc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJ3Mgc3dhcCBkZWZpbml0aW9ucy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIGV4YWN0bHkgdGhhdCBmbGFnIGxpdmVzLiBMZXQncyBzdGFydCB3aXRoIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIEFuZCBJJ20gcHJldHR5IHN1cmUgaXQncyBhcm91bmQgbGluZSA3NSwgZ2l2ZSBvciB0YWtlLiBHb3R0YSBxdWlja2x5IGNvbmZpcm0gdGhlIGV4YWN0IGxvY2F0aW9uIGFuZCByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgZXhjbHVzaW9uIHdvcmtzIGJhc2VkIG9uIHRoZSBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4MjIxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MzIuMDUxNzM0NzI1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Njk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHQgKiBVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgc3VwcG9ydC4gU2VlIGluY2x1ZGUvbGludXgvaG1tLmggYW5kXFxuICA2MTpcXHQgKiBEb2N1bWVudGF0aW9uL21tL2htbS5yc3QuIFNob3J0IGRlc2NyaXB0aW9uIGlzIHdlIG5lZWQgc3RydWN0IHBhZ2VzIGZvclxcbiAgNjI6XFx0ICogZGV2aWNlIG1lbW9yeSB0aGF0IGlzIHVuYWRkcmVzc2FibGUgKGluYWNjZXNzaWJsZSkgYnkgQ1BVLCBzbyB0aGF0IHdlIGNhblxcbiAgNjM6XFx0ICogbWlncmF0ZSBwYXJ0IG9mIGEgcHJvY2VzcyBtZW1vcnkgdG8gZGV2aWNlIG1lbW9yeS5cXG4gIDY0OlxcdCAqXFxuICA2NTpcXHQgKiBXaGVuIGEgcGFnZSBpcyBtaWdyYXRlZCBmcm9tIENQVSB0byBkZXZpY2UsIHdlIHNldCB0aGUgQ1BVIHBhZ2UgdGFibGUgZW50cnlcXG4gIDY2OlxcdCAqIHRvIGEgc3BlY2lhbCBTV1BfREVWSUNFX3tSRUFEfFdSSVRFfSBlbnRyeS5cXG4gIDY3OlxcdCAqXFxuICA2ODpcXHQgKiBXaGVuIGEgcGFnZSBpcyBtYXBwZWQgYnkgdGhlIGRldmljZSBmb3IgZXhjbHVzaXZlIGFjY2VzcyB3ZSBzZXQgdGhlIENQVSBwYWdlXFxuICA2OTpcXHQgKiB0YWJsZSBlbnRyaWVzIHRvIGEgc3BlY2lhbCBTV1BfREVWSUNFX0VYQ0xVU0lWRSBlbnRyeS5cXG4gIDcwOlxcdCAqL1xcbiAgNzE6XFx0I2lmZGVmIENPTkZJR19ERVZJQ0VfUFJJVkFURVxcbiAgNzI6XFx0I2RlZmluZSBTV1BfREVWSUNFX05VTSAzXFxuICA3MzpcXHQjZGVmaW5lIFNXUF9ERVZJQ0VfV1JJVEUgKE1BWF9TV0FQRklMRVMrU1dQX0hXUE9JU09OX05VTStTV1BfTUlHUkFUSU9OX05VTSlcXG4gIDc0OlxcdCNkZWZpbmUgU1dQX0RFVklDRV9SRUFEIChNQVhfU1dBUEZJTEVTK1NXUF9IV1BPSVNPTl9OVU0rU1dQX01JR1JBVElPTl9OVU0rMSlcXG4gIDc1OlxcdCNkZWZpbmUgU1dQX0RFVklDRV9FWENMVVNJVkUgKE1BWF9TV0FQRklMRVMrU1dQX0hXUE9JU09OX05VTStTV1BfTUlHUkFUSU9OX05VTSsyKVxcbiAgNzY6XFx0I2Vsc2VcXG4gIDc3OlxcdCNkZWZpbmUgU1dQX0RFVklDRV9OVU0gMFxcbiAgNzg6XFx0I2VuZGlmXFxuICA3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMDc6MDM6MzIuMDUxOTM1MDU2WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNjAzNTQyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWxsIGFib3V0IHJlZmFjdG9yaW5nIHRoZSBoYW5kbGluZyBvZiBzb21lIHNwZWNpYWwgcGFnZSB0YWJsZSBlbnRyaWVzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byByZXZvbHZlIGFyb3VuZCBtb3ZpbmcgdGhlIGxvZ2ljIGZvciBub24tc3dhcCBzb2Z0bGVhZiBlbnRyaWVzIG91dCBvZiBgZG9fc3dhcF9wYWdlYCBhbmQgaW50byBhIG5ldyBmdW5jdGlvbiwgYGRvX25vbl9zd2FwX3BhZ2VgLiBUaGlzIGluY2x1ZGVzIGhhbmRsaW5nIG1pZ3JhdGlvbiwgZGV2aWNlLWV4Y2x1c2l2ZSBwYWdlcywgZGV2aWNlIHByaXZhdGUgcGFnZXMsIG1lbW9yeSBmYWlsdXJlcyAoaHdwb2lzb24pLCBhbmQgbWFya2Vycy4gVGhlIHBhdGNoIGlzIGFsc28gbWFraW5nIHRoZSBzd2l0Y2ggdG8gZm9saW8tYmFzZWQgQVBJcyBsaWtlIGBmb2xpb190cnlsb2NrYCBhbmQgYGZvbGlvX2dldGAuIEEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBJIHNob3VsZCBrZWVwIGFuIGV5ZSBvbi5cblxuTGV0J3MgYnJlYWsgaXQgZG93bi4gSSd2ZSBpZGVudGlmaWVkIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uczogYERFVklDRV9QUklWQVRFYCwgYE1JR1JBVElPTmAsIGBNRU1PUllfRkFJTFVSRWAsIGFuZCBgUFRFX01BUktFUl9VRkZEX1dQYC4gVGhlc2UgYXJlIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSBzcGVjaWZpY2FsbHkgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UgaW4gaGFuZGxpbmcgbm9uLXN3YXAgc29mdGxlYWYgZW50cmllcy5cblxuSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgbWFpbiBmb2N1cyBpcyBpbmRlZWQgYGRvX25vbl9zd2FwX3BhZ2VgLiBUaGlzIG5ldyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgZG9fc3dhcF9wYWdlYC4gYGRvX3N3YXBfcGFnZWAgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoIGJlY2F1c2UgaXQgaGFuZGxlcyBzd2FwIGZhdWx0cy4gVGhlIGtleSBoZXJlIGlzIHRoYXQgYGRvX25vbl9zd2FwX3BhZ2VgIGlzIG9ubHkgY2FsbGVkIGZvciB0aGUgbGVzcyBjb21tb24gc2NlbmFyaW9zIG9mIG5vbi1zd2FwIHNvZnRsZWFmIGVudHJpZXMuIFRoaXMgbWFrZXMgaXQgYSBncmVhdCBmdW5jdGlvbiB0byBmb2N1cyBvbiBmb3IgYW5hbHlzaXMuXG5cbkkndmUgYWxzbyBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBhcmUgZmFpcmx5IHN0YW5kYXJkLiBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX01NVWAgYXJlIG5lY2Vzc2FyeSwgYnV0IHVzdWFsbHkgZW5hYmxlZC5cblxuU28sIEkgd291bGQgc2F5IHRoaXMgcGF0Y2ggaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblxuKiAgICoqV29ydGhGdXp6aW5nKio6ICpUcnVlKlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJkb19ub25fc3dhcF9wYWdlXCJdYFxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBgW1wiREVWSUNFX1BSSVZBVEVcIiwgXCJNSUdSQVRJT05cIiwgXCJNRU1PUllfRkFJTFVSRVwiLCBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXWBcbiogICAqKlJlYXNvbmluZyoqOiBcIlRoZSBwYXRjaCBleHRyYWN0cyB0aGUgaGFuZGxpbmcgb2Ygbm9uLXN3YXAgc29mdGxlYWYgZW50cmllcyAobWlncmF0aW9uLCBkZXZpY2UgZXhjbHVzaXZlLCBkZXZpY2UgcHJpdmF0ZSwgaHdwb2lzb24sIG1hcmtlcnMpIGZyb20gYGRvX3N3YXBfcGFnZWAgaW50byBhIG5ldyBmdW5jdGlvbiBgZG9fbm9uX3N3YXBfcGFnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgY29kZSB0byB1c2UgZm9saW8tYmFzZWQgQVBJcyAoYGZvbGlvX3RyeWxvY2tgLCBgZm9saW9fZ2V0YCwgZXRjLikgaW5zdGVhZCBvZiBwYWdlLWJhc2VkIEFQSXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciB2YXJpb3VzIHNwZWNpYWwgcGFnZSB0YWJsZSBlbnRyaWVzLlwiXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4ODE2LCJPdXRwdXRUb2tlbnMiOjE2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDA3OjAzOjQxLjMxMjI5Mjg4NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjUwMDAyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiTUVNT1JZX0ZBSUxVUkVcIixcbiAgICBcIlBURV9NQVJLRVJfVUZGRF9XUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX25vbl9zd2FwX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBleHRyYWN0cyB0aGUgaGFuZGxpbmcgb2Ygbm9uLXN3YXAgc29mdGxlYWYgZW50cmllcyAobWlncmF0aW9uLCBkZXZpY2UgZXhjbHVzaXZlLCBkZXZpY2UgcHJpdmF0ZSwgaHdwb2lzb24sIG1hcmtlcnMpIGZyb20gYGRvX3N3YXBfcGFnZWAgaW50byBhIG5ldyBmdW5jdGlvbiBgZG9fbm9uX3N3YXBfcGFnZWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgY29kZSB0byB1c2UgZm9saW8tYmFzZWQgQVBJcyAoYGZvbGlvX3RyeWxvY2tgLCBgZm9saW9fZ2V0YCwgZXRjLikgaW5zdGVhZCBvZiBwYWdlLWJhc2VkIEFQSXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBwYWdlIGZhdWx0IGhhbmRsaW5nIGZvciB2YXJpb3VzIHNwZWNpYWwgcGFnZSB0YWJsZSBlbnRyaWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIk1FTU9SWV9GQUlMVVJFXCIsXG4gICAgXCJQVEVfTUFSS0VSX1VGRkRfV1BcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19ub25fc3dhcF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZXh0cmFjdHMgdGhlIGhhbmRsaW5nIG9mIG5vbi1zd2FwIHNvZnRsZWFmIGVudHJpZXMgKG1pZ3JhdGlvbiwgZGV2aWNlIGV4Y2x1c2l2ZSwgZGV2aWNlIHByaXZhdGUsIGh3cG9pc29uLCBtYXJrZXJzKSBmcm9tIGBkb19zd2FwX3BhZ2VgIGludG8gYSBuZXcgZnVuY3Rpb24gYGRvX25vbl9zd2FwX3BhZ2VgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIGNvZGUgdG8gdXNlIGZvbGlvLWJhc2VkIEFQSXMgKGBmb2xpb190cnlsb2NrYCwgYGZvbGlvX2dldGAsIGV0Yy4pIGluc3RlYWQgb2YgcGFnZS1iYXNlZCBBUElzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgcGFnZSBmYXVsdCBoYW5kbGluZyBmb3IgdmFyaW91cyBzcGVjaWFsIHBhZ2UgdGFibGUgZW50cmllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8g7lg[1] Phase: Succeeded StartedAt: 2026-07-24 07:03:53 +0000 UTC FinishedAt: 2026-07-24 07:03:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 07:03:54 +0000 UTC FinishedAt: 2026-07-24 07:03:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2] Phase: Succeeded StartedAt: 2026-07-24 07:03:54 +0000 UTC FinishedAt: 2026-07-24 12:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 07:03:54 +0000 UTC FinishedAt: 2026-07-24 12:17:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 07:03:54 +0000 UTC FinishedAt: 2026-07-24 07:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 07:03:54 +0000 UTC FinishedAt: 2026-07-24 07:04:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8g7lg/series-workflow8g7lg-convert-artifact-2312364531/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 07:04:33 +0000 UTC FinishedAt: 2026-07-24 08:01:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 07:04:33 +0000 UTC FinishedAt: 2026-07-24 08:01:26 +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:*0da9382b-4d4e-4aca-a065-c06927522b22,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-workflow8g7lg/series-workflow8g7lg-convert-artifact-2312364531/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": "7d483517-62de-48e9-8a15-6d0ad203fedc", "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-workflow8g7lg/series-workflow8g7lg-build-action-3228452001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 07:04:33 +0000 UTC FinishedAt: 2026-07-24 08:01:16 +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:*0da9382b-4d4e-4aca-a065-c06927522b22,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-workflow8g7lg/series-workflow8g7lg-convert-artifact-2312364531/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": "7d483517-62de-48e9-8a15-6d0ad203fedc", "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-workflow8g7lg/series-workflow8g7lg-build-action-3228452001/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 08:01:26 +0000 UTC FinishedAt: 2026-07-24 08:01:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 08:01:26 +0000 UTC FinishedAt: 2026-07-24 08:01:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 08:01:26 +0000 UTC FinishedAt: 2026-07-24 08:01:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 08:01:26 +0000 UTC FinishedAt: 2026-07-24 08:01:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8g7lg/series-workflow8g7lg-convert-artifact-3210719210/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 08:01:46 +0000 UTC FinishedAt: 2026-07-24 08:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 08:01:46 +0000 UTC FinishedAt: 2026-07-24 08:04:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d483517-62de-48e9-8a15-6d0ad203fedc,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-workflow8g7lg/series-workflow8g7lg-build-action-3228452001/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-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 08:04:16 +0000 UTC FinishedAt: 2026-07-24 08:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 08:04:16 +0000 UTC FinishedAt: 2026-07-24 08:04:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 08:04:16 +0000 UTC FinishedAt: 2026-07-24 09:07:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 08:04:16 +0000 UTC FinishedAt: 2026-07-24 09:07:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0da9382b-4d4e-4aca-a065-c06927522b22,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-workflow8g7lg/series-workflow8g7lg-convert-artifact-3210719210/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": "d710dfc6-5979-4554-a83a-2109e474a298", "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-workflow8g7lg/series-workflow8g7lg-build-action-233137355/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Failed StartedAt: 2026-07-24 08:04:16 +0000 UTC FinishedAt: 2026-07-24 08:07:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0da9382b-4d4e-4aca-a065-c06927522b22,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-workflow8g7lg/series-workflow8g7lg-convert-artifact-3210719210/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(1) Phase: Succeeded StartedAt: 2026-07-24 08:13:55 +0000 UTC FinishedAt: 2026-07-24 09:03:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*0da9382b-4d4e-4aca-a065-c06927522b22,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-workflow8g7lg/series-workflow8g7lg-convert-artifact-3210719210/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": "d710dfc6-5979-4554-a83a-2109e474a298", "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-workflow8g7lg/series-workflow8g7lg-build-action-233137355/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 09:07:38 +0000 UTC FinishedAt: 2026-07-24 09:07:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 09:07:38 +0000 UTC FinishedAt: 2026-07-24 09:07:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 09:07:38 +0000 UTC FinishedAt: 2026-07-24 09:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 09:07:38 +0000 UTC FinishedAt: 2026-07-24 09:09:34 +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:*d710dfc6-5979-4554-a83a-2109e474a298,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-workflow8g7lg/series-workflow8g7lg-build-action-233137355/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-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 09:09:44 +0000 UTC FinishedAt: 2026-07-24 12:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 09:09:44 +0000 UTC FinishedAt: 2026-07-24 12:17:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"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:*7d483517-62de-48e9-8a15-6d0ad203fedc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d710dfc6-5979-4554-a83a-2109e474a298,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-workflow8g7lg/series-workflow8g7lg-build-action-3228452001/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-workflow8g7lg/series-workflow8g7lg-build-action-233137355/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 09:09:44 +0000 UTC FinishedAt: 2026-07-24 09:11:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 09:09:44 +0000 UTC FinishedAt: 2026-07-24 09:10:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"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-workflow8g7lg/series-workflow8g7lg-convert-artifact-1300404863/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 09:09:44 +0000 UTC FinishedAt: 2026-07-24 09:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 09:09:44 +0000 UTC FinishedAt: 2026-07-24 09:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 09:09:44 +0000 UTC FinishedAt: 2026-07-24 09:09:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 09:11:12 +0000 UTC FinishedAt: 2026-07-24 12:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8g7lg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["do_non_swap_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"34ce64d8a6eb370d963f35a161723a8833fc6cae","config_name":"upstream-apparmor-kasan.config","enable_configs":["DEVICE_PRIVATE","MIGRATION","MEMORY_FAILURE","PTE_MARKER_UFFD_WP"],"series_id":"be9e84fe-35d2-47d8-b39f-306cd3092cc9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 09:11:12 +0000 UTC FinishedAt: 2026-07-24 12:16:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7d483517-62de-48e9-8a15-6d0ad203fedc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d710dfc6-5979-4554-a83a-2109e474a298,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-workflow8g7lg/series-workflow8g7lg-build-action-3228452001/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-workflow8g7lg/series-workflow8g7lg-build-action-233137355/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-workflow8g7lg/series-workflow8g7lg-convert-artifact-1300404863/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,}