Name: series-workflow6jdh2 Phase: Succeeded StartedAt: 2026-06-30 23:54:54 +0000 UTC FinishedAt: 2026-07-01 04:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[0] Phase: Succeeded StartedAt: 2026-06-30 23:54:54 +0000 UTC FinishedAt: 2026-07-01 00:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 23:54:54 +0000 UTC FinishedAt: 2026-07-01 00:15:20 +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": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM" ], "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": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM" ], "series_id": "85ebeb18-1e25-4ed2-85f2-e11fbf9bab60" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "pagemap_pmd_range_thp", "migrate_vma_collect_huge_pmd", "change_non_present_huge_pmd", "set_pmd_migration_entry", "remove_migration_pmd", "migrate_vma_insert_huge_pmd_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+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZW1hcF9wbWRfcmFuZ2VfdGhwJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7Y2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3NldF9wbWRfbWlncmF0aW9uX2VudHJ5JiMzNDssCiAgICAmIzM0O3JlbW92ZV9taWdyYXRpb25fcG1kJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbmFtZXMgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gdG8gQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGFuZCBpbnRyb2R1Y2VzIHNvZnRsZWFmX3RvX3BtZCBhbmQgc29mdGxlYWZfZnJvbV9wbWQgdG8gaGFuZGxlIHNvZnRsZWFmIGVudHJpZXMuIEl0IGFsc28gZml4ZXMgcG90ZW50aWFsIGJ1Z3Mgd2hlcmUgc29mdGxlYWZfdG9fcGFnZSBvciBzb2Z0bGVhZl90b19mb2xpbyBpcyBjYWxsZWQgb24gZW50cmllcyB3aXRob3V0IGEgUEZOIG9yIG5vbi1kZXZpY2UtcHJpdmF0ZSBlbnRyaWVzIGluIGZzL3Byb2MvdGFza19tbXUuYyBhbmQgbW0vbWlncmF0ZV9kZXZpY2UuYy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyB0byBlbnN1cmUgbW0gaXMgb24gaW5pdF9tbS5tbWxpc3QgYmVmb3JlIGFkZGluZyBzd2FwIGVudHJpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhZmZlY3QgbWVtb3J5IG1hbmFnZW1lbnQsIFRIUCBtaWdyYXRpb24sIGFuZCBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU5ZGQxZTAwYWRmMjYwMDM0YjU4YTczZGNhNGM5YTMwOGQ0ODFiYjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDAwOjExOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjNhZmUwNjg4OTE5YmQuLjNlYjk0ZjM2Yzc3ZTg4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC0xNyw3ICYjNDM7MTcsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT04gaWYgSFVHRVRMQl9QQUdFIFx1MDAyNlx1MDAyNiBNSUdSQVRJT05cbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiBcdHNlbGVjdCBBUkNIX0hBU19DUFVfQ0FDSEVfSU5WQUxJREFURV9NRU1SRUdJT05cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCAyNzY4OWM2MmJkMjVkZC4uOTg0YmFkZmE5YTc0YWIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0xNTM0LDEwICYjNDM7MTUzNCwxMCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSlcdCgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pXG4gI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoc3dwKVx0KChwdGVfdCkgeyAoc3dwKS52YWwgfSlcbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgX19wbWRfdG9fc3dwX2VudHJ5KHBtZClcdFx0KChzd3BfZW50cnlfdCkgeyBwbWRfdmFsKHBtZCkgfSlcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApXHRcdF9fcG1kKChzd3ApLnZhbClcbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIFxuIC8qXG4gICogRW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vdCBtb3JlIHN3YXAgZmlsZXMgdGhhbiBjYW4gYmUgZW5jb2RlZCBpbiB0aGUga2VybmVsXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbmluZGV4IGQ4ZDI1MjMyNTAxNzkxLi41NTAxNDJiN2VlMTAyYSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbkBAIC0xMiw3ICYjNDM7MTIsNyBAQCBjb25maWcgTE9PTkdBUkNIXG4gXHRzZWxlY3QgQVJDSF9ORUVEU19ERUZFUl9LQVNBTlxuIFx0c2VsZWN0IEFSQ0hfRElTQUJMRV9LQVNBTl9JTkxJTkVcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuLVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdHNlbGVjdCBBUkNIX0hBU19BQ1BJX1RBQkxFX1VQR1JBREVcdGlmIEFDUElcbiBcdHNlbGVjdCBBUkNIX0hBU19DUFVfRklOQUxJWkVfSU5JVFxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbmluZGV4IGU2N2U2NGFjNmU4Y2ZjLi42ZjMwYWE4YTY0OTBlMSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuQEAgLTEwNjAsNyAmIzQzOzEwNjAsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90ICpwbWRwX3B0ZXAocG1kX3QgKnBtZClcbiAjZGVmaW5lIHBtZF9ta3NvZnRfZGlydHkocG1kKSAgcHRlX3BtZChwdGVfbWtzb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpXG4gI2RlZmluZSBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWQpIHB0ZV9wbWQocHRlX2NsZWFyX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSlcbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKVx0cHRlX3BtZChwdGVfc3dwX21rc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxuICNkZWZpbmUgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZClcdFx0cHRlX3N3cF9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSlcbiAjZGVmaW5lIHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWQpXHRwdGVfcG1kKHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGVcbmluZGV4IGJhYzAyYzgzYmIzZTRmLi40YTBmYTY4MWJmOTgxNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZVxuQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgY29uZmlnIFBQQ19USFBcbiAgICAgICAgZGVwZW5kcyBvbiBQUENfUkFESVhfTU1VIHx8IChQUENfNjRTX0hBU0hfTU1VIFx1MDAyNlx1MDAyNiBQQUdFX1NJWkVfNjRLQilcbiAgICAgICAgc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxuICAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuLSAgICAgICBzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MzsgICAgICAgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXG4gY2hvaWNlXG4gXHRwcm9tcHQgXCYjMzQ7Q1BVIHNlbGVjdGlvblwmIzM0O1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZ1xuaW5kZXggM2YwYTY0NzIxOGU0MDcuLmJmN2IyNzFjY2NkODA0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L0tjb25maWdcbkBAIC0yMiw3ICYjNDM7MjIsNyBAQCBjb25maWcgUklTQ1ZcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT04gaWYgSFVHRVRMQl9QQUdFIFx1MDAyNlx1MDAyNiBNSUdSQVRJT05cbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRyBpZiBTUEFSU0VNRU1fVk1FTU1BUFxuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcbiBcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xuIFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi4yYWE1MjllODgyZDMwNCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTk0Niw3ICYjNDM7OTQ2LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4gXHRyZXR1cm4gcHRlX3BtZChwdGVfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBzdGF0aWMgaW5saW5lIGJvb2wgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZF90IHBtZClcbiB7XG4gXHRyZXR1cm4gcHRlX3N3cF9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSk7XG5AQCAtOTYxLDcgJiM0Mzs5NjEsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuIHB0ZV9wbWQocHRlX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpO1xuIH1cbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuICNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFkgKi9cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZF9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuQEAgLTEyMDgsMTAgJiM0MzsxMjA4LDEwIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3N3cF9jbGVhcl9leGNsdXNpdmUocHRlX3QgcHRlKVxuIFx0cmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSBcdTAwMjYgfl9QQUdFX1NXUF9FWENMVVNJVkUpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgX19wbWRfdG9fc3dwX2VudHJ5KHBtZCkgKChzd3BfZW50cnlfdCkgeyBwbWRfdmFsKHBtZCkgfSlcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbClcbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIFxuIC8qXG4gICogSW4gdGhlIFJWNjQgTGludXggc2NoZW1lLCB3ZSBnaXZlIHRoZSB1c2VyIGhhbGYgb2YgdGhlIHZpcnR1YWwtYWRkcmVzcyBzcGFjZVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcbmluZGV4IDg0NDA0ZTY3NzhkNTA0Li4wNzE5ZjY4ZGUwZjM2ZiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTgyLDcgJiM0Mzs4Miw3IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgQVJDSF9DT1JSRUNUX1NUQUNLVFJBQ0VfT05fS1JFVFBST0JFXG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgU1BBUlNFTUVNXG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuLVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xuIFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9GSU5BTElaRV9JTklUXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDg1OWNlN2M3ZDQ1NDQ4Li42ZmFjY2ZhNjNiMDkzMyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC05MDMsNyAmIzQzOzkwMyw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKVxuIFx0cmV0dXJuIGNsZWFyX3BtZF9iaXQocG1kLCBfX3BncHJvdChfU0VHTUVOVF9FTlRSWV9TT0ZUX0RJUlRZKSk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gI2RlZmluZSBwbWRfc3dwX3NvZnRfZGlydHkocG1kKVx0XHRwbWRfc29mdF9kaXJ0eShwbWQpXG4gI2RlZmluZSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWQpXHRwbWRfbWtzb2Z0X2RpcnR5KHBtZClcbiAjZGVmaW5lIHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWQpXHRwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcbmluZGV4IGJkYWQ5MGYyMTBlNGJmLi41MGUwMGQ4NDE3YWFjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC03MCw3ICYjNDM7NzAsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgSFVHRVRMQl9QQUdFIFx1MDAyNlx1MDAyNiBNSUdSQVRJT05cbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRyBpZiBYODZfNjRcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMikgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcbi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVx0aWYgQUNQSVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9BVFRBQ0tfVkVDVE9SU1x0aWYgQ1BVX01JVElHQVRJT05TXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBhYzI5NWNhNmM5MmY5OS4uZTBmZDMxOGQ0MDA0ZDEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTE1NDUsNyAmIzQzOzE1NDUsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwdGVfdCBwdGUpXG4gXHRyZXR1cm4gcHRlX2NsZWFyX2ZsYWdzKHB0ZSwgX1BBR0VfU1dQX1NPRlRfRElSVFkpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKVxuIHtcbiBcdHJldHVybiBwbWRfc2V0X2ZsYWdzKHBtZCwgX1BBR0VfU1dQX1NPRlRfRElSVFkpO1xuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuaW5kZXggZDMyNDA4ZjdjZDVlZDIuLjFmYjVhY2Q4OGFkMDI0IDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0yMTI5LDcgJiM0MzsyMTI5LDggQEAgc3RhdGljIGludCBwYWdlbWFwX3BtZF9yYW5nZV90aHAocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRmbGFncyB8PSBQTV9TT0ZUX0RJUlRZO1xuIFx0XHRpZiAocG1kX3N3cF91ZmZkX3dwKHBtZCkpXG4gXHRcdFx0ZmxhZ3MgfD0gUE1fVUZGRF9XUDtcbi1cdFx0cGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuJiM0MztcdFx0aWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKVxuJiM0MztcdFx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4gXHR9XG4gXG4gXHRpZiAocGFnZSkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li4xNDg3YmY0YWYxYTdlYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuQEAgLTU2Nyw3ICYjNDM7NTY3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmdldF9wZXJzaXN0ZW50X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCh2b2lkKVxuIHtcbi1cdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OKTtcbiYjNDM7XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpO1xuIH1cbiBcbiB2b2lkIHNwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oIGIvaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcbmluZGV4IDk5MmNkOGJkOGVkMGU5Li44ODg4OGRhZWIwMThhOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaFxuQEAgLTgxLDcgJiM0Mzs4MSw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3Qgc29mdGxlYWZfdG9fcHRlKHNvZnRsZWFmX3QgZW50cnkpXG4gXHRyZXR1cm4gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gLyoqXG4gICogc29mdGxlYWZfZnJvbV9wbWQoKSAtIE9idGFpbiBhIGxlYWYgZW50cnkgZnJvbSBhIFBNRCBlbnRyeS5cbiAgKiBAcG1kOiBQTUQgZW50cnkuXG5AQCAtMTA4LDYgJiM0MzsxMDgsMjEgQEAgc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZClcbiBcdHJldHVybiBzd3BfZW50cnkoX19zd3BfdHlwZShhcmNoX2VudHJ5KSwgX19zd3Bfb2Zmc2V0KGFyY2hfZW50cnkpKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzb2Z0bGVhZl90b19wbWQoKSAtIE9idGFpbiBhIFBNRCBlbnRyeSBmcm9tIGEgbGVhZiBlbnRyeS5cbiYjNDM7ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGdlbmVyYXRlcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgUE1EIGVudHJ5IHRoYXQgY2FuIGJlIHV0aWxpc2VkIHRvXG4mIzQzOyAqIGVuY29kZSB0aGUgbWV0YWRhdGEgdGhlIGxlYWYgZW50cnkgZW5jb2Rlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNRCBlbnRyeSBlbmNvZGluZyBsZWFmIGVudHJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBwbWRfdCBzb2Z0bGVhZl90b19wbWQoc29mdGxlYWZfdCBlbnRyeSlcbiYjNDM7e1xuJiM0MztcdC8qIFRlbXBvcmFyeSB1bnRpbCBzd3BfZW50cnlfdCBlbGltaW5hdGVkLiAqL1xuJiM0MztcdHJldHVybiBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbiYjNDM7fVxuJiM0MztcbiAjZWxzZVxuIFxuIHN0YXRpYyBpbmxpbmUgc29mdGxlYWZfdCBzb2Z0bGVhZl9mcm9tX3BtZChwbWRfdCBwbWQpXG5AQCAtMTE1LDYgJiM0MzsxMzAsMTEgQEAgc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZClcbiBcdHJldHVybiBzb2Z0bGVhZl9ta19ub25lKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHBtZF90IHNvZnRsZWFmX3RvX3BtZChzb2Z0bGVhZl90IGVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcG1kKDApO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZlxuIFxuIC8qKlxuQEAgLTU2Nyw3ICYjNDM7NTg3LDcgQEAgc3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGKVxuIFxuIC8qKlxuICAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxuQEAgLTU4NiwxNCAmIzQzOzYwNiwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbiBcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcbiB9XG4gXG4tI2Vsc2UgIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2Vsc2UgIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gc3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi0jZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFIFx1MDAyNlx1MDAyNiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFIFx1MDAyNlx1MDAyNiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbiBcbiAvKipcbiAgKiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KCkgLSBEb2VzIHRoaXMgUE1EIGVudHJ5IGVuY29kZSBhIG1pZ3JhdGlvbiBlbnRyeT9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5pbmRleCBkNTJkMmE5NzZlNWEyOC4uZTM4ZjA2OWMxYzkxMDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbkBAIC0xODM5LDcgJiM0MzsxODM5LDcgQEAgc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHBncHJvdF90IG5ld3Byb3QpXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWVxuLSNpZm5kZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmbmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZF90IHBtZClcbiB7XG4gXHRyZXR1cm4gcG1kO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oIGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcbmluZGV4IDhjZmM5NjZlYWU0OGViLi43MDVhODQxNTRkMjhlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaFxuQEAgLTMyMSw3ICYjNDM7MzIxLDcgQEAgc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxuIFxuIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIGV4dGVybiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gXG5AQCAtMzM4LDcgJiM0MzszMzgsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXG4gXHRyZXR1cm4gX19zd3BfZW50cnlfdG9fcG1kKGFyY2hfZW50cnkpO1xuIH1cbiBcbi0jZWxzZSAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2Vsc2UgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuQEAgLTM1OCw3ICYjNDM7MzU4LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cmV0dXJuIF9fcG1kKDApO1xuIH1cbiBcbi0jZW5kaWYgIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG4mIzQzOyNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gI2VuZGlmIC8qIENPTkZJR19NTVUgKi9cbiAjZW5kaWYgLyogX0xJTlVYX1NXQVBPUFNfSCAqL1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uMDRmZTUxNzFiYjhjODAgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnXG5AQCAtNzAzLDcgJiM0Mzs3MDMsNyBAQCBjb25maWcgREVWSUNFX01JR1JBVElPTlxuIGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbiBcdGJvb2xcbiBcbi1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuJiM0Mztjb25maWcgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBcdGJvb2xcbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbmRpZmYgLS1naXQgYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMgYi9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcbmluZGV4IDIzZGMzZWUwOTU2MTkyLi41MDdmYmQxYWU3ZTUzNSAxMDA2NDRcbi0tLSBhL21tL2RlYnVnX3ZtX3BndGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jXG5AQCAtNzUxLDE0ICYjNDM7NzUxLDE0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRwbWRfdCBwbWQ7XG4gXG4gXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpIHx8XG4tXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pKVxuJiM0MztcdCAgICAhSVNfRU5BQkxFRChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBzd2FwIHNvZnQgZGlydHlcXG5cJiMzNDspO1xuLVx0cG1kID0gc3dwX2VudHJ5X3RvX3BtZChhcmdzLVx1MDAzZWxlYWZfZW50cnkpO1xuJiM0MztcdHBtZCA9IHNvZnRsZWFmX3RvX3BtZChhcmdzLVx1MDAzZWxlYWZfZW50cnkpO1xuIFx0V0FSTl9PTighcG1kX2lzX2h1Z2UocG1kKSk7XG4gXHRXQVJOX09OKCFwbWRfaXNfdmFsaWRfc29mdGxlYWYocG1kKSk7XG4gXG5AQCAtODE5LDcgJiM0Mzs4MTksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcHRlX3N3YXBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdFdBUk5fT04obWVtY21wKFx1MDAyNnB0ZTEsIFx1MDAyNnB0ZTIsIHNpemVvZihwdGUxKSkpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiB7XG4gXHRzd3BfZW50cnlfdCBhcmNoX2VudHJ5O1xuQEAgLTgyOSw3ICYjNDM7ODI5LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBzd2FwXFxuXCYjMzQ7KTtcbi1cdHBtZDEgPSBzd3BfZW50cnlfdG9fcG1kKGFyZ3MtXHUwMDNlbGVhZl9lbnRyeSk7XG4mIzQzO1x0cG1kMSA9IHNvZnRsZWFmX3RvX3BtZChhcmdzLVx1MDAzZWxlYWZfZW50cnkpO1xuIFx0V0FSTl9PTighcG1kX2lzX2h1Z2UocG1kMSkpO1xuIFx0V0FSTl9PTighcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKHBtZDEpKTtcbiBcbkBAIC04MzcsOSAmIzQzOzgzNyw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdHBtZDIgPSBfX3N3cF9lbnRyeV90b19wbWQoYXJjaF9lbnRyeSk7XG4gXHRXQVJOX09OKG1lbWNtcChcdTAwMjZwbWQxLCBcdTAwMjZwbWQyLCBzaXplb2YocG1kMSkpKTtcbiB9XG4tI2Vsc2UgIC8qICFDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuJiM0MzsjZWxzZSAgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG4tI2VuZGlmIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgc3dhcF9taWdyYXRpb25fdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xuaW5kZXggYzcyYzlkZGZkYjJmNjIuLjRmM2Y2MjdkMmI0NzcyIDEwMDY0NFxuLS0tIGEvbW0vaG1tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2htbS5jXG5AQCAtMzMxLDcgJiM0MzszMzEsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqaG1tX3BmbnMsXG4gXHRcdFx0XHQgICAgIHBtZF90IHBtZClcbkBAIC0zOTEsNyAmIzQzOzM5MSw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRyZXR1cm4gaG1tX3BmbnNfZmlsbChzdGFydCwgZW5kLCByYW5nZSwgSE1NX1BGTl9FUlJPUik7XG4gfVxuLSNlbmRpZiAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2VuZGlmICAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbiBcbiBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wbWQocG1kX3QgKnBtZHAsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi40YjZlNDQxYWU5MzFlYyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbiBcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpIHx8XG4gXHQgICAgc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KSkge1xuIFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdFx0cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XG4mIzQzO1x0XHRwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xuIFx0XHRpZiAocG1kX3N3cF9zb2Z0X2RpcnR5KCpzcmNfcG1kKSlcbiBcdFx0XHRwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWQpO1xuIFx0XHRpZiAocG1kX3N3cF91ZmZkX3dwKCpzcmNfcG1kKSlcbkBAIC0xODMyLDcgJiM0MzsxODMyLDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbiBcdFx0ICovXG4gXHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbiBcdFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xuLVx0XHRcdHBtZCA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpO1xuJiM0MztcdFx0XHRwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xuIFxuIFx0XHRcdGlmIChwbWRfc3dwX3NvZnRfZGlydHkoKnNyY19wbWQpKVxuIFx0XHRcdFx0cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKTtcbkBAIC0yNTU3LDExICYjNDM7MjU1NywxMiBAQCBzdGF0aWMgdm9pZCBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdGJvb2wgdWZmZF93cF9yZXNvbHZlKVxuIHtcbiBcdHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZCgqcG1kKTtcbi1cdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XG4gXHRwbWRfdCBuZXdwbWQ7XG4gXG4gXHRWTV9XQVJOX09OKCFwbWRfaXNfdmFsaWRfc29mdGxlYWYoKnBtZCkpO1xuIFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBBIHByb3RlY3Rpb24gY2hlY2sgaXMgZGlmZmljdWx0IHNvXG4gXHRcdCAqIGp1c3QgYmUgc2FmZSBhbmQgZGlzYWJsZSB3cml0ZVxuQEAgLTI1NzAsMTIgJiM0MzsyNTcxLDEyIEBAIHN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZXhjbHVzaXZlX21pZ3JhdGlvbl9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdFx0bmV3cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XG4mIzQzO1x0XHRuZXdwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xuIFx0XHRpZiAocG1kX3N3cF9zb2Z0X2RpcnR5KCpwbWQpKVxuIFx0XHRcdG5ld3BtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KG5ld3BtZCk7XG4gXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xuIFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xuLVx0XHRuZXdwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbiYjNDM7XHRcdG5ld3BtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XG4gXHRcdGlmIChwbWRfc3dwX3VmZmRfd3AoKnBtZCkpXG4gXHRcdFx0bmV3cG1kID0gcG1kX3N3cF9ta3VmZmRfd3AobmV3cG1kKTtcbiBcdH0gZWxzZSB7XG5AQCAtNDg2Myw3ICYjNDM7NDg2NCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyh2b2lkKVxuIGxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcbiAjZW5kaWZcbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbkBAIC00OTIzLDcgJiM0Mzs0OTI0LDcgQEAgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiBcdH1cbiBcbiBcdC8qIFNldCBQTUQuICovXG4tXHRwbWRzd3AgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbiYjNDM7XHRwbWRzd3AgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xuIFx0aWYgKHNvZnRkaXJ0eSlcbiBcdFx0cG1kc3dwID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kc3dwKTtcbiBcdGlmICh1ZmZkX3dwKVxuQEAgLTQ5NzYsNyAmIzQzOzQ5NzcsNyBAQCB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcbiBcdFx0ZWxzZVxuIFx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShcbiBcdFx0XHRcdFx0XHRcdHBhZ2VfdG9fcGZuKG5ldykpO1xuLVx0XHRwbWRlID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XG4mIzQzO1x0XHRwbWRlID0gc29mdGxlYWZfdG9fcG1kKGVudHJ5KTtcbiBcbiBcdFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcHZtdy1cdTAwM2VwbWQpKVxuIFx0XHRcdHBtZGUgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWRlKTtcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggOGUwZGYzZDFjNmY5ODAuLjBlM2RiOTQ1MWU1Yzc4IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTE5NTYsNCAmIzQzOzE5NTYsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpXG4gYm9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxuIFx0XHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEVuc3VyZSBAbW0gaXMgb24gdGhlIGluaXRfbW0ubW1saXN0IHNvIHN3YXBvZmYgY2FuIGZpbmQgaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbW1saXN0KSkge1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbiYjNDM7XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZW1tbGlzdCkpXG4mIzQzO1x0XHRcdGxpc3RfYWRkKFx1MDAyNm1tLVx1MDAzZW1tbGlzdCwgXHUwMDI2aW5pdF9tbS5tbWxpc3QpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW1saXN0X2xvY2spO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGEzZmNhZjhjZmU4ZjhiLi42NjM3YzViMTNjOWJhYyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTk1MywxNCAmIzQzOzk1Myw3IEBAIGNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4gXHRcdGlmIChzd2FwX2R1cF9lbnRyeV9kaXJlY3QoZW50cnkpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuLVx0XHQvKiBtYWtlIHN1cmUgZHN0X21tIGlzIG9uIHN3YXBvZmYmIzM5O3MgbW1saXN0LiAqL1xuLVx0XHRpZiAodW5saWtlbHkobGlzdF9lbXB0eShcdTAwMjZkc3RfbW0tXHUwMDNlbW1saXN0KSkpIHtcbi1cdFx0XHRzcGluX2xvY2soXHUwMDI2bW1saXN0X2xvY2spO1xuLVx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmRzdF9tbS1cdTAwM2VtbWxpc3QpKVxuLVx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2ZHN0X21tLVx1MDAzZW1tbGlzdCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZzcmNfbW0tXHUwMDNlbW1saXN0KTtcbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZtbWxpc3RfbG9jayk7XG4tXHRcdH1cbiYjNDM7XHRcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhkc3RfbW0pO1xuIFx0XHQvKiBNYXJrIHRoZSBzd2FwIGVudHJ5IGFzIHNoYXJlZC4gKi9cbiBcdFx0aWYgKHB0ZV9zd3BfZXhjbHVzaXZlKG9yaWdfcHRlKSkge1xuIFx0XHRcdHB0ZSA9IHB0ZV9zd3BfY2xlYXJfZXhjbHVzaXZlKG9yaWdfcHRlKTtcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDQ5ZTEwZmVlYjA5NGYwLi5jNDhkYzUxMjdlNmFhOSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMzYyLDcgJiM0MzszNjIsNyBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcHZtdy5hZGRyZXNzKSAtIHB2bXcucGdvZmY7XG4gXHRcdG5ldyA9IGZvbGlvX3BhZ2UoZm9saW8sIGlkeCk7XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBcdFx0LyogUE1ELW1hcHBlZCBUSFAgbWlncmF0aW9uIGVudHJ5ICovXG4gXHRcdGlmICghcHZtdy5wdGUpIHtcbiBcdFx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSB8fFxuQEAgLTU0NSw3ICYjNDM7NTQ1LDcgQEAgdm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdF9odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBcbiB9XG4gI2VuZGlmXG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbiB7XG4gXHRzcGlubG9ja190ICpwdGw7XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbmluZGV4IGFlMzkxNzNkNmEwZThhLi4yZjhiNjQ2MzAyYzI1MSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbkBAIC0xNjYsMTEgJiM0MzsxNjYsMTQgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQoKnBtZHApKSB7XG4gXHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZCgqcG1kcCk7XG4gXG4tXHRcdGZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xuLVxuIFx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxuLVx0XHRcdCEobWlncmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSB8fFxuLVx0XHRcdChmb2xpby1cdTAwM2VwZ21hcC1cdTAwM2Vvd25lciAhPSBtaWdyYXRlLVx1MDAzZXBnbWFwX293bmVyKSkge1xuJiM0MztcdFx0ICAgICEobWlncmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSkge1xuJiM0MztcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuJiM0MztcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xuJiM0MztcdFx0aWYgKGZvbGlvLVx1MDAzZXBnbWFwLVx1MDAzZW93bmVyICE9IG1pZ3JhdGUtXHUwMDNlcGdtYXBfb3duZXIpIHtcbiBcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIFx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG4gXHRcdH1cbkBAIC03NjgsNyAmIzQzOzc3MSw3IEBAIGludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG4gfVxuIEVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gLyoqXG4gICogbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2U6IEluc2VydCBhIGh1Z2UgZm9saW8gaW50byBAbWlncmF0ZS1cdTAwM2V2bWEtXHUwMDNldm1fbW1cbiAgKiBhdCBAYWRkci4gZm9saW8gaXMgYWxyZWFkeSBhbGxvY2F0ZWQgYXMgYSBwYXJ0IG9mIHRoZSBtaWdyYXRpb24gcHJvY2VzcyB3aXRoXG5AQCAtODM1LDcgJiM0Mzs4MzgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbiBcdFx0ZWxzZVxuIFx0XHRcdHN3cF9lbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoXG4gXHRcdFx0XHRcdFx0cGFnZV90b19wZm4ocGFnZSkpO1xuLVx0XHRlbnRyeSA9IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5KTtcbiYjNDM7XHRcdGVudHJ5ID0gc29mdGxlYWZfdG9fcG1kKHN3cF9lbnRyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIWZvbGlvX2lzX2RldmljZV9jb2hlcmVudChmb2xpbykpIHtcbkBAIC05MjMsNyAmIzQzOzkyNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuIFx0XHRtaWdyYXRlLVx1MDAzZXNyY1tpJiM0MztpZHhdID0gbWlncmF0ZV9wZm4ocGZuICYjNDM7IGkpIHwgZmxhZ3M7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbi0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2Vsc2UgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0XHQgc3RydWN0IHBhZ2UgKnBhZ2UsXG5AQCAtOTQ0LDcgJiM0Mzs5NDcsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX3ZtYV9ucl9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuciA9IDE7XG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBcdGlmICgqc3JjIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORClcbiBcdFx0bnIgPSBIUEFHRV9QTURfTlI7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDFjNzdkNWRjMDZlOWZhLi4wZmI3YTFiODJjZjNjMiAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jXG5AQCAtMjMwNCwxMiAmIzQzOzIzMDQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG4gXHRcdFx0XHRnb3RvIHdhbGtfYWJvcnQ7XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZW1tbGlzdCkpIHtcbi1cdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZtbWxpc3RfbG9jayk7XG4tXHRcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZtbS1cdTAwM2VtbWxpc3QpKVxuLVx0XHRcdFx0XHRsaXN0X2FkZChcdTAwMjZtbS1cdTAwM2VtbWxpc3QsIFx1MDAyNmluaXRfbW0ubW1saXN0KTtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbi1cdFx0XHR9XG4mIzQzO1x0XHRcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7XG4gXHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUyk7XG4gXHRcdFx0aW5jX21tX2NvdW50ZXIobW0sIE1NX1NXQVBFTlRTKTtcbiBcdFx0XHRzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XG5AQCAtMjQ3Nyw3ICYjNDM7MjQ3Miw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXHUwMDI2cHZtdyk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBcdFx0XHRwbWR2YWwgPSBwbWRwX2dldChwdm13LnBtZCk7XG4gXHRcdFx0aWYgKGxpa2VseShwbWRfcHJlc2VudChwbWR2YWwpKSlcbiBcdFx0XHRcdHBmbiA9IHBtZF9wZm4ocG1kdmFsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtURVNUX0hNTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VtYXBfcG1kX3JhbmdlX3RocCYjMzQ7LAogICAgJiMzNDttaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O2NoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDtzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeSYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWlncmF0aW9uX3BtZCYjMzQ7LAogICAgJiMzNDttaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW5hbWVzIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIHRvIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBhbmQgaW50cm9kdWNlcyBzb2Z0bGVhZl90b19wbWQgYW5kIHNvZnRsZWFmX2Zyb21fcG1kIHRvIGhhbmRsZSBzb2Z0bGVhZiBlbnRyaWVzLiBJdCBhbHNvIGZpeGVzIHBvdGVudGlhbCBidWdzIHdoZXJlIHNvZnRsZWFmX3RvX3BhZ2Ugb3Igc29mdGxlYWZfdG9fZm9saW8gaXMgY2FsbGVkIG9uIGVudHJpZXMgd2l0aG91dCBhIFBGTiBvciBub24tZGV2aWNlLXByaXZhdGUgZW50cmllcyBpbiBmcy9wcm9jL3Rhc2tfbW11LmMgYW5kIG1tL21pZ3JhdGVfZGV2aWNlLmMuIEl0IGFsc28gaW50cm9kdWNlcyBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMgdG8gZW5zdXJlIG1tIGlzIG9uIGluaXRfbW0ubW1saXN0IGJlZm9yZSBhZGRpbmcgc3dhcCBlbnRyaWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYWZmZWN0IG1lbW9yeSBtYW5hZ2VtZW50LCBUSFAgbWlncmF0aW9uLCBhbmQgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU5ZGQxZTAwYWRmMjYwMDM0YjU4YTczZGNhNGM5YTMwOGQ0ODFiYjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDAwOjExOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGIzYWZlMDY4ODkxOWJkLi4zZWI5NGYzNmM3N2U4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMTcsNyAmIzQzOzE3LDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTiBpZiBIVUdFVExCX1BBR0UgJmFtcDsmYW1wOyBNSUdSQVRJT04KIAlzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKIAlzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyAmZ3Q7IDIKLQlzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAlzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFCiAJc2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNCiAJc2VsZWN0IEFSQ0hfSEFTX0NQVV9DQUNIRV9JTlZBTElEQVRFX01FTVJFR0lPTgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAyNzY4OWM2MmJkMjVkZC4uOTg0YmFkZmE5YTc0YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xNTM0LDEwICYjNDM7MTUzNCwxMCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoc3dwKQkoKHB0ZV90KSB7IChzd3ApLnZhbCB9KQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAjZGVmaW5lIF9fcG1kX3RvX3N3cF9lbnRyeShwbWQpCQkoKHN3cF9lbnRyeV90KSB7IHBtZF92YWwocG1kKSB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wbWQoc3dwKQkJX19wbWQoKHN3cCkudmFsKQotI2VuZGlmIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovCiYjNDM7I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqLwogCiAvKgogICogRW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vdCBtb3JlIHN3YXAgZmlsZXMgdGhhbiBjYW4gYmUgZW5jb2RlZCBpbiB0aGUga2VybmVsCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwppbmRleCBkOGQyNTIzMjUwMTc5MS4uNTUwMTQyYjdlZTEwMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwpAQCAtMTIsNyAmIzQzOzEyLDcgQEAgY29uZmlnIExPT05HQVJDSAogCXNlbGVjdCBBUkNIX05FRURTX0RFRkVSX0tBU0FOCiAJc2VsZWN0IEFSQ0hfRElTQUJMRV9LQVNBTl9JTkxJTkUKIAlzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKLQlzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAlzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFCWlmIEFDUEkKIAlzZWxlY3QgQVJDSF9IQVNfQ1BVX0ZJTkFMSVpFX0lOSVQKIAlzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oCmluZGV4IGU2N2U2NGFjNmU4Y2ZjLi42ZjMwYWE4YTY0OTBlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKQEAgLTEwNjAsNyAmIzQzOzEwNjAsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90ICpwbWRwX3B0ZXAocG1kX3QgKnBtZCkKICNkZWZpbmUgcG1kX21rc29mdF9kaXJ0eShwbWQpICBwdGVfcG1kKHB0ZV9ta3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSkKICNkZWZpbmUgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kKSBwdGVfcG1kKHB0ZV9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKICNkZWZpbmUgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKQlwdGVfcG1kKHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpCiAjZGVmaW5lIHBtZF9zd3Bfc29mdF9kaXJ0eShwbWQpCQlwdGVfc3dwX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKQogI2RlZmluZSBwbWRfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kKQlwdGVfcG1kKHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQppbmRleCBiYWMwMmM4M2JiM2U0Zi4uNGEwZmE2ODFiZjk4MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCkBAIC0xMTIsNyAmIzQzOzExMiw3IEBAIGNvbmZpZyBQUENfVEhQCiAgICAgICAgZGVwZW5kcyBvbiBQUENfUkFESVhfTU1VIHx8IChQUENfNjRTX0hBU0hfTU1VICZhbXA7JmFtcDsgUEFHRV9TSVpFXzY0S0IpCiAgICAgICAgc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRQogICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVECi0gICAgICAgc2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsgICAgICAgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFCiAKIGNob2ljZQogCXByb21wdCAmIzM0O0NQVSBzZWxlY3Rpb24mIzM0OwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnCmluZGV4IDNmMGE2NDcyMThlNDA3Li5iZjdiMjcxY2NjZDgwNCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvS2NvbmZpZwpAQCAtMjIsNyAmIzQzOzIyLDcgQEAgY29uZmlnIFJJU0NWCiAJc2VsZWN0IEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTiBpZiBIVUdFVExCX1BBR0UgJmFtcDsmYW1wOyBNSUdSQVRJT04KIAlzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgU1BBUlNFTUVNX1ZNRU1NQVAKIAlzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyAmZ3Q7IDIKLQlzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAlzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVQKIAlzZWxlY3QgQVJDSF9IQVNfQ0NfQ0FOX0xJTksKIAlzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDVkNTc1NmJkYTgyZTNkLi4yYWE1MjllODgyZDMwNCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTk0Niw3ICYjNDM7OTQ2LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpCiAJcmV0dXJuIHB0ZV9wbWQocHRlX2NsZWFyX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfc3dwX3NvZnRfZGlydHkocG1kX3QgcG1kKQogewogCXJldHVybiBwdGVfc3dwX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKTsKQEAgLTk2MSw3ICYjNDM7OTYxLDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKQogewogCXJldHVybiBwdGVfcG1kKHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi8KICNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFkgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWRfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKQEAgLTEyMDgsMTAgJiM0MzsxMjA4LDEwIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3N3cF9jbGVhcl9leGNsdXNpdmUocHRlX3QgcHRlKQogCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJmFtcDsgfl9QQUdFX1NXUF9FWENMVVNJVkUpOwogfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAjZGVmaW5lIF9fcG1kX3RvX3N3cF9lbnRyeShwbWQpICgoc3dwX2VudHJ5X3QpIHsgcG1kX3ZhbChwbWQpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbCkKLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi8KIAogLyoKICAqIEluIHRoZSBSVjY0IExpbnV4IHNjaGVtZSwgd2UgZ2l2ZSB0aGUgdXNlciBoYWxmIG9mIHRoZSB2aXJ0dWFsLWFkZHJlc3Mgc3BhY2UKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggODQ0MDRlNjc3OGQ1MDQuLjA3MTlmNjhkZTBmMzZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtODIsNyAmIzQzOzgyLDcgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9DT1JSRUNUX1NUQUNLVFJBQ0VfT05fS1JFVFBST0JFCiAJc2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHIGlmIFNQQVJTRU1FTQogCXNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTICZndDsgMgotCXNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7CXNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRQogCXNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOSwogCXNlbGVjdCBBUkNIX0hBU19DUFVfRklOQUxJWkVfSU5JVAogCXNlbGVjdCBBUkNIX0hBU19DVVJSRU5UX1NUQUNLX1BPSU5URVIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDg1OWNlN2M3ZDQ1NDQ4Li42ZmFjY2ZhNjNiMDkzMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC05MDMsNyAmIzQzOzkwMyw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKQogCXJldHVybiBjbGVhcl9wbWRfYml0KHBtZCwgX19wZ3Byb3QoX1NFR01FTlRfRU5UUllfU09GVF9ESVJUWSkpOwogfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAjZGVmaW5lIHBtZF9zd3Bfc29mdF9kaXJ0eShwbWQpCQlwbWRfc29mdF9kaXJ0eShwbWQpCiAjZGVmaW5lIHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZCkJcG1kX21rc29mdF9kaXJ0eShwbWQpCiAjZGVmaW5lIHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWQpCXBtZF9jbGVhcl9zb2Z0X2RpcnR5KHBtZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGJkYWQ5MGYyMTBlNGJmLi41MGUwMGQ4NDE3YWFjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC03MCw3ICYjNDM7NzAsNyBAQCBjb25maWcgWDg2CiAJc2VsZWN0IEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTiBpZiBYODZfNjQgJmFtcDsmYW1wOyBIVUdFVExCX1BBR0UgJmFtcDsmYW1wOyBNSUdSQVRJT04KIAlzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgWDg2XzY0CiAJc2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgKFBHVEFCTEVfTEVWRUxTICZndDsgMikgJmFtcDsmYW1wOyAoWDg2XzY0IHx8IFg4Nl9QQUUpCi0Jc2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgWDg2XzY0ICZhbXA7JmFtcDsgVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFg4Nl82NCAmYW1wOyZhbXA7IFRSQU5TUEFSRU5UX0hVR0VQQUdFCiAJc2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERQlpZiBBQ1BJCiAJc2VsZWN0IEFSQ0hfSEFTX0NQVV9BVFRBQ0tfVkVDVE9SUwlpZiBDUFVfTUlUSUdBVElPTlMKIAlzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYWMyOTVjYTZjOTJmOTkuLmUwZmQzMThkNDAwNGQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xNTQ1LDcgJiM0MzsxNTQ1LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc3dwX2NsZWFyX3NvZnRfZGlydHkocHRlX3QgcHRlKQogCXJldHVybiBwdGVfY2xlYXJfZmxhZ3MocHRlLCBfUEFHRV9TV1BfU09GVF9ESVJUWSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKQogewogCXJldHVybiBwbWRfc2V0X2ZsYWdzKHBtZCwgX1BBR0VfU1dQX1NPRlRfRElSVFkpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi4xZmI1YWNkODhhZDAyNCAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvdGFza19tbXUuYwpAQCAtMjEyOSw3ICYjNDM7MjEyOSw4IEBAIHN0YXRpYyBpbnQgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQlmbGFncyB8PSBQTV9TT0ZUX0RJUlRZOwogCQlpZiAocG1kX3N3cF91ZmZkX3dwKHBtZCkpCiAJCQlmbGFncyB8PSBQTV9VRkZEX1dQOwotCQlwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7CiYjNDM7CQlpZiAoc29mdGxlYWZfaGFzX3BmbihlbnRyeSkpCiYjNDM7CQkJcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpOwogCX0KIAogCWlmIChwYWdlKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li4xNDg3YmY0YWYxYTdlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKQEAgLTU2Nyw3ICYjNDM7NTY3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmdldF9wZXJzaXN0ZW50X2h1Z2VfemVyb19mb2xpbyh2b2lkKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQodm9pZCkKIHsKLQlyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTik7CiYjNDM7CXJldHVybiBJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRik7CiB9CiAKIHZvaWQgc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCBiL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oCmluZGV4IDk5MmNkOGJkOGVkMGU5Li44ODg4OGRhZWIwMThhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWFmb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sZWFmb3BzLmgKQEAgLTgxLDcgJiM0Mzs4MSw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3Qgc29mdGxlYWZfdG9fcHRlKHNvZnRsZWFmX3QgZW50cnkpCiAJcmV0dXJuIHN3cF9lbnRyeV90b19wdGUoZW50cnkpOwogfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAvKioKICAqIHNvZnRsZWFmX2Zyb21fcG1kKCkgLSBPYnRhaW4gYSBsZWFmIGVudHJ5IGZyb20gYSBQTUQgZW50cnkuCiAgKiBAcG1kOiBQTUQgZW50cnkuCkBAIC0xMDgsNiAmIzQzOzEwOCwyMSBAQCBzdGF0aWMgaW5saW5lIHNvZnRsZWFmX3Qgc29mdGxlYWZfZnJvbV9wbWQocG1kX3QgcG1kKQogCXJldHVybiBzd3BfZW50cnkoX19zd3BfdHlwZShhcmNoX2VudHJ5KSwgX19zd3Bfb2Zmc2V0KGFyY2hfZW50cnkpKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNvZnRsZWFmX3RvX3BtZCgpIC0gT2J0YWluIGEgUE1EIGVudHJ5IGZyb20gYSBsZWFmIGVudHJ5LgomIzQzOyAqIEBlbnRyeTogTGVhZiBlbnRyeS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZ2VuZXJhdGVzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBQTUQgZW50cnkgdGhhdCBjYW4gYmUgdXRpbGlzZWQgdG8KJiM0MzsgKiBlbmNvZGUgdGhlIG1ldGFkYXRhIHRoZSBsZWFmIGVudHJ5IGVuY29kZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgUE1EIGVudHJ5IGVuY29kaW5nIGxlYWYgZW50cnkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBwbWRfdCBzb2Z0bGVhZl90b19wbWQoc29mdGxlYWZfdCBlbnRyeSkKJiM0Mzt7CiYjNDM7CS8qIFRlbXBvcmFyeSB1bnRpbCBzd3BfZW50cnlfdCBlbGltaW5hdGVkLiAqLwomIzQzOwlyZXR1cm4gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7CiYjNDM7fQomIzQzOwogI2Vsc2UKIAogc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZCkKQEAgLTExNSw2ICYjNDM7MTMwLDExIEBAIHN0YXRpYyBpbmxpbmUgc29mdGxlYWZfdCBzb2Z0bGVhZl9mcm9tX3BtZChwbWRfdCBwbWQpCiAJcmV0dXJuIHNvZnRsZWFmX21rX25vbmUoKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgcG1kX3Qgc29mdGxlYWZfdG9fcG1kKHNvZnRsZWFmX3QgZW50cnkpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19wbWQoMCk7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKIC8qKgpAQCAtNTY3LDcgJiM0Mzs1ODcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OKQomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRikKIAogLyoqCiAgKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXAKQEAgLTU4NiwxNCAmIzQzOzYwNiwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZCkKIAlyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7CiB9CiAKLSNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgJmFtcDsmYW1wOyBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwomIzQzOyNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgJmFtcDsmYW1wOyBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi8KIAogc3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQogCi0jZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFICZhbXA7JmFtcDsgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi8KJiM0MzsjZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFICZhbXA7JmFtcDsgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovCiAKIC8qKgogICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCmluZGV4IGQ1MmQyYTk3NmU1YTI4Li5lMzhmMDY5YzFjOTEwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKQEAgLTE4MzksNyAmIzQzOzE4MzksNyBAQCBzdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgcGdwcm90X3QgbmV3cHJvdCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TT0ZUX0RJUlRZCi0jaWZuZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OCiYjNDM7I2lmbmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKQogewogCXJldHVybiBwbWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaCBiL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oCmluZGV4IDhjZmM5NjZlYWU0OGViLi43MDVhODQxNTRkMjhlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgKQEAgLTMyMSw3ICYjNDM7MzIxLDcgQEAgc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKQogCiBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGs7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIGV4dGVybiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKQEAgLTMzOCw3ICYjNDM7MzM4LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KQogCXJldHVybiBfX3N3cF9lbnRyeV90b19wbWQoYXJjaF9lbnRyeSk7CiB9CiAKLSNlbHNlICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwomIzQzOyNlbHNlICAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywKIAkJc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC0zNTgsNyAmIzQzOzM1OCw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSkKIAlyZXR1cm4gX19wbWQoMCk7CiB9CiAKLSNlbmRpZiAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi8KJiM0MzsjZW5kaWYgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqLwogCiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwogI2VuZGlmIC8qIF9MSU5VWF9TV0FQT1BTX0ggKi8KZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDllMGNhNDgyNDkwNTRmLi4wNGZlNTE3MWJiOGM4MCAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnCkBAIC03MDMsNyAmIzQzOzcwMyw3IEBAIGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OCiBjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OCiAJYm9vbAogCi1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzO2NvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRgogCWJvb2wKIAogY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFCmRpZmYgLS1naXQgYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMgYi9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMKaW5kZXggMjNkYzNlZTA5NTYxOTIuLjUwN2ZiZDFhZTdlNTM1IDEwMDY0NAotLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jCkBAIC03NTEsMTQgJiM0Mzs3NTEsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwbWRfdCBwbWQ7CiAKIAlpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpIHx8Ci0JICAgICFJU19FTkFCTEVEKENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OKSkKJiM0MzsJICAgICFJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRikpCiAJCXJldHVybjsKIAogCWlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCiAJCXJldHVybjsKIAogCXByX2RlYnVnKCYjMzQ7VmFsaWRhdGluZyBQTUQgc3dhcCBzb2Z0IGRpcnR5XG4mIzM0Oyk7Ci0JcG1kID0gc3dwX2VudHJ5X3RvX3BtZChhcmdzLSZndDtsZWFmX2VudHJ5KTsKJiM0MzsJcG1kID0gc29mdGxlYWZfdG9fcG1kKGFyZ3MtJmd0O2xlYWZfZW50cnkpOwogCVdBUk5fT04oIXBtZF9pc19odWdlKHBtZCkpOwogCVdBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZihwbWQpKTsKIApAQCAtODE5LDcgJiM0Mzs4MTksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcHRlX3N3YXBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlXQVJOX09OKG1lbWNtcCgmYW1wO3B0ZTEsICZhbXA7cHRlMiwgc2l6ZW9mKHB0ZTEpKSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIHsKIAlzd3BfZW50cnlfdCBhcmNoX2VudHJ5OwpAQCAtODI5LDcgJiM0Mzs4MjksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpCiAJCXJldHVybjsKIAogCXByX2RlYnVnKCYjMzQ7VmFsaWRhdGluZyBQTUQgc3dhcFxuJiMzNDspOwotCXBtZDEgPSBzd3BfZW50cnlfdG9fcG1kKGFyZ3MtJmd0O2xlYWZfZW50cnkpOwomIzQzOwlwbWQxID0gc29mdGxlYWZfdG9fcG1kKGFyZ3MtJmd0O2xlYWZfZW50cnkpOwogCVdBUk5fT04oIXBtZF9pc19odWdlKHBtZDEpKTsKIAlXQVJOX09OKCFwbWRfaXNfdmFsaWRfc29mdGxlYWYocG1kMSkpOwogCkBAIC04MzcsOSAmIzQzOzgzNyw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwbWQyID0gX19zd3BfZW50cnlfdG9fcG1kKGFyY2hfZW50cnkpOwogCVdBUk5fT04obWVtY21wKCZhbXA7cG1kMSwgJmFtcDtwbWQyLCBzaXplb2YocG1kMSkpKTsKIH0KLSNlbHNlICAvKiAhQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi8KJiM0MzsjZWxzZSAgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqLwogc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH0KLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi8KIAogc3RhdGljIHZvaWQgX19pbml0IHN3YXBfbWlncmF0aW9uX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpCiB7CmRpZmYgLS1naXQgYS9tbS9obW0uYyBiL21tL2htbS5jCmluZGV4IGM3MmM5ZGRmZGIyZjYyLi40ZjNmNjI3ZDJiNDc3MiAxMDA2NDQKLS0tIGEvbW0vaG1tLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaG1tLmMKQEAgLTMzMSw3ICYjNDM7MzMxLDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIH0KIAotI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRgogc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgKmhtbV9wZm5zLAogCQkJCSAgICAgcG1kX3QgcG1kKQpAQCAtMzkxLDcgJiM0MzszOTEsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiBobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTsKIH0KLSNlbmRpZiAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi8KJiM0MzsjZW5kaWYgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqLwogCiBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wbWQocG1kX3QgKnBtZHAsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDJiY2NiMGE1M2EwYTYwLi40YjZlNDQxYWU5MzFlYyAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZCgKIAlpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSB8fAogCSAgICBzb2Z0bGVhZl9pc19taWdyYXRpb25fcmVhZF9leGNsdXNpdmUoZW50cnkpKSB7CiAJCWVudHJ5ID0gbWFrZV9yZWFkYWJsZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpOwotCQlwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTsKJiM0MzsJCXBtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7CiAJCWlmIChwbWRfc3dwX3NvZnRfZGlydHkoKnNyY19wbWQpKQogCQkJcG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKTsKIAkJaWYgKHBtZF9zd3BfdWZmZF93cCgqc3JjX3BtZCkpCkBAIC0xODMyLDcgJiM0MzsxODMyLDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZCgKIAkJICovCiAJCWlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHsKIAkJCWVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7Ci0JCQlwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTsKJiM0MzsJCQlwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpOwogCiAJCQlpZiAocG1kX3N3cF9zb2Z0X2RpcnR5KCpzcmNfcG1kKSkKIAkJCQlwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWQpOwpAQCAtMjU1NywxMSAmIzQzOzI1NTcsMTIgQEAgc3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQlib29sIHVmZmRfd3BfcmVzb2x2ZSkKIHsKIAlzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQoKnBtZCk7Ci0JY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTsKIAlwbWRfdCBuZXdwbWQ7CiAKIAlWTV9XQVJOX09OKCFwbWRfaXNfdmFsaWRfc29mdGxlYWYoKnBtZCkpOwogCWlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpOwomIzQzOwogCQkvKgogCQkgKiBBIHByb3RlY3Rpb24gY2hlY2sgaXMgZGlmZmljdWx0IHNvCiAJCSAqIGp1c3QgYmUgc2FmZSBhbmQgZGlzYWJsZSB3cml0ZQpAQCAtMjU3MCwxMiAmIzQzOzI1NzEsMTIgQEAgc3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJZW50cnkgPSBtYWtlX3JlYWRhYmxlX2V4Y2x1c2l2ZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpOwogCQllbHNlCiAJCQllbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTsKLQkJbmV3cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7CiYjNDM7CQluZXdwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpOwogCQlpZiAocG1kX3N3cF9zb2Z0X2RpcnR5KCpwbWQpKQogCQkJbmV3cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkobmV3cG1kKTsKIAl9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkgewogCQllbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpOwotCQluZXdwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTsKJiM0MzsJCW5ld3BtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7CiAJCWlmIChwbWRfc3dwX3VmZmRfd3AoKnBtZCkpCiAJCQluZXdwbWQgPSBwbWRfc3dwX21rdWZmZF93cChuZXdwbWQpOwogCX0gZWxzZSB7CkBAIC00ODYzLDcgJiM0Mzs0ODY0LDcgQEAgc3RhdGljIGludCBfX2luaXQgc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKHZvaWQpCiBsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRgogaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywKIAkJc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC00OTIzLDcgJiM0Mzs0OTI0LDcgQEAgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywKIAl9CiAKIAkvKiBTZXQgUE1ELiAqLwotCXBtZHN3cCA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpOwomIzQzOwlwbWRzd3AgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpOwogCWlmIChzb2Z0ZGlydHkpCiAJCXBtZHN3cCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZHN3cCk7CiAJaWYgKHVmZmRfd3ApCkBAIC00OTc2LDcgJiM0Mzs0OTc3LDcgQEAgdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpCiAJCWVsc2UKIAkJCWVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeSgKIAkJCQkJCQlwYWdlX3RvX3BmbihuZXcpKTsKLQkJcG1kZSA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpOwomIzQzOwkJcG1kZSA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7CiAKIAkJaWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcHZtdy0mZ3Q7cG1kKSkKIAkJCXBtZGUgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWRlKTsKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDhlMGRmM2QxYzZmOTgwLi4wZTNkYjk0NTFlNWM3OCAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0xOTU2LDQgJiM0MzsxOTU2LDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldF9zeXNjdGxfbWF4X21hcF9jb3VudCh2b2lkKQogYm9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLAogCQkgICB1bnNpZ25lZCBsb25nIG5wYWdlcyk7CiAKJiM0MzsvKgomIzQzOyAqIEVuc3VyZSBAbW0gaXMgb24gdGhlIGluaXRfbW0ubW1saXN0IHNvIHN3YXBvZmYgY2FuIGZpbmQgaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7bW0tJmd0O21tbGlzdCkpIHsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO21tbGlzdF9sb2NrKTsKJiM0MzsJCWlmIChsaXN0X2VtcHR5KCZhbXA7bW0tJmd0O21tbGlzdCkpCiYjNDM7CQkJbGlzdF9hZGQoJmFtcDttbS0mZ3Q7bW1saXN0LCAmYW1wO2luaXRfbW0ubW1saXN0KTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7bW1saXN0X2xvY2spOwomIzQzOwl9CiYjNDM7fQomIzQzOwogI2VuZGlmCS8qIF9fTU1fSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBhM2ZjYWY4Y2ZlOGY4Yi4uNjYzN2M1YjEzYzliYWMgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC05NTMsMTQgJiM0Mzs5NTMsNyBAQCBjb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLAogCQlpZiAoc3dhcF9kdXBfZW50cnlfZGlyZWN0KGVudHJ5KSAmbHQ7IDApCiAJCQlyZXR1cm4gLUVJTzsKIAotCQkvKiBtYWtlIHN1cmUgZHN0X21tIGlzIG9uIHN3YXBvZmYmIzM5O3MgbW1saXN0LiAqLwotCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmYW1wO2RzdF9tbS0mZ3Q7bW1saXN0KSkpIHsKLQkJCXNwaW5fbG9jaygmYW1wO21tbGlzdF9sb2NrKTsKLQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7ZHN0X21tLSZndDttbWxpc3QpKQotCQkJCWxpc3RfYWRkKCZhbXA7ZHN0X21tLSZndDttbWxpc3QsCi0JCQkJCQkmYW1wO3NyY19tbS0mZ3Q7bW1saXN0KTsKLQkJCXNwaW5fdW5sb2NrKCZhbXA7bW1saXN0X2xvY2spOwotCQl9CiYjNDM7CQltbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMoZHN0X21tKTsKIAkJLyogTWFyayB0aGUgc3dhcCBlbnRyeSBhcyBzaGFyZWQuICovCiAJCWlmIChwdGVfc3dwX2V4Y2x1c2l2ZShvcmlnX3B0ZSkpIHsKIAkJCXB0ZSA9IHB0ZV9zd3BfY2xlYXJfZXhjbHVzaXZlKG9yaWdfcHRlKTsKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCA0OWUxMGZlZWIwOTRmMC4uYzQ4ZGM1MTI3ZTZhYTkgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTM2Miw3ICYjNDM7MzYyLDcgQEAgc3RhdGljIGJvb2wgcmVtb3ZlX21pZ3JhdGlvbl9wdGUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCWlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcHZtdy5hZGRyZXNzKSAtIHB2bXcucGdvZmY7CiAJCW5ldyA9IGZvbGlvX3BhZ2UoZm9saW8sIGlkeCk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIAkJLyogUE1ELW1hcHBlZCBUSFAgbWlncmF0aW9uIGVudHJ5ICovCiAJCWlmICghcHZtdy5wdGUpIHsKIAkJCVZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIHx8CkBAIC01NDUsNyAmIzQzOzU0NSw3IEBAIHZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwCiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRgogdm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpCiB7CiAJc3BpbmxvY2tfdCAqcHRsOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggYWUzOTE3M2Q2YTBlOGEuLjJmOGI2NDYzMDJjMjUxIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTE2NiwxMSAmIzQzOzE2NiwxNCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJfSBlbHNlIGlmICghcG1kX3ByZXNlbnQoKnBtZHApKSB7CiAJCWNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZCgqcG1kcCk7CiAKLQkJZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7Ci0KIAkJaWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHwKLQkJCSEobWlncmF0ZS0mZ3Q7ZmxhZ3MgJmFtcDsgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSB8fAotCQkJKGZvbGlvLSZndDtwZ21hcC0mZ3Q7b3duZXIgIT0gbWlncmF0ZS0mZ3Q7cGdtYXBfb3duZXIpKSB7CiYjNDM7CQkgICAgIShtaWdyYXRlLSZndDtmbGFncyAmYW1wOyBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2socHRsKTsKJiM0MzsJCQlyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7CiYjNDM7CQlpZiAoZm9saW8tJmd0O3BnbWFwLSZndDtvd25lciAhPSBtaWdyYXRlLSZndDtwZ21hcF9vd25lcikgewogCQkJc3Bpbl91bmxvY2socHRsKTsKIAkJCXJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7CiAJCX0KQEAgLTc2OCw3ICYjNDM7NzcxLDcgQEAgaW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncykKIH0KIEVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApOwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAvKioKICAqIG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlOiBJbnNlcnQgYSBodWdlIGZvbGlvIGludG8gQG1pZ3JhdGUtJmd0O3ZtYS0mZ3Q7dm1fbW0KICAqIGF0IEBhZGRyLiBmb2xpbyBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhcyBhIHBhcnQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIHdpdGgKQEAgLTgzNSw3ICYjNDM7ODM4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsCiAJCWVsc2UKIAkJCXN3cF9lbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoCiAJCQkJCQlwYWdlX3RvX3BmbihwYWdlKSk7Ci0JCWVudHJ5ID0gc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnkpOwomIzQzOwkJZW50cnkgPSBzb2Z0bGVhZl90b19wbWQoc3dwX2VudHJ5KTsKIAl9IGVsc2UgewogCQlpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pICZhbXA7JmFtcDsKIAkJICAgICFmb2xpb19pc19kZXZpY2VfY29oZXJlbnQoZm9saW8pKSB7CkBAIC05MjMsNyAmIzQzOzkyNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLAogCQltaWdyYXRlLSZndDtzcmNbaSYjNDM7aWR4XSA9IG1pZ3JhdGVfcGZuKHBmbiAmIzQzOyBpKSB8IGZsYWdzOwogCXJldHVybiByZXQ7CiB9Ci0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi8KJiM0MzsjZWxzZSAvKiAhQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovCiBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJIHN0cnVjdCBwYWdlICpwYWdlLApAQCAtOTQ0LDcgJiM0Mzs5NDcsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSwKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfdm1hX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyYykKIHsKIAl1bnNpZ25lZCBsb25nIG5yID0gMTsKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIAlpZiAoKnNyYyAmYW1wOyBNSUdSQVRFX1BGTl9DT01QT1VORCkKIAkJbnIgPSBIUEFHRV9QTURfTlI7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDFjNzdkNWRjMDZlOWZhLi4wZmI3YTFiODJjZjNjMiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMjMwNCwxMiAmIzQzOzIzMDQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpOwogCQkJCWdvdG8gd2Fsa19hYm9ydDsKIAkJCX0KLQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7bW0tJmd0O21tbGlzdCkpIHsKLQkJCQlzcGluX2xvY2soJmFtcDttbWxpc3RfbG9jayk7Ci0JCQkJaWYgKGxpc3RfZW1wdHkoJmFtcDttbS0mZ3Q7bW1saXN0KSkKLQkJCQkJbGlzdF9hZGQoJmFtcDttbS0mZ3Q7bW1saXN0LCAmYW1wO2luaXRfbW0ubW1saXN0KTsKLQkJCQlzcGluX3VubG9jaygmYW1wO21tbGlzdF9sb2NrKTsKLQkJCX0KJiM0MzsJCQltbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pOwogCQkJZGVjX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUyk7CiAJCQlpbmNfbW1fY291bnRlcihtbSwgTU1fU1dBUEVOVFMpOwogCQkJc3dwX3B0ZSA9IHN3cF9lbnRyeV90b19wdGUoZW50cnkpOwpAQCAtMjQ3Nyw3ICYjNDM7MjQ3Miw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQlwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KCZhbXA7cHZtdyk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAJCQlwbWR2YWwgPSBwbWRwX2dldChwdm13LnBtZCk7CiAJCQlpZiAobGlrZWx5KHBtZF9wcmVzZW50KHBtZHZhbCkpKQogCQkJCXBmbiA9IHBtZF9wZm4ocG1kdmFsKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBTb2Z0bGVhZiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgbGlrZSBhIHJlZmFjdG9yaW5nIGFuZCBidWctZml4aW5nIGVmZm9ydCByZWxhdGVkIHRvIHNvZnRsZWFmIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBuZXcgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgZmVhdHVyZS4gVGhlIHBhdGNoIHJlbmFtZXMgYENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OYCwgd2hpY2ggaW5kaWNhdGVzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UuIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgZnVuY3Rpb25zIGxpa2UgYHNvZnRsZWFmX3RvX3BtZGAsIGBzb2Z0bGVhZl9mcm9tX3BtZGAsIGBzb2Z0bGVhZl9oYXNfcGZuYCwgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCwgYW5kIGBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXNgLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zLgoKRmlyc3QsIEkgZXhhbWluZWQgdGhlIGNvZGUgY2hhbmdlcy4gVGhlIGFkanVzdG1lbnRzIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGFuZCBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMuIFRoZXkmIzM5O3JlIGFkZGluZyBjaGVja3MgKGBzb2Z0bGVhZl9oYXNfcGZuYCBhbmQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCByZXNwZWN0aXZlbHkpIGJlZm9yZSBjYWxsaW5nIGBzb2Z0bGVhZl90b19wYWdlYCBhbmQgYHNvZnRsZWFmX3RvX2ZvbGlvYC4gVGhpcyBpcyBjcnVjaWFsOyBpdCBwcmV2ZW50cyBwb3RlbnRpYWwgY3Jhc2hlcyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBieSBoYW5kbGluZyBjYXNlcyB3aGVyZSB0aGVzZSBjb252ZXJzaW9ucyBtaWdodCBiZSBpbnZhbGlkLCBzdWNoIGFzIHdoZW4gZGVhbGluZyB3aXRoIHN3YXAgZW50cmllcy4gR29vZCBjYXRjaC4KCkhvd2V2ZXIsIHRoZSBjaGFuZ2VzIGluIGBtbS9odWdlX21lbW9yeS5jYCByYWlzZSBhIGNvbmNlcm4uIFRoZSBjb2RlIG5vdyByZXRyaWV2ZXMgdGhlIGBmb2xpb2AgaW5zaWRlIGFuIGBpZmAgc3RhdGVtZW50LCBhZnRlciBjaGVja2luZyBgc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlYC4gUHJldmlvdXNseSwgYGZvbGlvYCB3YXMgb2J0YWluZWQgYmVmb3JlIHRoaXMgY2hlY2suIFRoYXTigJlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY29kZSBtb3ZlbWVudC4gSXQgc2VlbXMgbGlrZWx5IHRoYXQgdGhlIGNvZGUgbm93IGhhcyBhIG5ldyBicmFuY2ggdG8gcHJldmVudCBhbiBlcnJvci4KCk92ZXJhbGwsIHRoZXNlIGNoYW5nZXMgYXJlIGFkZHJlc3NpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhlIHBhdGNoIGlzIGNsZWFybHkgYXR0ZW1wdGluZyB0byBmaXggc2NlbmFyaW9zIHdoZXJlIGBzb2Z0bGVhZl90b19mb2xpb2Agb3IgYHNvZnRsZWFmX3RvX3BhZ2VgIGNvdWxkIGJlIGludm9rZWQgb24gYW4gaW5hcHByb3ByaWF0ZSBlbnRyeS4gVGhhdCBtYWtlcyBtZSBmZWVsIGNvbmZpZGVudCBhYm91dCB0aGUgZnVuY3Rpb25hbGl0eS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZXNzZW50aWFsIHNpbmNlIGBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgZGVwZW5kcyBvbiBpdC4gRm9yIHRoZSBtb2RpZmljYXRpb25zIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgaXQgbG9va3MgbGlrZSBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBvciBwZXJoYXBzIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgbWlnaHQgYmUgcmVxdWlyZWQuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZGVwZW5kZW5jeSBtb3JlIHRob3JvdWdobHkgdG8gY29uZmlybSB0aGUgY29tcGxldGUgc2V0IG9mIG5lY2Vzc2FyeSBjb25maWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfZGV2aWNlLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHN5c3RlbSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgRGV2aWNlIE1pZ3JhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSBzZWUgdGhhdCBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIGlzIGVzc2VudGlhbCBmb3IgdGhlIGBtaWdyYXRlX2RldmljZS5jYCBtb2R1bGUgdG8gZnVuY3Rpb24uIEkgYWxyZWFkeSBrbmV3IHRoYXQsIGJ1dCBpdCYjMzk7cyBnb29kIHRvIGJlIHJlbWluZGVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgbWlncmF0ZV9kZXZpY2UuY2AgaGFzIGFueSBjb25uZWN0aW9uIHRvIHRoaXMgYXJlYSwgYXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBkZXZpY2UgbWlncmF0aW9uIGludGVyYWN0cyB3aXRoIHRhc2sgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwcm9jZnMgZnJhbWV3b3JrLiBUaGUgZ29hbCBpcyB0byBhdm9pZCBhbnkgc3VycHJpc2VzLCBhbmQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB0byBiZSBhd2FyZSBvZiBiZXR3ZWVuIGRldmljZSBtaWdyYXRpb24gYW5kIHRhc2sgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCBtaWdodCBiZSByZWxldmFudCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBkZXZpY2UgbWlncmF0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBgdGFza19tbXUuY2AgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXNrX21tdS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvTWFrZWZpbGU9Nj1vYmoteSAgICYjNDM7PSBwcm9jLm9cbmZzL3Byb2MvTWFrZWZpbGUtNy1cbmZzL3Byb2MvTWFrZWZpbGU6ODpDRkxBR1NfdGFza19tbXUub1x0JiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuZnMvcHJvYy9NYWtlZmlsZS05LXByb2MteVx0XHRcdDo9IG5vbW11Lm8gdGFza19ub21tdS5vXG5mcy9wcm9jL01ha2VmaWxlOjEwOnByb2MtJChDT05GSUdfTU1VKVx0Oj0gdGFza19tbXUub1xuZnMvcHJvYy9NYWtlZmlsZS0xMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRGVwZW5kZW5jaWVzIGFuZCBTY29wZSoqCgpPa2F5LCBzbyBJIHNlZSBhIGZsYWfigJRgQ09ORklHX01NVWDigJRhbmQgaXQmIzM5O3MgcGluZ2luZyBteSBicmFpbi4gQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIGEgcHJlcmVxdWlzaXRlIGZvciBgdGFza19tbXUuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRpZXMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIE15IGV4cGVydGlzZSBzYXlzIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRydWUuIFdoZXJlIGRvZXMgdGhpcyBnZXQgdXNlZD8gSSBzaG91bGQgaW52ZXN0aWdhdGUgYG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllc2AuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgdGhhdCBmdW5jdGlvbiBkZWNsYXJhdGlvbiB3aXRoaW4gYG1tL2ludGVybmFsLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgd2h5IGl0IG5lY2Vzc2l0YXRlcyB0aGUgTU1VIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTk1Nj1ib29sIG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MsXG4tLVxubW0vaW50ZXJuYWwuaC0xOTYxLSAqL1xubW0vaW50ZXJuYWwuaDoxOTYyOnN0YXRpYyBpbmxpbmUgdm9pZCBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9pbnRlcm5hbC5oLTE5NjMte1xuLS1cbm1tL21lbW9yeS5jPTk0MT1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL21lbW9yeS5jLTk1NS1cbm1tL21lbW9yeS5jOjk1NjpcdFx0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKGRzdF9tbSk7XG5tbS9tZW1vcnkuYy05NTctXHRcdC8qIE1hcmsgdGhlIHN3YXAgZW50cnkgYXMgc2hhcmVkLiAqL1xuLS1cbm1tL3JtYXAuYz0xOTg0PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIzMDYtXHRcdFx0fVxubW0vcm1hcC5jOjIzMDc6XHRcdFx0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKG1tKTtcbm1tL3JtYXAuYy0yMzA4LVx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzgyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIENvdmVyYWdlKioKCk9rYXksIHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgc29saWQsIGl0JiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIHJpZ2h0IGFyZWFzIGZvciBpdHMgZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gYW5hbHl6ZS4KCkkmIzM5O20gdGhpbmtpbmcgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZTogYHBhZ2VtYXBfcG1kX3JhbmdlX3RocGAg4oCTIHRoYXQmIzM5O3MgY29taW5nIGZyb20gYGZzL3Byb2MvdGFza19tbXUuY2AsIHdoaWNoIGlzIGxvZ2ljYWwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZW4gdGhlcmUmIzM5O3MgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGZyb20gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCBpbXBvcnRhbnQgZm9yIG1lbW9yeSBtaWdyYXRpb24sIGFuZCBgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kYCBmcm9tIGBtbS9odWdlX21lbW9yeS5jYC0tIGNydWNpYWwgZm9yIGhhbmRsaW5nIGh1Z2UgcGFnZXMuIFRoZW4gYGNvcHlfbm9ucHJlc2VudF9wdGVgIGZyb20gYG1tL21lbW9yeS5jYCBzZWVtcyBsaWtlIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgZGVhbGluZyB3aXRoIHBhZ2UgdGFibGUgZW50cmllcy4gRmluYWxseSwgYHRyeV90b191bm1hcF9vbmVgIGZyb20gYG1tL3JtYXAuY2AgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIGFueSB1bm1hcHBpbmcgc2NlbmFyaW8uCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwYC4gSSYjMzk7bGwgdmVyaWZ5IGlmIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgZnVsbHkgdW5kZXJzdG9vZCBieSB0aGUgcGF0Y2guIFRoYXQgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9wbWRfcmFuZ2VfdGhwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0yMDIxPXN0YXRpYyBwYWdlbWFwX2VudHJ5X3QgcHRlX3RvX3BhZ2VtYXBfZW50cnkoc3RydWN0IHBhZ2VtYXByZWFkICpwbSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjA4Ny0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjA4ODpzdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlX3RocChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZnMvcHJvYy90YXNrX21tdS5jLTIwODktXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjE2Nj1zdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMTc3LVx0aWYgKHB0bCkge1xuZnMvcHJvYy90YXNrX21tdS5jOjIxNzg6XHRcdGVyciA9IHBhZ2VtYXBfcG1kX3JhbmdlX3RocChwbWRwLCBhZGRyLCBlbmQsIHZtYSwgcG0pO1xuZnMvcHJvYy90YXNrX21tdS5jLTIxNzktXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTM2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWFjaGluZyB0aGUgVGFyZ2V0KioKCkFscmlnaHQsIHllcCwgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW4gYSBwb3NpdGlvbiB0byBwcm9jZWVkLiBUaGlzIGlzIGxvb2tpbmcgcHJvbWlzaW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IG91ciBhc3N1bXB0aW9ucyBieSBleGFtaW5pbmcgdGhlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpcyB0aGUgY29ycmVjdCBlbnRyeSBwb2ludCB0byBhc3Nlc3MgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0IGJlZm9yZSBjb21taXR0aW5nIGZ1cnRoZXIgcmVzb3VyY2VzLiBUaGUgYXJjaGl0ZWN0dXJlIG5lZWRzIGEgc2FuaXR5IGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oPTEzMzQ9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xMzQzLVx0ICogICBlbmNvdW50ZXIgbm9uLXByZXNlbnQgcG1kcy5cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEzNDQ6XHQgKiAtIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQoKSBjb3VsZCBjYWxscyB0aGlzIGR1cmluZyBtaWdyYXRpb25cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTEzNDUtXHQgKiAgIG9mIGRldmljZS1wcml2YXRlIHBtZCBlbnRyaWVzLlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9ODI9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTIzLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjQ6LyoqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQgLSBjb2xsZWN0IFRIUCBwYWdlcyB3aXRob3V0IHNwbGl0dGluZyB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1LSAqIGZvbGlvIGZvciBkZXZpY2UgcHJpdmF0ZSBwYWdlcy5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNS0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM2OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3LVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGssXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDQ9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTI1OS1cdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkge1xubW0vbWlncmF0ZV9kZXZpY2UuYzoyNjA6XHRcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc5MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgUmVhY2hhYmlsaXR5IGFuZCBhIFNwZWNpZmljIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCBzb21ldGhpbmcgaXMgYWNoaWV2YWJsZSwgcmVhY2hhYmxlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdC4gSSYjMzk7bSBnb2luZyB0byBkZWx2ZSBpbnRvIHRoZSBgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MjUwND1ib29sIG1vdmVfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNTU0LVxubW0vaHVnZV9tZW1vcnkuYzoyNTU1OnN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU1Ni1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kLCBib29sIHVmZmRfd3AsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNjAxPWludCBjaGFuZ2VfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNjIyLVx0aWYgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2IHBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSkge1xubW0vaHVnZV9tZW1vcnkuYzoyNjIzOlx0XHRjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQobW0sIGFkZHIsIHBtZCwgdWZmZF93cCxcbm1tL2h1Z2VfbWVtb3J5LmMtMjYyNC1cdFx0XHRcdFx0ICAgIHVmZmRfd3BfcmVzb2x2ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTk1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUmVhY2hpbmcgZm9yIGBjb3B5X25vbnByZXNlbnRfcHRlYCoqCgpPa2F5LCB5ZXMsIHRoYXQgc291bmRzIGxpa2UgYSB2aWFibGUgcGF0aCBmb3J3YXJkLiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGlzIGFjaGlldmFibGUuIE5vdywgd2hlcmUgZG8gSSBzdGFydD8gTGV0JiMzOTtzIHpvb20gaW4gYW5kIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBjb3B5X25vbnByZXNlbnRfcHRlYC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgZnVuY3Rpb24gaG9sZHMgdGhlIGtleSB0byB0aGUgc29sdXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZWNoYW5pY3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9ub25wcmVzZW50X3B0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz05NDA9c3RhdGljIHVuc2lnbmVkIGxvbmdcbm1tL21lbW9yeS5jOjk0MTpjb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxubW0vbWVtb3J5LmMtOTQyLVx0XHRwdGVfdCAqZHN0X3B0ZSwgcHRlX3QgKnNyY19wdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS9tZW1vcnkuYz0xMjE3PWNvcHlfcHRlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuLS1cbm1tL21lbW9yeS5jLTEyODgtXHRcdGlmICh1bmxpa2VseSghcHRlX3ByZXNlbnQocHRlbnQpKSkge1xubW0vbWVtb3J5LmM6MTI4OTpcdFx0XHRyZXQgPSBjb3B5X25vbnByZXNlbnRfcHRlKGRzdF9tbSwgc3JjX21tLFxubW0vbWVtb3J5LmMtMTI5MC1cdFx0XHRcdFx0XHQgIGRzdF9wdGUsIHNyY19wdGUsXG4tLVxubW0vbXByb3RlY3QuYz0yMTQ9c3RhdGljIGxvbmcgY2hhbmdlX3NvZnRsZWFmX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tcHJvdGVjdC5jLTIzOC1cdFx0ICogV2UgZG8gbm90IHByZXNlcnZlIHNvZnQtZGlydGluZXNzLiBTZWVcbm1tL21wcm90ZWN0LmM6MjM5Olx0XHQgKiBjb3B5X25vbnByZXNlbnRfcHRlKCkgZm9yIGV4cGxhbmF0aW9uLlxubW0vbXByb3RlY3QuYy0yNDAtXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY1NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUmVhY2hpbmcgYW4gRW5kcG9pbnQqKgoKWWVzLCB0aGUgb2JqZWN0aXZlIGlzIHdpdGhpbiBncmFzcC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIHBhdGggaXMgdmFsaWQgYW5kIHRoYXQgdGhlIHRhcmdldCBjYW4gYmUgcmVhY2hlZC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsIGluIGhhbmRsaW5nIHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBjb25mbGljdHMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGlzIGNydWNpYWwuIEkgd2FudCB0byBkZWx2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGl0IG9wZXJhdGVzIGluIHRoZSBjdXJyZW50IGNvbnRleHQuIEl0JiMzOTtzIHRpbWUgdG8gYW5hbHl6ZSBpdHMgcm9sZSBpbiBlaXRoZXIgc3VjY2Vzc2Z1bGx5IG9yIHVuc3VjY2Vzc2Z1bGx5IGNvbXBsZXRpbmcgdGhlIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTQ0MD1UaGVyZSBpcyBhbHNvIGEgZmlsZS1zeXN0ZW0gc3BlY2lmaWMgbG9jayBvcmRlcmluZyBjb21tZW50IGxvY2F0ZWQgYXQgdGhlIHRvcCBvZlxuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNDc2LSAgLVx1MDAzZXBhZ2VfdGFibGVfbG9jayBvciBwdGVfbG9ja1xuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0Nzc6ICAgIC1cdTAwM2Vzd2FwX2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgKHRyeV90b191bm1hcF9vbmUpXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ3ODogICAgLVx1MDAzZXByaXZhdGVfbG9jayAgICAgICAgICAgICAgICAgICAgICAodHJ5X3RvX3VubWFwX29uZSlcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NDc5OiAgICAtXHUwMDNlaV9wYWdlcyBsb2NrICAgICAgICAgICAgICAgICAgICAgICh0cnlfdG9fdW5tYXBfb25lKVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00ODAtICAgIC1cdTAwM2VscnV2ZWMtXHUwMDNlbHJ1X2xvY2sgICAgICAgICAgICAgICAgICAoZm9sbG93X3BhZ2VfbWFzay1cdTAwM2VtYXJrX3BhZ2VfYWNjZXNzZWQpXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0PTU1NT1ybWFwJiMzOTtzIGZvbGlvX3JlZmVyZW5jZWRfb25lKCksIGNhbGxlZCB2aWEgdm1zY2FuJiMzOTtzIHNocmlua19hY3RpdmVfbGlzdCgpIG9yXG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3Q6NTU2OnNocmlua19mb2xpb19saXN0KCksIGFuZCBybWFwJiMzOTtzIHRyeV90b191bm1hcF9vbmUoKSBjYWxsZWQgdmlhIHNocmlua19mb2xpb19saXN0KCksXG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3QtNTU3LWNoZWNrIGZvciAoMykgcGFnZXMgc3RpbGwgbWFwcGVkIGludG8gVk1fTE9DS0VEIFZNQXMsIGFuZCBjYWxsIG1sb2NrX3ZtYV9mb2xpbygpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaD0xOT10eXBlZGVmIHN0cnVjdCB7XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaC0zMy0gKiByb2xsb3ZlciBldmVudCAoc2VlIG5ld19jb250ZXh0KCkgYW5kIGZsdXNoX2NvbnRleHQoKSkuIEluIHRoaXMgY2FzZSxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11Lmg6MzQ6ICogYSBjb25jdXJyZW50IFRMQkkgKGUuZy4gdmlhIHRyeV90b191bm1hcF9vbmUoKSBhbmQgcHRlcF9jbGVhcl9mbHVzaCgpKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaC0zNS0gKiBtYXkgdXNlIGEgc3RhbGUgQVNJRC4gVGhpcyBpcyBmaW5lIGluIHByaW5jaXBsZSBhcyB0aGUgbmV3IEFTSUQgaXNcbi0tXG5mcy9uaWxmczIvaW5vZGUuYz0xNzc9c3RhdGljIGJvb2wgbmlsZnNfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmlsZnMyL2lub2RlLmMtMTg1LVx0LypcbmZzL25pbGZzMi9pbm9kZS5jOjE4NjpcdCAqIFRoZSBwYWdlIG1heSBub3QgYmUgbG9ja2VkLCBlZyBpZiBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXBfb25lKClcbmZzL25pbGZzMi9pbm9kZS5jLTE4Ny1cdCAqL1xuLS1cbm1tL2ZpbGVtYXAuYy0xMTQtICogIC1cdTAwM2VwYWdlX3RhYmxlX2xvY2sgb3IgcHRlX2xvY2tcbm1tL2ZpbGVtYXAuYzoxMTU6ICogICAgLVx1MDAzZXN3YXBfbG9ja1x0XHQodHJ5X3RvX3VubWFwX29uZSlcbm1tL2ZpbGVtYXAuYzoxMTY6ICogICAgLVx1MDAzZXByaXZhdGVfbG9ja1x0XHQodHJ5X3RvX3VubWFwX29uZSlcbm1tL2ZpbGVtYXAuYzoxMTc6ICogICAgLVx1MDAzZWlfcGFnZXMgbG9ja1x0XHQodHJ5X3RvX3VubWFwX29uZSlcbm1tL2ZpbGVtYXAuYy0xMTgtICogICAgLVx1MDAzZWxydXZlYy1cdTAwM2VscnVfbG9ja1x0KGZvbGxvd19wYWdlX21hc2stXHUwMDNlbWFya19wYWdlX2FjY2Vzc2VkKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjM4NT1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1NzAtXHQgKiBleGFtcGxlIGlzIGFuIG1sb2NrZWQgcGFnZSwgd2hlcmUgUEdfbWxvY2tlZCBpcyBjbGVhcmVkIGJ5XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1NzE6XHQgKiBmb2xpb19yZW1vdmVfcm1hcF8qKCkgaW4gdHJ5X3RvX3VubWFwX29uZSgpLiBTbyB0byBkZXRlcm1pbmUgcGFnZVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTcyLVx0ICogc3RhdHVzIGNvcnJlY3RseSwgd2Ugc2F2ZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZmxhZ3MgYXQgdGhpcyB0aW1lLlxuLS1cbm1tL21sb2NrLmM9NDY3PXN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tbG9jay5jLTUwMy1cdCAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS5cbm1tL21sb2NrLmM6NTA0Olx0ICogSXQmIzM5O3Mgb2theSBpZiB0cnlfdG9fdW5tYXBfb25lIHVubWFwcyBhIHBhZ2UganVzdCBhZnRlciB3ZVxubW0vbWxvY2suYy01MDUtXHQgKiBzZXQgVk1fTE9DS0VELCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4tLVxubW0vcm1hcC5jPTE5NDQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTE5ODMtICovXG5tbS9ybWFwLmM6MTk4NDpzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTE5ODUtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTIzODk9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTIzOTEtXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xubW0vcm1hcC5jOjIzOTI6XHRcdC5ybWFwX29uZSA9IHRyeV90b191bm1hcF9vbmUsXG5tbS9ybWFwLmMtMjM5My1cdFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDU3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24gZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgRGV2aWNlIE1pZ3JhdGlvbioqCgpPa2F5LCBzbyB0aGUgZ29hbCBpcyBkZWZpbml0ZWx5IGFjaGlldmFibGUuIE5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCDigJMgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIGFsc28ga25vdyBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIGlzIGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBhZnRlciwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIE9mIGNvdXJzZSwgYENPTkZJR19NTVVgIGlzIGdlbmVyYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY29uZmlybSBpdCYjMzk7cyBwcmVzZW50LiBBbmQsIGdpdmVuIHRoYXQgbWlncmF0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIHByb2Nlc3MsIEkgc2VlIEkmIzM5O2xsIG5lZWQgYENPTkZJR19NSUdSQVRJT05gIGZvciBgbW0vbWlncmF0ZS5jYC4gSSBzaG91bGQgcHJvYmFibHkgY3Jvc3MtcmVmZXJlbmNlIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgaW4gYG1tL0tjb25maWdgIGp1c3QgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGJlZm9yZSBJIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVklDRV9NSUdSQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk5LVxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbm1tL0tjb25maWctNzAxLVx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ0OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHpvbmUgZGV2aWNlcyBhbmQgbWlncmF0aW9uIOKAkyB0aG9zZSBhcmUgZGVmaW5pdGVseSBrZXksIHNvIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX01JR1JBVElPTmAgYXJlIGVzc2VudGlhbCBwcmVyZXF1aXNpdGVzLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIHdpbGwgYmUgaW1wYWN0aW5nIHRoaXMgc2V0dXAuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyByZWFzb25hYmxlIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSwgYXMgdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIHNldHRpbmdzIGFyZSBsb2NhdGVkIHRoZXJlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODQzPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODQ1LVxubW0vS2NvbmZpZzo4NDY6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04NDctXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg2ND1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg2OS1cbm1tL0tjb25maWc6ODcwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NzEtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzYtXG5tbS9LY29uZmlnOjg3NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg3OC1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04ODUtXG5tbS9LY29uZmlnOjg4NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04ODctXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg5Mz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkwMi1cbm1tL0tjb25maWc6OTAzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTA0LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTItXG5tbS9LY29uZmlnOjkxMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MTQtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MjAtXG5tbS9LY29uZmlnOjkyMTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkyMi1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTI4LVxubW0vS2NvbmZpZzo5Mjk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTMwLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTM4PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTQ3LVxubW0vS2NvbmZpZzo5NDg6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05NDktXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1Ni1cbm1tL0tjb25maWc6OTU3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk1OC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2NC1cbm1tL0tjb25maWc6OTY1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTY2LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NzItXG5tbS9LY29uZmlnOjk3MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NzQtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzQ4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFuZCBITU0gTWlycm9yaW5nKioKClJpZ2h0LCAqVHJhbnNwYXJlbnQgSHVnZXBhZ2VzKiBhcmUgdGhlIGltbWVkaWF0ZSByZXF1aXJlbWVudCBoZXJlLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgY29uZmlndXJlZCBhbmQgb3BlcmF0aW9uYWwuCgpOb3csIHdoZXJlIGRpZCBJIHNlZSBzb21ldGhpbmcgcmVsYXRlZCB0byBoYW5kbGluZyBtZW1vcnkgbWlycm9yaW5nPyBUaGF0IHJpbmdzIGEgYmVsbC4uLiBJIHRoaW5rIGl0IG1pZ2h0IGJlIGluIGBobW0uY2AuIExldCBtZSBqdXN0IHF1aWNrbHkgc2NhbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4uLiBZZXMsIEkgbmVlZCB0byBjaGVjayBmb3IgYENPTkZJR19ITU1fTUlSUk9SYCBvciBzb21ldGhpbmcgKnNpbWlsYXIqIHdpdGhpbiB0aGUgYGhtbS5jYCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBpbnRlcnBsYXkgb2YgVEhQIHdpdGggYW55IG1lbW9yeSBtaXJyb3JpbmcgaW1wbGVtZW50YXRpb25zIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRvIGNvbmZpcm0gY29ycmVjdCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG1tLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM9MjQ3PXN0YXRpYyBib29sIGFtZHhkbmFfaG1tX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLFxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jLTI4Mi1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jOjI4MzpzdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgYW1keGRuYV9obW1fb3BzID0ge1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtMjg0LVx0LmludmFsaWRhdGUgPSBhbWR4ZG5hX2htbV9pbnZhbGlkYXRlLFxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jPTM0Mj1zdGF0aWMgaW50IGFtZHhkbmFfaG1tX3JlZ2lzdGVyKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibyxcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy0zNzItXHRcdFx0XHRcdFx0ICBsZW4sXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYzozNzM6XHRcdFx0XHRcdFx0ICBcdTAwMjZhbWR4ZG5hX2htbV9vcHMpO1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtMzc0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlPTMyMj1hbWRncHUtJChDT05GSUdfQUNQSSkgJiM0Mzs9IGFtZGdwdV9hY3BpLm9cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlOjMyMzphbWRncHUtJChDT05GSUdfSE1NX01JUlJPUikgJiM0Mzs9IGFtZGdwdV9obW0ub1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUtMzI0LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM9MzI0PWludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy0zMzAtXHRpbnQgcGZuX2luZGV4LCBkbWFfaW5kZXgsIHJldCA9IDAsIHN0YXJ0X2lkeDtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM6MzMxOlx0dW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQsIGhtbV9vcmRlciwgcGZuX3N0YXJ0X2lkeDtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzMyLVx0dW5zaWduZWQgbG9uZyBudW1fcGZucywgY3VycmVudF9zZXE7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy00MDQtXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjQwNTpcdFx0aG1tX29yZGVyID0gaG1tX3Bmbl90b19tYXBfb3JkZXIocmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTQwNi1cdFx0LyogSWYgYSBodWdlcGFnZSB3YXMgZGV0ZWN0ZWQgYW5kIE9EUCB3YXNuJiMzOTt0IHNldCBmb3IsIHRoZSB1bWVtXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy00MDgtXHRcdCAqL1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYzo0MDk6XHRcdGlmIChobW1fb3JkZXIgJiM0MzsgUEFHRV9TSElGVCBcdTAwM2MgcGFnZV9zaGlmdCkge1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy00MTAtXHRcdFx0cmV0ID0gLUVJTlZBTDtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtNDExLVx0XHRcdGliZGV2X2RiZyh1bWVtX29kcC1cdTAwM2V1bWVtLmliZGV2LFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYzo0MTI6XHRcdFx0XHQgIFwmIzM0OyVzOiB1bi1leHBlY3RlZCBobW1fb3JkZXIgJXUsIHBhZ2Vfc2hpZnQgJXVcXG5cJiMzNDssXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjQxMzpcdFx0XHRcdCAgX19mdW5jX18sIGhtbV9vcmRlciwgcGFnZV9zaGlmdCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTQxNC1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9NYWtlZmlsZT0xNT1hdG9taXNwLW9ianMgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvTWFrZWZpbGUtNDQtXHRwY2kvaG1tL2htbV9iby5vIFxcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9NYWtlZmlsZTo0NTpcdHBjaS9obW0vaG1tLm8gXFxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL01ha2VmaWxlLTQ2LVx0cGNpL2lhX2Nzc19kZXZpY2VfYWNjZXNzLm8gXFxcbi0tXG5saWIvTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19URVNUX0xPQ0tVUCkgJiM0Mzs9IHRlc3RfbG9ja3VwLm9cbmxpYi9NYWtlZmlsZToxMDM6b2JqLSQoQ09ORklHX1RFU1RfSE1NKSAmIzQzOz0gdGVzdF9obW0ub1xubGliL01ha2VmaWxlLTEwNC1vYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSAmIzQzOz0gdGVzdF9mcmVlX3BhZ2VzLm9cbi0tXG5tbS9NYWtlZmlsZT0xMzg9b2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSAmIzQzOz0gbWVtcmVtYXAub1xubW0vTWFrZWZpbGU6MTM5Om9iai0kKENPTkZJR19ITU1fTUlSUk9SKSAmIzQzOz0gaG1tLm9cbm1tL01ha2VmaWxlLTE0MC1vYmotJChDT05GSUdfTUVNRkRfQ1JFQVRFKSAmIzQzOz0gbWVtZmQub1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTExOT1GSVhUVVJFX1ZBUklBTlRfQUREKGhtbTIsIGhtbTJfZGV2aWNlX2NvaGVyZW50KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTEyNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjEyNTpzdGF0aWMgaW50IGhtbV9vcGVuKGludCB1bml0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTI2LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xNDM9RklYVFVSRV9TRVRVUChobW0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTQ3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTQ4Olx0c2VsZi1cdTAwM2VmZCA9IGhtbV9vcGVuKHZhcmlhbnQtXHUwMDNlZGV2aWNlX251bWJlcik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDktXHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgaG1tX2lzX2NvaGVyZW50X3R5cGUodmFyaWFudC1cdTAwM2VkZXZpY2VfbnVtYmVyKSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xNTQ9RklYVFVSRV9TRVRVUChobW0yKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE1OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE1OTpcdHNlbGYtXHUwMDNlZmQwID0gaG1tX29wZW4odmFyaWFudC1cdTAwM2VkZXZpY2VfbnVtYmVyMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjAtXHRpZiAoc2VsZi1cdTAwM2VmZDAgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGhtbV9pc19jb2hlcmVudF90eXBlKHZhcmlhbnQtXHUwMDNlZGV2aWNlX251bWJlcjApKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE2Mi1cdEFTU0VSVF9HRShzZWxmLVx1MDAzZWZkMCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNjM6XHRzZWxmLVx1MDAzZWZkMSA9IGhtbV9vcGVuKHZhcmlhbnQtXHUwMDNlZGV2aWNlX251bWJlcjEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTY0LVx0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZmQxLCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz01NDI9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9jaGlsZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy02MjMtXHRcdFx0LyogVGhlIGNoaWxkIHByb2Nlc3MgbmVlZHMgaXRzIG93biBtaXJyb3IgdG8gaXRzIG93biBtbS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjYyNDpcdFx0XHRjaGlsZF9mZCA9IGhtbV9vcGVuKDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNjI1LVx0XHRcdEFTU0VSVF9HRShjaGlsZF9mZCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NjQ5PVRFU1RfRihobW0sIGFub25fd3JpdGVfY2hpbGRfc2hhcmVkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTcwNS1cdC8qIFRoZSBjaGlsZCBwcm9jZXNzIG5lZWRzIGl0cyBvd24gbWlycm9yIHRvIGl0cyBvd24gbW0uICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo3MDY6XHRjaGlsZF9mZCA9IGhtbV9vcGVuKDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNzA3LVx0QVNTRVJUX0dFKGNoaWxkX2ZkLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MTQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBQdXp6bGUqKgoKT2theSwgc28gSSYjMzk7bSBwdXR0aW5nIHRvZ2V0aGVyIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ITU1fTUlSUk9SYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciBgaG1tLmNgLiBHb3QgaXQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBpbiBteSBub3Rlcy4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIHdpdGhpbiBgbW0vS2NvbmZpZ2AuIFJpZ2h0LCBpdCBkZXBlbmRzIG9uIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBTbywgYENPTkZJR19aT05FX0RFVklDRWAgaXMgZXNzZW50aWFsIGhlcmUuIEkga25ldyB0aGVyZSB3YXMgc29tZXRoaW5nIGVsc2UgaW4gdGhhdCBtaXguCgpOb3cgbGV0JiMzOTtzIGNoZWNrIGBDT05GSUdfTUlHUkFUSU9OYC4gQWgsIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBlaXRoZXIgYE5VTUFgIG9yIGBDT01QQUNUSU9OYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBzdHJhaWdodCBmb3J3YXJkLgoKTGV0JiMzOTtzIGNoZWNrIGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgLiBBY3R1YWxseSwgbm8sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW5kaXJlY3RseSBlbmFibGVkLiBJdCYjMzk7cyBzZWxlY3RlZCBieSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBzbyBubyBuZWVkIHRvIG1hbmFnZSB0aGF0IGRpcmVjdGx5LiBTYXZlZCB0aGF0IGZvciBsYXRlci4KCkFscmlnaHQsIHNvIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGVuYWJsZSBhcmU6IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfTUlHUkFUSU9OYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBITU1fTUlSUk9SYC4KCldhaXQsIGhvbGQgb24sIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBhIGBkZWZfYm9vbCBNSUdSQVRJT04gJmFtcDsmYW1wOyBaT05FX0RFVklDRWAuIFNvIEkgY2FuJiMzOTt0IGVuYWJsZSBpdCBkaXJlY3RseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgWk9ORV9ERVZJQ0VgIGFuZCBgTUlHUkFUSU9OYCBhcmUgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayBpZiBlbmFibGluZyBgTUlHUkFUSU9OYCBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLiBJIGJldHRlciBnbyBhbmQgY2hlY2sgYFpPTkVfREVWSUNFYCBpbiBgbW0vS2NvbmZpZ2AgdG9vLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQgY29uZmlndXJhdGlvbiB3aWxsIGJlIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI0NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBDb25maWd1cmF0aW9uIFZhcmlhYmxlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgWk9ORV9ERVZJQ0VgLCB3aGljaCB0aGUgY29kZSBzZWVtcyB0byB0cmVhdCBhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFuLiBPa2F5LCB0aGF0JiMzOTtzIGZpbmUsIGJ1dCBJJiMzOTtkIGxpa2UgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYSBiaXQgYmV0dGVyLiBUaGlzIHVzdWFsbHkgbGVhZHMgbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpHaXZlbiBpdHMgcHVycG9zZSwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBITU1fTUlSUk9SYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGhlYWQgb3ZlciB0byB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGxpdmUsIHNvIHRoYXQmIzM5O3MgdGhlIHBsYWNlIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYFpPTkVfREVWSUNFYCBhbmQgYEhNTV9NSVJST1JgIGlzIHdlbGwtdW5kZXJzdG9vZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIHNheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBITU1fTUlSUk9SJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzNj1jb25maWcgWk9ORV9ERVZJQ0Vcbi0tXG5tbS9LY29uZmlnLTEyNTktI1xubW0vS2NvbmZpZzoxMjYwOmNvbmZpZyBITU1fTUlSUk9SXG5tbS9LY29uZmlnLTEyNjEtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTY2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgSE1NX01JUlJPUmAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgSE1NX01JUlJPUmAgaXMgYSBib29sZWFuLCBhIHN0cmFpZ2h0Zm9yd2FyZCBvbi9vZmYga2luZCBvZiBzZXR0aW5nLiBUaGUgdGhpbmcgdGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhhdCB0aGVyZSYjMzk7cyBubyBhc3NvY2lhdGVkIHByb21wdCBkZWZpbmVkIGZvciBpdC4gVGhhdCYjMzk7cyBhIGJpdCB1bnVzdWFsLCBhbmQgaXQgdGVsbHMgbWUgdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIHRoZSB1c2VyIGlzIGxpa2VseSBkaXJlY3RseSBjb25maWd1cmluZyB0aHJvdWdoIGEgc3RhbmRhcmQgbWVudS4gSXQmIzM5O3MgcHJvYmFibHkgc2VsZWN0ZWQgaW50ZXJuYWxseSwgbGlrZWx5IGJ5IHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMsIGJhc2VkIG9uIHNvbWUgdW5kZXJseWluZyBjb25kaXRpb24gb3IgZGV0ZWN0aW9uLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGF0KiBleGFjdGx5IGlzIHRyaWdnZXJpbmcgdGhhdCBzZWxlY3Rpb24uIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIGRldGVybWluZSB0aGUgY29uZGl0aW9ucyBvciBjb2RlIHBhdGhzIHRoYXQgYXJlIHNldHRpbmcgdGhpcyBwYXJ0aWN1bGFyIGJvb2xlYW4uIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEhNTV9NSVJST1ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWc9Mz1jb25maWcgRFJNX0FDQ0VMX0FNRFhETkFcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvS2NvbmZpZy0xMS1cdHNlbGVjdCBGV19MT0FERVJcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnOjEyOlx0c2VsZWN0IEhNTV9NSVJST1JcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnLTEzLVx0aGVscFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnPTIyOD1jb25maWcgRFJNX0dQVVNWTVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTIzMC1cdGRlcGVuZHMgb24gRFJNXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoyMzE6XHRzZWxlY3QgSE1NX01JUlJPUlxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMjMyLVx0c2VsZWN0IE1NVV9OT1RJRklFUlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L0tjb25maWc9NzU9Y29uZmlnIERSTV9BTURHUFVfVVNFUlBUUlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L0tjb25maWctNzctXHRkZXBlbmRzIG9uIERSTV9BTURHUFVcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L0tjb25maWc6Nzg6XHRzZWxlY3QgSE1NX01JUlJPUlxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvS2NvbmZpZy03OS1cdHNlbGVjdCBNTVVfTk9USUZJRVJcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnPTY9Y29uZmlnIEhTQV9BTURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIERSTV9BTURHUFUgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgQVJNNjQgfHwgUFBDNjQgfHwgKFJJU0NWIFx1MDAyNlx1MDAyNiA2NEJJVCkgfHwgKExPT05HQVJDSCBcdTAwMjZcdTAwMjYgNjRCSVQpKVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZzo5Olx0c2VsZWN0IEhNTV9NSVJST1JcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWctMTAtXHRzZWxlY3QgTU1VX05PVElGSUVSXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZz0xNT1jb25maWcgSFNBX0FNRF9TVk1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnLTE4LVx0ZGVmYXVsdCB5XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnOjE5Olx0c2VsZWN0IEhNTV9NSVJST1JcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWctMjAtXHRzZWxlY3QgTU1VX05PVElGSUVSXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZz05ND1jb25maWcgRFJNX05PVVZFQVVfU1ZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZy05OC1cdGRlcGVuZHMgb24gU1RBR0lOR1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZzo5OTpcdHNlbGVjdCBITU1fTUlSUk9SXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnLTEwMC1cdHNlbGVjdCBNTVVfTk9USUZJRVJcbi0tXG5kcml2ZXJzL2h2L0tjb25maWc9Njg9Y29uZmlnIE1TSFZfUk9PVFxuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy03OS1cdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuZHJpdmVycy9odi9LY29uZmlnOjgwOlx0c2VsZWN0IEhNTV9NSVJST1JcbmRyaXZlcnMvaHYvS2NvbmZpZy04MS1cdHNlbGVjdCBNTVVfTk9USUZJRVJcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz01MT1jb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTUtXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTY6XHRzZWxlY3QgSE1NX01JUlJPUlxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTctXHRkZWZhdWx0IHlcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0zMzI2PWNvbmZpZyBURVNUX0hNTVxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjktXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzMwOlx0c2VsZWN0IEhNTV9NSVJST1JcbmxpYi9LY29uZmlnLmRlYnVnLTMzMzEtXHRzZWxlY3QgTU1VX05PVElGSUVSXG4tLVxubW0vS2NvbmZpZz0xMjY3PWNvbmZpZyBERVZJQ0VfUFJJVkFURVxuLS1cbm1tL0tjb25maWctMTI3NC1cdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxubW0vS2NvbmZpZzoxMjc1Olx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG5tbS9LY29uZmlnLTEyNzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzU2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBITU0gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtIGlzIHNldCB1cCBzbyB0aGF0IHRoZSBgVEVTVF9ITU1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB3aGljaCBJIGFzc3VtZSBpcyBmb3Igc29tZSBraW5kIG9mIEhpZGRlbiBNYXJrb3YgTW9kZWwgdGVzdGluZywgaXMgdHJpZ2dlcmluZyB0aGUgc2VsZWN0aW9uIG9mIGBITU1fTUlSUk9SYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgY29ubmVjdGlvbjsgbWlycm9yaW5nIG1pZ2h0IGJlIGEgcHJlcmVxdWlzaXRlIG9yIGEgc3VwcG9ydGluZyBlbGVtZW50IGZvciBwcm9wZXIgSE1NIHRlc3RpbmcuIFNvLCBlbmFibGluZyBgVEVTVF9ITU1gIGRpcmVjdGx5IGltcGxpZXMgdGhlIGFjdGl2YXRpb24gb2YgdGhlIG1pcnJvciBjb25maWd1cmF0aW9uLiBOb3csIEkgc2VlIHRoYXQgYFRFU1RfSE1NYCBhbHNvIGhhcyBhIGRlcGVuZGVuY3kgb24gYERFVklDRV9QUklWQVRFYC4gTmF0dXJhbGx5LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IHRlc3RpbmcsIG9yIG1ha2luZyBhIGRlY2lzaW9uIG9uIGhvdyB0byBwcm9jZWVkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBERVZJQ0VfUFJJVkFURWAuIEtub3dpbmcgZXhhY3RseSB3aGF0IHRoYXQgY29tcG9uZW50IGVuY29tcGFzc2VzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpZiBlbmFibGluZyBpdCBmb3IgdGVzdGluZyBoYXMgYW55IGltcGFjdCwgcGVyaGFwcyBvbiBzZWN1cml0eSwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IgYW55IG90aGVyIGFyZWEgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZmxhZyBpcyBhbGwgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyNjQ9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWctMTI2Ni1cbm1tL0tjb25maWc6MTI2Nzpjb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI2OC1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTMwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIERldmljZSBGZWF0dXJlcyoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoZSBwbGFuIGlzIHRvIGVuYWJsZSBgREVWSUNFX1BSSVZBVEVgIGFuZCBgVEVTVF9ITU1gLiBNYWtlcyBzZW5zZSwgdGhvc2UgYXJlIGtleSBmb3IgdGhlIHVwY29taW5nIGFuYWx5c2lzLiBIb3dldmVyLCBJIHJlY2FsbCB0aGF0IGBERVZJQ0VfUFJJVkFURWAgaXNuJiMzOTt0IGEgc3RhbmRhbG9uZSBmZWF0dXJlLiBNeSBpbnRlcm5hbCBkZXBlbmRlbmN5IGdyYXBoIGlzIGFscmVhZHkgaGlnaGxpZ2h0aW5nIHRoYXQgYERFVklDRV9QUklWQVRFYCBpcyBjb250aW5nZW50IG9uIGBaT05FX0RFVklDRWAuIFNvLCBiZWZvcmUgSSBjb21taXQgdG8gZW5hYmxpbmcgYERFVklDRV9QUklWQVRFYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgWk9ORV9ERVZJQ0VgIGlzIHNvcnRlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHNldCBwcm9wZXJseSBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGguIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgbWFrZSBhIGZldyBtaW5vciBhZGp1c3RtZW50cyB0byBlbnN1cmUgdGhlIHByZXJlcXVpc2l0ZXMgYXJlIG1ldC4gSSBhbSBub3Qgc2VlaW5nIHRoYXQgYXMgYW4gaXNzdWUsIGp1c3QgYSBjaGVja3BvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWSUNFX1BSSVZBVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNjYtXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNjgtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBtbS9LY29uZmlnYCBhbmQgYERFVklDRV9QUklWQVRFYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNoZWNrIGBtbS9LY29uZmlnYC4gSSYjMzk7dmUgZ290IHRoaXMgZ3V0IGZlZWxpbmcgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50IGhlcmUuIEl0JiMzOTtzIGEgY29tbW9uIGFyZWEgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBuYW1lIGRlZmluaXRlbHkgcmluZ3MgYSBiZWxsLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gb2Z0ZW4gaG91c2VzIHNldHRpbmdzIHJlbGF0ZWQgdG8gZGV2aWNlLXNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBwZXJtaXNzaW9ucywgc28gdGhhdCYjMzk7cyB0aGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBsb29raW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgc29saWQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0Y29uZmlnIEhNTV9NSVJST1JcbjEyNjE6XHRcdGJvb2xcbjEyNjI6XHRcdGRlcGVuZHMgb24gTU1VXG4xMjYzOlx0XG4xMjY0Olx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuMTI2NTpcdFx0Ym9vbFxuMTI2NjpcdFxuMTI2NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI2ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNjk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNzA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNzE6XHRcbjEyNzI6XHRcdGhlbHBcbjEyNzM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNzQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI3NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjc2Olx0XG4xMjc3Olx0Y29uZmlnIFZNQVBfUEZOXG4xMjc4Olx0XHRib29sXG4xMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTA1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgREVWSUNFX1BSSVZBVEVgIGhlcmUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBaT05FX0RFVklDRWAuIE5vdGhpbmcgdW5leHBlY3RlZCB0aGVyZSwgYnV0IG5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGBaT05FX0RFVklDRWAgaXRzZWxmIGlzIGhvb2tlZCB1cCB0by4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFpPTkVfREVWSUNFYCB0byBzZWUgd2hhdCBlbHNlIHRoaXMgYWZmZWN0cy4gSXQmIzM5O3MgdGltZSB0byBidWlsZCBvdXQgdGhhdCBkZXBlbmRlbmN5IGdyYXBoIGFuZCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCBhbGwgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGVzZSByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCBnZXRzIGNhc2NhZGVkIGJ5IHRoYXQgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjMwOlx0XG4xMjMxOlx0Y29uZmlnIFpPTkVfRE1BMzJcbjEyMzI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBETUEzMiB6b25lXCYjMzQ7IGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxuMTIzMzpcdFx0ZGVwZW5kcyBvbiAhWDg2XzMyXG4xMjM0Olx0XHRkZWZhdWx0IHkgaWYgQVJNNjRcbjEyMzU6XHRcbjEyMzY6XHRjb25maWcgWk9ORV9ERVZJQ0VcbjEyMzc6XHRcdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuMTIzODpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xuMTIzOTpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXG4xMjQwOlx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4xMjQxOlx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4xMjQyOlx0XG4xMjQzOlx0XHRoZWxwXG4xMjQ0Olx0XHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXG4xMjQ1Olx0XHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXG4xMjQ2Olx0XHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxuMTI0NzpcdFx0ICBcJiMzNDtkZXZpY2UtcGh5c2ljYWxcJiMzNDsgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcbjEyNDg6XHRcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxuMTI0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBmb3JtYXR0ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IFpPTkVfREVWSUNFKioKClJpZ2h0LCBzbyBgWk9ORV9ERVZJQ0VgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZSwgYW5kIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHJlbGF0aW9uc2hpcHMuIEkga25vdyB0aGF0IGBaT05FX0RFVklDRWAgcmVsaWVzIHByZXR0eSBoZWF2aWx5IG9uIGEgZmV3IG90aGVyIGtleSBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIG9mIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIFRob3NlIHNlZW0gbGlrZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgZm9yIGFueXRoaW5nIGRlYWxpbmcgd2l0aCBkZXZpY2UgbWVtb3J5IHpvbmVzLiBJJiMzOTt2ZSBvZnRlbiBzZWVuIHRoZXNlIGVuYWJsZWQsIGVzcGVjaWFsbHkgd2hlbiBJJiMzOTttIHdvcmtpbmcgd2l0aCBzeXprYWxsZXIgY29uZmlndXJhdGlvbnMsIHdoaWNoIHRlbmRzIHRvIGJlIHdoZXJlIEkmIzM5O20gcG9raW5nIGFyb3VuZCBpbiB0aGlzIGtpbmQgb2YgYXJlYS4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHN5emthbGxlciYjMzk7cyBmb2N1cyBvbiBmYXVsdCBpbmplY3Rpb24gYW5kIHRlc3RpbmcuCgpOb3csIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gcXVpY2tseSBjaGVjayBgREVWSUNFX01JR1JBVElPTmAsIGdpdmVuIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFx0aGVscFxuIDY5MTpcdFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXG4gNjkyOlx0XHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXG4gNjkzOlx0XHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcbiA2OTQ6XHRcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxuIDY5NTpcdFxuIDY5NjpcdGNvbmZpZyBNSUdSQVRJT05cbiA2OTc6XHRcdGJvb2xcbiA2OTg6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjk5Olx0XG4gNzAwOlx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbiA3MDE6XHRcdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0VcbiA3MDI6XHRcbiA3MDM6XHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXG4gNzA0Olx0XHRib29sXG4gNzA1Olx0XG4gNzA2Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gNzA3Olx0XHRib29sXG4gNzA4Olx0XG4gNzA5Olx0Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBdXRvbWF0aWMgRGV2aWNlIE1pZ3JhdGlvbiBhbmQgRGVwZW5kZW5jeSBDaGVja3MqKgoKUmlnaHQsIHNvIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgYERFVklDRV9NSUdSQVRJT05gIHdoZW4gYm90aCBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYCBmZWF0dXJlcyBhcmUgYWN0aXZlLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0IHN0cmVhbWxpbmVzIHRoZSBzZXR1cCBhbmQgcmVkdWNlcyBwb3RlbnRpYWwgZm9yIG1hbnVhbCBjb25maWd1cmF0aW9uIGVycm9ycywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0aGluZy4gV2UgbmVlZCB0byBiZSB3YXJ5IG9mIGF1dG9tYXRpYyBmdW5jdGlvbmFsaXR5LCBhbmQgY29uc2lkZXIgdGhlIGVkZ2UgY2FzZXMsIGJ1dCB0aGUgZGVzaWduIHNlZW1zIHNvdW5kIGF0IGZpcnN0IGdsYW5jZS4gTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBURVNUX0hNTWAuIEkgbmVlZCB0byBlbnN1cmUgbm90aGluZyYjMzk7cyBiZWVuIG1pc3NlZCBkdXJpbmcgaW50ZWdyYXRpb247IHRoaXMgY291bGQgYmUgdml0YWwsIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9ycyBhcmUgdGhlIGJhbmUgb2YgbXkgZXhpc3RlbmNlLiBXaGF0IGNvdWxkIGl0IGRlcGVuZCBvbiBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uPyBMZXQmIzM5O3MgdHJhY2UgdGhpcyBhbmQgbWFrZSBjZXJ0YWluIHdlIGFyZSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMjA6XHRcdGhlbHBcbjMzMjE6XHRcdCAgVGVzdCBpZiB0aGUga2VybmVsIGlzIHplcm8taW5pdGlhbGl6aW5nIGhlYXAgYW5kIHBhZ2UgYWxsb2NhdGlvbnMuXG4zMzIyOlx0XHQgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZXN0IGluaXRfb25fYWxsb2MgYW5kIGluaXRfb25fZnJlZSBmZWF0dXJlcy5cbjMzMjM6XHRcbjMzMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzMjU6XHRcbjMzMjY6XHRjb25maWcgVEVTVF9ITU1cbjMzMjc6XHRcdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuMzMyODpcdFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuMzMyOTpcdFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxuMzMzMDpcdFx0c2VsZWN0IEhNTV9NSVJST1JcbjMzMzE6XHRcdHNlbGVjdCBNTVVfTk9USUZJRVJcbjMzMzI6XHRcdGhlbHBcbjMzMzM6XHRcdCAgVGhpcyBpcyBhIHBzZXVkbyBkZXZpY2UgZHJpdmVyIHNvbGVseSBmb3IgdGVzdGluZyBITU0uXG4zMzM0Olx0XHQgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEhNTSB0ZXN0IG1vZHVsZS5cbjMzMzU6XHRcdCAgRG9pbmcgc28gd2lsbCBhbGxvdyB5b3UgdG8gcnVuIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Qvdm0vaG1tLXRlc3RzLlxuMzMzNjpcdFxuMzMzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMzMzODpcdFxuMzMzOTpcdGNvbmZpZyBURVNUX0ZSRUVfUEFHRVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MjEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgSE1NIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBURVNUX0hNTWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYERFVklDRV9QUklWQVRFYC4gU28sIHRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgYWxvbmcgd2l0aCBgWk9ORV9ERVZJQ0VgIHNpbmNlIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBwaWVjZSBvZiB0aGUgcHV6emxlLiBUaGUgb2J2aW91cyBvbmVzIHRvIGVuYWJsZSBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYFpPTkVfREVWSUNFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIG9mIGNvdXJzZSBgVEVTVF9ITU1gIGl0c2VsZi4KCkhtbSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4uLiBpdCYjMzk7cyBhIG1lbnVjb25maWcsIGJ1dCBpdCYjMzk7cyBhbHNvIGEgYm9vbC4gTGV0IG1lIGNsYXJpZnkgdGhhdDsgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZWZpbml0ZWx5IGEgYm9vbGVhbi4gSSBkb24mIzM5O3QgdGhpbmsgSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNgIG9yIGFueSBvZiB0aG9zZSBzaW1pbGFyIG9wdGlvbnM7IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdXN1YWxseSBzdWZmaWNpZW50LgoKTmV4dCB1cCwgSSBuZWVkIHRvIGNoZWNrIGlmIGBNSUdSQVRJT05gIGlzIGVuYWJsZWQuIEl0JiMzOTtzIGEgYm9vbGVhbiB3aXRob3V0IGEgcHJvbXB0LCBzbyBpdCBkZXBlbmRzIG9uIGBOVU1BYCwgYENPTVBBQ1RJT05gLCBvciBgTUVNT1JZX0hPVFJFTU9WRWAuIFNpbmNlIGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIHRoYXQgbWVhbnMgYE1JR1JBVElPTmAgaXMgZ29pbmcgdG8gYmUgZW5hYmxlZCBhcyB3ZWxsLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LgoKU28sIGp1c3QgdG8gcmVpdGVyYXRlLCB0aGUga2V5IGNvbmZpZ3MgSSBuZWVkIHRvIGhhdmUgc2V0IGFyZTogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYFpPTkVfREVWSUNFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBURVNUX0hNTWAuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb2RlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGluIHRoZSBhY3R1YWwga2VybmVsIGNvZGUuIEkmIzM5O2xsIGNoZWNrIGBwYWdlbWFwX3BtZF9yYW5nZV90aHBgIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBZZXAsIGl0IHJlcXVpcmVzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBJIGV4cGVjdC4KCk9rYXksIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRoYXQgbG9va3MgbGlrZSBpdCBuZWVkcyBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gLCB3aGljaCBpcyBkZWZpbmVkIGFzIGBNSUdSQVRJT04gJmFtcDsmYW1wOyBaT05FX0RFVklDRWAuIENoZWNrLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgYGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBZZXAsIGl0IHJlcXVpcmVzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFzIHdlbGwuIFNlZW1zIGNvbnNpc3RlbnQuCgpOb3csIGxldCYjMzk7cyBicmllZmx5IGNoZWNrIGBjb3B5X25vbnByZXNlbnRfcHRlYCBpbiBgbW0vbWVtb3J5LmNgLiBJdCBkZXBlbmRzIG9uIGBDT05GSUdfTU1VYC4gTWFrZXMgc2Vuc2U7IHRoYXQmIzM5O3MgZnVuZGFtZW50YWwuCgpBbmQgZmluYWxseSwgYHRyeV90b191bm1hcF9vbmVgIGluIGBtbS9ybWFwLmNgIHJlcXVpcmVzIGBDT05GSUdfTU1VYCwganVzdCBhcyBleHBlY3RlZC4KCk9rYXksIGxldCBtZSBrZWVwIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIGluIG1pbmQgYXMgSSBjb250aW51ZSB0byBleHBsb3JlIHRoaXMgYXJlYTogYHBhZ2VtYXBfcG1kX3JhbmdlX3RocGAsIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCwgYGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZGAsIGBjb3B5X25vbnByZXNlbnRfcHRlYCwgYW5kIGB0cnlfdG9fdW5tYXBfb25lYC4gSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgc2V0X3BtZF9taWdyYXRpb25fZW50cnlgLCBgcmVtb3ZlX21pZ3JhdGlvbl9wbWRgLCBhbmQgYG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlYC4gVGhpcyBzaG91bGQgcHJvdmlkZSBlbm91Z2ggY29udGV4dCB0byBkaXZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X3BtZF9taWdyYXRpb25fZW50cnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzIyPXN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2Fsaztcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjQtI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI1OmV4dGVybiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI2LVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDEtI2Vsc2UgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzQyOnN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0My1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDMxPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzE5Mi1cdFx0ICogbWFuYWdlZCB0byBjbGVhciBQYWdlQW5vbkV4Y2x1c2l2ZSgpIC0tIHNlZVxubW0vaHVnZV9tZW1vcnkuYzozMTkzOlx0XHQgKiBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeSgpLlxubW0vaHVnZV9tZW1vcnkuYy0zMTk0LVx0XHQgKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDg2ND1sYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODY3LSNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbm1tL2h1Z2VfbWVtb3J5LmM6NDg2ODppbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxubW0vaHVnZV9tZW1vcnkuYy00ODY5LVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0yMTMtXHRcdG1pZ3JhdGUtXHUwMDNlY3BhZ2VzJiM0MzsmIzQzOztcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjE0Olx0XHRyZXQgPSBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShcdTAwMjZwdm13LCBmb2xpb19wYWdlKGZvbGlvLCAwKSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTIxNS1cdFx0aWYgKHJldCkge1xuLS1cbm1tL3JtYXAuYz0yNDEwPXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjQ4Ni1cbm1tL3JtYXAuYzoyNDg3Olx0XHRcdGlmIChzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShcdTAwMjZwdm13LCBzdWJwYWdlKSkge1xubW0vcm1hcC5jLTI0ODgtXHRcdFx0XHRyZXQgPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NDUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipSZWFjaGluZyBhIENydWNpYWwgUG9pbnQgaW4gUE1EIE1pZ3JhdGlvbioqCgpBbHJpZ2h0LCBzbyBgc2V0X3BtZF9taWdyYXRpb25fZW50cnlgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlOyB0aGF0JiMzOTtzIGdvb2QuIE5vdyB0aGF0IEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0LCBJIG5lZWQgdG8gc2hpZnQgZm9jdXMuIE15IG5leHQgbG9naWNhbCBzdGVwIGluIHRoaXMgd29ya2Zsb3cgaXMgdG8gZGVlcGx5IGFuYWx5emUgYHJlbW92ZV9taWdyYXRpb25fcG1kYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1pZ3JhdGlvbiBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uLCBhcyByZW1vdmluZyB0aGUgd3JvbmcgZW50cmllcyB3aWxsIGJyZWFrIGV2ZXJ5dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbW92ZV9taWdyYXRpb25fcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMyNT1leHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjctXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjg6ZXh0ZXJuIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI5LVx0XHRzdHJ1Y3QgcGFnZSAqbmV3KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zNDI9c3RhdGljIGlubGluZSBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0Ny1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQ5LVx0XHRzdHJ1Y3QgcGFnZSAqbmV3KVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RocC5oPTkwPURFRklORV9FVkVOVChtaWdyYXRpb25fcG1kLCBzZXRfbWlncmF0aW9uX3BtZCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90aHAuaC05NC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RocC5oOjk1OkRFRklORV9FVkVOVChtaWdyYXRpb25fcG1kLCByZW1vdmVfbWlncmF0aW9uX3BtZCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RocC5oLTk2LVx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBtZCksXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00ODY4PWludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00OTQxLVxubW0vaHVnZV9tZW1vcnkuYzo0OTQyOnZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBzdHJ1Y3QgcGFnZSAqbmV3KVxubW0vaHVnZV9tZW1vcnkuYy00OTQzLXtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwMDItXHR1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsIHB2bXctXHUwMDNlcG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NTAwMzpcdHRyYWNlX3JlbW92ZV9taWdyYXRpb25fcG1kKGFkZHJlc3MsIHBtZF92YWwocG1kZSkpO1xubW0vaHVnZV9tZW1vcnkuYy01MDA0LX1cbi0tXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTM2OS1cdFx0XHRcdFx0IWZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSwgZm9saW8pO1xubW0vbWlncmF0ZS5jOjM3MDpcdFx0XHRyZW1vdmVfbWlncmF0aW9uX3BtZChcdTAwMjZwdm13LCBuZXcpO1xubW0vbWlncmF0ZS5jLTM3MS1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipSZWFjaGluZyB0aGUgTWlncmF0aW9uIFBvaW50KioKCkFscmlnaHQsIHNvIGByZW1vdmVfbWlncmF0aW9uX3BtZGAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHBhdGh3YXkuIE5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHRoZSBgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2VgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBtaWdyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaHVnZSBQTUQgaW5zZXJ0aW9uLiBJIGV4cGVjdCB0aGVyZSBpcyBzb21lIGludGVycGxheSBoZXJlIHRoYXQgSSYjMzk7bGwgaGF2ZSB0byBmdWxseSBncmFzcC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIGxpa2VseSByZXNpZGUsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgaXMgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz03NzI9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzUtLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjc3NjogKiBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZTogSW5zZXJ0IGEgaHVnZSBmb2xpbyBpbnRvIEBtaWdyYXRlLVx1MDAzZXZtYS1cdTAwM2V2bV9tbVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzctICogYXQgQGFkZHIuIGZvbGlvIGlzIGFscmVhZHkgYWxsb2NhdGVkIGFzIGEgcGFydCBvZiB0aGUgbWlncmF0aW9uIHByb2Nlc3Mgd2l0aFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzg5LSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzo3OTA6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG5tbS9taWdyYXRlX2RldmljZS5jLTc5MS1cdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTkwND1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTkyOS0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG5tbS9taWdyYXRlX2RldmljZS5jOjkzMDpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTMxLVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTY4PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEwMDItXHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjYgKCpkc3QgXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EKSkge1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMDAzOlx0XHRpbnQgcmV0ID0gbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2UobWlncmF0ZSwgYWRkciwgcGFnZSxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTAwNC1cdFx0XHRcdFx0XHRcdFx0c3JjLCBwbWRwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwMjcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBJJiMzOTt2ZSBnb3QgaXQuIFllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIGNhbiB3b3JrIHdpdGg7IHRoZSBwcm9ibGVtIGlzIHJlYWNoYWJsZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUga2V5IGFyZWEgdG8gZXhhbWluZSBpcyBgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzYC4gTGV0JiMzOTtzIGZvY3VzIG91ciBhdHRlbnRpb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTE5NTY9Ym9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxuLS1cbm1tL2ludGVybmFsLmgtMTk2MS0gKi9cbm1tL2ludGVybmFsLmg6MTk2MjpzdGF0aWMgaW5saW5lIHZvaWQgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vaW50ZXJuYWwuaC0xOTYzLXtcbi0tXG5tbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9tZW1vcnkuYy05NTUtXG5tbS9tZW1vcnkuYzo5NTY6XHRcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhkc3RfbW0pO1xubW0vbWVtb3J5LmMtOTU3LVx0XHQvKiBNYXJrIHRoZSBzd2FwIGVudHJ5IGFzIHNoYXJlZC4gKi9cbi0tXG5tbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0yMzA2LVx0XHRcdH1cbm1tL3JtYXAuYzoyMzA3Olx0XHRcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7XG5tbS9ybWFwLmMtMjMwOC1cdFx0XHRkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0ODEKCQkJCQkJCW91dHB1dDogMjg5CgkJCQkJCQl0aG91Z2h0czogODcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUSFAgTWlncmF0aW9uIGFuZCBEZXZpY2UgTWVtb3J5IENoYW5nZXMqKgoKT2theSwgcmVhY2hhYmxlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIG1pZ3JhdGlvbiBhbmQgZGV2aWNlIG1lbW9yeSBtYW5hZ2VtZW50LiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmc6CgoqICAgYHBhZ2VtYXBfcG1kX3JhbmdlX3RocGAKKiAgIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYAoqICAgYGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZGAKKiAgIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAKKiAgIGByZW1vdmVfbWlncmF0aW9uX3BtZGAKKiAgIGBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZWAKCkkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllc2AsIGJ1dCBzaW5jZSBpdCYjMzk7cyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIGl0JiMzOTtzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBmb2N1cyBwb2ludC4gSSBhbHNvIGV4Y2x1ZGVkIGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYGNvcHlfbm9ucHJlc2VudF9wdGVgIGJlY2F1c2UgdGhleSBhcmUgdmVyeSBob3QgcGF0aCBmdW5jdGlvbnMgYW5kIHdvdWxkIGxpa2VseSBqdXN0IG11ZGR5IHRoZSB3YXRlci4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGVzZSByZW1haW5pbmcgc3ltYm9scyBhcmVuJiMzOTt0IHN0YXRpYyBpbmxpbmUuIENoZWNraW5nIGVhY2ggb25lLCB0aGV5IGFsbCBzZWVtIHRvIGJlIGVpdGhlciBzdGF0aWMgd2l0aGluIHRoZSBmaWxlLCBvciBleHBvcnRlZCBnbG9iYWxseS4gUGVyZmVjdC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTXkgdW5kZXJzdGFuZGluZyBzbyBmYXIgc3VnZ2VzdHMgdGhlIGZvbGxvd2luZyBhcmUgY3J1Y2lhbDoKCiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgCiogICBgWk9ORV9ERVZJQ0VgCiogICBgREVWSUNFX1BSSVZBVEVgCiogICBgVEVTVF9ITU1gCgpJIGRpZCBhIHNhbml0eSBjaGVjayBhbmQgc2F3IHRoYXQgYERFVklDRV9NSUdSQVRJT05gIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIGBaT05FX0RFVklDRWAgaXMgc2V0LiBBbHNvLCBgSE1NX01JUlJPUmAgaXMgc2VsZWN0ZWQgYnkgYFRFU1RfSE1NYC4KCkkgYWxzbyBjb25maXJtZWQgdGhhdCBgQ09ORklHX01JR1JBVElPTmAgaXMgZW5hYmxlZCBpZiBgTlVNQWAgb3IgYENPTVBBQ1RJT05gIGFyZSBlbmFibGVkLCBhbmQgYENPTkZJR19NTVVgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSBub3RpY2VkIGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgIGlzIHNlbGVjdGVkIGJ5IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4KCk5vdywgbG9va2luZyBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoZSBwYXRjaCByZW5hbWVzIGBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTmAgdG8gYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgYW5kIGludHJvZHVjZXMgdGhlIG5ldyBmdW5jdGlvbnMgYHNvZnRsZWFmX3RvX3BtZGAgYW5kIGBzb2Z0bGVhZl9mcm9tX3BtZGAgdG8gZGVhbCB3aXRoIHNvZnRsZWFmIGVudHJpZXMuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0IGFsc28gYWltcyB0byBmaXggcG90ZW50aWFsIGJ1Z3MgdGhhdCBtaWdodCBvY2N1ciB3aGVuIGBzb2Z0bGVhZl90b19wYWdlYCBvciBgc29mdGxlYWZfdG9fZm9saW9gIGlzIGNhbGxlZCBvbiBlbnRyaWVzIHdpdGhvdXQgYSBQRk4gb3Igbm9uLWRldmljZS1wcml2YXRlIGVudHJpZXMuIFRoaXMgbWVhbnMgdGhlcmUmIzM5O3MgYSBjb3JyZWN0aW9uIG9mIGltcHJvcGVyIFRIUCBtaWdyYXRpb24sIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIGhvdyB0aGVzZSBwYWdlcyBhcmUgaGFuZGxlZC4gTGFzdGx5LCB0aGUgaW5jbHVzaW9uIG9mIGBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXNgIGVuc3VyZXMgdGhhdCB0aGUgYG1tYCBzdHJ1Y3R1cmUgaXMgb24gYGluaXRfbW0ubW1saXN0YCBiZWZvcmUgc3dhcCBlbnRyaWVzIGFyZSBhZGRlZC4gVGhpcyBzZWVtcyBsaWtlIGEgY3JpdGljYWwgcGllY2UgdG8gZW5zdXJlIHRoZSBgbW1gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBiZWZvcmUgc3dhcCBlbnRyaWVzIGFyZSBhZGRlZC4KClNvIG92ZXJhbGwsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHNlcmllcyBvZiBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIHJlZmFjdG9yaW5nLCBpbXByb3ZpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIFRIUCBtaWdyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZW1hcF9wbWRfcmFuZ2VfdGhwJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7Y2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3NldF9wbWRfbWlncmF0aW9uX2VudHJ5JiMzNDssCiAgICAmIzM0O3JlbW92ZV9taWdyYXRpb25fcG1kJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbmFtZXMgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gdG8gQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGFuZCBpbnRyb2R1Y2VzIHNvZnRsZWFmX3RvX3BtZCBhbmQgc29mdGxlYWZfZnJvbV9wbWQgdG8gaGFuZGxlIHNvZnRsZWFmIGVudHJpZXMuIEl0IGFsc28gZml4ZXMgcG90ZW50aWFsIGJ1Z3Mgd2hlcmUgc29mdGxlYWZfdG9fcGFnZSBvciBzb2Z0bGVhZl90b19mb2xpbyBpcyBjYWxsZWQgb24gZW50cmllcyB3aXRob3V0IGEgUEZOIG9yIG5vbi1kZXZpY2UtcHJpdmF0ZSBlbnRyaWVzIGluIGZzL3Byb2MvdGFza19tbXUuYyBhbmQgbW0vbWlncmF0ZV9kZXZpY2UuYy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyB0byBlbnN1cmUgbW0gaXMgb24gaW5pdF9tbS5tbWxpc3QgYmVmb3JlIGFkZGluZyBzd2FwIGVudHJpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhZmZlY3QgbWVtb3J5IG1hbmFnZW1lbnQsIFRIUCBtaWdyYXRpb24sIGFuZCBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7VEVTVF9ITU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlbWFwX3BtZF9yYW5nZV90aHAmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDtjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7c2V0X3BtZF9taWdyYXRpb25fZW50cnkmIzM0OywKICAgICYjMzQ7cmVtb3ZlX21pZ3JhdGlvbl9wbWQmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVuYW1lcyBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiB0byBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgYW5kIGludHJvZHVjZXMgc29mdGxlYWZfdG9fcG1kIGFuZCBzb2Z0bGVhZl9mcm9tX3BtZCB0byBoYW5kbGUgc29mdGxlYWYgZW50cmllcy4gSXQgYWxzbyBmaXhlcyBwb3RlbnRpYWwgYnVncyB3aGVyZSBzb2Z0bGVhZl90b19wYWdlIG9yIHNvZnRsZWFmX3RvX2ZvbGlvIGlzIGNhbGxlZCBvbiBlbnRyaWVzIHdpdGhvdXQgYSBQRk4gb3Igbm9uLWRldmljZS1wcml2YXRlIGVudHJpZXMgaW4gZnMvcHJvYy90YXNrX21tdS5jIGFuZCBtbS9taWdyYXRlX2RldmljZS5jLiBJdCBhbHNvIGludHJvZHVjZXMgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzIHRvIGVuc3VyZSBtbSBpcyBvbiBpbml0X21tLm1tbGlzdCBiZWZvcmUgYWRkaW5nIHN3YXAgZW50cmllcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGFmZmVjdCBtZW1vcnkgbWFuYWdlbWVudCwgVEhQIG1pZ3JhdGlvbiwgYW5kIGRldmljZSBtZW1vcnkgbWlncmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTE6MjUuNDYyNzA1NjU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyOTQ0NzA0MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZW1hcF9wbWRfcmFuZ2VfdGhwXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kXCIsXG4gICAgXCJjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWRcIixcbiAgICBcInNldF9wbWRfbWlncmF0aW9uX2VudHJ5XCIsXG4gICAgXCJyZW1vdmVfbWlncmF0aW9uX3BtZFwiLFxuICAgIFwibWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW5hbWVzIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIHRvIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBhbmQgaW50cm9kdWNlcyBzb2Z0bGVhZl90b19wbWQgYW5kIHNvZnRsZWFmX2Zyb21fcG1kIHRvIGhhbmRsZSBzb2Z0bGVhZiBlbnRyaWVzLiBJdCBhbHNvIGZpeGVzIHBvdGVudGlhbCBidWdzIHdoZXJlIHNvZnRsZWFmX3RvX3BhZ2Ugb3Igc29mdGxlYWZfdG9fZm9saW8gaXMgY2FsbGVkIG9uIGVudHJpZXMgd2l0aG91dCBhIFBGTiBvciBub24tZGV2aWNlLXByaXZhdGUgZW50cmllcyBpbiBmcy9wcm9jL3Rhc2tfbW11LmMgYW5kIG1tL21pZ3JhdGVfZGV2aWNlLmMuIEl0IGFsc28gaW50cm9kdWNlcyBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMgdG8gZW5zdXJlIG1tIGlzIG9uIGluaXRfbW0ubW1saXN0IGJlZm9yZSBhZGRpbmcgc3dhcCBlbnRyaWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYWZmZWN0IG1lbW9yeSBtYW5hZ2VtZW50LCBUSFAgbWlncmF0aW9uLCBhbmQgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjExOjI1LjQ2MjcxNDY5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDUwMDIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5ZGQxZTAwYWRmMjYwMDM0YjU4YTczZGNhNGM5YTMwOGQ0ODFiYjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwMDoxMToyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcXG5pbmRleCBiM2FmZTA2ODg5MTliZC4uM2ViOTRmMzZjNzdlODggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuQEAgLTE3LDcgKzE3LDcgQEAgY29uZmlnIEFSTTY0XFxuIFxcdHNlbGVjdCBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT04gaWYgSFVHRVRMQl9QQUdFIFxcdTAwMjZcXHUwMDI2IE1JR1JBVElPTlxcbiBcXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4gXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuLVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0NBQ0hFX0lOVkFMSURBVEVfTUVNUkVHSU9OXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCAyNzY4OWM2MmJkMjVkZC4uOTg0YmFkZmE5YTc0YWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0xNTM0LDEwICsxNTM0LDEwIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSlcXHQoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KVxcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZShzd3ApXFx0KChwdGVfdCkgeyAoc3dwKS52YWwgfSlcXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuICNkZWZpbmUgX19wbWRfdG9fc3dwX2VudHJ5KHBtZClcXHRcXHQoKHN3cF9lbnRyeV90KSB7IHBtZF92YWwocG1kKSB9KVxcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApXFx0XFx0X19wbWQoKHN3cCkudmFsKVxcbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG4rI2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbiBcXG4gLypcXG4gICogRW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vdCBtb3JlIHN3YXAgZmlsZXMgdGhhbiBjYW4gYmUgZW5jb2RlZCBpbiB0aGUga2VybmVsXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuaW5kZXggZDhkMjUyMzI1MDE3OTEuLjU1MDE0MmI3ZWUxMDJhIDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcXG4rKysgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuQEAgLTEyLDcgKzEyLDcgQEAgY29uZmlnIExPT05HQVJDSFxcbiBcXHRzZWxlY3QgQVJDSF9ORUVEU19ERUZFUl9LQVNBTlxcbiBcXHRzZWxlY3QgQVJDSF9ESVNBQkxFX0tBU0FOX0lOTElORVxcbiBcXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19BQ1BJX1RBQkxFX1VQR1JBREVcXHRpZiBBQ1BJXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19DUFVfRklOQUxJWkVfSU5JVFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcXG5pbmRleCBlNjdlNjRhYzZlOGNmYy4uNmYzMGFhOGE2NDkwZTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxcbkBAIC0xMDYwLDcgKzEwNjAsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90ICpwbWRwX3B0ZXAocG1kX3QgKnBtZClcXG4gI2RlZmluZSBwbWRfbWtzb2Z0X2RpcnR5KHBtZCkgIHB0ZV9wbWQocHRlX21rc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxcbiAjZGVmaW5lIHBtZF9jbGVhcl9zb2Z0X2RpcnR5KHBtZCkgcHRlX3BtZChwdGVfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gI2RlZmluZSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWQpXFx0cHRlX3BtZChwdGVfc3dwX21rc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxcbiAjZGVmaW5lIHBtZF9zd3Bfc29mdF9kaXJ0eShwbWQpXFx0XFx0cHRlX3N3cF9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSlcXG4gI2RlZmluZSBwbWRfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kKVxcdHB0ZV9wbWQocHRlX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGVcXG5pbmRleCBiYWMwMmM4M2JiM2U0Zi4uNGEwZmE2ODFiZjk4MTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGVcXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZVxcbkBAIC0xMTIsNyArMTEyLDcgQEAgY29uZmlnIFBQQ19USFBcXG4gICAgICAgIGRlcGVuZHMgb24gUFBDX1JBRElYX01NVSB8fCAoUFBDXzY0U19IQVNIX01NVSBcXHUwMDI2XFx1MDAyNiBQQUdFX1NJWkVfNjRLQilcXG4gICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuLSAgICAgICBzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisgICAgICAgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIFxcbiBjaG9pY2VcXG4gXFx0cHJvbXB0IFxcXCJDUFUgc2VsZWN0aW9uXFxcIlxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L0tjb25maWcgYi9hcmNoL3Jpc2N2L0tjb25maWdcXG5pbmRleCAzZjBhNjQ3MjE4ZTQwNy4uYmY3YjI3MWNjY2Q4MDQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnXFxuKysrIGIvYXJjaC9yaXNjdi9LY29uZmlnXFxuQEAgLTIyLDcgKzIyLDcgQEAgY29uZmlnIFJJU0NWXFxuIFxcdHNlbGVjdCBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT04gaWYgSFVHRVRMQl9QQUdFIFxcdTAwMjZcXHUwMDI2IE1JR1JBVElPTlxcbiBcXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgU1BBUlNFTUVNX1ZNRU1NQVBcXG4gXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuLVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0NDX0NBTl9MSU5LXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19DVVJSRU5UX1NUQUNLX1BPSU5URVJcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi4yYWE1MjllODgyZDMwNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTk0Niw3ICs5NDYsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF90IHBtZClcXG4gXFx0cmV0dXJuIHB0ZV9wbWQocHRlX2NsZWFyX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfc3dwX3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbiB7XFxuIFxcdHJldHVybiBwdGVfc3dwX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKTtcXG5AQCAtOTYxLDcgKzk2MSw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF90IHBtZClcXG4ge1xcbiBcXHRyZXR1cm4gcHRlX3BtZChwdGVfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSk7XFxuIH1cXG4tI2VuZGlmIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXFxuKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG4gI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWSAqL1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWRfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5AQCAtMTIwOCwxMCArMTIwOCwxMCBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zd3BfY2xlYXJfZXhjbHVzaXZlKHB0ZV90IHB0ZSlcXG4gXFx0cmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSBcXHUwMDI2IH5fUEFHRV9TV1BfRVhDTFVTSVZFKTtcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gI2RlZmluZSBfX3BtZF90b19zd3BfZW50cnkocG1kKSAoKHN3cF9lbnRyeV90KSB7IHBtZF92YWwocG1kKSB9KVxcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbClcXG4tI2VuZGlmIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXFxuKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG4gXFxuIC8qXFxuICAqIEluIHRoZSBSVjY0IExpbnV4IHNjaGVtZSwgd2UgZ2l2ZSB0aGUgdXNlciBoYWxmIG9mIHRoZSB2aXJ0dWFsLWFkZHJlc3Mgc3BhY2VcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xcbmluZGV4IDg0NDA0ZTY3NzhkNTA0Li4wNzE5ZjY4ZGUwZjM2ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xcbisrKyBiL2FyY2gvczM5MC9LY29uZmlnXFxuQEAgLTgyLDcgKzgyLDcgQEAgY29uZmlnIFMzOTBcXG4gXFx0c2VsZWN0IEFSQ0hfQ09SUkVDVF9TVEFDS1RSQUNFX09OX0tSRVRQUk9CRVxcbiBcXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgU1BBUlNFTUVNXFxuIFxcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTIFxcdTAwM2UgMlxcbi1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0NDX0NBTl9MSU5LXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19DUFVfRklOQUxJWkVfSU5JVFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggODU5Y2U3YzdkNDU0NDguLjZmYWNjZmE2M2IwOTMzIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTkwMyw3ICs5MDMsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF90IHBtZClcXG4gXFx0cmV0dXJuIGNsZWFyX3BtZF9iaXQocG1kLCBfX3BncHJvdChfU0VHTUVOVF9FTlRSWV9TT0ZUX0RJUlRZKSk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuICNkZWZpbmUgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZClcXHRcXHRwbWRfc29mdF9kaXJ0eShwbWQpXFxuICNkZWZpbmUgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKVxcdHBtZF9ta3NvZnRfZGlydHkocG1kKVxcbiAjZGVmaW5lIHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWQpXFx0cG1kX2NsZWFyX3NvZnRfZGlydHkocG1kKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xcbmluZGV4IGJkYWQ5MGYyMTBlNGJmLi41MGUwMGQ4NDE3YWFjYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXFxuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xcbkBAIC03MCw3ICs3MCw3IEBAIGNvbmZpZyBYODZcXG4gXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTiBpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgSFVHRVRMQl9QQUdFIFxcdTAwMjZcXHUwMDI2IE1JR1JBVElPTlxcbiBcXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgWDg2XzY0XFxuIFxcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDIpIFxcdTAwMjZcXHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcXG4tXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVxcdGlmIEFDUElcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9BVFRBQ0tfVkVDVE9SU1xcdGlmIENQVV9NSVRJR0FUSU9OU1xcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IGFjMjk1Y2E2YzkyZjk5Li5lMGZkMzE4ZDQwMDRkMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtMTU0NSw3ICsxNTQ1LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc3dwX2NsZWFyX3NvZnRfZGlydHkocHRlX3QgcHRlKVxcbiBcXHRyZXR1cm4gcHRlX2NsZWFyX2ZsYWdzKHB0ZSwgX1BBR0VfU1dQX1NPRlRfRElSVFkpO1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbiBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZF90IHBtZClcXG4ge1xcbiBcXHRyZXR1cm4gcG1kX3NldF9mbGFncyhwbWQsIF9QQUdFX1NXUF9TT0ZUX0RJUlRZKTtcXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXFxuaW5kZXggZDMyNDA4ZjdjZDVlZDIuLjFmYjVhY2Q4OGFkMDI0IDEwMDY0NFxcbi0tLSBhL2ZzL3Byb2MvdGFza19tbXUuY1xcbisrKyBiL2ZzL3Byb2MvdGFza19tbXUuY1xcbkBAIC0yMTI5LDcgKzIxMjksOCBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlX3RocChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRmbGFncyB8PSBQTV9TT0ZUX0RJUlRZO1xcbiBcXHRcXHRpZiAocG1kX3N3cF91ZmZkX3dwKHBtZCkpXFxuIFxcdFxcdFxcdGZsYWdzIHw9IFBNX1VGRkRfV1A7XFxuLVxcdFxcdHBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4rXFx0XFx0aWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKVxcbitcXHRcXHRcXHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChwYWdlKSB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG5pbmRleCBhZDIwZjdmOGMxNzk0NC4uMTQ4N2JmNGFmMWE3ZWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxcbkBAIC01NjcsNyArNTY3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmdldF9wZXJzaXN0ZW50X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKHZvaWQpXFxuIHtcXG4tXFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pO1xcbitcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpO1xcbiB9XFxuIFxcbiB2b2lkIHNwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCBiL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oXFxuaW5kZXggOTkyY2Q4YmQ4ZWQwZTkuLjg4ODg4ZGFlYjAxOGE5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcXG5AQCAtODEsNyArODEsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNvZnRsZWFmX3RvX3B0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbiBcXHRyZXR1cm4gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIC8qKlxcbiAgKiBzb2Z0bGVhZl9mcm9tX3BtZCgpIC0gT2J0YWluIGEgbGVhZiBlbnRyeSBmcm9tIGEgUE1EIGVudHJ5LlxcbiAgKiBAcG1kOiBQTUQgZW50cnkuXFxuQEAgLTEwOCw2ICsxMDgsMjEgQEAgc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZClcXG4gXFx0cmV0dXJuIHN3cF9lbnRyeShfX3N3cF90eXBlKGFyY2hfZW50cnkpLCBfX3N3cF9vZmZzZXQoYXJjaF9lbnRyeSkpO1xcbiB9XFxuIFxcbisvKipcXG4rICogc29mdGxlYWZfdG9fcG1kKCkgLSBPYnRhaW4gYSBQTUQgZW50cnkgZnJvbSBhIGxlYWYgZW50cnkuXFxuKyAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4rICpcXG4rICogVGhpcyBnZW5lcmF0ZXMgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNRCBlbnRyeSB0aGF0IGNhbiBiZSB1dGlsaXNlZCB0b1xcbisgKiBlbmNvZGUgdGhlIG1ldGFkYXRhIHRoZSBsZWFmIGVudHJ5IGVuY29kZXMuXFxuKyAqXFxuKyAqIFJldHVybnM6IEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBQTUQgZW50cnkgZW5jb2RpbmcgbGVhZiBlbnRyeS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgcG1kX3Qgc29mdGxlYWZfdG9fcG1kKHNvZnRsZWFmX3QgZW50cnkpXFxuK3tcXG4rXFx0LyogVGVtcG9yYXJ5IHVudGlsIHN3cF9lbnRyeV90IGVsaW1pbmF0ZWQuICovXFxuK1xcdHJldHVybiBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcXG4rfVxcbitcXG4gI2Vsc2VcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc29mdGxlYWZfdCBzb2Z0bGVhZl9mcm9tX3BtZChwbWRfdCBwbWQpXFxuQEAgLTExNSw2ICsxMzAsMTEgQEAgc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZClcXG4gXFx0cmV0dXJuIHNvZnRsZWFmX21rX25vbmUoKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBwbWRfdCBzb2Z0bGVhZl90b19wbWQoc29mdGxlYWZfdCBlbnRyeSlcXG4re1xcbitcXHRyZXR1cm4gX19wbWQoMCk7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gLyoqXFxuQEAgLTU2Nyw3ICs1ODcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi0jaWYgZGVmaW5lZChDT05GSUdfWk9ORV9ERVZJQ0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pXFxuKyNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpXFxuIFxcbiAvKipcXG4gICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuQEAgLTU4NiwxNCArNjA2LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbiBcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIH1cXG4gXFxuLSNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG4rI2Vsc2UgIC8qIENPTkZJR19aT05FX0RFVklDRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tI2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbisjZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbiBcXG4gLyoqXFxuICAqIHBtZF9pc19taWdyYXRpb25fZW50cnkoKSAtIERvZXMgdGhpcyBQTUQgZW50cnkgZW5jb2RlIGEgbWlncmF0aW9uIGVudHJ5P1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuaW5kZXggZDUyZDJhOTc2ZTVhMjguLmUzOGYwNjljMWM5MTA4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5AQCAtMTgzOSw3ICsxODM5LDcgQEAgc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHBncHJvdF90IG5ld3Byb3QpXFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWVxcbi0jaWZuZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZm5kZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbiB7XFxuIFxcdHJldHVybiBwbWQ7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oIGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcXG5pbmRleCA4Y2ZjOTY2ZWFlNDhlYi4uNzA1YTg0MTU0ZDI4ZWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaFxcbkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxcbiBcXG4gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gXFxuQEAgLTMzOCw3ICszMzgsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXFxuIFxcdHJldHVybiBfX3N3cF9lbnRyeV90b19wbWQoYXJjaF9lbnRyeSk7XFxuIH1cXG4gXFxuLSNlbHNlICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbisjZWxzZSAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4gXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG5AQCAtMzU4LDcgKzM1OCw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcXG4gXFx0cmV0dXJuIF9fcG1kKDApO1xcbiB9XFxuIFxcbi0jZW5kaWYgIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXFxuKyNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX01NVSAqL1xcbiAjZW5kaWYgLyogX0xJTlVYX1NXQVBPUFNfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDllMGNhNDgyNDkwNTRmLi4wNGZlNTE3MWJiOGM4MCAxMDA2NDRcXG4tLS0gYS9tbS9LY29uZmlnXFxuKysrIGIvbW0vS2NvbmZpZ1xcbkBAIC03MDMsNyArNzAzLDcgQEAgY29uZmlnIERFVklDRV9NSUdSQVRJT05cXG4gY29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxcbiBcXHRib29sXFxuIFxcbi1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbitjb25maWcgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gXFx0Ym9vbFxcbiBcXG4gY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxuZGlmZiAtLWdpdCBhL21tL2RlYnVnX3ZtX3BndGFibGUuYyBiL21tL2RlYnVnX3ZtX3BndGFibGUuY1xcbmluZGV4IDIzZGMzZWUwOTU2MTkyLi41MDdmYmQxYWU3ZTUzNSAxMDA2NDRcXG4tLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcXG4rKysgYi9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcXG5AQCAtNzUxLDE0ICs3NTEsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4gXFx0cG1kX3QgcG1kO1xcbiBcXG4gXFx0aWYgKCFwZ3RhYmxlX3N1cHBvcnRzX3NvZnRfZGlydHkoKSB8fFxcbi1cXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pKVxcbitcXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcIlZhbGlkYXRpbmcgUE1EIHN3YXAgc29mdCBkaXJ0eVxcXFxuXFxcIik7XFxuLVxcdHBtZCA9IHN3cF9lbnRyeV90b19wbWQoYXJncy1cXHUwMDNlbGVhZl9lbnRyeSk7XFxuK1xcdHBtZCA9IHNvZnRsZWFmX3RvX3BtZChhcmdzLVxcdTAwM2VsZWFmX2VudHJ5KTtcXG4gXFx0V0FSTl9PTighcG1kX2lzX2h1Z2UocG1kKSk7XFxuIFxcdFdBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZihwbWQpKTtcXG4gXFxuQEAgLTgxOSw3ICs4MTksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcHRlX3N3YXBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4gXFx0V0FSTl9PTihtZW1jbXAoXFx1MDAyNnB0ZTEsIFxcdTAwMjZwdGUyLCBzaXplb2YocHRlMSkpKTtcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiB7XFxuIFxcdHN3cF9lbnRyeV90IGFyY2hfZW50cnk7XFxuQEAgLTgyOSw3ICs4MjksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJWYWxpZGF0aW5nIFBNRCBzd2FwXFxcXG5cXFwiKTtcXG4tXFx0cG1kMSA9IHN3cF9lbnRyeV90b19wbWQoYXJncy1cXHUwMDNlbGVhZl9lbnRyeSk7XFxuK1xcdHBtZDEgPSBzb2Z0bGVhZl90b19wbWQoYXJncy1cXHUwMDNlbGVhZl9lbnRyeSk7XFxuIFxcdFdBUk5fT04oIXBtZF9pc19odWdlKHBtZDEpKTtcXG4gXFx0V0FSTl9PTighcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKHBtZDEpKTtcXG4gXFxuQEAgLTgzNyw5ICs4MzcsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuIFxcdHBtZDIgPSBfX3N3cF9lbnRyeV90b19wbWQoYXJjaF9lbnRyeSk7XFxuIFxcdFdBUk5fT04obWVtY21wKFxcdTAwMjZwbWQxLCBcXHUwMDI2cG1kMiwgc2l6ZW9mKHBtZDEpKSk7XFxuIH1cXG4tI2Vsc2UgIC8qICFDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbisjZWxzZSAgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbiBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG4rI2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IHN3YXBfbWlncmF0aW9uX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xcbmluZGV4IGM3MmM5ZGRmZGIyZjYyLi40ZjNmNjI3ZDJiNDc3MiAxMDA2NDRcXG4tLS0gYS9tbS9obW0uY1xcbisrKyBiL21tL2htbS5jXFxuQEAgLTMzMSw3ICszMzEsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpobW1fcGZucyxcXG4gXFx0XFx0XFx0XFx0ICAgICBwbWRfdCBwbWQpXFxuQEAgLTM5MSw3ICszOTEsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRyZXR1cm4gaG1tX3BmbnNfZmlsbChzdGFydCwgZW5kLCByYW5nZSwgSE1NX1BGTl9FUlJPUik7XFxuIH1cXG4tI2VuZGlmICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbisjZW5kaWYgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbiBcXG4gc3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxcbiBcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uNGI2ZTQ0MWFlOTMxZWMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcXG4gXFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkgfHxcXG4gXFx0ICAgIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkX2V4Y2x1c2l2ZShlbnRyeSkpIHtcXG4gXFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX21pZ3JhdGlvbl9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLVxcdFxcdHBtZCA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpO1xcbitcXHRcXHRwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xcbiBcXHRcXHRpZiAocG1kX3N3cF9zb2Z0X2RpcnR5KCpzcmNfcG1kKSlcXG4gXFx0XFx0XFx0cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKTtcXG4gXFx0XFx0aWYgKHBtZF9zd3BfdWZmZF93cCgqc3JjX3BtZCkpXFxuQEAgLTE4MzIsNyArMTgzMiw3IEBAIHN0YXRpYyB2b2lkIGNvcHlfaHVnZV9ub25fcHJlc2VudF9wbWQoXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XFxuIFxcdFxcdFxcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLVxcdFxcdFxcdHBtZCA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpO1xcbitcXHRcXHRcXHRwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqc3JjX3BtZCkpXFxuIFxcdFxcdFxcdFxcdHBtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZCk7XFxuQEAgLTI1NTcsMTEgKzI1NTcsMTIgQEAgc3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRib29sIHVmZmRfd3BfcmVzb2x2ZSlcXG4ge1xcbiBcXHRzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQoKnBtZCk7XFxuLVxcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XFxuIFxcdHBtZF90IG5ld3BtZDtcXG4gXFxuIFxcdFZNX1dBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSk7XFxuIFxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBIHByb3RlY3Rpb24gY2hlY2sgaXMgZGlmZmljdWx0IHNvXFxuIFxcdFxcdCAqIGp1c3QgYmUgc2FmZSBhbmQgZGlzYWJsZSB3cml0ZVxcbkBAIC0yNTcwLDEyICsyNTcxLDEyIEBAIHN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2V4Y2x1c2l2ZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi1cXHRcXHRuZXdwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcXG4rXFx0XFx0bmV3cG1kID0gc29mdGxlYWZfdG9fcG1kKGVudHJ5KTtcXG4gXFx0XFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcG1kKSlcXG4gXFx0XFx0XFx0bmV3cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkobmV3cG1kKTtcXG4gXFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcXG4gXFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcXG4tXFx0XFx0bmV3cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XFxuK1xcdFxcdG5ld3BtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XFxuIFxcdFxcdGlmIChwbWRfc3dwX3VmZmRfd3AoKnBtZCkpXFxuIFxcdFxcdFxcdG5ld3BtZCA9IHBtZF9zd3BfbWt1ZmZkX3dwKG5ld3BtZCk7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTQ4NjMsNyArNDg2NCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyh2b2lkKVxcbiBsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XFxuICNlbmRpZlxcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4gXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG5AQCAtNDkyMyw3ICs0OTI0LDcgQEAgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4gXFx0fVxcbiBcXG4gXFx0LyogU2V0IFBNRC4gKi9cXG4tXFx0cG1kc3dwID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XFxuK1xcdHBtZHN3cCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XFxuIFxcdGlmIChzb2Z0ZGlydHkpXFxuIFxcdFxcdHBtZHN3cCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZHN3cCk7XFxuIFxcdGlmICh1ZmZkX3dwKVxcbkBAIC00OTc2LDcgKzQ5NzcsNyBAQCB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VfdG9fcGZuKG5ldykpO1xcbi1cXHRcXHRwbWRlID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XFxuK1xcdFxcdHBtZGUgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xcbiBcXG4gXFx0XFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcHZtdy1cXHUwMDNlcG1kKSlcXG4gXFx0XFx0XFx0cG1kZSA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZGUpO1xcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDhlMGRmM2QxYzZmOTgwLi4wZTNkYjk0NTFlNWM3OCAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0xOTU2LDQgKzE5NTYsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpXFxuIGJvb2wgbWF5X2V4cGFuZF92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncyxcXG4gXFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbiBcXG4rLypcXG4rICogRW5zdXJlIEBtbSBpcyBvbiB0aGUgaW5pdF9tbS5tbWxpc3Qgc28gc3dhcG9mZiBjYW4gZmluZCBpdC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuK3tcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VtbWxpc3QpKSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bW1saXN0X2xvY2spO1xcbitcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bW0tXFx1MDAzZW1tbGlzdCkpXFxuK1xcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZtbS1cXHUwMDNlbW1saXN0LCBcXHUwMDI2aW5pdF9tbS5tbWxpc3QpO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bW1saXN0X2xvY2spO1xcbitcXHR9XFxuK31cXG4rXFxuICNlbmRpZlxcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggYTNmY2FmOGNmZThmOGIuLjY2MzdjNWIxM2M5YmFjIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtOTUzLDE0ICs5NTMsNyBAQCBjb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbiBcXHRcXHRpZiAoc3dhcF9kdXBfZW50cnlfZGlyZWN0KGVudHJ5KSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4tXFx0XFx0LyogbWFrZSBzdXJlIGRzdF9tbSBpcyBvbiBzd2Fwb2ZmJ3MgbW1saXN0LiAqL1xcbi1cXHRcXHRpZiAodW5saWtlbHkobGlzdF9lbXB0eShcXHUwMDI2ZHN0X21tLVxcdTAwM2VtbWxpc3QpKSkge1xcbi1cXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tbGlzdF9sb2NrKTtcXG4tXFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmRzdF9tbS1cXHUwMDNlbW1saXN0KSlcXG4tXFx0XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmRzdF9tbS1cXHUwMDNlbW1saXN0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2c3JjX21tLVxcdTAwM2VtbWxpc3QpO1xcbi1cXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bW1saXN0X2xvY2spO1xcbi1cXHRcXHR9XFxuK1xcdFxcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhkc3RfbW0pO1xcbiBcXHRcXHQvKiBNYXJrIHRoZSBzd2FwIGVudHJ5IGFzIHNoYXJlZC4gKi9cXG4gXFx0XFx0aWYgKHB0ZV9zd3BfZXhjbHVzaXZlKG9yaWdfcHRlKSkge1xcbiBcXHRcXHRcXHRwdGUgPSBwdGVfc3dwX2NsZWFyX2V4Y2x1c2l2ZShvcmlnX3B0ZSk7XFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IDQ5ZTEwZmVlYjA5NGYwLi5jNDhkYzUxMjdlNmFhOSAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdGlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcHZtdy5hZGRyZXNzKSAtIHB2bXcucGdvZmY7XFxuIFxcdFxcdG5ldyA9IGZvbGlvX3BhZ2UoZm9saW8sIGlkeCk7XFxuIFxcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbiBcXHRcXHQvKiBQTUQtbWFwcGVkIFRIUCBtaWdyYXRpb24gZW50cnkgKi9cXG4gXFx0XFx0aWYgKCFwdm13LnB0ZSkge1xcbiBcXHRcXHRcXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSB8fFxcbkBAIC01NDUsNyArNTQ1LDcgQEAgdm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdF9odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbiB7XFxuIFxcdHNwaW5sb2NrX3QgKnB0bDtcXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5pbmRleCBhZTM5MTczZDZhMGU4YS4uMmY4YjY0NjMwMmMyNTEgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5AQCAtMTY2LDExICsxNjYsMTQgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudCgqcG1kcCkpIHtcXG4gXFx0XFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwbWRwKTtcXG4gXFxuLVxcdFxcdGZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xcbi1cXG4gXFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG4tXFx0XFx0XFx0IShtaWdyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkgfHxcXG4tXFx0XFx0XFx0KGZvbGlvLVxcdTAwM2VwZ21hcC1cXHUwMDNlb3duZXIgIT0gbWlncmF0ZS1cXHUwMDNlcGdtYXBfb3duZXIpKSB7XFxuK1xcdFxcdCAgICAhKG1pZ3JhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSkge1xcbitcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbitcXHRcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcXG4rXFx0XFx0aWYgKGZvbGlvLVxcdTAwM2VwZ21hcC1cXHUwMDNlb3duZXIgIT0gbWlncmF0ZS1cXHUwMDNlcGdtYXBfb3duZXIpIHtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gXFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcXG4gXFx0XFx0fVxcbkBAIC03NjgsNyArNzcxLDcgQEAgaW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIC8qKlxcbiAgKiBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZTogSW5zZXJ0IGEgaHVnZSBmb2xpbyBpbnRvIEBtaWdyYXRlLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tXFxuICAqIGF0IEBhZGRyLiBmb2xpbyBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhcyBhIHBhcnQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIHdpdGhcXG5AQCAtODM1LDcgKzgzOCw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHN3cF9lbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG4tXFx0XFx0ZW50cnkgPSBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeSk7XFxuK1xcdFxcdGVudHJ5ID0gc29mdGxlYWZfdG9fcG1kKHN3cF9lbnRyeSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFmb2xpb19pc19kZXZpY2VfY29oZXJlbnQoZm9saW8pKSB7XFxuQEAgLTkyMyw3ICs5MjYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4gXFx0XFx0bWlncmF0ZS1cXHUwMDNlc3JjW2kraWR4XSA9IG1pZ3JhdGVfcGZuKHBmbiArIGkpIHwgZmxhZ3M7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4tI2Vsc2UgLyogIUNPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXFxuKyNlbHNlIC8qICFDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG4gc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5AQCAtOTQ0LDcgKzk0Nyw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX3ZtYV9ucl9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmMpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuciA9IDE7XFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIFxcdGlmICgqc3JjIFxcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpXFxuIFxcdFxcdG5yID0gSFBBR0VfUE1EX05SO1xcbiAjZWxzZVxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCAxYzc3ZDVkYzA2ZTlmYS4uMGZiN2ExYjgyY2YzYzIgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTIzMDQsMTIgKzIzMDQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcXG4gXFx0XFx0XFx0XFx0Z290byB3YWxrX2Fib3J0O1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtbS1cXHUwMDNlbW1saXN0KSkge1xcbi1cXHRcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tbGlzdF9sb2NrKTtcXG4tXFx0XFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VtbWxpc3QpKVxcbi1cXHRcXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2bW0tXFx1MDAzZW1tbGlzdCwgXFx1MDAyNmluaXRfbW0ubW1saXN0KTtcXG4tXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1tbGlzdF9sb2NrKTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xcbiBcXHRcXHRcXHRkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTtcXG4gXFx0XFx0XFx0aW5jX21tX2NvdW50ZXIobW0sIE1NX1NXQVBFTlRTKTtcXG4gXFx0XFx0XFx0c3dwX3B0ZSA9IHN3cF9lbnRyeV90b19wdGUoZW50cnkpO1xcbkBAIC0yNDc3LDcgKzI0NzIsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXFx1MDAyNnB2bXcpO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbiBcXHRcXHRcXHRwbWR2YWwgPSBwbWRwX2dldChwdm13LnBtZCk7XFxuIFxcdFxcdFxcdGlmIChsaWtlbHkocG1kX3ByZXNlbnQocG1kdmFsKSkpXFxuIFxcdFxcdFxcdFxcdHBmbiA9IHBtZF9wZm4ocG1kdmFsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTE6MjcuMTM0NDM3NTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjEyNzI5NDgwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiVEVTVF9ITU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlbWFwX3BtZF9yYW5nZV90aHBcIixcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRcIixcbiAgICBcImNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZFwiLFxuICAgIFwic2V0X3BtZF9taWdyYXRpb25fZW50cnlcIixcbiAgICBcInJlbW92ZV9taWdyYXRpb25fcG1kXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbmFtZXMgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gdG8gQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGFuZCBpbnRyb2R1Y2VzIHNvZnRsZWFmX3RvX3BtZCBhbmQgc29mdGxlYWZfZnJvbV9wbWQgdG8gaGFuZGxlIHNvZnRsZWFmIGVudHJpZXMuIEl0IGFsc28gZml4ZXMgcG90ZW50aWFsIGJ1Z3Mgd2hlcmUgc29mdGxlYWZfdG9fcGFnZSBvciBzb2Z0bGVhZl90b19mb2xpbyBpcyBjYWxsZWQgb24gZW50cmllcyB3aXRob3V0IGEgUEZOIG9yIG5vbi1kZXZpY2UtcHJpdmF0ZSBlbnRyaWVzIGluIGZzL3Byb2MvdGFza19tbXUuYyBhbmQgbW0vbWlncmF0ZV9kZXZpY2UuYy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyB0byBlbnN1cmUgbW0gaXMgb24gaW5pdF9tbS5tbWxpc3QgYmVmb3JlIGFkZGluZyBzd2FwIGVudHJpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhZmZlY3QgbWVtb3J5IG1hbmFnZW1lbnQsIFRIUCBtaWdyYXRpb24sIGFuZCBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOWRkMWUwMGFkZjI2MDAzNGI1OGE3M2RjYTRjOWEzMDhkNDgxYmIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwMDoxMToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjNhZmUwNjg4OTE5YmQuLjNlYjk0ZjM2Yzc3ZTg4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC0xNyw3ICsxNyw3IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTiBpZiBIVUdFVExCX1BBR0UgXHUwMDI2XHUwMDI2IE1JR1JBVElPTlxuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuLVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NBQ0hFX0xJTkVfU0laRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0NBQ0hFX0lOVkFMSURBVEVfTUVNUkVHSU9OXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMjc2ODljNjJiZDI1ZGQuLjk4NGJhZGZhOWE3NGFiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTUzNCwxMCArMTUzNCwxMCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSlcdCgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pXG4gI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoc3dwKVx0KChwdGVfdCkgeyAoc3dwKS52YWwgfSlcbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gI2RlZmluZSBfX3BtZF90b19zd3BfZW50cnkocG1kKVx0XHQoKHN3cF9lbnRyeV90KSB7IHBtZF92YWwocG1kKSB9KVxuICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcG1kKHN3cClcdFx0X19wbWQoKHN3cCkudmFsKVxuLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbiBcbiAvKlxuICAqIEVuc3VyZSB0aGF0IHRoZXJlIGFyZSBub3QgbW9yZSBzd2FwIGZpbGVzIHRoYW4gY2FuIGJlIGVuY29kZWQgaW4gdGhlIGtlcm5lbFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5pbmRleCBkOGQyNTIzMjUwMTc5MS4uNTUwMTQyYjdlZTEwMmEgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG4rKysgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5AQCAtMTIsNyArMTIsNyBAQCBjb25maWcgTE9PTkdBUkNIXG4gXHRzZWxlY3QgQVJDSF9ORUVEU19ERUZFUl9LQVNBTlxuIFx0c2VsZWN0IEFSQ0hfRElTQUJMRV9LQVNBTl9JTkxJTkVcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuLVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVx0aWYgQUNQSVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9GSU5BTElaRV9JTklUXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuaW5kZXggZTY3ZTY0YWM2ZThjZmMuLjZmMzBhYThhNjQ5MGUxIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG5AQCAtMTA2MCw3ICsxMDYwLDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCAqcG1kcF9wdGVwKHBtZF90ICpwbWQpXG4gI2RlZmluZSBwbWRfbWtzb2Z0X2RpcnR5KHBtZCkgIHB0ZV9wbWQocHRlX21rc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxuICNkZWZpbmUgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kKSBwdGVfcG1kKHB0ZV9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpXG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKVx0cHRlX3BtZChwdGVfc3dwX21rc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxuICNkZWZpbmUgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZClcdFx0cHRlX3N3cF9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSlcbiAjZGVmaW5lIHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWQpXHRwdGVfcG1kKHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGVcbmluZGV4IGJhYzAyYzgzYmIzZTRmLi40YTBmYTY4MWJmOTgxNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZVxuQEAgLTExMiw3ICsxMTIsNyBAQCBjb25maWcgUFBDX1RIUFxuICAgICAgICBkZXBlbmRzIG9uIFBQQ19SQURJWF9NTVUgfHwgKFBQQ182NFNfSEFTSF9NTVUgXHUwMDI2XHUwMDI2IFBBR0VfU0laRV82NEtCKVxuICAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4tICAgICAgIHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4rICAgICAgIHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFxuIGNob2ljZVxuIFx0cHJvbXB0IFwiQ1BVIHNlbGVjdGlvblwiXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnXG5pbmRleCAzZjBhNjQ3MjE4ZTQwNy4uYmY3YjI3MWNjY2Q4MDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L0tjb25maWdcbisrKyBiL2FyY2gvcmlzY3YvS2NvbmZpZ1xuQEAgLTIyLDcgKzIyLDcgQEAgY29uZmlnIFJJU0NWXG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OIGlmIEhVR0VUTEJfUEFHRSBcdTAwMjZcdTAwMjYgTUlHUkFUSU9OXG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgU1BBUlNFTUVNX1ZNRU1NQVBcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTIFx1MDAzZSAyXG4tXHRzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcbiBcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xuIFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi4yYWE1MjllODgyZDMwNCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTk0Niw3ICs5NDYsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF90IHBtZClcbiBcdHJldHVybiBwdGVfcG1kKHB0ZV9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gc3RhdGljIGlubGluZSBib29sIHBtZF9zd3Bfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuIHB0ZV9zd3Bfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpO1xuQEAgLTk2MSw3ICs5NjEsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuIHB0ZV9wbWQocHRlX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpO1xuIH1cbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbisjZW5kaWYgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWSAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5AQCAtMTIwOCwxMCArMTIwOCwxMCBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zd3BfY2xlYXJfZXhjbHVzaXZlKHB0ZV90IHB0ZSlcbiBcdHJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgXHUwMDI2IH5fUEFHRV9TV1BfRVhDTFVTSVZFKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgX19wbWRfdG9fc3dwX2VudHJ5KHBtZCkgKChzd3BfZW50cnlfdCkgeyBwbWRfdmFsKHBtZCkgfSlcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbClcbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbisjZW5kaWYgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gLypcbiAgKiBJbiB0aGUgUlY2NCBMaW51eCBzY2hlbWUsIHdlIGdpdmUgdGhlIHVzZXIgaGFsZiBvZiB0aGUgdmlydHVhbC1hZGRyZXNzIHNwYWNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuaW5kZXggODQ0MDRlNjc3OGQ1MDQuLjA3MTlmNjhkZTBmMzZmIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL0tjb25maWdcbisrKyBiL2FyY2gvczM5MC9LY29uZmlnXG5AQCAtODIsNyArODIsNyBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IEFSQ0hfQ09SUkVDVF9TVEFDS1RSQUNFX09OX0tSRVRQUk9CRVxuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHIGlmIFNQQVJTRU1FTVxuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xuIFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9GSU5BTElaRV9JTklUXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDg1OWNlN2M3ZDQ1NDQ4Li42ZmFjY2ZhNjNiMDkzMyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC05MDMsNyArOTAzLDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4gXHRyZXR1cm4gY2xlYXJfcG1kX2JpdChwbWQsIF9fcGdwcm90KF9TRUdNRU5UX0VOVFJZX1NPRlRfRElSVFkpKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZClcdFx0cG1kX3NvZnRfZGlydHkocG1kKVxuICNkZWZpbmUgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKVx0cG1kX21rc29mdF9kaXJ0eShwbWQpXG4gI2RlZmluZSBwbWRfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kKVx0cG1kX2NsZWFyX3NvZnRfZGlydHkocG1kKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnXG5pbmRleCBiZGFkOTBmMjEwZTRiZi4uNTBlMDBkODQxN2FhY2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXG5AQCAtNzAsNyArNzAsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgSFVHRVRMQl9QQUdFIFx1MDAyNlx1MDAyNiBNSUdSQVRJT05cbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRyBpZiBYODZfNjRcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMikgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcbi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBYODZfNjQgXHUwMDI2XHUwMDI2IFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXHRpZiBBQ1BJXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0FUVEFDS19WRUNUT1JTXHRpZiBDUFVfTUlUSUdBVElPTlNcbiBcdHNlbGVjdCBBUkNIX0hBU19DQUNIRV9MSU5FX1NJWkVcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IGFjMjk1Y2E2YzkyZjk5Li5lMGZkMzE4ZDQwMDRkMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTU0NSw3ICsxNTQ1LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc3dwX2NsZWFyX3NvZnRfZGlydHkocHRlX3QgcHRlKVxuIFx0cmV0dXJuIHB0ZV9jbGVhcl9mbGFncyhwdGUsIF9QQUdFX1NXUF9TT0ZUX0RJUlRZKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKVxuIHtcbiBcdHJldHVybiBwbWRfc2V0X2ZsYWdzKHBtZCwgX1BBR0VfU1dQX1NPRlRfRElSVFkpO1xuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuaW5kZXggZDMyNDA4ZjdjZDVlZDIuLjFmYjVhY2Q4OGFkMDI0IDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0yMTI5LDcgKzIxMjksOCBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlX3RocChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGZsYWdzIHw9IFBNX1NPRlRfRElSVFk7XG4gXHRcdGlmIChwbWRfc3dwX3VmZmRfd3AocG1kKSlcbiBcdFx0XHRmbGFncyB8PSBQTV9VRkZEX1dQO1xuLVx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4rXHRcdGlmIChzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSlcbitcdFx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4gXHR9XG4gXG4gXHRpZiAocGFnZSkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li4xNDg3YmY0YWYxYTdlYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuQEAgLTU2Nyw3ICs1NjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZ2V0X3BlcnNpc3RlbnRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKHZvaWQpXG4ge1xuLVx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pO1xuK1x0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGKTtcbiB9XG4gXG4gdm9pZCBzcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCBiL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oXG5pbmRleCA5OTJjZDhiZDhlZDBlOS4uODg4ODhkYWViMDE4YTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcbkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3Qgc29mdGxlYWZfdG9fcHRlKHNvZnRsZWFmX3QgZW50cnkpXG4gXHRyZXR1cm4gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiAvKipcbiAgKiBzb2Z0bGVhZl9mcm9tX3BtZCgpIC0gT2J0YWluIGEgbGVhZiBlbnRyeSBmcm9tIGEgUE1EIGVudHJ5LlxuICAqIEBwbWQ6IFBNRCBlbnRyeS5cbkBAIC0xMDgsNiArMTA4LDIxIEBAIHN0YXRpYyBpbmxpbmUgc29mdGxlYWZfdCBzb2Z0bGVhZl9mcm9tX3BtZChwbWRfdCBwbWQpXG4gXHRyZXR1cm4gc3dwX2VudHJ5KF9fc3dwX3R5cGUoYXJjaF9lbnRyeSksIF9fc3dwX29mZnNldChhcmNoX2VudHJ5KSk7XG4gfVxuIFxuKy8qKlxuKyAqIHNvZnRsZWFmX3RvX3BtZCgpIC0gT2J0YWluIGEgUE1EIGVudHJ5IGZyb20gYSBsZWFmIGVudHJ5LlxuKyAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbisgKlxuKyAqIFRoaXMgZ2VuZXJhdGVzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBQTUQgZW50cnkgdGhhdCBjYW4gYmUgdXRpbGlzZWQgdG9cbisgKiBlbmNvZGUgdGhlIG1ldGFkYXRhIHRoZSBsZWFmIGVudHJ5IGVuY29kZXMuXG4rICpcbisgKiBSZXR1cm5zOiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgUE1EIGVudHJ5IGVuY29kaW5nIGxlYWYgZW50cnkuXG4rICovXG4rc3RhdGljIGlubGluZSBwbWRfdCBzb2Z0bGVhZl90b19wbWQoc29mdGxlYWZfdCBlbnRyeSlcbit7XG4rXHQvKiBUZW1wb3JhcnkgdW50aWwgc3dwX2VudHJ5X3QgZWxpbWluYXRlZC4gKi9cbitcdHJldHVybiBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbit9XG4rXG4gI2Vsc2VcbiBcbiBzdGF0aWMgaW5saW5lIHNvZnRsZWFmX3Qgc29mdGxlYWZfZnJvbV9wbWQocG1kX3QgcG1kKVxuQEAgLTExNSw2ICsxMzAsMTEgQEAgc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZClcbiBcdHJldHVybiBzb2Z0bGVhZl9ta19ub25lKCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgcG1kX3Qgc29mdGxlYWZfdG9fcG1kKHNvZnRsZWFmX3QgZW50cnkpXG4re1xuK1x0cmV0dXJuIF9fcG1kKDApO1xuK31cbitcbiAjZW5kaWZcbiBcbiAvKipcbkBAIC01NjcsNyArNTg3LDcgQEAgc3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pXG4rI2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpXG4gXG4gLyoqXG4gICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG5AQCAtNTg2LDE0ICs2MDYsMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG4gXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG4gfVxuIFxuLSNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG4rI2Vsc2UgIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gc3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi0jZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFIFx1MDAyNlx1MDAyNiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuKyNlbmRpZiAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIFxuIC8qKlxuICAqIHBtZF9pc19taWdyYXRpb25fZW50cnkoKSAtIERvZXMgdGhpcyBQTUQgZW50cnkgZW5jb2RlIGEgbWlncmF0aW9uIGVudHJ5P1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbmluZGV4IGQ1MmQyYTk3NmU1YTI4Li5lMzhmMDY5YzFjOTEwOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuQEAgLTE4MzksNyArMTgzOSw3IEBAIHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgcGdwcm90X21vZGlmeShwZ3Byb3RfdCBvbGRwcm90LCBwZ3Byb3RfdCBuZXdwcm90KVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFlcbi0jaWZuZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmbmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZF90IHBtZClcbiB7XG4gXHRyZXR1cm4gcG1kO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oIGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcbmluZGV4IDhjZmM5NjZlYWU0OGViLi43MDVhODQxNTRkMjhlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaFxuQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZ3VhcmRfc3dwX2VudHJ5KHZvaWQpXG4gXG4gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBleHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UpO1xuIFxuQEAgLTMzOCw3ICszMzgsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXG4gXHRyZXR1cm4gX19zd3BfZW50cnlfdG9fcG1kKGFyY2hfZW50cnkpO1xuIH1cbiBcbi0jZWxzZSAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbisjZWxzZSAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gc3RhdGljIGlubGluZSBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtMzU4LDcgKzM1OCw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcbiBcdHJldHVybiBfX3BtZCgwKTtcbiB9XG4gXG4tI2VuZGlmICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuKyNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gI2VuZGlmIC8qIENPTkZJR19NTVUgKi9cbiAjZW5kaWYgLyogX0xJTlVYX1NXQVBPUFNfSCAqL1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uMDRmZTUxNzFiYjhjODAgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4rKysgYi9tbS9LY29uZmlnXG5AQCAtNzAzLDcgKzcwMyw3IEBAIGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG4gY29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxuIFx0Ym9vbFxuIFxuLWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rY29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gXHRib29sXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5kaWZmIC0tZ2l0IGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jIGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jXG5pbmRleCAyM2RjM2VlMDk1NjE5Mi4uNTA3ZmJkMWFlN2U1MzUgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcbisrKyBiL21tL2RlYnVnX3ZtX3BndGFibGUuY1xuQEAgLTc1MSwxNCArNzUxLDE0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRwbWRfdCBwbWQ7XG4gXG4gXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpIHx8XG4tXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pKVxuK1x0ICAgICFJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRikpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHByX2RlYnVnKFwiVmFsaWRhdGluZyBQTUQgc3dhcCBzb2Z0IGRpcnR5XFxuXCIpO1xuLVx0cG1kID0gc3dwX2VudHJ5X3RvX3BtZChhcmdzLVx1MDAzZWxlYWZfZW50cnkpO1xuK1x0cG1kID0gc29mdGxlYWZfdG9fcG1kKGFyZ3MtXHUwMDNlbGVhZl9lbnRyeSk7XG4gXHRXQVJOX09OKCFwbWRfaXNfaHVnZShwbWQpKTtcbiBcdFdBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZihwbWQpKTtcbiBcbkBAIC04MTksNyArODE5LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRXQVJOX09OKG1lbWNtcChcdTAwMjZwdGUxLCBcdTAwMjZwdGUyLCBzaXplb2YocHRlMSkpKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiB7XG4gXHRzd3BfZW50cnlfdCBhcmNoX2VudHJ5O1xuQEAgLTgyOSw3ICs4MjksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRcdHJldHVybjtcbiBcbiBcdHByX2RlYnVnKFwiVmFsaWRhdGluZyBQTUQgc3dhcFxcblwiKTtcbi1cdHBtZDEgPSBzd3BfZW50cnlfdG9fcG1kKGFyZ3MtXHUwMDNlbGVhZl9lbnRyeSk7XG4rXHRwbWQxID0gc29mdGxlYWZfdG9fcG1kKGFyZ3MtXHUwMDNlbGVhZl9lbnRyeSk7XG4gXHRXQVJOX09OKCFwbWRfaXNfaHVnZShwbWQxKSk7XG4gXHRXQVJOX09OKCFwbWRfaXNfdmFsaWRfc29mdGxlYWYocG1kMSkpO1xuIFxuQEAgLTgzNyw5ICs4MzcsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRwbWQyID0gX19zd3BfZW50cnlfdG9fcG1kKGFyY2hfZW50cnkpO1xuIFx0V0FSTl9PTihtZW1jbXAoXHUwMDI2cG1kMSwgXHUwMDI2cG1kMiwgc2l6ZW9mKHBtZDEpKSk7XG4gfVxuLSNlbHNlICAvKiAhQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbisjZWxzZSAgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG4tI2VuZGlmIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG4rI2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBzd2FwX21pZ3JhdGlvbl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9obW0uYyBiL21tL2htbS5jXG5pbmRleCBjNzJjOWRkZmRiMmY2Mi4uNGYzZjYyN2QyYjQ3NzIgMTAwNjQ0XG4tLS0gYS9tbS9obW0uY1xuKysrIGIvbW0vaG1tLmNcbkBAIC0zMzEsNyArMzMxLDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqaG1tX3BmbnMsXG4gXHRcdFx0XHQgICAgIHBtZF90IHBtZClcbkBAIC0zOTEsNyArMzkxLDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHJldHVybiBobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTtcbiB9XG4tI2VuZGlmICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuKyNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gc3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uNGI2ZTQ0MWFlOTMxZWMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbiBcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpIHx8XG4gXHQgICAgc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KSkge1xuIFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdFx0cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XG4rXHRcdHBtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XG4gXHRcdGlmIChwbWRfc3dwX3NvZnRfZGlydHkoKnNyY19wbWQpKVxuIFx0XHRcdHBtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZCk7XG4gXHRcdGlmIChwbWRfc3dwX3VmZmRfd3AoKnNyY19wbWQpKVxuQEAgLTE4MzIsNyArMTgzMiw3IEBAIHN0YXRpYyB2b2lkIGNvcHlfaHVnZV9ub25fcHJlc2VudF9wbWQoXG4gXHRcdCAqL1xuIFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG4gXHRcdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdFx0XHRwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbitcdFx0XHRwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xuIFxuIFx0XHRcdGlmIChwbWRfc3dwX3NvZnRfZGlydHkoKnNyY19wbWQpKVxuIFx0XHRcdFx0cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKTtcbkBAIC0yNTU3LDExICsyNTU3LDEyIEBAIHN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0Ym9vbCB1ZmZkX3dwX3Jlc29sdmUpXG4ge1xuIFx0c29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwbWQpO1xuLVx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcbiBcdHBtZF90IG5ld3BtZDtcbiBcbiBcdFZNX1dBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSk7XG4gXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSkge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBBIHByb3RlY3Rpb24gY2hlY2sgaXMgZGlmZmljdWx0IHNvXG4gXHRcdCAqIGp1c3QgYmUgc2FmZSBhbmQgZGlzYWJsZSB3cml0ZVxuQEAgLTI1NzAsMTIgKzI1NzEsMTIgQEAgc3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9leGNsdXNpdmVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xuLVx0XHRuZXdwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbitcdFx0bmV3cG1kID0gc29mdGxlYWZfdG9fcG1kKGVudHJ5KTtcbiBcdFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcG1kKSlcbiBcdFx0XHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xuIFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbiBcdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdFx0bmV3cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XG4rXHRcdG5ld3BtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XG4gXHRcdGlmIChwbWRfc3dwX3VmZmRfd3AoKnBtZCkpXG4gXHRcdFx0bmV3cG1kID0gcG1kX3N3cF9ta3VmZmRfd3AobmV3cG1kKTtcbiBcdH0gZWxzZSB7XG5AQCAtNDg2Myw3ICs0ODY0LDcgQEAgc3RhdGljIGludCBfX2luaXQgc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKHZvaWQpXG4gbGF0ZV9pbml0Y2FsbChzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnMpO1xuICNlbmRpZlxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtNDkyMyw3ICs0OTI0LDcgQEAgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiBcdH1cbiBcbiBcdC8qIFNldCBQTUQuICovXG4tXHRwbWRzd3AgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbitcdHBtZHN3cCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XG4gXHRpZiAoc29mdGRpcnR5KVxuIFx0XHRwbWRzd3AgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWRzd3ApO1xuIFx0aWYgKHVmZmRfd3ApXG5AQCAtNDk3Niw3ICs0OTc3LDcgQEAgdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpXG4gXHRcdGVsc2VcbiBcdFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoXG4gXHRcdFx0XHRcdFx0XHRwYWdlX3RvX3BmbihuZXcpKTtcbi1cdFx0cG1kZSA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpO1xuK1x0XHRwbWRlID0gc29mdGxlYWZfdG9fcG1kKGVudHJ5KTtcbiBcbiBcdFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcHZtdy1cdTAwM2VwbWQpKVxuIFx0XHRcdHBtZGUgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWRlKTtcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggOGUwZGYzZDFjNmY5ODAuLjBlM2RiOTQ1MWU1Yzc4IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTE5NTYsNCArMTk1NiwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBnZXRfc3lzY3RsX21heF9tYXBfY291bnQodm9pZClcbiBib29sIG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MsXG4gXHRcdCAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbiBcbisvKlxuKyAqIEVuc3VyZSBAbW0gaXMgb24gdGhlIGluaXRfbW0ubW1saXN0IHNvIHN3YXBvZmYgY2FuIGZpbmQgaXQuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtbS1cdTAwM2VtbWxpc3QpKSB7XG4rXHRcdHNwaW5fbG9jayhcdTAwMjZtbWxpc3RfbG9jayk7XG4rXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZW1tbGlzdCkpXG4rXHRcdFx0bGlzdF9hZGQoXHUwMDI2bW0tXHUwMDNlbW1saXN0LCBcdTAwMjZpbml0X21tLm1tbGlzdCk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbitcdH1cbit9XG4rXG4gI2VuZGlmXHQvKiBfX01NX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBhM2ZjYWY4Y2ZlOGY4Yi4uNjYzN2M1YjEzYzliYWMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC05NTMsMTQgKzk1Myw3IEBAIGNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4gXHRcdGlmIChzd2FwX2R1cF9lbnRyeV9kaXJlY3QoZW50cnkpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuLVx0XHQvKiBtYWtlIHN1cmUgZHN0X21tIGlzIG9uIHN3YXBvZmYncyBtbWxpc3QuICovXG4tXHRcdGlmICh1bmxpa2VseShsaXN0X2VtcHR5KFx1MDAyNmRzdF9tbS1cdTAwM2VtbWxpc3QpKSkge1xuLVx0XHRcdHNwaW5fbG9jayhcdTAwMjZtbWxpc3RfbG9jayk7XG4tXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2ZHN0X21tLVx1MDAzZW1tbGlzdCkpXG4tXHRcdFx0XHRsaXN0X2FkZChcdTAwMjZkc3RfbW0tXHUwMDNlbW1saXN0LFxuLVx0XHRcdFx0XHRcdFx1MDAyNnNyY19tbS1cdTAwM2VtbWxpc3QpO1xuLVx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbi1cdFx0fVxuK1x0XHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMoZHN0X21tKTtcbiBcdFx0LyogTWFyayB0aGUgc3dhcCBlbnRyeSBhcyBzaGFyZWQuICovXG4gXHRcdGlmIChwdGVfc3dwX2V4Y2x1c2l2ZShvcmlnX3B0ZSkpIHtcbiBcdFx0XHRwdGUgPSBwdGVfc3dwX2NsZWFyX2V4Y2x1c2l2ZShvcmlnX3B0ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCA0OWUxMGZlZWIwOTRmMC4uYzQ4ZGM1MTI3ZTZhYTkgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbisrKyBiL21tL21pZ3JhdGUuY1xuQEAgLTM2Miw3ICszNjIsNyBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcHZtdy5hZGRyZXNzKSAtIHB2bXcucGdvZmY7XG4gXHRcdG5ldyA9IGZvbGlvX3BhZ2UoZm9saW8sIGlkeCk7XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIFx0XHQvKiBQTUQtbWFwcGVkIFRIUCBtaWdyYXRpb24gZW50cnkgKi9cbiBcdFx0aWYgKCFwdm13LnB0ZSkge1xuIFx0XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIHx8XG5AQCAtNTQ1LDcgKzU0NSw3IEBAIHZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwXG4gfVxuICNlbmRpZlxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbiB7XG4gXHRzcGlubG9ja190ICpwdGw7XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbmluZGV4IGFlMzkxNzNkNmEwZThhLi4yZjhiNjQ2MzAyYzI1MSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbkBAIC0xNjYsMTEgKzE2NiwxNCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudCgqcG1kcCkpIHtcbiBcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwbWRwKTtcbiBcbi1cdFx0Zm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XG4tXG4gXHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG4tXHRcdFx0IShtaWdyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpIHx8XG4tXHRcdFx0KGZvbGlvLVx1MDAzZXBnbWFwLVx1MDAzZW93bmVyICE9IG1pZ3JhdGUtXHUwMDNlcGdtYXBfb3duZXIpKSB7XG4rXHRcdCAgICAhKG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkpIHtcbitcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuK1x0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG4rXHRcdH1cbitcbitcdFx0Zm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XG4rXHRcdGlmIChmb2xpby1cdTAwM2VwZ21hcC1cdTAwM2Vvd25lciAhPSBtaWdyYXRlLVx1MDAzZXBnbWFwX293bmVyKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiBcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xuIFx0XHR9XG5AQCAtNzY4LDcgKzc3MSw3IEBAIGludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG4gfVxuIEVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiAvKipcbiAgKiBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZTogSW5zZXJ0IGEgaHVnZSBmb2xpbyBpbnRvIEBtaWdyYXRlLVx1MDAzZXZtYS1cdTAwM2V2bV9tbVxuICAqIGF0IEBhZGRyLiBmb2xpbyBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhcyBhIHBhcnQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIHdpdGhcbkBAIC04MzUsNyArODM4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4gXHRcdGVsc2VcbiBcdFx0XHRzd3BfZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KFxuIFx0XHRcdFx0XHRcdHBhZ2VfdG9fcGZuKHBhZ2UpKTtcbi1cdFx0ZW50cnkgPSBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeSk7XG4rXHRcdGVudHJ5ID0gc29mdGxlYWZfdG9fcG1kKHN3cF9lbnRyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIWZvbGlvX2lzX2RldmljZV9jb2hlcmVudChmb2xpbykpIHtcbkBAIC05MjMsNyArOTI2LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4gXHRcdG1pZ3JhdGUtXHUwMDNlc3JjW2kraWR4XSA9IG1pZ3JhdGVfcGZuKHBmbiArIGkpIHwgZmxhZ3M7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbi0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbisjZWxzZSAvKiAhQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbkBAIC05NDQsNyArOTQ3LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV92bWFfbnJfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnIgPSAxO1xuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBcdGlmICgqc3JjIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORClcbiBcdFx0bnIgPSBIUEFHRV9QTURfTlI7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDFjNzdkNWRjMDZlOWZhLi4wZmI3YTFiODJjZjNjMiAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMjMwNCwxMiArMjMwNCw3IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbiBcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbW1saXN0KSkge1xuLVx0XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbi1cdFx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZW1tbGlzdCkpXG4tXHRcdFx0XHRcdGxpc3RfYWRkKFx1MDAyNm1tLVx1MDAzZW1tbGlzdCwgXHUwMDI2aW5pdF9tbS5tbWxpc3QpO1xuLVx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW1saXN0X2xvY2spO1xuLVx0XHRcdH1cbitcdFx0XHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xuIFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xuIFx0XHRcdGluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XG4gXHRcdFx0c3dwX3B0ZSA9IHN3cF9lbnRyeV90b19wdGUoZW50cnkpO1xuQEAgLTI0NzcsNyArMjQ3Miw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXHUwMDI2cHZtdyk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIFx0XHRcdHBtZHZhbCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcbiBcdFx0XHRpZiAobGlrZWx5KHBtZF9wcmVzZW50KHBtZHZhbCkpKVxuIFx0XHRcdFx0cGZuID0gcG1kX3BmbihwbWR2YWwpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTE6MjcuMTM0NDQyMzE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNjcyNDUyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBTb2Z0bGVhZiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZyBhbmQgYnVnLWZpeGluZyBlZmZvcnQgcmVsYXRlZCB0byBzb2Z0bGVhZiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgbmV3IGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgIGZlYXR1cmUuIFRoZSBwYXRjaCByZW5hbWVzIGBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTmAsIHdoaWNoIGluZGljYXRlcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGZ1bmN0aW9ucyBsaWtlIGBzb2Z0bGVhZl90b19wbWRgLCBgc29mdGxlYWZfZnJvbV9wbWRgLCBgc29mdGxlYWZfaGFzX3BmbmAsIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAsIGFuZCBgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzYC4gTGV0J3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zLlxuXG5GaXJzdCwgSSBleGFtaW5lZCB0aGUgY29kZSBjaGFuZ2VzLiBUaGUgYWRqdXN0bWVudHMgaW4gYGZzL3Byb2MvdGFza19tbXUuY2AgYW5kIGBtbS9taWdyYXRlX2RldmljZS5jYCBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGltcHJvdmVtZW50cy4gVGhleSdyZSBhZGRpbmcgY2hlY2tzIChgc29mdGxlYWZfaGFzX3BmbmAgYW5kIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgcmVzcGVjdGl2ZWx5KSBiZWZvcmUgY2FsbGluZyBgc29mdGxlYWZfdG9fcGFnZWAgYW5kIGBzb2Z0bGVhZl90b19mb2xpb2AuIFRoaXMgaXMgY3J1Y2lhbDsgaXQgcHJldmVudHMgcG90ZW50aWFsIGNyYXNoZXMgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYnkgaGFuZGxpbmcgY2FzZXMgd2hlcmUgdGhlc2UgY29udmVyc2lvbnMgbWlnaHQgYmUgaW52YWxpZCwgc3VjaCBhcyB3aGVuIGRlYWxpbmcgd2l0aCBzd2FwIGVudHJpZXMuIEdvb2QgY2F0Y2guXG5cbkhvd2V2ZXIsIHRoZSBjaGFuZ2VzIGluIGBtbS9odWdlX21lbW9yeS5jYCByYWlzZSBhIGNvbmNlcm4uIFRoZSBjb2RlIG5vdyByZXRyaWV2ZXMgdGhlIGBmb2xpb2AgaW5zaWRlIGFuIGBpZmAgc3RhdGVtZW50LCBhZnRlciBjaGVja2luZyBgc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlYC4gUHJldmlvdXNseSwgYGZvbGlvYCB3YXMgb2J0YWluZWQgYmVmb3JlIHRoaXMgY2hlY2suIFRoYXTigJlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY29kZSBtb3ZlbWVudC4gSXQgc2VlbXMgbGlrZWx5IHRoYXQgdGhlIGNvZGUgbm93IGhhcyBhIG5ldyBicmFuY2ggdG8gcHJldmVudCBhbiBlcnJvci5cblxuT3ZlcmFsbCwgdGhlc2UgY2hhbmdlcyBhcmUgYWRkcmVzc2luZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcGF0Y2ggaXMgY2xlYXJseSBhdHRlbXB0aW5nIHRvIGZpeCBzY2VuYXJpb3Mgd2hlcmUgYHNvZnRsZWFmX3RvX2ZvbGlvYCBvciBgc29mdGxlYWZfdG9fcGFnZWAgY291bGQgYmUgaW52b2tlZCBvbiBhbiBpbmFwcHJvcHJpYXRlIGVudHJ5LiBUaGF0IG1ha2VzIG1lIGZlZWwgY29uZmlkZW50IGFib3V0IHRoZSBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZXNzZW50aWFsIHNpbmNlIGBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgZGVwZW5kcyBvbiBpdC4gRm9yIHRoZSBtb2RpZmljYXRpb25zIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgaXQgbG9va3MgbGlrZSBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBvciBwZXJoYXBzIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgbWlnaHQgYmUgcmVxdWlyZWQuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZGVwZW5kZW5jeSBtb3JlIHRob3JvdWdobHkgdG8gY29uZmlybSB0aGUgY29tcGxldGUgc2V0IG9mIG5lY2Vzc2FyeSBjb25maWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjExOjM3LjIwMTY5MjQxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkxMjczNjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTk5PW9iai0kKENPTkZJR19OVU1BKSArPSBtZW1vcnktdGllcnMub1xcbm1tL01ha2VmaWxlOjEwMDpvYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlLTEwMS1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjExOjQ4LjExNDQ0MTg2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQ4ODM3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHN5c3RlbSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWlncmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBgbWlncmF0ZV9kZXZpY2UuY2AgbW9kdWxlIHRvIGZ1bmN0aW9uLiBJIGFscmVhZHkga25ldyB0aGF0LCBidXQgaXQncyBnb29kIHRvIGJlIHJlbWluZGVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGZzL3Byb2MvdGFza19tbXUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBtaWdyYXRlX2RldmljZS5jYCBoYXMgYW55IGNvbm5lY3Rpb24gdG8gdGhpcyBhcmVhLCBhcyBJJ20gaW50ZXJlc3RlZCBpbiBob3cgZGV2aWNlIG1pZ3JhdGlvbiBpbnRlcmFjdHMgd2l0aCB0YXNrIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgcHJvY2ZzIGZyYW1ld29yay4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgYW55IHN1cnByaXNlcywgYW5kIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdG8gYmUgYXdhcmUgb2YgYmV0d2VlbiBkZXZpY2UgbWlncmF0aW9uIGFuZCB0YXNrIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHN1c3BlY3QgaXQgbWlnaHQgYmUgcmVsZXZhbnQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgZGV2aWNlIG1pZ3JhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCBgdGFza19tbXUuY2AgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMTo1MS44NzkzMzI4ODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2OTgwOTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXNrX21tdS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvTWFrZWZpbGU9Nj1vYmoteSAgICs9IHByb2Mub1xcbmZzL3Byb2MvTWFrZWZpbGUtNy1cXG5mcy9wcm9jL01ha2VmaWxlOjg6Q0ZMQUdTX3Rhc2tfbW11Lm9cXHQrPSAtV25vLW92ZXJyaWRlLWluaXRcXG5mcy9wcm9jL01ha2VmaWxlLTktcHJvYy15XFx0XFx0XFx0Oj0gbm9tbXUubyB0YXNrX25vbW11Lm9cXG5mcy9wcm9jL01ha2VmaWxlOjEwOnByb2MtJChDT05GSUdfTU1VKVxcdDo9IHRhc2tfbW11Lm9cXG5mcy9wcm9jL01ha2VmaWxlLTExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMTo1Ni41NDkxNTIwOTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTEyOTc4MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgU2NvcGUqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGZsYWfigJRgQ09ORklHX01NVWDigJRhbmQgaXQncyBwaW5naW5nIG15IGJyYWluLiBBaCwgcmlnaHQsIHRoYXQncyBhIHByZXJlcXVpc2l0ZSBmb3IgYHRhc2tfbW11LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBNeSBleHBlcnRpc2Ugc2F5cyBJIHNob3VsZCBjb25maXJtIHRoYXQgdGhpcyBpcyB0cnVlLiBXaGVyZSBkb2VzIHRoaXMgZ2V0IHVzZWQ/IEkgc2hvdWxkIGludmVzdGlnYXRlIGBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXNgLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayB0aGF0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHdpdGhpbiBgbW0vaW50ZXJuYWwuaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCB3aHkgaXQgbmVjZXNzaXRhdGVzIHRoZSBNTVUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjowMC40NjIxMzQxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzQ1MzE3MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTE5NTY9Ym9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xOTYxLSAqL1xcbm1tL2ludGVybmFsLmg6MTk2MjpzdGF0aWMgaW5saW5lIHZvaWQgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2ludGVybmFsLmgtMTk2My17XFxuLS1cXG5tbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL21lbW9yeS5jLTk1NS1cXG5tbS9tZW1vcnkuYzo5NTY6XFx0XFx0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKGRzdF9tbSk7XFxubW0vbWVtb3J5LmMtOTU3LVxcdFxcdC8qIE1hcmsgdGhlIHN3YXAgZW50cnkgYXMgc2hhcmVkLiAqL1xcbi0tXFxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMzA2LVxcdFxcdFxcdH1cXG5tbS9ybWFwLmM6MjMwNzpcXHRcXHRcXHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xcbm1tL3JtYXAuYy0yMzA4LVxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjowMy4yMDc0NjE1NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTAyNjMxNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgQ292ZXJhZ2UqKlxuXG5Pa2F5LCB0aGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHNvbGlkLCBpdCdzIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgaWRlbnRpZmllZCB0aGUgcmlnaHQgYXJlYXMgZm9yIGl0cyBmb2N1cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgbW9zdCByZWxldmFudCBzeW1ib2xzIHRvIGFuYWx5emUuXG5cbkknbSB0aGlua2luZyB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24gYXJlOiBgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwYCDigJMgdGhhdCdzIGNvbWluZyBmcm9tIGBmcy9wcm9jL3Rhc2tfbW11LmNgLCB3aGljaCBpcyBsb2dpY2FsIGdpdmVuIHRoZSBjb250ZXh0LiBUaGVuIHRoZXJlJ3MgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGZyb20gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCBpbXBvcnRhbnQgZm9yIG1lbW9yeSBtaWdyYXRpb24sIGFuZCBgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kYCBmcm9tIGBtbS9odWdlX21lbW9yeS5jYC0tIGNydWNpYWwgZm9yIGhhbmRsaW5nIGh1Z2UgcGFnZXMuIFRoZW4gYGNvcHlfbm9ucHJlc2VudF9wdGVgIGZyb20gYG1tL21lbW9yeS5jYCBzZWVtcyBsaWtlIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgZGVhbGluZyB3aXRoIHBhZ2UgdGFibGUgZW50cmllcy4gRmluYWxseSwgYHRyeV90b191bm1hcF9vbmVgIGZyb20gYG1tL3JtYXAuY2AgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIGFueSB1bm1hcHBpbmcgc2NlbmFyaW8uXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYHBhZ2VtYXBfcG1kX3JhbmdlX3RocGAuIEknbGwgdmVyaWZ5IGlmIGl0J3MgcmVhY2hhYmxlIGFuZCBmdWxseSB1bmRlcnN0b29kIGJ5IHRoZSBwYXRjaC4gVGhhdCB3aWxsIGJlIG15IHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM4MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjowOS4xMTAwOTcxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2MTc2NTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwX3BtZF9yYW5nZV90aHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTIwMjE9c3RhdGljIHBhZ2VtYXBfZW50cnlfdCBwdGVfdG9fcGFnZW1hcF9lbnRyeShzdHJ1Y3QgcGFnZW1hcHJlYWQgKnBtLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwODctI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmZzL3Byb2MvdGFza19tbXUuYzoyMDg4OnN0YXRpYyBpbnQgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwODktXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTIxNjY9c3RhdGljIGludCBwYWdlbWFwX3BtZF9yYW5nZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMTc3LVxcdGlmIChwdGwpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE3ODpcXHRcXHRlcnIgPSBwYWdlbWFwX3BtZF9yYW5nZV90aHAocG1kcCwgYWRkciwgZW5kLCB2bWEsIHBtKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE3OS1cXHRcXHRzcGluX3VubG9jayhwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjoxMi44NzE4NzQyOTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg4MDM1NzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipSZWFjaGluZyB0aGUgVGFyZ2V0KipcblxuQWxyaWdodCwgeWVwLCBsb29rcyBsaWtlIHdlJ3JlIGluIGEgcG9zaXRpb24gdG8gcHJvY2VlZC4gVGhpcyBpcyBsb29raW5nIHByb21pc2luZy5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgb3VyIGFzc3VtcHRpb25zIGJ5IGV4YW1pbmluZyB0aGUgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGZ1bmN0aW9uLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGlzIGlzIHRoZSBjb3JyZWN0IGVudHJ5IHBvaW50IHRvIGFzc2VzcyBpdHMgcm9sZSBpbiB0aGlzIGNvbnRleHQgYmVmb3JlIGNvbW1pdHRpbmcgZnVydGhlciByZXNvdXJjZXMuIFRoZSBhcmNoaXRlY3R1cmUgbmVlZHMgYSBzYW5pdHkgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTM2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTI6MTguNzUyMjM2MDc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQyMzU1NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg9MTMzND1zdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTM0My1cXHQgKiAgIGVuY291bnRlciBub24tcHJlc2VudCBwbWRzLlxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEzNDQ6XFx0ICogLSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgY291bGQgY2FsbHMgdGhpcyBkdXJpbmcgbWlncmF0aW9uXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTM0NS1cXHQgKiAgIG9mIGRldmljZS1wcml2YXRlIHBtZCBlbnRyaWVzLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz04Mj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEyMy1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNDovKiogbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCAtIGNvbGxlY3QgVEhQIHBhZ2VzIHdpdGhvdXQgc3BsaXR0aW5nIHRoZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1LSAqIGZvbGlvIGZvciBkZXZpY2UgcHJpdmF0ZSBwYWdlcy5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM2OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNy1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGssXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTI0ND1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNTktXFx0aWYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyNjA6XFx0XFx0aW50IHJldCA9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kcCwgc3RhcnQsIGVuZCwgd2FsaywgZmF1bHRfZm9saW8pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjoyMy41OTQ2MDcyMDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxOTE0MTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBSZWFjaGFiaWxpdHkgYW5kIGEgU3BlY2lmaWMgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCBzb21ldGhpbmcgaXMgYWNoaWV2YWJsZSwgcmVhY2hhYmxlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdC4gSSdtIGdvaW5nIHRvIGRlbHZlIGludG8gdGhlIGBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWRgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc5MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEyOjI2LjgxMzc1Mzc1MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2MjExNjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0yNTA0PWJvb2wgbW92ZV9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU1NC1cXG5tbS9odWdlX21lbW9yeS5jOjI1NTU6c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU1Ni1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWQsIGJvb2wgdWZmZF93cCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjYwMT1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNjIyLVxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2IHBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjYyMzpcXHRcXHRjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQobW0sIGFkZHIsIHBtZCwgdWZmZF93cCxcXG5tbS9odWdlX21lbW9yeS5jLTI2MjQtXFx0XFx0XFx0XFx0XFx0ICAgIHVmZmRfd3BfcmVzb2x2ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEyOjMwLjg3NTg3OTM2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI3NjM5Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipSZWFjaGluZyBmb3IgYGNvcHlfbm9ucHJlc2VudF9wdGVgKipcblxuT2theSwgeWVzLCB0aGF0IHNvdW5kcyBsaWtlIGEgdmlhYmxlIHBhdGggZm9yd2FyZC4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyBhY2hpZXZhYmxlLiBOb3csIHdoZXJlIGRvIEkgc3RhcnQ/IExldCdzIHpvb20gaW4gYW5kIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBjb3B5X25vbnByZXNlbnRfcHRlYC4gSXQncyBsaWtlbHkgdGhhdCBmdW5jdGlvbiBob2xkcyB0aGUga2V5IHRvIHRoZSBzb2x1dGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG1lY2hhbmljcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjozNC42MDM1MjUzMzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjU0MDgwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9ub25wcmVzZW50X3B0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz05NDA9c3RhdGljIHVuc2lnbmVkIGxvbmdcXG5tbS9tZW1vcnkuYzo5NDE6Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG5tbS9tZW1vcnkuYy05NDItXFx0XFx0cHRlX3QgKmRzdF9wdGUsIHB0ZV90ICpzcmNfcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuLS1cXG5tbS9tZW1vcnkuYz0xMjE3PWNvcHlfcHRlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMTI4OC1cXHRcXHRpZiAodW5saWtlbHkoIXB0ZV9wcmVzZW50KHB0ZW50KSkpIHtcXG5tbS9tZW1vcnkuYzoxMjg5OlxcdFxcdFxcdHJldCA9IGNvcHlfbm9ucHJlc2VudF9wdGUoZHN0X21tLCBzcmNfbW0sXFxubW0vbWVtb3J5LmMtMTI5MC1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wdGUsIHNyY19wdGUsXFxuLS1cXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbXByb3RlY3QuYy0yMzgtXFx0XFx0ICogV2UgZG8gbm90IHByZXNlcnZlIHNvZnQtZGlydGluZXNzLiBTZWVcXG5tbS9tcHJvdGVjdC5jOjIzOTpcXHRcXHQgKiBjb3B5X25vbnByZXNlbnRfcHRlKCkgZm9yIGV4cGxhbmF0aW9uLlxcbm1tL21wcm90ZWN0LmMtMjQwLVxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjozOC42Mjg5NDM5MjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1NjkwNTkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipSZWFjaGluZyBhbiBFbmRwb2ludCoqXG5cblllcywgdGhlIG9iamVjdGl2ZSBpcyB3aXRoaW4gZ3Jhc3AuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIHBhdGggaXMgdmFsaWQgYW5kIHRoYXQgdGhlIHRhcmdldCBjYW4gYmUgcmVhY2hlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHRyeV90b191bm1hcF9vbmVgLiBUaGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgaW4gaGFuZGxpbmcgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGNvbmZsaWN0cywgc28gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgaXMgY3J1Y2lhbC4gSSB3YW50IHRvIGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgaXQgb3BlcmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gSXQncyB0aW1lIHRvIGFuYWx5emUgaXRzIHJvbGUgaW4gZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB1bnN1Y2Nlc3NmdWxseSBjb21wbGV0aW5nIHRoZSBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjU2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTI6NDIuNjg1ODU2MDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzQ4ODE5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3VubWFwX29uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTQ0MD1UaGVyZSBpcyBhbHNvIGEgZmlsZS1zeXN0ZW0gc3BlY2lmaWMgbG9jayBvcmRlcmluZyBjb21tZW50IGxvY2F0ZWQgYXQgdGhlIHRvcCBvZlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00NzYtICAtXFx1MDAzZXBhZ2VfdGFibGVfbG9jayBvciBwdGVfbG9ja1xcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NDc3OiAgICAtXFx1MDAzZXN3YXBfbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAodHJ5X3RvX3VubWFwX29uZSlcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ3ODogICAgLVxcdTAwM2Vwcml2YXRlX2xvY2sgICAgICAgICAgICAgICAgICAgICAgKHRyeV90b191bm1hcF9vbmUpXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0Nzk6ICAgIC1cXHUwMDNlaV9wYWdlcyBsb2NrICAgICAgICAgICAgICAgICAgICAgICh0cnlfdG9fdW5tYXBfb25lKVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNDgwLSAgICAtXFx1MDAzZWxydXZlYy1cXHUwMDNlbHJ1X2xvY2sgICAgICAgICAgICAgICAgICAoZm9sbG93X3BhZ2VfbWFzay1cXHUwMDNlbWFya19wYWdlX2FjY2Vzc2VkKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0PTU1NT1ybWFwJ3MgZm9saW9fcmVmZXJlbmNlZF9vbmUoKSwgY2FsbGVkIHZpYSB2bXNjYW4ncyBzaHJpbmtfYWN0aXZlX2xpc3QoKSBvclxcbkRvY3VtZW50YXRpb24vbW0vdW5ldmljdGFibGUtbHJ1LnJzdDo1NTY6c2hyaW5rX2ZvbGlvX2xpc3QoKSwgYW5kIHJtYXAncyB0cnlfdG9fdW5tYXBfb25lKCkgY2FsbGVkIHZpYSBzaHJpbmtfZm9saW9fbGlzdCgpLFxcbkRvY3VtZW50YXRpb24vbW0vdW5ldmljdGFibGUtbHJ1LnJzdC01NTctY2hlY2sgZm9yICgzKSBwYWdlcyBzdGlsbCBtYXBwZWQgaW50byBWTV9MT0NLRUQgVk1BcywgYW5kIGNhbGwgbWxvY2tfdm1hX2ZvbGlvKClcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11Lmg9MTk9dHlwZWRlZiBzdHJ1Y3Qge1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaC0zMy0gKiByb2xsb3ZlciBldmVudCAoc2VlIG5ld19jb250ZXh0KCkgYW5kIGZsdXNoX2NvbnRleHQoKSkuIEluIHRoaXMgY2FzZSxcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oOjM0OiAqIGEgY29uY3VycmVudCBUTEJJIChlLmcuIHZpYSB0cnlfdG9fdW5tYXBfb25lKCkgYW5kIHB0ZXBfY2xlYXJfZmx1c2goKSlcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oLTM1LSAqIG1heSB1c2UgYSBzdGFsZSBBU0lELiBUaGlzIGlzIGZpbmUgaW4gcHJpbmNpcGxlIGFzIHRoZSBuZXcgQVNJRCBpc1xcbi0tXFxuZnMvbmlsZnMyL2lub2RlLmM9MTc3PXN0YXRpYyBib29sIG5pbGZzX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbmlsZnMyL2lub2RlLmMtMTg1LVxcdC8qXFxuZnMvbmlsZnMyL2lub2RlLmM6MTg2OlxcdCAqIFRoZSBwYWdlIG1heSBub3QgYmUgbG9ja2VkLCBlZyBpZiBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXBfb25lKClcXG5mcy9uaWxmczIvaW5vZGUuYy0xODctXFx0ICovXFxuLS1cXG5tbS9maWxlbWFwLmMtMTE0LSAqICAtXFx1MDAzZXBhZ2VfdGFibGVfbG9jayBvciBwdGVfbG9ja1xcbm1tL2ZpbGVtYXAuYzoxMTU6ICogICAgLVxcdTAwM2Vzd2FwX2xvY2tcXHRcXHQodHJ5X3RvX3VubWFwX29uZSlcXG5tbS9maWxlbWFwLmM6MTE2OiAqICAgIC1cXHUwMDNlcHJpdmF0ZV9sb2NrXFx0XFx0KHRyeV90b191bm1hcF9vbmUpXFxubW0vZmlsZW1hcC5jOjExNzogKiAgICAtXFx1MDAzZWlfcGFnZXMgbG9ja1xcdFxcdCh0cnlfdG9fdW5tYXBfb25lKVxcbm1tL2ZpbGVtYXAuYy0xMTgtICogICAgLVxcdTAwM2VscnV2ZWMtXFx1MDAzZWxydV9sb2NrXFx0KGZvbGxvd19wYWdlX21hc2stXFx1MDAzZW1hcmtfcGFnZV9hY2Nlc3NlZClcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjM4NT1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU3MC1cXHQgKiBleGFtcGxlIGlzIGFuIG1sb2NrZWQgcGFnZSwgd2hlcmUgUEdfbWxvY2tlZCBpcyBjbGVhcmVkIGJ5XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTcxOlxcdCAqIGZvbGlvX3JlbW92ZV9ybWFwXyooKSBpbiB0cnlfdG9fdW5tYXBfb25lKCkuIFNvIHRvIGRldGVybWluZSBwYWdlXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTcyLVxcdCAqIHN0YXR1cyBjb3JyZWN0bHksIHdlIHNhdmUgYSBjb3B5IG9mIHRoZSBwYWdlIGZsYWdzIGF0IHRoaXMgdGltZS5cXG4tLVxcbm1tL21sb2NrLmM9NDY3PXN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21sb2NrLmMtNTAzLVxcdCAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS5cXG5tbS9tbG9jay5jOjUwNDpcXHQgKiBJdCdzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2VcXG5tbS9tbG9jay5jLTUwNS1cXHQgKiBzZXQgVk1fTE9DS0VELCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXFxuLS1cXG5tbS9ybWFwLmM9MTk0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0xOTgzLSAqL1xcbm1tL3JtYXAuYzoxOTg0OnN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vcm1hcC5jLTE5ODUtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcXG4tLVxcbm1tL3JtYXAuYz0yMzg5PXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTIzOTEtXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG5tbS9ybWFwLmM6MjM5MjpcXHRcXHQucm1hcF9vbmUgPSB0cnlfdG9fdW5tYXBfb25lLFxcbm1tL3JtYXAuYy0yMzkzLVxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjo0Ni43NjA3NTE4MjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzMDYxOTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbiBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFuZCBEZXZpY2UgTWlncmF0aW9uKipcblxuT2theSwgc28gdGhlIGdvYWwgaXMgZGVmaW5pdGVseSBhY2hpZXZhYmxlLiBOb3csIGxldCdzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCDigJMgdGhhdCdzIGNydWNpYWwuIEkgYWxzbyBrbm93IGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgaXMgZXNzZW50aWFsIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gYWZ0ZXIsIGFuZCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIE9mIGNvdXJzZSwgYENPTkZJR19NTVVgIGlzIGdlbmVyYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBJJ2xsIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjb25maXJtIGl0J3MgcHJlc2VudC4gQW5kLCBnaXZlbiB0aGF0IG1pZ3JhdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBwcm9jZXNzLCBJIHNlZSBJJ2xsIG5lZWQgYENPTkZJR19NSUdSQVRJT05gIGZvciBgbW0vbWlncmF0ZS5jYC4gSSBzaG91bGQgcHJvYmFibHkgY3Jvc3MtcmVmZXJlbmNlIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgaW4gYG1tL0tjb25maWdgIGp1c3QgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGJlZm9yZSBJIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjo1MS4xOTEzNzUyNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODkyMTUwNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9NSUdSQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTktXFxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTcwMS1cXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTI6NTYuODgwNjA1NjczWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjUxOTkyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHpvbmUgZGV2aWNlcyBhbmQgbWlncmF0aW9uIOKAkyB0aG9zZSBhcmUgZGVmaW5pdGVseSBrZXksIHNvIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX01JR1JBVElPTmAgYXJlIGVzc2VudGlhbCBwcmVyZXF1aXNpdGVzLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIHdpbGwgYmUgaW1wYWN0aW5nIHRoaXMgc2V0dXAuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIHJlYXNvbmFibGUgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBhcyB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2Ugc2V0dGluZ3MgYXJlIGxvY2F0ZWQgdGhlcmUuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDQ5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTM6MDAuODQ1ODA5MzE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTcxNjk5ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODQ1LVxcbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTg0Ny1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg2OS1cXG5tbS9LY29uZmlnOjg3MDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NzEtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzYtXFxubW0vS2NvbmZpZzo4Nzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg3OC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04ODUtXFxubW0vS2NvbmZpZzo4ODY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04ODctXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg5Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTAyLVxcbm1tL0tjb25maWc6OTAzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MDQtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxMi1cXG5tbS9LY29uZmlnOjkxMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkxNC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyMC1cXG5tbS9LY29uZmlnOjkyMTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTIyLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjgtXFxubW0vS2NvbmZpZzo5Mjk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MzAtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTk0Ny1cXG5tbS9LY29uZmlnOjk0ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTQ5LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTYtXFxubW0vS2NvbmZpZzo5NTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjQtXFxubW0vS2NvbmZpZzo5NjU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk2Ni1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTcyLVxcbm1tL0tjb25maWc6OTczOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTc0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTM6MDUuODE3NTE4ODY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTcxOTk2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFuZCBITU0gTWlycm9yaW5nKipcblxuUmlnaHQsICpUcmFuc3BhcmVudCBIdWdlcGFnZXMqIGFyZSB0aGUgaW1tZWRpYXRlIHJlcXVpcmVtZW50IGhlcmUuIE5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBvcGVyYXRpb25hbC5cblxuTm93LCB3aGVyZSBkaWQgSSBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaGFuZGxpbmcgbWVtb3J5IG1pcnJvcmluZz8gVGhhdCByaW5ncyBhIGJlbGwuLi4gSSB0aGluayBpdCBtaWdodCBiZSBpbiBgaG1tLmNgLiBMZXQgbWUganVzdCBxdWlja2x5IHNjYW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuLi4gWWVzLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGBDT05GSUdfSE1NX01JUlJPUmAgb3Igc29tZXRoaW5nICpzaW1pbGFyKiB3aXRoaW4gdGhlIGBobW0uY2AgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgaW50ZXJwbGF5IG9mIFRIUCB3aXRoIGFueSBtZW1vcnkgbWlycm9yaW5nIGltcGxlbWVudGF0aW9ucyBpcyB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHRvIGNvbmZpcm0gY29ycmVjdCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNDgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMzoxMC4wMzQ3MjM0ODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDAxNzcwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM9MjQ3PXN0YXRpYyBib29sIGFtZHhkbmFfaG1tX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLFxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtMjgyLVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jOjI4MzpzdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgYW1keGRuYV9obW1fb3BzID0ge1xcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jLTI4NC1cXHQuaW52YWxpZGF0ZSA9IGFtZHhkbmFfaG1tX2ludmFsaWRhdGUsXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYz0zNDI9c3RhdGljIGludCBhbWR4ZG5hX2htbV9yZWdpc3RlcihzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8sXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy0zNzItXFx0XFx0XFx0XFx0XFx0XFx0ICBsZW4sXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM6MzczOlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmFtZHhkbmFfaG1tX29wcyk7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtMzc0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlPTMyMj1hbWRncHUtJChDT05GSUdfQUNQSSkgKz0gYW1kZ3B1X2FjcGkub1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlOjMyMzphbWRncHUtJChDT05GSUdfSE1NX01JUlJPUikgKz0gYW1kZ3B1X2htbS5vXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUtMzI0LVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYz0zMjQ9aW50IGliX3VtZW1fb2RwX21hcF9kbWFfYW5kX2xvY2soc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCwgdTY0IHVzZXJfdmlydCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzMwLVxcdGludCBwZm5faW5kZXgsIGRtYV9pbmRleCwgcmV0ID0gMCwgc3RhcnRfaWR4O1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM6MzMxOlxcdHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0LCBobW1fb3JkZXIsIHBmbl9zdGFydF9pZHg7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy0zMzItXFx0dW5zaWduZWQgbG9uZyBudW1fcGZucywgY3VycmVudF9zZXE7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTQwNC1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjQwNTpcXHRcXHRobW1fb3JkZXIgPSBobW1fcGZuX3RvX21hcF9vcmRlcihyYW5nZS5obW1fcGZuc1twZm5faW5kZXhdKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTQwNi1cXHRcXHQvKiBJZiBhIGh1Z2VwYWdlIHdhcyBkZXRlY3RlZCBhbmQgT0RQIHdhc24ndCBzZXQgZm9yLCB0aGUgdW1lbVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy00MDgtXFx0XFx0ICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYzo0MDk6XFx0XFx0aWYgKGhtbV9vcmRlciArIFBBR0VfU0hJRlQgXFx1MDAzYyBwYWdlX3NoaWZ0KSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy00MTAtXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTQxMS1cXHRcXHRcXHRpYmRldl9kYmcodW1lbV9vZHAtXFx1MDAzZXVtZW0uaWJkZXYsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYzo0MTI6XFx0XFx0XFx0XFx0ICBcXFwiJXM6IHVuLWV4cGVjdGVkIGhtbV9vcmRlciAldSwgcGFnZV9zaGlmdCAldVxcXFxuXFxcIixcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjQxMzpcXHRcXHRcXHRcXHQgIF9fZnVuY19fLCBobW1fb3JkZXIsIHBhZ2Vfc2hpZnQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtNDE0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvTWFrZWZpbGU9MTU9YXRvbWlzcC1vYmpzICs9IFxcXFxcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL01ha2VmaWxlLTQ0LVxcdHBjaS9obW0vaG1tX2JvLm8gXFxcXFxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL01ha2VmaWxlOjQ1OlxcdHBjaS9obW0vaG1tLm8gXFxcXFxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL01ha2VmaWxlLTQ2LVxcdHBjaS9pYV9jc3NfZGV2aWNlX2FjY2Vzcy5vIFxcXFxcXG4tLVxcbmxpYi9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSArPSB0ZXN0X2xvY2t1cC5vXFxubGliL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfVEVTVF9ITU0pICs9IHRlc3RfaG1tLm9cXG5saWIvTWFrZWZpbGUtMTA0LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICs9IHRlc3RfZnJlZV9wYWdlcy5vXFxuLS1cXG5tbS9NYWtlZmlsZT0xMzg9b2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBtZW1yZW1hcC5vXFxubW0vTWFrZWZpbGU6MTM5Om9iai0kKENPTkZJR19ITU1fTUlSUk9SKSArPSBobW0ub1xcbm1tL01ha2VmaWxlLTE0MC1vYmotJChDT05GSUdfTUVNRkRfQ1JFQVRFKSArPSBtZW1mZC5vXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xMTk9RklYVFVSRV9WQVJJQU5UX0FERChobW0yLCBobW0yX2RldmljZV9jb2hlcmVudClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTEyNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxMjU6c3RhdGljIGludCBobW1fb3BlbihpbnQgdW5pdClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMjYte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTQzPUZJWFRVUkVfU0VUVVAoaG1tKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTQ3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE0ODpcXHRzZWxmLVxcdTAwM2VmZCA9IGhtbV9vcGVuKHZhcmlhbnQtXFx1MDAzZWRldmljZV9udW1iZXIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE0OS1cXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGhtbV9pc19jb2hlcmVudF90eXBlKHZhcmlhbnQtXFx1MDAzZWRldmljZV9udW1iZXIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTU0PUZJWFRVUkVfU0VUVVAoaG1tMilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE1OC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNTk6XFx0c2VsZi1cXHUwMDNlZmQwID0gaG1tX29wZW4odmFyaWFudC1cXHUwMDNlZGV2aWNlX251bWJlcjApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE2MC1cXHRpZiAoc2VsZi1cXHUwMDNlZmQwIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBobW1faXNfY29oZXJlbnRfdHlwZSh2YXJpYW50LVxcdTAwM2VkZXZpY2VfbnVtYmVyMCkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjItXFx0QVNTRVJUX0dFKHNlbGYtXFx1MDAzZWZkMCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTYzOlxcdHNlbGYtXFx1MDAzZWZkMSA9IGhtbV9vcGVuKHZhcmlhbnQtXFx1MDAzZWRldmljZV9udW1iZXIxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjQtXFx0QVNTRVJUX0dFKHNlbGYtXFx1MDAzZWZkMSwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz01NDI9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9jaGlsZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTYyMy1cXHRcXHRcXHQvKiBUaGUgY2hpbGQgcHJvY2VzcyBuZWVkcyBpdHMgb3duIG1pcnJvciB0byBpdHMgb3duIG1tLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjYyNDpcXHRcXHRcXHRjaGlsZF9mZCA9IGhtbV9vcGVuKDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTYyNS1cXHRcXHRcXHRBU1NFUlRfR0UoY2hpbGRfZmQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NjQ5PVRFU1RfRihobW0sIGFub25fd3JpdGVfY2hpbGRfc2hhcmVkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNzA1LVxcdC8qIFRoZSBjaGlsZCBwcm9jZXNzIG5lZWRzIGl0cyBvd24gbWlycm9yIHRvIGl0cyBvd24gbW0uICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6NzA2OlxcdGNoaWxkX2ZkID0gaG1tX29wZW4oMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNzA3LVxcdEFTU0VSVF9HRShjaGlsZF9mZCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEzOjE0Ljc3NDkwOTU0NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODMxMzk5NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gUHV6emxlKipcblxuT2theSwgc28gSSdtIHB1dHRpbmcgdG9nZXRoZXIgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX0hNTV9NSVJST1JgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgZm9yIGBobW0uY2AuIEdvdCBpdC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGluIG15IG5vdGVzLlxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIHdpdGhpbiBgbW0vS2NvbmZpZ2AuIFJpZ2h0LCBpdCBkZXBlbmRzIG9uIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBTbywgYENPTkZJR19aT05FX0RFVklDRWAgaXMgZXNzZW50aWFsIGhlcmUuIEkga25ldyB0aGVyZSB3YXMgc29tZXRoaW5nIGVsc2UgaW4gdGhhdCBtaXguXG5cbk5vdyBsZXQncyBjaGVjayBgQ09ORklHX01JR1JBVElPTmAuIEFoLCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBlaXRoZXIgYE5VTUFgIG9yIGBDT01QQUNUSU9OYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBzdHJhaWdodCBmb3J3YXJkLlxuXG5MZXQncyBjaGVjayBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGYC4gQWN0dWFsbHksIG5vLCBpdCBsb29rcyBsaWtlIGl0J3MgaW5kaXJlY3RseSBlbmFibGVkLiBJdCdzIHNlbGVjdGVkIGJ5IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNvIG5vIG5lZWQgdG8gbWFuYWdlIHRoYXQgZGlyZWN0bHkuIFNhdmVkIHRoYXQgZm9yIGxhdGVyLlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlOiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgREVWSUNFX01JR1JBVElPTmAsIGBaT05FX0RFVklDRWAsIGFuZCBgSE1NX01JUlJPUmAuXG5cbldhaXQsIGhvbGQgb24sIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBhIGBkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFYC4gU28gSSBjYW4ndCBlbmFibGUgaXQgZGlyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFpPTkVfREVWSUNFYCBhbmQgYE1JR1JBVElPTmAgYXJlIGVuYWJsZWQuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayBpZiBlbmFibGluZyBgTUlHUkFUSU9OYCBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLiBJIGJldHRlciBnbyBhbmQgY2hlY2sgYFpPTkVfREVWSUNFYCBpbiBgbW0vS2NvbmZpZ2AgdG9vLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQgY29uZmlndXJhdGlvbiB3aWxsIGJlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MTQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTM6MjEuNjA2MzE0MjQxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQ4OTczNDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcXG4tLVxcbm1tL0tjb25maWctMTIzNS1cXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjM3LVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEzOjI1Ljg1NTMwMjM1OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM0OTMzNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29uZmlndXJhdGlvbiBWYXJpYWJsZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBaT05FX0RFVklDRWAsIHdoaWNoIHRoZSBjb2RlIHNlZW1zIHRvIHRyZWF0IGFzIGEgc3RyYWlnaHRmb3J3YXJkIGJvb2xlYW4uIE9rYXksIHRoYXQncyBmaW5lLCBidXQgSSdkIGxpa2UgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYSBiaXQgYmV0dGVyLiBUaGlzIHVzdWFsbHkgbGVhZHMgbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cbkdpdmVuIGl0cyBwdXJwb3NlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBob3cgYEhNTV9NSVJST1JgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEknbGwgbmVlZCB0byBoZWFkIG92ZXIgdG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGxpdmUsIHNvIHRoYXQncyB0aGUgcGxhY2UgdG8gcmVmcmVzaCBteSBtZW1vcnksIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgWk9ORV9ERVZJQ0VgIGFuZCBgSE1NX01JUlJPUmAgaXMgd2VsbC11bmRlcnN0b29kLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEzOjMwLjA5MDI0MTc3N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNDA4Nzc0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSE1NX01JUlJPUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMzY9Y29uZmlnIFpPTkVfREVWSUNFXFxuLS1cXG5tbS9LY29uZmlnLTEyNTktI1xcbm1tL0tjb25maWc6MTI2MDpjb25maWcgSE1NX01JUlJPUlxcbm1tL0tjb25maWctMTI2MS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEzOjM0Ljg5NDM0Mzk4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTM3MTA4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgSE1NX01JUlJPUmAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBITU1fTUlSUk9SYCBpcyBhIGJvb2xlYW4sIGEgc3RyYWlnaHRmb3J3YXJkIG9uL29mZiBraW5kIG9mIHNldHRpbmcuIFRoZSB0aGluZyB0aGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiBpcyB0aGF0IHRoZXJlJ3Mgbm8gYXNzb2NpYXRlZCBwcm9tcHQgZGVmaW5lZCBmb3IgaXQuIFRoYXQncyBhIGJpdCB1bnVzdWFsLCBhbmQgaXQgdGVsbHMgbWUgdGhpcyBpc24ndCBzb21ldGhpbmcgdGhlIHVzZXIgaXMgbGlrZWx5IGRpcmVjdGx5IGNvbmZpZ3VyaW5nIHRocm91Z2ggYSBzdGFuZGFyZCBtZW51LiBJdCdzIHByb2JhYmx5IHNlbGVjdGVkIGludGVybmFsbHksIGxpa2VseSBieSB0aGUgZHJpdmVycyB0aGVtc2VsdmVzLCBiYXNlZCBvbiBzb21lIHVuZGVybHlpbmcgY29uZGl0aW9uIG9yIGRldGVjdGlvbi4gVGhpcyBtZWFucyBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogZXhhY3RseSBpcyB0cmlnZ2VyaW5nIHRoYXQgc2VsZWN0aW9uLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgb3IgY29kZSBwYXRocyB0aGF0IGFyZSBzZXR0aW5nIHRoaXMgcGFydGljdWxhciBib29sZWFuLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NjYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMzo0MC4yNDgwNjY1OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwMjQ4MjcwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSE1NX01JUlJPUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvS2NvbmZpZz0zPWNvbmZpZyBEUk1fQUNDRUxfQU1EWEROQVxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWctMTEtXFx0c2VsZWN0IEZXX0xPQURFUlxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnOjEyOlxcdHNlbGVjdCBITU1fTUlSUk9SXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWctMTMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWc9MjI4PWNvbmZpZyBEUk1fR1BVU1ZNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMzAtXFx0ZGVwZW5kcyBvbiBEUk1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoyMzE6XFx0c2VsZWN0IEhNTV9NSVJST1JcXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMzItXFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvS2NvbmZpZz03NT1jb25maWcgRFJNX0FNREdQVV9VU0VSUFRSXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9LY29uZmlnLTc3LVxcdGRlcGVuZHMgb24gRFJNX0FNREdQVVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L0tjb25maWc6Nzg6XFx0c2VsZWN0IEhNTV9NSVJST1JcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9LY29uZmlnLTc5LVxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWc9Nj1jb25maWcgSFNBX0FNRFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gRFJNX0FNREdQVSBcXHUwMDI2XFx1MDAyNiAoWDg2XzY0IHx8IEFSTTY0IHx8IFBQQzY0IHx8IChSSVNDViBcXHUwMDI2XFx1MDAyNiA2NEJJVCkgfHwgKExPT05HQVJDSCBcXHUwMDI2XFx1MDAyNiA2NEJJVCkpXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZzo5OlxcdHNlbGVjdCBITU1fTUlSUk9SXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0xMC1cXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnPTE1PWNvbmZpZyBIU0FfQU1EX1NWTVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0xOC1cXHRkZWZhdWx0IHlcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnOjE5OlxcdHNlbGVjdCBITU1fTUlSUk9SXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0yMC1cXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnPTk0PWNvbmZpZyBEUk1fTk9VVkVBVV9TVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTgtXFx0ZGVwZW5kcyBvbiBTVEFHSU5HXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZzo5OTpcXHRzZWxlY3QgSE1NX01JUlJPUlxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctMTAwLVxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZz02OD1jb25maWcgTVNIVl9ST09UXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNzktXFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuZHJpdmVycy9odi9LY29uZmlnOjgwOlxcdHNlbGVjdCBITU1fTUlSUk9SXFxuZHJpdmVycy9odi9LY29uZmlnLTgxLVxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTUxPWNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTU1LVxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTY6XFx0c2VsZWN0IEhNTV9NSVJST1JcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Ny1cXHRkZWZhdWx0IHlcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTMzMjY9Y29uZmlnIFRFU1RfSE1NXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI5LVxcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzMwOlxcdHNlbGVjdCBITU1fTUlSUk9SXFxubGliL0tjb25maWcuZGVidWctMzMzMS1cXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnPTEyNjc9Y29uZmlnIERFVklDRV9QUklWQVRFXFxuLS1cXG5tbS9LY29uZmlnLTEyNzQtXFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXFxubW0vS2NvbmZpZzoxMjc1OlxcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxcbm1tL0tjb25maWctMTI3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTM6NDQuMzUwNTY3NzEyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDQ1ODU2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgSE1NIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gaXMgc2V0IHVwIHNvIHRoYXQgdGhlIGBURVNUX0hNTWAgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIEkgYXNzdW1lIGlzIGZvciBzb21lIGtpbmQgb2YgSGlkZGVuIE1hcmtvdiBNb2RlbCB0ZXN0aW5nLCBpcyB0cmlnZ2VyaW5nIHRoZSBzZWxlY3Rpb24gb2YgYEhNTV9NSVJST1JgLiBUaGF0J3MgYSByZWFzb25hYmxlIGNvbm5lY3Rpb247IG1pcnJvcmluZyBtaWdodCBiZSBhIHByZXJlcXVpc2l0ZSBvciBhIHN1cHBvcnRpbmcgZWxlbWVudCBmb3IgcHJvcGVyIEhNTSB0ZXN0aW5nLiBTbywgZW5hYmxpbmcgYFRFU1RfSE1NYCBkaXJlY3RseSBpbXBsaWVzIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBtaXJyb3IgY29uZmlndXJhdGlvbi4gTm93LCBJIHNlZSB0aGF0IGBURVNUX0hNTWAgYWxzbyBoYXMgYSBkZXBlbmRlbmN5IG9uIGBERVZJQ0VfUFJJVkFURWAuIE5hdHVyYWxseSwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSB0ZXN0aW5nLCBvciBtYWtpbmcgYSBkZWNpc2lvbiBvbiBob3cgdG8gcHJvY2VlZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBERVZJQ0VfUFJJVkFURWAuIEtub3dpbmcgZXhhY3RseSB3aGF0IHRoYXQgY29tcG9uZW50IGVuY29tcGFzc2VzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpZiBlbmFibGluZyBpdCBmb3IgdGVzdGluZyBoYXMgYW55IGltcGFjdCwgcGVyaGFwcyBvbiBzZWN1cml0eSwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IgYW55IG90aGVyIGFyZWEgb2YgdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmbGFnIGlzIGFsbCBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NTYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMzo0OC43NTUxNTg0MjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODE5OTMyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI2ND1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuLS1cXG5tbS9LY29uZmlnLTEyNjYtXFxubW0vS2NvbmZpZzoxMjY3OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTI2OC1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEzOjUzLjQzNzE2MThaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzODg1MjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIERldmljZSBGZWF0dXJlcyoqXG5cbkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhlIHBsYW4gaXMgdG8gZW5hYmxlIGBERVZJQ0VfUFJJVkFURWAgYW5kIGBURVNUX0hNTWAuIE1ha2VzIHNlbnNlLCB0aG9zZSBhcmUga2V5IGZvciB0aGUgdXBjb21pbmcgYW5hbHlzaXMuIEhvd2V2ZXIsIEkgcmVjYWxsIHRoYXQgYERFVklDRV9QUklWQVRFYCBpc24ndCBhIHN0YW5kYWxvbmUgZmVhdHVyZS4gTXkgaW50ZXJuYWwgZGVwZW5kZW5jeSBncmFwaCBpcyBhbHJlYWR5IGhpZ2hsaWdodGluZyB0aGF0IGBERVZJQ0VfUFJJVkFURWAgaXMgY29udGluZ2VudCBvbiBgWk9ORV9ERVZJQ0VgLiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGVuYWJsaW5nIGBERVZJQ0VfUFJJVkFURWAsIEkgbmVlZCB0byBtYWtlIHN1cmUgYFpPTkVfREVWSUNFYCBpcyBzb3J0ZWQuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3Mgc2V0IHByb3Blcmx5IGJlZm9yZSBnb2luZyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aC4gSSBuZWVkIHRvIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBtYWtlIGEgZmV3IG1pbm9yIGFkanVzdG1lbnRzIHRvIGVuc3VyZSB0aGUgcHJlcmVxdWlzaXRlcyBhcmUgbWV0LiBJIGFtIG5vdCBzZWVpbmcgdGhhdCBhcyBhbiBpc3N1ZSwganVzdCBhIGNoZWNrcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTMwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTM6NTcuNDc2MDE4NzY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI1NTU1MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZJQ0VfUFJJVkFURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyNjQ9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbi0tXFxubW0vS2NvbmZpZy0xMjY2LVxcbm1tL0tjb25maWc6MTI2Nzpjb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNjgtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDowMS4xMDE1ODUxNDVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MDQ4MjA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYG1tL0tjb25maWdgIGFuZCBgREVWSUNFX1BSSVZBVEVgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgbGV0J3MganVzdCBxdWlja2x5IGNoZWNrIGBtbS9LY29uZmlnYC4gSSd2ZSBnb3QgdGhpcyBndXQgZmVlbGluZyB0aGF0IGBERVZJQ0VfUFJJVkFURWAgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQgaGVyZS4gSXQncyBhIGNvbW1vbiBhcmVhIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGUgbmFtZSBkZWZpbml0ZWx5IHJpbmdzIGEgYmVsbC4gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGF0IHRoaXMgcGFydGljdWxhciBzZWN0aW9uIG9mdGVuIGhvdXNlcyBzZXR0aW5ncyByZWxhdGVkIHRvIGRldmljZS1zcGVjaWZpYyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgcGVybWlzc2lvbnMsIHNvIHRoYXQncyB0aGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBsb29raW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgc29saWQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDowNS4wODIwNzE5ODlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI2MDpcXHRjb25maWcgSE1NX01JUlJPUlxcbjEyNjE6XFx0XFx0Ym9vbFxcbjEyNjI6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xMjYzOlxcdFxcbjEyNjQ6XFx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbjEyNjU6XFx0XFx0Ym9vbFxcbjEyNjY6XFx0XFxuMTI2NzpcXHRjb25maWcgREVWSUNFX1BSSVZBVEVcXG4xMjY4OlxcdFxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG4xMjY5OlxcdFxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG4xMjcwOlxcdFxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG4xMjcxOlxcdFxcbjEyNzI6XFx0XFx0aGVscFxcbjEyNzM6XFx0XFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxcbjEyNzQ6XFx0XFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXFxuMTI3NTpcXHRcXHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cXG4xMjc2OlxcdFxcbjEyNzc6XFx0Y29uZmlnIFZNQVBfUEZOXFxuMTI3ODpcXHRcXHRib29sXFxuMTI3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6MDUuMDgyMjcwMDg5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTg0MzYyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBERVZJQ0VfUFJJVkFURWAgaGVyZSwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgWk9ORV9ERVZJQ0VgLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUsIGJ1dCBub3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBgWk9ORV9ERVZJQ0VgIGl0c2VsZiBpcyBob29rZWQgdXAgdG8uIExldCdzIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFpPTkVfREVWSUNFYCB0byBzZWUgd2hhdCBlbHNlIHRoaXMgYWZmZWN0cy4gSXQncyB0aW1lIHRvIGJ1aWxkIG91dCB0aGF0IGRlcGVuZGVuY3kgZ3JhcGggYW5kIG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kIGFsbCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZXNlIHJlbGF0aW9uc2hpcHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHRoYXQgZ2V0cyBjYXNjYWRlZCBieSB0aGF0IGNvbm5lY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTA1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDowOS4wMDA3MTEyNThaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzMDpcXHRcXG4xMjMxOlxcdGNvbmZpZyBaT05FX0RNQTMyXFxuMTIzMjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IERNQTMyIHpvbmVcXFwiIGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxcbjEyMzM6XFx0XFx0ZGVwZW5kcyBvbiAhWDg2XzMyXFxuMTIzNDpcXHRcXHRkZWZhdWx0IHkgaWYgQVJNNjRcXG4xMjM1OlxcdFxcbjEyMzY6XFx0Y29uZmlnIFpPTkVfREVWSUNFXFxuMTIzNzpcXHRcXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbjEyMzg6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xcbjEyMzk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXFxuMTI0MDpcXHRcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuMTI0MTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuMTI0MjpcXHRcXG4xMjQzOlxcdFxcdGhlbHBcXG4xMjQ0OlxcdFxcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcXG4xMjQ1OlxcdFxcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcXG4xMjQ2OlxcdFxcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXFxuMTI0NzpcXHRcXHQgIFxcXCJkZXZpY2UtcGh5c2ljYWxcXFwiIGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXFxuMTI0ODpcXHRcXHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cXG4xMjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDowOS4wMDA5MjIyNjhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzODQxMjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBmb3JtYXR0ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogWk9ORV9ERVZJQ0UqKlxuXG5SaWdodCwgc28gYFpPTkVfREVWSUNFYC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIG9uZSwgYW5kIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBpdHMgcmVsYXRpb25zaGlwcy4gSSBrbm93IHRoYXQgYFpPTkVfREVWSUNFYCByZWxpZXMgcHJldHR5IGhlYXZpbHkgb24gYSBmZXcgb3RoZXIga2V5IGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBvZiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBUaG9zZSBzZWVtIGxpa2UgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGZvciBhbnl0aGluZyBkZWFsaW5nIHdpdGggZGV2aWNlIG1lbW9yeSB6b25lcy4gSSd2ZSBvZnRlbiBzZWVuIHRoZXNlIGVuYWJsZWQsIGVzcGVjaWFsbHkgd2hlbiBJJ20gd29ya2luZyB3aXRoIHN5emthbGxlciBjb25maWd1cmF0aW9ucywgd2hpY2ggdGVuZHMgdG8gYmUgd2hlcmUgSSdtIHBva2luZyBhcm91bmQgaW4gdGhpcyBraW5kIG9mIGFyZWEuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiBzeXprYWxsZXIncyBmb2N1cyBvbiBmYXVsdCBpbmplY3Rpb24gYW5kIHRlc3RpbmcuXG5cbk5vdywgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IGNoZWNrIGBERVZJQ0VfTUlHUkFUSU9OYCwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDoxMy4xMzkzNDEzMTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjkwOlxcdFxcdGhlbHBcXG4gNjkxOlxcdFxcdCAgU3VwcG9ydCB0aGUgbWlncmF0aW9uIG9mIHBhZ2VzIHRvIG90aGVyIE5VTUEgbm9kZXMsIGF2YWlsYWJsZSB0b1xcbiA2OTI6XFx0XFx0ICB1c2VyIHNwYWNlIHRocm91Z2ggaW50ZXJmYWNlcyBsaWtlIG1pZ3JhdGVfcGFnZXMoKSwgbW92ZV9wYWdlcygpLFxcbiA2OTM6XFx0XFx0ICBhbmQgbWJpbmQoKS4gU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGFsc28gZW5hYmxlcyBzdXBwb3J0IGZvciBwYWdlXFxuIDY5NDpcXHRcXHQgIGRlbW90aW9uIGZvciBtZW1vcnkgdGllcmluZy5cXG4gNjk1OlxcdFxcbiA2OTY6XFx0Y29uZmlnIE1JR1JBVElPTlxcbiA2OTc6XFx0XFx0Ym9vbFxcbiA2OTg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNjk5OlxcdFxcbiA3MDA6XFx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG4gNzAxOlxcdFxcdGRlZl9ib29sIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBaT05FX0RFVklDRVxcbiA3MDI6XFx0XFxuIDcwMzpcXHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXFxuIDcwNDpcXHRcXHRib29sXFxuIDcwNTpcXHRcXG4gNzA2OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbiA3MDc6XFx0XFx0Ym9vbFxcbiA3MDg6XFx0XFxuIDcwOTpcXHRjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6MTMuMTM5NTM2ODg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzE3MDI1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQXV0b21hdGljIERldmljZSBNaWdyYXRpb24gYW5kIERlcGVuZGVuY3kgQ2hlY2tzKipcblxuUmlnaHQsIHNvIGl0J3MgY2xlYXIgdGhhdCB0aGUgc3lzdGVtIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBgREVWSUNFX01JR1JBVElPTmAgd2hlbiBib3RoIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgIGZlYXR1cmVzIGFyZSBhY3RpdmUuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgaXQgc3RyZWFtbGluZXMgdGhlIHNldHVwIGFuZCByZWR1Y2VzIHBvdGVudGlhbCBmb3IgbWFudWFsIGNvbmZpZ3VyYXRpb24gZXJyb3JzLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nLiBXZSBuZWVkIHRvIGJlIHdhcnkgb2YgYXV0b21hdGljIGZ1bmN0aW9uYWxpdHksIGFuZCBjb25zaWRlciB0aGUgZWRnZSBjYXNlcywgYnV0IHRoZSBkZXNpZ24gc2VlbXMgc291bmQgYXQgZmlyc3QgZ2xhbmNlLiBOb3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgVEVTVF9ITU1gLiBJIG5lZWQgdG8gZW5zdXJlIG5vdGhpbmcncyBiZWVuIG1pc3NlZCBkdXJpbmcgaW50ZWdyYXRpb247IHRoaXMgY291bGQgYmUgdml0YWwsIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9ycyBhcmUgdGhlIGJhbmUgb2YgbXkgZXhpc3RlbmNlLiBXaGF0IGNvdWxkIGl0IGRlcGVuZCBvbiBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uPyBMZXQncyB0cmFjZSB0aGlzIGFuZCBtYWtlIGNlcnRhaW4gd2UgYXJlIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjE0OjE3LjI3MTI0Mzg4NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzMyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMyMDpcXHRcXHRoZWxwXFxuMzMyMTpcXHRcXHQgIFRlc3QgaWYgdGhlIGtlcm5lbCBpcyB6ZXJvLWluaXRpYWxpemluZyBoZWFwIGFuZCBwYWdlIGFsbG9jYXRpb25zLlxcbjMzMjI6XFx0XFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXFxuMzMyMzpcXHRcXG4zMzI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzI1OlxcdFxcbjMzMjY6XFx0Y29uZmlnIFRFU1RfSE1NXFxuMzMyNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcbjMzMjg6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbjMzMjk6XFx0XFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxcbjMzMzA6XFx0XFx0c2VsZWN0IEhNTV9NSVJST1JcXG4zMzMxOlxcdFxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4zMzMyOlxcdFxcdGhlbHBcXG4zMzMzOlxcdFxcdCAgVGhpcyBpcyBhIHBzZXVkbyBkZXZpY2UgZHJpdmVyIHNvbGVseSBmb3IgdGVzdGluZyBITU0uXFxuMzMzNDpcXHRcXHQgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEhNTSB0ZXN0IG1vZHVsZS5cXG4zMzM1OlxcdFxcdCAgRG9pbmcgc28gd2lsbCBhbGxvdyB5b3UgdG8gcnVuIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Qvdm0vaG1tLXRlc3RzLlxcbjMzMzY6XFx0XFxuMzMzNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMzMzODpcXHRcXG4zMzM5OlxcdGNvbmZpZyBURVNUX0ZSRUVfUEFHRVNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6MTcuMjcxNjQzNzE1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMzcyNDcxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgSE1NIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgVEVTVF9ITU1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQncyBkZXBlbmRlbnQgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYERFVklDRV9QUklWQVRFYC4gU28sIHRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgYWxvbmcgd2l0aCBgWk9ORV9ERVZJQ0VgIHNpbmNlIGl0IGxvb2tzIGxpa2UgaXQncyBhIHBpZWNlIG9mIHRoZSBwdXp6bGUuIFRoZSBvYnZpb3VzIG9uZXMgdG8gZW5hYmxlIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgb2YgY291cnNlIGBURVNUX0hNTWAgaXRzZWxmLlxuXG5IbW0sIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuLi4gaXQncyBhIG1lbnVjb25maWcsIGJ1dCBpdCdzIGFsc28gYSBib29sLiBMZXQgbWUgY2xhcmlmeSB0aGF0OyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgYSBib29sZWFuLiBJIGRvbid0IHRoaW5rIEkgbmVlZCB0byB3b3JyeSBhYm91dCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTYCBvciBhbnkgb2YgdGhvc2Ugc2ltaWxhciBvcHRpb25zOyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHVzdWFsbHkgc3VmZmljaWVudC5cblxuTmV4dCB1cCwgSSBuZWVkIHRvIGNoZWNrIGlmIGBNSUdSQVRJT05gIGlzIGVuYWJsZWQuIEl0J3MgYSBib29sZWFuIHdpdGhvdXQgYSBwcm9tcHQsIHNvIGl0IGRlcGVuZHMgb24gYE5VTUFgLCBgQ09NUEFDVElPTmAsIG9yIGBNRU1PUllfSE9UUkVNT1ZFYC4gU2luY2UgYFpPTkVfREVWSUNFYCBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUkVNT1ZFYCwgdGhhdCBtZWFucyBgTUlHUkFUSU9OYCBpcyBnb2luZyB0byBiZSBlbmFibGVkIGFzIHdlbGwuIEdvb2QsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuXG5cblNvLCBqdXN0IHRvIHJlaXRlcmF0ZSwgdGhlIGtleSBjb25maWdzIEkgbmVlZCB0byBoYXZlIHNldCBhcmU6IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgVEVTVF9ITU1gLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvZGUuIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgaW4gdGhlIGFjdHVhbCBrZXJuZWwgY29kZS4gSSdsbCBjaGVjayBgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwYCBpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gWWVwLCBpdCByZXF1aXJlcyBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggSSBleHBlY3QuXG5cbk9rYXksIGxldCdzIG1vdmUgb24gdG8gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhhdCBsb29rcyBsaWtlIGl0IG5lZWRzIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAsIHdoaWNoIGlzIGRlZmluZWQgYXMgYE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0VgLiBDaGVjay5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgYGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBZZXAsIGl0IHJlcXVpcmVzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFzIHdlbGwuIFNlZW1zIGNvbnNpc3RlbnQuXG5cbk5vdywgbGV0J3MgYnJpZWZseSBjaGVjayBgY29weV9ub25wcmVzZW50X3B0ZWAgaW4gYG1tL21lbW9yeS5jYC4gSXQgZGVwZW5kcyBvbiBgQ09ORklHX01NVWAuIE1ha2VzIHNlbnNlOyB0aGF0J3MgZnVuZGFtZW50YWwuXG5cbkFuZCBmaW5hbGx5LCBgdHJ5X3RvX3VubWFwX29uZWAgaW4gYG1tL3JtYXAuY2AgcmVxdWlyZXMgYENPTkZJR19NTVVgLCBqdXN0IGFzIGV4cGVjdGVkLlxuXG5Pa2F5LCBsZXQgbWUga2VlcCBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiBtaW5kIGFzIEkgY29udGludWUgdG8gZXhwbG9yZSB0aGlzIGFyZWE6IGBwYWdlbWFwX3BtZF9yYW5nZV90aHBgLCBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAsIGBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWRgLCBgY29weV9ub25wcmVzZW50X3B0ZWAsIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAuIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb24gYHNldF9wbWRfbWlncmF0aW9uX2VudHJ5YCwgYHJlbW92ZV9taWdyYXRpb25fcG1kYCwgYW5kIGBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZWAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIGNvbnRleHQgdG8gZGl2ZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTIxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6MjYuMzA4ODk1MjQ4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQxMDIzMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9wbWRfbWlncmF0aW9uX2VudHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMyMj1zdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGs7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjQtI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyNTpleHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjYtXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0MS0jZWxzZSAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzQyOnN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDMtXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwMzE9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxOTItXFx0XFx0ICogbWFuYWdlZCB0byBjbGVhciBQYWdlQW5vbkV4Y2x1c2l2ZSgpIC0tIHNlZVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzE5MzpcXHRcXHQgKiBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeSgpLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMzE5NC1cXHRcXHQgKlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00ODY0PWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2Ny0jaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxubW0vaHVnZV9tZW1vcnkuYzo0ODY4OmludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxubW0vaHVnZV9tZW1vcnkuYy00ODY5LVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yMTMtXFx0XFx0bWlncmF0ZS1cXHUwMDNlY3BhZ2VzKys7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyMTQ6XFx0XFx0cmV0ID0gc2V0X3BtZF9taWdyYXRpb25fZW50cnkoXFx1MDAyNnB2bXcsIGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTIxNS1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5tbS9ybWFwLmM9MjQxMD1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjQ4Ni1cXG5tbS9ybWFwLmM6MjQ4NzpcXHRcXHRcXHRpZiAoc2V0X3BtZF9taWdyYXRpb25fZW50cnkoXFx1MDAyNnB2bXcsIHN1YnBhZ2UpKSB7XFxubW0vcm1hcC5jLTI0ODgtXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjE0OjMwLjM0OTkyOTA2NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkwNTUwMDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipSZWFjaGluZyBhIENydWNpYWwgUG9pbnQgaW4gUE1EIE1pZ3JhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGU7IHRoYXQncyBnb29kLiBOb3cgdGhhdCBJJ3ZlIGNvbmZpcm1lZCB0aGF0LCBJIG5lZWQgdG8gc2hpZnQgZm9jdXMuIE15IG5leHQgbG9naWNhbCBzdGVwIGluIHRoaXMgd29ya2Zsb3cgaXMgdG8gZGVlcGx5IGFuYWx5emUgYHJlbW92ZV9taWdyYXRpb25fcG1kYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1pZ3JhdGlvbiBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uLCBhcyByZW1vdmluZyB0aGUgd3JvbmcgZW50cmllcyB3aWxsIGJyZWFrIGV2ZXJ5dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTQ1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6MzQuMTQwNDg0MjY4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc5NzI4NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlbW92ZV9taWdyYXRpb25fcG1kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMyNT1leHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNy1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjg6ZXh0ZXJuIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyOS1cXHRcXHRzdHJ1Y3QgcGFnZSAqbmV3KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTM0Mj1zdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDctXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzQ4OnN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQ5LVxcdFxcdHN0cnVjdCBwYWdlICpuZXcpXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90aHAuaD05MD1ERUZJTkVfRVZFTlQobWlncmF0aW9uX3BtZCwgc2V0X21pZ3JhdGlvbl9wbWQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90aHAuaC05NC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90aHAuaDo5NTpERUZJTkVfRVZFTlQobWlncmF0aW9uX3BtZCwgcmVtb3ZlX21pZ3JhdGlvbl9wbWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGhwLmgtOTYtXFx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBtZCksXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ4Njg9aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0MS1cXG5tbS9odWdlX21lbW9yeS5jOjQ5NDI6dm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpXFxubW0vaHVnZV9tZW1vcnkuYy00OTQzLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAwMi1cXHR1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsIHB2bXctXFx1MDAzZXBtZCk7XFxubW0vaHVnZV9tZW1vcnkuYzo1MDAzOlxcdHRyYWNlX3JlbW92ZV9taWdyYXRpb25fcG1kKGFkZHJlc3MsIHBtZF92YWwocG1kZSkpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTAwNC19XFxuLS1cXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMzY5LVxcdFxcdFxcdFxcdFxcdCFmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbyksIGZvbGlvKTtcXG5tbS9taWdyYXRlLmM6MzcwOlxcdFxcdFxcdHJlbW92ZV9taWdyYXRpb25fcG1kKFxcdTAwMjZwdm13LCBuZXcpO1xcbm1tL21pZ3JhdGUuYy0zNzEtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjE0OjM5LjAyMDIyODQ5NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY2OTQxNTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZWFjaGluZyB0aGUgTWlncmF0aW9uIFBvaW50KipcblxuQWxyaWdodCwgc28gYHJlbW92ZV9taWdyYXRpb25fcG1kYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gSSd2ZSBjb25maXJtZWQgdGhhdCBwYXRod2F5LiBOb3csIG15IGZvY3VzIHNoaWZ0cyB0byB0aGUgYG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgbWlncmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBkaWcgaW50byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGh1Z2UgUE1EIGluc2VydGlvbi4gSSBleHBlY3QgdGhlcmUgaXMgc29tZSBpbnRlcnBsYXkgaGVyZSB0aGF0IEknbGwgaGF2ZSB0byBmdWxseSBncmFzcC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIGxpa2VseSByZXNpZGUsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgaXMgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzNzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDo0My4wODcxNzQ2NTlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODYwMDM1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuYz03NzI9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTc3NS0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjc3NjogKiBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZTogSW5zZXJ0IGEgaHVnZSBmb2xpbyBpbnRvIEBtaWdyYXRlLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzctICogYXQgQGFkZHIuIGZvbGlvIGlzIGFscmVhZHkgYWxsb2NhdGVkIGFzIGEgcGFydCBvZiB0aGUgbWlncmF0aW9uIHByb2Nlc3Mgd2l0aFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03ODktICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3OTA6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03OTEtXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTA0PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy05MjktI2Vsc2UgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6OTMwOnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTMxLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTk2OD1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEwMDItXFx0aWYgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjYgKCpkc3QgXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpIHtcXG5tbS9taWdyYXRlX2RldmljZS5jOjEwMDM6XFx0XFx0aW50IHJldCA9IG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlKG1pZ3JhdGUsIGFkZHIsIHBhZ2UsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDA0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNyYywgcG1kcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjE0OjQ3LjQ3MzE4ODA0M1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMwMTk2MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIEkndmUgZ290IGl0LiBZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBjYW4gd29yayB3aXRoOyB0aGUgcHJvYmxlbSBpcyByZWFjaGFibGUuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIGtleSBhcmVhIHRvIGV4YW1pbmUgaXMgYG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllc2AuIExldCdzIGZvY3VzIG91ciBhdHRlbnRpb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDI3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6NTEuNDAzMzkwMzIxWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc3NzYwOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTE5NTY9Ym9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xOTYxLSAqL1xcbm1tL2ludGVybmFsLmg6MTk2MjpzdGF0aWMgaW5saW5lIHZvaWQgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2ludGVybmFsLmgtMTk2My17XFxuLS1cXG5tbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL21lbW9yeS5jLTk1NS1cXG5tbS9tZW1vcnkuYzo5NTY6XFx0XFx0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKGRzdF9tbSk7XFxubW0vbWVtb3J5LmMtOTU3LVxcdFxcdC8qIE1hcmsgdGhlIHN3YXAgZW50cnkgYXMgc2hhcmVkLiAqL1xcbi0tXFxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMzA2LVxcdFxcdFxcdH1cXG5tbS9ybWFwLmM6MjMwNzpcXHRcXHRcXHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xcbm1tL3JtYXAuYy0yMzA4LVxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDo1NS41ODExNjU2MTVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1NzkyMjQyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRIUCBNaWdyYXRpb24gYW5kIERldmljZSBNZW1vcnkgQ2hhbmdlcyoqXG5cbk9rYXksIHJlYWNoYWJsZS4gTGV0J3MgZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIG1pZ3JhdGlvbiBhbmQgZGV2aWNlIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZzpcblxuKiAgIGBwYWdlbWFwX3BtZF9yYW5nZV90aHBgXG4qICAgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgXG4qICAgYGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZGBcbiogICBgc2V0X3BtZF9taWdyYXRpb25fZW50cnlgXG4qICAgYHJlbW92ZV9taWdyYXRpb25fcG1kYFxuKiAgIGBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZWBcblxuSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzYCwgYnV0IHNpbmNlIGl0J3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLCBpdCdzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBmb2N1cyBwb2ludC4gSSBhbHNvIGV4Y2x1ZGVkIGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYGNvcHlfbm9ucHJlc2VudF9wdGVgIGJlY2F1c2UgdGhleSBhcmUgdmVyeSBob3QgcGF0aCBmdW5jdGlvbnMgYW5kIHdvdWxkIGxpa2VseSBqdXN0IG11ZGR5IHRoZSB3YXRlci5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlc2UgcmVtYWluaW5nIHN5bWJvbHMgYXJlbid0IHN0YXRpYyBpbmxpbmUuIENoZWNraW5nIGVhY2ggb25lLCB0aGV5IGFsbCBzZWVtIHRvIGJlIGVpdGhlciBzdGF0aWMgd2l0aGluIHRoZSBmaWxlLCBvciBleHBvcnRlZCBnbG9iYWxseS4gUGVyZmVjdC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBNeSB1bmRlcnN0YW5kaW5nIHNvIGZhciBzdWdnZXN0cyB0aGUgZm9sbG93aW5nIGFyZSBjcnVjaWFsOlxuXG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYFxuKiAgIGBaT05FX0RFVklDRWBcbiogICBgREVWSUNFX1BSSVZBVEVgXG4qICAgYFRFU1RfSE1NYFxuXG5JIGRpZCBhIHNhbml0eSBjaGVjayBhbmQgc2F3IHRoYXQgYERFVklDRV9NSUdSQVRJT05gIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIGBaT05FX0RFVklDRWAgaXMgc2V0LiBBbHNvLCBgSE1NX01JUlJPUmAgaXMgc2VsZWN0ZWQgYnkgYFRFU1RfSE1NYC5cblxuSSBhbHNvIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfTUlHUkFUSU9OYCBpcyBlbmFibGVkIGlmIGBOVU1BYCBvciBgQ09NUEFDVElPTmAgYXJlIGVuYWJsZWQsIGFuZCBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBJIG5vdGljZWQgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgaXMgc2VsZWN0ZWQgYnkgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGUgcGF0Y2ggcmVuYW1lcyBgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gIHRvIGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgIGFuZCBpbnRyb2R1Y2VzIHRoZSBuZXcgZnVuY3Rpb25zIGBzb2Z0bGVhZl90b19wbWRgIGFuZCBgc29mdGxlYWZfZnJvbV9wbWRgIHRvIGRlYWwgd2l0aCBzb2Z0bGVhZiBlbnRyaWVzLiBUaGlzIGlzIHNpZ25pZmljYW50LiBJdCBhbHNvIGFpbXMgdG8gZml4IHBvdGVudGlhbCBidWdzIHRoYXQgbWlnaHQgb2NjdXIgd2hlbiBgc29mdGxlYWZfdG9fcGFnZWAgb3IgYHNvZnRsZWFmX3RvX2ZvbGlvYCBpcyBjYWxsZWQgb24gZW50cmllcyB3aXRob3V0IGEgUEZOIG9yIG5vbi1kZXZpY2UtcHJpdmF0ZSBlbnRyaWVzLiBUaGlzIG1lYW5zIHRoZXJlJ3MgYSBjb3JyZWN0aW9uIG9mIGltcHJvcGVyIFRIUCBtaWdyYXRpb24sIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIGhvdyB0aGVzZSBwYWdlcyBhcmUgaGFuZGxlZC4gTGFzdGx5LCB0aGUgaW5jbHVzaW9uIG9mIGBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXNgIGVuc3VyZXMgdGhhdCB0aGUgYG1tYCBzdHJ1Y3R1cmUgaXMgb24gYGluaXRfbW0ubW1saXN0YCBiZWZvcmUgc3dhcCBlbnRyaWVzIGFyZSBhZGRlZC4gVGhpcyBzZWVtcyBsaWtlIGEgY3JpdGljYWwgcGllY2UgdG8gZW5zdXJlIHRoZSBgbW1gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBiZWZvcmUgc3dhcCBlbnRyaWVzIGFyZSBhZGRlZC5cblxuU28gb3ZlcmFsbCwgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgc2VyaWVzIG9mIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQgcmVmYWN0b3JpbmcsIGltcHJvdmluZyBtZW1vcnkgbWFuYWdlbWVudCwgVEhQIG1pZ3JhdGlvbiwgYW5kIHBvdGVudGlhbGx5IGRldmljZSBtZW1vcnkgbWlncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ4MSwiT3V0cHV0VG9rZW5zIjoyODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTU6MDguMTYwMzk1ODg5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2OTc5MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJURVNUX0hNTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VtYXBfcG1kX3JhbmdlX3RocFwiLFxuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZFwiLFxuICAgIFwiY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kXCIsXG4gICAgXCJzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeVwiLFxuICAgIFwicmVtb3ZlX21pZ3JhdGlvbl9wbWRcIixcbiAgICBcIm1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVuYW1lcyBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiB0byBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgYW5kIGludHJvZHVjZXMgc29mdGxlYWZfdG9fcG1kIGFuZCBzb2Z0bGVhZl9mcm9tX3BtZCB0byBoYW5kbGUgc29mdGxlYWYgZW50cmllcy4gSXQgYWxzbyBmaXhlcyBwb3RlbnRpYWwgYnVncyB3aGVyZSBzb2Z0bGVhZl90b19wYWdlIG9yIHNvZnRsZWFmX3RvX2ZvbGlvIGlzIGNhbGxlZCBvbiBlbnRyaWVzIHdpdGhvdXQgYSBQRk4gb3Igbm9uLWRldmljZS1wcml2YXRlIGVudHJpZXMgaW4gZnMvcHJvYy90YXNrX21tdS5jIGFuZCBtbS9taWdyYXRlX2RldmljZS5jLiBJdCBhbHNvIGludHJvZHVjZXMgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzIHRvIGVuc3VyZSBtbSBpcyBvbiBpbml0X21tLm1tbGlzdCBiZWZvcmUgYWRkaW5nIHN3YXAgZW50cmllcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGFmZmVjdCBtZW1vcnkgbWFuYWdlbWVudCwgVEhQIG1pZ3JhdGlvbiwgYW5kIGRldmljZSBtZW1vcnkgbWlncmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZW1hcF9wbWRfcmFuZ2VfdGhwXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kXCIsXG4gICAgXCJjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWRcIixcbiAgICBcInNldF9wbWRfbWlncmF0aW9uX2VudHJ5XCIsXG4gICAgXCJyZW1vdmVfbWlncmF0aW9uX3BtZFwiLFxuICAgIFwibWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW5hbWVzIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIHRvIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBhbmQgaW50cm9kdWNlcyBzb2Z0bGVhZl90b19wbWQgYW5kIHNvZnRsZWFmX2Zyb21fcG1kIHRvIGhhbmRsZSBzb2Z0bGVhZiBlbnRyaWVzLiBJdCBhbHNvIGZpeGVzIHBvdGVudGlhbCBidWdzIHdoZXJlIHNvZnRsZWFmX3RvX3BhZ2Ugb3Igc29mdGxlYWZfdG9fZm9saW8gaXMgY2FsbGVkIG9uIGVudHJpZXMgd2l0aG91dCBhIFBGTiBvciBub24tZGV2aWNlLXByaXZhdGUgZW50cmllcyBpbiBmcy9wcm9jL3Rhc2tfbW11LmMgYW5kIG1tL21pZ3JhdGVfZGV2aWNlLmMuIEl0IGFsc28gaW50cm9kdWNlcyBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMgdG8gZW5zdXJlIG1tIGlzIG9uIGluaXRfbW0ubW1saXN0IGJlZm9yZSBhZGRpbmcgc3dhcCBlbnRyaWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYWZmZWN0IG1lbW9yeSBtYW5hZ2VtZW50LCBUSFAgbWlncmF0aW9uLCBhbmQgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6jdh2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 23:54:54 +0000 UTC FinishedAt: 2026-07-01 00:15:10 +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": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM" ], "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": "15654b0268cd65b4e673510c0377774e61b86397", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ZONE_DEVICE", "DEVICE_PRIVATE", "TEST_HMM" ], "series_id": "85ebeb18-1e25-4ed2-85f2-e11fbf9bab60" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "pagemap_pmd_range_thp", "migrate_vma_collect_huge_pmd", "change_non_present_huge_pmd", "set_pmd_migration_entry", "remove_migration_pmd", "migrate_vma_insert_huge_pmd_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+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZW1hcF9wbWRfcmFuZ2VfdGhwJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7Y2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3NldF9wbWRfbWlncmF0aW9uX2VudHJ5JiMzNDssCiAgICAmIzM0O3JlbW92ZV9taWdyYXRpb25fcG1kJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbmFtZXMgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gdG8gQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGFuZCBpbnRyb2R1Y2VzIHNvZnRsZWFmX3RvX3BtZCBhbmQgc29mdGxlYWZfZnJvbV9wbWQgdG8gaGFuZGxlIHNvZnRsZWFmIGVudHJpZXMuIEl0IGFsc28gZml4ZXMgcG90ZW50aWFsIGJ1Z3Mgd2hlcmUgc29mdGxlYWZfdG9fcGFnZSBvciBzb2Z0bGVhZl90b19mb2xpbyBpcyBjYWxsZWQgb24gZW50cmllcyB3aXRob3V0IGEgUEZOIG9yIG5vbi1kZXZpY2UtcHJpdmF0ZSBlbnRyaWVzIGluIGZzL3Byb2MvdGFza19tbXUuYyBhbmQgbW0vbWlncmF0ZV9kZXZpY2UuYy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyB0byBlbnN1cmUgbW0gaXMgb24gaW5pdF9tbS5tbWxpc3QgYmVmb3JlIGFkZGluZyBzd2FwIGVudHJpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhZmZlY3QgbWVtb3J5IG1hbmFnZW1lbnQsIFRIUCBtaWdyYXRpb24sIGFuZCBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU5ZGQxZTAwYWRmMjYwMDM0YjU4YTczZGNhNGM5YTMwOGQ0ODFiYjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAxIDAwOjExOjIzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjNhZmUwNjg4OTE5YmQuLjNlYjk0ZjM2Yzc3ZTg4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC0xNyw3ICYjNDM7MTcsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT04gaWYgSFVHRVRMQl9QQUdFIFx1MDAyNlx1MDAyNiBNSUdSQVRJT05cbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ0NfUExBVEZPUk1cbiBcdHNlbGVjdCBBUkNIX0hBU19DUFVfQ0FDSEVfSU5WQUxJREFURV9NRU1SRUdJT05cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCAyNzY4OWM2MmJkMjVkZC4uOTg0YmFkZmE5YTc0YWIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0xNTM0LDEwICYjNDM7MTUzNCwxMCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSlcdCgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pXG4gI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoc3dwKVx0KChwdGVfdCkgeyAoc3dwKS52YWwgfSlcbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgX19wbWRfdG9fc3dwX2VudHJ5KHBtZClcdFx0KChzd3BfZW50cnlfdCkgeyBwbWRfdmFsKHBtZCkgfSlcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApXHRcdF9fcG1kKChzd3ApLnZhbClcbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIFxuIC8qXG4gICogRW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vdCBtb3JlIHN3YXAgZmlsZXMgdGhhbiBjYW4gYmUgZW5jb2RlZCBpbiB0aGUga2VybmVsXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbmluZGV4IGQ4ZDI1MjMyNTAxNzkxLi41NTAxNDJiN2VlMTAyYSAxMDA2NDRcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcbkBAIC0xMiw3ICYjNDM7MTIsNyBAQCBjb25maWcgTE9PTkdBUkNIXG4gXHRzZWxlY3QgQVJDSF9ORUVEU19ERUZFUl9LQVNBTlxuIFx0c2VsZWN0IEFSQ0hfRElTQUJMRV9LQVNBTl9JTkxJTkVcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuLVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdHNlbGVjdCBBUkNIX0hBU19BQ1BJX1RBQkxFX1VQR1JBREVcdGlmIEFDUElcbiBcdHNlbGVjdCBBUkNIX0hBU19DUFVfRklOQUxJWkVfSU5JVFxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbmluZGV4IGU2N2U2NGFjNmU4Y2ZjLi42ZjMwYWE4YTY0OTBlMSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuQEAgLTEwNjAsNyAmIzQzOzEwNjAsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90ICpwbWRwX3B0ZXAocG1kX3QgKnBtZClcbiAjZGVmaW5lIHBtZF9ta3NvZnRfZGlydHkocG1kKSAgcHRlX3BtZChwdGVfbWtzb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpXG4gI2RlZmluZSBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWQpIHB0ZV9wbWQocHRlX2NsZWFyX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSlcbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKVx0cHRlX3BtZChwdGVfc3dwX21rc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxuICNkZWZpbmUgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZClcdFx0cHRlX3N3cF9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSlcbiAjZGVmaW5lIHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWQpXHRwdGVfcG1kKHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGVcbmluZGV4IGJhYzAyYzgzYmIzZTRmLi40YTBmYTY4MWJmOTgxNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZVxuQEAgLTExMiw3ICYjNDM7MTEyLDcgQEAgY29uZmlnIFBQQ19USFBcbiAgICAgICAgZGVwZW5kcyBvbiBQUENfUkFESVhfTU1VIHx8IChQUENfNjRTX0hBU0hfTU1VIFx1MDAyNlx1MDAyNiBQQUdFX1NJWkVfNjRLQilcbiAgICAgICAgc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxuICAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuLSAgICAgICBzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuJiM0MzsgICAgICAgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXG4gY2hvaWNlXG4gXHRwcm9tcHQgXCYjMzQ7Q1BVIHNlbGVjdGlvblwmIzM0O1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvS2NvbmZpZyBiL2FyY2gvcmlzY3YvS2NvbmZpZ1xuaW5kZXggM2YwYTY0NzIxOGU0MDcuLmJmN2IyNzFjY2NkODA0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L0tjb25maWdcbkBAIC0yMiw3ICYjNDM7MjIsNyBAQCBjb25maWcgUklTQ1ZcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT04gaWYgSFVHRVRMQl9QQUdFIFx1MDAyNlx1MDAyNiBNSUdSQVRJT05cbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRyBpZiBTUEFSU0VNRU1fVk1FTU1BUFxuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcbiBcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xuIFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi4yYWE1MjllODgyZDMwNCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTk0Niw3ICYjNDM7OTQ2LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4gXHRyZXR1cm4gcHRlX3BtZChwdGVfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBzdGF0aWMgaW5saW5lIGJvb2wgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZF90IHBtZClcbiB7XG4gXHRyZXR1cm4gcHRlX3N3cF9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSk7XG5AQCAtOTYxLDcgJiM0Mzs5NjEsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuIHB0ZV9wbWQocHRlX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpO1xuIH1cbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuICNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFkgKi9cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZF9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuQEAgLTEyMDgsMTAgJiM0MzsxMjA4LDEwIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3N3cF9jbGVhcl9leGNsdXNpdmUocHRlX3QgcHRlKVxuIFx0cmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSBcdTAwMjYgfl9QQUdFX1NXUF9FWENMVVNJVkUpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgX19wbWRfdG9fc3dwX2VudHJ5KHBtZCkgKChzd3BfZW50cnlfdCkgeyBwbWRfdmFsKHBtZCkgfSlcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbClcbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIFxuIC8qXG4gICogSW4gdGhlIFJWNjQgTGludXggc2NoZW1lLCB3ZSBnaXZlIHRoZSB1c2VyIGhhbGYgb2YgdGhlIHZpcnR1YWwtYWRkcmVzcyBzcGFjZVxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWdcbmluZGV4IDg0NDA0ZTY3NzhkNTA0Li4wNzE5ZjY4ZGUwZjM2ZiAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuQEAgLTgyLDcgJiM0Mzs4Miw3IEBAIGNvbmZpZyBTMzkwXG4gXHRzZWxlY3QgQVJDSF9DT1JSRUNUX1NUQUNLVFJBQ0VfT05fS1JFVFBST0JFXG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgU1BBUlNFTUVNXG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuLVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xuIFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9GSU5BTElaRV9JTklUXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDg1OWNlN2M3ZDQ1NDQ4Li42ZmFjY2ZhNjNiMDkzMyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC05MDMsNyAmIzQzOzkwMyw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKVxuIFx0cmV0dXJuIGNsZWFyX3BtZF9iaXQocG1kLCBfX3BncHJvdChfU0VHTUVOVF9FTlRSWV9TT0ZUX0RJUlRZKSk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gI2RlZmluZSBwbWRfc3dwX3NvZnRfZGlydHkocG1kKVx0XHRwbWRfc29mdF9kaXJ0eShwbWQpXG4gI2RlZmluZSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWQpXHRwbWRfbWtzb2Z0X2RpcnR5KHBtZClcbiAjZGVmaW5lIHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWQpXHRwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWdcbmluZGV4IGJkYWQ5MGYyMTBlNGJmLi41MGUwMGQ4NDE3YWFjYyAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWdcbkBAIC03MCw3ICYjNDM7NzAsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgSFVHRVRMQl9QQUdFIFx1MDAyNlx1MDAyNiBNSUdSQVRJT05cbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRyBpZiBYODZfNjRcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMikgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcbi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiYjNDM7XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVx0aWYgQUNQSVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9BVFRBQ0tfVkVDVE9SU1x0aWYgQ1BVX01JVElHQVRJT05TXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBhYzI5NWNhNmM5MmY5OS4uZTBmZDMxOGQ0MDA0ZDEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTE1NDUsNyAmIzQzOzE1NDUsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwdGVfdCBwdGUpXG4gXHRyZXR1cm4gcHRlX2NsZWFyX2ZsYWdzKHB0ZSwgX1BBR0VfU1dQX1NPRlRfRElSVFkpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKVxuIHtcbiBcdHJldHVybiBwbWRfc2V0X2ZsYWdzKHBtZCwgX1BBR0VfU1dQX1NPRlRfRElSVFkpO1xuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuaW5kZXggZDMyNDA4ZjdjZDVlZDIuLjFmYjVhY2Q4OGFkMDI0IDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0yMTI5LDcgJiM0MzsyMTI5LDggQEAgc3RhdGljIGludCBwYWdlbWFwX3BtZF9yYW5nZV90aHAocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdFx0XHRmbGFncyB8PSBQTV9TT0ZUX0RJUlRZO1xuIFx0XHRpZiAocG1kX3N3cF91ZmZkX3dwKHBtZCkpXG4gXHRcdFx0ZmxhZ3MgfD0gUE1fVUZGRF9XUDtcbi1cdFx0cGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpO1xuJiM0MztcdFx0aWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKVxuJiM0MztcdFx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4gXHR9XG4gXG4gXHRpZiAocGFnZSkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li4xNDg3YmY0YWYxYTdlYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuQEAgLTU2Nyw3ICYjNDM7NTY3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmdldF9wZXJzaXN0ZW50X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCh2b2lkKVxuIHtcbi1cdHJldHVybiBJU19FTkFCTEVEKENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OKTtcbiYjNDM7XHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpO1xuIH1cbiBcbiB2b2lkIHNwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oIGIvaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcbmluZGV4IDk5MmNkOGJkOGVkMGU5Li44ODg4OGRhZWIwMThhOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaFxuQEAgLTgxLDcgJiM0Mzs4MSw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3Qgc29mdGxlYWZfdG9fcHRlKHNvZnRsZWFmX3QgZW50cnkpXG4gXHRyZXR1cm4gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gLyoqXG4gICogc29mdGxlYWZfZnJvbV9wbWQoKSAtIE9idGFpbiBhIGxlYWYgZW50cnkgZnJvbSBhIFBNRCBlbnRyeS5cbiAgKiBAcG1kOiBQTUQgZW50cnkuXG5AQCAtMTA4LDYgJiM0MzsxMDgsMjEgQEAgc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZClcbiBcdHJldHVybiBzd3BfZW50cnkoX19zd3BfdHlwZShhcmNoX2VudHJ5KSwgX19zd3Bfb2Zmc2V0KGFyY2hfZW50cnkpKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBzb2Z0bGVhZl90b19wbWQoKSAtIE9idGFpbiBhIFBNRCBlbnRyeSBmcm9tIGEgbGVhZiBlbnRyeS5cbiYjNDM7ICogQGVudHJ5OiBMZWFmIGVudHJ5LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGdlbmVyYXRlcyBhbiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgUE1EIGVudHJ5IHRoYXQgY2FuIGJlIHV0aWxpc2VkIHRvXG4mIzQzOyAqIGVuY29kZSB0aGUgbWV0YWRhdGEgdGhlIGxlYWYgZW50cnkgZW5jb2Rlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNRCBlbnRyeSBlbmNvZGluZyBsZWFmIGVudHJ5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGlubGluZSBwbWRfdCBzb2Z0bGVhZl90b19wbWQoc29mdGxlYWZfdCBlbnRyeSlcbiYjNDM7e1xuJiM0MztcdC8qIFRlbXBvcmFyeSB1bnRpbCBzd3BfZW50cnlfdCBlbGltaW5hdGVkLiAqL1xuJiM0MztcdHJldHVybiBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbiYjNDM7fVxuJiM0MztcbiAjZWxzZVxuIFxuIHN0YXRpYyBpbmxpbmUgc29mdGxlYWZfdCBzb2Z0bGVhZl9mcm9tX3BtZChwbWRfdCBwbWQpXG5AQCAtMTE1LDYgJiM0MzsxMzAsMTEgQEAgc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZClcbiBcdHJldHVybiBzb2Z0bGVhZl9ta19ub25lKCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHBtZF90IHNvZnRsZWFmX3RvX3BtZChzb2Z0bGVhZl90IGVudHJ5KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fcG1kKDApO1xuJiM0Mzt9XG4mIzQzO1xuICNlbmRpZlxuIFxuIC8qKlxuQEAgLTU2Nyw3ICYjNDM7NTg3LDcgQEAgc3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pXG4mIzQzOyNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGKVxuIFxuIC8qKlxuICAqIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeSgpIC0gQ2hlY2sgaWYgUE1EIGNvbnRhaW5zIGEgZGV2aWNlIHByaXZhdGUgc3dhcFxuQEAgLTU4NiwxNCAmIzQzOzYwNiwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZClcbiBcdHJldHVybiBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShzb2Z0bGVhZl9mcm9tX3BtZChwbWQpKTtcbiB9XG4gXG4tI2Vsc2UgIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2Vsc2UgIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gc3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi0jZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFIFx1MDAyNlx1MDAyNiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFIFx1MDAyNlx1MDAyNiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbiBcbiAvKipcbiAgKiBwbWRfaXNfbWlncmF0aW9uX2VudHJ5KCkgLSBEb2VzIHRoaXMgUE1EIGVudHJ5IGVuY29kZSBhIG1pZ3JhdGlvbiBlbnRyeT9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5pbmRleCBkNTJkMmE5NzZlNWEyOC4uZTM4ZjA2OWMxYzkxMDggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbkBAIC0xODM5LDcgJiM0MzsxODM5LDcgQEAgc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHBncHJvdF90IG5ld3Byb3QpXG4gI2VuZGlmXG4gXG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWVxuLSNpZm5kZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmbmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZF90IHBtZClcbiB7XG4gXHRyZXR1cm4gcG1kO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oIGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcbmluZGV4IDhjZmM5NjZlYWU0OGViLi43MDVhODQxNTRkMjhlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaFxuQEAgLTMyMSw3ICYjNDM7MzIxLDcgQEAgc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxuIFxuIHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsaztcbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIGV4dGVybiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4gXG5AQCAtMzM4LDcgJiM0MzszMzgsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXG4gXHRyZXR1cm4gX19zd3BfZW50cnlfdG9fcG1kKGFyY2hfZW50cnkpO1xuIH1cbiBcbi0jZWxzZSAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2Vsc2UgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIHN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UpXG4ge1xuQEAgLTM1OCw3ICYjNDM7MzU4LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cmV0dXJuIF9fcG1kKDApO1xuIH1cbiBcbi0jZW5kaWYgIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG4mIzQzOyNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gI2VuZGlmIC8qIENPTkZJR19NTVUgKi9cbiAjZW5kaWYgLyogX0xJTlVYX1NXQVBPUFNfSCAqL1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uMDRmZTUxNzFiYjhjODAgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnXG5AQCAtNzAzLDcgJiM0Mzs3MDMsNyBAQCBjb25maWcgREVWSUNFX01JR1JBVElPTlxuIGNvbmZpZyBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT05cbiBcdGJvb2xcbiBcbi1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuJiM0Mztjb25maWcgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBcdGJvb2xcbiBcbiBjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbmRpZmYgLS1naXQgYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMgYi9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcbmluZGV4IDIzZGMzZWUwOTU2MTkyLi41MDdmYmQxYWU3ZTUzNSAxMDA2NDRcbi0tLSBhL21tL2RlYnVnX3ZtX3BndGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jXG5AQCAtNzUxLDE0ICYjNDM7NzUxLDE0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRwbWRfdCBwbWQ7XG4gXG4gXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpIHx8XG4tXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pKVxuJiM0MztcdCAgICAhSVNfRU5BQkxFRChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoIWhhc190cmFuc3BhcmVudF9odWdlcGFnZSgpKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBzd2FwIHNvZnQgZGlydHlcXG5cJiMzNDspO1xuLVx0cG1kID0gc3dwX2VudHJ5X3RvX3BtZChhcmdzLVx1MDAzZWxlYWZfZW50cnkpO1xuJiM0MztcdHBtZCA9IHNvZnRsZWFmX3RvX3BtZChhcmdzLVx1MDAzZWxlYWZfZW50cnkpO1xuIFx0V0FSTl9PTighcG1kX2lzX2h1Z2UocG1kKSk7XG4gXHRXQVJOX09OKCFwbWRfaXNfdmFsaWRfc29mdGxlYWYocG1kKSk7XG4gXG5AQCAtODE5LDcgJiM0Mzs4MTksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcHRlX3N3YXBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdFdBUk5fT04obWVtY21wKFx1MDAyNnB0ZTEsIFx1MDAyNnB0ZTIsIHNpemVvZihwdGUxKSkpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiB7XG4gXHRzd3BfZW50cnlfdCBhcmNoX2VudHJ5O1xuQEAgLTgyOSw3ICYjNDM7ODI5LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtWYWxpZGF0aW5nIFBNRCBzd2FwXFxuXCYjMzQ7KTtcbi1cdHBtZDEgPSBzd3BfZW50cnlfdG9fcG1kKGFyZ3MtXHUwMDNlbGVhZl9lbnRyeSk7XG4mIzQzO1x0cG1kMSA9IHNvZnRsZWFmX3RvX3BtZChhcmdzLVx1MDAzZWxlYWZfZW50cnkpO1xuIFx0V0FSTl9PTighcG1kX2lzX2h1Z2UocG1kMSkpO1xuIFx0V0FSTl9PTighcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKHBtZDEpKTtcbiBcbkBAIC04MzcsOSAmIzQzOzgzNyw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiBcdHBtZDIgPSBfX3N3cF9lbnRyeV90b19wbWQoYXJjaF9lbnRyeSk7XG4gXHRXQVJOX09OKG1lbWNtcChcdTAwMjZwbWQxLCBcdTAwMjZwbWQyLCBzaXplb2YocG1kMSkpKTtcbiB9XG4tI2Vsc2UgIC8qICFDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuJiM0MzsjZWxzZSAgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG4tI2VuZGlmIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbiBcbiBzdGF0aWMgdm9pZCBfX2luaXQgc3dhcF9taWdyYXRpb25fdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiB7XG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xuaW5kZXggYzcyYzlkZGZkYjJmNjIuLjRmM2Y2MjdkMmI0NzcyIDEwMDY0NFxuLS0tIGEvbW0vaG1tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2htbS5jXG5AQCAtMzMxLDcgJiM0MzszMzEsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0cmV0dXJuIGhtbV92bWFfZmF1bHQoYWRkciwgZW5kLCByZXF1aXJlZF9mYXVsdCwgd2Fsayk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqaG1tX3BmbnMsXG4gXHRcdFx0XHQgICAgIHBtZF90IHBtZClcbkBAIC0zOTEsNyAmIzQzOzM5MSw3IEBAIHN0YXRpYyBpbnQgaG1tX3ZtYV9oYW5kbGVfYWJzZW50X3BtZChzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gXHRyZXR1cm4gaG1tX3BmbnNfZmlsbChzdGFydCwgZW5kLCByYW5nZSwgSE1NX1BGTl9FUlJPUik7XG4gfVxuLSNlbmRpZiAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2VuZGlmICAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbiBcbiBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wbWQocG1kX3QgKnBtZHAsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDJiY2NiMGE1M2EwYTYwLi40YjZlNDQxYWU5MzFlYyAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbiBcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpIHx8XG4gXHQgICAgc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KSkge1xuIFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdFx0cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XG4mIzQzO1x0XHRwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xuIFx0XHRpZiAocG1kX3N3cF9zb2Z0X2RpcnR5KCpzcmNfcG1kKSlcbiBcdFx0XHRwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWQpO1xuIFx0XHRpZiAocG1kX3N3cF91ZmZkX3dwKCpzcmNfcG1kKSlcbkBAIC0xODMyLDcgJiM0MzsxODMyLDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbiBcdFx0ICovXG4gXHRcdGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbiBcdFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xuLVx0XHRcdHBtZCA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpO1xuJiM0MztcdFx0XHRwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xuIFxuIFx0XHRcdGlmIChwbWRfc3dwX3NvZnRfZGlydHkoKnNyY19wbWQpKVxuIFx0XHRcdFx0cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKTtcbkBAIC0yNTU3LDExICYjNDM7MjU1NywxMiBAQCBzdGF0aWMgdm9pZCBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdGJvb2wgdWZmZF93cF9yZXNvbHZlKVxuIHtcbiBcdHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZCgqcG1kKTtcbi1cdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XG4gXHRwbWRfdCBuZXdwbWQ7XG4gXG4gXHRWTV9XQVJOX09OKCFwbWRfaXNfdmFsaWRfc29mdGxlYWYoKnBtZCkpO1xuIFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkpIHtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBBIHByb3RlY3Rpb24gY2hlY2sgaXMgZGlmZmljdWx0IHNvXG4gXHRcdCAqIGp1c3QgYmUgc2FmZSBhbmQgZGlzYWJsZSB3cml0ZVxuQEAgLTI1NzAsMTIgJiM0MzsyNTcxLDEyIEBAIHN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZXhjbHVzaXZlX21pZ3JhdGlvbl9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4gXHRcdGVsc2VcbiBcdFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdFx0bmV3cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XG4mIzQzO1x0XHRuZXdwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xuIFx0XHRpZiAocG1kX3N3cF9zb2Z0X2RpcnR5KCpwbWQpKVxuIFx0XHRcdG5ld3BtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KG5ld3BtZCk7XG4gXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkge1xuIFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xuLVx0XHRuZXdwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbiYjNDM7XHRcdG5ld3BtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XG4gXHRcdGlmIChwbWRfc3dwX3VmZmRfd3AoKnBtZCkpXG4gXHRcdFx0bmV3cG1kID0gcG1kX3N3cF9ta3VmZmRfd3AobmV3cG1kKTtcbiBcdH0gZWxzZSB7XG5AQCAtNDg2Myw3ICYjNDM7NDg2NCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyh2b2lkKVxuIGxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcbiAjZW5kaWZcbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4gXHRcdHN0cnVjdCBwYWdlICpwYWdlKVxuIHtcbkBAIC00OTIzLDcgJiM0Mzs0OTI0LDcgQEAgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiBcdH1cbiBcbiBcdC8qIFNldCBQTUQuICovXG4tXHRwbWRzd3AgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbiYjNDM7XHRwbWRzd3AgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xuIFx0aWYgKHNvZnRkaXJ0eSlcbiBcdFx0cG1kc3dwID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kc3dwKTtcbiBcdGlmICh1ZmZkX3dwKVxuQEAgLTQ5NzYsNyAmIzQzOzQ5NzcsNyBAQCB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcbiBcdFx0ZWxzZVxuIFx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShcbiBcdFx0XHRcdFx0XHRcdHBhZ2VfdG9fcGZuKG5ldykpO1xuLVx0XHRwbWRlID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XG4mIzQzO1x0XHRwbWRlID0gc29mdGxlYWZfdG9fcG1kKGVudHJ5KTtcbiBcbiBcdFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcHZtdy1cdTAwM2VwbWQpKVxuIFx0XHRcdHBtZGUgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWRlKTtcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggOGUwZGYzZDFjNmY5ODAuLjBlM2RiOTQ1MWU1Yzc4IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTE5NTYsNCAmIzQzOzE5NTYsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpXG4gYm9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxuIFx0XHQgICB1bnNpZ25lZCBsb25nIG5wYWdlcyk7XG4gXG4mIzQzOy8qXG4mIzQzOyAqIEVuc3VyZSBAbW0gaXMgb24gdGhlIGluaXRfbW0ubW1saXN0IHNvIHN3YXBvZmYgY2FuIGZpbmQgaXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbW1saXN0KSkge1xuJiM0MztcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbiYjNDM7XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZW1tbGlzdCkpXG4mIzQzO1x0XHRcdGxpc3RfYWRkKFx1MDAyNm1tLVx1MDAzZW1tbGlzdCwgXHUwMDI2aW5pdF9tbS5tbWxpc3QpO1xuJiM0MztcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW1saXN0X2xvY2spO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAjZW5kaWZcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcbmluZGV4IGEzZmNhZjhjZmU4ZjhiLi42NjM3YzViMTNjOWJhYyAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTk1MywxNCAmIzQzOzk1Myw3IEBAIGNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4gXHRcdGlmIChzd2FwX2R1cF9lbnRyeV9kaXJlY3QoZW50cnkpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuLVx0XHQvKiBtYWtlIHN1cmUgZHN0X21tIGlzIG9uIHN3YXBvZmYmIzM5O3MgbW1saXN0LiAqL1xuLVx0XHRpZiAodW5saWtlbHkobGlzdF9lbXB0eShcdTAwMjZkc3RfbW0tXHUwMDNlbW1saXN0KSkpIHtcbi1cdFx0XHRzcGluX2xvY2soXHUwMDI2bW1saXN0X2xvY2spO1xuLVx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNmRzdF9tbS1cdTAwM2VtbWxpc3QpKVxuLVx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2ZHN0X21tLVx1MDAzZW1tbGlzdCxcbi1cdFx0XHRcdFx0XHRcdTAwMjZzcmNfbW0tXHUwMDNlbW1saXN0KTtcbi1cdFx0XHRzcGluX3VubG9jayhcdTAwMjZtbWxpc3RfbG9jayk7XG4tXHRcdH1cbiYjNDM7XHRcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhkc3RfbW0pO1xuIFx0XHQvKiBNYXJrIHRoZSBzd2FwIGVudHJ5IGFzIHNoYXJlZC4gKi9cbiBcdFx0aWYgKHB0ZV9zd3BfZXhjbHVzaXZlKG9yaWdfcHRlKSkge1xuIFx0XHRcdHB0ZSA9IHB0ZV9zd3BfY2xlYXJfZXhjbHVzaXZlKG9yaWdfcHRlKTtcbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IDQ5ZTEwZmVlYjA5NGYwLi5jNDhkYzUxMjdlNmFhOSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jXG5AQCAtMzYyLDcgJiM0MzszNjIsNyBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcHZtdy5hZGRyZXNzKSAtIHB2bXcucGdvZmY7XG4gXHRcdG5ldyA9IGZvbGlvX3BhZ2UoZm9saW8sIGlkeCk7XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBcdFx0LyogUE1ELW1hcHBlZCBUSFAgbWlncmF0aW9uIGVudHJ5ICovXG4gXHRcdGlmICghcHZtdy5wdGUpIHtcbiBcdFx0XHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSB8fFxuQEAgLTU0NSw3ICYjNDM7NTQ1LDcgQEAgdm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdF9odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBcbiB9XG4gI2VuZGlmXG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbiB7XG4gXHRzcGlubG9ja190ICpwdGw7XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbmluZGV4IGFlMzkxNzNkNmEwZThhLi4yZjhiNjQ2MzAyYzI1MSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbkBAIC0xNjYsMTEgJiM0MzsxNjYsMTQgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0fSBlbHNlIGlmICghcG1kX3ByZXNlbnQoKnBtZHApKSB7XG4gXHRcdGNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZCgqcG1kcCk7XG4gXG4tXHRcdGZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xuLVxuIFx0XHRpZiAoIXNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlKGVudHJ5KSB8fFxuLVx0XHRcdCEobWlncmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSB8fFxuLVx0XHRcdChmb2xpby1cdTAwM2VwZ21hcC1cdTAwM2Vvd25lciAhPSBtaWdyYXRlLVx1MDAzZXBnbWFwX293bmVyKSkge1xuJiM0MztcdFx0ICAgICEobWlncmF0ZS1cdTAwM2VmbGFncyBcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSkge1xuJiM0MztcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuJiM0MztcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xuJiM0MztcdFx0aWYgKGZvbGlvLVx1MDAzZXBnbWFwLVx1MDAzZW93bmVyICE9IG1pZ3JhdGUtXHUwMDNlcGdtYXBfb3duZXIpIHtcbiBcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIFx0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG4gXHRcdH1cbkBAIC03NjgsNyAmIzQzOzc3MSw3IEBAIGludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG4gfVxuIEVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gLyoqXG4gICogbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2U6IEluc2VydCBhIGh1Z2UgZm9saW8gaW50byBAbWlncmF0ZS1cdTAwM2V2bWEtXHUwMDNldm1fbW1cbiAgKiBhdCBAYWRkci4gZm9saW8gaXMgYWxyZWFkeSBhbGxvY2F0ZWQgYXMgYSBwYXJ0IG9mIHRoZSBtaWdyYXRpb24gcHJvY2VzcyB3aXRoXG5AQCAtODM1LDcgJiM0Mzs4MzgsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbiBcdFx0ZWxzZVxuIFx0XHRcdHN3cF9lbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoXG4gXHRcdFx0XHRcdFx0cGFnZV90b19wZm4ocGFnZSkpO1xuLVx0XHRlbnRyeSA9IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5KTtcbiYjNDM7XHRcdGVudHJ5ID0gc29mdGxlYWZfdG9fcG1kKHN3cF9lbnRyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIWZvbGlvX2lzX2RldmljZV9jb2hlcmVudChmb2xpbykpIHtcbkBAIC05MjMsNyAmIzQzOzkyNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuIFx0XHRtaWdyYXRlLVx1MDAzZXNyY1tpJiM0MztpZHhdID0gbWlncmF0ZV9wZm4ocGZuICYjNDM7IGkpIHwgZmxhZ3M7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbi0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbiYjNDM7I2Vsc2UgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxuIFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdFx0XHQgc3RydWN0IHBhZ2UgKnBhZ2UsXG5AQCAtOTQ0LDcgJiM0Mzs5NDcsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX3ZtYV9ucl9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmMpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBuciA9IDE7XG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBcdGlmICgqc3JjIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORClcbiBcdFx0bnIgPSBIUEFHRV9QTURfTlI7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDFjNzdkNWRjMDZlOWZhLi4wZmI3YTFiODJjZjNjMiAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jXG5AQCAtMjMwNCwxMiAmIzQzOzIzMDQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0c2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHZtdy5wdGUsIHB0ZXZhbCk7XG4gXHRcdFx0XHRnb3RvIHdhbGtfYWJvcnQ7XG4gXHRcdFx0fVxuLVx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZW1tbGlzdCkpIHtcbi1cdFx0XHRcdHNwaW5fbG9jayhcdTAwMjZtbWxpc3RfbG9jayk7XG4tXHRcdFx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZtbS1cdTAwM2VtbWxpc3QpKVxuLVx0XHRcdFx0XHRsaXN0X2FkZChcdTAwMjZtbS1cdTAwM2VtbWxpc3QsIFx1MDAyNmluaXRfbW0ubW1saXN0KTtcbi1cdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbi1cdFx0XHR9XG4mIzQzO1x0XHRcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7XG4gXHRcdFx0ZGVjX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUyk7XG4gXHRcdFx0aW5jX21tX2NvdW50ZXIobW0sIE1NX1NXQVBFTlRTKTtcbiBcdFx0XHRzd3BfcHRlID0gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XG5AQCAtMjQ3Nyw3ICYjNDM7MjQ3Miw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXHUwMDI2cHZtdyk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBcdFx0XHRwbWR2YWwgPSBwbWRwX2dldChwdm13LnBtZCk7XG4gXHRcdFx0aWYgKGxpa2VseShwbWRfcHJlc2VudChwbWR2YWwpKSlcbiBcdFx0XHRcdHBmbiA9IHBtZF9wZm4ocG1kdmFsKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7LAogICAgJiMzNDtERVZJQ0VfUFJJVkFURSYjMzQ7LAogICAgJiMzNDtURVNUX0hNTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BhZ2VtYXBfcG1kX3JhbmdlX3RocCYjMzQ7LAogICAgJiMzNDttaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O2NoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDtzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeSYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbWlncmF0aW9uX3BtZCYjMzQ7LAogICAgJiMzNDttaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW5hbWVzIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIHRvIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBhbmQgaW50cm9kdWNlcyBzb2Z0bGVhZl90b19wbWQgYW5kIHNvZnRsZWFmX2Zyb21fcG1kIHRvIGhhbmRsZSBzb2Z0bGVhZiBlbnRyaWVzLiBJdCBhbHNvIGZpeGVzIHBvdGVudGlhbCBidWdzIHdoZXJlIHNvZnRsZWFmX3RvX3BhZ2Ugb3Igc29mdGxlYWZfdG9fZm9saW8gaXMgY2FsbGVkIG9uIGVudHJpZXMgd2l0aG91dCBhIFBGTiBvciBub24tZGV2aWNlLXByaXZhdGUgZW50cmllcyBpbiBmcy9wcm9jL3Rhc2tfbW11LmMgYW5kIG1tL21pZ3JhdGVfZGV2aWNlLmMuIEl0IGFsc28gaW50cm9kdWNlcyBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMgdG8gZW5zdXJlIG1tIGlzIG9uIGluaXRfbW0ubW1saXN0IGJlZm9yZSBhZGRpbmcgc3dhcCBlbnRyaWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYWZmZWN0IG1lbW9yeSBtYW5hZ2VtZW50LCBUSFAgbWlncmF0aW9uLCBhbmQgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGU5ZGQxZTAwYWRmMjYwMDM0YjU4YTczZGNhNGM5YTMwOGQ0ODFiYjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1bCAxIDAwOjExOjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGIzYWZlMDY4ODkxOWJkLi4zZWI5NGYzNmM3N2U4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMTcsNyAmIzQzOzE3LDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTiBpZiBIVUdFVExCX1BBR0UgJmFtcDsmYW1wOyBNSUdSQVRJT04KIAlzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKIAlzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyAmZ3Q7IDIKLQlzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAlzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFCiAJc2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNCiAJc2VsZWN0IEFSQ0hfSEFTX0NQVV9DQUNIRV9JTlZBTElEQVRFX01FTVJFR0lPTgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAyNzY4OWM2MmJkMjVkZC4uOTg0YmFkZmE5YTc0YWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xNTM0LDEwICYjNDM7MTUzNCwxMCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoc3dwKQkoKHB0ZV90KSB7IChzd3ApLnZhbCB9KQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAjZGVmaW5lIF9fcG1kX3RvX3N3cF9lbnRyeShwbWQpCQkoKHN3cF9lbnRyeV90KSB7IHBtZF92YWwocG1kKSB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wbWQoc3dwKQkJX19wbWQoKHN3cCkudmFsKQotI2VuZGlmIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovCiYjNDM7I2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqLwogCiAvKgogICogRW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vdCBtb3JlIHN3YXAgZmlsZXMgdGhhbiBjYW4gYmUgZW5jb2RlZCBpbiB0aGUga2VybmVsCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnIGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwppbmRleCBkOGQyNTIzMjUwMTc5MS4uNTUwMTQyYjdlZTEwMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gvS2NvbmZpZwpAQCAtMTIsNyAmIzQzOzEyLDcgQEAgY29uZmlnIExPT05HQVJDSAogCXNlbGVjdCBBUkNIX05FRURTX0RFRkVSX0tBU0FOCiAJc2VsZWN0IEFSQ0hfRElTQUJMRV9LQVNBTl9JTkxJTkUKIAlzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKLQlzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAlzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFCWlmIEFDUEkKIAlzZWxlY3QgQVJDSF9IQVNfQ1BVX0ZJTkFMSVpFX0lOSVQKIAlzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oCmluZGV4IGU2N2U2NGFjNmU4Y2ZjLi42ZjMwYWE4YTY0OTBlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKQEAgLTEwNjAsNyAmIzQzOzEwNjAsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90ICpwbWRwX3B0ZXAocG1kX3QgKnBtZCkKICNkZWZpbmUgcG1kX21rc29mdF9kaXJ0eShwbWQpICBwdGVfcG1kKHB0ZV9ta3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSkKICNkZWZpbmUgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kKSBwdGVfcG1kKHB0ZV9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKICNkZWZpbmUgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKQlwdGVfcG1kKHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpCiAjZGVmaW5lIHBtZF9zd3Bfc29mdF9kaXJ0eShwbWQpCQlwdGVfc3dwX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKQogI2RlZmluZSBwbWRfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kKQlwdGVfcG1kKHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZQppbmRleCBiYWMwMmM4M2JiM2U0Zi4uNGEwZmE2ODFiZjk4MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCkBAIC0xMTIsNyAmIzQzOzExMiw3IEBAIGNvbmZpZyBQUENfVEhQCiAgICAgICAgZGVwZW5kcyBvbiBQUENfUkFESVhfTU1VIHx8IChQUENfNjRTX0hBU0hfTU1VICZhbXA7JmFtcDsgUEFHRV9TSVpFXzY0S0IpCiAgICAgICAgc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRQogICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVECi0gICAgICAgc2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsgICAgICAgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFCiAKIGNob2ljZQogCXByb21wdCAmIzM0O0NQVSBzZWxlY3Rpb24mIzM0OwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnCmluZGV4IDNmMGE2NDcyMThlNDA3Li5iZjdiMjcxY2NjZDgwNCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvS2NvbmZpZwpAQCAtMjIsNyAmIzQzOzIyLDcgQEAgY29uZmlnIFJJU0NWCiAJc2VsZWN0IEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTiBpZiBIVUdFVExCX1BBR0UgJmFtcDsmYW1wOyBNSUdSQVRJT04KIAlzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgU1BBUlNFTUVNX1ZNRU1NQVAKIAlzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyAmZ3Q7IDIKLQlzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0UKIAlzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVQKIAlzZWxlY3QgQVJDSF9IQVNfQ0NfQ0FOX0xJTksKIAlzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDVkNTc1NmJkYTgyZTNkLi4yYWE1MjllODgyZDMwNCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTk0Niw3ICYjNDM7OTQ2LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpCiAJcmV0dXJuIHB0ZV9wbWQocHRlX2NsZWFyX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfc3dwX3NvZnRfZGlydHkocG1kX3QgcG1kKQogewogCXJldHVybiBwdGVfc3dwX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKTsKQEAgLTk2MSw3ICYjNDM7OTYxLDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKQogewogCXJldHVybiBwdGVfcG1kKHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi8KICNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFkgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWRfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKQEAgLTEyMDgsMTAgJiM0MzsxMjA4LDEwIEBAIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3N3cF9jbGVhcl9leGNsdXNpdmUocHRlX3QgcHRlKQogCXJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgJmFtcDsgfl9QQUdFX1NXUF9FWENMVVNJVkUpOwogfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAjZGVmaW5lIF9fcG1kX3RvX3N3cF9lbnRyeShwbWQpICgoc3dwX2VudHJ5X3QpIHsgcG1kX3ZhbChwbWQpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbCkKLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi8KIAogLyoKICAqIEluIHRoZSBSVjY0IExpbnV4IHNjaGVtZSwgd2UgZ2l2ZSB0aGUgdXNlciBoYWxmIG9mIHRoZSB2aXJ0dWFsLWFkZHJlc3Mgc3BhY2UKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggODQ0MDRlNjc3OGQ1MDQuLjA3MTlmNjhkZTBmMzZmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtODIsNyAmIzQzOzgyLDcgQEAgY29uZmlnIFMzOTAKIAlzZWxlY3QgQVJDSF9DT1JSRUNUX1NUQUNLVFJBQ0VfT05fS1JFVFBST0JFCiAJc2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHIGlmIFNQQVJTRU1FTQogCXNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTICZndDsgMgotCXNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFCiYjNDM7CXNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRQogCXNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOSwogCXNlbGVjdCBBUkNIX0hBU19DUFVfRklOQUxJWkVfSU5JVAogCXNlbGVjdCBBUkNIX0hBU19DVVJSRU5UX1NUQUNLX1BPSU5URVIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDg1OWNlN2M3ZDQ1NDQ4Li42ZmFjY2ZhNjNiMDkzMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC05MDMsNyAmIzQzOzkwMyw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kX3QgcG1kKQogCXJldHVybiBjbGVhcl9wbWRfYml0KHBtZCwgX19wZ3Byb3QoX1NFR01FTlRfRU5UUllfU09GVF9ESVJUWSkpOwogfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAjZGVmaW5lIHBtZF9zd3Bfc29mdF9kaXJ0eShwbWQpCQlwbWRfc29mdF9kaXJ0eShwbWQpCiAjZGVmaW5lIHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZCkJcG1kX21rc29mdF9kaXJ0eShwbWQpCiAjZGVmaW5lIHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWQpCXBtZF9jbGVhcl9zb2Z0X2RpcnR5KHBtZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGJkYWQ5MGYyMTBlNGJmLi41MGUwMGQ4NDE3YWFjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC03MCw3ICYjNDM7NzAsNyBAQCBjb25maWcgWDg2CiAJc2VsZWN0IEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTiBpZiBYODZfNjQgJmFtcDsmYW1wOyBIVUdFVExCX1BBR0UgJmFtcDsmYW1wOyBNSUdSQVRJT04KIAlzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgWDg2XzY0CiAJc2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgKFBHVEFCTEVfTEVWRUxTICZndDsgMikgJmFtcDsmYW1wOyAoWDg2XzY0IHx8IFg4Nl9QQUUpCi0Jc2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgWDg2XzY0ICZhbXA7JmFtcDsgVFJBTlNQQVJFTlRfSFVHRVBBR0UKJiM0MzsJc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFg4Nl82NCAmYW1wOyZhbXA7IFRSQU5TUEFSRU5UX0hVR0VQQUdFCiAJc2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERQlpZiBBQ1BJCiAJc2VsZWN0IEFSQ0hfSEFTX0NQVV9BVFRBQ0tfVkVDVE9SUwlpZiBDUFVfTUlUSUdBVElPTlMKIAlzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYWMyOTVjYTZjOTJmOTkuLmUwZmQzMThkNDAwNGQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xNTQ1LDcgJiM0MzsxNTQ1LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc3dwX2NsZWFyX3NvZnRfZGlydHkocHRlX3QgcHRlKQogCXJldHVybiBwdGVfY2xlYXJfZmxhZ3MocHRlLCBfUEFHRV9TV1BfU09GVF9ESVJUWSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKQogewogCXJldHVybiBwbWRfc2V0X2ZsYWdzKHBtZCwgX1BBR0VfU1dQX1NPRlRfRElSVFkpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IGQzMjQwOGY3Y2Q1ZWQyLi4xZmI1YWNkODhhZDAyNCAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvdGFza19tbXUuYwpAQCAtMjEyOSw3ICYjNDM7MjEyOSw4IEBAIHN0YXRpYyBpbnQgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQlmbGFncyB8PSBQTV9TT0ZUX0RJUlRZOwogCQlpZiAocG1kX3N3cF91ZmZkX3dwKHBtZCkpCiAJCQlmbGFncyB8PSBQTV9VRkZEX1dQOwotCQlwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7CiYjNDM7CQlpZiAoc29mdGxlYWZfaGFzX3BmbihlbnRyeSkpCiYjNDM7CQkJcGFnZSA9IHNvZnRsZWFmX3RvX3BhZ2UoZW50cnkpOwogCX0KIAogCWlmIChwYWdlKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li4xNDg3YmY0YWYxYTdlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKQEAgLTU2Nyw3ICYjNDM7NTY3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmdldF9wZXJzaXN0ZW50X2h1Z2VfemVyb19mb2xpbyh2b2lkKQogCiBzdGF0aWMgaW5saW5lIGJvb2wgdGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQodm9pZCkKIHsKLQlyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTik7CiYjNDM7CXJldHVybiBJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRik7CiB9CiAKIHZvaWQgc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCBiL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oCmluZGV4IDk5MmNkOGJkOGVkMGU5Li44ODg4OGRhZWIwMThhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWFmb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9sZWFmb3BzLmgKQEAgLTgxLDcgJiM0Mzs4MSw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3Qgc29mdGxlYWZfdG9fcHRlKHNvZnRsZWFmX3QgZW50cnkpCiAJcmV0dXJuIHN3cF9lbnRyeV90b19wdGUoZW50cnkpOwogfQogCi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAvKioKICAqIHNvZnRsZWFmX2Zyb21fcG1kKCkgLSBPYnRhaW4gYSBsZWFmIGVudHJ5IGZyb20gYSBQTUQgZW50cnkuCiAgKiBAcG1kOiBQTUQgZW50cnkuCkBAIC0xMDgsNiAmIzQzOzEwOCwyMSBAQCBzdGF0aWMgaW5saW5lIHNvZnRsZWFmX3Qgc29mdGxlYWZfZnJvbV9wbWQocG1kX3QgcG1kKQogCXJldHVybiBzd3BfZW50cnkoX19zd3BfdHlwZShhcmNoX2VudHJ5KSwgX19zd3Bfb2Zmc2V0KGFyY2hfZW50cnkpKTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHNvZnRsZWFmX3RvX3BtZCgpIC0gT2J0YWluIGEgUE1EIGVudHJ5IGZyb20gYSBsZWFmIGVudHJ5LgomIzQzOyAqIEBlbnRyeTogTGVhZiBlbnRyeS4KJiM0MzsgKgomIzQzOyAqIFRoaXMgZ2VuZXJhdGVzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBQTUQgZW50cnkgdGhhdCBjYW4gYmUgdXRpbGlzZWQgdG8KJiM0MzsgKiBlbmNvZGUgdGhlIG1ldGFkYXRhIHRoZSBsZWFmIGVudHJ5IGVuY29kZXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgUE1EIGVudHJ5IGVuY29kaW5nIGxlYWYgZW50cnkuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBwbWRfdCBzb2Z0bGVhZl90b19wbWQoc29mdGxlYWZfdCBlbnRyeSkKJiM0Mzt7CiYjNDM7CS8qIFRlbXBvcmFyeSB1bnRpbCBzd3BfZW50cnlfdCBlbGltaW5hdGVkLiAqLwomIzQzOwlyZXR1cm4gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7CiYjNDM7fQomIzQzOwogI2Vsc2UKIAogc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZCkKQEAgLTExNSw2ICYjNDM7MTMwLDExIEBAIHN0YXRpYyBpbmxpbmUgc29mdGxlYWZfdCBzb2Z0bGVhZl9mcm9tX3BtZChwbWRfdCBwbWQpCiAJcmV0dXJuIHNvZnRsZWFmX21rX25vbmUoKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgcG1kX3Qgc29mdGxlYWZfdG9fcG1kKHNvZnRsZWFmX3QgZW50cnkpCiYjNDM7ewomIzQzOwlyZXR1cm4gX19wbWQoMCk7CiYjNDM7fQomIzQzOwogI2VuZGlmCiAKIC8qKgpAQCAtNTY3LDcgJiM0Mzs1ODcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OKQomIzQzOyNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgJmFtcDsmYW1wOyBkZWZpbmVkKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRikKIAogLyoqCiAgKiBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkoKSAtIENoZWNrIGlmIFBNRCBjb250YWlucyBhIGRldmljZSBwcml2YXRlIHN3YXAKQEAgLTU4NiwxNCAmIzQzOzYwNiwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KHBtZF90IHBtZCkKIAlyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7CiB9CiAKLSNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgJmFtcDsmYW1wOyBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwomIzQzOyNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgJmFtcDsmYW1wOyBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi8KIAogc3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQogCi0jZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFICZhbXA7JmFtcDsgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi8KJiM0MzsjZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFICZhbXA7JmFtcDsgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovCiAKIC8qKgogICogcG1kX2lzX21pZ3JhdGlvbl9lbnRyeSgpIC0gRG9lcyB0aGlzIFBNRCBlbnRyeSBlbmNvZGUgYSBtaWdyYXRpb24gZW50cnk/CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCmluZGV4IGQ1MmQyYTk3NmU1YTI4Li5lMzhmMDY5YzFjOTEwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKQEAgLTE4MzksNyAmIzQzOzE4MzksNyBAQCBzdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9tb2RpZnkocGdwcm90X3Qgb2xkcHJvdCwgcGdwcm90X3QgbmV3cHJvdCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9TT0ZUX0RJUlRZCi0jaWZuZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OCiYjNDM7I2lmbmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKQogewogCXJldHVybiBwbWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaCBiL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oCmluZGV4IDhjZmM5NjZlYWU0OGViLi43MDVhODQxNTRkMjhlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgKQEAgLTMyMSw3ICYjNDM7MzIxLDcgQEAgc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKQogCiBzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGs7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIGV4dGVybiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LAogCQlzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKQEAgLTMzOCw3ICYjNDM7MzM4LDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeV90IGVudHJ5KQogCXJldHVybiBfX3N3cF9lbnRyeV90b19wbWQoYXJjaF9lbnRyeSk7CiB9CiAKLSNlbHNlICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwomIzQzOyNlbHNlICAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywKIAkJc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC0zNTgsNyAmIzQzOzM1OCw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSkKIAlyZXR1cm4gX19wbWQoMCk7CiB9CiAKLSNlbmRpZiAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi8KJiM0MzsjZW5kaWYgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqLwogCiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwogI2VuZGlmIC8qIF9MSU5VWF9TV0FQT1BTX0ggKi8KZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDllMGNhNDgyNDkwNTRmLi4wNGZlNTE3MWJiOGM4MCAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9tbS9LY29uZmlnCkBAIC03MDMsNyAmIzQzOzcwMyw3IEBAIGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OCiBjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OCiAJYm9vbAogCi1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzO2NvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRgogCWJvb2wKIAogY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFCmRpZmYgLS1naXQgYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMgYi9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMKaW5kZXggMjNkYzNlZTA5NTYxOTIuLjUwN2ZiZDFhZTdlNTM1IDEwMDY0NAotLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jCkBAIC03NTEsMTQgJiM0Mzs3NTEsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwbWRfdCBwbWQ7CiAKIAlpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpIHx8Ci0JICAgICFJU19FTkFCTEVEKENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OKSkKJiM0MzsJICAgICFJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRikpCiAJCXJldHVybjsKIAogCWlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpCiAJCXJldHVybjsKIAogCXByX2RlYnVnKCYjMzQ7VmFsaWRhdGluZyBQTUQgc3dhcCBzb2Z0IGRpcnR5XG4mIzM0Oyk7Ci0JcG1kID0gc3dwX2VudHJ5X3RvX3BtZChhcmdzLSZndDtsZWFmX2VudHJ5KTsKJiM0MzsJcG1kID0gc29mdGxlYWZfdG9fcG1kKGFyZ3MtJmd0O2xlYWZfZW50cnkpOwogCVdBUk5fT04oIXBtZF9pc19odWdlKHBtZCkpOwogCVdBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZihwbWQpKTsKIApAQCAtODE5LDcgJiM0Mzs4MTksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcHRlX3N3YXBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlXQVJOX09OKG1lbWNtcCgmYW1wO3B0ZTEsICZhbXA7cHRlMiwgc2l6ZW9mKHB0ZTEpKSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIHsKIAlzd3BfZW50cnlfdCBhcmNoX2VudHJ5OwpAQCAtODI5LDcgJiM0Mzs4MjksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpCiAJCXJldHVybjsKIAogCXByX2RlYnVnKCYjMzQ7VmFsaWRhdGluZyBQTUQgc3dhcFxuJiMzNDspOwotCXBtZDEgPSBzd3BfZW50cnlfdG9fcG1kKGFyZ3MtJmd0O2xlYWZfZW50cnkpOwomIzQzOwlwbWQxID0gc29mdGxlYWZfdG9fcG1kKGFyZ3MtJmd0O2xlYWZfZW50cnkpOwogCVdBUk5fT04oIXBtZF9pc19odWdlKHBtZDEpKTsKIAlXQVJOX09OKCFwbWRfaXNfdmFsaWRfc29mdGxlYWYocG1kMSkpOwogCkBAIC04MzcsOSAmIzQzOzgzNyw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykKIAlwbWQyID0gX19zd3BfZW50cnlfdG9fcG1kKGFyY2hfZW50cnkpOwogCVdBUk5fT04obWVtY21wKCZhbXA7cG1kMSwgJmFtcDtwbWQyLCBzaXplb2YocG1kMSkpKTsKIH0KLSNlbHNlICAvKiAhQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi8KJiM0MzsjZWxzZSAgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqLwogc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH0KLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqLwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi8KIAogc3RhdGljIHZvaWQgX19pbml0IHN3YXBfbWlncmF0aW9uX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpCiB7CmRpZmYgLS1naXQgYS9tbS9obW0uYyBiL21tL2htbS5jCmluZGV4IGM3MmM5ZGRmZGIyZjYyLi40ZjNmNjI3ZDJiNDc3MiAxMDA2NDQKLS0tIGEvbW0vaG1tLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaG1tLmMKQEAgLTMzMSw3ICYjNDM7MzMxLDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTsKIH0KIAotI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRgogc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgKmhtbV9wZm5zLAogCQkJCSAgICAgcG1kX3QgcG1kKQpAQCAtMzkxLDcgJiM0MzszOTEsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiBobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTsKIH0KLSNlbmRpZiAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi8KJiM0MzsjZW5kaWYgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqLwogCiBzdGF0aWMgaW50IGhtbV92bWFfd2Fsa19wbWQocG1kX3QgKnBtZHAsCiAJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydCwKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDJiY2NiMGE1M2EwYTYwLi40YjZlNDQxYWU5MzFlYyAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xODE5LDcgJiM0MzsxODE5LDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZCgKIAlpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSB8fAogCSAgICBzb2Z0bGVhZl9pc19taWdyYXRpb25fcmVhZF9leGNsdXNpdmUoZW50cnkpKSB7CiAJCWVudHJ5ID0gbWFrZV9yZWFkYWJsZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpOwotCQlwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTsKJiM0MzsJCXBtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7CiAJCWlmIChwbWRfc3dwX3NvZnRfZGlydHkoKnNyY19wbWQpKQogCQkJcG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKTsKIAkJaWYgKHBtZF9zd3BfdWZmZF93cCgqc3JjX3BtZCkpCkBAIC0xODMyLDcgJiM0MzsxODMyLDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZCgKIAkJICovCiAJCWlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHsKIAkJCWVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7Ci0JCQlwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTsKJiM0MzsJCQlwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpOwogCiAJCQlpZiAocG1kX3N3cF9zb2Z0X2RpcnR5KCpzcmNfcG1kKSkKIAkJCQlwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWQpOwpAQCAtMjU1NywxMSAmIzQzOzI1NTcsMTIgQEAgc3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQlib29sIHVmZmRfd3BfcmVzb2x2ZSkKIHsKIAlzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQoKnBtZCk7Ci0JY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTsKIAlwbWRfdCBuZXdwbWQ7CiAKIAlWTV9XQVJOX09OKCFwbWRfaXNfdmFsaWRfc29mdGxlYWYoKnBtZCkpOwogCWlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKSB7CiYjNDM7CQljb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpOwomIzQzOwogCQkvKgogCQkgKiBBIHByb3RlY3Rpb24gY2hlY2sgaXMgZGlmZmljdWx0IHNvCiAJCSAqIGp1c3QgYmUgc2FmZSBhbmQgZGlzYWJsZSB3cml0ZQpAQCAtMjU3MCwxMiAmIzQzOzI1NzEsMTIgQEAgc3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJZW50cnkgPSBtYWtlX3JlYWRhYmxlX2V4Y2x1c2l2ZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpOwogCQllbHNlCiAJCQllbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTsKLQkJbmV3cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7CiYjNDM7CQluZXdwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpOwogCQlpZiAocG1kX3N3cF9zb2Z0X2RpcnR5KCpwbWQpKQogCQkJbmV3cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkobmV3cG1kKTsKIAl9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlX3dyaXRlKGVudHJ5KSkgewogCQllbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoc3dwX29mZnNldChlbnRyeSkpOwotCQluZXdwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTsKJiM0MzsJCW5ld3BtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7CiAJCWlmIChwbWRfc3dwX3VmZmRfd3AoKnBtZCkpCiAJCQluZXdwbWQgPSBwbWRfc3dwX21rdWZmZF93cChuZXdwbWQpOwogCX0gZWxzZSB7CkBAIC00ODYzLDcgJiM0Mzs0ODY0LDcgQEAgc3RhdGljIGludCBfX2luaXQgc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKHZvaWQpCiBsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRgogaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywKIAkJc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC00OTIzLDcgJiM0Mzs0OTI0LDcgQEAgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywKIAl9CiAKIAkvKiBTZXQgUE1ELiAqLwotCXBtZHN3cCA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpOwomIzQzOwlwbWRzd3AgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpOwogCWlmIChzb2Z0ZGlydHkpCiAJCXBtZHN3cCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZHN3cCk7CiAJaWYgKHVmZmRfd3ApCkBAIC00OTc2LDcgJiM0Mzs0OTc3LDcgQEAgdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpCiAJCWVsc2UKIAkJCWVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeSgKIAkJCQkJCQlwYWdlX3RvX3BmbihuZXcpKTsKLQkJcG1kZSA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpOwomIzQzOwkJcG1kZSA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7CiAKIAkJaWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcHZtdy0mZ3Q7cG1kKSkKIAkJCXBtZGUgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWRlKTsKZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDhlMGRmM2QxYzZmOTgwLi4wZTNkYjk0NTFlNWM3OCAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0xOTU2LDQgJiM0MzsxOTU2LDE3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldF9zeXNjdGxfbWF4X21hcF9jb3VudCh2b2lkKQogYm9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLAogCQkgICB1bnNpZ25lZCBsb25nIG5wYWdlcyk7CiAKJiM0MzsvKgomIzQzOyAqIEVuc3VyZSBAbW0gaXMgb24gdGhlIGluaXRfbW0ubW1saXN0IHNvIHN3YXBvZmYgY2FuIGZpbmQgaXQuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKJiM0Mzt7CiYjNDM7CWlmIChsaXN0X2VtcHR5KCZhbXA7bW0tJmd0O21tbGlzdCkpIHsKJiM0MzsJCXNwaW5fbG9jaygmYW1wO21tbGlzdF9sb2NrKTsKJiM0MzsJCWlmIChsaXN0X2VtcHR5KCZhbXA7bW0tJmd0O21tbGlzdCkpCiYjNDM7CQkJbGlzdF9hZGQoJmFtcDttbS0mZ3Q7bW1saXN0LCAmYW1wO2luaXRfbW0ubW1saXN0KTsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7bW1saXN0X2xvY2spOwomIzQzOwl9CiYjNDM7fQomIzQzOwogI2VuZGlmCS8qIF9fTU1fSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBhM2ZjYWY4Y2ZlOGY4Yi4uNjYzN2M1YjEzYzliYWMgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeS5jCkBAIC05NTMsMTQgJiM0Mzs5NTMsNyBAQCBjb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLAogCQlpZiAoc3dhcF9kdXBfZW50cnlfZGlyZWN0KGVudHJ5KSAmbHQ7IDApCiAJCQlyZXR1cm4gLUVJTzsKIAotCQkvKiBtYWtlIHN1cmUgZHN0X21tIGlzIG9uIHN3YXBvZmYmIzM5O3MgbW1saXN0LiAqLwotCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmYW1wO2RzdF9tbS0mZ3Q7bW1saXN0KSkpIHsKLQkJCXNwaW5fbG9jaygmYW1wO21tbGlzdF9sb2NrKTsKLQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7ZHN0X21tLSZndDttbWxpc3QpKQotCQkJCWxpc3RfYWRkKCZhbXA7ZHN0X21tLSZndDttbWxpc3QsCi0JCQkJCQkmYW1wO3NyY19tbS0mZ3Q7bW1saXN0KTsKLQkJCXNwaW5fdW5sb2NrKCZhbXA7bW1saXN0X2xvY2spOwotCQl9CiYjNDM7CQltbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMoZHN0X21tKTsKIAkJLyogTWFyayB0aGUgc3dhcCBlbnRyeSBhcyBzaGFyZWQuICovCiAJCWlmIChwdGVfc3dwX2V4Y2x1c2l2ZShvcmlnX3B0ZSkpIHsKIAkJCXB0ZSA9IHB0ZV9zd3BfY2xlYXJfZXhjbHVzaXZlKG9yaWdfcHRlKTsKZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCA0OWUxMGZlZWIwOTRmMC4uYzQ4ZGM1MTI3ZTZhYTkgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmMKQEAgLTM2Miw3ICYjNDM7MzYyLDcgQEAgc3RhdGljIGJvb2wgcmVtb3ZlX21pZ3JhdGlvbl9wdGUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJCWlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcHZtdy5hZGRyZXNzKSAtIHB2bXcucGdvZmY7CiAJCW5ldyA9IGZvbGlvX3BhZ2UoZm9saW8sIGlkeCk7CiAKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIAkJLyogUE1ELW1hcHBlZCBUSFAgbWlncmF0aW9uIGVudHJ5ICovCiAJCWlmICghcHZtdy5wdGUpIHsKIAkJCVZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIHx8CkBAIC01NDUsNyAmIzQzOzU0NSw3IEBAIHZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwCiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRgogdm9pZCBwbWRfbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQpCiB7CiAJc3BpbmxvY2tfdCAqcHRsOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKaW5kZXggYWUzOTE3M2Q2YTBlOGEuLjJmOGI2NDYzMDJjMjUxIDEwMDY0NAotLS0gYS9tbS9taWdyYXRlX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21pZ3JhdGVfZGV2aWNlLmMKQEAgLTE2NiwxMSAmIzQzOzE2NiwxNCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJfSBlbHNlIGlmICghcG1kX3ByZXNlbnQoKnBtZHApKSB7CiAJCWNvbnN0IHNvZnRsZWFmX3QgZW50cnkgPSBzb2Z0bGVhZl9mcm9tX3BtZCgqcG1kcCk7CiAKLQkJZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7Ci0KIAkJaWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHwKLQkJCSEobWlncmF0ZS0mZ3Q7ZmxhZ3MgJmFtcDsgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSB8fAotCQkJKGZvbGlvLSZndDtwZ21hcC0mZ3Q7b3duZXIgIT0gbWlncmF0ZS0mZ3Q7cGdtYXBfb3duZXIpKSB7CiYjNDM7CQkgICAgIShtaWdyYXRlLSZndDtmbGFncyAmYW1wOyBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpKSB7CiYjNDM7CQkJc3Bpbl91bmxvY2socHRsKTsKJiM0MzsJCQlyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7CiYjNDM7CQlpZiAoZm9saW8tJmd0O3BnbWFwLSZndDtvd25lciAhPSBtaWdyYXRlLSZndDtwZ21hcF9vd25lcikgewogCQkJc3Bpbl91bmxvY2socHRsKTsKIAkJCXJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7CiAJCX0KQEAgLTc2OCw3ICYjNDM7NzcxLDcgQEAgaW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncykKIH0KIEVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApOwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAvKioKICAqIG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlOiBJbnNlcnQgYSBodWdlIGZvbGlvIGludG8gQG1pZ3JhdGUtJmd0O3ZtYS0mZ3Q7dm1fbW0KICAqIGF0IEBhZGRyLiBmb2xpbyBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhcyBhIHBhcnQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIHdpdGgKQEAgLTgzNSw3ICYjNDM7ODM4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsCiAJCWVsc2UKIAkJCXN3cF9lbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoCiAJCQkJCQlwYWdlX3RvX3BmbihwYWdlKSk7Ci0JCWVudHJ5ID0gc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnkpOwomIzQzOwkJZW50cnkgPSBzb2Z0bGVhZl90b19wbWQoc3dwX2VudHJ5KTsKIAl9IGVsc2UgewogCQlpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pICZhbXA7JmFtcDsKIAkJICAgICFmb2xpb19pc19kZXZpY2VfY29oZXJlbnQoZm9saW8pKSB7CkBAIC05MjMsNyAmIzQzOzkyNiw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLAogCQltaWdyYXRlLSZndDtzcmNbaSYjNDM7aWR4XSA9IG1pZ3JhdGVfcGZuKHBmbiAmIzQzOyBpKSB8IGZsYWdzOwogCXJldHVybiByZXQ7CiB9Ci0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi8KJiM0MzsjZWxzZSAvKiAhQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovCiBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkJIHN0cnVjdCBwYWdlICpwYWdlLApAQCAtOTQ0LDcgJiM0Mzs5NDcsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSwKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfdm1hX25yX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnNyYykKIHsKIAl1bnNpZ25lZCBsb25nIG5yID0gMTsKLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTgomIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYKIAlpZiAoKnNyYyAmYW1wOyBNSUdSQVRFX1BGTl9DT01QT1VORCkKIAkJbnIgPSBIUEFHRV9QTURfTlI7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jCmluZGV4IDFjNzdkNWRjMDZlOWZhLi4wZmI3YTFiODJjZjNjMiAxMDA2NDQKLS0tIGEvbW0vcm1hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3JtYXAuYwpAQCAtMjMwNCwxMiAmIzQzOzIzMDQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB2bXcucHRlLCBwdGV2YWwpOwogCQkJCWdvdG8gd2Fsa19hYm9ydDsKIAkJCX0KLQkJCWlmIChsaXN0X2VtcHR5KCZhbXA7bW0tJmd0O21tbGlzdCkpIHsKLQkJCQlzcGluX2xvY2soJmFtcDttbWxpc3RfbG9jayk7Ci0JCQkJaWYgKGxpc3RfZW1wdHkoJmFtcDttbS0mZ3Q7bW1saXN0KSkKLQkJCQkJbGlzdF9hZGQoJmFtcDttbS0mZ3Q7bW1saXN0LCAmYW1wO2luaXRfbW0ubW1saXN0KTsKLQkJCQlzcGluX3VubG9jaygmYW1wO21tbGlzdF9sb2NrKTsKLQkJCX0KJiM0MzsJCQltbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pOwogCQkJZGVjX21tX2NvdW50ZXIobW0sIE1NX0FOT05QQUdFUyk7CiAJCQlpbmNfbW1fY291bnRlcihtbSwgTU1fU1dBUEVOVFMpOwogCQkJc3dwX3B0ZSA9IHN3cF9lbnRyeV90b19wdGUoZW50cnkpOwpAQCAtMjQ3Nyw3ICYjNDM7MjQ3Miw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQlwYWdlX3ZtYV9tYXBwZWRfd2Fsa19yZXN0YXJ0KCZhbXA7cHZtdyk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04KJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGCiAJCQlwbWR2YWwgPSBwbWRwX2dldChwdm13LnBtZCk7CiAJCQlpZiAobGlrZWx5KHBtZF9wcmVzZW50KHBtZHZhbCkpKQogCQkJCXBmbiA9IHBtZF9wZm4ocG1kdmFsKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMDYKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA4MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBTb2Z0bGVhZiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgc2VlbXMgbGlrZSBhIHJlZmFjdG9yaW5nIGFuZCBidWctZml4aW5nIGVmZm9ydCByZWxhdGVkIHRvIHNvZnRsZWFmIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBuZXcgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgZmVhdHVyZS4gVGhlIHBhdGNoIHJlbmFtZXMgYENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OYCwgd2hpY2ggaW5kaWNhdGVzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBjaGFuZ2UuIEkgc2VlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgZnVuY3Rpb25zIGxpa2UgYHNvZnRsZWFmX3RvX3BtZGAsIGBzb2Z0bGVhZl9mcm9tX3BtZGAsIGBzb2Z0bGVhZl9oYXNfcGZuYCwgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCwgYW5kIGBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXNgLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zLgoKRmlyc3QsIEkgZXhhbWluZWQgdGhlIGNvZGUgY2hhbmdlcy4gVGhlIGFkanVzdG1lbnRzIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGFuZCBgbW0vbWlncmF0ZV9kZXZpY2UuY2AgYXJlIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMuIFRoZXkmIzM5O3JlIGFkZGluZyBjaGVja3MgKGBzb2Z0bGVhZl9oYXNfcGZuYCBhbmQgYHNvZnRsZWFmX2lzX2RldmljZV9wcml2YXRlYCByZXNwZWN0aXZlbHkpIGJlZm9yZSBjYWxsaW5nIGBzb2Z0bGVhZl90b19wYWdlYCBhbmQgYHNvZnRsZWFmX3RvX2ZvbGlvYC4gVGhpcyBpcyBjcnVjaWFsOyBpdCBwcmV2ZW50cyBwb3RlbnRpYWwgY3Jhc2hlcyBvciBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyBieSBoYW5kbGluZyBjYXNlcyB3aGVyZSB0aGVzZSBjb252ZXJzaW9ucyBtaWdodCBiZSBpbnZhbGlkLCBzdWNoIGFzIHdoZW4gZGVhbGluZyB3aXRoIHN3YXAgZW50cmllcy4gR29vZCBjYXRjaC4KCkhvd2V2ZXIsIHRoZSBjaGFuZ2VzIGluIGBtbS9odWdlX21lbW9yeS5jYCByYWlzZSBhIGNvbmNlcm4uIFRoZSBjb2RlIG5vdyByZXRyaWV2ZXMgdGhlIGBmb2xpb2AgaW5zaWRlIGFuIGBpZmAgc3RhdGVtZW50LCBhZnRlciBjaGVja2luZyBgc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlYC4gUHJldmlvdXNseSwgYGZvbGlvYCB3YXMgb2J0YWluZWQgYmVmb3JlIHRoaXMgY2hlY2suIFRoYXTigJlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY29kZSBtb3ZlbWVudC4gSXQgc2VlbXMgbGlrZWx5IHRoYXQgdGhlIGNvZGUgbm93IGhhcyBhIG5ldyBicmFuY2ggdG8gcHJldmVudCBhbiBlcnJvci4KCk92ZXJhbGwsIHRoZXNlIGNoYW5nZXMgYXJlIGFkZHJlc3NpbmcgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gVGhlIHBhdGNoIGlzIGNsZWFybHkgYXR0ZW1wdGluZyB0byBmaXggc2NlbmFyaW9zIHdoZXJlIGBzb2Z0bGVhZl90b19mb2xpb2Agb3IgYHNvZnRsZWFmX3RvX3BhZ2VgIGNvdWxkIGJlIGludm9rZWQgb24gYW4gaW5hcHByb3ByaWF0ZSBlbnRyeS4gVGhhdCBtYWtlcyBtZSBmZWVsIGNvbmZpZGVudCBhYm91dCB0aGUgZnVuY3Rpb25hbGl0eS4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZXNzZW50aWFsIHNpbmNlIGBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgZGVwZW5kcyBvbiBpdC4gRm9yIHRoZSBtb2RpZmljYXRpb25zIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgaXQgbG9va3MgbGlrZSBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBvciBwZXJoYXBzIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgbWlnaHQgYmUgcmVxdWlyZWQuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZGVwZW5kZW5jeSBtb3JlIHRob3JvdWdobHkgdG8gY29uZmlybSB0aGUgY29tcGxldGUgc2V0IG9mIG5lY2Vzc2FyeSBjb25maWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21pZ3JhdGVfZGV2aWNlLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTk9b2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU6MTAwOm9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGUtMTAxLW9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHN5c3RlbSBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgRGV2aWNlIE1pZ3JhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gSSBzZWUgdGhhdCBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIGlzIGVzc2VudGlhbCBmb3IgdGhlIGBtaWdyYXRlX2RldmljZS5jYCBtb2R1bGUgdG8gZnVuY3Rpb24uIEkgYWxyZWFkeSBrbmV3IHRoYXQsIGJ1dCBpdCYjMzk7cyBnb29kIHRvIGJlIHJlbWluZGVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgbWlncmF0ZV9kZXZpY2UuY2AgaGFzIGFueSBjb25uZWN0aW9uIHRvIHRoaXMgYXJlYSwgYXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBkZXZpY2UgbWlncmF0aW9uIGludGVyYWN0cyB3aXRoIHRhc2sgYW5kIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBwcm9jZnMgZnJhbWV3b3JrLiBUaGUgZ29hbCBpcyB0byBhdm9pZCBhbnkgc3VycHJpc2VzLCBhbmQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyB0byBiZSBhd2FyZSBvZiBiZXR3ZWVuIGRldmljZSBtaWdyYXRpb24gYW5kIHRhc2sgbWVtb3J5IG1hbmFnZW1lbnQuIEkgc3VzcGVjdCBpdCBtaWdodCBiZSByZWxldmFudCwgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBkZXZpY2UgbWlncmF0aW9uLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCBgdGFza19tbXUuY2AgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXNrX21tdS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvTWFrZWZpbGU9Nj1vYmoteSAgICYjNDM7PSBwcm9jLm9cbmZzL3Byb2MvTWFrZWZpbGUtNy1cbmZzL3Byb2MvTWFrZWZpbGU6ODpDRkxBR1NfdGFza19tbXUub1x0JiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuZnMvcHJvYy9NYWtlZmlsZS05LXByb2MteVx0XHRcdDo9IG5vbW11Lm8gdGFza19ub21tdS5vXG5mcy9wcm9jL01ha2VmaWxlOjEwOnByb2MtJChDT05GSUdfTU1VKVx0Oj0gdGFza19tbXUub1xuZnMvcHJvYy9NYWtlZmlsZS0xMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg2MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgdW5mb2xkczoKCioqRGVwZW5kZW5jaWVzIGFuZCBTY29wZSoqCgpPa2F5LCBzbyBJIHNlZSBhIGZsYWfigJRgQ09ORklHX01NVWDigJRhbmQgaXQmIzM5O3MgcGluZ2luZyBteSBicmFpbi4gQWgsIHJpZ2h0LCB0aGF0JiMzOTtzIGEgcHJlcmVxdWlzaXRlIGZvciBgdGFza19tbXUuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRpZXMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuIE15IGV4cGVydGlzZSBzYXlzIEkgc2hvdWxkIGNvbmZpcm0gdGhhdCB0aGlzIGlzIHRydWUuIFdoZXJlIGRvZXMgdGhpcyBnZXQgdXNlZD8gSSBzaG91bGQgaW52ZXN0aWdhdGUgYG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllc2AuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgdGhhdCBmdW5jdGlvbiBkZWNsYXJhdGlvbiB3aXRoaW4gYG1tL2ludGVybmFsLmhgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBhbmQgd2h5IGl0IG5lY2Vzc2l0YXRlcyB0aGUgTU1VIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTk1Nj1ib29sIG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MsXG4tLVxubW0vaW50ZXJuYWwuaC0xOTYxLSAqL1xubW0vaW50ZXJuYWwuaDoxOTYyOnN0YXRpYyBpbmxpbmUgdm9pZCBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9pbnRlcm5hbC5oLTE5NjMte1xuLS1cbm1tL21lbW9yeS5jPTk0MT1jb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxuLS1cbm1tL21lbW9yeS5jLTk1NS1cbm1tL21lbW9yeS5jOjk1NjpcdFx0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKGRzdF9tbSk7XG5tbS9tZW1vcnkuYy05NTctXHRcdC8qIE1hcmsgdGhlIHN3YXAgZW50cnkgYXMgc2hhcmVkLiAqL1xuLS1cbm1tL3JtYXAuYz0xOTg0PXN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcm1hcC5jLTIzMDYtXHRcdFx0fVxubW0vcm1hcC5jOjIzMDc6XHRcdFx0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKG1tKTtcbm1tL3JtYXAuYy0yMzA4LVx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzgyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJiMzOTtzIENvdmVyYWdlKioKCk9rYXksIHRoZSBwYXRjaCBpdHNlbGYgc2VlbXMgc29saWQsIGl0JiMzOTtzIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGlkZW50aWZpZWQgdGhlIHJpZ2h0IGFyZWFzIGZvciBpdHMgZm9jdXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBtb3N0IHJlbGV2YW50IHN5bWJvbHMgdG8gYW5hbHl6ZS4KCkkmIzM5O20gdGhpbmtpbmcgdGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZTogYHBhZ2VtYXBfcG1kX3JhbmdlX3RocGAg4oCTIHRoYXQmIzM5O3MgY29taW5nIGZyb20gYGZzL3Byb2MvdGFza19tbXUuY2AsIHdoaWNoIGlzIGxvZ2ljYWwgZ2l2ZW4gdGhlIGNvbnRleHQuIFRoZW4gdGhlcmUmIzM5O3MgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGZyb20gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCBpbXBvcnRhbnQgZm9yIG1lbW9yeSBtaWdyYXRpb24sIGFuZCBgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kYCBmcm9tIGBtbS9odWdlX21lbW9yeS5jYC0tIGNydWNpYWwgZm9yIGhhbmRsaW5nIGh1Z2UgcGFnZXMuIFRoZW4gYGNvcHlfbm9ucHJlc2VudF9wdGVgIGZyb20gYG1tL21lbW9yeS5jYCBzZWVtcyBsaWtlIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgZGVhbGluZyB3aXRoIHBhZ2UgdGFibGUgZW50cmllcy4gRmluYWxseSwgYHRyeV90b191bm1hcF9vbmVgIGZyb20gYG1tL3JtYXAuY2AgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIGFueSB1bm1hcHBpbmcgc2NlbmFyaW8uCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwYC4gSSYjMzk7bGwgdmVyaWZ5IGlmIGl0JiMzOTtzIHJlYWNoYWJsZSBhbmQgZnVsbHkgdW5kZXJzdG9vZCBieSB0aGUgcGF0Y2guIFRoYXQgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGFnZW1hcF9wbWRfcmFuZ2VfdGhwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0yMDIxPXN0YXRpYyBwYWdlbWFwX2VudHJ5X3QgcHRlX3RvX3BhZ2VtYXBfZW50cnkoc3RydWN0IHBhZ2VtYXByZWFkICpwbSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjA4Ny0jaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjA4ODpzdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlX3RocChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZnMvcHJvYy90YXNrX21tdS5jLTIwODktXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MjE2Nj1zdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0yMTc3LVx0aWYgKHB0bCkge1xuZnMvcHJvYy90YXNrX21tdS5jOjIxNzg6XHRcdGVyciA9IHBhZ2VtYXBfcG1kX3JhbmdlX3RocChwbWRwLCBhZGRyLCBlbmQsIHZtYSwgcG0pO1xuZnMvcHJvYy90YXNrX21tdS5jLTIxNzktXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTM2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipSZWFjaGluZyB0aGUgVGFyZ2V0KioKCkFscmlnaHQsIHllcCwgbG9va3MgbGlrZSB3ZSYjMzk7cmUgaW4gYSBwb3NpdGlvbiB0byBwcm9jZWVkLiBUaGlzIGlzIGxvb2tpbmcgcHJvbWlzaW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IG91ciBhc3N1bXB0aW9ucyBieSBleGFtaW5pbmcgdGhlIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhpcyBpcyB0aGUgY29ycmVjdCBlbnRyeSBwb2ludCB0byBhc3Nlc3MgaXRzIHJvbGUgaW4gdGhpcyBjb250ZXh0IGJlZm9yZSBjb21taXR0aW5nIGZ1cnRoZXIgcmVzb3VyY2VzLiBUaGUgYXJjaGl0ZWN0dXJlIG5lZWRzIGEgc2FuaXR5IGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oPTEzMzQ9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2h1Z2VfZ2V0X2FuZF9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xMzQzLVx0ICogICBlbmNvdW50ZXIgbm9uLXByZXNlbnQgcG1kcy5cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEzNDQ6XHQgKiAtIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQoKSBjb3VsZCBjYWxscyB0aGlzIGR1cmluZyBtaWdyYXRpb25cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTEzNDUtXHQgKiAgIG9mIGRldmljZS1wcml2YXRlIHBtZCBlbnRyaWVzLlxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9ODI9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTIzLVxubW0vbWlncmF0ZV9kZXZpY2UuYzoxMjQ6LyoqIG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQgLSBjb2xsZWN0IFRIUCBwYWdlcyB3aXRob3V0IHNwbGl0dGluZyB0aGVcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1LSAqIGZvbGlvIGZvciBkZXZpY2UgcHJpdmF0ZSBwYWdlcy5cbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNS0gKi9cbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM2OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM3LVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGssXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYz0yNDQ9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTI1OS1cdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kcCkgfHwgIXBtZF9wcmVzZW50KCpwbWRwKSkge1xubW0vbWlncmF0ZV9kZXZpY2UuYzoyNjA6XHRcdGludCByZXQgPSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZHAsIHN0YXJ0LCBlbmQsIHdhbGssIGZhdWx0X2ZvbGlvKTtcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjYxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTc5MAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgUmVhY2hhYmlsaXR5IGFuZCBhIFNwZWNpZmljIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCBzb21ldGhpbmcgaXMgYWNoaWV2YWJsZSwgcmVhY2hhYmxlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdC4gSSYjMzk7bSBnb2luZyB0byBkZWx2ZSBpbnRvIHRoZSBgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kYCBmdW5jdGlvbi4gVGhhdCBzZWVtcyBsaWtlIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MjUwND1ib29sIG1vdmVfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNTU0LVxubW0vaHVnZV9tZW1vcnkuYzoyNTU1OnN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU1Ni1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kLCBib29sIHVmZmRfd3AsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNjAxPWludCBjaGFuZ2VfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yNjIyLVx0aWYgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXHUwMDI2XHUwMDI2IHBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSkge1xubW0vaHVnZV9tZW1vcnkuYzoyNjIzOlx0XHRjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQobW0sIGFkZHIsIHBtZCwgdWZmZF93cCxcbm1tL2h1Z2VfbWVtb3J5LmMtMjYyNC1cdFx0XHRcdFx0ICAgIHVmZmRfd3BfcmVzb2x2ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTk1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUmVhY2hpbmcgZm9yIGBjb3B5X25vbnByZXNlbnRfcHRlYCoqCgpPa2F5LCB5ZXMsIHRoYXQgc291bmRzIGxpa2UgYSB2aWFibGUgcGF0aCBmb3J3YXJkLiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGlzIGFjaGlldmFibGUuIE5vdywgd2hlcmUgZG8gSSBzdGFydD8gTGV0JiMzOTtzIHpvb20gaW4gYW5kIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBjb3B5X25vbnByZXNlbnRfcHRlYC4gSXQmIzM5O3MgbGlrZWx5IHRoYXQgZnVuY3Rpb24gaG9sZHMgdGhlIGtleSB0byB0aGUgc29sdXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZWNoYW5pY3MuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9ub25wcmVzZW50X3B0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz05NDA9c3RhdGljIHVuc2lnbmVkIGxvbmdcbm1tL21lbW9yeS5jOjk0MTpjb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxubW0vbWVtb3J5LmMtOTQyLVx0XHRwdGVfdCAqZHN0X3B0ZSwgcHRlX3QgKnNyY19wdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSxcbi0tXG5tbS9tZW1vcnkuYz0xMjE3PWNvcHlfcHRlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxuLS1cbm1tL21lbW9yeS5jLTEyODgtXHRcdGlmICh1bmxpa2VseSghcHRlX3ByZXNlbnQocHRlbnQpKSkge1xubW0vbWVtb3J5LmM6MTI4OTpcdFx0XHRyZXQgPSBjb3B5X25vbnByZXNlbnRfcHRlKGRzdF9tbSwgc3JjX21tLFxubW0vbWVtb3J5LmMtMTI5MC1cdFx0XHRcdFx0XHQgIGRzdF9wdGUsIHNyY19wdGUsXG4tLVxubW0vbXByb3RlY3QuYz0yMTQ9c3RhdGljIGxvbmcgY2hhbmdlX3NvZnRsZWFmX3B0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tcHJvdGVjdC5jLTIzOC1cdFx0ICogV2UgZG8gbm90IHByZXNlcnZlIHNvZnQtZGlydGluZXNzLiBTZWVcbm1tL21wcm90ZWN0LmM6MjM5Olx0XHQgKiBjb3B5X25vbnByZXNlbnRfcHRlKCkgZm9yIGV4cGxhbmF0aW9uLlxubW0vbXByb3RlY3QuYy0yNDAtXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY1NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUmVhY2hpbmcgYW4gRW5kcG9pbnQqKgoKWWVzLCB0aGUgb2JqZWN0aXZlIGlzIHdpdGhpbiBncmFzcC4gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgdGhlIHBhdGggaXMgdmFsaWQgYW5kIHRoYXQgdGhlIHRhcmdldCBjYW4gYmUgcmVhY2hlZC4KCk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGB0cnlfdG9fdW5tYXBfb25lYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsIGluIGhhbmRsaW5nIHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbiBjb25mbGljdHMsIHNvIHVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGlzIGNydWNpYWwuIEkgd2FudCB0byBkZWx2ZSBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGl0IG9wZXJhdGVzIGluIHRoZSBjdXJyZW50IGNvbnRleHQuIEl0JiMzOTtzIHRpbWUgdG8gYW5hbHl6ZSBpdHMgcm9sZSBpbiBlaXRoZXIgc3VjY2Vzc2Z1bGx5IG9yIHVuc3VjY2Vzc2Z1bGx5IGNvbXBsZXRpbmcgdGhlIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX3VubWFwX29uZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTQ0MD1UaGVyZSBpcyBhbHNvIGEgZmlsZS1zeXN0ZW0gc3BlY2lmaWMgbG9jayBvcmRlcmluZyBjb21tZW50IGxvY2F0ZWQgYXQgdGhlIHRvcCBvZlxuLS1cbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNDc2LSAgLVx1MDAzZXBhZ2VfdGFibGVfbG9jayBvciBwdGVfbG9ja1xuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0Nzc6ICAgIC1cdTAwM2Vzd2FwX2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgKHRyeV90b191bm1hcF9vbmUpXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ3ODogICAgLVx1MDAzZXByaXZhdGVfbG9jayAgICAgICAgICAgICAgICAgICAgICAodHJ5X3RvX3VubWFwX29uZSlcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NDc5OiAgICAtXHUwMDNlaV9wYWdlcyBsb2NrICAgICAgICAgICAgICAgICAgICAgICh0cnlfdG9fdW5tYXBfb25lKVxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00ODAtICAgIC1cdTAwM2VscnV2ZWMtXHUwMDNlbHJ1X2xvY2sgICAgICAgICAgICAgICAgICAoZm9sbG93X3BhZ2VfbWFzay1cdTAwM2VtYXJrX3BhZ2VfYWNjZXNzZWQpXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0PTU1NT1ybWFwJiMzOTtzIGZvbGlvX3JlZmVyZW5jZWRfb25lKCksIGNhbGxlZCB2aWEgdm1zY2FuJiMzOTtzIHNocmlua19hY3RpdmVfbGlzdCgpIG9yXG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3Q6NTU2OnNocmlua19mb2xpb19saXN0KCksIGFuZCBybWFwJiMzOTtzIHRyeV90b191bm1hcF9vbmUoKSBjYWxsZWQgdmlhIHNocmlua19mb2xpb19saXN0KCksXG5Eb2N1bWVudGF0aW9uL21tL3VuZXZpY3RhYmxlLWxydS5yc3QtNTU3LWNoZWNrIGZvciAoMykgcGFnZXMgc3RpbGwgbWFwcGVkIGludG8gVk1fTE9DS0VEIFZNQXMsIGFuZCBjYWxsIG1sb2NrX3ZtYV9mb2xpbygpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaD0xOT10eXBlZGVmIHN0cnVjdCB7XG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaC0zMy0gKiByb2xsb3ZlciBldmVudCAoc2VlIG5ld19jb250ZXh0KCkgYW5kIGZsdXNoX2NvbnRleHQoKSkuIEluIHRoaXMgY2FzZSxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11Lmg6MzQ6ICogYSBjb25jdXJyZW50IFRMQkkgKGUuZy4gdmlhIHRyeV90b191bm1hcF9vbmUoKSBhbmQgcHRlcF9jbGVhcl9mbHVzaCgpKVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaC0zNS0gKiBtYXkgdXNlIGEgc3RhbGUgQVNJRC4gVGhpcyBpcyBmaW5lIGluIHByaW5jaXBsZSBhcyB0aGUgbmV3IEFTSUQgaXNcbi0tXG5mcy9uaWxmczIvaW5vZGUuYz0xNzc9c3RhdGljIGJvb2wgbmlsZnNfZGlydHlfZm9saW8oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmlsZnMyL2lub2RlLmMtMTg1LVx0LypcbmZzL25pbGZzMi9pbm9kZS5jOjE4NjpcdCAqIFRoZSBwYWdlIG1heSBub3QgYmUgbG9ja2VkLCBlZyBpZiBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXBfb25lKClcbmZzL25pbGZzMi9pbm9kZS5jLTE4Ny1cdCAqL1xuLS1cbm1tL2ZpbGVtYXAuYy0xMTQtICogIC1cdTAwM2VwYWdlX3RhYmxlX2xvY2sgb3IgcHRlX2xvY2tcbm1tL2ZpbGVtYXAuYzoxMTU6ICogICAgLVx1MDAzZXN3YXBfbG9ja1x0XHQodHJ5X3RvX3VubWFwX29uZSlcbm1tL2ZpbGVtYXAuYzoxMTY6ICogICAgLVx1MDAzZXByaXZhdGVfbG9ja1x0XHQodHJ5X3RvX3VubWFwX29uZSlcbm1tL2ZpbGVtYXAuYzoxMTc6ICogICAgLVx1MDAzZWlfcGFnZXMgbG9ja1x0XHQodHJ5X3RvX3VubWFwX29uZSlcbm1tL2ZpbGVtYXAuYy0xMTgtICogICAgLVx1MDAzZWxydXZlYy1cdTAwM2VscnVfbG9ja1x0KGZvbGxvd19wYWdlX21hc2stXHUwMDNlbWFya19wYWdlX2FjY2Vzc2VkKVxuLS1cbm1tL21lbW9yeS1mYWlsdXJlLmM9MjM4NT1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcbi0tXG5tbS9tZW1vcnktZmFpbHVyZS5jLTI1NzAtXHQgKiBleGFtcGxlIGlzIGFuIG1sb2NrZWQgcGFnZSwgd2hlcmUgUEdfbWxvY2tlZCBpcyBjbGVhcmVkIGJ5XG5tbS9tZW1vcnktZmFpbHVyZS5jOjI1NzE6XHQgKiBmb2xpb19yZW1vdmVfcm1hcF8qKCkgaW4gdHJ5X3RvX3VubWFwX29uZSgpLiBTbyB0byBkZXRlcm1pbmUgcGFnZVxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTcyLVx0ICogc3RhdHVzIGNvcnJlY3RseSwgd2Ugc2F2ZSBhIGNvcHkgb2YgdGhlIHBhZ2UgZmxhZ3MgYXQgdGhpcyB0aW1lLlxuLS1cbm1tL21sb2NrLmM9NDY3PXN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tbG9jay5jLTUwMy1cdCAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS5cbm1tL21sb2NrLmM6NTA0Olx0ICogSXQmIzM5O3Mgb2theSBpZiB0cnlfdG9fdW5tYXBfb25lIHVubWFwcyBhIHBhZ2UganVzdCBhZnRlciB3ZVxubW0vbWxvY2suYy01MDUtXHQgKiBzZXQgVk1fTE9DS0VELCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXG4tLVxubW0vcm1hcC5jPTE5NDQ9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZm9saW9fdW5tYXBfcHRlX2JhdGNoKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTE5ODMtICovXG5tbS9ybWFwLmM6MTk4NDpzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vcm1hcC5jLTE5ODUtXHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB2b2lkICphcmcpXG4tLVxubW0vcm1hcC5jPTIzODk9dm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpXG4tLVxubW0vcm1hcC5jLTIzOTEtXHRzdHJ1Y3Qgcm1hcF93YWxrX2NvbnRyb2wgcndjID0ge1xubW0vcm1hcC5jOjIzOTI6XHRcdC5ybWFwX29uZSA9IHRyeV90b191bm1hcF9vbmUsXG5tbS9ybWFwLmMtMjM5My1cdFx0LmFyZyA9ICh2b2lkICopZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDU3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBWZXJpZmljYXRpb24gZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbmQgRGV2aWNlIE1pZ3JhdGlvbioqCgpPa2F5LCBzbyB0aGUgZ29hbCBpcyBkZWZpbml0ZWx5IGFjaGlldmFibGUuIE5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCDigJMgdGhhdCYjMzk7cyBjcnVjaWFsLiBJIGFsc28ga25vdyBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIGlzIGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBhZnRlciwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIE9mIGNvdXJzZSwgYENPTkZJR19NTVVgIGlzIGdlbmVyYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gY29uZmlybSBpdCYjMzk7cyBwcmVzZW50LiBBbmQsIGdpdmVuIHRoYXQgbWlncmF0aW9uIGlzIGNlbnRyYWwgdG8gdGhlIHByb2Nlc3MsIEkgc2VlIEkmIzM5O2xsIG5lZWQgYENPTkZJR19NSUdSQVRJT05gIGZvciBgbW0vbWlncmF0ZS5jYC4gSSBzaG91bGQgcHJvYmFibHkgY3Jvc3MtcmVmZXJlbmNlIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgaW4gYG1tL0tjb25maWdgIGp1c3QgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGJlZm9yZSBJIG1vdmUgZm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERFVklDRV9NSUdSQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk5LVxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbm1tL0tjb25maWctNzAxLVx0ZGVmX2Jvb2wgTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiBaT05FX0RFVklDRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ0OQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHpvbmUgZGV2aWNlcyBhbmQgbWlncmF0aW9uIOKAkyB0aG9zZSBhcmUgZGVmaW5pdGVseSBrZXksIHNvIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX01JR1JBVElPTmAgYXJlIGVzc2VudGlhbCBwcmVyZXF1aXNpdGVzLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIHdpbGwgYmUgaW1wYWN0aW5nIHRoaXMgc2V0dXAuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCYjMzk7cyByZWFzb25hYmxlIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSwgYXMgdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIHNldHRpbmdzIGFyZSBsb2NhdGVkIHRoZXJlLiBUaGF0JiMzOTtzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODQzPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODQ1LVxubW0vS2NvbmZpZzo4NDY6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04NDctXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg2ND1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg2OS1cbm1tL0tjb25maWc6ODcwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NzEtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzYtXG5tbS9LY29uZmlnOjg3NzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg3OC1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04ODUtXG5tbS9LY29uZmlnOjg4NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04ODctXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg5Mz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTkwMi1cbm1tL0tjb25maWc6OTAzOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctOTA0LVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTItXG5tbS9LY29uZmlnOjkxMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MTQtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MjAtXG5tbS9LY29uZmlnOjkyMTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkyMi1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTI4LVxubW0vS2NvbmZpZzo5Mjk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTMwLVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTM4PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTQ3LVxubW0vS2NvbmZpZzo5NDg6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05NDktXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1Ni1cbm1tL0tjb25maWc6OTU3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk1OC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk2NC1cbm1tL0tjb25maWc6OTY1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTY2LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NzItXG5tbS9LY29uZmlnOjk3MzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NzQtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MzQ4CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFuZCBITU0gTWlycm9yaW5nKioKClJpZ2h0LCAqVHJhbnNwYXJlbnQgSHVnZXBhZ2VzKiBhcmUgdGhlIGltbWVkaWF0ZSByZXF1aXJlbWVudCBoZXJlLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgcHJvcGVybHkgY29uZmlndXJlZCBhbmQgb3BlcmF0aW9uYWwuCgpOb3csIHdoZXJlIGRpZCBJIHNlZSBzb21ldGhpbmcgcmVsYXRlZCB0byBoYW5kbGluZyBtZW1vcnkgbWlycm9yaW5nPyBUaGF0IHJpbmdzIGEgYmVsbC4uLiBJIHRoaW5rIGl0IG1pZ2h0IGJlIGluIGBobW0uY2AuIExldCBtZSBqdXN0IHF1aWNrbHkgc2NhbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4uLiBZZXMsIEkgbmVlZCB0byBjaGVjayBmb3IgYENPTkZJR19ITU1fTUlSUk9SYCBvciBzb21ldGhpbmcgKnNpbWlsYXIqIHdpdGhpbiB0aGUgYGhtbS5jYCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBpbnRlcnBsYXkgb2YgVEhQIHdpdGggYW55IG1lbW9yeSBtaXJyb3JpbmcgaW1wbGVtZW50YXRpb25zIGlzIHdoYXQgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRvIGNvbmZpcm0gY29ycmVjdCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aG1tLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM9MjQ3PXN0YXRpYyBib29sIGFtZHhkbmFfaG1tX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLFxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jLTI4Mi1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jOjI4MzpzdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgYW1keGRuYV9obW1fb3BzID0ge1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtMjg0LVx0LmludmFsaWRhdGUgPSBhbWR4ZG5hX2htbV9pbnZhbGlkYXRlLFxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jPTM0Mj1zdGF0aWMgaW50IGFtZHhkbmFfaG1tX3JlZ2lzdGVyKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibyxcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy0zNzItXHRcdFx0XHRcdFx0ICBsZW4sXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYzozNzM6XHRcdFx0XHRcdFx0ICBcdTAwMjZhbWR4ZG5hX2htbV9vcHMpO1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtMzc0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlPTMyMj1hbWRncHUtJChDT05GSUdfQUNQSSkgJiM0Mzs9IGFtZGdwdV9hY3BpLm9cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlOjMyMzphbWRncHUtJChDT05GSUdfSE1NX01JUlJPUikgJiM0Mzs9IGFtZGdwdV9obW0ub1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUtMzI0LVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM9MzI0PWludCBpYl91bWVtX29kcF9tYXBfZG1hX2FuZF9sb2NrKHN0cnVjdCBpYl91bWVtX29kcCAqdW1lbV9vZHAsIHU2NCB1c2VyX3ZpcnQsXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy0zMzAtXHRpbnQgcGZuX2luZGV4LCBkbWFfaW5kZXgsIHJldCA9IDAsIHN0YXJ0X2lkeDtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM6MzMxOlx0dW5zaWduZWQgaW50IHBhZ2Vfc2hpZnQsIGhtbV9vcmRlciwgcGZuX3N0YXJ0X2lkeDtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzMyLVx0dW5zaWduZWQgbG9uZyBudW1fcGZucywgY3VycmVudF9zZXE7XG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy00MDQtXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjQwNTpcdFx0aG1tX29yZGVyID0gaG1tX3Bmbl90b19tYXBfb3JkZXIocmFuZ2UuaG1tX3BmbnNbcGZuX2luZGV4XSk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTQwNi1cdFx0LyogSWYgYSBodWdlcGFnZSB3YXMgZGV0ZWN0ZWQgYW5kIE9EUCB3YXNuJiMzOTt0IHNldCBmb3IsIHRoZSB1bWVtXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy00MDgtXHRcdCAqL1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYzo0MDk6XHRcdGlmIChobW1fb3JkZXIgJiM0MzsgUEFHRV9TSElGVCBcdTAwM2MgcGFnZV9zaGlmdCkge1xuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy00MTAtXHRcdFx0cmV0ID0gLUVJTlZBTDtcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtNDExLVx0XHRcdGliZGV2X2RiZyh1bWVtX29kcC1cdTAwM2V1bWVtLmliZGV2LFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYzo0MTI6XHRcdFx0XHQgIFwmIzM0OyVzOiB1bi1leHBlY3RlZCBobW1fb3JkZXIgJXUsIHBhZ2Vfc2hpZnQgJXVcXG5cJiMzNDssXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjQxMzpcdFx0XHRcdCAgX19mdW5jX18sIGhtbV9vcmRlciwgcGFnZV9zaGlmdCk7XG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTQxNC1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9NYWtlZmlsZT0xNT1hdG9taXNwLW9ianMgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvTWFrZWZpbGUtNDQtXHRwY2kvaG1tL2htbV9iby5vIFxcXG5kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYXRvbWlzcC9NYWtlZmlsZTo0NTpcdHBjaS9obW0vaG1tLm8gXFxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL01ha2VmaWxlLTQ2LVx0cGNpL2lhX2Nzc19kZXZpY2VfYWNjZXNzLm8gXFxcbi0tXG5saWIvTWFrZWZpbGU9MTAyPW9iai0kKENPTkZJR19URVNUX0xPQ0tVUCkgJiM0Mzs9IHRlc3RfbG9ja3VwLm9cbmxpYi9NYWtlZmlsZToxMDM6b2JqLSQoQ09ORklHX1RFU1RfSE1NKSAmIzQzOz0gdGVzdF9obW0ub1xubGliL01ha2VmaWxlLTEwNC1vYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSAmIzQzOz0gdGVzdF9mcmVlX3BhZ2VzLm9cbi0tXG5tbS9NYWtlZmlsZT0xMzg9b2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSAmIzQzOz0gbWVtcmVtYXAub1xubW0vTWFrZWZpbGU6MTM5Om9iai0kKENPTkZJR19ITU1fTUlSUk9SKSAmIzQzOz0gaG1tLm9cbm1tL01ha2VmaWxlLTE0MC1vYmotJChDT05GSUdfTUVNRkRfQ1JFQVRFKSAmIzQzOz0gbWVtZmQub1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jPTExOT1GSVhUVVJFX1ZBUklBTlRfQUREKGhtbTIsIGhtbTJfZGV2aWNlX2NvaGVyZW50KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTEyNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjEyNTpzdGF0aWMgaW50IGhtbV9vcGVuKGludCB1bml0KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTI2LXtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xNDM9RklYVFVSRV9TRVRVUChobW0pXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTQ3LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTQ4Olx0c2VsZi1cdTAwM2VmZCA9IGhtbV9vcGVuKHZhcmlhbnQtXHUwMDNlZGV2aWNlX251bWJlcik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNDktXHRpZiAoc2VsZi1cdTAwM2VmZCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgaG1tX2lzX2NvaGVyZW50X3R5cGUodmFyaWFudC1cdTAwM2VkZXZpY2VfbnVtYmVyKSlcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xNTQ9RklYVFVSRV9TRVRVUChobW0yKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE1OC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE1OTpcdHNlbGYtXHUwMDNlZmQwID0gaG1tX29wZW4odmFyaWFudC1cdTAwM2VkZXZpY2VfbnVtYmVyMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjAtXHRpZiAoc2VsZi1cdTAwM2VmZDAgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IGhtbV9pc19jb2hlcmVudF90eXBlKHZhcmlhbnQtXHUwMDNlZGV2aWNlX251bWJlcjApKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE2Mi1cdEFTU0VSVF9HRShzZWxmLVx1MDAzZWZkMCwgMCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNjM6XHRzZWxmLVx1MDAzZWZkMSA9IGhtbV9vcGVuKHZhcmlhbnQtXHUwMDNlZGV2aWNlX251bWJlcjEpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTY0LVx0QVNTRVJUX0dFKHNlbGYtXHUwMDNlZmQxLCAwKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz01NDI9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9jaGlsZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy02MjMtXHRcdFx0LyogVGhlIGNoaWxkIHByb2Nlc3MgbmVlZHMgaXRzIG93biBtaXJyb3IgdG8gaXRzIG93biBtbS4gKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjYyNDpcdFx0XHRjaGlsZF9mZCA9IGhtbV9vcGVuKDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNjI1LVx0XHRcdEFTU0VSVF9HRShjaGlsZF9mZCwgMCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NjQ5PVRFU1RfRihobW0sIGFub25fd3JpdGVfY2hpbGRfc2hhcmVkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTcwNS1cdC8qIFRoZSBjaGlsZCBwcm9jZXNzIG5lZWRzIGl0cyBvd24gbWlycm9yIHRvIGl0cyBvd24gbW0uICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzo3MDY6XHRjaGlsZF9mZCA9IGhtbV9vcGVuKDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNzA3LVx0QVNTRVJUX0dFKGNoaWxkX2ZkLCAwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1MTQKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAyNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBQdXp6bGUqKgoKT2theSwgc28gSSYjMzk7bSBwdXR0aW5nIHRvZ2V0aGVyIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIGl0IGxvb2tzIGxpa2UgYENPTkZJR19ITU1fTUlSUk9SYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlIGZvciBgaG1tLmNgLiBHb3QgaXQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBpbiBteSBub3Rlcy4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIHdpdGhpbiBgbW0vS2NvbmZpZ2AuIFJpZ2h0LCBpdCBkZXBlbmRzIG9uIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBTbywgYENPTkZJR19aT05FX0RFVklDRWAgaXMgZXNzZW50aWFsIGhlcmUuIEkga25ldyB0aGVyZSB3YXMgc29tZXRoaW5nIGVsc2UgaW4gdGhhdCBtaXguCgpOb3cgbGV0JiMzOTtzIGNoZWNrIGBDT05GSUdfTUlHUkFUSU9OYC4gQWgsIGl0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBlaXRoZXIgYE5VTUFgIG9yIGBDT01QQUNUSU9OYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBzdHJhaWdodCBmb3J3YXJkLgoKTGV0JiMzOTtzIGNoZWNrIGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgLiBBY3R1YWxseSwgbm8sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgaW5kaXJlY3RseSBlbmFibGVkLiBJdCYjMzk7cyBzZWxlY3RlZCBieSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBzbyBubyBuZWVkIHRvIG1hbmFnZSB0aGF0IGRpcmVjdGx5LiBTYXZlZCB0aGF0IGZvciBsYXRlci4KCkFscmlnaHQsIHNvIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGVuYWJsZSBhcmU6IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBERVZJQ0VfTUlHUkFUSU9OYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBITU1fTUlSUk9SYC4KCldhaXQsIGhvbGQgb24sIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBhIGBkZWZfYm9vbCBNSUdSQVRJT04gJmFtcDsmYW1wOyBaT05FX0RFVklDRWAuIFNvIEkgY2FuJiMzOTt0IGVuYWJsZSBpdCBkaXJlY3RseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgWk9ORV9ERVZJQ0VgIGFuZCBgTUlHUkFUSU9OYCBhcmUgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayBpZiBlbmFibGluZyBgTUlHUkFUSU9OYCBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLiBJIGJldHRlciBnbyBhbmQgY2hlY2sgYFpPTkVfREVWSUNFYCBpbiBgbW0vS2NvbmZpZ2AgdG9vLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQgY29uZmlndXJhdGlvbiB3aWxsIGJlIGltcG9ydGFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpPTkVfREVWSUNFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzMT1jb25maWcgWk9ORV9ETUEzMlxuLS1cbm1tL0tjb25maWctMTIzNS1cbm1tL0tjb25maWc6MTIzNjpjb25maWcgWk9ORV9ERVZJQ0Vcbm1tL0tjb25maWctMTIzNy1cdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI0NwoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBDb25maWd1cmF0aW9uIFZhcmlhYmxlKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgWk9ORV9ERVZJQ0VgLCB3aGljaCB0aGUgY29kZSBzZWVtcyB0byB0cmVhdCBhcyBhIHN0cmFpZ2h0Zm9yd2FyZCBib29sZWFuLiBPa2F5LCB0aGF0JiMzOTtzIGZpbmUsIGJ1dCBJJiMzOTtkIGxpa2UgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYSBiaXQgYmV0dGVyLiBUaGlzIHVzdWFsbHkgbGVhZHMgbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCgpHaXZlbiBpdHMgcHVycG9zZSwgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaG93IGBITU1fTUlSUk9SYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJiMzOTtsbCBuZWVkIHRvIGhlYWQgb3ZlciB0byB0aGUgYG1tL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGxpdmUsIHNvIHRoYXQmIzM5O3MgdGhlIHBsYWNlIHRvIHJlZnJlc2ggbXkgbWVtb3J5LCBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gYFpPTkVfREVWSUNFYCBhbmQgYEhNTV9NSVJST1JgIGlzIHdlbGwtdW5kZXJzdG9vZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBLY29uZmlnIHNheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBITU1fTUlSUk9SJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTIzNj1jb25maWcgWk9ORV9ERVZJQ0Vcbi0tXG5tbS9LY29uZmlnLTEyNTktI1xubW0vS2NvbmZpZzoxMjYwOmNvbmZpZyBITU1fTUlSUk9SXG5tbS9LY29uZmlnLTEyNjEtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTY2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgSE1NX01JUlJPUmAgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgSE1NX01JUlJPUmAgaXMgYSBib29sZWFuLCBhIHN0cmFpZ2h0Zm9yd2FyZCBvbi9vZmYga2luZCBvZiBzZXR0aW5nLiBUaGUgdGhpbmcgdGhhdCBpbW1lZGlhdGVseSBncmFicyBteSBhdHRlbnRpb24gaXMgdGhhdCB0aGVyZSYjMzk7cyBubyBhc3NvY2lhdGVkIHByb21wdCBkZWZpbmVkIGZvciBpdC4gVGhhdCYjMzk7cyBhIGJpdCB1bnVzdWFsLCBhbmQgaXQgdGVsbHMgbWUgdGhpcyBpc24mIzM5O3Qgc29tZXRoaW5nIHRoZSB1c2VyIGlzIGxpa2VseSBkaXJlY3RseSBjb25maWd1cmluZyB0aHJvdWdoIGEgc3RhbmRhcmQgbWVudS4gSXQmIzM5O3MgcHJvYmFibHkgc2VsZWN0ZWQgaW50ZXJuYWxseSwgbGlrZWx5IGJ5IHRoZSBkcml2ZXJzIHRoZW1zZWx2ZXMsIGJhc2VkIG9uIHNvbWUgdW5kZXJseWluZyBjb25kaXRpb24gb3IgZGV0ZWN0aW9uLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGF0KiBleGFjdGx5IGlzIHRyaWdnZXJpbmcgdGhhdCBzZWxlY3Rpb24uIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIGRldGVybWluZSB0aGUgY29uZGl0aW9ucyBvciBjb2RlIHBhdGhzIHRoYXQgYXJlIHNldHRpbmcgdGhpcyBwYXJ0aWN1bGFyIGJvb2xlYW4uIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEhNTV9NSVJST1ImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWc9Mz1jb25maWcgRFJNX0FDQ0VMX0FNRFhETkFcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvS2NvbmZpZy0xMS1cdHNlbGVjdCBGV19MT0FERVJcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnOjEyOlx0c2VsZWN0IEhNTV9NSVJST1JcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnLTEzLVx0aGVscFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnPTIyOD1jb25maWcgRFJNX0dQVVNWTVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9LY29uZmlnLTIzMC1cdGRlcGVuZHMgb24gRFJNXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoyMzE6XHRzZWxlY3QgSE1NX01JUlJPUlxuZHJpdmVycy9ncHUvZHJtL0tjb25maWctMjMyLVx0c2VsZWN0IE1NVV9OT1RJRklFUlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L0tjb25maWc9NzU9Y29uZmlnIERSTV9BTURHUFVfVVNFUlBUUlxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L0tjb25maWctNzctXHRkZXBlbmRzIG9uIERSTV9BTURHUFVcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L0tjb25maWc6Nzg6XHRzZWxlY3QgSE1NX01JUlJPUlxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvS2NvbmZpZy03OS1cdHNlbGVjdCBNTVVfTk9USUZJRVJcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnPTY9Y29uZmlnIEhTQV9BTURcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIERSTV9BTURHUFUgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgQVJNNjQgfHwgUFBDNjQgfHwgKFJJU0NWIFx1MDAyNlx1MDAyNiA2NEJJVCkgfHwgKExPT05HQVJDSCBcdTAwMjZcdTAwMjYgNjRCSVQpKVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZzo5Olx0c2VsZWN0IEhNTV9NSVJST1JcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWctMTAtXHRzZWxlY3QgTU1VX05PVElGSUVSXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZz0xNT1jb25maWcgSFNBX0FNRF9TVk1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnLTE4LVx0ZGVmYXVsdCB5XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnOjE5Olx0c2VsZWN0IEhNTV9NSVJST1JcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWctMjAtXHRzZWxlY3QgTU1VX05PVElGSUVSXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZz05ND1jb25maWcgRFJNX05PVVZFQVVfU1ZNXG4tLVxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZy05OC1cdGRlcGVuZHMgb24gU1RBR0lOR1xuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZzo5OTpcdHNlbGVjdCBITU1fTUlSUk9SXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnLTEwMC1cdHNlbGVjdCBNTVVfTk9USUZJRVJcbi0tXG5kcml2ZXJzL2h2L0tjb25maWc9Njg9Y29uZmlnIE1TSFZfUk9PVFxuLS1cbmRyaXZlcnMvaHYvS2NvbmZpZy03OS1cdHNlbGVjdCBWSVJUX1hGRVJfVE9fR1VFU1RfV09SS1xuZHJpdmVycy9odi9LY29uZmlnOjgwOlx0c2VsZWN0IEhNTV9NSVJST1JcbmRyaXZlcnMvaHYvS2NvbmZpZy04MS1cdHNlbGVjdCBNTVVfTk9USUZJRVJcbi0tXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZz01MT1jb25maWcgSU5GSU5JQkFORF9PTl9ERU1BTkRfUEFHSU5HXG4tLVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTUtXHRzZWxlY3QgSU5URVJWQUxfVFJFRVxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTY6XHRzZWxlY3QgSE1NX01JUlJPUlxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWctNTctXHRkZWZhdWx0IHlcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zz0zMzI2PWNvbmZpZyBURVNUX0hNTVxuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTMzMjktXHRkZXBlbmRzIG9uIERFVklDRV9QUklWQVRFXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzMwOlx0c2VsZWN0IEhNTV9NSVJST1JcbmxpYi9LY29uZmlnLmRlYnVnLTMzMzEtXHRzZWxlY3QgTU1VX05PVElGSUVSXG4tLVxubW0vS2NvbmZpZz0xMjY3PWNvbmZpZyBERVZJQ0VfUFJJVkFURVxuLS1cbm1tL0tjb25maWctMTI3NC1cdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxubW0vS2NvbmZpZzoxMjc1Olx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG5tbS9LY29uZmlnLTEyNzYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzU2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBITU0gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGUgc3lzdGVtIGlzIHNldCB1cCBzbyB0aGF0IHRoZSBgVEVTVF9ITU1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB3aGljaCBJIGFzc3VtZSBpcyBmb3Igc29tZSBraW5kIG9mIEhpZGRlbiBNYXJrb3YgTW9kZWwgdGVzdGluZywgaXMgdHJpZ2dlcmluZyB0aGUgc2VsZWN0aW9uIG9mIGBITU1fTUlSUk9SYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgY29ubmVjdGlvbjsgbWlycm9yaW5nIG1pZ2h0IGJlIGEgcHJlcmVxdWlzaXRlIG9yIGEgc3VwcG9ydGluZyBlbGVtZW50IGZvciBwcm9wZXIgSE1NIHRlc3RpbmcuIFNvLCBlbmFibGluZyBgVEVTVF9ITU1gIGRpcmVjdGx5IGltcGxpZXMgdGhlIGFjdGl2YXRpb24gb2YgdGhlIG1pcnJvciBjb25maWd1cmF0aW9uLiBOb3csIEkgc2VlIHRoYXQgYFRFU1RfSE1NYCBhbHNvIGhhcyBhIGRlcGVuZGVuY3kgb24gYERFVklDRV9QUklWQVRFYC4gTmF0dXJhbGx5LCBiZWZvcmUgSSBwcm9jZWVkIHdpdGggYW55IHRlc3RpbmcsIG9yIG1ha2luZyBhIGRlY2lzaW9uIG9uIGhvdyB0byBwcm9jZWVkLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBERVZJQ0VfUFJJVkFURWAuIEtub3dpbmcgZXhhY3RseSB3aGF0IHRoYXQgY29tcG9uZW50IGVuY29tcGFzc2VzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpZiBlbmFibGluZyBpdCBmb3IgdGVzdGluZyBoYXMgYW55IGltcGFjdCwgcGVyaGFwcyBvbiBzZWN1cml0eSwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IgYW55IG90aGVyIGFyZWEgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgZmxhZyBpcyBhbGwgYWJvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBERVZJQ0VfUFJJVkFURSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEyNjQ9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuLS1cbm1tL0tjb25maWctMTI2Ni1cbm1tL0tjb25maWc6MTI2Nzpjb25maWcgREVWSUNFX1BSSVZBVEVcbm1tL0tjb25maWctMTI2OC1cdGJvb2wgXCYjMzQ7VW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTMwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIERldmljZSBGZWF0dXJlcyoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoZSBwbGFuIGlzIHRvIGVuYWJsZSBgREVWSUNFX1BSSVZBVEVgIGFuZCBgVEVTVF9ITU1gLiBNYWtlcyBzZW5zZSwgdGhvc2UgYXJlIGtleSBmb3IgdGhlIHVwY29taW5nIGFuYWx5c2lzLiBIb3dldmVyLCBJIHJlY2FsbCB0aGF0IGBERVZJQ0VfUFJJVkFURWAgaXNuJiMzOTt0IGEgc3RhbmRhbG9uZSBmZWF0dXJlLiBNeSBpbnRlcm5hbCBkZXBlbmRlbmN5IGdyYXBoIGlzIGFscmVhZHkgaGlnaGxpZ2h0aW5nIHRoYXQgYERFVklDRV9QUklWQVRFYCBpcyBjb250aW5nZW50IG9uIGBaT05FX0RFVklDRWAuIFNvLCBiZWZvcmUgSSBjb21taXQgdG8gZW5hYmxpbmcgYERFVklDRV9QUklWQVRFYCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBgWk9ORV9ERVZJQ0VgIGlzIHNvcnRlZC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHNldCBwcm9wZXJseSBiZWZvcmUgZ29pbmcgYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGguIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhbmQgbWFrZSBhIGZldyBtaW5vciBhZGp1c3RtZW50cyB0byBlbnN1cmUgdGhlIHByZXJlcXVpc2l0ZXMgYXJlIG1ldC4gSSBhbSBub3Qgc2VlaW5nIHRoYXQgYXMgYW4gaXNzdWUsIGp1c3QgYSBjaGVja3BvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREVWSUNFX1BSSVZBVEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMjY0PWNvbmZpZyBHRVRfRlJFRV9SRUdJT05cbi0tXG5tbS9LY29uZmlnLTEyNjYtXG5tbS9LY29uZmlnOjEyNjc6Y29uZmlnIERFVklDRV9QUklWQVRFXG5tbS9LY29uZmlnLTEyNjgtXHRib29sIFwmIzM0O1VuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDQ0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIGBtbS9LY29uZmlnYCBhbmQgYERFVklDRV9QUklWQVRFYCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGNoZWNrIGBtbS9LY29uZmlnYC4gSSYjMzk7dmUgZ290IHRoaXMgZ3V0IGZlZWxpbmcgdGhhdCBgREVWSUNFX1BSSVZBVEVgIGlzIGdvaW5nIHRvIGJlIHJlbGV2YW50IGhlcmUuIEl0JiMzOTtzIGEgY29tbW9uIGFyZWEgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHRoZSBuYW1lIGRlZmluaXRlbHkgcmluZ3MgYSBiZWxsLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gb2Z0ZW4gaG91c2VzIHNldHRpbmdzIHJlbGF0ZWQgdG8gZGV2aWNlLXNwZWNpZmljIG1lbW9yeSBhbGxvY2F0aW9ucyBvciBwZXJtaXNzaW9ucywgc28gdGhhdCYjMzk7cyB0aGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBsb29raW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgc29saWQgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjYwOlx0Y29uZmlnIEhNTV9NSVJST1JcbjEyNjE6XHRcdGJvb2xcbjEyNjI6XHRcdGRlcGVuZHMgb24gTU1VXG4xMjYzOlx0XG4xMjY0Olx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxuMTI2NTpcdFx0Ym9vbFxuMTI2NjpcdFxuMTI2NzpcdGNvbmZpZyBERVZJQ0VfUFJJVkFURVxuMTI2ODpcdFx0Ym9vbCBcJiMzNDtVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcJiMzNDtcbjEyNjk6XHRcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbjEyNzA6XHRcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cbjEyNzE6XHRcbjEyNzI6XHRcdGhlbHBcbjEyNzM6XHRcdCAgQWxsb3dzIGNyZWF0aW9uIG9mIHN0cnVjdCBwYWdlcyB0byByZXByZXNlbnQgdW5hZGRyZXNzYWJsZSBkZXZpY2VcbjEyNzQ6XHRcdCAgbWVtb3J5OyBpLmUuLCBtZW1vcnkgdGhhdCBpcyBvbmx5IGFjY2Vzc2libGUgZnJvbSB0aGUgZGV2aWNlIChvclxuMTI3NTpcdFx0ICBncm91cCBvZiBkZXZpY2VzKS4gWW91IGxpa2VseSBhbHNvIHdhbnQgdG8gc2VsZWN0IEhNTV9NSVJST1IuXG4xMjc2Olx0XG4xMjc3Olx0Y29uZmlnIFZNQVBfUEZOXG4xMjc4Olx0XHRib29sXG4xMjc5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0OTA1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZvciBhbiBleHBlcnQgbGlrZSB5b3Vyc2VsZjoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBgREVWSUNFX1BSSVZBVEVgIGhlcmUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdCBoYXMgYSBkZXBlbmRlbmN5IG9uIGBaT05FX0RFVklDRWAuIE5vdGhpbmcgdW5leHBlY3RlZCB0aGVyZSwgYnV0IG5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGBaT05FX0RFVklDRWAgaXRzZWxmIGlzIGhvb2tlZCB1cCB0by4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFpPTkVfREVWSUNFYCB0byBzZWUgd2hhdCBlbHNlIHRoaXMgYWZmZWN0cy4gSXQmIzM5O3MgdGltZSB0byBidWlsZCBvdXQgdGhhdCBkZXBlbmRlbmN5IGdyYXBoIGFuZCBtYWtlIHN1cmUgd2UgdW5kZXJzdGFuZCBhbGwgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGVzZSByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcgdGhhdCBnZXRzIGNhc2NhZGVkIGJ5IHRoYXQgY29ubmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjMwOlx0XG4xMjMxOlx0Y29uZmlnIFpPTkVfRE1BMzJcbjEyMzI6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBETUEzMiB6b25lXCYjMzQ7IGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxuMTIzMzpcdFx0ZGVwZW5kcyBvbiAhWDg2XzMyXG4xMjM0Olx0XHRkZWZhdWx0IHkgaWYgQVJNNjRcbjEyMzU6XHRcbjEyMzY6XHRjb25maWcgWk9ORV9ERVZJQ0VcbjEyMzc6XHRcdGJvb2wgXCYjMzQ7RGV2aWNlIG1lbW9yeSAocG1lbSwgSE1NLCBldGMuLi4pIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuMTIzODpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xuMTIzOTpcdFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXG4xMjQwOlx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4xMjQxOlx0XHRzZWxlY3QgWEFSUkFZX01VTFRJXG4xMjQyOlx0XG4xMjQzOlx0XHRoZWxwXG4xMjQ0Olx0XHQgIERldmljZSBtZW1vcnkgaG90cGx1ZyBzdXBwb3J0IGFsbG93cyBmb3IgZXN0YWJsaXNoaW5nIHBtZW0sXG4xMjQ1Olx0XHQgIG9yIG90aGVyIGRldmljZSBkcml2ZXIgZGlzY292ZXJlZCBtZW1vcnkgcmVnaW9ucywgaW4gdGhlXG4xMjQ2Olx0XHQgIG1lbW1hcC4gVGhpcyBhbGxvd3MgcGZuX3RvX3BhZ2UoKSBsb29rdXBzIG9mIG90aGVyd2lzZVxuMTI0NzpcdFx0ICBcJiMzNDtkZXZpY2UtcGh5c2ljYWxcJiMzNDsgYWRkcmVzc2VzIHdoaWNoIGlzIG5lZWRlZCBmb3IgREFYLCBQQ0lfUDJQRE1BLCBhbmRcbjEyNDg6XHRcdCAgREVWSUNFX1BSSVZBVEUgZmVhdHVyZXMgYW1vbmcgb3RoZXJzLlxuMTI0OTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQxNwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBmb3JtYXR0ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVwZW5kZW5jeSBEZWVwIERpdmU6IFpPTkVfREVWSUNFKioKClJpZ2h0LCBzbyBgWk9ORV9ERVZJQ0VgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZSwgYW5kIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgaXRzIHJlbGF0aW9uc2hpcHMuIEkga25vdyB0aGF0IGBaT05FX0RFVklDRWAgcmVsaWVzIHByZXR0eSBoZWF2aWx5IG9uIGEgZmV3IG90aGVyIGtleSBmZWF0dXJlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIG9mIGBNRU1PUllfSE9UUExVR2AsIGBNRU1PUllfSE9UUkVNT1ZFYCwgYW5kIGBTUEFSU0VNRU1fVk1FTU1BUGAuIFRob3NlIHNlZW0gbGlrZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MgZm9yIGFueXRoaW5nIGRlYWxpbmcgd2l0aCBkZXZpY2UgbWVtb3J5IHpvbmVzLiBJJiMzOTt2ZSBvZnRlbiBzZWVuIHRoZXNlIGVuYWJsZWQsIGVzcGVjaWFsbHkgd2hlbiBJJiMzOTttIHdvcmtpbmcgd2l0aCBzeXprYWxsZXIgY29uZmlndXJhdGlvbnMsIHdoaWNoIHRlbmRzIHRvIGJlIHdoZXJlIEkmIzM5O20gcG9raW5nIGFyb3VuZCBpbiB0aGlzIGtpbmQgb2YgYXJlYS4gSXQgbWFrZXMgc2Vuc2UsIGdpdmVuIHN5emthbGxlciYjMzk7cyBmb2N1cyBvbiBmYXVsdCBpbmplY3Rpb24gYW5kIHRlc3RpbmcuCgpOb3csIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gcXVpY2tseSBjaGVjayBgREVWSUNFX01JR1JBVElPTmAsIGdpdmVuIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwMDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY5MDpcdFx0aGVscFxuIDY5MTpcdFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXG4gNjkyOlx0XHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXG4gNjkzOlx0XHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcbiA2OTQ6XHRcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxuIDY5NTpcdFxuIDY5NjpcdGNvbmZpZyBNSUdSQVRJT05cbiA2OTc6XHRcdGJvb2xcbiA2OTg6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjk5Olx0XG4gNzAwOlx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbiA3MDE6XHRcdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0VcbiA3MDI6XHRcbiA3MDM6XHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXG4gNzA0Olx0XHRib29sXG4gNzA1Olx0XG4gNzA2Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gNzA3Olx0XHRib29sXG4gNzA4Olx0XG4gNzA5Olx0Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTU2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBdXRvbWF0aWMgRGV2aWNlIE1pZ3JhdGlvbiBhbmQgRGVwZW5kZW5jeSBDaGVja3MqKgoKUmlnaHQsIHNvIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIHN5c3RlbSBhdXRvbWF0aWNhbGx5IGVuYWJsZXMgYERFVklDRV9NSUdSQVRJT05gIHdoZW4gYm90aCBgTUlHUkFUSU9OYCBhbmQgYFpPTkVfREVWSUNFYCBmZWF0dXJlcyBhcmUgYWN0aXZlLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2U7IGl0IHN0cmVhbWxpbmVzIHRoZSBzZXR1cCBhbmQgcmVkdWNlcyBwb3RlbnRpYWwgZm9yIG1hbnVhbCBjb25maWd1cmF0aW9uIGVycm9ycywgd2hpY2ggaXMgYWx3YXlzIGEgZ29vZCB0aGluZy4gV2UgbmVlZCB0byBiZSB3YXJ5IG9mIGF1dG9tYXRpYyBmdW5jdGlvbmFsaXR5LCBhbmQgY29uc2lkZXIgdGhlIGVkZ2UgY2FzZXMsIGJ1dCB0aGUgZGVzaWduIHNlZW1zIHNvdW5kIGF0IGZpcnN0IGdsYW5jZS4gTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGFuZCBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIG9mIGBURVNUX0hNTWAuIEkgbmVlZCB0byBlbnN1cmUgbm90aGluZyYjMzk7cyBiZWVuIG1pc3NlZCBkdXJpbmcgaW50ZWdyYXRpb247IHRoaXMgY291bGQgYmUgdml0YWwsIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9ycyBhcmUgdGhlIGJhbmUgb2YgbXkgZXhpc3RlbmNlLiBXaGF0IGNvdWxkIGl0IGRlcGVuZCBvbiBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uPyBMZXQmIzM5O3MgdHJhY2UgdGhpcyBhbmQgbWFrZSBjZXJ0YWluIHdlIGFyZSBub3Qgb3Zlcmxvb2tpbmcgc29tZXRoaW5nIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMjA6XHRcdGhlbHBcbjMzMjE6XHRcdCAgVGVzdCBpZiB0aGUga2VybmVsIGlzIHplcm8taW5pdGlhbGl6aW5nIGhlYXAgYW5kIHBhZ2UgYWxsb2NhdGlvbnMuXG4zMzIyOlx0XHQgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0ZXN0IGluaXRfb25fYWxsb2MgYW5kIGluaXRfb25fZnJlZSBmZWF0dXJlcy5cbjMzMjM6XHRcbjMzMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbjMzMjU6XHRcbjMzMjY6XHRjb25maWcgVEVTVF9ITU1cbjMzMjc6XHRcdHRyaXN0YXRlIFwmIzM0O1Rlc3QgSE1NIChIZXRlcm9nZW5lb3VzIE1lbW9yeSBNYW5hZ2VtZW50KVwmIzM0O1xuMzMyODpcdFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuMzMyOTpcdFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxuMzMzMDpcdFx0c2VsZWN0IEhNTV9NSVJST1JcbjMzMzE6XHRcdHNlbGVjdCBNTVVfTk9USUZJRVJcbjMzMzI6XHRcdGhlbHBcbjMzMzM6XHRcdCAgVGhpcyBpcyBhIHBzZXVkbyBkZXZpY2UgZHJpdmVyIHNvbGVseSBmb3IgdGVzdGluZyBITU0uXG4zMzM0Olx0XHQgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEhNTSB0ZXN0IG1vZHVsZS5cbjMzMzU6XHRcdCAgRG9pbmcgc28gd2lsbCBhbGxvdyB5b3UgdG8gcnVuIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Qvdm0vaG1tLXRlc3RzLlxuMzMzNjpcdFxuMzMzNzpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuMzMzODpcdFxuMzMzOTpcdGNvbmZpZyBURVNUX0ZSRUVfUEFHRVNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY1MjEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA1NTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgSE1NIFRlc3RpbmcqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBURVNUX0hNTWAgY29uZmlndXJhdGlvbiBvcHRpb24uIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYERFVklDRV9QUklWQVRFYC4gU28sIHRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgYWxvbmcgd2l0aCBgWk9ORV9ERVZJQ0VgIHNpbmNlIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBwaWVjZSBvZiB0aGUgcHV6emxlLiBUaGUgb2J2aW91cyBvbmVzIHRvIGVuYWJsZSBhcmUgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYFpPTkVfREVWSUNFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIG9mIGNvdXJzZSBgVEVTVF9ITU1gIGl0c2VsZi4KCkhtbSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4uLiBpdCYjMzk7cyBhIG1lbnVjb25maWcsIGJ1dCBpdCYjMzk7cyBhbHNvIGEgYm9vbC4gTGV0IG1lIGNsYXJpZnkgdGhhdDsgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZWZpbml0ZWx5IGEgYm9vbGVhbi4gSSBkb24mIzM5O3QgdGhpbmsgSSBuZWVkIHRvIHdvcnJ5IGFib3V0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNgIG9yIGFueSBvZiB0aG9zZSBzaW1pbGFyIG9wdGlvbnM7IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgdXN1YWxseSBzdWZmaWNpZW50LgoKTmV4dCB1cCwgSSBuZWVkIHRvIGNoZWNrIGlmIGBNSUdSQVRJT05gIGlzIGVuYWJsZWQuIEl0JiMzOTtzIGEgYm9vbGVhbiB3aXRob3V0IGEgcHJvbXB0LCBzbyBpdCBkZXBlbmRzIG9uIGBOVU1BYCwgYENPTVBBQ1RJT05gLCBvciBgTUVNT1JZX0hPVFJFTU9WRWAuIFNpbmNlIGBaT05FX0RFVklDRWAgZGVwZW5kcyBvbiBgTUVNT1JZX0hPVFJFTU9WRWAsIHRoYXQgbWVhbnMgYE1JR1JBVElPTmAgaXMgZ29pbmcgdG8gYmUgZW5hYmxlZCBhcyB3ZWxsLiBHb29kLCB0aGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LgoKU28sIGp1c3QgdG8gcmVpdGVyYXRlLCB0aGUga2V5IGNvbmZpZ3MgSSBuZWVkIHRvIGhhdmUgc2V0IGFyZTogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYFpPTkVfREVWSUNFYCwgYERFVklDRV9QUklWQVRFYCwgYW5kIGBURVNUX0hNTWAuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb2RlLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGluIHRoZSBhY3R1YWwga2VybmVsIGNvZGUuIEkmIzM5O2xsIGNoZWNrIGBwYWdlbWFwX3BtZF9yYW5nZV90aHBgIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBZZXAsIGl0IHJlcXVpcmVzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCBJIGV4cGVjdC4KCk9rYXksIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCBpbiBgbW0vbWlncmF0ZV9kZXZpY2UuY2AuIFRoYXQgbG9va3MgbGlrZSBpdCBuZWVkcyBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gLCB3aGljaCBpcyBkZWZpbmVkIGFzIGBNSUdSQVRJT04gJmFtcDsmYW1wOyBaT05FX0RFVklDRWAuIENoZWNrLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgYGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBZZXAsIGl0IHJlcXVpcmVzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFzIHdlbGwuIFNlZW1zIGNvbnNpc3RlbnQuCgpOb3csIGxldCYjMzk7cyBicmllZmx5IGNoZWNrIGBjb3B5X25vbnByZXNlbnRfcHRlYCBpbiBgbW0vbWVtb3J5LmNgLiBJdCBkZXBlbmRzIG9uIGBDT05GSUdfTU1VYC4gTWFrZXMgc2Vuc2U7IHRoYXQmIzM5O3MgZnVuZGFtZW50YWwuCgpBbmQgZmluYWxseSwgYHRyeV90b191bm1hcF9vbmVgIGluIGBtbS9ybWFwLmNgIHJlcXVpcmVzIGBDT05GSUdfTU1VYCwganVzdCBhcyBleHBlY3RlZC4KCk9rYXksIGxldCBtZSBrZWVwIHNvbWUgb2YgdGhlc2UgZnVuY3Rpb25zIGluIG1pbmQgYXMgSSBjb250aW51ZSB0byBleHBsb3JlIHRoaXMgYXJlYTogYHBhZ2VtYXBfcG1kX3JhbmdlX3RocGAsIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYCwgYGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZGAsIGBjb3B5X25vbnByZXNlbnRfcHRlYCwgYW5kIGB0cnlfdG9fdW5tYXBfb25lYC4gSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgc2V0X3BtZF9taWdyYXRpb25fZW50cnlgLCBgcmVtb3ZlX21pZ3JhdGlvbl9wbWRgLCBhbmQgYG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlYC4gVGhpcyBzaG91bGQgcHJvdmlkZSBlbm91Z2ggY29udGV4dCB0byBkaXZlIGRlZXBlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2V0X3BtZF9taWdyYXRpb25fZW50cnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzIyPXN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2Fsaztcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjQtI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzI1OmV4dGVybiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI2LVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDEtI2Vsc2UgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzQyOnN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0My1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDMxPXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzE5Mi1cdFx0ICogbWFuYWdlZCB0byBjbGVhciBQYWdlQW5vbkV4Y2x1c2l2ZSgpIC0tIHNlZVxubW0vaHVnZV9tZW1vcnkuYzozMTkzOlx0XHQgKiBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeSgpLlxubW0vaHVnZV9tZW1vcnkuYy0zMTk0LVx0XHQgKlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDg2ND1sYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODY3LSNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbm1tL2h1Z2VfbWVtb3J5LmM6NDg2ODppbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxubW0vaHVnZV9tZW1vcnkuYy00ODY5LVx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTEzNj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy0yMTMtXHRcdG1pZ3JhdGUtXHUwMDNlY3BhZ2VzJiM0MzsmIzQzOztcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MjE0Olx0XHRyZXQgPSBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShcdTAwMjZwdm13LCBmb2xpb19wYWdlKGZvbGlvLCAwKSk7XG5tbS9taWdyYXRlX2RldmljZS5jLTIxNS1cdFx0aWYgKHJldCkge1xuLS1cbm1tL3JtYXAuYz0yNDEwPXN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ybWFwLmMtMjQ4Ni1cbm1tL3JtYXAuYzoyNDg3Olx0XHRcdGlmIChzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShcdTAwMjZwdm13LCBzdWJwYWdlKSkge1xubW0vcm1hcC5jLTI0ODgtXHRcdFx0XHRyZXQgPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NDUKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIGRlbGl2ZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipSZWFjaGluZyBhIENydWNpYWwgUG9pbnQgaW4gUE1EIE1pZ3JhdGlvbioqCgpBbHJpZ2h0LCBzbyBgc2V0X3BtZF9taWdyYXRpb25fZW50cnlgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlOyB0aGF0JiMzOTtzIGdvb2QuIE5vdyB0aGF0IEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0LCBJIG5lZWQgdG8gc2hpZnQgZm9jdXMuIE15IG5leHQgbG9naWNhbCBzdGVwIGluIHRoaXMgd29ya2Zsb3cgaXMgdG8gZGVlcGx5IGFuYWx5emUgYHJlbW92ZV9taWdyYXRpb25fcG1kYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1pZ3JhdGlvbiBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uLCBhcyByZW1vdmluZyB0aGUgd3JvbmcgZW50cmllcyB3aWxsIGJyZWFrIGV2ZXJ5dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbW92ZV9taWdyYXRpb25fcG1kJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMyNT1leHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjctXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjg6ZXh0ZXJuIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzI5LVx0XHRzdHJ1Y3QgcGFnZSAqbmV3KTtcbi0tXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaD0zNDI9c3RhdGljIGlubGluZSBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuLS1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0Ny1cbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjM0ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQ5LVx0XHRzdHJ1Y3QgcGFnZSAqbmV3KVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RocC5oPTkwPURFRklORV9FVkVOVChtaWdyYXRpb25fcG1kLCBzZXRfbWlncmF0aW9uX3BtZCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90aHAuaC05NC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RocC5oOjk1OkRFRklORV9FVkVOVChtaWdyYXRpb25fcG1kLCByZW1vdmVfbWlncmF0aW9uX3BtZCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3RocC5oLTk2LVx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBtZCksXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00ODY4PWludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00OTQxLVxubW0vaHVnZV9tZW1vcnkuYzo0OTQyOnZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCBzdHJ1Y3QgcGFnZSAqbmV3KVxubW0vaHVnZV9tZW1vcnkuYy00OTQzLXtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTUwMDItXHR1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsIHB2bXctXHUwMDNlcG1kKTtcbm1tL2h1Z2VfbWVtb3J5LmM6NTAwMzpcdHRyYWNlX3JlbW92ZV9taWdyYXRpb25fcG1kKGFkZHJlc3MsIHBtZF92YWwocG1kZSkpO1xubW0vaHVnZV9tZW1vcnkuYy01MDA0LX1cbi0tXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTM2OS1cdFx0XHRcdFx0IWZvbGlvX3Rlc3RfcG1kX21hcHBhYmxlKGZvbGlvKSwgZm9saW8pO1xubW0vbWlncmF0ZS5jOjM3MDpcdFx0XHRyZW1vdmVfbWlncmF0aW9uX3BtZChcdTAwMjZwdm13LCBuZXcpO1xubW0vbWlncmF0ZS5jLTM3MS1cdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkzNzcKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipSZWFjaGluZyB0aGUgTWlncmF0aW9uIFBvaW50KioKCkFscmlnaHQsIHNvIGByZW1vdmVfbWlncmF0aW9uX3BtZGAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHBhdGh3YXkuIE5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHRoZSBgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2VgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgaW4gdGhlIGNvbnRleHQgb2YgdGhpcyBtaWdyYXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgaHVnZSBQTUQgaW5zZXJ0aW9uLiBJIGV4cGVjdCB0aGVyZSBpcyBzb21lIGludGVycGxheSBoZXJlIHRoYXQgSSYjMzk7bGwgaGF2ZSB0byBmdWxseSBncmFzcC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIGxpa2VseSByZXNpZGUsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgaXMgY3J1Y2lhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZV9kZXZpY2UuYz03NzI9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XG4tLVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzUtLyoqXG5tbS9taWdyYXRlX2RldmljZS5jOjc3NjogKiBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZTogSW5zZXJ0IGEgaHVnZSBmb2xpbyBpbnRvIEBtaWdyYXRlLVx1MDAzZXZtYS1cdTAwM2V2bV9tbVxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzctICogYXQgQGFkZHIuIGZvbGlvIGlzIGFscmVhZHkgYWxsb2NhdGVkIGFzIGEgcGFydCBvZiB0aGUgbWlncmF0aW9uIHByb2Nlc3Mgd2l0aFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmMtNzg5LSAqL1xubW0vbWlncmF0ZV9kZXZpY2UuYzo3OTA6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG5tbS9taWdyYXRlX2RldmljZS5jLTc5MS1cdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jPTkwND1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTkyOS0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG5tbS9taWdyYXRlX2RldmljZS5jOjkzMDpzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTMxLVx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTY4PXN0YXRpYyB2b2lkIG1pZ3JhdGVfdm1hX2luc2VydF9wYWdlKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcbi0tXG5tbS9taWdyYXRlX2RldmljZS5jLTEwMDItXHRpZiAodGhwX21pZ3JhdGlvbl9zdXBwb3J0ZWQoKSBcdTAwMjZcdTAwMjYgKCpkc3QgXHUwMDI2IE1JR1JBVEVfUEZOX0NPTVBPVU5EKSkge1xubW0vbWlncmF0ZV9kZXZpY2UuYzoxMDAzOlx0XHRpbnQgcmV0ID0gbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2UobWlncmF0ZSwgYWRkciwgcGFnZSxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTAwNC1cdFx0XHRcdFx0XHRcdFx0c3JjLCBwbWRwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAwMjcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBJJiMzOTt2ZSBnb3QgaXQuIFllcywgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIGNhbiB3b3JrIHdpdGg7IHRoZSBwcm9ibGVtIGlzIHJlYWNoYWJsZS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB0aGUga2V5IGFyZWEgdG8gZXhhbWluZSBpcyBgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzYC4gTGV0JiMzOTtzIGZvY3VzIG91ciBhdHRlbnRpb24gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDAwOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oPTE5NTY9Ym9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxuLS1cbm1tL2ludGVybmFsLmgtMTk2MS0gKi9cbm1tL2ludGVybmFsLmg6MTk2MjpzdGF0aWMgaW5saW5lIHZvaWQgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxubW0vaW50ZXJuYWwuaC0xOTYzLXtcbi0tXG5tbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcbi0tXG5tbS9tZW1vcnkuYy05NTUtXG5tbS9tZW1vcnkuYzo5NTY6XHRcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhkc3RfbW0pO1xubW0vbWVtb3J5LmMtOTU3LVx0XHQvKiBNYXJrIHRoZSBzd2FwIGVudHJ5IGFzIHNoYXJlZC4gKi9cbi0tXG5tbS9ybWFwLmM9MTk4ND1zdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3JtYXAuYy0yMzA2LVx0XHRcdH1cbm1tL3JtYXAuYzoyMzA3Olx0XHRcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhtbSk7XG5tbS9ybWFwLmMtMjMwOC1cdFx0XHRkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0ODEKCQkJCQkJCW91dHB1dDogMjg5CgkJCQkJCQl0aG91Z2h0czogODcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBUSFAgTWlncmF0aW9uIGFuZCBEZXZpY2UgTWVtb3J5IENoYW5nZXMqKgoKT2theSwgcmVhY2hhYmxlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIG1pZ3JhdGlvbiBhbmQgZGV2aWNlIG1lbW9yeSBtYW5hZ2VtZW50LiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmc6CgoqICAgYHBhZ2VtYXBfcG1kX3JhbmdlX3RocGAKKiAgIGBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kYAoqICAgYGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZGAKKiAgIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAKKiAgIGByZW1vdmVfbWlncmF0aW9uX3BtZGAKKiAgIGBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZWAKCkkgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllc2AsIGJ1dCBzaW5jZSBpdCYjMzk7cyBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24sIGl0JiMzOTtzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBmb2N1cyBwb2ludC4gSSBhbHNvIGV4Y2x1ZGVkIGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYGNvcHlfbm9ucHJlc2VudF9wdGVgIGJlY2F1c2UgdGhleSBhcmUgdmVyeSBob3QgcGF0aCBmdW5jdGlvbnMgYW5kIHdvdWxkIGxpa2VseSBqdXN0IG11ZGR5IHRoZSB3YXRlci4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeSB0aGVzZSByZW1haW5pbmcgc3ltYm9scyBhcmVuJiMzOTt0IHN0YXRpYyBpbmxpbmUuIENoZWNraW5nIGVhY2ggb25lLCB0aGV5IGFsbCBzZWVtIHRvIGJlIGVpdGhlciBzdGF0aWMgd2l0aGluIHRoZSBmaWxlLCBvciBleHBvcnRlZCBnbG9iYWxseS4gUGVyZmVjdC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gTXkgdW5kZXJzdGFuZGluZyBzbyBmYXIgc3VnZ2VzdHMgdGhlIGZvbGxvd2luZyBhcmUgY3J1Y2lhbDoKCiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgCiogICBgWk9ORV9ERVZJQ0VgCiogICBgREVWSUNFX1BSSVZBVEVgCiogICBgVEVTVF9ITU1gCgpJIGRpZCBhIHNhbml0eSBjaGVjayBhbmQgc2F3IHRoYXQgYERFVklDRV9NSUdSQVRJT05gIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIGBaT05FX0RFVklDRWAgaXMgc2V0LiBBbHNvLCBgSE1NX01JUlJPUmAgaXMgc2VsZWN0ZWQgYnkgYFRFU1RfSE1NYC4KCkkgYWxzbyBjb25maXJtZWQgdGhhdCBgQ09ORklHX01JR1JBVElPTmAgaXMgZW5hYmxlZCBpZiBgTlVNQWAgb3IgYENPTVBBQ1RJT05gIGFyZSBlbmFibGVkLCBhbmQgYENPTkZJR19NTVVgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4gSSBub3RpY2VkIGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgIGlzIHNlbGVjdGVkIGJ5IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4KCk5vdywgbG9va2luZyBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUuIFRoZSBwYXRjaCByZW5hbWVzIGBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTmAgdG8gYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgYW5kIGludHJvZHVjZXMgdGhlIG5ldyBmdW5jdGlvbnMgYHNvZnRsZWFmX3RvX3BtZGAgYW5kIGBzb2Z0bGVhZl9mcm9tX3BtZGAgdG8gZGVhbCB3aXRoIHNvZnRsZWFmIGVudHJpZXMuIFRoaXMgaXMgc2lnbmlmaWNhbnQuIEl0IGFsc28gYWltcyB0byBmaXggcG90ZW50aWFsIGJ1Z3MgdGhhdCBtaWdodCBvY2N1ciB3aGVuIGBzb2Z0bGVhZl90b19wYWdlYCBvciBgc29mdGxlYWZfdG9fZm9saW9gIGlzIGNhbGxlZCBvbiBlbnRyaWVzIHdpdGhvdXQgYSBQRk4gb3Igbm9uLWRldmljZS1wcml2YXRlIGVudHJpZXMuIFRoaXMgbWVhbnMgdGhlcmUmIzM5O3MgYSBjb3JyZWN0aW9uIG9mIGltcHJvcGVyIFRIUCBtaWdyYXRpb24sIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIGhvdyB0aGVzZSBwYWdlcyBhcmUgaGFuZGxlZC4gTGFzdGx5LCB0aGUgaW5jbHVzaW9uIG9mIGBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXNgIGVuc3VyZXMgdGhhdCB0aGUgYG1tYCBzdHJ1Y3R1cmUgaXMgb24gYGluaXRfbW0ubW1saXN0YCBiZWZvcmUgc3dhcCBlbnRyaWVzIGFyZSBhZGRlZC4gVGhpcyBzZWVtcyBsaWtlIGEgY3JpdGljYWwgcGllY2UgdG8gZW5zdXJlIHRoZSBgbW1gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBiZWZvcmUgc3dhcCBlbnRyaWVzIGFyZSBhZGRlZC4KClNvIG92ZXJhbGwsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIHNlcmllcyBvZiBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIHJlZmFjdG9yaW5nLCBpbXByb3ZpbmcgbWVtb3J5IG1hbmFnZW1lbnQsIFRIUCBtaWdyYXRpb24sIGFuZCBwb3RlbnRpYWxseSBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDA6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDssCiAgICAmIzM0O0RFVklDRV9QUklWQVRFJiMzNDssCiAgICAmIzM0O1RFU1RfSE1NJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGFnZW1hcF9wbWRfcmFuZ2VfdGhwJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7Y2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kJiMzNDssCiAgICAmIzM0O3NldF9wbWRfbWlncmF0aW9uX2VudHJ5JiMzNDssCiAgICAmIzM0O3JlbW92ZV9taWdyYXRpb25fcG1kJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbmFtZXMgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gdG8gQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGFuZCBpbnRyb2R1Y2VzIHNvZnRsZWFmX3RvX3BtZCBhbmQgc29mdGxlYWZfZnJvbV9wbWQgdG8gaGFuZGxlIHNvZnRsZWFmIGVudHJpZXMuIEl0IGFsc28gZml4ZXMgcG90ZW50aWFsIGJ1Z3Mgd2hlcmUgc29mdGxlYWZfdG9fcGFnZSBvciBzb2Z0bGVhZl90b19mb2xpbyBpcyBjYWxsZWQgb24gZW50cmllcyB3aXRob3V0IGEgUEZOIG9yIG5vbi1kZXZpY2UtcHJpdmF0ZSBlbnRyaWVzIGluIGZzL3Byb2MvdGFza19tbXUuYyBhbmQgbW0vbWlncmF0ZV9kZXZpY2UuYy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyB0byBlbnN1cmUgbW0gaXMgb24gaW5pdF9tbS5tbWxpc3QgYmVmb3JlIGFkZGluZyBzd2FwIGVudHJpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhZmZlY3QgbWVtb3J5IG1hbmFnZW1lbnQsIFRIUCBtaWdyYXRpb24sIGFuZCBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OywKICAgICYjMzQ7REVWSUNFX1BSSVZBVEUmIzM0OywKICAgICYjMzQ7VEVTVF9ITU0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwYWdlbWFwX3BtZF9yYW5nZV90aHAmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCYjMzQ7LAogICAgJiMzNDtjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQmIzM0OywKICAgICYjMzQ7c2V0X3BtZF9taWdyYXRpb25fZW50cnkmIzM0OywKICAgICYjMzQ7cmVtb3ZlX21pZ3JhdGlvbl9wbWQmIzM0OywKICAgICYjMzQ7bWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVuYW1lcyBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiB0byBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgYW5kIGludHJvZHVjZXMgc29mdGxlYWZfdG9fcG1kIGFuZCBzb2Z0bGVhZl9mcm9tX3BtZCB0byBoYW5kbGUgc29mdGxlYWYgZW50cmllcy4gSXQgYWxzbyBmaXhlcyBwb3RlbnRpYWwgYnVncyB3aGVyZSBzb2Z0bGVhZl90b19wYWdlIG9yIHNvZnRsZWFmX3RvX2ZvbGlvIGlzIGNhbGxlZCBvbiBlbnRyaWVzIHdpdGhvdXQgYSBQRk4gb3Igbm9uLWRldmljZS1wcml2YXRlIGVudHJpZXMgaW4gZnMvcHJvYy90YXNrX21tdS5jIGFuZCBtbS9taWdyYXRlX2RldmljZS5jLiBJdCBhbHNvIGludHJvZHVjZXMgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzIHRvIGVuc3VyZSBtbSBpcyBvbiBpbml0X21tLm1tbGlzdCBiZWZvcmUgYWRkaW5nIHN3YXAgZW50cmllcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGFmZmVjdCBtZW1vcnkgbWFuYWdlbWVudCwgVEhQIG1pZ3JhdGlvbiwgYW5kIGRldmljZSBtZW1vcnkgbWlncmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTE6MjUuNDYyNzA1NjU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyOTQ0NzA0MzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZW1hcF9wbWRfcmFuZ2VfdGhwXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kXCIsXG4gICAgXCJjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWRcIixcbiAgICBcInNldF9wbWRfbWlncmF0aW9uX2VudHJ5XCIsXG4gICAgXCJyZW1vdmVfbWlncmF0aW9uX3BtZFwiLFxuICAgIFwibWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW5hbWVzIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIHRvIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBhbmQgaW50cm9kdWNlcyBzb2Z0bGVhZl90b19wbWQgYW5kIHNvZnRsZWFmX2Zyb21fcG1kIHRvIGhhbmRsZSBzb2Z0bGVhZiBlbnRyaWVzLiBJdCBhbHNvIGZpeGVzIHBvdGVudGlhbCBidWdzIHdoZXJlIHNvZnRsZWFmX3RvX3BhZ2Ugb3Igc29mdGxlYWZfdG9fZm9saW8gaXMgY2FsbGVkIG9uIGVudHJpZXMgd2l0aG91dCBhIFBGTiBvciBub24tZGV2aWNlLXByaXZhdGUgZW50cmllcyBpbiBmcy9wcm9jL3Rhc2tfbW11LmMgYW5kIG1tL21pZ3JhdGVfZGV2aWNlLmMuIEl0IGFsc28gaW50cm9kdWNlcyBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMgdG8gZW5zdXJlIG1tIGlzIG9uIGluaXRfbW0ubW1saXN0IGJlZm9yZSBhZGRpbmcgc3dhcCBlbnRyaWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYWZmZWN0IG1lbW9yeSBtYW5hZ2VtZW50LCBUSFAgbWlncmF0aW9uLCBhbmQgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjExOjI1LjQ2MjcxNDY5N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY3MDUwMDIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5ZGQxZTAwYWRmMjYwMDM0YjU4YTczZGNhNGM5YTMwOGQ0ODFiYjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAwMDoxMToyMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcXG5pbmRleCBiM2FmZTA2ODg5MTliZC4uM2ViOTRmMzZjNzdlODggMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuQEAgLTE3LDcgKzE3LDcgQEAgY29uZmlnIEFSTTY0XFxuIFxcdHNlbGVjdCBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT04gaWYgSFVHRVRMQl9QQUdFIFxcdTAwMjZcXHUwMDI2IE1JR1JBVElPTlxcbiBcXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4gXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuLVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0NBQ0hFX0lOVkFMSURBVEVfTUVNUkVHSU9OXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCAyNzY4OWM2MmJkMjVkZC4uOTg0YmFkZmE5YTc0YWIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0xNTM0LDEwICsxNTM0LDEwIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSlcXHQoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KVxcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZShzd3ApXFx0KChwdGVfdCkgeyAoc3dwKS52YWwgfSlcXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuICNkZWZpbmUgX19wbWRfdG9fc3dwX2VudHJ5KHBtZClcXHRcXHQoKHN3cF9lbnRyeV90KSB7IHBtZF92YWwocG1kKSB9KVxcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApXFx0XFx0X19wbWQoKHN3cCkudmFsKVxcbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG4rI2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbiBcXG4gLypcXG4gICogRW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vdCBtb3JlIHN3YXAgZmlsZXMgdGhhbiBjYW4gYmUgZW5jb2RlZCBpbiB0aGUga2VybmVsXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuaW5kZXggZDhkMjUyMzI1MDE3OTEuLjU1MDE0MmI3ZWUxMDJhIDEwMDY0NFxcbi0tLSBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWdcXG4rKysgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXFxuQEAgLTEyLDcgKzEyLDcgQEAgY29uZmlnIExPT05HQVJDSFxcbiBcXHRzZWxlY3QgQVJDSF9ORUVEU19ERUZFUl9LQVNBTlxcbiBcXHRzZWxlY3QgQVJDSF9ESVNBQkxFX0tBU0FOX0lOTElORVxcbiBcXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4rXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19BQ1BJX1RBQkxFX1VQR1JBREVcXHRpZiBBQ1BJXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19DUFVfRklOQUxJWkVfSU5JVFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcXG5pbmRleCBlNjdlNjRhYzZlOGNmYy4uNmYzMGFhOGE2NDkwZTEgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxcbkBAIC0xMDYwLDcgKzEwNjAsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90ICpwbWRwX3B0ZXAocG1kX3QgKnBtZClcXG4gI2RlZmluZSBwbWRfbWtzb2Z0X2RpcnR5KHBtZCkgIHB0ZV9wbWQocHRlX21rc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxcbiAjZGVmaW5lIHBtZF9jbGVhcl9zb2Z0X2RpcnR5KHBtZCkgcHRlX3BtZChwdGVfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gI2RlZmluZSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWQpXFx0cHRlX3BtZChwdGVfc3dwX21rc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxcbiAjZGVmaW5lIHBtZF9zd3Bfc29mdF9kaXJ0eShwbWQpXFx0XFx0cHRlX3N3cF9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSlcXG4gI2RlZmluZSBwbWRfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kKVxcdHB0ZV9wbWQocHRlX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGVcXG5pbmRleCBiYWMwMmM4M2JiM2U0Zi4uNGEwZmE2ODFiZjk4MTQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGVcXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZVxcbkBAIC0xMTIsNyArMTEyLDcgQEAgY29uZmlnIFBQQ19USFBcXG4gICAgICAgIGRlcGVuZHMgb24gUFBDX1JBRElYX01NVSB8fCAoUFBDXzY0U19IQVNIX01NVSBcXHUwMDI2XFx1MDAyNiBQQUdFX1NJWkVfNjRLQilcXG4gICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuLSAgICAgICBzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbisgICAgICAgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIFxcbiBjaG9pY2VcXG4gXFx0cHJvbXB0IFxcXCJDUFUgc2VsZWN0aW9uXFxcIlxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L0tjb25maWcgYi9hcmNoL3Jpc2N2L0tjb25maWdcXG5pbmRleCAzZjBhNjQ3MjE4ZTQwNy4uYmY3YjI3MWNjY2Q4MDQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9LY29uZmlnXFxuKysrIGIvYXJjaC9yaXNjdi9LY29uZmlnXFxuQEAgLTIyLDcgKzIyLDcgQEAgY29uZmlnIFJJU0NWXFxuIFxcdHNlbGVjdCBBUkNIX0VOQUJMRV9IVUdFUEFHRV9NSUdSQVRJT04gaWYgSFVHRVRMQl9QQUdFIFxcdTAwMjZcXHUwMDI2IE1JR1JBVElPTlxcbiBcXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgU1BBUlNFTUVNX1ZNRU1NQVBcXG4gXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXFx1MDAzZSAyXFxuLVxcdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0NDX0NBTl9MSU5LXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19DVVJSRU5UX1NUQUNLX1BPSU5URVJcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi4yYWE1MjllODgyZDMwNCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTk0Niw3ICs5NDYsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF90IHBtZClcXG4gXFx0cmV0dXJuIHB0ZV9wbWQocHRlX2NsZWFyX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfc3dwX3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbiB7XFxuIFxcdHJldHVybiBwdGVfc3dwX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKTtcXG5AQCAtOTYxLDcgKzk2MSw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF90IHBtZClcXG4ge1xcbiBcXHRyZXR1cm4gcHRlX3BtZChwdGVfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kX3B0ZShwbWQpKSk7XFxuIH1cXG4tI2VuZGlmIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXFxuKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG4gI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWSAqL1xcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWRfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5AQCAtMTIwOCwxMCArMTIwOCwxMCBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zd3BfY2xlYXJfZXhjbHVzaXZlKHB0ZV90IHB0ZSlcXG4gXFx0cmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSBcXHUwMDI2IH5fUEFHRV9TV1BfRVhDTFVTSVZFKTtcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gI2RlZmluZSBfX3BtZF90b19zd3BfZW50cnkocG1kKSAoKHN3cF9lbnRyeV90KSB7IHBtZF92YWwocG1kKSB9KVxcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbClcXG4tI2VuZGlmIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXFxuKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG4gXFxuIC8qXFxuICAqIEluIHRoZSBSVjY0IExpbnV4IHNjaGVtZSwgd2UgZ2l2ZSB0aGUgdXNlciBoYWxmIG9mIHRoZSB2aXJ0dWFsLWFkZHJlc3Mgc3BhY2VcXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xcbmluZGV4IDg0NDA0ZTY3NzhkNTA0Li4wNzE5ZjY4ZGUwZjM2ZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3MzOTAvS2NvbmZpZ1xcbisrKyBiL2FyY2gvczM5MC9LY29uZmlnXFxuQEAgLTgyLDcgKzgyLDcgQEAgY29uZmlnIFMzOTBcXG4gXFx0c2VsZWN0IEFSQ0hfQ09SUkVDVF9TVEFDS1RSQUNFX09OX0tSRVRQUk9CRVxcbiBcXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgU1BBUlNFTUVNXFxuIFxcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTIFxcdTAwM2UgMlxcbi1cXHRzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0NDX0NBTl9MSU5LXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19DUFVfRklOQUxJWkVfSU5JVFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggODU5Y2U3YzdkNDU0NDguLjZmYWNjZmE2M2IwOTMzIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTkwMyw3ICs5MDMsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF90IHBtZClcXG4gXFx0cmV0dXJuIGNsZWFyX3BtZF9iaXQocG1kLCBfX3BncHJvdChfU0VHTUVOVF9FTlRSWV9TT0ZUX0RJUlRZKSk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuICNkZWZpbmUgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZClcXHRcXHRwbWRfc29mdF9kaXJ0eShwbWQpXFxuICNkZWZpbmUgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKVxcdHBtZF9ta3NvZnRfZGlydHkocG1kKVxcbiAjZGVmaW5lIHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWQpXFx0cG1kX2NsZWFyX3NvZnRfZGlydHkocG1kKVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xcbmluZGV4IGJkYWQ5MGYyMTBlNGJmLi41MGUwMGQ4NDE3YWFjYyAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXFxuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xcbkBAIC03MCw3ICs3MCw3IEBAIGNvbmZpZyBYODZcXG4gXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTiBpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgSFVHRVRMQl9QQUdFIFxcdTAwMjZcXHUwMDI2IE1JR1JBVElPTlxcbiBcXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgWDg2XzY0XFxuIFxcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDIpIFxcdTAwMjZcXHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcXG4tXFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgWDg2XzY0IFxcdTAwMjZcXHUwMDI2IFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuK1xcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVxcdGlmIEFDUElcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9BVFRBQ0tfVkVDVE9SU1xcdGlmIENQVV9NSVRJR0FUSU9OU1xcbiBcXHRzZWxlY3QgQVJDSF9IQVNfQ0FDSEVfTElORV9TSVpFXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IGFjMjk1Y2E2YzkyZjk5Li5lMGZkMzE4ZDQwMDRkMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtMTU0NSw3ICsxNTQ1LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc3dwX2NsZWFyX3NvZnRfZGlydHkocHRlX3QgcHRlKVxcbiBcXHRyZXR1cm4gcHRlX2NsZWFyX2ZsYWdzKHB0ZSwgX1BBR0VfU1dQX1NPRlRfRElSVFkpO1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbiBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZF90IHBtZClcXG4ge1xcbiBcXHRyZXR1cm4gcG1kX3NldF9mbGFncyhwbWQsIF9QQUdFX1NXUF9TT0ZUX0RJUlRZKTtcXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jXFxuaW5kZXggZDMyNDA4ZjdjZDVlZDIuLjFmYjVhY2Q4OGFkMDI0IDEwMDY0NFxcbi0tLSBhL2ZzL3Byb2MvdGFza19tbXUuY1xcbisrKyBiL2ZzL3Byb2MvdGFza19tbXUuY1xcbkBAIC0yMTI5LDcgKzIxMjksOCBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlX3RocChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRcXHRcXHRmbGFncyB8PSBQTV9TT0ZUX0RJUlRZO1xcbiBcXHRcXHRpZiAocG1kX3N3cF91ZmZkX3dwKHBtZCkpXFxuIFxcdFxcdFxcdGZsYWdzIHw9IFBNX1VGRkRfV1A7XFxuLVxcdFxcdHBhZ2UgPSBzb2Z0bGVhZl90b19wYWdlKGVudHJ5KTtcXG4rXFx0XFx0aWYgKHNvZnRsZWFmX2hhc19wZm4oZW50cnkpKVxcbitcXHRcXHRcXHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmIChwYWdlKSB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG5pbmRleCBhZDIwZjdmOGMxNzk0NC4uMTQ4N2JmNGFmMWE3ZWMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxcbkBAIC01NjcsNyArNTY3LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmdldF9wZXJzaXN0ZW50X2h1Z2VfemVyb19mb2xpbyh2b2lkKVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKHZvaWQpXFxuIHtcXG4tXFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pO1xcbitcXHRyZXR1cm4gSVNfRU5BQkxFRChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpO1xcbiB9XFxuIFxcbiB2b2lkIHNwbGl0X2h1Z2VfcG1kX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCBiL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oXFxuaW5kZXggOTkyY2Q4YmQ4ZWQwZTkuLjg4ODg4ZGFlYjAxOGE5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcXG5AQCAtODEsNyArODEsNyBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNvZnRsZWFmX3RvX3B0ZShzb2Z0bGVhZl90IGVudHJ5KVxcbiBcXHRyZXR1cm4gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIC8qKlxcbiAgKiBzb2Z0bGVhZl9mcm9tX3BtZCgpIC0gT2J0YWluIGEgbGVhZiBlbnRyeSBmcm9tIGEgUE1EIGVudHJ5LlxcbiAgKiBAcG1kOiBQTUQgZW50cnkuXFxuQEAgLTEwOCw2ICsxMDgsMjEgQEAgc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZClcXG4gXFx0cmV0dXJuIHN3cF9lbnRyeShfX3N3cF90eXBlKGFyY2hfZW50cnkpLCBfX3N3cF9vZmZzZXQoYXJjaF9lbnRyeSkpO1xcbiB9XFxuIFxcbisvKipcXG4rICogc29mdGxlYWZfdG9fcG1kKCkgLSBPYnRhaW4gYSBQTUQgZW50cnkgZnJvbSBhIGxlYWYgZW50cnkuXFxuKyAqIEBlbnRyeTogTGVhZiBlbnRyeS5cXG4rICpcXG4rICogVGhpcyBnZW5lcmF0ZXMgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIFBNRCBlbnRyeSB0aGF0IGNhbiBiZSB1dGlsaXNlZCB0b1xcbisgKiBlbmNvZGUgdGhlIG1ldGFkYXRhIHRoZSBsZWFmIGVudHJ5IGVuY29kZXMuXFxuKyAqXFxuKyAqIFJldHVybnM6IEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBQTUQgZW50cnkgZW5jb2RpbmcgbGVhZiBlbnRyeS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgcG1kX3Qgc29mdGxlYWZfdG9fcG1kKHNvZnRsZWFmX3QgZW50cnkpXFxuK3tcXG4rXFx0LyogVGVtcG9yYXJ5IHVudGlsIHN3cF9lbnRyeV90IGVsaW1pbmF0ZWQuICovXFxuK1xcdHJldHVybiBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcXG4rfVxcbitcXG4gI2Vsc2VcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc29mdGxlYWZfdCBzb2Z0bGVhZl9mcm9tX3BtZChwbWRfdCBwbWQpXFxuQEAgLTExNSw2ICsxMzAsMTEgQEAgc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZClcXG4gXFx0cmV0dXJuIHNvZnRsZWFmX21rX25vbmUoKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBwbWRfdCBzb2Z0bGVhZl90b19wbWQoc29mdGxlYWZfdCBlbnRyeSlcXG4re1xcbitcXHRyZXR1cm4gX19wbWQoMCk7XFxuK31cXG4rXFxuICNlbmRpZlxcbiBcXG4gLyoqXFxuQEAgLTU2Nyw3ICs1ODcsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3VmZmRfbWFya2VyKHB0ZV90IHB0ZSlcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbi0jaWYgZGVmaW5lZChDT05GSUdfWk9ORV9ERVZJQ0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pXFxuKyNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpXFxuIFxcbiAvKipcXG4gICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXFxuQEAgLTU4NiwxNCArNjA2LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbiBcXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XFxuIH1cXG4gXFxuLSNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXFx1MDAyNlxcdTAwMjYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG4rI2Vsc2UgIC8qIENPTkZJR19aT05FX0RFVklDRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRfaXNfZGV2aWNlX3ByaXZhdGVfZW50cnkocG1kX3QgcG1kKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4tI2VuZGlmIC8qIENPTkZJR19aT05FX0RFVklDRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbisjZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbiBcXG4gLyoqXFxuICAqIHBtZF9pc19taWdyYXRpb25fZW50cnkoKSAtIERvZXMgdGhpcyBQTUQgZW50cnkgZW5jb2RlIGEgbWlncmF0aW9uIGVudHJ5P1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuaW5kZXggZDUyZDJhOTc2ZTVhMjguLmUzOGYwNjljMWM5MTA4IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5AQCAtMTgzOSw3ICsxODM5LDcgQEAgc3RhdGljIGlubGluZSBwZ3Byb3RfdCBwZ3Byb3RfbW9kaWZ5KHBncHJvdF90IG9sZHByb3QsIHBncHJvdF90IG5ld3Byb3QpXFxuICNlbmRpZlxcbiBcXG4gI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWVxcbi0jaWZuZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZm5kZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKVxcbiB7XFxuIFxcdHJldHVybiBwbWQ7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oIGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcXG5pbmRleCA4Y2ZjOTY2ZWFlNDhlYi4uNzA1YTg0MTU0ZDI4ZWIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaFxcbkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIGlubGluZSBzd3BfZW50cnlfdCBtYWtlX2d1YXJkX3N3cF9lbnRyeSh2b2lkKVxcbiBcXG4gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gZXh0ZXJuIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuIFxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKTtcXG4gXFxuQEAgLTMzOCw3ICszMzgsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXFxuIFxcdHJldHVybiBfX3N3cF9lbnRyeV90b19wbWQoYXJjaF9lbnRyeSk7XFxuIH1cXG4gXFxuLSNlbHNlICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbisjZWxzZSAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuIHN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4gXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG5AQCAtMzU4LDcgKzM1OCw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcXG4gXFx0cmV0dXJuIF9fcG1kKDApO1xcbiB9XFxuIFxcbi0jZW5kaWYgIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXFxuKyNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX01NVSAqL1xcbiAjZW5kaWYgLyogX0xJTlVYX1NXQVBPUFNfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZ1xcbmluZGV4IDllMGNhNDgyNDkwNTRmLi4wNGZlNTE3MWJiOGM4MCAxMDA2NDRcXG4tLS0gYS9tbS9LY29uZmlnXFxuKysrIGIvbW0vS2NvbmZpZ1xcbkBAIC03MDMsNyArNzAzLDcgQEAgY29uZmlnIERFVklDRV9NSUdSQVRJT05cXG4gY29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxcbiBcXHRib29sXFxuIFxcbi1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbitjb25maWcgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gXFx0Ym9vbFxcbiBcXG4gY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxuZGlmZiAtLWdpdCBhL21tL2RlYnVnX3ZtX3BndGFibGUuYyBiL21tL2RlYnVnX3ZtX3BndGFibGUuY1xcbmluZGV4IDIzZGMzZWUwOTU2MTkyLi41MDdmYmQxYWU3ZTUzNSAxMDA2NDRcXG4tLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcXG4rKysgYi9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcXG5AQCAtNzUxLDE0ICs3NTEsMTQgQEAgc3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3NvZnRfZGlydHlfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4gXFx0cG1kX3QgcG1kO1xcbiBcXG4gXFx0aWYgKCFwZ3RhYmxlX3N1cHBvcnRzX3NvZnRfZGlydHkoKSB8fFxcbi1cXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pKVxcbitcXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0aWYgKCFoYXNfdHJhbnNwYXJlbnRfaHVnZXBhZ2UoKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cHJfZGVidWcoXFxcIlZhbGlkYXRpbmcgUE1EIHN3YXAgc29mdCBkaXJ0eVxcXFxuXFxcIik7XFxuLVxcdHBtZCA9IHN3cF9lbnRyeV90b19wbWQoYXJncy1cXHUwMDNlbGVhZl9lbnRyeSk7XFxuK1xcdHBtZCA9IHNvZnRsZWFmX3RvX3BtZChhcmdzLVxcdTAwM2VsZWFmX2VudHJ5KTtcXG4gXFx0V0FSTl9PTighcG1kX2lzX2h1Z2UocG1kKSk7XFxuIFxcdFdBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZihwbWQpKTtcXG4gXFxuQEAgLTgxOSw3ICs4MTksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcHRlX3N3YXBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4gXFx0V0FSTl9PTihtZW1jbXAoXFx1MDAyNnB0ZTEsIFxcdTAwMjZwdGUyLCBzaXplb2YocHRlMSkpKTtcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gc3RhdGljIHZvaWQgX19pbml0IHBtZF9zb2Z0bGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbiB7XFxuIFxcdHN3cF9lbnRyeV90IGFyY2hfZW50cnk7XFxuQEAgLTgyOSw3ICs4MjksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdHByX2RlYnVnKFxcXCJWYWxpZGF0aW5nIFBNRCBzd2FwXFxcXG5cXFwiKTtcXG4tXFx0cG1kMSA9IHN3cF9lbnRyeV90b19wbWQoYXJncy1cXHUwMDNlbGVhZl9lbnRyeSk7XFxuK1xcdHBtZDEgPSBzb2Z0bGVhZl90b19wbWQoYXJncy1cXHUwMDNlbGVhZl9lbnRyeSk7XFxuIFxcdFdBUk5fT04oIXBtZF9pc19odWdlKHBtZDEpKTtcXG4gXFx0V0FSTl9PTighcG1kX2lzX3ZhbGlkX3NvZnRsZWFmKHBtZDEpKTtcXG4gXFxuQEAgLTgzNyw5ICs4MzcsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuIFxcdHBtZDIgPSBfX3N3cF9lbnRyeV90b19wbWQoYXJjaF9lbnRyeSk7XFxuIFxcdFdBUk5fT04obWVtY21wKFxcdTAwMjZwbWQxLCBcXHUwMDI2cG1kMiwgc2l6ZW9mKHBtZDEpKSk7XFxuIH1cXG4tI2Vsc2UgIC8qICFDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbisjZWxzZSAgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbiBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cXG4rI2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbiBcXG4gc3RhdGljIHZvaWQgX19pbml0IHN3YXBfbWlncmF0aW9uX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbW0vaG1tLmMgYi9tbS9obW0uY1xcbmluZGV4IGM3MmM5ZGRmZGIyZjYyLi40ZjNmNjI3ZDJiNDc3MiAxMDA2NDRcXG4tLS0gYS9tbS9obW0uY1xcbisrKyBiL21tL2htbS5jXFxuQEAgLTMzMSw3ICszMzEsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX3B0ZShzdHJ1Y3QgbW1fd2FsayAqd2FsaywgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRyZXR1cm4gaG1tX3ZtYV9mYXVsdChhZGRyLCBlbmQsIHJlcXVpcmVkX2ZhdWx0LCB3YWxrKTtcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nICpobW1fcGZucyxcXG4gXFx0XFx0XFx0XFx0ICAgICBwbWRfdCBwbWQpXFxuQEAgLTM5MSw3ICszOTEsNyBAQCBzdGF0aWMgaW50IGhtbV92bWFfaGFuZGxlX2Fic2VudF9wbWQoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuIFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbiBcXHRyZXR1cm4gaG1tX3BmbnNfZmlsbChzdGFydCwgZW5kLCByYW5nZSwgSE1NX1BGTl9FUlJPUik7XFxuIH1cXG4tI2VuZGlmICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xcbisjZW5kaWYgIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbiBcXG4gc3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxcbiBcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uNGI2ZTQ0MWFlOTMxZWMgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcXG4gXFx0aWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbl93cml0ZShlbnRyeSkgfHxcXG4gXFx0ICAgIHNvZnRsZWFmX2lzX21pZ3JhdGlvbl9yZWFkX2V4Y2x1c2l2ZShlbnRyeSkpIHtcXG4gXFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX21pZ3JhdGlvbl9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLVxcdFxcdHBtZCA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpO1xcbitcXHRcXHRwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xcbiBcXHRcXHRpZiAocG1kX3N3cF9zb2Z0X2RpcnR5KCpzcmNfcG1kKSlcXG4gXFx0XFx0XFx0cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKTtcXG4gXFx0XFx0aWYgKHBtZF9zd3BfdWZmZF93cCgqc3JjX3BtZCkpXFxuQEAgLTE4MzIsNyArMTgzMiw3IEBAIHN0YXRpYyB2b2lkIGNvcHlfaHVnZV9ub25fcHJlc2VudF9wbWQoXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XFxuIFxcdFxcdFxcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9kZXZpY2VfcHJpdmF0ZV9lbnRyeShzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLVxcdFxcdFxcdHBtZCA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpO1xcbitcXHRcXHRcXHRwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqc3JjX3BtZCkpXFxuIFxcdFxcdFxcdFxcdHBtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZCk7XFxuQEAgLTI1NTcsMTEgKzI1NTcsMTIgQEAgc3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXHRcXHRib29sIHVmZmRfd3BfcmVzb2x2ZSlcXG4ge1xcbiBcXHRzb2Z0bGVhZl90IGVudHJ5ID0gc29mdGxlYWZfZnJvbV9wbWQoKnBtZCk7XFxuLVxcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XFxuIFxcdHBtZF90IG5ld3BtZDtcXG4gXFxuIFxcdFZNX1dBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSk7XFxuIFxcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpKSB7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XFxuK1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBIHByb3RlY3Rpb24gY2hlY2sgaXMgZGlmZmljdWx0IHNvXFxuIFxcdFxcdCAqIGp1c3QgYmUgc2FmZSBhbmQgZGlzYWJsZSB3cml0ZVxcbkBAIC0yNTcwLDEyICsyNTcxLDEyIEBAIHN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4gXFx0XFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2V4Y2x1c2l2ZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xcbi1cXHRcXHRuZXdwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcXG4rXFx0XFx0bmV3cG1kID0gc29mdGxlYWZfdG9fcG1kKGVudHJ5KTtcXG4gXFx0XFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcG1kKSlcXG4gXFx0XFx0XFx0bmV3cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkobmV3cG1kKTtcXG4gXFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcXG4gXFx0XFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcXG4tXFx0XFx0bmV3cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XFxuK1xcdFxcdG5ld3BtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XFxuIFxcdFxcdGlmIChwbWRfc3dwX3VmZmRfd3AoKnBtZCkpXFxuIFxcdFxcdFxcdG5ld3BtZCA9IHBtZF9zd3BfbWt1ZmZkX3dwKG5ld3BtZCk7XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTQ4NjMsNyArNDg2NCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyh2b2lkKVxcbiBsYXRlX2luaXRjYWxsKHNwbGl0X2h1Z2VfcGFnZXNfZGVidWdmcyk7XFxuICNlbmRpZlxcbiBcXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcXG4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4gXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpXFxuIHtcXG5AQCAtNDkyMyw3ICs0OTI0LDcgQEAgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4gXFx0fVxcbiBcXG4gXFx0LyogU2V0IFBNRC4gKi9cXG4tXFx0cG1kc3dwID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XFxuK1xcdHBtZHN3cCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XFxuIFxcdGlmIChzb2Z0ZGlydHkpXFxuIFxcdFxcdHBtZHN3cCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZHN3cCk7XFxuIFxcdGlmICh1ZmZkX3dwKVxcbkBAIC00OTc2LDcgKzQ5NzcsNyBAQCB2b2lkIHJlbW92ZV9taWdyYXRpb25fcG1kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgc3RydWN0IHBhZ2UgKm5ldylcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VfdG9fcGZuKG5ldykpO1xcbi1cXHRcXHRwbWRlID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XFxuK1xcdFxcdHBtZGUgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xcbiBcXG4gXFx0XFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcHZtdy1cXHUwMDNlcG1kKSlcXG4gXFx0XFx0XFx0cG1kZSA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZGUpO1xcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDhlMGRmM2QxYzZmOTgwLi4wZTNkYjk0NTFlNWM3OCAxMDA2NDRcXG4tLS0gYS9tbS9pbnRlcm5hbC5oXFxuKysrIGIvbW0vaW50ZXJuYWwuaFxcbkBAIC0xOTU2LDQgKzE5NTYsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0X3N5c2N0bF9tYXhfbWFwX2NvdW50KHZvaWQpXFxuIGJvb2wgbWF5X2V4cGFuZF92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncyxcXG4gXFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucGFnZXMpO1xcbiBcXG4rLypcXG4rICogRW5zdXJlIEBtbSBpcyBvbiB0aGUgaW5pdF9tbS5tbWxpc3Qgc28gc3dhcG9mZiBjYW4gZmluZCBpdC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuK3tcXG4rXFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VtbWxpc3QpKSB7XFxuK1xcdFxcdHNwaW5fbG9jayhcXHUwMDI2bW1saXN0X2xvY2spO1xcbitcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bW0tXFx1MDAzZW1tbGlzdCkpXFxuK1xcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZtbS1cXHUwMDNlbW1saXN0LCBcXHUwMDI2aW5pdF9tbS5tbWxpc3QpO1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bW1saXN0X2xvY2spO1xcbitcXHR9XFxuK31cXG4rXFxuICNlbmRpZlxcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXFxuaW5kZXggYTNmY2FmOGNmZThmOGIuLjY2MzdjNWIxM2M5YmFjIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtOTUzLDE0ICs5NTMsNyBAQCBjb3B5X25vbnByZXNlbnRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbiBcXHRcXHRpZiAoc3dhcF9kdXBfZW50cnlfZGlyZWN0KGVudHJ5KSBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4tXFx0XFx0LyogbWFrZSBzdXJlIGRzdF9tbSBpcyBvbiBzd2Fwb2ZmJ3MgbW1saXN0LiAqL1xcbi1cXHRcXHRpZiAodW5saWtlbHkobGlzdF9lbXB0eShcXHUwMDI2ZHN0X21tLVxcdTAwM2VtbWxpc3QpKSkge1xcbi1cXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tbGlzdF9sb2NrKTtcXG4tXFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNmRzdF9tbS1cXHUwMDNlbW1saXN0KSlcXG4tXFx0XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmRzdF9tbS1cXHUwMDNlbW1saXN0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2c3JjX21tLVxcdTAwM2VtbWxpc3QpO1xcbi1cXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bW1saXN0X2xvY2spO1xcbi1cXHRcXHR9XFxuK1xcdFxcdG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhkc3RfbW0pO1xcbiBcXHRcXHQvKiBNYXJrIHRoZSBzd2FwIGVudHJ5IGFzIHNoYXJlZC4gKi9cXG4gXFx0XFx0aWYgKHB0ZV9zd3BfZXhjbHVzaXZlKG9yaWdfcHRlKSkge1xcbiBcXHRcXHRcXHRwdGUgPSBwdGVfc3dwX2NsZWFyX2V4Y2x1c2l2ZShvcmlnX3B0ZSk7XFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IDQ5ZTEwZmVlYjA5NGYwLi5jNDhkYzUxMjdlNmFhOSAxMDA2NDRcXG4tLS0gYS9tbS9taWdyYXRlLmNcXG4rKysgYi9tbS9taWdyYXRlLmNcXG5AQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdFxcdGlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcHZtdy5hZGRyZXNzKSAtIHB2bXcucGdvZmY7XFxuIFxcdFxcdG5ldyA9IGZvbGlvX3BhZ2UoZm9saW8sIGlkeCk7XFxuIFxcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbiBcXHRcXHQvKiBQTUQtbWFwcGVkIFRIUCBtaWdyYXRpb24gZW50cnkgKi9cXG4gXFx0XFx0aWYgKCFwdm13LnB0ZSkge1xcbiBcXHRcXHRcXHRWTV9CVUdfT05fRk9MSU8oZm9saW9fdGVzdF9odWdldGxiKGZvbGlvKSB8fFxcbkBAIC01NDUsNyArNTQ1LDcgQEAgdm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdF9odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIHZvaWQgcG1kX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kKVxcbiB7XFxuIFxcdHNwaW5sb2NrX3QgKnB0bDtcXG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5pbmRleCBhZTM5MTczZDZhMGU4YS4uMmY4YjY0NjMwMmMyNTEgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZV9kZXZpY2UuY1xcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcXG5AQCAtMTY2LDExICsxNjYsMTQgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbiBcXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudCgqcG1kcCkpIHtcXG4gXFx0XFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwbWRwKTtcXG4gXFxuLVxcdFxcdGZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xcbi1cXG4gXFx0XFx0aWYgKCFzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZShlbnRyeSkgfHxcXG4tXFx0XFx0XFx0IShtaWdyYXRlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkgfHxcXG4tXFx0XFx0XFx0KGZvbGlvLVxcdTAwM2VwZ21hcC1cXHUwMDNlb3duZXIgIT0gbWlncmF0ZS1cXHUwMDNlcGdtYXBfb3duZXIpKSB7XFxuK1xcdFxcdCAgICAhKG1pZ3JhdGUtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlHUkFURV9WTUFfU0VMRUNUX0RFVklDRV9QUklWQVRFKSkge1xcbitcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbitcXHRcXHRcXHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcXG4rXFx0XFx0aWYgKGZvbGlvLVxcdTAwM2VwZ21hcC1cXHUwMDNlb3duZXIgIT0gbWlncmF0ZS1cXHUwMDNlcGdtYXBfb3duZXIpIHtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gXFx0XFx0XFx0cmV0dXJuIG1pZ3JhdGVfdm1hX2NvbGxlY3Rfc2tpcChzdGFydCwgZW5kLCB3YWxrKTtcXG4gXFx0XFx0fVxcbkBAIC03NjgsNyArNzcxLDcgQEAgaW50IG1pZ3JhdGVfdm1hX3NldHVwKHN0cnVjdCBtaWdyYXRlX3ZtYSAqYXJncylcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfdm1hX3NldHVwKTtcXG4gXFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIC8qKlxcbiAgKiBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZTogSW5zZXJ0IGEgaHVnZSBmb2xpbyBpbnRvIEBtaWdyYXRlLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tXFxuICAqIGF0IEBhZGRyLiBmb2xpbyBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhcyBhIHBhcnQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIHdpdGhcXG5AQCAtODM1LDcgKzgzOCw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHN3cF9lbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VfdG9fcGZuKHBhZ2UpKTtcXG4tXFx0XFx0ZW50cnkgPSBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeSk7XFxuK1xcdFxcdGVudHJ5ID0gc29mdGxlYWZfdG9fcG1kKHN3cF9lbnRyeSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgICFmb2xpb19pc19kZXZpY2VfY29oZXJlbnQoZm9saW8pKSB7XFxuQEAgLTkyMyw3ICs5MjYsNyBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X3VubWFwcGVkX2ZvbGlvKHN0cnVjdCBtaWdyYXRlX3ZtYSAqbWlncmF0ZSxcXG4gXFx0XFx0bWlncmF0ZS1cXHUwMDNlc3JjW2kraWR4XSA9IG1pZ3JhdGVfcGZuKHBmbiArIGkpIHwgZmxhZ3M7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4tI2Vsc2UgLyogIUNPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXFxuKyNlbHNlIC8qICFDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cXG4gc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuIFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5AQCAtOTQ0LDcgKzk0Nyw3IEBAIHN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaWdyYXRlX3ZtYV9ucl9wYWdlcyh1bnNpZ25lZCBsb25nICpzcmMpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBuciA9IDE7XFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxuIFxcdGlmICgqc3JjIFxcdTAwMjYgTUlHUkFURV9QRk5fQ09NUE9VTkQpXFxuIFxcdFxcdG5yID0gSFBBR0VfUE1EX05SO1xcbiAjZWxzZVxcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcXG5pbmRleCAxYzc3ZDVkYzA2ZTlmYS4uMGZiN2ExYjgyY2YzYzIgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTIzMDQsMTIgKzIzMDQsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fdW5tYXBfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcXG4gXFx0XFx0XFx0XFx0Z290byB3YWxrX2Fib3J0O1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtbS1cXHUwMDNlbW1saXN0KSkge1xcbi1cXHRcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm1tbGlzdF9sb2NrKTtcXG4tXFx0XFx0XFx0XFx0aWYgKGxpc3RfZW1wdHkoXFx1MDAyNm1tLVxcdTAwM2VtbWxpc3QpKVxcbi1cXHRcXHRcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2bW0tXFx1MDAzZW1tbGlzdCwgXFx1MDAyNmluaXRfbW0ubW1saXN0KTtcXG4tXFx0XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNm1tbGlzdF9sb2NrKTtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xcbiBcXHRcXHRcXHRkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTtcXG4gXFx0XFx0XFx0aW5jX21tX2NvdW50ZXIobW0sIE1NX1NXQVBFTlRTKTtcXG4gXFx0XFx0XFx0c3dwX3B0ZSA9IHN3cF9lbnRyeV90b19wdGUoZW50cnkpO1xcbkBAIC0yNDc3LDcgKzI0NzIsNyBAQCBzdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdFxcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXFx1MDAyNnB2bXcpO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0fVxcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbiBcXHRcXHRcXHRwbWR2YWwgPSBwbWRwX2dldChwdm13LnBtZCk7XFxuIFxcdFxcdFxcdGlmIChsaWtlbHkocG1kX3ByZXNlbnQocG1kdmFsKSkpXFxuIFxcdFxcdFxcdFxcdHBmbiA9IHBtZF9wZm4ocG1kdmFsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTE6MjcuMTM0NDM3NTE1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMjEyNzI5NDgwMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIlpPTkVfREVWSUNFXCIsXG4gICAgXCJERVZJQ0VfUFJJVkFURVwiLFxuICAgIFwiVEVTVF9ITU1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwYWdlbWFwX3BtZF9yYW5nZV90aHBcIixcbiAgICBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRcIixcbiAgICBcImNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZFwiLFxuICAgIFwic2V0X3BtZF9taWdyYXRpb25fZW50cnlcIixcbiAgICBcInJlbW92ZV9taWdyYXRpb25fcG1kXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbmFtZXMgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gdG8gQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGFuZCBpbnRyb2R1Y2VzIHNvZnRsZWFmX3RvX3BtZCBhbmQgc29mdGxlYWZfZnJvbV9wbWQgdG8gaGFuZGxlIHNvZnRsZWFmIGVudHJpZXMuIEl0IGFsc28gZml4ZXMgcG90ZW50aWFsIGJ1Z3Mgd2hlcmUgc29mdGxlYWZfdG9fcGFnZSBvciBzb2Z0bGVhZl90b19mb2xpbyBpcyBjYWxsZWQgb24gZW50cmllcyB3aXRob3V0IGEgUEZOIG9yIG5vbi1kZXZpY2UtcHJpdmF0ZSBlbnRyaWVzIGluIGZzL3Byb2MvdGFza19tbXUuYyBhbmQgbW0vbWlncmF0ZV9kZXZpY2UuYy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyB0byBlbnN1cmUgbW0gaXMgb24gaW5pdF9tbS5tbWxpc3QgYmVmb3JlIGFkZGluZyBzd2FwIGVudHJpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBhZmZlY3QgbWVtb3J5IG1hbmFnZW1lbnQsIFRIUCBtaWdyYXRpb24sIGFuZCBkZXZpY2UgbWVtb3J5IG1pZ3JhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlOWRkMWUwMGFkZjI2MDAzNGI1OGE3M2RjYTRjOWEzMDhkNDgxYmIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwMDoxMToyMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjNhZmUwNjg4OTE5YmQuLjNlYjk0ZjM2Yzc3ZTg4IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4rKysgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC0xNyw3ICsxNyw3IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTiBpZiBIVUdFVExCX1BBR0UgXHUwMDI2XHUwMDI2IE1JR1JBVElPTlxuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfU1BMSVRfUE1EX1BUTE9DSyBpZiBQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMlxuLVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NBQ0hFX0xJTkVfU0laRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NDX1BMQVRGT1JNXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0NBQ0hFX0lOVkFMSURBVEVfTUVNUkVHSU9OXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMjc2ODljNjJiZDI1ZGQuLjk4NGJhZGZhOWE3NGFiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTUzNCwxMCArMTUzNCwxMCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSlcdCgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pXG4gI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoc3dwKVx0KChwdGVfdCkgeyAoc3dwKS52YWwgfSlcbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gI2RlZmluZSBfX3BtZF90b19zd3BfZW50cnkocG1kKVx0XHQoKHN3cF9lbnRyeV90KSB7IHBtZF92YWwocG1kKSB9KVxuICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcG1kKHN3cClcdFx0X19wbWQoKHN3cCkudmFsKVxuLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgKi9cbiBcbiAvKlxuICAqIEVuc3VyZSB0aGF0IHRoZXJlIGFyZSBub3QgbW9yZSBzd2FwIGZpbGVzIHRoYW4gY2FuIGJlIGVuY29kZWQgaW4gdGhlIGtlcm5lbFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL0tjb25maWcgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5pbmRleCBkOGQyNTIzMjUwMTc5MS4uNTUwMTQyYjdlZTEwMmEgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG4rKysgYi9hcmNoL2xvb25nYXJjaC9LY29uZmlnXG5AQCAtMTIsNyArMTIsNyBAQCBjb25maWcgTE9PTkdBUkNIXG4gXHRzZWxlY3QgQVJDSF9ORUVEU19ERUZFUl9LQVNBTlxuIFx0c2VsZWN0IEFSQ0hfRElTQUJMRV9LQVNBTl9JTkxJTkVcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xuLVx0c2VsZWN0IEFSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERVx0aWYgQUNQSVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9GSU5BTElaRV9JTklUXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuaW5kZXggZTY3ZTY0YWM2ZThjZmMuLjZmMzBhYThhNjQ5MGUxIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG5AQCAtMTA2MCw3ICsxMDYwLDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCAqcG1kcF9wdGVwKHBtZF90ICpwbWQpXG4gI2RlZmluZSBwbWRfbWtzb2Z0X2RpcnR5KHBtZCkgIHB0ZV9wbWQocHRlX21rc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxuICNkZWZpbmUgcG1kX2NsZWFyX3NvZnRfZGlydHkocG1kKSBwdGVfcG1kKHB0ZV9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpXG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKVx0cHRlX3BtZChwdGVfc3dwX21rc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxuICNkZWZpbmUgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZClcdFx0cHRlX3N3cF9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSlcbiAjZGVmaW5lIHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWQpXHRwdGVfcG1kKHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGVcbmluZGV4IGJhYzAyYzgzYmIzZTRmLi40YTBmYTY4MWJmOTgxNCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlXG4rKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZVxuQEAgLTExMiw3ICsxMTIsNyBAQCBjb25maWcgUFBDX1RIUFxuICAgICAgICBkZXBlbmRzIG9uIFBQQ19SQURJWF9NTVUgfHwgKFBQQ182NFNfSEFTSF9NTVUgXHUwMDI2XHUwMDI2IFBBR0VfU0laRV82NEtCKVxuICAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4tICAgICAgIHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4rICAgICAgIHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuIFxuIGNob2ljZVxuIFx0cHJvbXB0IFwiQ1BVIHNlbGVjdGlvblwiXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9LY29uZmlnIGIvYXJjaC9yaXNjdi9LY29uZmlnXG5pbmRleCAzZjBhNjQ3MjE4ZTQwNy4uYmY3YjI3MWNjY2Q4MDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L0tjb25maWdcbisrKyBiL2FyY2gvcmlzY3YvS2NvbmZpZ1xuQEAgLTIyLDcgKzIyLDcgQEAgY29uZmlnIFJJU0NWXG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OIGlmIEhVR0VUTEJfUEFHRSBcdTAwMjZcdTAwMjYgTUlHUkFUSU9OXG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcgaWYgU1BBUlNFTUVNX1ZNRU1NQVBcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIFBHVEFCTEVfTEVWRUxTIFx1MDAzZSAyXG4tXHRzZWxlY3QgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuK1x0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgQVJDSF9IQVNfQklORk1UX0ZMQVRcbiBcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xuIFx0c2VsZWN0IEFSQ0hfSEFTX0NVUlJFTlRfU1RBQ0tfUE9JTlRFUlxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDVkNTc1NmJkYTgyZTNkLi4yYWE1MjllODgyZDMwNCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTk0Niw3ICs5NDYsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF90IHBtZClcbiBcdHJldHVybiBwdGVfcG1kKHB0ZV9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gc3RhdGljIGlubGluZSBib29sIHBtZF9zd3Bfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuIHB0ZV9zd3Bfc29mdF9kaXJ0eShwbWRfcHRlKHBtZCkpO1xuQEAgLTk2MSw3ICs5NjEsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuIHB0ZV9wbWQocHRlX3N3cF9jbGVhcl9zb2Z0X2RpcnR5KHBtZF9wdGUocG1kKSkpO1xuIH1cbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbisjZW5kaWYgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfU09GVF9ESVJUWSAqL1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG1kX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5AQCAtMTIwOCwxMCArMTIwOCwxMCBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9zd3BfY2xlYXJfZXhjbHVzaXZlKHB0ZV90IHB0ZSlcbiBcdHJldHVybiBfX3B0ZShwdGVfdmFsKHB0ZSkgXHUwMDI2IH5fUEFHRV9TV1BfRVhDTFVTSVZFKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgX19wbWRfdG9fc3dwX2VudHJ5KHBtZCkgKChzd3BfZW50cnlfdCkgeyBwbWRfdmFsKHBtZCkgfSlcbiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3BtZChzd3ApIF9fcG1kKChzd3ApLnZhbClcbi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbisjZW5kaWYgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gLypcbiAgKiBJbiB0aGUgUlY2NCBMaW51eCBzY2hlbWUsIHdlIGdpdmUgdGhlIHVzZXIgaGFsZiBvZiB0aGUgdmlydHVhbC1hZGRyZXNzIHNwYWNlXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZ1xuaW5kZXggODQ0MDRlNjc3OGQ1MDQuLjA3MTlmNjhkZTBmMzZmIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL0tjb25maWdcbisrKyBiL2FyY2gvczM5MC9LY29uZmlnXG5AQCAtODIsNyArODIsNyBAQCBjb25maWcgUzM5MFxuIFx0c2VsZWN0IEFSQ0hfQ09SUkVDVF9TVEFDS1RSQUNFX09OX0tSRVRQUk9CRVxuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHIGlmIFNQQVJTRU1FTVxuIFx0c2VsZWN0IEFSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0sgaWYgUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDJcbi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgaWYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiBcdHNlbGVjdCBBUkNIX0hBU19DQ19DQU5fTElOS1xuIFx0c2VsZWN0IEFSQ0hfSEFTX0NQVV9GSU5BTElaRV9JTklUXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1VSUkVOVF9TVEFDS19QT0lOVEVSXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDg1OWNlN2M3ZDQ1NDQ4Li42ZmFjY2ZhNjNiMDkzMyAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC05MDMsNyArOTAzLDcgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfY2xlYXJfc29mdF9kaXJ0eShwbWRfdCBwbWQpXG4gXHRyZXR1cm4gY2xlYXJfcG1kX2JpdChwbWQsIF9fcGdwcm90KF9TRUdNRU5UX0VOVFJZX1NPRlRfRElSVFkpKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuICNkZWZpbmUgcG1kX3N3cF9zb2Z0X2RpcnR5KHBtZClcdFx0cG1kX3NvZnRfZGlydHkocG1kKVxuICNkZWZpbmUgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKVx0cG1kX21rc29mdF9kaXJ0eShwbWQpXG4gI2RlZmluZSBwbWRfc3dwX2NsZWFyX3NvZnRfZGlydHkocG1kKVx0cG1kX2NsZWFyX3NvZnRfZGlydHkocG1kKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnXG5pbmRleCBiZGFkOTBmMjEwZTRiZi4uNTBlMDBkODQxN2FhY2MgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXG4rKysgYi9hcmNoL3g4Ni9LY29uZmlnXG5AQCAtNzAsNyArNzAsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgSFVHRVRMQl9QQUdFIFx1MDAyNlx1MDAyNiBNSUdSQVRJT05cbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRyBpZiBYODZfNjRcbiBcdHNlbGVjdCBBUkNIX0VOQUJMRV9TUExJVF9QTURfUFRMT0NLIGlmIChQR1RBQkxFX0xFVkVMUyBcdTAwM2UgMikgXHUwMDI2XHUwMDI2IChYODZfNjQgfHwgWDg2X1BBRSlcbi1cdHNlbGVjdCBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIGlmIFg4Nl82NCBcdTAwMjZcdTAwMjYgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBpZiBYODZfNjQgXHUwMDI2XHUwMDI2IFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFXHRpZiBBQ1BJXG4gXHRzZWxlY3QgQVJDSF9IQVNfQ1BVX0FUVEFDS19WRUNUT1JTXHRpZiBDUFVfTUlUSUdBVElPTlNcbiBcdHNlbGVjdCBBUkNIX0hBU19DQUNIRV9MSU5FX1NJWkVcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IGFjMjk1Y2E2YzkyZjk5Li5lMGZkMzE4ZDQwMDRkMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTU0NSw3ICsxNTQ1LDcgQEAgc3RhdGljIGlubGluZSBwdGVfdCBwdGVfc3dwX2NsZWFyX3NvZnRfZGlydHkocHRlX3QgcHRlKVxuIFx0cmV0dXJuIHB0ZV9jbGVhcl9mbGFncyhwdGUsIF9QQUdFX1NXUF9TT0ZUX0RJUlRZKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kX3QgcG1kKVxuIHtcbiBcdHJldHVybiBwbWRfc2V0X2ZsYWdzKHBtZCwgX1BBR0VfU1dQX1NPRlRfRElSVFkpO1xuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuaW5kZXggZDMyNDA4ZjdjZDVlZDIuLjFmYjVhY2Q4OGFkMDI0IDEwMDY0NFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXG4rKysgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbkBAIC0yMTI5LDcgKzIxMjksOCBAQCBzdGF0aWMgaW50IHBhZ2VtYXBfcG1kX3JhbmdlX3RocChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHRcdGZsYWdzIHw9IFBNX1NPRlRfRElSVFk7XG4gXHRcdGlmIChwbWRfc3dwX3VmZmRfd3AocG1kKSlcbiBcdFx0XHRmbGFncyB8PSBQTV9VRkZEX1dQO1xuLVx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4rXHRcdGlmIChzb2Z0bGVhZl9oYXNfcGZuKGVudHJ5KSlcbitcdFx0XHRwYWdlID0gc29mdGxlYWZfdG9fcGFnZShlbnRyeSk7XG4gXHR9XG4gXG4gXHRpZiAocGFnZSkge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmhcbmluZGV4IGFkMjBmN2Y4YzE3OTQ0Li4xNDg3YmY0YWYxYTdlYyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaFxuQEAgLTU2Nyw3ICs1NjcsNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqZ2V0X3BlcnNpc3RlbnRfaHVnZV96ZXJvX2ZvbGlvKHZvaWQpXG4gXG4gc3RhdGljIGlubGluZSBib29sIHRocF9taWdyYXRpb25fc3VwcG9ydGVkKHZvaWQpXG4ge1xuLVx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pO1xuK1x0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGKTtcbiB9XG4gXG4gdm9pZCBzcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaCBiL2luY2x1ZGUvbGludXgvbGVhZm9wcy5oXG5pbmRleCA5OTJjZDhiZDhlZDBlOS4uODg4ODhkYWViMDE4YTkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2xlYWZvcHMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9sZWFmb3BzLmhcbkBAIC04MSw3ICs4MSw3IEBAIHN0YXRpYyBpbmxpbmUgcHRlX3Qgc29mdGxlYWZfdG9fcHRlKHNvZnRsZWFmX3QgZW50cnkpXG4gXHRyZXR1cm4gc3dwX2VudHJ5X3RvX3B0ZShlbnRyeSk7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiAvKipcbiAgKiBzb2Z0bGVhZl9mcm9tX3BtZCgpIC0gT2J0YWluIGEgbGVhZiBlbnRyeSBmcm9tIGEgUE1EIGVudHJ5LlxuICAqIEBwbWQ6IFBNRCBlbnRyeS5cbkBAIC0xMDgsNiArMTA4LDIxIEBAIHN0YXRpYyBpbmxpbmUgc29mdGxlYWZfdCBzb2Z0bGVhZl9mcm9tX3BtZChwbWRfdCBwbWQpXG4gXHRyZXR1cm4gc3dwX2VudHJ5KF9fc3dwX3R5cGUoYXJjaF9lbnRyeSksIF9fc3dwX29mZnNldChhcmNoX2VudHJ5KSk7XG4gfVxuIFxuKy8qKlxuKyAqIHNvZnRsZWFmX3RvX3BtZCgpIC0gT2J0YWluIGEgUE1EIGVudHJ5IGZyb20gYSBsZWFmIGVudHJ5LlxuKyAqIEBlbnRyeTogTGVhZiBlbnRyeS5cbisgKlxuKyAqIFRoaXMgZ2VuZXJhdGVzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBQTUQgZW50cnkgdGhhdCBjYW4gYmUgdXRpbGlzZWQgdG9cbisgKiBlbmNvZGUgdGhlIG1ldGFkYXRhIHRoZSBsZWFmIGVudHJ5IGVuY29kZXMuXG4rICpcbisgKiBSZXR1cm5zOiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgUE1EIGVudHJ5IGVuY29kaW5nIGxlYWYgZW50cnkuXG4rICovXG4rc3RhdGljIGlubGluZSBwbWRfdCBzb2Z0bGVhZl90b19wbWQoc29mdGxlYWZfdCBlbnRyeSlcbit7XG4rXHQvKiBUZW1wb3JhcnkgdW50aWwgc3dwX2VudHJ5X3QgZWxpbWluYXRlZC4gKi9cbitcdHJldHVybiBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbit9XG4rXG4gI2Vsc2VcbiBcbiBzdGF0aWMgaW5saW5lIHNvZnRsZWFmX3Qgc29mdGxlYWZfZnJvbV9wbWQocG1kX3QgcG1kKVxuQEAgLTExNSw2ICsxMzAsMTEgQEAgc3RhdGljIGlubGluZSBzb2Z0bGVhZl90IHNvZnRsZWFmX2Zyb21fcG1kKHBtZF90IHBtZClcbiBcdHJldHVybiBzb2Z0bGVhZl9ta19ub25lKCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgcG1kX3Qgc29mdGxlYWZfdG9fcG1kKHNvZnRsZWFmX3QgZW50cnkpXG4re1xuK1x0cmV0dXJuIF9fcG1kKDApO1xuK31cbitcbiAjZW5kaWZcbiBcbiAvKipcbkBAIC01NjcsNyArNTg3LDcgQEAgc3RhdGljIGlubGluZSBib29sIHB0ZV9pc191ZmZkX21hcmtlcihwdGVfdCBwdGUpXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19aT05FX0RFVklDRSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pXG4rI2lmIGRlZmluZWQoQ09ORklHX1pPTkVfREVWSUNFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYpXG4gXG4gLyoqXG4gICogcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KCkgLSBDaGVjayBpZiBQTUQgY29udGFpbnMgYSBkZXZpY2UgcHJpdmF0ZSBzd2FwXG5AQCAtNTg2LDE0ICs2MDYsMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG4gXHRyZXR1cm4gc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoc29mdGxlYWZfZnJvbV9wbWQocG1kKSk7XG4gfVxuIFxuLSNlbHNlICAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG4rI2Vsc2UgIC8qIENPTkZJR19aT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gc3RhdGljIGlubGluZSBib29sIHBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShwbWRfdCBwbWQpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbi0jZW5kaWYgLyogQ09ORklHX1pPTkVfREVWSUNFIFx1MDAyNlx1MDAyNiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuKyNlbmRpZiAvKiBDT05GSUdfWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIFxuIC8qKlxuICAqIHBtZF9pc19taWdyYXRpb25fZW50cnkoKSAtIERvZXMgdGhpcyBQTUQgZW50cnkgZW5jb2RlIGEgbWlncmF0aW9uIGVudHJ5P1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbmluZGV4IGQ1MmQyYTk3NmU1YTI4Li5lMzhmMDY5YzFjOTEwOCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuQEAgLTE4MzksNyArMTgzOSw3IEBAIHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgcGdwcm90X21vZGlmeShwZ3Byb3RfdCBvbGRwcm90LCBwZ3Byb3RfdCBuZXdwcm90KVxuICNlbmRpZlxuIFxuICNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFlcbi0jaWZuZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmbmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZF90IHBtZClcbiB7XG4gXHRyZXR1cm4gcG1kO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oIGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmhcbmluZGV4IDhjZmM5NjZlYWU0OGViLi43MDVhODQxNTRkMjhlYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaFxuQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgaW5saW5lIHN3cF9lbnRyeV90IG1ha2VfZ3VhcmRfc3dwX2VudHJ5KHZvaWQpXG4gXG4gc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrO1xuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBleHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiBcdFx0c3RydWN0IHBhZ2UgKnBhZ2UpO1xuIFxuQEAgLTMzOCw3ICszMzgsNyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHN3cF9lbnRyeV90b19wbWQoc3dwX2VudHJ5X3QgZW50cnkpXG4gXHRyZXR1cm4gX19zd3BfZW50cnlfdG9fcG1kKGFyY2hfZW50cnkpO1xuIH1cbiBcbi0jZWxzZSAgLyogQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbisjZWxzZSAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gc3RhdGljIGlubGluZSBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtMzU4LDcgKzM1OCw3IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcbiBcdHJldHVybiBfX3BtZCgwKTtcbiB9XG4gXG4tI2VuZGlmICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuKyNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gI2VuZGlmIC8qIENPTkZJR19NTVUgKi9cbiAjZW5kaWYgLyogX0xJTlVYX1NXQVBPUFNfSCAqL1xuZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnXG5pbmRleCA5ZTBjYTQ4MjQ5MDU0Zi4uMDRmZTUxNzFiYjhjODAgMTAwNjQ0XG4tLS0gYS9tbS9LY29uZmlnXG4rKysgYi9tbS9LY29uZmlnXG5AQCAtNzAzLDcgKzcwMyw3IEBAIGNvbmZpZyBERVZJQ0VfTUlHUkFUSU9OXG4gY29uZmlnIEFSQ0hfRU5BQkxFX0hVR0VQQUdFX01JR1JBVElPTlxuIFx0Ym9vbFxuIFxuLWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rY29uZmlnIEFSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gXHRib29sXG4gXG4gY29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5kaWZmIC0tZ2l0IGEvbW0vZGVidWdfdm1fcGd0YWJsZS5jIGIvbW0vZGVidWdfdm1fcGd0YWJsZS5jXG5pbmRleCAyM2RjM2VlMDk1NjE5Mi4uNTA3ZmJkMWFlN2U1MzUgMTAwNjQ0XG4tLS0gYS9tbS9kZWJ1Z192bV9wZ3RhYmxlLmNcbisrKyBiL21tL2RlYnVnX3ZtX3BndGFibGUuY1xuQEAgLTc1MSwxNCArNzUxLDE0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl9zb2Z0X2RpcnR5X3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRwbWRfdCBwbWQ7XG4gXG4gXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpIHx8XG4tXHQgICAgIUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04pKVxuK1x0ICAgICFJU19FTkFCTEVEKENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRikpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICghaGFzX3RyYW5zcGFyZW50X2h1Z2VwYWdlKCkpXG4gXHRcdHJldHVybjtcbiBcbiBcdHByX2RlYnVnKFwiVmFsaWRhdGluZyBQTUQgc3dhcCBzb2Z0IGRpcnR5XFxuXCIpO1xuLVx0cG1kID0gc3dwX2VudHJ5X3RvX3BtZChhcmdzLVx1MDAzZWxlYWZfZW50cnkpO1xuK1x0cG1kID0gc29mdGxlYWZfdG9fcG1kKGFyZ3MtXHUwMDNlbGVhZl9lbnRyeSk7XG4gXHRXQVJOX09OKCFwbWRfaXNfaHVnZShwbWQpKTtcbiBcdFdBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZihwbWQpKTtcbiBcbkBAIC04MTksNyArODE5LDcgQEAgc3RhdGljIHZvaWQgX19pbml0IHB0ZV9zd2FwX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRXQVJOX09OKG1lbWNtcChcdTAwMjZwdGUxLCBcdTAwMjZwdGUyLCBzaXplb2YocHRlMSkpKTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbiB7XG4gXHRzd3BfZW50cnlfdCBhcmNoX2VudHJ5O1xuQEAgLTgyOSw3ICs4MjksNyBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRcdHJldHVybjtcbiBcbiBcdHByX2RlYnVnKFwiVmFsaWRhdGluZyBQTUQgc3dhcFxcblwiKTtcbi1cdHBtZDEgPSBzd3BfZW50cnlfdG9fcG1kKGFyZ3MtXHUwMDNlbGVhZl9lbnRyeSk7XG4rXHRwbWQxID0gc29mdGxlYWZfdG9fcG1kKGFyZ3MtXHUwMDNlbGVhZl9lbnRyeSk7XG4gXHRXQVJOX09OKCFwbWRfaXNfaHVnZShwbWQxKSk7XG4gXHRXQVJOX09OKCFwbWRfaXNfdmFsaWRfc29mdGxlYWYocG1kMSkpO1xuIFxuQEAgLTgzNyw5ICs4MzcsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgcG1kX3NvZnRsZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4gXHRwbWQyID0gX19zd3BfZW50cnlfdG9fcG1kKGFyY2hfZW50cnkpO1xuIFx0V0FSTl9PTihtZW1jbXAoXHUwMDI2cG1kMSwgXHUwMDI2cG1kMiwgc2l6ZW9mKHBtZDEpKSk7XG4gfVxuLSNlbHNlICAvKiAhQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbisjZWxzZSAgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIHN0YXRpYyB2b2lkIF9faW5pdCBwbWRfc29mdGxlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG4tI2VuZGlmIC8qIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OICovXG4rI2VuZGlmIC8qIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBzd2FwX21pZ3JhdGlvbl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9obW0uYyBiL21tL2htbS5jXG5pbmRleCBjNzJjOWRkZmRiMmY2Mi4uNGYzZjYyN2QyYjQ3NzIgMTAwNjQ0XG4tLS0gYS9tbS9obW0uY1xuKysrIGIvbW0vaG1tLmNcbkBAIC0zMzEsNyArMzMxLDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9wdGUoc3RydWN0IG1tX3dhbGsgKndhbGssIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiBobW1fdm1hX2ZhdWx0KGFkZHIsIGVuZCwgcmVxdWlyZWRfZmF1bHQsIHdhbGspO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05cbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXG4gc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyAqaG1tX3BmbnMsXG4gXHRcdFx0XHQgICAgIHBtZF90IHBtZClcbkBAIC0zOTEsNyArMzkxLDcgQEAgc3RhdGljIGludCBobW1fdm1hX2hhbmRsZV9hYnNlbnRfcG1kKHN0cnVjdCBtbV93YWxrICp3YWxrLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuIFx0XHRyZXR1cm4gLUVGQVVMVDtcbiBcdHJldHVybiBobW1fcGZuc19maWxsKHN0YXJ0LCBlbmQsIHJhbmdlLCBITU1fUEZOX0VSUk9SKTtcbiB9XG4tI2VuZGlmICAvKiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiAqL1xuKyNlbmRpZiAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gXG4gc3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAyYmNjYjBhNTNhMGE2MC4uNGI2ZTQ0MWFlOTMxZWMgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTgxOSw3ICsxODE5LDcgQEAgc3RhdGljIHZvaWQgY29weV9odWdlX25vbl9wcmVzZW50X3BtZChcbiBcdGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb25fd3JpdGUoZW50cnkpIHx8XG4gXHQgICAgc29mdGxlYWZfaXNfbWlncmF0aW9uX3JlYWRfZXhjbHVzaXZlKGVudHJ5KSkge1xuIFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdFx0cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XG4rXHRcdHBtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XG4gXHRcdGlmIChwbWRfc3dwX3NvZnRfZGlydHkoKnNyY19wbWQpKVxuIFx0XHRcdHBtZCA9IHBtZF9zd3BfbWtzb2Z0X2RpcnR5KHBtZCk7XG4gXHRcdGlmIChwbWRfc3dwX3VmZmRfd3AoKnNyY19wbWQpKVxuQEAgLTE4MzIsNyArMTgzMiw3IEBAIHN0YXRpYyB2b2lkIGNvcHlfaHVnZV9ub25fcHJlc2VudF9wbWQoXG4gXHRcdCAqL1xuIFx0XHRpZiAoc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGVfd3JpdGUoZW50cnkpKSB7XG4gXHRcdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdFx0XHRwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbitcdFx0XHRwbWQgPSBzb2Z0bGVhZl90b19wbWQoZW50cnkpO1xuIFxuIFx0XHRcdGlmIChwbWRfc3dwX3NvZnRfZGlydHkoKnNyY19wbWQpKVxuIFx0XHRcdFx0cG1kID0gcG1kX3N3cF9ta3NvZnRfZGlydHkocG1kKTtcbkBAIC0yNTU3LDExICsyNTU3LDEyIEBAIHN0YXRpYyB2b2lkIGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0Ym9vbCB1ZmZkX3dwX3Jlc29sdmUpXG4ge1xuIFx0c29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwbWQpO1xuLVx0Y29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyA9IHNvZnRsZWFmX3RvX2ZvbGlvKGVudHJ5KTtcbiBcdHBtZF90IG5ld3BtZDtcbiBcbiBcdFZNX1dBUk5fT04oIXBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSk7XG4gXHRpZiAoc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlKGVudHJ5KSkge1xuK1x0XHRjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvID0gc29mdGxlYWZfdG9fZm9saW8oZW50cnkpO1xuK1xuIFx0XHQvKlxuIFx0XHQgKiBBIHByb3RlY3Rpb24gY2hlY2sgaXMgZGlmZmljdWx0IHNvXG4gXHRcdCAqIGp1c3QgYmUgc2FmZSBhbmQgZGlzYWJsZSB3cml0ZVxuQEAgLTI1NzAsMTIgKzI1NzEsMTIgQEAgc3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9leGNsdXNpdmVfbWlncmF0aW9uX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdGVudHJ5ID0gbWFrZV9yZWFkYWJsZV9taWdyYXRpb25fZW50cnkoc3dwX29mZnNldChlbnRyeSkpO1xuLVx0XHRuZXdwbWQgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbitcdFx0bmV3cG1kID0gc29mdGxlYWZfdG9fcG1kKGVudHJ5KTtcbiBcdFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcG1kKSlcbiBcdFx0XHRuZXdwbWQgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShuZXdwbWQpO1xuIFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZV93cml0ZShlbnRyeSkpIHtcbiBcdFx0ZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KHN3cF9vZmZzZXQoZW50cnkpKTtcbi1cdFx0bmV3cG1kID0gc3dwX2VudHJ5X3RvX3BtZChlbnRyeSk7XG4rXHRcdG5ld3BtZCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XG4gXHRcdGlmIChwbWRfc3dwX3VmZmRfd3AoKnBtZCkpXG4gXHRcdFx0bmV3cG1kID0gcG1kX3N3cF9ta3VmZmRfd3AobmV3cG1kKTtcbiBcdH0gZWxzZSB7XG5AQCAtNDg2Myw3ICs0ODY0LDcgQEAgc3RhdGljIGludCBfX2luaXQgc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKHZvaWQpXG4gbGF0ZV9pbml0Y2FsbChzcGxpdF9odWdlX3BhZ2VzX2RlYnVnZnMpO1xuICNlbmRpZlxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBpbnQgc2V0X3BtZF9taWdyYXRpb25fZW50cnkoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuIFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG5AQCAtNDkyMyw3ICs0OTI0LDcgQEAgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcbiBcdH1cbiBcbiBcdC8qIFNldCBQTUQuICovXG4tXHRwbWRzd3AgPSBzd3BfZW50cnlfdG9fcG1kKGVudHJ5KTtcbitcdHBtZHN3cCA9IHNvZnRsZWFmX3RvX3BtZChlbnRyeSk7XG4gXHRpZiAoc29mdGRpcnR5KVxuIFx0XHRwbWRzd3AgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWRzd3ApO1xuIFx0aWYgKHVmZmRfd3ApXG5AQCAtNDk3Niw3ICs0OTc3LDcgQEAgdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpXG4gXHRcdGVsc2VcbiBcdFx0XHRlbnRyeSA9IG1ha2VfcmVhZGFibGVfZGV2aWNlX3ByaXZhdGVfZW50cnkoXG4gXHRcdFx0XHRcdFx0XHRwYWdlX3RvX3BmbihuZXcpKTtcbi1cdFx0cG1kZSA9IHN3cF9lbnRyeV90b19wbWQoZW50cnkpO1xuK1x0XHRwbWRlID0gc29mdGxlYWZfdG9fcG1kKGVudHJ5KTtcbiBcbiBcdFx0aWYgKHBtZF9zd3Bfc29mdF9kaXJ0eSgqcHZtdy1cdTAwM2VwbWQpKVxuIFx0XHRcdHBtZGUgPSBwbWRfc3dwX21rc29mdF9kaXJ0eShwbWRlKTtcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggOGUwZGYzZDFjNmY5ODAuLjBlM2RiOTQ1MWU1Yzc4IDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuKysrIGIvbW0vaW50ZXJuYWwuaFxuQEAgLTE5NTYsNCArMTk1NiwxNyBAQCBzdGF0aWMgaW5saW5lIGludCBnZXRfc3lzY3RsX21heF9tYXBfY291bnQodm9pZClcbiBib29sIG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MsXG4gXHRcdCAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbiBcbisvKlxuKyAqIEVuc3VyZSBAbW0gaXMgb24gdGhlIGluaXRfbW0ubW1saXN0IHNvIHN3YXBvZmYgY2FuIGZpbmQgaXQuXG4rICovXG4rc3RhdGljIGlubGluZSB2b2lkIG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbit7XG4rXHRpZiAobGlzdF9lbXB0eShcdTAwMjZtbS1cdTAwM2VtbWxpc3QpKSB7XG4rXHRcdHNwaW5fbG9jayhcdTAwMjZtbWxpc3RfbG9jayk7XG4rXHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZW1tbGlzdCkpXG4rXHRcdFx0bGlzdF9hZGQoXHUwMDI2bW0tXHUwMDNlbW1saXN0LCBcdTAwMjZpbml0X21tLm1tbGlzdCk7XG4rXHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbitcdH1cbit9XG4rXG4gI2VuZGlmXHQvKiBfX01NX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBhM2ZjYWY4Y2ZlOGY4Yi4uNjYzN2M1YjEzYzliYWMgMTAwNjQ0XG4tLS0gYS9tbS9tZW1vcnkuY1xuKysrIGIvbW0vbWVtb3J5LmNcbkBAIC05NTMsMTQgKzk1Myw3IEBAIGNvcHlfbm9ucHJlc2VudF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4gXHRcdGlmIChzd2FwX2R1cF9lbnRyeV9kaXJlY3QoZW50cnkpIFx1MDAzYyAwKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuLVx0XHQvKiBtYWtlIHN1cmUgZHN0X21tIGlzIG9uIHN3YXBvZmYncyBtbWxpc3QuICovXG4tXHRcdGlmICh1bmxpa2VseShsaXN0X2VtcHR5KFx1MDAyNmRzdF9tbS1cdTAwM2VtbWxpc3QpKSkge1xuLVx0XHRcdHNwaW5fbG9jayhcdTAwMjZtbWxpc3RfbG9jayk7XG4tXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2ZHN0X21tLVx1MDAzZW1tbGlzdCkpXG4tXHRcdFx0XHRsaXN0X2FkZChcdTAwMjZkc3RfbW0tXHUwMDNlbW1saXN0LFxuLVx0XHRcdFx0XHRcdFx1MDAyNnNyY19tbS1cdTAwM2VtbWxpc3QpO1xuLVx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbi1cdFx0fVxuK1x0XHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMoZHN0X21tKTtcbiBcdFx0LyogTWFyayB0aGUgc3dhcCBlbnRyeSBhcyBzaGFyZWQuICovXG4gXHRcdGlmIChwdGVfc3dwX2V4Y2x1c2l2ZShvcmlnX3B0ZSkpIHtcbiBcdFx0XHRwdGUgPSBwdGVfc3dwX2NsZWFyX2V4Y2x1c2l2ZShvcmlnX3B0ZSk7XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCA0OWUxMGZlZWIwOTRmMC4uYzQ4ZGM1MTI3ZTZhYTkgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbisrKyBiL21tL21pZ3JhdGUuY1xuQEAgLTM2Miw3ICszNjIsNyBAQCBzdGF0aWMgYm9vbCByZW1vdmVfbWlncmF0aW9uX3B0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdGlkeCA9IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgcHZtdy5hZGRyZXNzKSAtIHB2bXcucGdvZmY7XG4gXHRcdG5ldyA9IGZvbGlvX3BhZ2UoZm9saW8sIGlkeCk7XG4gXG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIFx0XHQvKiBQTUQtbWFwcGVkIFRIUCBtaWdyYXRpb24gZW50cnkgKi9cbiBcdFx0aWYgKCFwdm13LnB0ZSkge1xuIFx0XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2h1Z2V0bGIoZm9saW8pIHx8XG5AQCAtNTQ1LDcgKzU0NSw3IEBAIHZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwXG4gfVxuICNlbmRpZlxuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiB2b2lkIHBtZF9taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcG1kX3QgKnBtZClcbiB7XG4gXHRzcGlubG9ja190ICpwdGw7XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZV9kZXZpY2UuYyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbmluZGV4IGFlMzkxNzNkNmEwZThhLi4yZjhiNjQ2MzAyYzI1MSAxMDA2NDRcbi0tLSBhL21tL21pZ3JhdGVfZGV2aWNlLmNcbisrKyBiL21tL21pZ3JhdGVfZGV2aWNlLmNcbkBAIC0xNjYsMTEgKzE2NiwxNCBAQCBzdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHR9IGVsc2UgaWYgKCFwbWRfcHJlc2VudCgqcG1kcCkpIHtcbiBcdFx0Y29uc3Qgc29mdGxlYWZfdCBlbnRyeSA9IHNvZnRsZWFmX2Zyb21fcG1kKCpwbWRwKTtcbiBcbi1cdFx0Zm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XG4tXG4gXHRcdGlmICghc29mdGxlYWZfaXNfZGV2aWNlX3ByaXZhdGUoZW50cnkpIHx8XG4tXHRcdFx0IShtaWdyYXRlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSUdSQVRFX1ZNQV9TRUxFQ1RfREVWSUNFX1BSSVZBVEUpIHx8XG4tXHRcdFx0KGZvbGlvLVx1MDAzZXBnbWFwLVx1MDAzZW93bmVyICE9IG1pZ3JhdGUtXHUwMDNlcGdtYXBfb3duZXIpKSB7XG4rXHRcdCAgICAhKG1pZ3JhdGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JR1JBVEVfVk1BX1NFTEVDVF9ERVZJQ0VfUFJJVkFURSkpIHtcbitcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuK1x0XHRcdHJldHVybiBtaWdyYXRlX3ZtYV9jb2xsZWN0X3NraXAoc3RhcnQsIGVuZCwgd2Fsayk7XG4rXHRcdH1cbitcbitcdFx0Zm9saW8gPSBzb2Z0bGVhZl90b19mb2xpbyhlbnRyeSk7XG4rXHRcdGlmIChmb2xpby1cdTAwM2VwZ21hcC1cdTAwM2Vvd25lciAhPSBtaWdyYXRlLVx1MDAzZXBnbWFwX293bmVyKSB7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiBcdFx0XHRyZXR1cm4gbWlncmF0ZV92bWFfY29sbGVjdF9za2lwKHN0YXJ0LCBlbmQsIHdhbGspO1xuIFx0XHR9XG5AQCAtNzY4LDcgKzc3MSw3IEBAIGludCBtaWdyYXRlX3ZtYV9zZXR1cChzdHJ1Y3QgbWlncmF0ZV92bWEgKmFyZ3MpXG4gfVxuIEVYUE9SVF9TWU1CT0wobWlncmF0ZV92bWFfc2V0dXApO1xuIFxuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiAvKipcbiAgKiBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZTogSW5zZXJ0IGEgaHVnZSBmb2xpbyBpbnRvIEBtaWdyYXRlLVx1MDAzZXZtYS1cdTAwM2V2bV9tbVxuICAqIGF0IEBhZGRyLiBmb2xpbyBpcyBhbHJlYWR5IGFsbG9jYXRlZCBhcyBhIHBhcnQgb2YgdGhlIG1pZ3JhdGlvbiBwcm9jZXNzIHdpdGhcbkBAIC04MzUsNyArODM4LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4gXHRcdGVsc2VcbiBcdFx0XHRzd3BfZW50cnkgPSBtYWtlX3JlYWRhYmxlX2RldmljZV9wcml2YXRlX2VudHJ5KFxuIFx0XHRcdFx0XHRcdHBhZ2VfdG9fcGZuKHBhZ2UpKTtcbi1cdFx0ZW50cnkgPSBzd3BfZW50cnlfdG9fcG1kKHN3cF9lbnRyeSk7XG4rXHRcdGVudHJ5ID0gc29mdGxlYWZfdG9fcG1kKHN3cF9lbnRyeSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgIWZvbGlvX2lzX2RldmljZV9jb2hlcmVudChmb2xpbykpIHtcbkBAIC05MjMsNyArOTI2LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4gXHRcdG1pZ3JhdGUtXHUwMDNlc3JjW2kraWR4XSA9IG1pZ3JhdGVfcGZuKHBmbiArIGkpIHwgZmxhZ3M7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbi0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT04gKi9cbisjZWxzZSAvKiAhQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXG4gc3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdFx0XHRcdCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbkBAIC05NDQsNyArOTQ3LDcgQEAgc3RhdGljIGludCBtaWdyYXRlX3ZtYV9zcGxpdF91bm1hcHBlZF9mb2xpbyhzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlncmF0ZV92bWFfbnJfcGFnZXModW5zaWduZWQgbG9uZyAqc3JjKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnIgPSAxO1xuLSNpZmRlZiBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZcbiBcdGlmICgqc3JjIFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORClcbiBcdFx0bnIgPSBIUEFHRV9QTURfTlI7XG4gI2Vsc2VcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDFjNzdkNWRjMDZlOWZhLi4wZmI3YTFiODJjZjNjMiAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMjMwNCwxMiArMjMwNCw3IEBAIHN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdm13LnB0ZSwgcHRldmFsKTtcbiBcdFx0XHRcdGdvdG8gd2Fsa19hYm9ydDtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bW0tXHUwMDNlbW1saXN0KSkge1xuLVx0XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm1tbGlzdF9sb2NrKTtcbi1cdFx0XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1tLVx1MDAzZW1tbGlzdCkpXG4tXHRcdFx0XHRcdGxpc3RfYWRkKFx1MDAyNm1tLVx1MDAzZW1tbGlzdCwgXHUwMDI2aW5pdF9tbS5tbWxpc3QpO1xuLVx0XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2bW1saXN0X2xvY2spO1xuLVx0XHRcdH1cbitcdFx0XHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xuIFx0XHRcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xuIFx0XHRcdGluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XG4gXHRcdFx0c3dwX3B0ZSA9IHN3cF9lbnRyeV90b19wdGUoZW50cnkpO1xuQEAgLTI0NzcsNyArMjQ3Miw3IEBAIHN0YXRpYyBib29sIHRyeV90b19taWdyYXRlX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX3Jlc3RhcnQoXHUwMDI2cHZtdyk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4tI2lmZGVmIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxuIFx0XHRcdHBtZHZhbCA9IHBtZHBfZ2V0KHB2bXcucG1kKTtcbiBcdFx0XHRpZiAobGlrZWx5KHBtZF9wcmVzZW50KHBtZHZhbCkpKVxuIFx0XHRcdFx0cGZuID0gcG1kX3BmbihwbWR2YWwpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTE6MjcuMTM0NDQyMzE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAwNjcyNDUyNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBTb2Z0bGVhZiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZyBhbmQgYnVnLWZpeGluZyBlZmZvcnQgcmVsYXRlZCB0byBzb2Z0bGVhZiBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgbmV3IGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgIGZlYXR1cmUuIFRoZSBwYXRjaCByZW5hbWVzIGBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTmAsIHdoaWNoIGluZGljYXRlcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBJIHNlZSB0aGUgaW50cm9kdWN0aW9uIG9mIGZ1bmN0aW9ucyBsaWtlIGBzb2Z0bGVhZl90b19wbWRgLCBgc29mdGxlYWZfZnJvbV9wbWRgLCBgc29mdGxlYWZfaGFzX3BmbmAsIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAsIGFuZCBgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzYC4gTGV0J3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zLlxuXG5GaXJzdCwgSSBleGFtaW5lZCB0aGUgY29kZSBjaGFuZ2VzLiBUaGUgYWRqdXN0bWVudHMgaW4gYGZzL3Byb2MvdGFza19tbXUuY2AgYW5kIGBtbS9taWdyYXRlX2RldmljZS5jYCBhcmUgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGltcHJvdmVtZW50cy4gVGhleSdyZSBhZGRpbmcgY2hlY2tzIChgc29mdGxlYWZfaGFzX3BmbmAgYW5kIGBzb2Z0bGVhZl9pc19kZXZpY2VfcHJpdmF0ZWAgcmVzcGVjdGl2ZWx5KSBiZWZvcmUgY2FsbGluZyBgc29mdGxlYWZfdG9fcGFnZWAgYW5kIGBzb2Z0bGVhZl90b19mb2xpb2AuIFRoaXMgaXMgY3J1Y2lhbDsgaXQgcHJldmVudHMgcG90ZW50aWFsIGNyYXNoZXMgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMgYnkgaGFuZGxpbmcgY2FzZXMgd2hlcmUgdGhlc2UgY29udmVyc2lvbnMgbWlnaHQgYmUgaW52YWxpZCwgc3VjaCBhcyB3aGVuIGRlYWxpbmcgd2l0aCBzd2FwIGVudHJpZXMuIEdvb2QgY2F0Y2guXG5cbkhvd2V2ZXIsIHRoZSBjaGFuZ2VzIGluIGBtbS9odWdlX21lbW9yeS5jYCByYWlzZSBhIGNvbmNlcm4uIFRoZSBjb2RlIG5vdyByZXRyaWV2ZXMgdGhlIGBmb2xpb2AgaW5zaWRlIGFuIGBpZmAgc3RhdGVtZW50LCBhZnRlciBjaGVja2luZyBgc29mdGxlYWZfaXNfbWlncmF0aW9uX3dyaXRlYC4gUHJldmlvdXNseSwgYGZvbGlvYCB3YXMgb2J0YWluZWQgYmVmb3JlIHRoaXMgY2hlY2suIFRoYXTigJlzIGEgc3VidGxlIGJ1dCBpbXBvcnRhbnQgY2hhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY29kZSBtb3ZlbWVudC4gSXQgc2VlbXMgbGlrZWx5IHRoYXQgdGhlIGNvZGUgbm93IGhhcyBhIG5ldyBicmFuY2ggdG8gcHJldmVudCBhbiBlcnJvci5cblxuT3ZlcmFsbCwgdGhlc2UgY2hhbmdlcyBhcmUgYWRkcmVzc2luZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBUaGUgcGF0Y2ggaXMgY2xlYXJseSBhdHRlbXB0aW5nIHRvIGZpeCBzY2VuYXJpb3Mgd2hlcmUgYHNvZnRsZWFmX3RvX2ZvbGlvYCBvciBgc29mdGxlYWZfdG9fcGFnZWAgY291bGQgYmUgaW52b2tlZCBvbiBhbiBpbmFwcHJvcHJpYXRlIGVudHJ5LiBUaGF0IG1ha2VzIG1lIGZlZWwgY29uZmlkZW50IGFib3V0IHRoZSBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZXNzZW50aWFsIHNpbmNlIGBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgZGVwZW5kcyBvbiBpdC4gRm9yIHRoZSBtb2RpZmljYXRpb25zIGluIGBtbS9taWdyYXRlX2RldmljZS5jYCwgaXQgbG9va3MgbGlrZSBgQ09ORklHX0RFVklDRV9QUklWQVRFYCBvciBwZXJoYXBzIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgbWlnaHQgYmUgcmVxdWlyZWQuIEkgc2hvdWxkIGludmVzdGlnYXRlIHRoYXQgZGVwZW5kZW5jeSBtb3JlIHRob3JvdWdobHkgdG8gY29uZmlybSB0aGUgY29tcGxldGUgc2V0IG9mIG5lY2Vzc2FyeSBjb25maWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAwNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjExOjM3LjIwMTY5MjQxOFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkxMjczNjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaWdyYXRlX2RldmljZS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTk5PW9iai0kKENPTkZJR19OVU1BKSArPSBtZW1vcnktdGllcnMub1xcbm1tL01ha2VmaWxlOjEwMDpvYmotJChDT05GSUdfREVWSUNFX01JR1JBVElPTikgKz0gbWlncmF0ZV9kZXZpY2Uub1xcbm1tL01ha2VmaWxlLTEwMS1vYmotJChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjExOjQ4LjExNDQ0MTg2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjQ4ODM3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHN5c3RlbSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBEZXZpY2UgTWlncmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHNvIEkgc2VlIHRoYXQgYENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OYCBpcyBlc3NlbnRpYWwgZm9yIHRoZSBgbWlncmF0ZV9kZXZpY2UuY2AgbW9kdWxlIHRvIGZ1bmN0aW9uLiBJIGFscmVhZHkga25ldyB0aGF0LCBidXQgaXQncyBnb29kIHRvIGJlIHJlbWluZGVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIHRoZSBzeXN0ZW0uXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBkZXBlbmRlbmNpZXMgb2YgYGZzL3Byb2MvdGFza19tbXUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBtaWdyYXRlX2RldmljZS5jYCBoYXMgYW55IGNvbm5lY3Rpb24gdG8gdGhpcyBhcmVhLCBhcyBJJ20gaW50ZXJlc3RlZCBpbiBob3cgZGV2aWNlIG1pZ3JhdGlvbiBpbnRlcmFjdHMgd2l0aCB0YXNrIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgcHJvY2ZzIGZyYW1ld29yay4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgYW55IHN1cnByaXNlcywgYW5kIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMgdG8gYmUgYXdhcmUgb2YgYmV0d2VlbiBkZXZpY2UgbWlncmF0aW9uIGFuZCB0YXNrIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHN1c3BlY3QgaXQgbWlnaHQgYmUgcmVsZXZhbnQsIGdpdmVuIHRoZSBuYXR1cmUgb2YgZGV2aWNlIG1pZ3JhdGlvbi4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCBgdGFza19tbXUuY2AgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NjEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMTo1MS44NzkzMzI4ODNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2OTgwOTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXNrX21tdS5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvTWFrZWZpbGU9Nj1vYmoteSAgICs9IHByb2Mub1xcbmZzL3Byb2MvTWFrZWZpbGUtNy1cXG5mcy9wcm9jL01ha2VmaWxlOjg6Q0ZMQUdTX3Rhc2tfbW11Lm9cXHQrPSAtV25vLW92ZXJyaWRlLWluaXRcXG5mcy9wcm9jL01ha2VmaWxlLTktcHJvYy15XFx0XFx0XFx0Oj0gbm9tbXUubyB0YXNrX25vbW11Lm9cXG5mcy9wcm9jL01ha2VmaWxlOjEwOnByb2MtJChDT05GSUdfTU1VKVxcdDo9IHRhc2tfbW11Lm9cXG5mcy9wcm9jL01ha2VmaWxlLTExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMTo1Ni41NDkxNTIwOTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTEyOTc4MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkRlcGVuZGVuY2llcyBhbmQgU2NvcGUqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGZsYWfigJRgQ09ORklHX01NVWDigJRhbmQgaXQncyBwaW5naW5nIG15IGJyYWluLiBBaCwgcmlnaHQsIHRoYXQncyBhIHByZXJlcXVpc2l0ZSBmb3IgYHRhc2tfbW11LmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLiBNeSBleHBlcnRpc2Ugc2F5cyBJIHNob3VsZCBjb25maXJtIHRoYXQgdGhpcyBpcyB0cnVlLiBXaGVyZSBkb2VzIHRoaXMgZ2V0IHVzZWQ/IEkgc2hvdWxkIGludmVzdGlnYXRlIGBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXNgLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayB0aGF0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHdpdGhpbiBgbW0vaW50ZXJuYWwuaGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCB3aHkgaXQgbmVjZXNzaXRhdGVzIHRoZSBNTVUgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NjAsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjowMC40NjIxMzQxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzQ1MzE3MzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTE5NTY9Ym9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xOTYxLSAqL1xcbm1tL2ludGVybmFsLmg6MTk2MjpzdGF0aWMgaW5saW5lIHZvaWQgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2ludGVybmFsLmgtMTk2My17XFxuLS1cXG5tbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL21lbW9yeS5jLTk1NS1cXG5tbS9tZW1vcnkuYzo5NTY6XFx0XFx0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKGRzdF9tbSk7XFxubW0vbWVtb3J5LmMtOTU3LVxcdFxcdC8qIE1hcmsgdGhlIHN3YXAgZW50cnkgYXMgc2hhcmVkLiAqL1xcbi0tXFxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMzA2LVxcdFxcdFxcdH1cXG5tbS9ybWFwLmM6MjMwNzpcXHRcXHRcXHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xcbm1tL3JtYXAuYy0yMzA4LVxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjowMy4yMDc0NjE1NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTAyNjMxNDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgQ292ZXJhZ2UqKlxuXG5Pa2F5LCB0aGUgcGF0Y2ggaXRzZWxmIHNlZW1zIHNvbGlkLCBpdCdzIGRlZmluaXRlbHkgZnVuY3Rpb25hbC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgaWRlbnRpZmllZCB0aGUgcmlnaHQgYXJlYXMgZm9yIGl0cyBmb2N1cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGUgbW9zdCByZWxldmFudCBzeW1ib2xzIHRvIGFuYWx5emUuXG5cbkknbSB0aGlua2luZyB0aGUga2V5IHN5bWJvbHMgdG8ga2VlcCBhbiBleWUgb24gYXJlOiBgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwYCDigJMgdGhhdCdzIGNvbWluZyBmcm9tIGBmcy9wcm9jL3Rhc2tfbW11LmNgLCB3aGljaCBpcyBsb2dpY2FsIGdpdmVuIHRoZSBjb250ZXh0LiBUaGVuIHRoZXJlJ3MgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGZyb20gYG1tL21pZ3JhdGVfZGV2aWNlLmNgLCBpbXBvcnRhbnQgZm9yIG1lbW9yeSBtaWdyYXRpb24sIGFuZCBgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kYCBmcm9tIGBtbS9odWdlX21lbW9yeS5jYC0tIGNydWNpYWwgZm9yIGhhbmRsaW5nIGh1Z2UgcGFnZXMuIFRoZW4gYGNvcHlfbm9ucHJlc2VudF9wdGVgIGZyb20gYG1tL21lbW9yeS5jYCBzZWVtcyBsaWtlIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSwgZGVhbGluZyB3aXRoIHBhZ2UgdGFibGUgZW50cmllcy4gRmluYWxseSwgYHRyeV90b191bm1hcF9vbmVgIGZyb20gYG1tL3JtYXAuY2AgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IGluIGFueSB1bm1hcHBpbmcgc2NlbmFyaW8uXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYHBhZ2VtYXBfcG1kX3JhbmdlX3RocGAuIEknbGwgdmVyaWZ5IGlmIGl0J3MgcmVhY2hhYmxlIGFuZCBmdWxseSB1bmRlcnN0b29kIGJ5IHRoZSBwYXRjaC4gVGhhdCB3aWxsIGJlIG15IHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDM4MiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjowOS4xMTAwOTcxNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc2MTc2NTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlbWFwX3BtZF9yYW5nZV90aHBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy90YXNrX21tdS5jPTIwMjE9c3RhdGljIHBhZ2VtYXBfZW50cnlfdCBwdGVfdG9fcGFnZW1hcF9lbnRyeShzdHJ1Y3QgcGFnZW1hcHJlYWQgKnBtLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwODctI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmZzL3Byb2MvdGFza19tbXUuYzoyMDg4OnN0YXRpYyBpbnQgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwODktXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTIxNjY9c3RhdGljIGludCBwYWdlbWFwX3BtZF9yYW5nZShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yMTc3LVxcdGlmIChwdGwpIHtcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjE3ODpcXHRcXHRlcnIgPSBwYWdlbWFwX3BtZF9yYW5nZV90aHAocG1kcCwgYWRkciwgZW5kLCB2bWEsIHBtKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjE3OS1cXHRcXHRzcGluX3VubG9jayhwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjoxMi44NzE4NzQyOTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTg4MDM1NzI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipSZWFjaGluZyB0aGUgVGFyZ2V0KipcblxuQWxyaWdodCwgeWVwLCBsb29rcyBsaWtlIHdlJ3JlIGluIGEgcG9zaXRpb24gdG8gcHJvY2VlZC4gVGhpcyBpcyBsb29raW5nIHByb21pc2luZy5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgb3VyIGFzc3VtcHRpb25zIGJ5IGV4YW1pbmluZyB0aGUgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGZ1bmN0aW9uLiBXZSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiB0aGlzIGlzIHRoZSBjb3JyZWN0IGVudHJ5IHBvaW50IHRvIGFzc2VzcyBpdHMgcm9sZSBpbiB0aGlzIGNvbnRleHQgYmVmb3JlIGNvbW1pdHRpbmcgZnVydGhlciByZXNvdXJjZXMuIFRoZSBhcmNoaXRlY3R1cmUgbmVlZHMgYSBzYW5pdHkgY2hlY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTM2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTI6MTguNzUyMjM2MDc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQyMzU1NjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg9MTMzND1zdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTM0My1cXHQgKiAgIGVuY291bnRlciBub24tcHJlc2VudCBwbWRzLlxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjEzNDQ6XFx0ICogLSBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKCkgY291bGQgY2FsbHMgdGhpcyBkdXJpbmcgbWlncmF0aW9uXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTM0NS1cXHQgKiAgIG9mIGRldmljZS1wcml2YXRlIHBtZCBlbnRyaWVzLlxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz04Mj1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEyMy1cXG5tbS9taWdyYXRlX2RldmljZS5jOjEyNDovKiogbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZCAtIGNvbGxlY3QgVEhQIHBhZ2VzIHdpdGhvdXQgc3BsaXR0aW5nIHRoZVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTI1LSAqIGZvbGlvIGZvciBkZXZpY2UgcHJpdmF0ZSBwYWdlcy5cXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMTM1LSAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6MTM2OnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZChwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG5tbS9taWdyYXRlX2RldmljZS5jLTEzNy1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGssXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTI0ND1zdGF0aWMgaW50IG1pZ3JhdGVfdm1hX2NvbGxlY3RfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yNTktXFx0aWYgKHBtZF90cmFuc19odWdlKCpwbWRwKSB8fCAhcG1kX3ByZXNlbnQoKnBtZHApKSB7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyNjA6XFx0XFx0aW50IHJldCA9IG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWQocG1kcCwgc3RhcnQsIGVuZCwgd2FsaywgZmF1bHRfZm9saW8pO1xcbm1tL21pZ3JhdGVfZGV2aWNlLmMtMjYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjoyMy41OTQ2MDcyMDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxOTE0MTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzLCBkZWxpdmVyZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBSZWFjaGFiaWxpdHkgYW5kIGEgU3BlY2lmaWMgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCBzb21ldGhpbmcgaXMgYWNoaWV2YWJsZSwgcmVhY2hhYmxlLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgc3BlY2lmaWMgYXJlYSBvZiBpbnRlcmVzdC4gSSdtIGdvaW5nIHRvIGRlbHZlIGludG8gdGhlIGBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWRgIGZ1bmN0aW9uLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc5MCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEyOjI2LjgxMzc1Mzc1MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2MjExNjA2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0yNTA0PWJvb2wgbW92ZV9odWdlX3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU1NC1cXG5tbS9odWdlX21lbW9yeS5jOjI1NTU6c3RhdGljIHZvaWQgY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjU1Ni1cXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWQsIGJvb2wgdWZmZF93cCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjYwMT1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yNjIyLVxcdGlmICh0aHBfbWlncmF0aW9uX3N1cHBvcnRlZCgpIFxcdTAwMjZcXHUwMDI2IHBtZF9pc192YWxpZF9zb2Z0bGVhZigqcG1kKSkge1xcbm1tL2h1Z2VfbWVtb3J5LmM6MjYyMzpcXHRcXHRjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWQobW0sIGFkZHIsIHBtZCwgdWZmZF93cCxcXG5tbS9odWdlX21lbW9yeS5jLTI2MjQtXFx0XFx0XFx0XFx0XFx0ICAgIHVmZmRfd3BfcmVzb2x2ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEyOjMwLjg3NTg3OTM2N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI3NjM5Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipSZWFjaGluZyBmb3IgYGNvcHlfbm9ucHJlc2VudF9wdGVgKipcblxuT2theSwgeWVzLCB0aGF0IHNvdW5kcyBsaWtlIGEgdmlhYmxlIHBhdGggZm9yd2FyZC4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyBhY2hpZXZhYmxlLiBOb3csIHdoZXJlIGRvIEkgc3RhcnQ/IExldCdzIHpvb20gaW4gYW5kIGV4YW1pbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBjb3B5X25vbnByZXNlbnRfcHRlYC4gSXQncyBsaWtlbHkgdGhhdCBmdW5jdGlvbiBob2xkcyB0aGUga2V5IHRvIHRoZSBzb2x1dGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG1lY2hhbmljcy4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxOTUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjozNC42MDM1MjUzMzVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjU0MDgwMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29weV9ub25wcmVzZW50X3B0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz05NDA9c3RhdGljIHVuc2lnbmVkIGxvbmdcXG5tbS9tZW1vcnkuYzo5NDE6Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG5tbS9tZW1vcnkuYy05NDItXFx0XFx0cHRlX3QgKmRzdF9wdGUsIHB0ZV90ICpzcmNfcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmRzdF92bWEsXFxuLS1cXG5tbS9tZW1vcnkuYz0xMjE3PWNvcHlfcHRlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZHN0X3ZtYSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpzcmNfdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMTI4OC1cXHRcXHRpZiAodW5saWtlbHkoIXB0ZV9wcmVzZW50KHB0ZW50KSkpIHtcXG5tbS9tZW1vcnkuYzoxMjg5OlxcdFxcdFxcdHJldCA9IGNvcHlfbm9ucHJlc2VudF9wdGUoZHN0X21tLCBzcmNfbW0sXFxubW0vbWVtb3J5LmMtMTI5MC1cXHRcXHRcXHRcXHRcXHRcXHQgIGRzdF9wdGUsIHNyY19wdGUsXFxuLS1cXG5tbS9tcHJvdGVjdC5jPTIxND1zdGF0aWMgbG9uZyBjaGFuZ2Vfc29mdGxlYWZfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbXByb3RlY3QuYy0yMzgtXFx0XFx0ICogV2UgZG8gbm90IHByZXNlcnZlIHNvZnQtZGlydGluZXNzLiBTZWVcXG5tbS9tcHJvdGVjdC5jOjIzOTpcXHRcXHQgKiBjb3B5X25vbnByZXNlbnRfcHRlKCkgZm9yIGV4cGxhbmF0aW9uLlxcbm1tL21wcm90ZWN0LmMtMjQwLVxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjozOC42Mjg5NDM5MjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA1NjkwNTkxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipSZWFjaGluZyBhbiBFbmRwb2ludCoqXG5cblllcywgdGhlIG9iamVjdGl2ZSBpcyB3aXRoaW4gZ3Jhc3AuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIHBhdGggaXMgdmFsaWQgYW5kIHRoYXQgdGhlIHRhcmdldCBjYW4gYmUgcmVhY2hlZC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYHRyeV90b191bm1hcF9vbmVgLiBUaGlzIGZ1bmN0aW9uIGlzIHBpdm90YWwgaW4gaGFuZGxpbmcgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGNvbmZsaWN0cywgc28gdW5kZXJzdGFuZGluZyBpdHMgYmVoYXZpb3IgaXMgY3J1Y2lhbC4gSSB3YW50IHRvIGRlbHZlIGludG8gdGhlIHNwZWNpZmljcyBvZiBob3cgaXQgb3BlcmF0ZXMgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4gSXQncyB0aW1lIHRvIGFuYWx5emUgaXRzIHJvbGUgaW4gZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB1bnN1Y2Nlc3NmdWxseSBjb21wbGV0aW5nIHRoZSBvcGVyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjU2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTI6NDIuNjg1ODU2MDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzQ4ODE5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3VubWFwX29uZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0PTQ0MD1UaGVyZSBpcyBhbHNvIGEgZmlsZS1zeXN0ZW0gc3BlY2lmaWMgbG9jayBvcmRlcmluZyBjb21tZW50IGxvY2F0ZWQgYXQgdGhlIHRvcCBvZlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdC00NzYtICAtXFx1MDAzZXBhZ2VfdGFibGVfbG9jayBvciBwdGVfbG9ja1xcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3Q6NDc3OiAgICAtXFx1MDAzZXN3YXBfbG9jayAgICAgICAgICAgICAgICAgICAgICAgICAodHJ5X3RvX3VubWFwX29uZSlcXG5Eb2N1bWVudGF0aW9uL21tL3Byb2Nlc3NfYWRkcnMucnN0OjQ3ODogICAgLVxcdTAwM2Vwcml2YXRlX2xvY2sgICAgICAgICAgICAgICAgICAgICAgKHRyeV90b191bm1hcF9vbmUpXFxuRG9jdW1lbnRhdGlvbi9tbS9wcm9jZXNzX2FkZHJzLnJzdDo0Nzk6ICAgIC1cXHUwMDNlaV9wYWdlcyBsb2NrICAgICAgICAgICAgICAgICAgICAgICh0cnlfdG9fdW5tYXBfb25lKVxcbkRvY3VtZW50YXRpb24vbW0vcHJvY2Vzc19hZGRycy5yc3QtNDgwLSAgICAtXFx1MDAzZWxydXZlYy1cXHUwMDNlbHJ1X2xvY2sgICAgICAgICAgICAgICAgICAoZm9sbG93X3BhZ2VfbWFzay1cXHUwMDNlbWFya19wYWdlX2FjY2Vzc2VkKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS91bmV2aWN0YWJsZS1scnUucnN0PTU1NT1ybWFwJ3MgZm9saW9fcmVmZXJlbmNlZF9vbmUoKSwgY2FsbGVkIHZpYSB2bXNjYW4ncyBzaHJpbmtfYWN0aXZlX2xpc3QoKSBvclxcbkRvY3VtZW50YXRpb24vbW0vdW5ldmljdGFibGUtbHJ1LnJzdDo1NTY6c2hyaW5rX2ZvbGlvX2xpc3QoKSwgYW5kIHJtYXAncyB0cnlfdG9fdW5tYXBfb25lKCkgY2FsbGVkIHZpYSBzaHJpbmtfZm9saW9fbGlzdCgpLFxcbkRvY3VtZW50YXRpb24vbW0vdW5ldmljdGFibGUtbHJ1LnJzdC01NTctY2hlY2sgZm9yICgzKSBwYWdlcyBzdGlsbCBtYXBwZWQgaW50byBWTV9MT0NLRUQgVk1BcywgYW5kIGNhbGwgbWxvY2tfdm1hX2ZvbGlvKClcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11Lmg9MTk9dHlwZWRlZiBzdHJ1Y3Qge1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaC0zMy0gKiByb2xsb3ZlciBldmVudCAoc2VlIG5ld19jb250ZXh0KCkgYW5kIGZsdXNoX2NvbnRleHQoKSkuIEluIHRoaXMgY2FzZSxcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oOjM0OiAqIGEgY29uY3VycmVudCBUTEJJIChlLmcuIHZpYSB0cnlfdG9fdW5tYXBfb25lKCkgYW5kIHB0ZXBfY2xlYXJfZmx1c2goKSlcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oLTM1LSAqIG1heSB1c2UgYSBzdGFsZSBBU0lELiBUaGlzIGlzIGZpbmUgaW4gcHJpbmNpcGxlIGFzIHRoZSBuZXcgQVNJRCBpc1xcbi0tXFxuZnMvbmlsZnMyL2lub2RlLmM9MTc3PXN0YXRpYyBib29sIG5pbGZzX2RpcnR5X2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbmlsZnMyL2lub2RlLmMtMTg1LVxcdC8qXFxuZnMvbmlsZnMyL2lub2RlLmM6MTg2OlxcdCAqIFRoZSBwYWdlIG1heSBub3QgYmUgbG9ja2VkLCBlZyBpZiBjYWxsZWQgZnJvbSB0cnlfdG9fdW5tYXBfb25lKClcXG5mcy9uaWxmczIvaW5vZGUuYy0xODctXFx0ICovXFxuLS1cXG5tbS9maWxlbWFwLmMtMTE0LSAqICAtXFx1MDAzZXBhZ2VfdGFibGVfbG9jayBvciBwdGVfbG9ja1xcbm1tL2ZpbGVtYXAuYzoxMTU6ICogICAgLVxcdTAwM2Vzd2FwX2xvY2tcXHRcXHQodHJ5X3RvX3VubWFwX29uZSlcXG5tbS9maWxlbWFwLmM6MTE2OiAqICAgIC1cXHUwMDNlcHJpdmF0ZV9sb2NrXFx0XFx0KHRyeV90b191bm1hcF9vbmUpXFxubW0vZmlsZW1hcC5jOjExNzogKiAgICAtXFx1MDAzZWlfcGFnZXMgbG9ja1xcdFxcdCh0cnlfdG9fdW5tYXBfb25lKVxcbm1tL2ZpbGVtYXAuYy0xMTgtICogICAgLVxcdTAwM2VscnV2ZWMtXFx1MDAzZWxydV9sb2NrXFx0KGZvbGxvd19wYWdlX21hc2stXFx1MDAzZW1hcmtfcGFnZV9hY2Nlc3NlZClcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmM9MjM4NT1pbnQgbWVtb3J5X2ZhaWx1cmUodW5zaWduZWQgbG9uZyBwZm4sIGludCBmbGFncylcXG4tLVxcbm1tL21lbW9yeS1mYWlsdXJlLmMtMjU3MC1cXHQgKiBleGFtcGxlIGlzIGFuIG1sb2NrZWQgcGFnZSwgd2hlcmUgUEdfbWxvY2tlZCBpcyBjbGVhcmVkIGJ5XFxubW0vbWVtb3J5LWZhaWx1cmUuYzoyNTcxOlxcdCAqIGZvbGlvX3JlbW92ZV9ybWFwXyooKSBpbiB0cnlfdG9fdW5tYXBfb25lKCkuIFNvIHRvIGRldGVybWluZSBwYWdlXFxubW0vbWVtb3J5LWZhaWx1cmUuYy0yNTcyLVxcdCAqIHN0YXR1cyBjb3JyZWN0bHksIHdlIHNhdmUgYSBjb3B5IG9mIHRoZSBwYWdlIGZsYWdzIGF0IHRoaXMgdGltZS5cXG4tLVxcbm1tL21sb2NrLmM9NDY3PXN0YXRpYyBpbnQgbWxvY2tfZml4dXAoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21sb2NrLmMtNTAzLVxcdCAqIHZtX2ZsYWdzIGlzIHByb3RlY3RlZCBieSB0aGUgbW1hcF9sb2NrIGhlbGQgaW4gd3JpdGUgbW9kZS5cXG5tbS9tbG9jay5jOjUwNDpcXHQgKiBJdCdzIG9rYXkgaWYgdHJ5X3RvX3VubWFwX29uZSB1bm1hcHMgYSBwYWdlIGp1c3QgYWZ0ZXIgd2VcXG5tbS9tbG9jay5jLTUwNS1cXHQgKiBzZXQgVk1fTE9DS0VELCBwb3B1bGF0ZV92bWFfcGFnZV9yYW5nZSB3aWxsIGJyaW5nIGl0IGJhY2suXFxuLS1cXG5tbS9ybWFwLmM9MTk0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb191bm1hcF9wdGVfYmF0Y2goc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy0xOTgzLSAqL1xcbm1tL3JtYXAuYzoxOTg0OnN0YXRpYyBib29sIHRyeV90b191bm1hcF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vcm1hcC5jLTE5ODUtXFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHZvaWQgKmFyZylcXG4tLVxcbm1tL3JtYXAuYz0yMzg5PXZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqZm9saW8sIGVudW0gdHR1X2ZsYWdzIGZsYWdzKVxcbi0tXFxubW0vcm1hcC5jLTIzOTEtXFx0c3RydWN0IHJtYXBfd2Fsa19jb250cm9sIHJ3YyA9IHtcXG5tbS9ybWFwLmM6MjM5MjpcXHRcXHQucm1hcF9vbmUgPSB0cnlfdG9fdW5tYXBfb25lLFxcbm1tL3JtYXAuYy0yMzkzLVxcdFxcdC5hcmcgPSAodm9pZCAqKWZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjo0Ni43NjA3NTE4MjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzMDYxOTE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25maWd1cmF0aW9uIFZlcmlmaWNhdGlvbiBmb3IgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFuZCBEZXZpY2UgTWlncmF0aW9uKipcblxuT2theSwgc28gdGhlIGdvYWwgaXMgZGVmaW5pdGVseSBhY2hpZXZhYmxlLiBOb3csIGxldCdzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5LiBGaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCDigJMgdGhhdCdzIGNydWNpYWwuIEkgYWxzbyBrbm93IGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgaXMgZXNzZW50aWFsIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gYWZ0ZXIsIGFuZCBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIE9mIGNvdXJzZSwgYENPTkZJR19NTVVgIGlzIGdlbmVyYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBJJ2xsIG1ha2UgYSBtZW50YWwgbm90ZSB0byBjb25maXJtIGl0J3MgcHJlc2VudC4gQW5kLCBnaXZlbiB0aGF0IG1pZ3JhdGlvbiBpcyBjZW50cmFsIHRvIHRoZSBwcm9jZXNzLCBJIHNlZSBJJ2xsIG5lZWQgYENPTkZJR19NSUdSQVRJT05gIGZvciBgbW0vbWlncmF0ZS5jYC4gSSBzaG91bGQgcHJvYmFibHkgY3Jvc3MtcmVmZXJlbmNlIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAgaW4gYG1tL0tjb25maWdgIGp1c3QgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCByZWxhdGlvbnNoaXBzIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGJlZm9yZSBJIG1vdmUgZm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNTcsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMjo1MS4xOTEzNzUyNDVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2ODkyMTUwNjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9NSUdSQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02OTY9Y29uZmlnIE1JR1JBVElPTlxcbi0tXFxubW0vS2NvbmZpZy02OTktXFxubW0vS2NvbmZpZzo3MDA6Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG5tbS9LY29uZmlnLTcwMS1cXHRkZWZfYm9vbCBNSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgWk9ORV9ERVZJQ0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTI6NTYuODgwNjA1NjczWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NjUxOTkyNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIHpvbmUgZGV2aWNlcyBhbmQgbWlncmF0aW9uIOKAkyB0aG9zZSBhcmUgZGVmaW5pdGVseSBrZXksIHNvIGBDT05GSUdfWk9ORV9ERVZJQ0VgIGFuZCBgQ09ORklHX01JR1JBVElPTmAgYXJlIGVzc2VudGlhbCBwcmVyZXF1aXNpdGVzLiBOb3csIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdHJhbnNwYXJlbnQgaHVnZXBhZ2VzIHdpbGwgYmUgaW1wYWN0aW5nIHRoaXMgc2V0dXAuIEdpdmVuIHRoZSBjb250ZXh0LCBpdCdzIHJlYXNvbmFibGUgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLCBhcyB0aGUgVHJhbnNwYXJlbnQgSHVnZXBhZ2Ugc2V0dGluZ3MgYXJlIGxvY2F0ZWQgdGhlcmUuIFRoYXQncyB0aGUgbG9naWNhbCBuZXh0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDQ5LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTM6MDAuODQ1ODA5MzE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTcxNjk5ODA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTg0Mz1jb25maWcgTU1fSURcXG4tLVxcbm1tL0tjb25maWctODQ1LVxcbm1tL0tjb25maWc6ODQ2Om1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG5tbS9LY29uZmlnLTg0Ny1cXHRib29sIFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0XFxcIlxcbi0tXFxubW0vS2NvbmZpZz04NjQ9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg2OS1cXG5tbS9LY29uZmlnOjg3MDpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04NzEtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04NzYtXFxubW0vS2NvbmZpZzo4Nzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0VcXG5tbS9LY29uZmlnLTg3OC1cXHRcXHRib29sIFxcXCJtYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04ODUtXFxubW0vS2NvbmZpZzo4ODY6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXFxubW0vS2NvbmZpZy04ODctXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTg5Mz1jaG9pY2VcXG4tLVxcbm1tL0tjb25maWctOTAyLVxcbm1tL0tjb25maWc6OTAzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX05FVkVSXFxubW0vS2NvbmZpZy05MDQtXFx0XFx0Ym9vbCBcXFwibmV2ZXJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkxMi1cXG5tbS9LY29uZmlnOjkxMzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BTFdBWVNcXG5tbS9LY29uZmlnLTkxNC1cXHRcXHRib29sIFxcXCJhbHdheXNcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTkyMC1cXG5tbS9LY29uZmlnOjkyMTpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9XSVRISU5fU0laRVxcbm1tL0tjb25maWctOTIyLVxcdFxcdGJvb2wgXFxcIndpdGhpbl9zaXplXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MjgtXFxubW0vS2NvbmZpZzo5Mjk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQURWSVNFXFxubW0vS2NvbmZpZy05MzAtXFx0XFx0Ym9vbCBcXFwiYWR2aXNlXFxcIlxcbi0tXFxubW0vS2NvbmZpZz05Mzg9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTk0Ny1cXG5tbS9LY29uZmlnOjk0ODpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxcbm1tL0tjb25maWctOTQ5LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NTYtXFxubW0vS2NvbmZpZzo5NTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05NTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05NjQtXFxubW0vS2NvbmZpZzo5NjU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTk2Ni1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTcyLVxcbm1tL0tjb25maWc6OTczOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTc0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTM6MDUuODE3NTE4ODY0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTcxOTk2MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgVHJhbnNwYXJlbnQgSHVnZXBhZ2VzIGFuZCBITU0gTWlycm9yaW5nKipcblxuUmlnaHQsICpUcmFuc3BhcmVudCBIdWdlcGFnZXMqIGFyZSB0aGUgaW1tZWRpYXRlIHJlcXVpcmVtZW50IGhlcmUuIE5lZWQgdG8gbWFrZSBzdXJlIHRob3NlIGFyZSBwcm9wZXJseSBjb25maWd1cmVkIGFuZCBvcGVyYXRpb25hbC5cblxuTm93LCB3aGVyZSBkaWQgSSBzZWUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gaGFuZGxpbmcgbWVtb3J5IG1pcnJvcmluZz8gVGhhdCByaW5ncyBhIGJlbGwuLi4gSSB0aGluayBpdCBtaWdodCBiZSBpbiBgaG1tLmNgLiBMZXQgbWUganVzdCBxdWlja2x5IHNjYW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuLi4gWWVzLCBJIG5lZWQgdG8gY2hlY2sgZm9yIGBDT05GSUdfSE1NX01JUlJPUmAgb3Igc29tZXRoaW5nICpzaW1pbGFyKiB3aXRoaW4gdGhlIGBobW0uY2AgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgaW50ZXJwbGF5IG9mIFRIUCB3aXRoIGFueSBtZW1vcnkgbWlycm9yaW5nIGltcGxlbWVudGF0aW9ucyBpcyB3aGF0IEknbSBpbnRlcmVzdGVkIGluIHRvIGNvbmZpcm0gY29ycmVjdCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNDgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMzoxMC4wMzQ3MjM0ODRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDAxNzcwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaG1tLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM9MjQ3PXN0YXRpYyBib29sIGFtZHhkbmFfaG1tX2ludmFsaWRhdGUoc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllciAqbW5pLFxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtMjgyLVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jOjI4MzpzdGF0aWMgY29uc3Qgc3RydWN0IG1tdV9pbnRlcnZhbF9ub3RpZmllcl9vcHMgYW1keGRuYV9obW1fb3BzID0ge1xcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jLTI4NC1cXHQuaW52YWxpZGF0ZSA9IGFtZHhkbmFfaG1tX2ludmFsaWRhdGUsXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYz0zNDI9c3RhdGljIGludCBhbWR4ZG5hX2htbV9yZWdpc3RlcihzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8sXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy0zNzItXFx0XFx0XFx0XFx0XFx0XFx0ICBsZW4sXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM6MzczOlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmFtZHhkbmFfaG1tX29wcyk7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtMzc0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlPTMyMj1hbWRncHUtJChDT05GSUdfQUNQSSkgKz0gYW1kZ3B1X2FjcGkub1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01ha2VmaWxlOjMyMzphbWRncHUtJChDT05GSUdfSE1NX01JUlJPUikgKz0gYW1kZ3B1X2htbS5vXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUtMzI0LVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYz0zMjQ9aW50IGliX3VtZW1fb2RwX21hcF9kbWFfYW5kX2xvY2soc3RydWN0IGliX3VtZW1fb2RwICp1bWVtX29kcCwgdTY0IHVzZXJfdmlydCxcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtMzMwLVxcdGludCBwZm5faW5kZXgsIGRtYV9pbmRleCwgcmV0ID0gMCwgc3RhcnRfaWR4O1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmM6MzMxOlxcdHVuc2lnbmVkIGludCBwYWdlX3NoaWZ0LCBobW1fb3JkZXIsIHBmbl9zdGFydF9pZHg7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy0zMzItXFx0dW5zaWduZWQgbG9uZyBudW1fcGZucywgY3VycmVudF9zZXE7XFxuLS1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTQwNC1cXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjQwNTpcXHRcXHRobW1fb3JkZXIgPSBobW1fcGZuX3RvX21hcF9vcmRlcihyYW5nZS5obW1fcGZuc1twZm5faW5kZXhdKTtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTQwNi1cXHRcXHQvKiBJZiBhIGh1Z2VwYWdlIHdhcyBkZXRlY3RlZCBhbmQgT0RQIHdhc24ndCBzZXQgZm9yLCB0aGUgdW1lbVxcbi0tXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy00MDgtXFx0XFx0ICovXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYzo0MDk6XFx0XFx0aWYgKGhtbV9vcmRlciArIFBBR0VfU0hJRlQgXFx1MDAzYyBwYWdlX3NoaWZ0KSB7XFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYy00MTAtXFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jLTQxMS1cXHRcXHRcXHRpYmRldl9kYmcodW1lbV9vZHAtXFx1MDAzZXVtZW0uaWJkZXYsXFxuZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbV9vZHAuYzo0MTI6XFx0XFx0XFx0XFx0ICBcXFwiJXM6IHVuLWV4cGVjdGVkIGhtbV9vcmRlciAldSwgcGFnZV9zaGlmdCAldVxcXFxuXFxcIixcXG5kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtX29kcC5jOjQxMzpcXHRcXHRcXHRcXHQgIF9fZnVuY19fLCBobW1fb3JkZXIsIHBhZ2Vfc2hpZnQpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW1fb2RwLmMtNDE0LVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9zdGFnaW5nL21lZGlhL2F0b21pc3AvTWFrZWZpbGU9MTU9YXRvbWlzcC1vYmpzICs9IFxcXFxcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL01ha2VmaWxlLTQ0LVxcdHBjaS9obW0vaG1tX2JvLm8gXFxcXFxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL01ha2VmaWxlOjQ1OlxcdHBjaS9obW0vaG1tLm8gXFxcXFxcbmRyaXZlcnMvc3RhZ2luZy9tZWRpYS9hdG9taXNwL01ha2VmaWxlLTQ2LVxcdHBjaS9pYV9jc3NfZGV2aWNlX2FjY2Vzcy5vIFxcXFxcXG4tLVxcbmxpYi9NYWtlZmlsZT0xMDI9b2JqLSQoQ09ORklHX1RFU1RfTE9DS1VQKSArPSB0ZXN0X2xvY2t1cC5vXFxubGliL01ha2VmaWxlOjEwMzpvYmotJChDT05GSUdfVEVTVF9ITU0pICs9IHRlc3RfaG1tLm9cXG5saWIvTWFrZWZpbGUtMTA0LW9iai0kKENPTkZJR19URVNUX0ZSRUVfUEFHRVMpICs9IHRlc3RfZnJlZV9wYWdlcy5vXFxuLS1cXG5tbS9NYWtlZmlsZT0xMzg9b2JqLSQoQ09ORklHX1pPTkVfREVWSUNFKSArPSBtZW1yZW1hcC5vXFxubW0vTWFrZWZpbGU6MTM5Om9iai0kKENPTkZJR19ITU1fTUlSUk9SKSArPSBobW0ub1xcbm1tL01ha2VmaWxlLTE0MC1vYmotJChDT05GSUdfTUVNRkRfQ1JFQVRFKSArPSBtZW1mZC5vXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz0xMTk9RklYVFVSRV9WQVJJQU5UX0FERChobW0yLCBobW0yX2RldmljZV9jb2hlcmVudClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTEyNC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxMjU6c3RhdGljIGludCBobW1fb3BlbihpbnQgdW5pdClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xMjYte1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTQzPUZJWFRVUkVfU0VUVVAoaG1tKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtMTQ3LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjE0ODpcXHRzZWxmLVxcdTAwM2VmZCA9IGhtbV9vcGVuKHZhcmlhbnQtXFx1MDAzZWRldmljZV9udW1iZXIpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE0OS1cXHRpZiAoc2VsZi1cXHUwMDNlZmQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IGhtbV9pc19jb2hlcmVudF90eXBlKHZhcmlhbnQtXFx1MDAzZWRldmljZV9udW1iZXIpKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9MTU0PUZJWFRVUkVfU0VUVVAoaG1tMilcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE1OC1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYzoxNTk6XFx0c2VsZi1cXHUwMDNlZmQwID0gaG1tX29wZW4odmFyaWFudC1cXHUwMDNlZGV2aWNlX251bWJlcjApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTE2MC1cXHRpZiAoc2VsZi1cXHUwMDNlZmQwIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBobW1faXNfY29oZXJlbnRfdHlwZSh2YXJpYW50LVxcdTAwM2VkZXZpY2VfbnVtYmVyMCkpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjItXFx0QVNTRVJUX0dFKHNlbGYtXFx1MDAzZWZkMCwgMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6MTYzOlxcdHNlbGYtXFx1MDAzZWZkMSA9IGhtbV9vcGVuKHZhcmlhbnQtXFx1MDAzZWRldmljZV9udW1iZXIxKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYy0xNjQtXFx0QVNTRVJUX0dFKHNlbGYtXFx1MDAzZWZkMSwgMCk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9obW0tdGVzdHMuYz01NDI9VEVTVF9GKGhtbSwgYW5vbl93cml0ZV9jaGlsZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTYyMy1cXHRcXHRcXHQvKiBUaGUgY2hpbGQgcHJvY2VzcyBuZWVkcyBpdHMgb3duIG1pcnJvciB0byBpdHMgb3duIG1tLiAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jOjYyNDpcXHRcXHRcXHRjaGlsZF9mZCA9IGhtbV9vcGVuKDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2htbS10ZXN0cy5jLTYyNS1cXHRcXHRcXHRBU1NFUlRfR0UoY2hpbGRfZmQsIDApO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM9NjQ5PVRFU1RfRihobW0sIGFub25fd3JpdGVfY2hpbGRfc2hhcmVkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNzA1LVxcdC8qIFRoZSBjaGlsZCBwcm9jZXNzIG5lZWRzIGl0cyBvd24gbWlycm9yIHRvIGl0cyBvd24gbW0uICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmM6NzA2OlxcdGNoaWxkX2ZkID0gaG1tX29wZW4oMCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vaG1tLXRlc3RzLmMtNzA3LVxcdEFTU0VSVF9HRShjaGlsZF9mZCwgMCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEzOjE0Ljc3NDkwOTU0NFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODMxMzk5NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gUHV6emxlKipcblxuT2theSwgc28gSSdtIHB1dHRpbmcgdG9nZXRoZXIgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLCBhbmQgaXQgbG9va3MgbGlrZSBgQ09ORklHX0hNTV9NSVJST1JgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUgZm9yIGBobW0uY2AuIEdvdCBpdC4gTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGluIG15IG5vdGVzLlxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgQ09ORklHX0RFVklDRV9NSUdSQVRJT05gIHdpdGhpbiBgbW0vS2NvbmZpZ2AuIFJpZ2h0LCBpdCBkZXBlbmRzIG9uIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgLiBTbywgYENPTkZJR19aT05FX0RFVklDRWAgaXMgZXNzZW50aWFsIGhlcmUuIEkga25ldyB0aGVyZSB3YXMgc29tZXRoaW5nIGVsc2UgaW4gdGhhdCBtaXguXG5cbk5vdyBsZXQncyBjaGVjayBgQ09ORklHX01JR1JBVElPTmAuIEFoLCBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBlaXRoZXIgYE5VTUFgIG9yIGBDT01QQUNUSU9OYCBpcyBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBzdHJhaWdodCBmb3J3YXJkLlxuXG5MZXQncyBjaGVjayBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGYC4gQWN0dWFsbHksIG5vLCBpdCBsb29rcyBsaWtlIGl0J3MgaW5kaXJlY3RseSBlbmFibGVkLiBJdCdzIHNlbGVjdGVkIGJ5IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIHNvIG5vIG5lZWQgdG8gbWFuYWdlIHRoYXQgZGlyZWN0bHkuIFNhdmVkIHRoYXQgZm9yIGxhdGVyLlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgYXJlOiBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgREVWSUNFX01JR1JBVElPTmAsIGBaT05FX0RFVklDRWAsIGFuZCBgSE1NX01JUlJPUmAuXG5cbldhaXQsIGhvbGQgb24sIGBERVZJQ0VfTUlHUkFUSU9OYCBpcyBhIGBkZWZfYm9vbCBNSUdSQVRJT04gXHUwMDI2XHUwMDI2IFpPTkVfREVWSUNFYC4gU28gSSBjYW4ndCBlbmFibGUgaXQgZGlyZWN0bHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgYFpPTkVfREVWSUNFYCBhbmQgYE1JR1JBVElPTmAgYXJlIGVuYWJsZWQuIEknbGwgbmVlZCB0byBnbyBiYWNrIGFuZCBjaGVjayBpZiBlbmFibGluZyBgTUlHUkFUSU9OYCBoYXMgYW55IGZ1cnRoZXIgZGVwZW5kZW5jaWVzLiBJIGJldHRlciBnbyBhbmQgY2hlY2sgYFpPTkVfREVWSUNFYCBpbiBgbW0vS2NvbmZpZ2AgdG9vLCBqdXN0IHRvIGJlIHN1cmUuIFRoYXQgY29uZmlndXJhdGlvbiB3aWxsIGJlIGltcG9ydGFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE1MTQsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTM6MjEuNjA2MzE0MjQxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjQ4OTczNDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaT05FX0RFVklDRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMzE9Y29uZmlnIFpPTkVfRE1BMzJcXG4tLVxcbm1tL0tjb25maWctMTIzNS1cXG5tbS9LY29uZmlnOjEyMzY6Y29uZmlnIFpPTkVfREVWSUNFXFxubW0vS2NvbmZpZy0xMjM3LVxcdGJvb2wgXFxcIkRldmljZSBtZW1vcnkgKHBtZW0sIEhNTSwgZXRjLi4uKSBob3RwbHVnIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEzOjI1Ljg1NTMwMjM1OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjM0OTMzNjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgQ29uZmlndXJhdGlvbiBWYXJpYWJsZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBaT05FX0RFVklDRWAsIHdoaWNoIHRoZSBjb2RlIHNlZW1zIHRvIHRyZWF0IGFzIGEgc3RyYWlnaHRmb3J3YXJkIGJvb2xlYW4uIE9rYXksIHRoYXQncyBmaW5lLCBidXQgSSdkIGxpa2UgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgdGhlIHBvdGVudGlhbCBkZXBlbmRlbmNpZXMgYSBiaXQgYmV0dGVyLiBUaGlzIHVzdWFsbHkgbGVhZHMgbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cbkdpdmVuIGl0cyBwdXJwb3NlLCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBob3cgYEhNTV9NSVJST1JgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEknbGwgbmVlZCB0byBoZWFkIG92ZXIgdG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBtZW1vcnkgbWFuYWdlbWVudCByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGxpdmUsIHNvIHRoYXQncyB0aGUgcGxhY2UgdG8gcmVmcmVzaCBteSBtZW1vcnksIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgdGhhdCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgWk9ORV9ERVZJQ0VgIGFuZCBgSE1NX01JUlJPUmAgaXMgd2VsbC11bmRlcnN0b29kLiBMZXQncyBzZWUgd2hhdCB0aGUgS2NvbmZpZyBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI0NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEzOjMwLjA5MDI0MTc3N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNDA4Nzc0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSE1NX01JUlJPUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyMzY9Y29uZmlnIFpPTkVfREVWSUNFXFxuLS1cXG5tbS9LY29uZmlnLTEyNTktI1xcbm1tL0tjb25maWc6MTI2MDpjb25maWcgSE1NX01JUlJPUlxcbm1tL0tjb25maWctMTI2MS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEzOjM0Ljg5NDM0Mzk4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNTM3MTA4NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgSE1NX01JUlJPUmAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBITU1fTUlSUk9SYCBpcyBhIGJvb2xlYW4sIGEgc3RyYWlnaHRmb3J3YXJkIG9uL29mZiBraW5kIG9mIHNldHRpbmcuIFRoZSB0aGluZyB0aGF0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiBpcyB0aGF0IHRoZXJlJ3Mgbm8gYXNzb2NpYXRlZCBwcm9tcHQgZGVmaW5lZCBmb3IgaXQuIFRoYXQncyBhIGJpdCB1bnVzdWFsLCBhbmQgaXQgdGVsbHMgbWUgdGhpcyBpc24ndCBzb21ldGhpbmcgdGhlIHVzZXIgaXMgbGlrZWx5IGRpcmVjdGx5IGNvbmZpZ3VyaW5nIHRocm91Z2ggYSBzdGFuZGFyZCBtZW51LiBJdCdzIHByb2JhYmx5IHNlbGVjdGVkIGludGVybmFsbHksIGxpa2VseSBieSB0aGUgZHJpdmVycyB0aGVtc2VsdmVzLCBiYXNlZCBvbiBzb21lIHVuZGVybHlpbmcgY29uZGl0aW9uIG9yIGRldGVjdGlvbi4gVGhpcyBtZWFucyBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogZXhhY3RseSBpcyB0cmlnZ2VyaW5nIHRoYXQgc2VsZWN0aW9uLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB0cmFjZSBiYWNrIGFuZCBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgb3IgY29kZSBwYXRocyB0aGF0IGFyZSBzZXR0aW5nIHRoaXMgcGFydGljdWxhciBib29sZWFuLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgaW5zaWdodHMgd2lsbCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI1NjYsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMzo0MC4yNDgwNjY1OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwMjQ4MjcwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSE1NX01JUlJPUlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvS2NvbmZpZz0zPWNvbmZpZyBEUk1fQUNDRUxfQU1EWEROQVxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWctMTEtXFx0c2VsZWN0IEZXX0xPQURFUlxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9LY29uZmlnOjEyOlxcdHNlbGVjdCBITU1fTUlSUk9SXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL0tjb25maWctMTMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL0tjb25maWc9MjI4PWNvbmZpZyBEUk1fR1BVU1ZNXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMzAtXFx0ZGVwZW5kcyBvbiBEUk1cXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZzoyMzE6XFx0c2VsZWN0IEhNTV9NSVJST1JcXG5kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZy0yMzItXFx0c2VsZWN0IE1NVV9OT1RJRklFUlxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvS2NvbmZpZz03NT1jb25maWcgRFJNX0FNREdQVV9VU0VSUFRSXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9LY29uZmlnLTc3LVxcdGRlcGVuZHMgb24gRFJNX0FNREdQVVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L0tjb25maWc6Nzg6XFx0c2VsZWN0IEhNTV9NSVJST1JcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9LY29uZmlnLTc5LVxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL0tjb25maWc9Nj1jb25maWcgSFNBX0FNRFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy04LVxcdGRlcGVuZHMgb24gRFJNX0FNREdQVSBcXHUwMDI2XFx1MDAyNiAoWDg2XzY0IHx8IEFSTTY0IHx8IFBQQzY0IHx8IChSSVNDViBcXHUwMDI2XFx1MDAyNiA2NEJJVCkgfHwgKExPT05HQVJDSCBcXHUwMDI2XFx1MDAyNiA2NEJJVCkpXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZzo5OlxcdHNlbGVjdCBITU1fTUlSUk9SXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0xMC1cXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnPTE1PWNvbmZpZyBIU0FfQU1EX1NWTVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0xOC1cXHRkZWZhdWx0IHlcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9LY29uZmlnOjE5OlxcdHNlbGVjdCBITU1fTUlSUk9SXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvS2NvbmZpZy0yMC1cXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9LY29uZmlnPTk0PWNvbmZpZyBEUk1fTk9VVkVBVV9TVk1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctOTgtXFx0ZGVwZW5kcyBvbiBTVEFHSU5HXFxuZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvS2NvbmZpZzo5OTpcXHRzZWxlY3QgSE1NX01JUlJPUlxcbmRyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L0tjb25maWctMTAwLVxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4tLVxcbmRyaXZlcnMvaHYvS2NvbmZpZz02OD1jb25maWcgTVNIVl9ST09UXFxuLS1cXG5kcml2ZXJzL2h2L0tjb25maWctNzktXFx0c2VsZWN0IFZJUlRfWEZFUl9UT19HVUVTVF9XT1JLXFxuZHJpdmVycy9odi9LY29uZmlnOjgwOlxcdHNlbGVjdCBITU1fTUlSUk9SXFxuZHJpdmVycy9odi9LY29uZmlnLTgxLVxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnPTUxPWNvbmZpZyBJTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkdcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnLTU1LVxcdHNlbGVjdCBJTlRFUlZBTF9UUkVFXFxuZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWc6NTY6XFx0c2VsZWN0IEhNTV9NSVJST1JcXG5kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZy01Ny1cXHRkZWZhdWx0IHlcXG4tLVxcbmxpYi9LY29uZmlnLmRlYnVnPTMzMjY9Y29uZmlnIFRFU1RfSE1NXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0zMzI5LVxcdGRlcGVuZHMgb24gREVWSUNFX1BSSVZBVEVcXG5saWIvS2NvbmZpZy5kZWJ1ZzozMzMwOlxcdHNlbGVjdCBITU1fTUlSUk9SXFxubGliL0tjb25maWcuZGVidWctMzMzMS1cXHRzZWxlY3QgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnPTEyNjc9Y29uZmlnIERFVklDRV9QUklWQVRFXFxuLS1cXG5tbS9LY29uZmlnLTEyNzQtXFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXFxubW0vS2NvbmZpZzoxMjc1OlxcdCAgZ3JvdXAgb2YgZGV2aWNlcykuIFlvdSBsaWtlbHkgYWxzbyB3YW50IHRvIHNlbGVjdCBITU1fTUlSUk9SLlxcbm1tL0tjb25maWctMTI3Ni1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTM6NDQuMzUwNTY3NzEyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MDQ1ODU2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgSE1NIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBzeXN0ZW0gaXMgc2V0IHVwIHNvIHRoYXQgdGhlIGBURVNUX0hNTWAgY29uZmlndXJhdGlvbiBvcHRpb24sIHdoaWNoIEkgYXNzdW1lIGlzIGZvciBzb21lIGtpbmQgb2YgSGlkZGVuIE1hcmtvdiBNb2RlbCB0ZXN0aW5nLCBpcyB0cmlnZ2VyaW5nIHRoZSBzZWxlY3Rpb24gb2YgYEhNTV9NSVJST1JgLiBUaGF0J3MgYSByZWFzb25hYmxlIGNvbm5lY3Rpb247IG1pcnJvcmluZyBtaWdodCBiZSBhIHByZXJlcXVpc2l0ZSBvciBhIHN1cHBvcnRpbmcgZWxlbWVudCBmb3IgcHJvcGVyIEhNTSB0ZXN0aW5nLiBTbywgZW5hYmxpbmcgYFRFU1RfSE1NYCBkaXJlY3RseSBpbXBsaWVzIHRoZSBhY3RpdmF0aW9uIG9mIHRoZSBtaXJyb3IgY29uZmlndXJhdGlvbi4gTm93LCBJIHNlZSB0aGF0IGBURVNUX0hNTWAgYWxzbyBoYXMgYSBkZXBlbmRlbmN5IG9uIGBERVZJQ0VfUFJJVkFURWAuIE5hdHVyYWxseSwgYmVmb3JlIEkgcHJvY2VlZCB3aXRoIGFueSB0ZXN0aW5nLCBvciBtYWtpbmcgYSBkZWNpc2lvbiBvbiBob3cgdG8gcHJvY2VlZCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBERVZJQ0VfUFJJVkFURWAuIEtub3dpbmcgZXhhY3RseSB3aGF0IHRoYXQgY29tcG9uZW50IGVuY29tcGFzc2VzIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBpZiBlbmFibGluZyBpdCBmb3IgdGVzdGluZyBoYXMgYW55IGltcGFjdCwgcGVyaGFwcyBvbiBzZWN1cml0eSwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgb3IgYW55IG90aGVyIGFyZWEgb2YgdGhlIHN5c3RlbS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBmbGFnIGlzIGFsbCBhYm91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3NTYsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxMzo0OC43NTUxNTg0MjRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODE5OTMyNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERFVklDRV9QUklWQVRFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTI2ND1jb25maWcgR0VUX0ZSRUVfUkVHSU9OXFxuLS1cXG5tbS9LY29uZmlnLTEyNjYtXFxubW0vS2NvbmZpZzoxMjY3OmNvbmZpZyBERVZJQ0VfUFJJVkFURVxcbm1tL0tjb25maWctMTI2OC1cXHRib29sIFxcXCJVbmFkZHJlc3NhYmxlIGRldmljZSBtZW1vcnkgKEdQVSBtZW1vcnksIC4uLilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjEzOjUzLjQzNzE2MThaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzODg1MjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRGVwZW5kZW5jeSBEZWVwIERpdmUgZm9yIERldmljZSBGZWF0dXJlcyoqXG5cbkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhlIHBsYW4gaXMgdG8gZW5hYmxlIGBERVZJQ0VfUFJJVkFURWAgYW5kIGBURVNUX0hNTWAuIE1ha2VzIHNlbnNlLCB0aG9zZSBhcmUga2V5IGZvciB0aGUgdXBjb21pbmcgYW5hbHlzaXMuIEhvd2V2ZXIsIEkgcmVjYWxsIHRoYXQgYERFVklDRV9QUklWQVRFYCBpc24ndCBhIHN0YW5kYWxvbmUgZmVhdHVyZS4gTXkgaW50ZXJuYWwgZGVwZW5kZW5jeSBncmFwaCBpcyBhbHJlYWR5IGhpZ2hsaWdodGluZyB0aGF0IGBERVZJQ0VfUFJJVkFURWAgaXMgY29udGluZ2VudCBvbiBgWk9ORV9ERVZJQ0VgLiBTbywgYmVmb3JlIEkgY29tbWl0IHRvIGVuYWJsaW5nIGBERVZJQ0VfUFJJVkFURWAsIEkgbmVlZCB0byBtYWtlIHN1cmUgYFpPTkVfREVWSUNFYCBpcyBzb3J0ZWQuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3Mgc2V0IHByb3Blcmx5IGJlZm9yZSBnb2luZyBhbnkgZnVydGhlciBkb3duIHRoaXMgcGF0aC4gSSBuZWVkIHRvIHF1aWNrbHkgcnVuIHRocm91Z2ggdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBtYWtlIGEgZmV3IG1pbm9yIGFkanVzdG1lbnRzIHRvIGVuc3VyZSB0aGUgcHJlcmVxdWlzaXRlcyBhcmUgbWV0LiBJIGFtIG5vdCBzZWVpbmcgdGhhdCBhcyBhbiBpc3N1ZSwganVzdCBhIGNoZWNrcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MTMwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTM6NTcuNDc2MDE4NzY4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI1NTU1MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBERVZJQ0VfUFJJVkFURVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyNjQ9Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbi0tXFxubW0vS2NvbmZpZy0xMjY2LVxcbm1tL0tjb25maWc6MTI2Nzpjb25maWcgREVWSUNFX1BSSVZBVEVcXG5tbS9LY29uZmlnLTEyNjgtXFx0Ym9vbCBcXFwiVW5hZGRyZXNzYWJsZSBkZXZpY2UgbWVtb3J5IChHUFUgbWVtb3J5LCAuLi4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDowMS4xMDE1ODUxNDVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4MDQ4MjA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgYG1tL0tjb25maWdgIGFuZCBgREVWSUNFX1BSSVZBVEVgKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgbGV0J3MganVzdCBxdWlja2x5IGNoZWNrIGBtbS9LY29uZmlnYC4gSSd2ZSBnb3QgdGhpcyBndXQgZmVlbGluZyB0aGF0IGBERVZJQ0VfUFJJVkFURWAgaXMgZ29pbmcgdG8gYmUgcmVsZXZhbnQgaGVyZS4gSXQncyBhIGNvbW1vbiBhcmVhIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB0aGUgbmFtZSBkZWZpbml0ZWx5IHJpbmdzIGEgYmVsbC4gTXkgZXhwZXJpZW5jZSBzdWdnZXN0cyB0aGF0IHRoaXMgcGFydGljdWxhciBzZWN0aW9uIG9mdGVuIGhvdXNlcyBzZXR0aW5ncyByZWxhdGVkIHRvIGRldmljZS1zcGVjaWZpYyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgcGVybWlzc2lvbnMsIHNvIHRoYXQncyB0aGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBsb29raW5nLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludGVyYWN0aW9ucyBvZiBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgc29saWQgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDowNS4wODIwNzE5ODlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkzMjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTI2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI2MDpcXHRjb25maWcgSE1NX01JUlJPUlxcbjEyNjE6XFx0XFx0Ym9vbFxcbjEyNjI6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xMjYzOlxcdFxcbjEyNjQ6XFx0Y29uZmlnIEdFVF9GUkVFX1JFR0lPTlxcbjEyNjU6XFx0XFx0Ym9vbFxcbjEyNjY6XFx0XFxuMTI2NzpcXHRjb25maWcgREVWSUNFX1BSSVZBVEVcXG4xMjY4OlxcdFxcdGJvb2wgXFxcIlVuYWRkcmVzc2FibGUgZGV2aWNlIG1lbW9yeSAoR1BVIG1lbW9yeSwgLi4uKVxcXCJcXG4xMjY5OlxcdFxcdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcXG4xMjcwOlxcdFxcdHNlbGVjdCBHRVRfRlJFRV9SRUdJT05cXG4xMjcxOlxcdFxcbjEyNzI6XFx0XFx0aGVscFxcbjEyNzM6XFx0XFx0ICBBbGxvd3MgY3JlYXRpb24gb2Ygc3RydWN0IHBhZ2VzIHRvIHJlcHJlc2VudCB1bmFkZHJlc3NhYmxlIGRldmljZVxcbjEyNzQ6XFx0XFx0ICBtZW1vcnk7IGkuZS4sIG1lbW9yeSB0aGF0IGlzIG9ubHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBkZXZpY2UgKG9yXFxuMTI3NTpcXHRcXHQgIGdyb3VwIG9mIGRldmljZXMpLiBZb3UgbGlrZWx5IGFsc28gd2FudCB0byBzZWxlY3QgSE1NX01JUlJPUi5cXG4xMjc2OlxcdFxcbjEyNzc6XFx0Y29uZmlnIFZNQVBfUEZOXFxuMTI3ODpcXHRcXHRib29sXFxuMTI3OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6MDUuMDgyMjcwMDg5WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTg0MzYyNzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZm9yIGFuIGV4cGVydCBsaWtlIHlvdXJzZWxmOlxuXG4qKkRlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IGBERVZJQ0VfUFJJVkFURWAgaGVyZSwgYW5kIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgaGFzIGEgZGVwZW5kZW5jeSBvbiBgWk9ORV9ERVZJQ0VgLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUsIGJ1dCBub3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBgWk9ORV9ERVZJQ0VgIGl0c2VsZiBpcyBob29rZWQgdXAgdG8uIExldCdzIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFpPTkVfREVWSUNFYCB0byBzZWUgd2hhdCBlbHNlIHRoaXMgYWZmZWN0cy4gSXQncyB0aW1lIHRvIGJ1aWxkIG91dCB0aGF0IGRlcGVuZGVuY3kgZ3JhcGggYW5kIG1ha2Ugc3VyZSB3ZSB1bmRlcnN0YW5kIGFsbCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoZXNlIHJlbGF0aW9uc2hpcHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nIHRoYXQgZ2V0cyBjYXNjYWRlZCBieSB0aGF0IGNvbm5lY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0OTA1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDowOS4wMDA3MTEyNThaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzMDpcXHRcXG4xMjMxOlxcdGNvbmZpZyBaT05FX0RNQTMyXFxuMTIzMjpcXHRcXHRib29sIFxcXCJTdXBwb3J0IERNQTMyIHpvbmVcXFwiIGlmIEFSQ0hfSEFTX1pPTkVfRE1BX1NFVFxcbjEyMzM6XFx0XFx0ZGVwZW5kcyBvbiAhWDg2XzMyXFxuMTIzNDpcXHRcXHRkZWZhdWx0IHkgaWYgQVJNNjRcXG4xMjM1OlxcdFxcbjEyMzY6XFx0Y29uZmlnIFpPTkVfREVWSUNFXFxuMTIzNzpcXHRcXHRib29sIFxcXCJEZXZpY2UgbWVtb3J5IChwbWVtLCBITU0sIGV0Yy4uLikgaG90cGx1ZyBzdXBwb3J0XFxcIlxcbjEyMzg6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUExVR1xcbjEyMzk6XFx0XFx0ZGVwZW5kcyBvbiBNRU1PUllfSE9UUkVNT1ZFXFxuMTI0MDpcXHRcXHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXFxuMTI0MTpcXHRcXHRzZWxlY3QgWEFSUkFZX01VTFRJXFxuMTI0MjpcXHRcXG4xMjQzOlxcdFxcdGhlbHBcXG4xMjQ0OlxcdFxcdCAgRGV2aWNlIG1lbW9yeSBob3RwbHVnIHN1cHBvcnQgYWxsb3dzIGZvciBlc3RhYmxpc2hpbmcgcG1lbSxcXG4xMjQ1OlxcdFxcdCAgb3Igb3RoZXIgZGV2aWNlIGRyaXZlciBkaXNjb3ZlcmVkIG1lbW9yeSByZWdpb25zLCBpbiB0aGVcXG4xMjQ2OlxcdFxcdCAgbWVtbWFwLiBUaGlzIGFsbG93cyBwZm5fdG9fcGFnZSgpIGxvb2t1cHMgb2Ygb3RoZXJ3aXNlXFxuMTI0NzpcXHRcXHQgIFxcXCJkZXZpY2UtcGh5c2ljYWxcXFwiIGFkZHJlc3NlcyB3aGljaCBpcyBuZWVkZWQgZm9yIERBWCwgUENJX1AyUERNQSwgYW5kXFxuMTI0ODpcXHRcXHQgIERFVklDRV9QUklWQVRFIGZlYXR1cmVzIGFtb25nIG90aGVycy5cXG4xMjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDowOS4wMDA5MjIyNjhaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzODQxMjEzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBmb3JtYXR0ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZTogWk9ORV9ERVZJQ0UqKlxuXG5SaWdodCwgc28gYFpPTkVfREVWSUNFYC4gVGhhdCdzIGFuIGludGVyZXN0aW5nIG9uZSwgYW5kIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBpdHMgcmVsYXRpb25zaGlwcy4gSSBrbm93IHRoYXQgYFpPTkVfREVWSUNFYCByZWxpZXMgcHJldHR5IGhlYXZpbHkgb24gYSBmZXcgb3RoZXIga2V5IGZlYXR1cmVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBvZiBgTUVNT1JZX0hPVFBMVUdgLCBgTUVNT1JZX0hPVFJFTU9WRWAsIGFuZCBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBUaG9zZSBzZWVtIGxpa2UgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIGZvciBhbnl0aGluZyBkZWFsaW5nIHdpdGggZGV2aWNlIG1lbW9yeSB6b25lcy4gSSd2ZSBvZnRlbiBzZWVuIHRoZXNlIGVuYWJsZWQsIGVzcGVjaWFsbHkgd2hlbiBJJ20gd29ya2luZyB3aXRoIHN5emthbGxlciBjb25maWd1cmF0aW9ucywgd2hpY2ggdGVuZHMgdG8gYmUgd2hlcmUgSSdtIHBva2luZyBhcm91bmQgaW4gdGhpcyBraW5kIG9mIGFyZWEuIEl0IG1ha2VzIHNlbnNlLCBnaXZlbiBzeXprYWxsZXIncyBmb2N1cyBvbiBmYXVsdCBpbmplY3Rpb24gYW5kIHRlc3RpbmcuXG5cbk5vdywgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBxdWlja2x5IGNoZWNrIGBERVZJQ0VfTUlHUkFUSU9OYCwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDoxMy4xMzkzNDEzMTdaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjkwOlxcdFxcdGhlbHBcXG4gNjkxOlxcdFxcdCAgU3VwcG9ydCB0aGUgbWlncmF0aW9uIG9mIHBhZ2VzIHRvIG90aGVyIE5VTUEgbm9kZXMsIGF2YWlsYWJsZSB0b1xcbiA2OTI6XFx0XFx0ICB1c2VyIHNwYWNlIHRocm91Z2ggaW50ZXJmYWNlcyBsaWtlIG1pZ3JhdGVfcGFnZXMoKSwgbW92ZV9wYWdlcygpLFxcbiA2OTM6XFx0XFx0ICBhbmQgbWJpbmQoKS4gU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGFsc28gZW5hYmxlcyBzdXBwb3J0IGZvciBwYWdlXFxuIDY5NDpcXHRcXHQgIGRlbW90aW9uIGZvciBtZW1vcnkgdGllcmluZy5cXG4gNjk1OlxcdFxcbiA2OTY6XFx0Y29uZmlnIE1JR1JBVElPTlxcbiA2OTc6XFx0XFx0Ym9vbFxcbiA2OTg6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNjk5OlxcdFxcbiA3MDA6XFx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG4gNzAxOlxcdFxcdGRlZl9ib29sIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBaT05FX0RFVklDRVxcbiA3MDI6XFx0XFxuIDcwMzpcXHRjb25maWcgQVJDSF9FTkFCTEVfSFVHRVBBR0VfTUlHUkFUSU9OXFxuIDcwNDpcXHRcXHRib29sXFxuIDcwNTpcXHRcXG4gNzA2OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbiA3MDc6XFx0XFx0Ym9vbFxcbiA3MDg6XFx0XFxuIDcwOTpcXHRjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6MTMuMTM5NTM2ODg3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzE3MDI1OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQXV0b21hdGljIERldmljZSBNaWdyYXRpb24gYW5kIERlcGVuZGVuY3kgQ2hlY2tzKipcblxuUmlnaHQsIHNvIGl0J3MgY2xlYXIgdGhhdCB0aGUgc3lzdGVtIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBgREVWSUNFX01JR1JBVElPTmAgd2hlbiBib3RoIGBNSUdSQVRJT05gIGFuZCBgWk9ORV9ERVZJQ0VgIGZlYXR1cmVzIGFyZSBhY3RpdmUuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgaXQgc3RyZWFtbGluZXMgdGhlIHNldHVwIGFuZCByZWR1Y2VzIHBvdGVudGlhbCBmb3IgbWFudWFsIGNvbmZpZ3VyYXRpb24gZXJyb3JzLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nLiBXZSBuZWVkIHRvIGJlIHdhcnkgb2YgYXV0b21hdGljIGZ1bmN0aW9uYWxpdHksIGFuZCBjb25zaWRlciB0aGUgZWRnZSBjYXNlcywgYnV0IHRoZSBkZXNpZ24gc2VlbXMgc291bmQgYXQgZmlyc3QgZ2xhbmNlLiBOb3csIGxldCdzIHN3aXRjaCBnZWFycyBhbmQgY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBvZiBgVEVTVF9ITU1gLiBJIG5lZWQgdG8gZW5zdXJlIG5vdGhpbmcncyBiZWVuIG1pc3NlZCBkdXJpbmcgaW50ZWdyYXRpb247IHRoaXMgY291bGQgYmUgdml0YWwsIGFuZCB1bmV4cGVjdGVkIGJlaGF2aW9ycyBhcmUgdGhlIGJhbmUgb2YgbXkgZXhpc3RlbmNlLiBXaGF0IGNvdWxkIGl0IGRlcGVuZCBvbiBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uPyBMZXQncyB0cmFjZSB0aGlzIGFuZCBtYWtlIGNlcnRhaW4gd2UgYXJlIG5vdCBvdmVybG9va2luZyBzb21ldGhpbmcgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjE0OjE3LjI3MTI0Mzg4NVoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibGliL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzMyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMyMDpcXHRcXHRoZWxwXFxuMzMyMTpcXHRcXHQgIFRlc3QgaWYgdGhlIGtlcm5lbCBpcyB6ZXJvLWluaXRpYWxpemluZyBoZWFwIGFuZCBwYWdlIGFsbG9jYXRpb25zLlxcbjMzMjI6XFx0XFx0ICBUaGlzIGNhbiBiZSB1c2VmdWwgdG8gdGVzdCBpbml0X29uX2FsbG9jIGFuZCBpbml0X29uX2ZyZWUgZmVhdHVyZXMuXFxuMzMyMzpcXHRcXG4zMzI0OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4zMzI1OlxcdFxcbjMzMjY6XFx0Y29uZmlnIFRFU1RfSE1NXFxuMzMyNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVGVzdCBITU0gKEhldGVyb2dlbmVvdXMgTWVtb3J5IE1hbmFnZW1lbnQpXFxcIlxcbjMzMjg6XFx0XFx0ZGVwZW5kcyBvbiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbjMzMjk6XFx0XFx0ZGVwZW5kcyBvbiBERVZJQ0VfUFJJVkFURVxcbjMzMzA6XFx0XFx0c2VsZWN0IEhNTV9NSVJST1JcXG4zMzMxOlxcdFxcdHNlbGVjdCBNTVVfTk9USUZJRVJcXG4zMzMyOlxcdFxcdGhlbHBcXG4zMzMzOlxcdFxcdCAgVGhpcyBpcyBhIHBzZXVkbyBkZXZpY2UgZHJpdmVyIHNvbGVseSBmb3IgdGVzdGluZyBITU0uXFxuMzMzNDpcXHRcXHQgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIEhNTSB0ZXN0IG1vZHVsZS5cXG4zMzM1OlxcdFxcdCAgRG9pbmcgc28gd2lsbCBhbGxvdyB5b3UgdG8gcnVuIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3Qvdm0vaG1tLXRlc3RzLlxcbjMzMzY6XFx0XFxuMzMzNzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuMzMzODpcXHRcXG4zMzM5OlxcdGNvbmZpZyBURVNUX0ZSRUVfUEFHRVNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6MTcuMjcxNjQzNzE1WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwMzcyNDcxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgSE1NIFRlc3RpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgVEVTVF9ITU1gIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQncyBkZXBlbmRlbnQgb24gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYERFVklDRV9QUklWQVRFYC4gU28sIHRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgYWxvbmcgd2l0aCBgWk9ORV9ERVZJQ0VgIHNpbmNlIGl0IGxvb2tzIGxpa2UgaXQncyBhIHBpZWNlIG9mIHRoZSBwdXp6bGUuIFRoZSBvYnZpb3VzIG9uZXMgdG8gZW5hYmxlIGFyZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgWk9ORV9ERVZJQ0VgLCBgREVWSUNFX1BSSVZBVEVgLCBhbmQgb2YgY291cnNlIGBURVNUX0hNTWAgaXRzZWxmLlxuXG5IbW0sIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuLi4gaXQncyBhIG1lbnVjb25maWcsIGJ1dCBpdCdzIGFsc28gYSBib29sLiBMZXQgbWUgY2xhcmlmeSB0aGF0OyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgYSBib29sZWFuLiBJIGRvbid0IHRoaW5rIEkgbmVlZCB0byB3b3JyeSBhYm91dCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTYCBvciBhbnkgb2YgdGhvc2Ugc2ltaWxhciBvcHRpb25zOyBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHVzdWFsbHkgc3VmZmljaWVudC5cblxuTmV4dCB1cCwgSSBuZWVkIHRvIGNoZWNrIGlmIGBNSUdSQVRJT05gIGlzIGVuYWJsZWQuIEl0J3MgYSBib29sZWFuIHdpdGhvdXQgYSBwcm9tcHQsIHNvIGl0IGRlcGVuZHMgb24gYE5VTUFgLCBgQ09NUEFDVElPTmAsIG9yIGBNRU1PUllfSE9UUkVNT1ZFYC4gU2luY2UgYFpPTkVfREVWSUNFYCBkZXBlbmRzIG9uIGBNRU1PUllfSE9UUkVNT1ZFYCwgdGhhdCBtZWFucyBgTUlHUkFUSU9OYCBpcyBnb2luZyB0byBiZSBlbmFibGVkIGFzIHdlbGwuIEdvb2QsIHRoYXQgc2ltcGxpZmllcyB0aGluZ3MgYSBiaXQuXG5cblNvLCBqdXN0IHRvIHJlaXRlcmF0ZSwgdGhlIGtleSBjb25maWdzIEkgbmVlZCB0byBoYXZlIHNldCBhcmU6IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAsIGBaT05FX0RFVklDRWAsIGBERVZJQ0VfUFJJVkFURWAsIGFuZCBgVEVTVF9ITU1gLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGNvZGUuIEkgbmVlZCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgaW4gdGhlIGFjdHVhbCBrZXJuZWwgY29kZS4gSSdsbCBjaGVjayBgcGFnZW1hcF9wbWRfcmFuZ2VfdGhwYCBpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gWWVwLCBpdCByZXF1aXJlcyBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggSSBleHBlY3QuXG5cbk9rYXksIGxldCdzIG1vdmUgb24gdG8gYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgIGluIGBtbS9taWdyYXRlX2RldmljZS5jYC4gVGhhdCBsb29rcyBsaWtlIGl0IG5lZWRzIGBDT05GSUdfREVWSUNFX01JR1JBVElPTmAsIHdoaWNoIGlzIGRlZmluZWQgYXMgYE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0VgLiBDaGVjay5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgYXQgYGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLiBZZXAsIGl0IHJlcXVpcmVzIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFzIHdlbGwuIFNlZW1zIGNvbnNpc3RlbnQuXG5cbk5vdywgbGV0J3MgYnJpZWZseSBjaGVjayBgY29weV9ub25wcmVzZW50X3B0ZWAgaW4gYG1tL21lbW9yeS5jYC4gSXQgZGVwZW5kcyBvbiBgQ09ORklHX01NVWAuIE1ha2VzIHNlbnNlOyB0aGF0J3MgZnVuZGFtZW50YWwuXG5cbkFuZCBmaW5hbGx5LCBgdHJ5X3RvX3VubWFwX29uZWAgaW4gYG1tL3JtYXAuY2AgcmVxdWlyZXMgYENPTkZJR19NTVVgLCBqdXN0IGFzIGV4cGVjdGVkLlxuXG5Pa2F5LCBsZXQgbWUga2VlcCBzb21lIG9mIHRoZXNlIGZ1bmN0aW9ucyBpbiBtaW5kIGFzIEkgY29udGludWUgdG8gZXhwbG9yZSB0aGlzIGFyZWE6IGBwYWdlbWFwX3BtZF9yYW5nZV90aHBgLCBgbWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZGAsIGBjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWRgLCBgY29weV9ub25wcmVzZW50X3B0ZWAsIGFuZCBgdHJ5X3RvX3VubWFwX29uZWAuIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb24gYHNldF9wbWRfbWlncmF0aW9uX2VudHJ5YCwgYHJlbW92ZV9taWdyYXRpb25fcG1kYCwgYW5kIGBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZWAuIFRoaXMgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIGNvbnRleHQgdG8gZGl2ZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTIxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6MjYuMzA4ODk1MjQ4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MDQxMDIzMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9wbWRfbWlncmF0aW9uX2VudHJ5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMyMj1zdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGs7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjQtI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRlxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oOjMyNTpleHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zMjYtXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg9MzMzPXN0YXRpYyBpbmxpbmUgcG1kX3Qgc3dwX2VudHJ5X3RvX3BtZChzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTM0MS0jZWxzZSAgLyogQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGICovXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzQyOnN0YXRpYyBpbmxpbmUgaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDMtXFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwMzE9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxOTItXFx0XFx0ICogbWFuYWdlZCB0byBjbGVhciBQYWdlQW5vbkV4Y2x1c2l2ZSgpIC0tIHNlZVxcbm1tL2h1Z2VfbWVtb3J5LmM6MzE5MzpcXHRcXHQgKiBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeSgpLlxcbm1tL2h1Z2VfbWVtb3J5LmMtMzE5NC1cXHRcXHQgKlxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00ODY0PWxhdGVfaW5pdGNhbGwoc3BsaXRfaHVnZV9wYWdlc19kZWJ1Z2ZzKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg2Ny0jaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1NPRlRMRUFGXFxubW0vaHVnZV9tZW1vcnkuYzo0ODY4OmludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxubW0vaHVnZV9tZW1vcnkuYy00ODY5LVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYz0xMzY9c3RhdGljIGludCBtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kKHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0yMTMtXFx0XFx0bWlncmF0ZS1cXHUwMDNlY3BhZ2VzKys7XFxubW0vbWlncmF0ZV9kZXZpY2UuYzoyMTQ6XFx0XFx0cmV0ID0gc2V0X3BtZF9taWdyYXRpb25fZW50cnkoXFx1MDAyNnB2bXcsIGZvbGlvX3BhZ2UoZm9saW8sIDApKTtcXG5tbS9taWdyYXRlX2RldmljZS5jLTIxNS1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5tbS9ybWFwLmM9MjQxMD1zdGF0aWMgYm9vbCB0cnlfdG9fbWlncmF0ZV9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9ybWFwLmMtMjQ4Ni1cXG5tbS9ybWFwLmM6MjQ4NzpcXHRcXHRcXHRpZiAoc2V0X3BtZF9taWdyYXRpb25fZW50cnkoXFx1MDAyNnB2bXcsIHN1YnBhZ2UpKSB7XFxubW0vcm1hcC5jLTI0ODgtXFx0XFx0XFx0XFx0cmV0ID0gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjE0OjMwLjM0OTkyOTA2NVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzkwNTUwMDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCBkZWxpdmVyZWQgYXMgYSBmaXJzdC1wZXJzb24gc3VtbWFyeTpcblxuKipSZWFjaGluZyBhIENydWNpYWwgUG9pbnQgaW4gUE1EIE1pZ3JhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeWAgaXMgZGVmaW5pdGVseSByZWFjaGFibGU7IHRoYXQncyBnb29kLiBOb3cgdGhhdCBJJ3ZlIGNvbmZpcm1lZCB0aGF0LCBJIG5lZWQgdG8gc2hpZnQgZm9jdXMuIE15IG5leHQgbG9naWNhbCBzdGVwIGluIHRoaXMgd29ya2Zsb3cgaXMgdG8gZGVlcGx5IGFuYWx5emUgYHJlbW92ZV9taWdyYXRpb25fcG1kYC4gVGhpcyBmdW5jdGlvbiBpcyBwaXZvdGFsLCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1pZ3JhdGlvbiBzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBiZWhhdmlvciB0aG9yb3VnaGx5IGJlZm9yZSBJIHByb2NlZWQgd2l0aCBhbnkgZnVydGhlciBkZWJ1Z2dpbmcgb3Igb3B0aW1pemF0aW9uLCBhcyByZW1vdmluZyB0aGUgd3JvbmcgZW50cmllcyB3aWxsIGJyZWFrIGV2ZXJ5dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NTQ1LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6MzQuMTQwNDg0MjY4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc5NzI4NjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlbW92ZV9taWdyYXRpb25fcG1kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTMyNT1leHRlcm4gaW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyNy1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaDozMjg6ZXh0ZXJuIHZvaWQgcmVtb3ZlX21pZ3JhdGlvbl9wbWQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oLTMyOS1cXHRcXHRzdHJ1Y3QgcGFnZSAqbmV3KTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcG9wcy5oPTM0Mj1zdGF0aWMgaW5saW5lIGludCBzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeShzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3N3YXBvcHMuaC0zNDctXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmg6MzQ4OnN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsXFxuaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgtMzQ5LVxcdFxcdHN0cnVjdCBwYWdlICpuZXcpXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90aHAuaD05MD1ERUZJTkVfRVZFTlQobWlncmF0aW9uX3BtZCwgc2V0X21pZ3JhdGlvbl9wbWQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90aHAuaC05NC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy90aHAuaDo5NTpERUZJTkVfRVZFTlQobWlncmF0aW9uX3BtZCwgcmVtb3ZlX21pZ3JhdGlvbl9wbWQsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdGhwLmgtOTYtXFx0VFBfUFJPVE8odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBtZCksXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ4Njg9aW50IHNldF9wbWRfbWlncmF0aW9uX2VudHJ5KHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdyxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDk0MS1cXG5tbS9odWdlX21lbW9yeS5jOjQ5NDI6dm9pZCByZW1vdmVfbWlncmF0aW9uX3BtZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHN0cnVjdCBwYWdlICpuZXcpXFxubW0vaHVnZV9tZW1vcnkuYy00OTQzLXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNTAwMi1cXHR1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsIHB2bXctXFx1MDAzZXBtZCk7XFxubW0vaHVnZV9tZW1vcnkuYzo1MDAzOlxcdHRyYWNlX3JlbW92ZV9taWdyYXRpb25fcG1kKGFkZHJlc3MsIHBtZF92YWwocG1kZSkpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNTAwNC19XFxuLS1cXG5tbS9taWdyYXRlLmM9MzQ2PXN0YXRpYyBib29sIHJlbW92ZV9taWdyYXRpb25fcHRlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMzY5LVxcdFxcdFxcdFxcdFxcdCFmb2xpb190ZXN0X3BtZF9tYXBwYWJsZShmb2xpbyksIGZvbGlvKTtcXG5tbS9taWdyYXRlLmM6MzcwOlxcdFxcdFxcdHJlbW92ZV9taWdyYXRpb25fcG1kKFxcdTAwMjZwdm13LCBuZXcpO1xcbm1tL21pZ3JhdGUuYy0zNzEtXFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjE0OjM5LjAyMDIyODQ5NFoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY2OTQxNTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipSZWFjaGluZyB0aGUgTWlncmF0aW9uIFBvaW50KipcblxuQWxyaWdodCwgc28gYHJlbW92ZV9taWdyYXRpb25fcG1kYCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gSSd2ZSBjb25maXJtZWQgdGhhdCBwYXRod2F5LiBOb3csIG15IGZvY3VzIHNoaWZ0cyB0byB0aGUgYG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGluIHRoZSBjb250ZXh0IG9mIHRoaXMgbWlncmF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBkaWcgaW50byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGh1Z2UgUE1EIGluc2VydGlvbi4gSSBleHBlY3QgdGhlcmUgaXMgc29tZSBpbnRlcnBsYXkgaGVyZSB0aGF0IEknbGwgaGF2ZSB0byBmdWxseSBncmFzcC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIGxpa2VseSByZXNpZGUsIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3QgaXMgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzNzcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDo0My4wODcxNzQ2NTlaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODYwMDM1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2VcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZV9kZXZpY2UuYz03NzI9RVhQT1JUX1NZTUJPTChtaWdyYXRlX3ZtYV9zZXR1cCk7XFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTc3NS0vKipcXG5tbS9taWdyYXRlX2RldmljZS5jOjc3NjogKiBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZTogSW5zZXJ0IGEgaHVnZSBmb2xpbyBpbnRvIEBtaWdyYXRlLVxcdTAwM2V2bWEtXFx1MDAzZXZtX21tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03NzctICogYXQgQGFkZHIuIGZvbGlvIGlzIGFscmVhZHkgYWxsb2NhdGVkIGFzIGEgcGFydCBvZiB0aGUgbWlncmF0aW9uIHByb2Nlc3Mgd2l0aFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03ODktICovXFxubW0vbWlncmF0ZV9kZXZpY2UuYzo3OTA6c3RhdGljIGludCBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy03OTEtXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21pZ3JhdGVfZGV2aWNlLmM9OTA0PXN0YXRpYyBpbnQgbWlncmF0ZV92bWFfc3BsaXRfdW5tYXBwZWRfZm9saW8oc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbi0tXFxubW0vbWlncmF0ZV9kZXZpY2UuYy05MjktI2Vsc2UgLyogIUNPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiAqL1xcbm1tL21pZ3JhdGVfZGV2aWNlLmM6OTMwOnN0YXRpYyBpbnQgbWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2Uoc3RydWN0IG1pZ3JhdGVfdm1hICptaWdyYXRlLFxcbm1tL21pZ3JhdGVfZGV2aWNlLmMtOTMxLVxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jPTk2OD1zdGF0aWMgdm9pZCBtaWdyYXRlX3ZtYV9pbnNlcnRfcGFnZShzdHJ1Y3QgbWlncmF0ZV92bWEgKm1pZ3JhdGUsXFxuLS1cXG5tbS9taWdyYXRlX2RldmljZS5jLTEwMDItXFx0aWYgKHRocF9taWdyYXRpb25fc3VwcG9ydGVkKCkgXFx1MDAyNlxcdTAwMjYgKCpkc3QgXFx1MDAyNiBNSUdSQVRFX1BGTl9DT01QT1VORCkpIHtcXG5tbS9taWdyYXRlX2RldmljZS5jOjEwMDM6XFx0XFx0aW50IHJldCA9IG1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlKG1pZ3JhdGUsIGFkZHIsIHBhZ2UsXFxubW0vbWlncmF0ZV9kZXZpY2UuYy0xMDA0LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNyYywgcG1kcCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDAwOjE0OjQ3LjQ3MzE4ODA0M1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMwMTk2MzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIEkndmUgZ290IGl0LiBZZXMsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBjYW4gd29yayB3aXRoOyB0aGUgcHJvYmxlbSBpcyByZWFjaGFibGUuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBzcGVjaWZpY3MgYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhlIGtleSBhcmVhIHRvIGV4YW1pbmUgaXMgYG1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllc2AuIExldCdzIGZvY3VzIG91ciBhdHRlbnRpb24gdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDI3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTQ6NTEuNDAzMzkwMzIxWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc3NzYwOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tX3ByZXBhcmVfZm9yX3N3YXBfZW50cmllc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9pbnRlcm5hbC5oPTE5NTY9Ym9vbCBtYXlfZXhwYW5kX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xOTYxLSAqL1xcbm1tL2ludGVybmFsLmg6MTk2MjpzdGF0aWMgaW5saW5lIHZvaWQgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL2ludGVybmFsLmgtMTk2My17XFxuLS1cXG5tbS9tZW1vcnkuYz05NDE9Y29weV9ub25wcmVzZW50X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL21lbW9yeS5jLTk1NS1cXG5tbS9tZW1vcnkuYzo5NTY6XFx0XFx0bW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzKGRzdF9tbSk7XFxubW0vbWVtb3J5LmMtOTU3LVxcdFxcdC8qIE1hcmsgdGhlIHN3YXAgZW50cnkgYXMgc2hhcmVkLiAqL1xcbi0tXFxubW0vcm1hcC5jPTE5ODQ9c3RhdGljIGJvb2wgdHJ5X3RvX3VubWFwX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3JtYXAuYy0yMzA2LVxcdFxcdFxcdH1cXG5tbS9ybWFwLmM6MjMwNzpcXHRcXHRcXHRtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMobW0pO1xcbm1tL3JtYXAuYy0yMzA4LVxcdFxcdFxcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwMDoxNDo1NS41ODExNjU2MTVaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1NzkyMjQyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFRIUCBNaWdyYXRpb24gYW5kIERldmljZSBNZW1vcnkgQ2hhbmdlcyoqXG5cbk9rYXksIHJlYWNoYWJsZS4gTGV0J3MgZGlnIGludG8gdGhpcy4gTXkgaW5pdGlhbCBmb2N1cyBpcyBvbiB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIG1pZ3JhdGlvbiBhbmQgZGV2aWNlIG1lbW9yeSBtYW5hZ2VtZW50LiBJJ3ZlIGlkZW50aWZpZWQgdGhlIGZvbGxvd2luZzpcblxuKiAgIGBwYWdlbWFwX3BtZF9yYW5nZV90aHBgXG4qICAgYG1pZ3JhdGVfdm1hX2NvbGxlY3RfaHVnZV9wbWRgXG4qICAgYGNoYW5nZV9ub25fcHJlc2VudF9odWdlX3BtZGBcbiogICBgc2V0X3BtZF9taWdyYXRpb25fZW50cnlgXG4qICAgYHJlbW92ZV9taWdyYXRpb25fcG1kYFxuKiAgIGBtaWdyYXRlX3ZtYV9pbnNlcnRfaHVnZV9wbWRfcGFnZWBcblxuSSBpbml0aWFsbHkgY29uc2lkZXJlZCBgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzYCwgYnV0IHNpbmNlIGl0J3MgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uLCBpdCdzIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBmb2N1cyBwb2ludC4gSSBhbHNvIGV4Y2x1ZGVkIGB0cnlfdG9fdW5tYXBfb25lYCBhbmQgYGNvcHlfbm9ucHJlc2VudF9wdGVgIGJlY2F1c2UgdGhleSBhcmUgdmVyeSBob3QgcGF0aCBmdW5jdGlvbnMgYW5kIHdvdWxkIGxpa2VseSBqdXN0IG11ZGR5IHRoZSB3YXRlci5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlc2UgcmVtYWluaW5nIHN5bWJvbHMgYXJlbid0IHN0YXRpYyBpbmxpbmUuIENoZWNraW5nIGVhY2ggb25lLCB0aGV5IGFsbCBzZWVtIHRvIGJlIGVpdGhlciBzdGF0aWMgd2l0aGluIHRoZSBmaWxlLCBvciBleHBvcnRlZCBnbG9iYWxseS4gUGVyZmVjdC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBNeSB1bmRlcnN0YW5kaW5nIHNvIGZhciBzdWdnZXN0cyB0aGUgZm9sbG93aW5nIGFyZSBjcnVjaWFsOlxuXG4qICAgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYFxuKiAgIGBaT05FX0RFVklDRWBcbiogICBgREVWSUNFX1BSSVZBVEVgXG4qICAgYFRFU1RfSE1NYFxuXG5JIGRpZCBhIHNhbml0eSBjaGVjayBhbmQgc2F3IHRoYXQgYERFVklDRV9NSUdSQVRJT05gIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCB3aGVuIGBaT05FX0RFVklDRWAgaXMgc2V0LiBBbHNvLCBgSE1NX01JUlJPUmAgaXMgc2VsZWN0ZWQgYnkgYFRFU1RfSE1NYC5cblxuSSBhbHNvIGNvbmZpcm1lZCB0aGF0IGBDT05GSUdfTUlHUkFUSU9OYCBpcyBlbmFibGVkIGlmIGBOVU1BYCBvciBgQ09NUEFDVElPTmAgYXJlIGVuYWJsZWQsIGFuZCBgQ09ORklHX01NVWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LiBJIG5vdGljZWQgYENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRmAgaXMgc2VsZWN0ZWQgYnkgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LlxuXG5Ob3csIGxvb2tpbmcgYXQgdGhlIGJpZ2dlciBwaWN0dXJlLiBUaGUgcGF0Y2ggcmVuYW1lcyBgQ09ORklHX0FSQ0hfRU5BQkxFX1RIUF9NSUdSQVRJT05gIHRvIGBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUZgIGFuZCBpbnRyb2R1Y2VzIHRoZSBuZXcgZnVuY3Rpb25zIGBzb2Z0bGVhZl90b19wbWRgIGFuZCBgc29mdGxlYWZfZnJvbV9wbWRgIHRvIGRlYWwgd2l0aCBzb2Z0bGVhZiBlbnRyaWVzLiBUaGlzIGlzIHNpZ25pZmljYW50LiBJdCBhbHNvIGFpbXMgdG8gZml4IHBvdGVudGlhbCBidWdzIHRoYXQgbWlnaHQgb2NjdXIgd2hlbiBgc29mdGxlYWZfdG9fcGFnZWAgb3IgYHNvZnRsZWFmX3RvX2ZvbGlvYCBpcyBjYWxsZWQgb24gZW50cmllcyB3aXRob3V0IGEgUEZOIG9yIG5vbi1kZXZpY2UtcHJpdmF0ZSBlbnRyaWVzLiBUaGlzIG1lYW5zIHRoZXJlJ3MgYSBjb3JyZWN0aW9uIG9mIGltcHJvcGVyIFRIUCBtaWdyYXRpb24sIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIGhvdyB0aGVzZSBwYWdlcyBhcmUgaGFuZGxlZC4gTGFzdGx5LCB0aGUgaW5jbHVzaW9uIG9mIGBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXNgIGVuc3VyZXMgdGhhdCB0aGUgYG1tYCBzdHJ1Y3R1cmUgaXMgb24gYGluaXRfbW0ubW1saXN0YCBiZWZvcmUgc3dhcCBlbnRyaWVzIGFyZSBhZGRlZC4gVGhpcyBzZWVtcyBsaWtlIGEgY3JpdGljYWwgcGllY2UgdG8gZW5zdXJlIHRoZSBgbW1gIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBiZWZvcmUgc3dhcCBlbnRyaWVzIGFyZSBhZGRlZC5cblxuU28gb3ZlcmFsbCwgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgc2VyaWVzIG9mIGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQgcmVmYWN0b3JpbmcsIGltcHJvdmluZyBtZW1vcnkgbWFuYWdlbWVudCwgVEhQIG1pZ3JhdGlvbiwgYW5kIHBvdGVudGlhbGx5IGRldmljZSBtZW1vcnkgbWlncmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDQ4MSwiT3V0cHV0VG9rZW5zIjoyODksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDA6MTU6MDguMTYwMzk1ODg5WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2OTc5MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIixcbiAgICBcIkRFVklDRV9QUklWQVRFXCIsXG4gICAgXCJURVNUX0hNTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBhZ2VtYXBfcG1kX3JhbmdlX3RocFwiLFxuICAgIFwibWlncmF0ZV92bWFfY29sbGVjdF9odWdlX3BtZFwiLFxuICAgIFwiY2hhbmdlX25vbl9wcmVzZW50X2h1Z2VfcG1kXCIsXG4gICAgXCJzZXRfcG1kX21pZ3JhdGlvbl9lbnRyeVwiLFxuICAgIFwicmVtb3ZlX21pZ3JhdGlvbl9wbWRcIixcbiAgICBcIm1pZ3JhdGVfdm1hX2luc2VydF9odWdlX3BtZF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVuYW1lcyBDT05GSUdfQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTiB0byBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfU09GVExFQUYgYW5kIGludHJvZHVjZXMgc29mdGxlYWZfdG9fcG1kIGFuZCBzb2Z0bGVhZl9mcm9tX3BtZCB0byBoYW5kbGUgc29mdGxlYWYgZW50cmllcy4gSXQgYWxzbyBmaXhlcyBwb3RlbnRpYWwgYnVncyB3aGVyZSBzb2Z0bGVhZl90b19wYWdlIG9yIHNvZnRsZWFmX3RvX2ZvbGlvIGlzIGNhbGxlZCBvbiBlbnRyaWVzIHdpdGhvdXQgYSBQRk4gb3Igbm9uLWRldmljZS1wcml2YXRlIGVudHJpZXMgaW4gZnMvcHJvYy90YXNrX21tdS5jIGFuZCBtbS9taWdyYXRlX2RldmljZS5jLiBJdCBhbHNvIGludHJvZHVjZXMgbW1fcHJlcGFyZV9mb3Jfc3dhcF9lbnRyaWVzIHRvIGVuc3VyZSBtbSBpcyBvbiBpbml0X21tLm1tbGlzdCBiZWZvcmUgYWRkaW5nIHN3YXAgZW50cmllcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IGFmZmVjdCBtZW1vcnkgbWFuYWdlbWVudCwgVEhQIG1pZ3JhdGlvbiwgYW5kIGRldmljZSBtZW1vcnkgbWlncmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJaT05FX0RFVklDRVwiLFxuICAgIFwiREVWSUNFX1BSSVZBVEVcIixcbiAgICBcIlRFU1RfSE1NXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGFnZW1hcF9wbWRfcmFuZ2VfdGhwXCIsXG4gICAgXCJtaWdyYXRlX3ZtYV9jb2xsZWN0X2h1Z2VfcG1kXCIsXG4gICAgXCJjaGFuZ2Vfbm9uX3ByZXNlbnRfaHVnZV9wbWRcIixcbiAgICBcInNldF9wbWRfbWlncmF0aW9uX2VudHJ5XCIsXG4gICAgXCJyZW1vdmVfbWlncmF0aW9uX3BtZFwiLFxuICAgIFwibWlncmF0ZV92bWFfaW5zZXJ0X2h1Z2VfcG1kX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZW5hbWVzIENPTkZJR19BUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OIHRvIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9TT0ZUTEVBRiBhbmQgaW50cm9kdWNlcyBzb2Z0bGVhZl90b19wbWQgYW5kIHNvZnRsZWFmX2Zyb21fcG1kIHRvIGhhbmRsZSBzb2Z0bGVhZiBlbnRyaWVzLiBJdCBhbHNvIGZpeGVzIHBvdGVudGlhbCBidWdzIHdoZXJlIHNvZnRsZWFmX3RvX3BhZ2Ugb3Igc29mdGxlYWZfdG9fZm9saW8gaXMgY2FsbGVkIG9uIGVudHJpZXMgd2l0aG91dCBhIFBGTiBvciBub24tZGV2aWNlLXByaXZhdGUgZW50cmllcyBpbiBmcy9wcm9jL3Rhc2tfbW11LmMgYW5kIG1tL21pZ3JhdGVfZGV2aWNlLmMuIEl0IGFsc28gaW50cm9kdWNlcyBtbV9wcmVwYXJlX2Zvcl9zd2FwX2VudHJpZXMgdG8gZW5zdXJlIG1tIGlzIG9uIGluaXRfbW0ubW1saXN0IGJlZm9yZSBhZGRpbmcgc3dhcCBlbnRyaWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYWZmZWN0IG1lbW9yeSBtYW5hZ2VtZW50LCBUSFAgbWlncmF0aW9uLCBhbmQgZGV2aWNlIG1lbW9yeSBtaWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6jdh2[1] Phase: Succeeded StartedAt: 2026-07-01 00:15:20 +0000 UTC FinishedAt: 2026-07-01 00:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 00:15:20 +0000 UTC FinishedAt: 2026-07-01 00:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2] Phase: Succeeded StartedAt: 2026-07-01 00:15:20 +0000 UTC FinishedAt: 2026-07-01 04:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:15:20 +0000 UTC FinishedAt: 2026-07-01 04:39:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:15:20 +0000 UTC FinishedAt: 2026-07-01 00:15:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:15:20 +0000 UTC FinishedAt: 2026-07-01 00:15:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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-workflow6jdh2/series-workflow6jdh2-convert-artifact-537268259/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:15:31 +0000 UTC FinishedAt: 2026-07-01 00:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:15:31 +0000 UTC FinishedAt: 2026-07-01 00:54:33 +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:*4031ee1d-2333-41cc-af40-61a41a73db7a,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-workflow6jdh2/series-workflow6jdh2-convert-artifact-537268259/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": "7068fbd6-4a6b-4d9b-a7a7-e41c7632f87d", "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-workflow6jdh2/series-workflow6jdh2-build-action-3821206484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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: Failed StartedAt: 2026-07-01 00:15:31 +0000 UTC FinishedAt: 2026-07-01 00:20:27 +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:*4031ee1d-2333-41cc-af40-61a41a73db7a,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-workflow6jdh2/series-workflow6jdh2-convert-artifact-537268259/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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(1) Phase: Succeeded StartedAt: 2026-07-01 00:25:53 +0000 UTC FinishedAt: 2026-07-01 00:54:21 +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:*4031ee1d-2333-41cc-af40-61a41a73db7a,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-workflow6jdh2/series-workflow6jdh2-convert-artifact-537268259/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": "7068fbd6-4a6b-4d9b-a7a7-e41c7632f87d", "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-workflow6jdh2/series-workflow6jdh2-build-action-3821206484/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:54:33 +0000 UTC FinishedAt: 2026-07-01 00:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:54:33 +0000 UTC FinishedAt: 2026-07-01 00:54:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:54:33 +0000 UTC FinishedAt: 2026-07-01 00:54:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:54:33 +0000 UTC FinishedAt: 2026-07-01 00:54:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-workflow6jdh2/series-workflow6jdh2-convert-artifact-2804190810/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:54:59 +0000 UTC FinishedAt: 2026-07-01 00:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:54:59 +0000 UTC FinishedAt: 2026-07-01 00:56:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7068fbd6-4a6b-4d9b-a7a7-e41c7632f87d,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-workflow6jdh2/series-workflow6jdh2-build-action-3821206484/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-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:57:04 +0000 UTC FinishedAt: 2026-07-01 00:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:57:04 +0000 UTC FinishedAt: 2026-07-01 00:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:57:04 +0000 UTC FinishedAt: 2026-07-01 01:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 00:57:04 +0000 UTC FinishedAt: 2026-07-01 01:34:37 +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:*4031ee1d-2333-41cc-af40-61a41a73db7a,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-workflow6jdh2/series-workflow6jdh2-convert-artifact-2804190810/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": "d8acdebc-928c-41c9-93ca-646eefceec10", "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-workflow6jdh2/series-workflow6jdh2-build-action-477616958/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 00:57:04 +0000 UTC FinishedAt: 2026-07-01 01:33:45 +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:*4031ee1d-2333-41cc-af40-61a41a73db7a,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-workflow6jdh2/series-workflow6jdh2-convert-artifact-2804190810/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": "d8acdebc-928c-41c9-93ca-646eefceec10", "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-workflow6jdh2/series-workflow6jdh2-build-action-477616958/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:34:37 +0000 UTC FinishedAt: 2026-07-01 01:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:34:37 +0000 UTC FinishedAt: 2026-07-01 01:34:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:34:37 +0000 UTC FinishedAt: 2026-07-01 01:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:34:37 +0000 UTC FinishedAt: 2026-07-01 01:36:29 +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:*d8acdebc-928c-41c9-93ca-646eefceec10,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-workflow6jdh2/series-workflow6jdh2-build-action-477616958/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-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:36:39 +0000 UTC FinishedAt: 2026-07-01 04:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:36:39 +0000 UTC FinishedAt: 2026-07-01 04:39:40 +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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_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:*7068fbd6-4a6b-4d9b-a7a7-e41c7632f87d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d8acdebc-928c-41c9-93ca-646eefceec10,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-workflow6jdh2/series-workflow6jdh2-build-action-3821206484/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-workflow6jdh2/series-workflow6jdh2-build-action-477616958/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:36:39 +0000 UTC FinishedAt: 2026-07-01 01:37:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:36:39 +0000 UTC FinishedAt: 2026-07-01 01:36:48 +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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_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-workflow6jdh2/series-workflow6jdh2-convert-artifact-2293313807/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:36:39 +0000 UTC FinishedAt: 2026-07-01 01:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:36:39 +0000 UTC FinishedAt: 2026-07-01 01:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:36:39 +0000 UTC FinishedAt: 2026-07-01 01:36:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:37:02 +0000 UTC FinishedAt: 2026-07-01 04:39:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6jdh2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"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":["pagemap_pmd_range_thp","migrate_vma_collect_huge_pmd","change_non_present_huge_pmd","set_pmd_migration_entry","remove_migration_pmd","migrate_vma_insert_huge_pmd_page"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"15654b0268cd65b4e673510c0377774e61b86397","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ZONE_DEVICE","DEVICE_PRIVATE","TEST_HMM"],"series_id":"85ebeb18-1e25-4ed2-85f2-e11fbf9bab60","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-01 01:37:02 +0000 UTC FinishedAt: 2026-07-01 04:39:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7068fbd6-4a6b-4d9b-a7a7-e41c7632f87d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d8acdebc-928c-41c9-93ca-646eefceec10,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-workflow6jdh2/series-workflow6jdh2-build-action-3821206484/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-workflow6jdh2/series-workflow6jdh2-build-action-477616958/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-workflow6jdh2/series-workflow6jdh2-convert-artifact-2293313807/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,}