Name: series-workflowsfl9s Phase: Succeeded StartedAt: 2026-08-10 05:26:01 +0000 UTC FinishedAt: 2026-08-10 09:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[0] Phase: Succeeded StartedAt: 2026-08-10 05:26:01 +0000 UTC FinishedAt: 2026-08-10 06:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 05:26:01 +0000 UTC FinishedAt: 2026-08-10 06:00:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "59bcab85-7644-4d49-a5b3-a4b5e3f49cb2" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_mprog_attach", "dev_change_xdp_fd", "bpf_xdp_link_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7ZGV2X2NoYW5nZV94ZHBfZmQmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcmVqZWN0IGludmFsaWQgQlBGIHByb2dyYW0gYXR0YWNobWVudHMgKGUuZy4sIGRldmljZS1ib3VuZCBvciBvZmZsb2FkZWQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlIG9yIFNDSEVEX0NMUykuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb250cm9sIGZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFsbG9jYXRlIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBtaXNzaW5nIHRoZXNlIGNoZWNrcyB3b3VsZCBtYW5pZmVzdCBhcyBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmNvcnJlY3QgYmVoYXZpb3IsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGRldmljZS1ib3VuZCBCUEYgcHJvZ3JhbXMgY291bGQgYmUgYXR0YWNoZWQgdG8gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoIGJ5IGJ5cGFzc2luZyBjaGVja3MgZHVyaW5nIGxpbmsgdXBkYXRlcy4gSXQgbW92ZXMgdGhlIHZhbGlkYXRpb24gY2hlY2tzIGludG8gYGRldl94ZHBfaW5zdGFsbGAgYW5kIGFkZHMgYSBjaGVjayB0byBgYnBmX21wcm9nX2NoZWNrX3Byb2dgIHRvIHJlamVjdCBvZmZsb2FkZWQgcHJvZ3JhbXMgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgYW5kIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdGhlIG5vbi1zdGF0aWMgY29udHJvbC1wbGFuZSBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZXNlIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBiZjMzMGQ3MWY4MjU2ODYzZTI3NzU3ZjBkMTg3Y2ViOGI1NzZhODdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwNTo1Mjo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21wcm9nLmMgYi9rZXJuZWwvYnBmL21wcm9nLmNcbmluZGV4IDEzOTQxNjgwNjJlODUuLjBiNTA0NjRlYzkwMmQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbXByb2cuY1xuQEAgLTIyMiw2ICYjNDM7MjIyLDE0IEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX3Bvc19hZnRlcihzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdHJldHVybiB0dXBsZS1cdTAwM2Vwcm9nID8gLUVOT0VOVCA6IGJwZl9tcHJvZ190b3RhbChlbnRyeSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGJwZl9tcHJvZ19jaGVja19wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjNDM7e1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGJwZl9wcm9nX2lzX29mZmxvYWRlZChwcm9nLVx1MDAzZWF1eCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuIFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZ19uZXcsIHN0cnVjdCBicGZfbGluayAqbGluayxcbkBAIC0yMzcsNiAmIzQzOzI0NSw5IEBAIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0fTtcbiBcdGludCByZXQsIGlkeCA9IC1FUkFOR0UsIHRpZHg7XG4gXG4mIzQzO1x0cmV0ID0gYnBmX21wcm9nX2NoZWNrX3Byb2cocHJvZ19uZXcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0aWYgKHJldmlzaW9uIFx1MDAyNlx1MDAyNiByZXZpc2lvbiAhPSBicGZfbXByb2dfcmV2aXNpb24oZW50cnkpKVxuIFx0XHRyZXR1cm4gLUVTVEFMRTtcbiBcdGlmIChicGZfbXByb2dfZXhpc3RzKGVudHJ5LCBwcm9nX25ldykpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggYWYyNjBmZjU0NjJhNi4uMzI4MWYyMjZjMWU1MiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTEwMzI5LDYgJiM0MzsxMDMyOSwyMSBAQCBzdGF0aWMgaW50IGRldl94ZHBfaW5zdGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIGJwZl94ZHBfbW9kZSBtb2RlLFxuIFxuIFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChkZXYpO1xuIFxuJiM0MztcdGlmIChwcm9nKSB7XG4mIzQzO1x0XHRpZiAobW9kZSAhPSBYRFBfTU9ERV9IVyBcdTAwMjZcdTAwMjYgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctXHUwMDNlYXV4KSkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1VzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cdTAwM2VhdXgpIFx1MDAyNlx1MDAyNiAhYnBmX29mZmxvYWRfZGV2X21hdGNoKHByb2csIGRldikpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtQcm9ncmFtIGJvdW5kIHRvIGRpZmZlcmVudCBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cdTAwM2VhdXgpIFx1MDAyNlx1MDAyNiBtb2RlID09IFhEUF9NT0RFX1NLQikge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0NhbiYjMzk7dCBhdHRhY2ggZGV2aWNlLWJvdW5kIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoZGV2LVx1MDAzZWNmZy1cdTAwM2VoZHNfY29uZmlnID09IEVUSFRPT0xfVENQX0RBVEFfU1BMSVRfRU5BQkxFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICBwcm9nIFx1MDAyNlx1MDAyNiAhcHJvZy1cdTAwM2VhdXgtXHUwMDNleGRwX2hhc19mcmFncykge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3VuYWJsZSB0byBpbnN0YWxsIFhEUCB0byBkZXZpY2UgdXNpbmcgdGNwLWRhdGEtc3BsaXRcJiMzNDspO1xuQEAgLTEwNDgwLDE4ICYjNDM7MTA0OTUsNiBAQCBzdGF0aWMgaW50IGRldl94ZHBfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TmF0aXZlIGFuZCBnZW5lcmljIFhEUCBjYW4mIzM5O3QgYmUgYWN0aXZlIGF0IHRoZSBzYW1lIHRpbWVcJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHR9XG4tXHRcdGlmICghb2ZmbG9hZCBcdTAwMjZcdTAwMjYgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKG5ld19wcm9nLVx1MDAzZWF1eCkpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1VzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQobmV3X3Byb2ctXHUwMDNlYXV4KSBcdTAwMjZcdTAwMjYgIWJwZl9vZmZsb2FkX2Rldl9tYXRjaChuZXdfcHJvZywgZGV2KSkge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7UHJvZ3JhbSBib3VuZCB0byBkaWZmZXJlbnQgZGV2aWNlXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0XHRpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLVx1MDAzZWF1eCkgXHUwMDI2XHUwMDI2IG1vZGUgPT0gWERQX01PREVfU0tCKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDYW4mIzM5O3QgYXR0YWNoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGVcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4gXHRcdGlmIChuZXdfcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfWERQX0RFVk1BUCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7QlBGX1hEUF9ERVZNQVAgcHJvZ3JhbXMgY2FuIG5vdCBiZSBhdHRhY2hlZCB0byBhIGRldmljZVwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xuaW5kZXggN2RkMThjNmQwNmM2MC4uNGExM2Y4ZWM0MzAwOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xuQEAgLTEsOSAmIzQzOzEsMTEgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2xpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldHdvcmtfaGVscGVycy5oXHUwMDNlXG4gXG4gI2RlZmluZSBMT0NBTF9ORVROUyBcJiMzNDt4ZHBfZGV2X2JvdW5kX29ubHlfbmV0bnNcJiMzNDtcbiYjNDM7I2RlZmluZSBMSU5LX1VQREFURV9ORVROUyBcJiMzNDt4ZHBfZGV2X2JvdW5kX29ubHlfbHVfbmV0bnNcJiMzNDtcbiBcbiBzdGF0aWMgaW50IGxvYWRfZHVtbXlfcHJvZyhjaGFyICpuYW1lLCBfX3UzMiBpZmluZGV4LCBfX3UzMiBmbGFncylcbiB7XG5AQCAtNTksMyAmIzQzOzYxLDUwIEBAIHZvaWQgdGVzdF94ZHBfZGV2X2JvdW5kX29ubHlfb2ZmZGV2KHZvaWQpXG4gXHQgKi9cbiBcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsIFwmIzM0OyBMT0NBTF9ORVROUyk7XG4gfVxuJiM0MztcbiYjNDM7LyogQSBkZXZpY2UtYm91bmQgcHJvZ3JhbSBtdXN0IG5vdCBydW4gb24gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoLlxuJiM0MzsgKiBkZXZfeGRwX2F0dGFjaCgpIHJlamVjdGVkIHN1Y2ggcHJvZ3JhbXMsIGJ1dCBicGZfeGRwX2xpbmtfdXBkYXRlKCkgcmVhY2hlc1xuJiM0MzsgKiBkZXZfeGRwX2luc3RhbGwoKSBkaXJlY3RseSBhbmQgYnlwYXNzZXMgaXQsIHNvIHRoZSBjaGVjayBoYXMgdG8gbGl2ZSBpblxuJiM0MzsgKiBkZXZfeGRwX2luc3RhbGwoKS4gQ3JlYXRlIGEgZ2VuZXJpYyAoU0tCKSBYRFAgbGluayB3aXRoIGEgbm9ybWFsIHByb2dyYW0sXG4mIzQzOyAqIHRoZW4gdHJ5IHRvIHN3YXAgaW4gYSBkZXZpY2UtYm91bmQgcHJvZ3JhbSB2aWEgQlBGX0xJTktfVVBEQVRFLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9saW5rX3VwZGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX2xpbmtfY3JlYXRlX29wdHMsIGxvcHRzLCAuZmxhZ3MgPSBYRFBfRkxBR1NfU0tCX01PREUpO1xuJiM0MztcdGludCBiYXNlX2ZkID0gLTEsIGRldmJvdW5kX2ZkID0gLTEsIGxpbmtfZmQgPSAtMTtcbiYjNDM7XHRzdHJ1Y3QgbnN0b2tlbiAqdG9rID0gTlVMTDtcbiYjNDM7XHRfX3UzMiBpZmluZGV4O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFNZUyhvdXQsIFwmIzM0O2lwIG5ldG5zIGFkZCBcJiMzNDsgTElOS19VUERBVEVfTkVUTlMpO1xuJiM0MztcdHRvayA9IG9wZW5fbmV0bnMoTElOS19VUERBVEVfTkVUTlMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUih0b2ssIFwmIzM0O29wZW5fbmV0bnNcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdFNZUyhvdXQsIFwmIzM0O2lwIGxpbmsgYWRkIGV0aDQyIHR5cGUgdmV0aFwmIzM0Oyk7XG4mIzQzO1x0aWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O2V0aDQyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9ORVEoaWZpbmRleCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXhcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGRldmJvdW5kX2ZkID0gbG9hZF9kdW1teV9wcm9nKFwmIzM0O2RldmJvdW5kXCYjMzQ7LCBpZmluZGV4LCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGRldmJvdW5kX2ZkLCAwLCBcJiMzNDtsb2FkX2R1bW15X3Byb2cgZGV2Ym91bmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGJhc2VfZmQgPSBsb2FkX2R1bW15X3Byb2coXCYjMzQ7YmFzZVwmIzM0OywgMCwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoYmFzZV9mZCwgMCwgXCYjMzQ7bG9hZF9kdW1teV9wcm9nIGJhc2VcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGxpbmtfZmQgPSBicGZfbGlua19jcmVhdGUoYmFzZV9mZCwgaWZpbmRleCwgQlBGX1hEUCwgXHUwMDI2bG9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGxpbmtfZmQsIDAsIFwmIzM0O2JwZl9saW5rX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfdXBkYXRlKGxpbmtfZmQsIGRldmJvdW5kX2ZkLCBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcJiMzNDtsaW5rX3VwZGF0ZSBkZXZpY2UtYm91bmQgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGNsb3NlKGxpbmtfZmQpO1xuJiM0MztcdGNsb3NlKGJhc2VfZmQpO1xuJiM0MztcdGNsb3NlKGRldmJvdW5kX2ZkKTtcbiYjNDM7XHRjbG9zZV9uZXRucyh0b2spO1xuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsIFwmIzM0OyBMSU5LX1VQREFURV9ORVROUyk7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtkZXZfY2hhbmdlX3hkcF9mZCYjMzQ7LAogICAgJiMzNDticGZfeGRwX2xpbmtfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGRldmljZS1ib3VuZCBCUEYgcHJvZ3JhbXMgY291bGQgYmUgYXR0YWNoZWQgdG8gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoIGJ5IGJ5cGFzc2luZyBjaGVja3MgZHVyaW5nIGxpbmsgdXBkYXRlcy4gSXQgbW92ZXMgdGhlIHZhbGlkYXRpb24gY2hlY2tzIGludG8gYGRldl94ZHBfaW5zdGFsbGAgYW5kIGFkZHMgYSBjaGVjayB0byBgYnBmX21wcm9nX2NoZWNrX3Byb2dgIHRvIHJlamVjdCBvZmZsb2FkZWQgcHJvZ3JhbXMgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgYW5kIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdGhlIG5vbi1zdGF0aWMgY29udHJvbC1wbGFuZSBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZXNlIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiZjMzMGQ3MWY4MjU2ODYzZTI3NzU3ZjBkMTg3Y2ViOGI1NzZhODcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwNTo1Mjo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbXByb2cuYyBiL2tlcm5lbC9icGYvbXByb2cuYwppbmRleCAxMzk0MTY4MDYyZTg1Li4wYjUwNDY0ZWM5MDJkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tcHJvZy5jCkBAIC0yMjIsNiAmIzQzOzIyMiwxNCBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wb3NfYWZ0ZXIoc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksCiAJcmV0dXJuIHR1cGxlLSZndDtwcm9nID8gLUVOT0VOVCA6IGJwZl9tcHJvZ190b3RhbChlbnRyeSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGJwZl9tcHJvZ19jaGVja19wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTICZhbXA7JmFtcDsKJiM0MzsJICAgIGJwZl9wcm9nX2lzX29mZmxvYWRlZChwcm9nLSZndDthdXgpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCQkgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsCiAJCSAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX25ldywgc3RydWN0IGJwZl9saW5rICpsaW5rLApAQCAtMjM3LDYgJiM0MzsyNDUsOSBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIAl9OwogCWludCByZXQsIGlkeCA9IC1FUkFOR0UsIHRpZHg7CiAKJiM0MzsJcmV0ID0gYnBmX21wcm9nX2NoZWNrX3Byb2cocHJvZ19uZXcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAlpZiAocmV2aXNpb24gJmFtcDsmYW1wOyByZXZpc2lvbiAhPSBicGZfbXByb2dfcmV2aXNpb24oZW50cnkpKQogCQlyZXR1cm4gLUVTVEFMRTsKIAlpZiAoYnBmX21wcm9nX2V4aXN0cyhlbnRyeSwgcHJvZ19uZXcpKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhZjI2MGZmNTQ2MmE2Li4zMjgxZjIyNmMxZTUyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTAzMjksNiAmIzQzOzEwMzI5LDIxIEBAIHN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsCiAKIAluZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7CiAKJiM0MzsJaWYgKHByb2cpIHsKJiM0MzsJCWlmIChtb2RlICE9IFhEUF9NT0RFX0hXICZhbXA7JmFtcDsgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctJmd0O2F1eCkpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7VXNpbmcgb2ZmbG9hZGVkIHByb2dyYW0gd2l0aG91dCBIV19NT0RFIGZsYWcgaXMgbm90IHN1cHBvcnRlZCYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy0mZ3Q7YXV4KSAmYW1wOyZhbXA7ICFicGZfb2ZmbG9hZF9kZXZfbWF0Y2gocHJvZywgZGV2KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtQcm9ncmFtIGJvdW5kIHRvIGRpZmZlcmVudCBkZXZpY2UmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKHByb2ctJmd0O2F1eCkgJmFtcDsmYW1wOyBtb2RlID09IFhEUF9NT0RFX1NLQikgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtDYW4mIzM5O3QgYXR0YWNoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGUmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZGV2LSZndDtjZmctJmd0O2hkc19jb25maWcgPT0gRVRIVE9PTF9UQ1BfREFUQV9TUExJVF9FTkFCTEVEICZhbXA7JmFtcDsKIAkgICAgcHJvZyAmYW1wOyZhbXA7ICFwcm9nLSZndDthdXgtJmd0O3hkcF9oYXNfZnJhZ3MpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3VuYWJsZSB0byBpbnN0YWxsIFhEUCB0byBkZXZpY2UgdXNpbmcgdGNwLWRhdGEtc3BsaXQmIzM0Oyk7CkBAIC0xMDQ4MCwxOCAmIzQzOzEwNDk1LDYgQEAgc3RhdGljIGludCBkZXZfeGRwX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtOYXRpdmUgYW5kIGdlbmVyaWMgWERQIGNhbiYjMzk7dCBiZSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZSYjMzQ7KTsKIAkJCXJldHVybiAtRUVYSVNUOwogCQl9Ci0JCWlmICghb2ZmbG9hZCAmYW1wOyZhbXA7IGJwZl9wcm9nX2lzX29mZmxvYWRlZChuZXdfcHJvZy0mZ3Q7YXV4KSkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O1VzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQmIzM0Oyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLSZndDthdXgpICZhbXA7JmFtcDsgIWJwZl9vZmZsb2FkX2Rldl9tYXRjaChuZXdfcHJvZywgZGV2KSkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O1Byb2dyYW0gYm91bmQgdG8gZGlmZmVyZW50IGRldmljZSYjMzQ7KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChicGZfcHJvZ19pc19kZXZfYm91bmQobmV3X3Byb2ctJmd0O2F1eCkgJmFtcDsmYW1wOyBtb2RlID09IFhEUF9NT0RFX1NLQikgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0NhbiYjMzk7dCBhdHRhY2ggZGV2aWNlLWJvdW5kIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZSYjMzQ7KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJCWlmIChuZXdfcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1hEUF9ERVZNQVApIHsKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtCUEZfWERQX0RFVk1BUCBwcm9ncmFtcyBjYW4gbm90IGJlIGF0dGFjaGVkIHRvIGEgZGV2aWNlJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCmluZGV4IDdkZDE4YzZkMDZjNjAuLjRhMTNmOGVjNDMwMDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCkBAIC0xLDkgJiM0MzsxLDExIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogI2luY2x1ZGUgJmx0O25ldC9pZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9saW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldHdvcmtfaGVscGVycy5oJmd0OwogCiAjZGVmaW5lIExPQ0FMX05FVE5TICYjMzQ7eGRwX2Rldl9ib3VuZF9vbmx5X25ldG5zJiMzNDsKJiM0MzsjZGVmaW5lIExJTktfVVBEQVRFX05FVE5TICYjMzQ7eGRwX2Rldl9ib3VuZF9vbmx5X2x1X25ldG5zJiMzNDsKIAogc3RhdGljIGludCBsb2FkX2R1bW15X3Byb2coY2hhciAqbmFtZSwgX191MzIgaWZpbmRleCwgX191MzIgZmxhZ3MpCiB7CkBAIC01OSwzICYjNDM7NjEsNTAgQEAgdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZCkKIAkgKi8KIAlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICYjMzQ7IExPQ0FMX05FVE5TKTsKIH0KJiM0MzsKJiM0MzsvKiBBIGRldmljZS1ib3VuZCBwcm9ncmFtIG11c3Qgbm90IHJ1biBvbiB0aGUgWERQIHNvZnR3YXJlIHBhdGguCiYjNDM7ICogZGV2X3hkcF9hdHRhY2goKSByZWplY3RlZCBzdWNoIHByb2dyYW1zLCBidXQgYnBmX3hkcF9saW5rX3VwZGF0ZSgpIHJlYWNoZXMKJiM0MzsgKiBkZXZfeGRwX2luc3RhbGwoKSBkaXJlY3RseSBhbmQgYnlwYXNzZXMgaXQsIHNvIHRoZSBjaGVjayBoYXMgdG8gbGl2ZSBpbgomIzQzOyAqIGRldl94ZHBfaW5zdGFsbCgpLiBDcmVhdGUgYSBnZW5lcmljIChTS0IpIFhEUCBsaW5rIHdpdGggYSBub3JtYWwgcHJvZ3JhbSwKJiM0MzsgKiB0aGVuIHRyeSB0byBzd2FwIGluIGEgZGV2aWNlLWJvdW5kIHByb2dyYW0gdmlhIEJQRl9MSU5LX1VQREFURS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHRlc3RfeGRwX2Rldl9ib3VuZF9vbmx5X2xpbmtfdXBkYXRlKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfbGlua19jcmVhdGVfb3B0cywgbG9wdHMsIC5mbGFncyA9IFhEUF9GTEFHU19TS0JfTU9ERSk7CiYjNDM7CWludCBiYXNlX2ZkID0gLTEsIGRldmJvdW5kX2ZkID0gLTEsIGxpbmtfZmQgPSAtMTsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKnRvayA9IE5VTEw7CiYjNDM7CV9fdTMyIGlmaW5kZXg7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgbmV0bnMgYWRkICYjMzQ7IExJTktfVVBEQVRFX05FVE5TKTsKJiM0MzsJdG9rID0gb3Blbl9uZXRucyhMSU5LX1VQREFURV9ORVROUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUih0b2ssICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIGxpbmsgYWRkIGV0aDQyIHR5cGUgdmV0aCYjMzQ7KTsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7ZXRoNDImIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShpZmluZGV4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWRldmJvdW5kX2ZkID0gbG9hZF9kdW1teV9wcm9nKCYjMzQ7ZGV2Ym91bmQmIzM0OywgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsICYjMzQ7bG9hZF9kdW1teV9wcm9nIGRldmJvdW5kJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWJhc2VfZmQgPSBsb2FkX2R1bW15X3Byb2coJiMzNDtiYXNlJiMzNDssIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShiYXNlX2ZkLCAwLCAmIzM0O2xvYWRfZHVtbXlfcHJvZyBiYXNlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWxpbmtfZmQgPSBicGZfbGlua19jcmVhdGUoYmFzZV9mZCwgaWZpbmRleCwgQlBGX1hEUCwgJmFtcDtsb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGxpbmtfZmQsIDAsICYjMzQ7YnBmX2xpbmtfY3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9saW5rX3VwZGF0ZShsaW5rX2ZkLCBkZXZib3VuZF9mZCwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FSU5WQUwsICYjMzQ7bGlua191cGRhdGUgZGV2aWNlLWJvdW5kIHJlamVjdGVkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJY2xvc2UobGlua19mZCk7CiYjNDM7CWNsb3NlKGJhc2VfZmQpOwomIzQzOwljbG9zZShkZXZib3VuZF9mZCk7CiYjNDM7CWNsb3NlX25ldG5zKHRvayk7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTElOS19VUERBVEVfTkVUTlMpOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHRvdWNoZXMgYGtlcm5lbC9icGYvbXByb2cuY2AgYW5kIGBuZXQvY29yZS9kZXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIGlzc3VlcyByZWxhdGVkIHRvIEJQRiBwcm9ncmFtcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIG9mZmxvYWRlZCBhbmQgZGV2aWNlLWJvdW5kIHByb2dyYW1zIHdpdGhpbiB0aGUgWERQIGFuZCB0YyAodHJhZmZpYyBjb250cm9sKSBjb250ZXh0cy4gVGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIHRoaXMgb3JpZ2luYXRlZCBmcm9tIGEgc3l6LWNsdXN0ZXIgcmVwb3J0LCBzbyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIGl0IGFkZHJlc3NlcyBhIHJlYWwgdnVsbmVyYWJpbGl0eS4KCkxldCYjMzk7cyBicmVhayBkb3duIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJbiBga2VybmVsL2JwZi9tcHJvZy5jYCwgYSBuZXcgY2hlY2sgaGFzIGJlZW4gYWRkZWQgaW4gYGJwZl9tcHJvZ19jaGVja19wcm9nYC4gSXQgbG9va3MgbGlrZSBpdCByZWplY3RzIG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCwgd2hpY2ggaXMgcmVsZXZhbnQgdG8gdGN4LiBUaGlzIGZ1bmN0aW9uIGlzIHN1YnNlcXVlbnRseSBjYWxsZWQgYnkgYGJwZl9tcHJvZ19hdHRhY2hgLgoKVGhlbiwgd2UgaGF2ZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9kZXYuY2AuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW52b2x2ZSBtb3ZpbmcgY2hlY2tzIGZyb20gYGRldl94ZHBfYXR0YWNoYCB0byBgZGV2X3hkcF9pbnN0YWxsYC4gIFRoZXNlIGNoZWNrcyBhcmUgYXJvdW5kIGhvdyBvZmZsb2FkZWQgcHJvZ3JhbXMgYmVoYXZlIGluIFhEUCwgYW5kIHRoZXkgYXBwZWFyIHRvIGJlIGFkZHJlc3NpbmcgYSBjYXNlIHdoZXJlIGBicGZfeGRwX2xpbmtfdXBkYXRlYCBieXBhc3NlcyBgZGV2X3hkcF9hdHRhY2hgLCBhbmQgaW5zdGVhZCBkaXJlY3RseSByZWFjaGVzIGBkZXZfeGRwX2luc3RhbGxgLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgcHJvdGVjdGluZyB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgbWFraW5nIHN1cmUgdGhhdCBkZXZpY2UtYm91bmQgcHJvZ3JhbXMgY2FuJiMzOTt0IHJ1biB0aGVyZS4gSXQgYWxzbyBwcmV2ZW50cyBvZmZsb2FkZWQgcHJvZ3JhbXMgZnJvbSBiZWluZyB1c2VkIHdpdGggYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4KClNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBhcmU6CgoqICAgYGJwZl9tcHJvZ19hdHRhY2hgOiBUaGlzIGlzIHdoZXJlIHRoYXQgbmV3IGNoZWNrIGluIGBtcHJvZy5jYCBnZXRzIHRyaWdnZXJlZC4gSXQgc2VlbXMgaW1wb3J0YW50IHRvIHRyaWdnZXIgdGhlIHNwZWNpZmljIGVycm9yIGNhc2VzLgoqICAgYGRldl94ZHBfaW5zdGFsbGA6IFRoZSB0YXJnZXQgb2YgdGhlIGJ5cGFzcywgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29yZSBuZXcgY2hlY2tzIGFkZGVkIGhlcmUuCiogICBgYnBmX3hkcF9saW5rX3VwZGF0ZWA6IFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYnlwYXNzZXMgYGRldl94ZHBfYXR0YWNoYCwgc28gd29ydGggaW52ZXN0aWdhdGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNoZWNrcyBpbiBgZGV2X3hkcF9pbnN0YWxsYC4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCBgZGV2X3hkcF9pbnN0YWxsYCBpcyBzdGF0aWMsIHdoaWNoIGNhbiBjb21wbGljYXRlIGRpcmVjdCBmdXp6aW5nIG9mIGl0LCBidXQgZmluZGluZyB0aGUgY2FsbGVycyB3aWxsIGJlIGVzc2VudGlhbC4gYGJwZl9tcHJvZ19hdHRhY2hgIGlzIG5vdCBzdGF0aWMsIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byB0ZXN0LiBJdCBsb29rcyBsaWtlIGl0IGlzIGFuIGltcG9ydGFudCBmdW5jdGlvbiwgYW5kIHRoZSBuZXcgYWRkZWQgY2hlY2sgaW4gYGJwZl9tcHJvZ19jaGVja19wcm9nYCBtdXN0IGJlIGV2YWx1YXRlZC4KVGhlIGNoYW5nZSBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCB0b3VjaGVzIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGxvZ2ljLCBhbmQgdGhlIHN5ei1jbHVzdGVyIG9yaWdpbiBpbXBsaWVzIHRoYXQgaXQgaGFzIHNvbWUgcmVhbC13b3JsZCByZWxldmFuY2UuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc3BlY2lmaWNhbGx5IHRyaWdnZXIgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIHRob3NlIG5ldyBjaGVja3MgYmVpbmcgaGl0IHdpdGhpbiB0aGUgbmV3IGVycm9yIGNhc2VzLCBhbmQgdHJpZ2dlciB0aGUgYnlwYXNzLCB3aGljaCBpcyB3aGVyZSB0aGUgYnVncyBtYXkgcmVzaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl94ZHBfaW5zdGFsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTEwMzE2PXN0YXRpYyB2b2lkIGRldl94ZHBfc2V0X3Byb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBicGZfeGRwX21vZGUgbW9kZSxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDMyMi1cbm5ldC9jb3JlL2Rldi5jOjEwMzIzOnN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsXG5uZXQvY29yZS9kZXYuYy0xMDMyNC1cdFx0XHQgICBicGZfb3BfdCBicGZfb3AsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvY29yZS9kZXYuYz0xMDM4NT1zdGF0aWMgdm9pZCBkZXZfeGRwX3VuaW5zdGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNDAyLVxubmV0L2NvcmUvZGV2LmM6MTA0MDM6XHRcdFdBUk5fT04oZGV2X3hkcF9pbnN0YWxsKGRldiwgbW9kZSwgYnBmX29wLCBOVUxMLCAwLCBOVUxMKSk7XG5uZXQvY29yZS9kZXYuYy0xMDQwNC1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMDQxNj1zdGF0aWMgaW50IGRldl94ZHBfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDUxNS1cbm5ldC9jb3JlL2Rldi5jOjEwNTE2Olx0XHRlcnIgPSBkZXZfeGRwX2luc3RhbGwoZGV2LCBtb2RlLCBicGZfb3AsIGV4dGFjaywgZmxhZ3MsIG5ld19wcm9nKTtcbm5ldC9jb3JlL2Rldi5jLTEwNTE3LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEwNTM4PXN0YXRpYyBpbnQgZGV2X3hkcF9kZXRhY2hfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNTUxLVx0YnBmX29wID0gZGV2X3hkcF9icGZfb3AoZGV2LCBtb2RlKTtcbm5ldC9jb3JlL2Rldi5jOjEwNTUyOlx0V0FSTl9PTihkZXZfeGRwX2luc3RhbGwoZGV2LCBtb2RlLCBicGZfb3AsIE5VTEwsIDAsIE5VTEwpKTtcbm5ldC9jb3JlL2Rldi5jLTEwNTUzLVx0ZGV2X3hkcF9zZXRfbGluayhkZXYsIG1vZGUsIE5VTEwpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEwNjE4PXN0YXRpYyBpbnQgYnBmX3hkcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXG4tLVxubmV0L2NvcmUvZGV2LmMtMTA2NTMtXHRicGZfb3AgPSBkZXZfeGRwX2JwZl9vcCh4ZHBfbGluay1cdTAwM2VkZXYsIG1vZGUpO1xubmV0L2NvcmUvZGV2LmM6MTA2NTQ6XHRlcnIgPSBkZXZfeGRwX2luc3RhbGwoeGRwX2xpbmstXHUwMDNlZGV2LCBtb2RlLCBicGZfb3AsIE5VTEwsXG5uZXQvY29yZS9kZXYuYy0xMDY1NS1cdFx0XHQgICAgICB4ZHBfbGluay1cdTAwM2VmbGFncywgbmV3X3Byb2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBicGZfeGRwX2xpbmtfdXBkYXRlYCYjMzk7cyBJbW11dGFiaWxpdHkqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gWERQIGFuZCB0aGUgQlBGIGluZnJhc3RydWN0dXJlIGFnYWluLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyBteSBtZW1vcnkmIzM5O3MgdGVsbGluZyBtZSB0aGF0IGBicGZfeGRwX2xpbmtfdXBkYXRlYCBpcyBkZWZpbmVkIGFzIHN0YXRpYyB0b28sIGJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbmthZ2UgcmVzdHJpY3Rpb25zIHRoYXQgYWZmZWN0IGhvdyB3ZSBjYW4gdXNlIHRoZW0gYWNyb3NzIGRpZmZlcmVudCBjb21waWxhdGlvbiB1bml0cywgcGFydGljdWxhcmx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBkeW5hbWljIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGxpbmtpbmcsIGFuZCBJIGRvbiYjMzk7dCB3YW50IHRvIHJ1biBpbnRvIGFueSB1bmV4cGVjdGVkIGxpbmthZ2UgaXNzdWVzIGRvd24gdGhlIGxpbmUuIFNvLCBsZXQgbWUganVzdCBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGJwZl94ZHBfbGlua191cGRhdGVgIGFuZCB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZy4gVGltZSB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gbXkgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl94ZHBfbGlua191cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMDYwMz1zdGF0aWMgaW50IGJwZl94ZHBfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxubmV0L2NvcmUvZGV2LmMtMTA2MTctXG5uZXQvY29yZS9kZXYuYzoxMDYxODpzdGF0aWMgaW50IGJwZl94ZHBfbGlua191cGRhdGUoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxubmV0L2NvcmUvZGV2LmMtMTA2MTktXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpXG4tLVxubmV0L2NvcmUvZGV2LmM9MTA2Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3hkcF9saW5rX2xvcHMgPSB7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTA2NzMtXHQuZmlsbF9saW5rX2luZm8gPSBicGZfeGRwX2xpbmtfZmlsbF9saW5rX2luZm8sXG5uZXQvY29yZS9kZXYuYzoxMDY3NDpcdC51cGRhdGVfcHJvZyA9IGJwZl94ZHBfbGlua191cGRhdGUsXG5uZXQvY29yZS9kZXYuYy0xMDY3NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBTdGF0aWMgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyBpbmRlZWQgc3RhdGljLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLCBzbyBsZXQmIzM5O3Mga2VlcCB0aGF0IGZyb250IGFuZCBjZW50ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHRoZW4gZHJpZnRzIHRvIGBkZXZfeGRwX2F0dGFjaGAuLi55dXAsIHRoYXQmIzM5O3MgYW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIG9mdGVuIGEgY2x1ZSBhYm91dCBkZXNpZ24gcGF0dGVybnMuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZXNlIHN0YXRpY2FsbHkgZGVjbGFyZWQgaXRlbXMgYXJlICp1c2VkKi4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyB0aGF0IGludm9rZSB0aGVzZSBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbGluZyBjb250ZXh0cyB3aWxsIHJldmVhbCB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwdXJwb3NlIG9mIHRoZXNlIHNlZW1pbmdseSBpc29sYXRlZCBzdGF0aWMgY29tcG9uZW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdW5wYWNrIHRoZSBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X3hkcF9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMDM4NT1zdGF0aWMgdm9pZCBkZXZfeGRwX3VuaW5zdGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNDE1LVxubmV0L2NvcmUvZGV2LmM6MTA0MTY6c3RhdGljIGludCBkZXZfeGRwX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG5uZXQvY29yZS9kZXYuYy0xMDQxNy1cdFx0XHQgIHN0cnVjdCBicGZfeGRwX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXG4tLVxubmV0L2NvcmUvZGV2LmMtMTA1MzAtXG5uZXQvY29yZS9kZXYuYzoxMDUzMTpzdGF0aWMgaW50IGRldl94ZHBfYXR0YWNoX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2Rldi5jLTEwNTMyLVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxubmV0L2NvcmUvZGV2LmMtMTA1MzQte1xubmV0L2NvcmUvZGV2LmM6MTA1MzU6XHRyZXR1cm4gZGV2X3hkcF9hdHRhY2goZGV2LCBleHRhY2ssIGxpbmssIE5VTEwsIE5VTEwsIGxpbmstXHUwMDNlZmxhZ3MpO1xubmV0L2NvcmUvZGV2LmMtMTA1MzYtfVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEwNjc3PWludCBicGZfeGRwX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTA3MTAtXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jOjEwNzExOlx0ZXJyID0gZGV2X3hkcF9hdHRhY2hfbGluayhkZXYsIFx1MDAyNmV4dGFjaywgbGluayk7XG5uZXQvY29yZS9kZXYuYy0xMDcxMi1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA3NDU9aW50IGRldl9jaGFuZ2VfeGRwX2ZkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDc3MC1cbm5ldC9jb3JlL2Rldi5jOjEwNzcxOlx0ZXJyID0gZGV2X3hkcF9hdHRhY2goZGV2LCBleHRhY2ssIE5VTEwsIG5ld19wcm9nLCBvbGRfcHJvZywgZmxhZ3MpO1xubmV0L2NvcmUvZGV2LmMtMTA3NzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFhEUCBBdHRhY2htZW50IE1ldGhvZHMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgWERQIGF0dGFjaG1lbnQgbWV0aG9kcy4gVGhlIGZhY3QgdGhhdCBgYnBmX3hkcF9saW5rX2F0dGFjaGAgYW5kIGBkZXZfY2hhbmdlX3hkcF9mZGAgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYCBpcyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGxpbmthZ2UgaW1wbGljYXRpb25zLiBOb3csIGxldCBtZSBzZWUuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCByZWxhdGVkIGZ1bmN0aW9ucywgc28gdGhlIG5leHQgdGhpbmcgb24gdGhlIGxpc3QgdG8gY2xhcmlmeSB0aGUgc3RhdGUgb2YgdGhpbmdzIGlzIGBicGZfbXByb2dfYXR0YWNoYC4gTGV0IG1lIGNoZWNrIHRoYXQgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbXByb2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21wcm9nLmM9MjI1PXN0YXRpYyBpbnQgYnBmX21wcm9nX2NoZWNrX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvbXByb2cuYy0yMzItXG5rZXJuZWwvYnBmL21wcm9nLmM6MjMzOmludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxua2VybmVsL2JwZi9tcHJvZy5jLTIzNC1cdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGBicGZfbXByb2dfYXR0YWNoYCBpcyBub24tc3RhdGljLCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gZnJvbSBgYnBmX3hkcF9saW5rX3VwZGF0ZWAuIEkgc2VlIGl0JiMzOTtzIHVzZWQgYXMgYSBjYWxsYmFjayBpbiBgYnBmX3hkcF9saW5rX2xvcHNgLCBhbmQgdGhhdCBgdXBkYXRlX3Byb2dgIGNhbGxiYWNrIGlzIGNhbGxlZCBmcm9tIGBicGZfbGlua191cGRhdGVgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFNvLCBgYnBmX2xpbmtfdXBkYXRlYCBpcyBvdXIgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQuIE5vdywgbGV0IG1lIGNoZWNrIGBkZXZfY2hhbmdlX3hkcF9mZGAgLSB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIG5ldGxpbmsuIEFuZCBgYnBmX3hkcF9saW5rX2F0dGFjaGAsIHdoaWNoIGlzIGFsc28gaW1wb3J0YW50LCBpcyBjYWxsZWQgZnJvbSBgbGlua19jcmVhdGVgIGluIHRoZSBzYW1lIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZmlsZS4KClRoaXMgcGF0Y2ggaXMgZml4aW5nIGFuIGlzc3VlIHdpdGggZGV2aWNlLWJvdW5kIHByb2dyYW1zIHNvbWVob3cgZW5kaW5nIHVwIG9uIGdlbmVyaWMgWERQIHBhdGhzLCBhbmQgYWxzbyBwcmV2ZW50aW5nIG9mZmxvYWRlZCBwcm9ncmFtcyBmcm9tIGJlaW5nIGF0dGFjaGVkIHRvIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2Agd2l0aG91dCB0aGUgYEhXX01PREVgIGZsYWcuIEJ1dCB3YWl0LCBgYnBmX21wcm9nX2NoZWNrX3Byb2dgIHNob3VsZCBoYXZlIGJlZW4gcmVqZWN0aW5nIHRob3NlIG9mZmxvYWRlZCBwcm9ncmFtcyBhbnl3YXkuCgpJcyB0aGlzIHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIEl0IGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgd2hlcmUgYSBkZXZpY2UtYm91bmQgcHJvZ3JhbSBjb3VsZCBleGVjdXRlIGluIHRoZSBYRFAgc29mdHdhcmUgcGF0aCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBpc3N1ZS4gVGhlIHBhdGNoIGlzIGFkZGluZyBjaGVja3MgaW4gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgZGV2X3hkcF9pbnN0YWxsYCwgc28gdGhvc2UgYXJlIGNyaXRpY2FsIGFyZWFzLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uOgoKKiAgIGBicGZfbXByb2dfYXR0YWNoYAoqICAgYGJwZl94ZHBfbGlua19hdHRhY2hgCiogICBgZGV2X2NoYW5nZV94ZHBfZmRgCgpIb2xkIG9uIGEgc2Vjb25kLCBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXMgZm9yIGNyZWF0aW5nIGEgbGluay4gVGhlIGJ1ZyB3YXMgaW4gYGJwZl94ZHBfbGlua191cGRhdGVgLCB3aGljaCBzZWVtcyB0byBoYXZlIGJ5cGFzc2VkIHNvbWUgY2hlY2tzLiBTbywgdGhlIHN5c2NhbGwgZW50cnkgcG9pbnQgaXMgYGJwZl9saW5rX3VwZGF0ZWAgdHJpZ2dlcmluZyBgYnBmX3hkcF9saW5rX3VwZGF0ZWAuIEJ1dCBgYnBmX2xpbmtfdXBkYXRlYCBpcyBhIGdlbmVyaWMgc3lzdGVtIGNhbGwgZnVuY3Rpb24uIElzIHRoZXJlIGEgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIFhEUCBsaW5rIHVwZGF0ZT8gTm8sIGBicGZfeGRwX2xpbmtfdXBkYXRlYCBpcyBzdGF0aWMuIEFscmlnaHQsIGxldCYjMzk7cyBzdGljayB3aXRoIHRoZSBwbGFuLiBJIHNob3VsZCBzdGlsbCBmb2N1cyBvbiBgYnBmX21wcm9nX2F0dGFjaGAsIGBkZXZfY2hhbmdlX3hkcF9mZGAsIGFuZCBgYnBmX3hkcF9saW5rX2F0dGFjaGAuIFRpbWUgdG8gbWFrZSBzdXJlIGBicGZfeGRwX2xpbmtfYXR0YWNoYCBpc24mIzM5O3Qgc3RhdGljLCBqdXN0IHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3hkcF9saW5rX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTEwNjY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl94ZHBfbGlua19sb3BzID0ge1xuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNjc2LVxubmV0L2NvcmUvZGV2LmM6MTA2Nzc6aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL2Rldi5jLTEwNjc4LXtcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDcxNy1cdFx0YnBmX2xpbmtfY2xlYW51cChcdTAwMjZsaW5rX3ByaW1lcik7XG5uZXQvY29yZS9kZXYuYzoxMDcxODpcdFx0dHJhY2VfYnBmX3hkcF9saW5rX2F0dGFjaF9mYWlsZWQoZXh0YWNrLl9tc2cpO1xubmV0L2NvcmUvZGV2LmMtMTA3MTktXHRcdGdvdG8gb3V0X3B1dF9kZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQlBGIEF0dGFjaG1lbnQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXMgaW5kZWVkICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgY29uZmlybWluZyBteSByZWNvbGxlY3Rpb24uIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCBzcHJpbmdzIHRvIG1pbmQsIGFzIEkgY29uc2lkZXIgdGhpcyBhdHRhY2ggcG9pbnQsIGlzOiB3aGF0IGFib3V0IGBicGZfbXByb2dfYXR0YWNoYD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGl0cyBzdGF0dXMgYW5kIHVzYWdlIHNjZW5hcmlvcyByZWxhdGVkIHRvIHRoaXMgYXR0YWNobWVudCBzdHJhdGVneS4gSXMgdGhlcmUgc29tZSBwb3RlbnRpYWwgZm9yIHVzaW5nIHRoYXQgZnVuY3Rpb24sIG9yIGFub3RoZXIgc2ltaWxhciBvbmUsIGluIGEgc2NlbmFyaW8gcmVsZXZhbnQgdG8gd2hhdCBJJiMzOTttIGN1cnJlbnRseSB3b3JraW5nIG9uPyBMZXQgbWUgc2VlLiBJIGJldHRlciBtYWtlIHN1cmUgSSBrbm93IHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbXByb2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21wcm9nLmM9MjI1PXN0YXRpYyBpbnQgYnBmX21wcm9nX2NoZWNrX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvbXByb2cuYy0yMzItXG5rZXJuZWwvYnBmL21wcm9nLmM6MjMzOmludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxua2VybmVsL2JwZi9tcHJvZy5jLTIzNC1cdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjI2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBgYnBmX21wcm9nX2F0dGFjaGAgRnVuY3Rpb24qKgoKT2theSwgc28gYGJwZl9tcHJvZ19hdHRhY2hgIGlzIGNvbmZpcm1lZCBhcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIGtlcm5lbCBDT05GSUcgb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbCBhbmQgZXhwZWN0ZWQuIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX05FVGAgaXMgZXNzZW50aWFsLCBub3RoaW5nIHN1cnByaXNpbmcgdGhlcmUuIFdoYXQgYWJvdXQgYENPTkZJR19YRFBfU09DS0VUU2A/IEhtbSwgdGhhdCYjMzk7cyBYRFAtc3BlY2lmaWMsIHNvIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBuZWVkZWQgaGVyZS4gVG8gYmUgY2VydGFpbiwgSSBzaG91bGQgcmVhbGx5IGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZSBmb3IgYGtlcm5lbC9icGYvbXByb2cuY2AuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHJvZ1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTU9b2JqLSR7Q09ORklHX0JQRl9MU019XHQgICYjNDM7PSBicGZfaW5vZGVfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBzZWVtcyBzdWZmaWNpZW50IGZvciBgbXByb2cuY2AsIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gdGhpcyBidWlsZCBwcm9jZXNzLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYG5ldC9jb3JlL2Rldi5jYC4gSSBrbm93IHRoYXQmIzM5O3MgYWx3YXlzIGNvbXBpbGVkIGFzIGxvbmcgYXMgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEgcHJldHR5IGNvbW1vbiBzZXR0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYWZmZWN0IGl0cyBidWlsZCBvciBmdW5jdGlvbmFsaXR5LgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHRlc3QgY2FzZSBpdHNlbGYuIEl0IHVzZXMgYEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWWAsIHdoaWNoIGlzIGFuIFhEUCBmbGFnLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19ORVRERVZfT0ZGTE9BRGAgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGFueXRoaW5nIHRoYXQgZW5hYmxlcyBuZXR3b3JrIGRldmljZSBvZmZsb2FkIGZlYXR1cmVzIGluIHRoZSBCUEYgY29udGV4dCDigJMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBicGZfcHJvZ19pc19vZmZsb2FkZWRgLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGVzZSBhcmUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19pc19vZmZsb2FkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MzYzMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfZGV2X2JvdW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2MzctXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2Mzg6c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX29mZmxvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2Mzkte1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzY5Nj1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfZGV2X2JvdW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3MDAtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3MDE6c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX29mZmxvYWRlZChzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3MDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYxMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgeW91IGRlc2NyaWJlZDoKCioqRXhhbWluaW5nIEJQRiBPZmZsb2FkIERldGVjdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgZGV0ZXJtaW5pbmcgaWYgYSBCUEYgcHJvZ3JhbSBpcyBvZmZsb2FkZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBoZWFkZXIgZmlsZSwgYGluY2x1ZGUvbGludXgvYnBmLmhgLiBNeSBpbW1lZGlhdGUgdGFyZ2V0IGlzIHRoYXQgYCNpZmRlZmAgYmxvY2sgc3Vycm91bmRpbmcgYGJwZl9wcm9nX2lzX29mZmxvYWRlZGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgd2lsbCBsaWtlbHkgcmVzaWRlLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgbWFjcm8gb3IgZnVuY3Rpb24gaXMgY2VudHJhbCB0byB0aGUgb2ZmbG9hZCBkZXRlY3Rpb24sIGFuZCBJIG5lZWQgdG8gc2VlIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG9vLCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNjMwOlx0aW50IGJwZl9wcm9nX2Rldl9ib3VuZF9pbmhlcml0KHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpO1xuMzYzMTpcdHZvaWQgYnBmX2Rldl9ib3VuZF9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbjM2MzI6XHRcbjM2MzM6XHRzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfZGV2X2JvdW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbjM2MzQ6XHR7XG4zNjM1Olx0XHRyZXR1cm4gYXV4LVx1MDAzZWRldl9ib3VuZDtcbjM2MzY6XHR9XG4zNjM3Olx0XG4zNjM4Olx0c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX29mZmxvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG4zNjM5Olx0e1xuMzY0MDpcdFx0cmV0dXJuIGF1eC1cdTAwM2VvZmZsb2FkX3JlcXVlc3RlZDtcbjM2NDE6XHR9XG4zNjQyOlx0XG4zNjQzOlx0Ym9vbCBicGZfcHJvZ19kZXZfYm91bmRfbWF0Y2goY29uc3Qgc3RydWN0IGJwZl9wcm9nICpsaHMsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcmhzKTtcbjM2NDQ6XHRcbjM2NDU6XHRzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9pc19vZmZsb2FkZWQoc3RydWN0IGJwZl9tYXAgKm1hcClcbjM2NDY6XHR7XG4zNjQ3Olx0XHRyZXR1cm4gdW5saWtlbHkobWFwLVx1MDAzZW9wcyA9PSBcdTAwMjZicGZfbWFwX29mZmxvYWRfb3BzKTtcbjM2NDg6XHR9XG4zNjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIGZsb3csIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyB0cmFjaW5nIGhvdyB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyBhcmUgaW1wYWN0aW5nIGl0LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGVzZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgZWFybGllciBsaW5lcyBvZiBjb2RlIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBpbiBwbGFjZSwgYmVjYXVzZSB0aGUgbG9naWMgZmxvdyBjYW4gZHJhbWF0aWNhbGx5IGNoYW5nZSBiYXNlZCBvbiB0aGUgZXZhbHVhdGlvbiBvZiB0aGVzZS4gSSBuZWVkIHRvIGJlIHN1cmUgdG8gZnVsbHkgdW5kZXJzdGFuZCBhbGwgcG90ZW50aWFsIGV4ZWN1dGlvbiBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNjAwOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4zNjAxOlx0XG4zNjAyOlx0aW50IGJwZl9tYXBfb2ZmbG9hZF9pbmZvX2ZpbGwoc3RydWN0IGJwZl9tYXBfaW5mbyAqaW5mbywgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4zNjAzOlx0XG4zNjA0Olx0aW50IGJwZl9tYXBfb2ZmbG9hZF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKTtcbjM2MDU6XHRpbnQgYnBmX21hcF9vZmZsb2FkX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsXG4zNjA2Olx0XHRcdFx0XHR2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpO1xuMzYwNzpcdGludCBicGZfbWFwX29mZmxvYWRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KTtcbjM2MDg6XHRpbnQgYnBmX21hcF9vZmZsb2FkX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuMzYwOTpcdFx0XHRcdFx0IHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpO1xuMzYxMDpcdFxuMzYxMTpcdGJvb2wgYnBmX29mZmxvYWRfcHJvZ19tYXBfbWF0Y2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbjM2MTI6XHRcbjM2MTM6XHRzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpcbjM2MTQ6XHRicGZfb2ZmbG9hZF9kZXZfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkX29wcyAqb3BzLCB2b2lkICpwcml2KTtcbjM2MTU6XHR2b2lkIGJwZl9vZmZsb2FkX2Rldl9kZXN0cm95KHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldik7XG4zNjE2Olx0dm9pZCAqYnBmX29mZmxvYWRfZGV2X3ByaXYoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2KTtcbjM2MTc6XHRpbnQgYnBmX29mZmxvYWRfZGV2X25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXG4zNjE4Olx0XHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4zNjE5Olx0dm9pZCBicGZfb2ZmbG9hZF9kZXZfbmV0ZGV2X3VucmVnaXN0ZXIoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2LFxuMzYyMDpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuMzYyMTpcdGJvb2wgYnBmX29mZmxvYWRfZGV2X21hdGNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4zNjIyOlx0XG4zNjIzOlx0dm9pZCB1bnByaXZfZWJwZl9ub3RpZnkoaW50IG5ld19zdGF0ZSk7XG4zNjI0Olx0XG4zNjI1Olx0I2lmIGRlZmluZWQoQ09ORklHX05FVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxuMzYyNjpcdGludCBicGZfZGV2X2JvdW5kX2tmdW5jX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4zNjI3Olx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqcHJvZ19hdXgpO1xuMzYyODpcdHZvaWQgKmJwZl9kZXZfYm91bmRfcmVzb2x2ZV9rZnVuYyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBmdW5jX2lkKTtcbjM2Mjk6XHRpbnQgYnBmX3Byb2dfZGV2X2JvdW5kX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBYRFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHRoZSBvbmx5IGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7cyBnb29kLCBubyBjb21wbGljYXRlZCBidWlsZCBlbnZpcm9ubWVudCBjaGFuZ2VzLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoYXQgYGJwZl94ZHBfbGlua191cGRhdGVgIHdhcyBieXBhc3NpbmcgdGhlIGludGVuZGVkIGBkZXZfeGRwX2F0dGFjaGAgY2hlY2tzIGFuZCBnb2luZyBzdHJhaWdodCB0byBgZGV2X3hkcF9pbnN0YWxsYC4gVGhpcyBhbGxvd2VkIGEgcHJvZ3JhbSBzcGVjaWZpY2FsbHkgYm91bmQgdG8gYSBkZXZpY2UgdG8gc29tZWhvdyBleGVjdXRlIG9uIHRoZSBYRFAgc29mdHdhcmUgcGF0aCwgd2hpY2ggaXMgb2J2aW91c2x5IGEgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSBjb25jZXJuLiBUaGUgZml4IGlzIHRvIG1vdmUgdGhlIGNvcmUgY2hlY2sgaW50byBgZGV2X3hkcF9pbnN0YWxsYCwgd2hpY2ggc2VlbXMgbG9naWNhbC4gUGx1cywgdGhleSYjMzk7cmUgYWRkaW5nIGEgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBjaGVjayBpbiBgYnBmX21wcm9nX2NoZWNrX3Byb2dgLiBTbWFydC4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaGVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gYGJwZl9tcHJvZ19hdHRhY2hgIGhhbmRsZXMgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBhdHRhY2htZW50cy4gVGhlbiB0aGVyZSYjMzk7cyBgYnBmX3hkcF9saW5rX2F0dGFjaGAgZm9yIHRoZSBYRFAgbGluayBhdHRhY2htZW50LiBBbmQgb2YgY291cnNlLCBgZGV2X2NoYW5nZV94ZHBfZmRgIHdoaWNoIGhhbmRsZXMgdGhlIFhEUCBmaWxlIGRlc2NyaXB0b3IgYXR0YWNobWVudC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIGRpZmZlcmVudCBCUEYgcHJvZ3JhbSB0eXBlcy4KCldhaXQgYSBtaW51dGUuLi4gYGJwZl94ZHBfbGlua191cGRhdGVgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBJJiMzOTttIHdvbmRlcmluZyBob3cgaXQgcmVsYXRlcyB0byBgYnBmX2xpbmtfdXBkYXRlYCB3aGljaCAqaXNuJiMzOTt0KiBzdGF0aWMuIFNvLCB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBub24tc3RhdGljIG9uZS4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGltcG9ydGFudCBsaW5rIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQgbWUgY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaG93IGBicGZfbGlua191cGRhdGVgIGlzIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgd2hlcmUgdGhlIG1haW4gbG9naWMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2xpbmtfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgyMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgSW50ZXJuYWxzIERpdmUgLSBUaGUgQ3VyaW91cyBDYXNlIG9mIGJwZl9saW5rX3VwZGF0ZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGp1c3QgcGFyc2luZyB0aHJvdWdoIHNvbWUgY29kZSByZWxhdGVkIHRvIGVCUEYgbGluayBtYW5hZ2VtZW50LCBhbmQgc29tZXRoaW5nJiMzOTtzIHBva2luZyBhdCBteSBpbnR1aXRpb24uICpicGZfbGlua191cGRhdGUqLi4uIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGxpbmthZ2UgdXBkYXRlcyBoYXBwZW4sIHJpZ2h0PyBUaGUgY29yZSBmdW5jdGlvbiBmb3IgbW9kaWZ5aW5nIHRoZSBsaW5rYWdlcz8gU2hvdWxkbiYjMzk7dCB0aGF0IGJlIHVuZGVyIHNvbWUgZGVkaWNhdGVkIEJQRiBpbmZyYXN0cnVjdHVyZSBkaXJlY3RvcnksIG1heWJlIHNvbWV0aGluZyBpbiB0aGUgKm5ldCogc3Vic3lzdGVtLCBnaXZlbiBpdHMgbmV0d29yay1jZW50cmljIGFwcGxpY2F0aW9ucz8KCldhaXQuLi4gaXMgdGhhdC4uLiAqa2VybmVsL2JwZi9zeXNjYWxsLmMqPyEgU2VyaW91c2x5PyAqc3lzY2FsbC5jKj8gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBNeSB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IGl0JiMzOTtkIGJlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSBvciBhdCBsZWFzdCBzb21ldGhpbmcgbG9naWNhbGx5IGdyb3VwZWQuIFdoeSBpcyAqYnBmX2xpbmtfdXBkYXRlKiBsaXZpbmcgaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludHM/IFRoaXMgbG9jYXRpb24gc3VnZ2VzdHMgYSBwb3RlbnRpYWxseSB0aWdodCBjb3VwbGluZyB3aXRoIHRoZSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkgd2FzIGV4cGVjdGluZyBhIG1vcmUgb3JnYW5pemVkLCBtb2R1bGFyIHN0cnVjdHVyZS4gVGhpcyBwbGFjZW1lbnQgaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciBwb3RlbnRpYWwgY29tcGxleGl0eSB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN5c2NhbGwgaGFuZGxpbmcgYW5kIHRoZSBsaW5rIHVwZGF0ZSBsb2dpYzsgaXQmIzM5O3MgYSBiaXQgb2YgYW4gYW5vbWFseS4gSSBiZXR0ZXIgc3RhcnQgcmV2aWV3aW5nIHRoZSBicm9hZGVyIHN1cnJvdW5kaW5nIGNvbnRleHQsIGluY2x1ZGluZyBhbnkgcmVsZXZhbnQgYCNpZmRlZmAgYmxvY2tzIG9yIG90aGVyIG9yZ2FuaXphdGlvbmFsIG51YW5jZXMsIHRvIGZ1bGx5IGdyYXNwIHdoeSB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gZW5kZWQgdXAgaW4gKnN5c2NhbGwuYyogYW5kIHdoYXQgaXRzIGJyb2FkZXIgaW1wbGljYXRpb25zIGFyZS4gSSBzaG91bGQgcHJvYmFibHkgYnJ1c2ggdXAgb24gdGhlIEJQRiBsaW5rIEFQSXMgYWdhaW4sIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlua191cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz01Nzg0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4ODktXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODkwOnN0YXRpYyBpbnQgbGlua191cGRhdGVfbWFwKHN0cnVjdCBicGZfbGluayAqbGluaywgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODkxLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5NTpcdG5ld19tYXAgPSBicGZfbWFwX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm5ld19tYXBfZmQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5Ni1cdGlmIChJU19FUlIobmV3X21hcCkpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5OC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTk6XHRpZiAoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5mbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkwMDpcdFx0b2xkX21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUub2xkX21hcF9mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTAxLVx0XHRpZiAoSVNfRVJSKG9sZF9tYXApKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkwNC1cdFx0fVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkwNTpcdH0gZWxzZSBpZiAoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTA2LVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MTgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTE5OiNkZWZpbmUgQlBGX0xJTktfVVBEQVRFX0xBU1RfRklFTEQgbGlua191cGRhdGUub2xkX3Byb2dfZmRcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MjAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTIxOnN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTIyLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTMwLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkzMTpcdGZsYWdzID0gYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5mbGFncztcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MzItXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRl9SRVBMQUNFKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MzQtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTM1Olx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGF0dHItXHUwMDNlbGlua191cGRhdGUubGlua19mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTM2LVx0aWYgKElTX0VSUihsaW5rKSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTM5LVx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9tYXApIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NDA6XHRcdHJldCA9IGxpbmtfdXBkYXRlX21hcChsaW5rLCBhdHRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NDEtXHRcdGdvdG8gb3V0X3B1dF9saW5rO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NDMtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTQ0Olx0bmV3X3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5uZXdfcHJvZ19mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTQ1LVx0aWYgKElTX0VSUihuZXdfcHJvZykpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTUwLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTUxOlx0XHRvbGRfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTItXHRcdGlmIChJU19FUlIob2xkX3Byb2cpKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1Ni1cdFx0fVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1NzpcdH0gZWxzZSBpZiAoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZCkge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1OC1cdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02Mjk0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDM1LVx0Y2FzZSBCUEZfTElOS19VUERBVEU6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDM2Olx0XHRlcnIgPSBsaW5rX3VwZGF0ZShcdTAwMjZhdHRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MzctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBJZGVudGlmeWluZyBLZXkgQlBGIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggdGhpcyBmdXp6aW5nIGVmZm9ydC4gSSYjMzk7dmUgZ290IGBsaW5rX3VwZGF0ZWAsIHdoaWNoIGlzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIGRpcmVjdCBtYW5pcHVsYXRpb24uIFRoZSBwcmltYXJ5IHN5c2NhbGwgZW50cnkgcG9pbnQgaXMgYF9fc3lzX2JwZmAsIGJ1dCB0aGF0JiMzOTtzIGEgbWFzc2l2ZSBtdWx0aXBsZXhlciwgYSBiaXQgdW53aWVsZHkuIExldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIGZpbmQgc29tZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZTogYGJwZl94ZHBfbGlua19hdHRhY2hgLCBgZGV2X2NoYW5nZV94ZHBfZmRgLCBhbmQgYGJwZl9tcHJvZ19hdHRhY2hgLiBUaG9zZSBsb29rIHByb21pc2luZy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGJlc3QgZnVuY3Rpb25zIHRvIHRhcmdldC4gRm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIEkmIzM5O20gZ29pbmcgdG8gY29uZmlybSB0aGF0IGBicGZfbXByb2dfYXR0YWNoYCBpcyBpbmRlZWQgdGhlIHJpZ2h0IGNhbGwsIGFuZCwgeWVzLCBpdCBzZWVtcyB0byBiZS4gR29vZC4KCk5leHQgdXAsIFhEUDogYGRldl9jaGFuZ2VfeGRwX2ZkYCBpcyB0aGUgcHJpbWUgY2FuZGlkYXRlLiBZZXAsIHRoYXQmIzM5O3Mgd2hhdCBJIHRob3VnaHQuCgpBbmQgZm9yIFhEUCBsaW5rIGF0dGFjaCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXMgdGhlIGJlc3QgY2hvaWNlLi4uIGFuZCB5ZXMsIHRoYXQmIzM5O3MgdGhlIG9uZS4KCkFueSBvdGhlciBmdW5jdGlvbnMgSSBzaG91bGQgY29uc2lkZXI/IEkgc3BvdHRlZCBgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkYCwgYnV0IHRoYXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyB0aGF0IGlzIG5vdCBnb2luZyB0byB3b3JrLgoKT2theSwgbGV0JiMzOTtzIHN1bW1hcml6ZSBhbmQgZm9ybWFsaXplIHRoaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBvdXIgdGltZQoqICAgKipGb2N1c1N5bWJvbHM6KiogSSYjMzk7dmUgaWRlbnRpZmllZCB0aHJlZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGNsb3NlIGF0dGVudGlvbjoKICAgICogICBgYnBmX21wcm9nX2F0dGFjaGAKICAgICogICBgZGV2X2NoYW5nZV94ZHBfZmRgCiAgICAqICAgYGJwZl94ZHBfbGlua19hdHRhY2hgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBjb25maWdzIGFyZSBvbiwgc28gdGhhdCBvdXIgYW5hbHlzaXMgaW5jbHVkZXMgYWxsIHJlbGV2YW50IGNvZGUgcGF0aHM6CiAgICAqICAgYEJQRl9TWVNDQUxMYAogICAgKiAgIGBORVRgCgpGaW5hbGx5LCBJIHdpbGwganVzdCBkb3VibGUgY2hlY2sgdGhhdCBgZGV2X2NoYW5nZV94ZHBfZmRgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYyAtIGp1c3QgYSBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2NoYW5nZV94ZHBfZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMDY3Nz1pbnQgYnBmX3hkcF9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNzM1LS8qKlxubmV0L2NvcmUvZGV2LmM6MTA3MzY6ICpcdGRldl9jaGFuZ2VfeGRwX2ZkIC0gc2V0IG9yIGNsZWFyIGEgYnBmIHByb2dyYW0gZm9yIGEgZGV2aWNlIHJ4IHBhdGhcbm5ldC9jb3JlL2Rldi5jLTEwNzM3LSAqXHRAZGV2OiBkZXZpY2Vcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDc0NC0gKi9cbm5ldC9jb3JlL2Rldi5jOjEwNzQ1OmludCBkZXZfY2hhbmdlX3hkcF9mZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG5uZXQvY29yZS9kZXYuYy0xMDc0Ni1cdFx0ICAgICAgaW50IGZkLCBpbnQgZXhwZWN0ZWRfZmQsIHUzMiBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipOb24tU3RhdGljIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgdGhlIGNvcmUgYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgc29tZXRoaW5nIGlzICpub3QqIHN0YXRpYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdC4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgYnBmX21wcm9nX2F0dGFjaGAgaXMgbm9uLXN0YXRpYy4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBhcmVhLCBhbmQgYSBzdGF0aWMgZGVjbGFyYXRpb24gd291bGQgYmUgYSBtYWpvciBwb2ludC4gS25vd2luZyB0aGlzIHdvdWxkIGNsYXJpZnkgYSBzaWduaWZpY2FudCBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbXByb2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21wcm9nLmM9MjI1PXN0YXRpYyBpbnQgYnBmX21wcm9nX2NoZWNrX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvbXByb2cuYy0yMzItXG5rZXJuZWwvYnBmL21wcm9nLmM6MjMzOmludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxua2VybmVsL2JwZi9tcHJvZy5jLTIzNC1cdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhEUCBJbnN0YWxsYXRpb24gUGF0aCoqCgpPa2F5LCBzbyB0aGUgYGRldl94ZHBfaW5zdGFsbGAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGlmZmVyZW50IHdheXMgaXQgZ2V0cyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoLiBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgc2V2ZXJhbCBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgY2FsbCBpdDogYGRldl94ZHBfYXR0YWNoYCwgYGRldl94ZHBfYXR0YWNoX2xpbmtgLCBgZGV2X3hkcF9kZXRhY2hfbGlua2AsIGFuZCBgYnBmX3hkcF9saW5rX3VwZGF0ZWAuCgpgYnBmX3hkcF9saW5rX3VwZGF0ZWAgaXMgaW50ZXJlc3RpbmcsIHNpbmNlIGl0JiMzOTtzIHVzZWQgd2l0aGluIGBsaW5rX3VwZGF0ZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gQnV0IGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljLCB3aGljaCBibG9ja3MgZGlyZWN0IG1hbmlwdWxhdGlvbi4gV2hpbGUgYGJwZl94ZHBfbGlua191cGRhdGVgIGlzIGFzc2lnbmVkIHRvIGAudXBkYXRlX3Byb2dgIGluIGBicGZfeGRwX2xpbmtfbG9wc2AsIEkgbmVlZCBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBsaW5rX3VwZGF0ZWAgaXMgY2FsbGVkIGJ5IGBfX3N5c19icGZgLCB3aGljaCBpcyB0b28gZ2VuZXJhbCB0byB0YXJnZXQgZWZmZWN0aXZlbHkuCgpIb3dldmVyLCB0aGUgbW9yZSBwcm9taXNpbmcgYXZlbnVlcyBhcmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGBkZXZfY2hhbmdlX3hkcF9mZGAgYW5kIGBicGZfeGRwX2xpbmtfYXR0YWNoYCwgd2hpY2ggaW4gdHVybiwgY2FsbCBgZGV2X3hkcF9pbnN0YWxsYCBpbmRpcmVjdGx5IHRocm91Z2ggYGRldl94ZHBfYXR0YWNoYCBhbmQgYGRldl94ZHBfYXR0YWNoX2xpbmtgIHJlc3BlY3RpdmVseS4gVGhpcyBsb29rcyBsaWtlIGEgcHJhY3RpY2FsIHBhdGggdG8gZXhwbG9yZS4gRm9jdXNpbmcgb24gdGhlc2UgdHdvIHdpbGwgZWZmZWN0aXZlbHkgY292ZXIgdGhlIGV4ZWN1dGlvbiBwYXRocyB0aGF0IGxlYWQgdG8gYGRldl94ZHBfaW5zdGFsbGAuCgpOb3csIEkgc2hvdWxkIHNoaWZ0IG15IGF0dGVudGlvbiB0byB0aGUgY29uZmlndXJhdGlvbiBzaWRlLiBUaGUgdGVzdCBzdWl0ZSB1c2VzIGBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFlgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbGlua2VkIHRvIHRoaXMgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMTkyPWVudW0gYnBmX3BlcmZfZXZlbnRfdHlwZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEzMTAtXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTMxMTovKiBJZiBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkgaXMgdXNlZCBpbiBCUEZfUFJPR19MT0FEIGNvbW1hbmQsIHRoZSBsb2FkZWRcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMzEyLSAqIHByb2dyYW0gYmVjb21lcyBkZXZpY2UtYm91bmQgYnV0IGNhbiBhY2Nlc3MgWERQIG1ldGFkYXRhLlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEzMTMtICovXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTMxNDojZGVmaW5lIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWVx0KDFVIFx1MDAzY1x1MDAzYyA2KVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEzMTUtXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9MjE5PWludCBicGZfcHJvZ19kZXZfYm91bmRfaW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIyNy1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIyODpcdGlmIChhdHRyLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZIHwgQlBGX0ZfWERQX0hBU19GUkFHUykpXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMjktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIzNC1cdGlmIChhdHRyLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IEJQRl9GX1hEUF9IQVNfRlJBR1MgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL29mZmxvYWQuYzoyMzU6XHQgICAgIShhdHRyLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSkpXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMzYtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIzOC1cdGlmIChhdHRyLVx1MDAzZXByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIzOTpcdCAgICBhdHRyLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSlcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTI0MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjQ5LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6MjUwOlx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlb2ZmbG9hZF9yZXF1ZXN0ZWQgPSAhKGF0dHItXHUwMDNlcHJvZ19mbGFncyBcdTAwMjYgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTI1MS1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yOTA2PXN0YXRpYyBpbnQgYnBmX3Byb2dfbG9hZCh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5MjUtXHRcdFx0XHQgQlBGX0ZfWERQX0hBU19GUkFHUyB8XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyOTI2Olx0XHRcdFx0IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSB8XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yOTI3LVx0XHRcdFx0IEJQRl9GX1RFU1RfUkVHX0lOVkFSSUFOVFMgfFxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYz0xNTY3PXN0YXRpYyBpbnQgbG9hZF93aXRoX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBib29sIGZpcnN0X3Byb2dfb25seSlcbi0tXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMTc3MS1cdFx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1hEUCBcdTAwMjZcdTAwMjYgeGRwbWV0YV9pZmluZGV4KSB7XG50b29scy9icGYvYnBmdG9vbC9wcm9nLmM6MTc3MjpcdFx0XHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHBvcywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYy0xNzczLVx0XHRcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwb3MsIHhkcG1ldGFfaWZpbmRleCk7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTExOTI9ZW51bSBicGZfcGVyZl9ldmVudF90eXBlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxMC1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMzExOi8qIElmIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSBpcyB1c2VkIGluIEJQRl9QUk9HX0xPQUQgY29tbWFuZCwgdGhlIGxvYWRlZFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEzMTItICogcHJvZ3JhbSBiZWNvbWVzIGRldmljZS1ib3VuZCBidXQgY2FuIGFjY2VzcyBYRFAgbWV0YWRhdGEuXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxMy0gKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMzE0OiNkZWZpbmUgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZXHQoMVUgXHUwMDNjXHUwMDNjIDYpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxNS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYz0xMD1zdGF0aWMgaW50IGxvYWRfZHVtbXlfcHJvZyhjaGFyICpuYW1lLCBfX3UzMiBpZmluZGV4LCBfX3UzMiBmbGFncylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYy0yMS0gKiAtIGNyZWF0ZSBhIHZldGggZGV2aWNlIChkb2VzIG5vdCBzdXBwb3J0IG9mZmxvYWQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM6MjI6ICogLSBjcmVhdGUgYSBkZXZpY2UgYm91bmQgWERQIHByb2dyYW0gd2l0aCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkgZmxhZ1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmMtMjMtICogICAoc3VjaCBwcm9ncmFtcyBhcmUgbm90IG9mZmxvYWRlZCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM9Mjc9dm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYy00My1cdH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jOjQ0Olx0ZmQxID0gbG9hZF9kdW1teV9wcm9nKFwmIzM0O2R1bW15MVwmIzM0OywgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTQ1LVx0aWYgKCFBU1NFUlRfR0UoZmQxLCAwLCBcJiMzNDtsb2FkX2R1bW15X3Byb2cgIzFcJiMzNDspKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM9NzE9dm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9saW5rX3VwZGF0ZSh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTg4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM6ODk6XHRkZXZib3VuZF9mZCA9IGxvYWRfZHVtbXlfcHJvZyhcJiMzNDtkZXZib3VuZFwmIzM0OywgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTkwLVx0aWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsIFwmIzM0O2xvYWRfZHVtbXlfcHJvZyBkZXZib3VuZFwmIzM0OykpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmM9MzQ5PXZvaWQgdGVzdF94ZHBfbWV0YWRhdGEodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTAtXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocHJvZywgcnhfaWZpbmRleCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYzo0MTE6XHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDE3LVx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KG5ld19wcm9nLCByeF9pZmluZGV4KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jOjQxODpcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MobmV3X3Byb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jPTczNT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYy04NDctXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocHJvZywgaWZpbmRleCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmM6ODQ4Olx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jLTg0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NTQKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgWERQIEZ1enppbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZYCBpcyBqdXN0IGEgc2ltcGxlIGZsYWcsIG5vdGhpbmcgY29tcGxleCBjb25maWd1cmF0aW9uLXdpc2UuIFRoYXQmIzM5O3MgZ29vZC4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBnZXQgYXdheSB3aXRoIGp1c3QgdGhlIHN0YW5kYXJkIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgb3B0aW9ucy4gWWVwLCB0aG9zZSBhcmUgcHJldHR5IG11Y2ggZXhwZWN0ZWQgdG8gYmUgdGhlcmUsIHN0YW5kYXJkIHN0dWZmLgoKQWxyaWdodCwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdDoKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLCBkZWZpbml0ZWx5LgoqICAgKipGb2N1c1N5bWJvbHMqKjogYGJwZl9tcHJvZ19hdHRhY2hgLCBgZGV2X2NoYW5nZV94ZHBfZmRgLCBhbmQgYGJwZl94ZHBfbGlua19hdHRhY2hgLiBUaGVzZSBsb29rIGxpa2UgcHJpbWUgdGFyZ2V0cy4KKiAgICoqRW5hYmxlQ29uZmlncyoqOiBXZSYjMzk7bGwgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHJlYWxpdHkgY2hlY2sgb24gdGhlc2UgZm9jdXMgc3ltYm9scywgZXNwZWNpYWxseSBgYnBmX21wcm9nX2F0dGFjaGAuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBoaXR0aW5nIGhvdCBwYXRocy4gQWgsIGF0dGFjaGluZyBhIEJQRiBwcm9ncmFtLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgY29udHJvbCBwbGFuZSwgbm90IGRhdGEgcGxhbmUuIFNhbWUgZ29lcyBmb3IgYGRldl9jaGFuZ2VfeGRwX2ZkYCBhbmQgYGJwZl94ZHBfbGlua19hdHRhY2hgLiBHb29kLCB0aGVzZSBhcmUgYWxsIGNvbnRyb2wtcGxhbmUgb3BlcmF0aW9ucywgbm90IGluIHRoZSBkYXRhLXBhdGguCgpSaWdodCwgSSYjMzk7bSBzYXRpc2ZpZWQuIEkmIzM5O2xsIGxvY2sgaW4gdGhlc2UgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Rldl9jaGFuZ2VfeGRwX2ZkJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcyBjb3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgYnlwYXNzaW5nIGNoZWNrcyBkdXJpbmcgbGluayB1cGRhdGVzLiBJdCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgaW50byBgZGV2X3hkcF9pbnN0YWxsYCBhbmQgYWRkcyBhIGNoZWNrIHRvIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AgdG8gcmVqZWN0IG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgbm9uLXN0YXRpYyBjb250cm9sLXBsYW5lIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgY2hlY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Rldl9jaGFuZ2VfeGRwX2ZkJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcyBjb3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgYnlwYXNzaW5nIGNoZWNrcyBkdXJpbmcgbGluayB1cGRhdGVzLiBJdCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgaW50byBgZGV2X3hkcF9pbnN0YWxsYCBhbmQgYWRkcyBhIGNoZWNrIHRvIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AgdG8gcmVqZWN0IG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgbm9uLXN0YXRpYyBjb250cm9sLXBsYW5lIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgY2hlY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcmVqZWN0IGludmFsaWQgQlBGIHByb2dyYW0gYXR0YWNobWVudHMgKGUuZy4sIGRldmljZS1ib3VuZCBvciBvZmZsb2FkZWQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlIG9yIFNDSEVEX0NMUykuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb250cm9sIGZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFsbG9jYXRlIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBtaXNzaW5nIHRoZXNlIGNoZWNrcyB3b3VsZCBtYW5pZmVzdCBhcyBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmNvcnJlY3QgYmVoYXZpb3IsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiZjMzMGQ3MWY4MjU2ODYzZTI3NzU3ZjBkMTg3Y2ViOGI1NzZhODcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwNTo1Mjo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbXByb2cuYyBiL2tlcm5lbC9icGYvbXByb2cuYwppbmRleCAxMzk0MTY4MDYyZTg1Li4wYjUwNDY0ZWM5MDJkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tcHJvZy5jCkBAIC0yMjIsNiAmIzQzOzIyMiwxNCBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wb3NfYWZ0ZXIoc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksCiAJcmV0dXJuIHR1cGxlLSZndDtwcm9nID8gLUVOT0VOVCA6IGJwZl9tcHJvZ190b3RhbChlbnRyeSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGJwZl9tcHJvZ19jaGVja19wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTICZhbXA7JmFtcDsKJiM0MzsJICAgIGJwZl9wcm9nX2lzX29mZmxvYWRlZChwcm9nLSZndDthdXgpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCQkgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsCiAJCSAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX25ldywgc3RydWN0IGJwZl9saW5rICpsaW5rLApAQCAtMjM3LDYgJiM0MzsyNDUsOSBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIAl9OwogCWludCByZXQsIGlkeCA9IC1FUkFOR0UsIHRpZHg7CiAKJiM0MzsJcmV0ID0gYnBmX21wcm9nX2NoZWNrX3Byb2cocHJvZ19uZXcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAlpZiAocmV2aXNpb24gJmFtcDsmYW1wOyByZXZpc2lvbiAhPSBicGZfbXByb2dfcmV2aXNpb24oZW50cnkpKQogCQlyZXR1cm4gLUVTVEFMRTsKIAlpZiAoYnBmX21wcm9nX2V4aXN0cyhlbnRyeSwgcHJvZ19uZXcpKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhZjI2MGZmNTQ2MmE2Li4zMjgxZjIyNmMxZTUyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTAzMjksNiAmIzQzOzEwMzI5LDIxIEBAIHN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsCiAKIAluZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7CiAKJiM0MzsJaWYgKHByb2cpIHsKJiM0MzsJCWlmIChtb2RlICE9IFhEUF9NT0RFX0hXICZhbXA7JmFtcDsgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctJmd0O2F1eCkpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7VXNpbmcgb2ZmbG9hZGVkIHByb2dyYW0gd2l0aG91dCBIV19NT0RFIGZsYWcgaXMgbm90IHN1cHBvcnRlZCYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy0mZ3Q7YXV4KSAmYW1wOyZhbXA7ICFicGZfb2ZmbG9hZF9kZXZfbWF0Y2gocHJvZywgZGV2KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtQcm9ncmFtIGJvdW5kIHRvIGRpZmZlcmVudCBkZXZpY2UmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKHByb2ctJmd0O2F1eCkgJmFtcDsmYW1wOyBtb2RlID09IFhEUF9NT0RFX1NLQikgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtDYW4mIzM5O3QgYXR0YWNoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGUmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZGV2LSZndDtjZmctJmd0O2hkc19jb25maWcgPT0gRVRIVE9PTF9UQ1BfREFUQV9TUExJVF9FTkFCTEVEICZhbXA7JmFtcDsKIAkgICAgcHJvZyAmYW1wOyZhbXA7ICFwcm9nLSZndDthdXgtJmd0O3hkcF9oYXNfZnJhZ3MpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3VuYWJsZSB0byBpbnN0YWxsIFhEUCB0byBkZXZpY2UgdXNpbmcgdGNwLWRhdGEtc3BsaXQmIzM0Oyk7CkBAIC0xMDQ4MCwxOCAmIzQzOzEwNDk1LDYgQEAgc3RhdGljIGludCBkZXZfeGRwX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtOYXRpdmUgYW5kIGdlbmVyaWMgWERQIGNhbiYjMzk7dCBiZSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZSYjMzQ7KTsKIAkJCXJldHVybiAtRUVYSVNUOwogCQl9Ci0JCWlmICghb2ZmbG9hZCAmYW1wOyZhbXA7IGJwZl9wcm9nX2lzX29mZmxvYWRlZChuZXdfcHJvZy0mZ3Q7YXV4KSkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O1VzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQmIzM0Oyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLSZndDthdXgpICZhbXA7JmFtcDsgIWJwZl9vZmZsb2FkX2Rldl9tYXRjaChuZXdfcHJvZywgZGV2KSkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O1Byb2dyYW0gYm91bmQgdG8gZGlmZmVyZW50IGRldmljZSYjMzQ7KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChicGZfcHJvZ19pc19kZXZfYm91bmQobmV3X3Byb2ctJmd0O2F1eCkgJmFtcDsmYW1wOyBtb2RlID09IFhEUF9NT0RFX1NLQikgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0NhbiYjMzk7dCBhdHRhY2ggZGV2aWNlLWJvdW5kIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZSYjMzQ7KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJCWlmIChuZXdfcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1hEUF9ERVZNQVApIHsKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtCUEZfWERQX0RFVk1BUCBwcm9ncmFtcyBjYW4gbm90IGJlIGF0dGFjaGVkIHRvIGEgZGV2aWNlJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCmluZGV4IDdkZDE4YzZkMDZjNjAuLjRhMTNmOGVjNDMwMDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCkBAIC0xLDkgJiM0MzsxLDExIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogI2luY2x1ZGUgJmx0O25ldC9pZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9saW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldHdvcmtfaGVscGVycy5oJmd0OwogCiAjZGVmaW5lIExPQ0FMX05FVE5TICYjMzQ7eGRwX2Rldl9ib3VuZF9vbmx5X25ldG5zJiMzNDsKJiM0MzsjZGVmaW5lIExJTktfVVBEQVRFX05FVE5TICYjMzQ7eGRwX2Rldl9ib3VuZF9vbmx5X2x1X25ldG5zJiMzNDsKIAogc3RhdGljIGludCBsb2FkX2R1bW15X3Byb2coY2hhciAqbmFtZSwgX191MzIgaWZpbmRleCwgX191MzIgZmxhZ3MpCiB7CkBAIC01OSwzICYjNDM7NjEsNTAgQEAgdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZCkKIAkgKi8KIAlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICYjMzQ7IExPQ0FMX05FVE5TKTsKIH0KJiM0MzsKJiM0MzsvKiBBIGRldmljZS1ib3VuZCBwcm9ncmFtIG11c3Qgbm90IHJ1biBvbiB0aGUgWERQIHNvZnR3YXJlIHBhdGguCiYjNDM7ICogZGV2X3hkcF9hdHRhY2goKSByZWplY3RlZCBzdWNoIHByb2dyYW1zLCBidXQgYnBmX3hkcF9saW5rX3VwZGF0ZSgpIHJlYWNoZXMKJiM0MzsgKiBkZXZfeGRwX2luc3RhbGwoKSBkaXJlY3RseSBhbmQgYnlwYXNzZXMgaXQsIHNvIHRoZSBjaGVjayBoYXMgdG8gbGl2ZSBpbgomIzQzOyAqIGRldl94ZHBfaW5zdGFsbCgpLiBDcmVhdGUgYSBnZW5lcmljIChTS0IpIFhEUCBsaW5rIHdpdGggYSBub3JtYWwgcHJvZ3JhbSwKJiM0MzsgKiB0aGVuIHRyeSB0byBzd2FwIGluIGEgZGV2aWNlLWJvdW5kIHByb2dyYW0gdmlhIEJQRl9MSU5LX1VQREFURS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHRlc3RfeGRwX2Rldl9ib3VuZF9vbmx5X2xpbmtfdXBkYXRlKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfbGlua19jcmVhdGVfb3B0cywgbG9wdHMsIC5mbGFncyA9IFhEUF9GTEFHU19TS0JfTU9ERSk7CiYjNDM7CWludCBiYXNlX2ZkID0gLTEsIGRldmJvdW5kX2ZkID0gLTEsIGxpbmtfZmQgPSAtMTsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKnRvayA9IE5VTEw7CiYjNDM7CV9fdTMyIGlmaW5kZXg7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgbmV0bnMgYWRkICYjMzQ7IExJTktfVVBEQVRFX05FVE5TKTsKJiM0MzsJdG9rID0gb3Blbl9uZXRucyhMSU5LX1VQREFURV9ORVROUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUih0b2ssICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIGxpbmsgYWRkIGV0aDQyIHR5cGUgdmV0aCYjMzQ7KTsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7ZXRoNDImIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShpZmluZGV4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWRldmJvdW5kX2ZkID0gbG9hZF9kdW1teV9wcm9nKCYjMzQ7ZGV2Ym91bmQmIzM0OywgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsICYjMzQ7bG9hZF9kdW1teV9wcm9nIGRldmJvdW5kJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWJhc2VfZmQgPSBsb2FkX2R1bW15X3Byb2coJiMzNDtiYXNlJiMzNDssIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShiYXNlX2ZkLCAwLCAmIzM0O2xvYWRfZHVtbXlfcHJvZyBiYXNlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWxpbmtfZmQgPSBicGZfbGlua19jcmVhdGUoYmFzZV9mZCwgaWZpbmRleCwgQlBGX1hEUCwgJmFtcDtsb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGxpbmtfZmQsIDAsICYjMzQ7YnBmX2xpbmtfY3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9saW5rX3VwZGF0ZShsaW5rX2ZkLCBkZXZib3VuZF9mZCwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FSU5WQUwsICYjMzQ7bGlua191cGRhdGUgZGV2aWNlLWJvdW5kIHJlamVjdGVkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJY2xvc2UobGlua19mZCk7CiYjNDM7CWNsb3NlKGJhc2VfZmQpOwomIzQzOwljbG9zZShkZXZib3VuZF9mZCk7CiYjNDM7CWNsb3NlX25ldG5zKHRvayk7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTElOS19VUERBVEVfTkVUTlMpOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjYKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogNTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc21lbnQgb2YgQlBGIFByb2dyYW0gQXR0YWNobWVudCBDb250cm9sIEZsb3cgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSByZXZpZXdlZCB0aGVzZSBjaGFuZ2VzIGFuZCBJJiMzOTttIHNlZWluZyB0aGF0IHRoZXkmIzM5O3JlIHByaW1hcmlseSBmb2N1c2VkIG9uIHJlaW5mb3JjaW5nIGNvbnRyb2wgZmxvdyBmb3IgQlBGIHByb2dyYW0gYXR0YWNobWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY29uY2VudHJhdGVkIGluIGBrZXJuZWwvYnBmL21wcm9nLmNgIGFuZCBgbmV0L2NvcmUvZGV2LmNgLCBhZGRpbmcgZXhwbGljaXQgY2hlY2tzIHRvIHZhbGlkYXRlIG9mZmxvYWRlZCBhbmQgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcy4KCkluIGBrZXJuZWwvYnBmL21wcm9nLmNgLCBhIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHdpdGhpbiBgYnBmX21wcm9nX2NoZWNrX3Byb2coKWAgdG8gcHJldmVudCBhdHRhY2hpbmcgb2ZmbG9hZGVkIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKVGhlIG1vcmUgc2lnbmlmaWNhbnQgY2hhbmdlcyBhcHBlYXIgaW4gYG5ldC9jb3JlL2Rldi5jYCwgd2hlcmUgYXR0YWNobWVudCBjaGVja3MgaGF2ZSBiZWVuIG1vdmVkIGZyb20gYGRldl94ZHBfYXR0YWNoYCB0byBgZGV2X3hkcF9pbnN0YWxsYC4gVGhpcyBtb3ZlIGVuc3VyZXMgdGhhdCB0aGUgY2hlY2tzIGFyZSBhbHdheXMgcGVyZm9ybWVkLCBldmVuIHdoZW4gdGhlIGBicGZfeGRwX2xpbmtfdXBkYXRlKClgIGZ1bmN0aW9uIGRpcmVjdGx5IGNhbGxzIGBkZXZfeGRwX2luc3RhbGwoKWAuIEhlcmUsIHdlIHNlZSB0aHJlZSBrZXkgdmFsaWRhdGlvbiBjaGVja3M6ICgxKSBpZiBhbiBvZmZsb2FkZWQgcHJvZ3JhbSBpcyBiZWluZyB1c2VkIHdpdGhvdXQgdGhlIGBIV19NT0RFYCBmbGFnLCBpdCYjMzk7cyByZWplY3RlZDsgKDIpIGlmIHRoZSBwcm9ncmFtIGlzIGRldmljZS1ib3VuZCBidXQgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIHRhcmdldCBkZXZpY2UsIGl0JiMzOTtzIHJlamVjdGVkOyBhbmQgKDMpIGRldmljZS1ib3VuZCBwcm9ncmFtcyBhcmUgbm90IGFsbG93ZWQgaW4gYFhEUF9NT0RFX1NLQmAgKGdlbmVyaWMgbW9kZSkuCgpDb25zaWRlcmluZyB0aGVzZSBjaGFuZ2VzIGFzIGEgd2hvbGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGFpbSBpcyB0byBwcm9hY3RpdmVseSBwcmV2ZW50IHBvdGVudGlhbGx5IGludmFsaWQgb3IgcHJvYmxlbWF0aWMgQlBGIHByb2dyYW0gY29uZmlndXJhdGlvbnMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGd1YXJkaW5nIGFnYWluc3QgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMsIGluY29ycmVjdCBiZWhhdmlvciwgb3IgZXZlbiBzdWJ0bGUgaXNzdWVzLiBUaGVzZSBjaGVja3MgYXJlIGVudGlyZWx5IGZvY3VzZWQgb24gY29udHJvbCBmbG93OyB0aGVyZSBhcmUgbm8gaW50cm9kdWN0aW9ucyBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IG1pZ2h0IHByZXNlbnQgbWVtb3J5IG1hbmFnZW1lbnQgcmlza3MsIGFuZCBjcml0aWNhbGx5LCBubyBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUgYmVpbmcgYWRkcmVzc2VkIOKAkyBsaWtlbHkgYW4gaW52YWxpZCBjb25maWd1cmF0aW9uIG9yIGEgY3Jhc2ggZHVlIHRvIGEgc29mdHdhcmUgZXhlY3V0aW9uIG9mIGEgZGV2aWNlLWJvdW5kIHByb2dyYW0g4oCTIEkgZG9uJiMzOTt0IHNlZSBhbnkgY29tcGVsbGluZyBuZWVkIHRvIHVzZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBjaGVja3Mgc2hvdWxkIGJlIGVudGlyZWx5IHN1ZmZpY2llbnQgZm9yIGlkZW50aWZ5aW5nIGFueSBwcm9ibGVtcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdGhlc2UgY2hhbmdlcy4gVGhlIGZvY3VzIGhlcmUgaXMgb24gcnVudGltZSB2YWxpZGF0aW9uLCByYXRoZXIgdGhhbiBkZWVwIG1lbW9yeSBpbnRlZ3JpdHksIHNvIEtNU0FOIHNlZW1zIGxpa2Ugb3ZlcmtpbGwgaW4gdGhpcyBpbnN0YW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byByZWplY3QgaW52YWxpZCBCUEYgcHJvZ3JhbSBhdHRhY2htZW50cyAoZS5nLiwgZGV2aWNlLWJvdW5kIG9yIG9mZmxvYWRlZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGUgb3IgU0NIRURfQ0xTKS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGNvbnRyb2wgZmxvdyBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkbyBub3QgYWxsb2NhdGUgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgYW5kIGRvIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgYnVncyByZWxhdGVkIHRvIG1pc3NpbmcgdGhlc2UgY2hlY2tzIHdvdWxkIG1hbmlmZXN0IGFzIGNyYXNoZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGluY29ycmVjdCBiZWhhdmlvciwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcmVqZWN0IGludmFsaWQgQlBGIHByb2dyYW0gYXR0YWNobWVudHMgKGUuZy4sIGRldmljZS1ib3VuZCBvciBvZmZsb2FkZWQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlIG9yIFNDSEVEX0NMUykuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb250cm9sIGZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFsbG9jYXRlIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBtaXNzaW5nIHRoZXNlIGNoZWNrcyB3b3VsZCBtYW5pZmVzdCBhcyBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmNvcnJlY3QgYmVoYXZpb3IsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjUyOjUwLjc1ODM2NDIzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTAyNTcxMjMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICAgIFwiZGV2X2NoYW5nZV94ZHBfZmRcIixcbiAgICBcImJwZl94ZHBfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcmVqZWN0IGludmFsaWQgQlBGIHByb2dyYW0gYXR0YWNobWVudHMgKGUuZy4sIGRldmljZS1ib3VuZCBvciBvZmZsb2FkZWQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlIG9yIFNDSEVEX0NMUykuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb250cm9sIGZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFsbG9jYXRlIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBtaXNzaW5nIHRoZXNlIGNoZWNrcyB3b3VsZCBtYW5pZmVzdCBhcyBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmNvcnJlY3QgYmVoYXZpb3IsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcyBjb3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgYnlwYXNzaW5nIGNoZWNrcyBkdXJpbmcgbGluayB1cGRhdGVzLiBJdCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgaW50byBgZGV2X3hkcF9pbnN0YWxsYCBhbmQgYWRkcyBhIGNoZWNrIHRvIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AgdG8gcmVqZWN0IG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgbm9uLXN0YXRpYyBjb250cm9sLXBsYW5lIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1Mjo1MC43NTgzNjk2MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTE5MDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBiZjMzMGQ3MWY4MjU2ODYzZTI3NzU3ZjBkMTg3Y2ViOGI1NzZhODdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDU6NTI6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tcHJvZy5jIGIva2VybmVsL2JwZi9tcHJvZy5jXFxuaW5kZXggMTM5NDE2ODA2MmU4NS4uMGI1MDQ2NGVjOTAyZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcXG4rKysgYi9rZXJuZWwvYnBmL21wcm9nLmNcXG5AQCAtMjIyLDYgKzIyMiwxNCBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wb3NfYWZ0ZXIoc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdHJldHVybiB0dXBsZS1cXHUwMDNlcHJvZyA/IC1FTk9FTlQgOiBicGZfbXByb2dfdG90YWwoZW50cnkpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJwZl9tcHJvZ19jaGVja19wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4re1xcbitcXHRpZiAocHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctXFx1MDAzZWF1eCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdFxcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuQEAgLTIzNyw2ICsyNDUsOSBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcXG4gXFx0fTtcXG4gXFx0aW50IHJldCwgaWR4ID0gLUVSQU5HRSwgdGlkeDtcXG4gXFxuK1xcdHJldCA9IGJwZl9tcHJvZ19jaGVja19wcm9nKHByb2dfbmV3KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0aWYgKHJldmlzaW9uIFxcdTAwMjZcXHUwMDI2IHJldmlzaW9uICE9IGJwZl9tcHJvZ19yZXZpc2lvbihlbnRyeSkpXFxuIFxcdFxcdHJldHVybiAtRVNUQUxFO1xcbiBcXHRpZiAoYnBmX21wcm9nX2V4aXN0cyhlbnRyeSwgcHJvZ19uZXcpKVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggYWYyNjBmZjU0NjJhNi4uMzI4MWYyMjZjMWU1MiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTEwMzI5LDYgKzEwMzI5LDIxIEBAIHN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsXFxuIFxcbiBcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7XFxuIFxcbitcXHRpZiAocHJvZykge1xcbitcXHRcXHRpZiAobW9kZSAhPSBYRFBfTU9ERV9IVyBcXHUwMDI2XFx1MDAyNiBicGZfcHJvZ19pc19vZmZsb2FkZWQocHJvZy1cXHUwMDNlYXV4KSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJVc2luZyBvZmZsb2FkZWQgcHJvZ3JhbSB3aXRob3V0IEhXX01PREUgZmxhZyBpcyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cXHUwMDNlYXV4KSBcXHUwMDI2XFx1MDAyNiAhYnBmX29mZmxvYWRfZGV2X21hdGNoKHByb2csIGRldikpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUHJvZ3JhbSBib3VuZCB0byBkaWZmZXJlbnQgZGV2aWNlXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cXHUwMDNlYXV4KSBcXHUwMDI2XFx1MDAyNiBtb2RlID09IFhEUF9NT0RFX1NLQikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDYW4ndCBhdHRhY2ggZGV2aWNlLWJvdW5kIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZVxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRpZiAoZGV2LVxcdTAwM2VjZmctXFx1MDAzZWhkc19jb25maWcgPT0gRVRIVE9PTF9UQ1BfREFUQV9TUExJVF9FTkFCTEVEIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBwcm9nIFxcdTAwMjZcXHUwMDI2ICFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXhkcF9oYXNfZnJhZ3MpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwidW5hYmxlIHRvIGluc3RhbGwgWERQIHRvIGRldmljZSB1c2luZyB0Y3AtZGF0YS1zcGxpdFxcXCIpO1xcbkBAIC0xMDQ4MCwxOCArMTA0OTUsNiBAQCBzdGF0aWMgaW50IGRldl94ZHBfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOYXRpdmUgYW5kIGdlbmVyaWMgWERQIGNhbid0IGJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmICghb2ZmbG9hZCBcXHUwMDI2XFx1MDAyNiBicGZfcHJvZ19pc19vZmZsb2FkZWQobmV3X3Byb2ctXFx1MDAzZWF1eCkpIHtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVXNpbmcgb2ZmbG9hZGVkIHByb2dyYW0gd2l0aG91dCBIV19NT0RFIGZsYWcgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLVxcdTAwM2VhdXgpIFxcdTAwMjZcXHUwMDI2ICFicGZfb2ZmbG9hZF9kZXZfbWF0Y2gobmV3X3Byb2csIGRldikpIHtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUHJvZ3JhbSBib3VuZCB0byBkaWZmZXJlbnQgZGV2aWNlXFxcIik7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQobmV3X3Byb2ctXFx1MDAzZWF1eCkgXFx1MDAyNlxcdTAwMjYgbW9kZSA9PSBYRFBfTU9ERV9TS0IpIHtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2FuJ3QgYXR0YWNoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGVcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdH1cXG4gXFx0XFx0aWYgKG5ld19wcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfWERQX0RFVk1BUCkge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJCUEZfWERQX0RFVk1BUCBwcm9ncmFtcyBjYW4gbm90IGJlIGF0dGFjaGVkIHRvIGEgZGV2aWNlXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jXFxuaW5kZXggN2RkMThjNmQwNmM2MC4uNGExM2Y4ZWM0MzAwOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jXFxuQEAgLTEsOSArMSwxMSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9saW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgTE9DQUxfTkVUTlMgXFxcInhkcF9kZXZfYm91bmRfb25seV9uZXRuc1xcXCJcXG4rI2RlZmluZSBMSU5LX1VQREFURV9ORVROUyBcXFwieGRwX2Rldl9ib3VuZF9vbmx5X2x1X25ldG5zXFxcIlxcbiBcXG4gc3RhdGljIGludCBsb2FkX2R1bW15X3Byb2coY2hhciAqbmFtZSwgX191MzIgaWZpbmRleCwgX191MzIgZmxhZ3MpXFxuIHtcXG5AQCAtNTksMyArNjEsNTAgQEAgdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZClcXG4gXFx0ICovXFxuIFxcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIExPQ0FMX05FVE5TKTtcXG4gfVxcbitcXG4rLyogQSBkZXZpY2UtYm91bmQgcHJvZ3JhbSBtdXN0IG5vdCBydW4gb24gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoLlxcbisgKiBkZXZfeGRwX2F0dGFjaCgpIHJlamVjdGVkIHN1Y2ggcHJvZ3JhbXMsIGJ1dCBicGZfeGRwX2xpbmtfdXBkYXRlKCkgcmVhY2hlc1xcbisgKiBkZXZfeGRwX2luc3RhbGwoKSBkaXJlY3RseSBhbmQgYnlwYXNzZXMgaXQsIHNvIHRoZSBjaGVjayBoYXMgdG8gbGl2ZSBpblxcbisgKiBkZXZfeGRwX2luc3RhbGwoKS4gQ3JlYXRlIGEgZ2VuZXJpYyAoU0tCKSBYRFAgbGluayB3aXRoIGEgbm9ybWFsIHByb2dyYW0sXFxuKyAqIHRoZW4gdHJ5IHRvIHN3YXAgaW4gYSBkZXZpY2UtYm91bmQgcHJvZ3JhbSB2aWEgQlBGX0xJTktfVVBEQVRFLlxcbisgKi9cXG4rdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9saW5rX3VwZGF0ZSh2b2lkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl9saW5rX2NyZWF0ZV9vcHRzLCBsb3B0cywgLmZsYWdzID0gWERQX0ZMQUdTX1NLQl9NT0RFKTtcXG4rXFx0aW50IGJhc2VfZmQgPSAtMSwgZGV2Ym91bmRfZmQgPSAtMSwgbGlua19mZCA9IC0xO1xcbitcXHRzdHJ1Y3QgbnN0b2tlbiAqdG9rID0gTlVMTDtcXG4rXFx0X191MzIgaWZpbmRleDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdFNZUyhvdXQsIFxcXCJpcCBuZXRucyBhZGQgXFxcIiBMSU5LX1VQREFURV9ORVROUyk7XFxuK1xcdHRvayA9IG9wZW5fbmV0bnMoTElOS19VUERBVEVfTkVUTlMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIodG9rLCBcXFwib3Blbl9uZXRuc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFNZUyhvdXQsIFxcXCJpcCBsaW5rIGFkZCBldGg0MiB0eXBlIHZldGhcXFwiKTtcXG4rXFx0aWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFxcXCJldGg0MlxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9ORVEoaWZpbmRleCwgMCwgXFxcImlmX25hbWV0b2luZGV4XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZGV2Ym91bmRfZmQgPSBsb2FkX2R1bW15X3Byb2coXFxcImRldmJvdW5kXFxcIiwgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsIFxcXCJsb2FkX2R1bW15X3Byb2cgZGV2Ym91bmRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRiYXNlX2ZkID0gbG9hZF9kdW1teV9wcm9nKFxcXCJiYXNlXFxcIiwgMCwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGJhc2VfZmQsIDAsIFxcXCJsb2FkX2R1bW15X3Byb2cgYmFzZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGxpbmtfZmQgPSBicGZfbGlua19jcmVhdGUoYmFzZV9mZCwgaWZpbmRleCwgQlBGX1hEUCwgXFx1MDAyNmxvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UobGlua19mZCwgMCwgXFxcImJwZl9saW5rX2NyZWF0ZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGVyciA9IGJwZl9saW5rX3VwZGF0ZShsaW5rX2ZkLCBkZXZib3VuZF9mZCwgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShlcnIsIC1FSU5WQUwsIFxcXCJsaW5rX3VwZGF0ZSBkZXZpY2UtYm91bmQgcmVqZWN0ZWRcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0Y2xvc2UobGlua19mZCk7XFxuK1xcdGNsb3NlKGJhc2VfZmQpO1xcbitcXHRjbG9zZShkZXZib3VuZF9mZCk7XFxuK1xcdGNsb3NlX25ldG5zKHRvayk7XFxuK1xcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIExJTktfVVBEQVRFX05FVE5TKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1Mjo1MS4zMTAzNzY5MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0Mjg2MzU1Mzk2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tcHJvZ19hdHRhY2hcIixcbiAgICBcImRldl9jaGFuZ2VfeGRwX2ZkXCIsXG4gICAgXCJicGZfeGRwX2xpbmtfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcyBjb3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgYnlwYXNzaW5nIGNoZWNrcyBkdXJpbmcgbGluayB1cGRhdGVzLiBJdCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgaW50byBgZGV2X3hkcF9pbnN0YWxsYCBhbmQgYWRkcyBhIGNoZWNrIHRvIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AgdG8gcmVqZWN0IG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgbm9uLXN0YXRpYyBjb250cm9sLXBsYW5lIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYmYzMzBkNzFmODI1Njg2M2UyNzc1N2YwZDE4N2NlYjhiNTc2YTg3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDU6NTI6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21wcm9nLmMgYi9rZXJuZWwvYnBmL21wcm9nLmNcbmluZGV4IDEzOTQxNjgwNjJlODUuLjBiNTA0NjRlYzkwMmQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcbisrKyBiL2tlcm5lbC9icGYvbXByb2cuY1xuQEAgLTIyMiw2ICsyMjIsMTQgQEAgc3RhdGljIGludCBicGZfbXByb2dfcG9zX2FmdGVyKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0cmV0dXJuIHR1cGxlLVx1MDAzZXByb2cgPyAtRU5PRU5UIDogYnBmX21wcm9nX3RvdGFsKGVudHJ5KTtcbiB9XG4gXG4rc3RhdGljIGludCBicGZfbXByb2dfY2hlY2tfcHJvZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyBcdTAwMjZcdTAwMjZcbitcdCAgICBicGZfcHJvZ19pc19vZmZsb2FkZWQocHJvZy1cdTAwM2VhdXgpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuIFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZ19uZXcsIHN0cnVjdCBicGZfbGluayAqbGluayxcbkBAIC0yMzcsNiArMjQ1LDkgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHR9O1xuIFx0aW50IHJldCwgaWR4ID0gLUVSQU5HRSwgdGlkeDtcbiBcbitcdHJldCA9IGJwZl9tcHJvZ19jaGVja19wcm9nKHByb2dfbmV3KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXHRpZiAocmV2aXNpb24gXHUwMDI2XHUwMDI2IHJldmlzaW9uICE9IGJwZl9tcHJvZ19yZXZpc2lvbihlbnRyeSkpXG4gXHRcdHJldHVybiAtRVNUQUxFO1xuIFx0aWYgKGJwZl9tcHJvZ19leGlzdHMoZW50cnksIHByb2dfbmV3KSlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBhZjI2MGZmNTQ2MmE2Li4zMjgxZjIyNmMxZTUyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTAzMjksNiArMTAzMjksMjEgQEAgc3RhdGljIGludCBkZXZfeGRwX2luc3RhbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBicGZfeGRwX21vZGUgbW9kZSxcbiBcbiBcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcbiBcbitcdGlmIChwcm9nKSB7XG4rXHRcdGlmIChtb2RlICE9IFhEUF9NT0RFX0hXIFx1MDAyNlx1MDAyNiBicGZfcHJvZ19pc19vZmZsb2FkZWQocHJvZy1cdTAwM2VhdXgpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlVzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdFx0aWYgKGJwZl9wcm9nX2lzX2Rldl9ib3VuZChwcm9nLVx1MDAzZWF1eCkgXHUwMDI2XHUwMDI2ICFicGZfb2ZmbG9hZF9kZXZfbWF0Y2gocHJvZywgZGV2KSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJQcm9ncmFtIGJvdW5kIHRvIGRpZmZlcmVudCBkZXZpY2VcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdFx0aWYgKGJwZl9wcm9nX2lzX2Rldl9ib3VuZChwcm9nLVx1MDAzZWF1eCkgXHUwMDI2XHUwMDI2IG1vZGUgPT0gWERQX01PREVfU0tCKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkNhbid0IGF0dGFjaCBkZXZpY2UtYm91bmQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRpZiAoZGV2LVx1MDAzZWNmZy1cdTAwM2VoZHNfY29uZmlnID09IEVUSFRPT0xfVENQX0RBVEFfU1BMSVRfRU5BQkxFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICBwcm9nIFx1MDAyNlx1MDAyNiAhcHJvZy1cdTAwM2VhdXgtXHUwMDNleGRwX2hhc19mcmFncykge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwidW5hYmxlIHRvIGluc3RhbGwgWERQIHRvIGRldmljZSB1c2luZyB0Y3AtZGF0YS1zcGxpdFwiKTtcbkBAIC0xMDQ4MCwxOCArMTA0OTUsNiBAQCBzdGF0aWMgaW50IGRldl94ZHBfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJOYXRpdmUgYW5kIGdlbmVyaWMgWERQIGNhbid0IGJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lXCIpO1xuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHR9XG4tXHRcdGlmICghb2ZmbG9hZCBcdTAwMjZcdTAwMjYgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKG5ld19wcm9nLVx1MDAzZWF1eCkpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiVXNpbmcgb2ZmbG9hZGVkIHByb2dyYW0gd2l0aG91dCBIV19NT0RFIGZsYWcgaXMgbm90IHN1cHBvcnRlZFwiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0XHRpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLVx1MDAzZWF1eCkgXHUwMDI2XHUwMDI2ICFicGZfb2ZmbG9hZF9kZXZfbWF0Y2gobmV3X3Byb2csIGRldikpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiUHJvZ3JhbSBib3VuZCB0byBkaWZmZXJlbnQgZGV2aWNlXCIpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQobmV3X3Byb2ctXHUwMDNlYXV4KSBcdTAwMjZcdTAwMjYgbW9kZSA9PSBYRFBfTU9ERV9TS0IpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiQ2FuJ3QgYXR0YWNoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGVcIik7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbiBcdFx0aWYgKG5ld19wcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9YRFBfREVWTUFQKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkJQRl9YRFBfREVWTUFQIHByb2dyYW1zIGNhbiBub3QgYmUgYXR0YWNoZWQgdG8gYSBkZXZpY2VcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xuaW5kZXggN2RkMThjNmQwNmM2MC4uNGExM2Y4ZWM0MzAwOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xuQEAgLTEsOSArMSwxMSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9saW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFx1MDAzZVxuIFxuICNkZWZpbmUgTE9DQUxfTkVUTlMgXCJ4ZHBfZGV2X2JvdW5kX29ubHlfbmV0bnNcIlxuKyNkZWZpbmUgTElOS19VUERBVEVfTkVUTlMgXCJ4ZHBfZGV2X2JvdW5kX29ubHlfbHVfbmV0bnNcIlxuIFxuIHN0YXRpYyBpbnQgbG9hZF9kdW1teV9wcm9nKGNoYXIgKm5hbWUsIF9fdTMyIGlmaW5kZXgsIF9fdTMyIGZsYWdzKVxuIHtcbkBAIC01OSwzICs2MSw1MCBAQCB2b2lkIHRlc3RfeGRwX2Rldl9ib3VuZF9vbmx5X29mZmRldih2b2lkKVxuIFx0ICovXG4gXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIExPQ0FMX05FVE5TKTtcbiB9XG4rXG4rLyogQSBkZXZpY2UtYm91bmQgcHJvZ3JhbSBtdXN0IG5vdCBydW4gb24gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoLlxuKyAqIGRldl94ZHBfYXR0YWNoKCkgcmVqZWN0ZWQgc3VjaCBwcm9ncmFtcywgYnV0IGJwZl94ZHBfbGlua191cGRhdGUoKSByZWFjaGVzXG4rICogZGV2X3hkcF9pbnN0YWxsKCkgZGlyZWN0bHkgYW5kIGJ5cGFzc2VzIGl0LCBzbyB0aGUgY2hlY2sgaGFzIHRvIGxpdmUgaW5cbisgKiBkZXZfeGRwX2luc3RhbGwoKS4gQ3JlYXRlIGEgZ2VuZXJpYyAoU0tCKSBYRFAgbGluayB3aXRoIGEgbm9ybWFsIHByb2dyYW0sXG4rICogdGhlbiB0cnkgdG8gc3dhcCBpbiBhIGRldmljZS1ib3VuZCBwcm9ncmFtIHZpYSBCUEZfTElOS19VUERBVEUuXG4rICovXG4rdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9saW5rX3VwZGF0ZSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl9saW5rX2NyZWF0ZV9vcHRzLCBsb3B0cywgLmZsYWdzID0gWERQX0ZMQUdTX1NLQl9NT0RFKTtcbitcdGludCBiYXNlX2ZkID0gLTEsIGRldmJvdW5kX2ZkID0gLTEsIGxpbmtfZmQgPSAtMTtcbitcdHN0cnVjdCBuc3Rva2VuICp0b2sgPSBOVUxMO1xuK1x0X191MzIgaWZpbmRleDtcbitcdGludCBlcnI7XG4rXG4rXHRTWVMob3V0LCBcImlwIG5ldG5zIGFkZCBcIiBMSU5LX1VQREFURV9ORVROUyk7XG4rXHR0b2sgPSBvcGVuX25ldG5zKExJTktfVVBEQVRFX05FVE5TKTtcbitcdGlmICghQVNTRVJUX09LX1BUUih0b2ssIFwib3Blbl9uZXRuc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRTWVMob3V0LCBcImlwIGxpbmsgYWRkIGV0aDQyIHR5cGUgdmV0aFwiKTtcbitcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChcImV0aDQyXCIpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKGlmaW5kZXgsIDAsIFwiaWZfbmFtZXRvaW5kZXhcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZGV2Ym91bmRfZmQgPSBsb2FkX2R1bW15X3Byb2coXCJkZXZib3VuZFwiLCBpZmluZGV4LCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsIFwibG9hZF9kdW1teV9wcm9nIGRldmJvdW5kXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJhc2VfZmQgPSBsb2FkX2R1bW15X3Byb2coXCJiYXNlXCIsIDAsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoYmFzZV9mZCwgMCwgXCJsb2FkX2R1bW15X3Byb2cgYmFzZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRsaW5rX2ZkID0gYnBmX2xpbmtfY3JlYXRlKGJhc2VfZmQsIGlmaW5kZXgsIEJQRl9YRFAsIFx1MDAyNmxvcHRzKTtcbitcdGlmICghQVNTRVJUX0dFKGxpbmtfZmQsIDAsIFwiYnBmX2xpbmtfY3JlYXRlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGVyciA9IGJwZl9saW5rX3VwZGF0ZShsaW5rX2ZkLCBkZXZib3VuZF9mZCwgTlVMTCk7XG4rXHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcImxpbmtfdXBkYXRlIGRldmljZS1ib3VuZCByZWplY3RlZFwiKTtcbitcbitvdXQ6XG4rXHRjbG9zZShsaW5rX2ZkKTtcbitcdGNsb3NlKGJhc2VfZmQpO1xuK1x0Y2xvc2UoZGV2Ym91bmRfZmQpO1xuK1x0Y2xvc2VfbmV0bnModG9rKTtcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgXCIgTElOS19VUERBVEVfTkVUTlMpO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjUyOjUxLjMxMDM3ODk4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTMxMTY5MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHRvdWNoZXMgYGtlcm5lbC9icGYvbXByb2cuY2AgYW5kIGBuZXQvY29yZS9kZXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIHNvbWUgaXNzdWVzIHJlbGF0ZWQgdG8gQlBGIHByb2dyYW1zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gb2ZmbG9hZGVkIGFuZCBkZXZpY2UtYm91bmQgcHJvZ3JhbXMgd2l0aGluIHRoZSBYRFAgYW5kIHRjICh0cmFmZmljIGNvbnRyb2wpIGNvbnRleHRzLiBUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgdGhpcyBvcmlnaW5hdGVkIGZyb20gYSBzeXotY2x1c3RlciByZXBvcnQsIHNvIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBpdCBhZGRyZXNzZXMgYSByZWFsIHZ1bG5lcmFiaWxpdHkuXG5cbkxldCdzIGJyZWFrIGRvd24gd2hhdCdzIGhhcHBlbmluZy4gSW4gYGtlcm5lbC9icGYvbXByb2cuY2AsIGEgbmV3IGNoZWNrIGhhcyBiZWVuIGFkZGVkIGluIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AuIEl0IGxvb2tzIGxpa2UgaXQgcmVqZWN0cyBvZmZsb2FkZWQgcHJvZ3JhbXMgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIHdoaWNoIGlzIHJlbGV2YW50IHRvIHRjeC4gVGhpcyBmdW5jdGlvbiBpcyBzdWJzZXF1ZW50bHkgY2FsbGVkIGJ5IGBicGZfbXByb2dfYXR0YWNoYC5cblxuVGhlbiwgd2UgaGF2ZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9kZXYuY2AuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW52b2x2ZSBtb3ZpbmcgY2hlY2tzIGZyb20gYGRldl94ZHBfYXR0YWNoYCB0byBgZGV2X3hkcF9pbnN0YWxsYC4gIFRoZXNlIGNoZWNrcyBhcmUgYXJvdW5kIGhvdyBvZmZsb2FkZWQgcHJvZ3JhbXMgYmVoYXZlIGluIFhEUCwgYW5kIHRoZXkgYXBwZWFyIHRvIGJlIGFkZHJlc3NpbmcgYSBjYXNlIHdoZXJlIGBicGZfeGRwX2xpbmtfdXBkYXRlYCBieXBhc3NlcyBgZGV2X3hkcF9hdHRhY2hgLCBhbmQgaW5zdGVhZCBkaXJlY3RseSByZWFjaGVzIGBkZXZfeGRwX2luc3RhbGxgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBwcm90ZWN0aW5nIHRoZSBYRFAgc29mdHdhcmUgcGF0aCBieSBtYWtpbmcgc3VyZSB0aGF0IGRldmljZS1ib3VuZCBwcm9ncmFtcyBjYW4ndCBydW4gdGhlcmUuIEl0IGFsc28gcHJldmVudHMgb2ZmbG9hZGVkIHByb2dyYW1zIGZyb20gYmVpbmcgdXNlZCB3aXRoIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBhcmU6XG5cbiogICBgYnBmX21wcm9nX2F0dGFjaGA6IFRoaXMgaXMgd2hlcmUgdGhhdCBuZXcgY2hlY2sgaW4gYG1wcm9nLmNgIGdldHMgdHJpZ2dlcmVkLiBJdCBzZWVtcyBpbXBvcnRhbnQgdG8gdHJpZ2dlciB0aGUgc3BlY2lmaWMgZXJyb3IgY2FzZXMuXG4qICAgYGRldl94ZHBfaW5zdGFsbGA6IFRoZSB0YXJnZXQgb2YgdGhlIGJ5cGFzcywgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29yZSBuZXcgY2hlY2tzIGFkZGVkIGhlcmUuXG4qICAgYGJwZl94ZHBfbGlua191cGRhdGVgOiBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGJ5cGFzc2VzIGBkZXZfeGRwX2F0dGFjaGAsIHNvIHdvcnRoIGludmVzdGlnYXRpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjaGVja3MgaW4gYGRldl94ZHBfaW5zdGFsbGAuXG5cbkknbSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IGBkZXZfeGRwX2luc3RhbGxgIGlzIHN0YXRpYywgd2hpY2ggY2FuIGNvbXBsaWNhdGUgZGlyZWN0IGZ1enppbmcgb2YgaXQsIGJ1dCBmaW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgYmUgZXNzZW50aWFsLiBgYnBmX21wcm9nX2F0dGFjaGAgaXMgbm90IHN0YXRpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHRlc3QuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uLCBhbmQgdGhlIG5ldyBhZGRlZCBjaGVjayBpbiBgYnBmX21wcm9nX2NoZWNrX3Byb2dgIG11c3QgYmUgZXZhbHVhdGVkLlxuVGhlIGNoYW5nZSBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCB0b3VjaGVzIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGxvZ2ljLCBhbmQgdGhlIHN5ei1jbHVzdGVyIG9yaWdpbiBpbXBsaWVzIHRoYXQgaXQgaGFzIHNvbWUgcmVhbC13b3JsZCByZWxldmFuY2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBzcGVjaWZpY2FsbHkgdHJpZ2dlciB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gdGhvc2UgbmV3IGNoZWNrcyBiZWluZyBoaXQgd2l0aGluIHRoZSBuZXcgZXJyb3IgY2FzZXMsIGFuZCB0cmlnZ2VyIHRoZSBieXBhc3MsIHdoaWNoIGlzIHdoZXJlIHRoZSBidWdzIG1heSByZXNpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1MzowMy40NDE1NTEwMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzOTI5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X3hkcF9pbnN0YWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTEwMzE2PXN0YXRpYyB2b2lkIGRldl94ZHBfc2V0X3Byb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBicGZfeGRwX21vZGUgbW9kZSxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwMzIyLVxcbm5ldC9jb3JlL2Rldi5jOjEwMzIzOnN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsXFxubmV0L2NvcmUvZGV2LmMtMTAzMjQtXFx0XFx0XFx0ICAgYnBmX29wX3QgYnBmX29wLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDM4NT1zdGF0aWMgdm9pZCBkZXZfeGRwX3VuaW5zdGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA0MDItXFxubmV0L2NvcmUvZGV2LmM6MTA0MDM6XFx0XFx0V0FSTl9PTihkZXZfeGRwX2luc3RhbGwoZGV2LCBtb2RlLCBicGZfb3AsIE5VTEwsIDAsIE5VTEwpKTtcXG5uZXQvY29yZS9kZXYuYy0xMDQwNC1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwNDE2PXN0YXRpYyBpbnQgZGV2X3hkcF9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA1MTUtXFxubmV0L2NvcmUvZGV2LmM6MTA1MTY6XFx0XFx0ZXJyID0gZGV2X3hkcF9pbnN0YWxsKGRldiwgbW9kZSwgYnBmX29wLCBleHRhY2ssIGZsYWdzLCBuZXdfcHJvZyk7XFxubmV0L2NvcmUvZGV2LmMtMTA1MTctXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwNTM4PXN0YXRpYyBpbnQgZGV2X3hkcF9kZXRhY2hfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA1NTEtXFx0YnBmX29wID0gZGV2X3hkcF9icGZfb3AoZGV2LCBtb2RlKTtcXG5uZXQvY29yZS9kZXYuYzoxMDU1MjpcXHRXQVJOX09OKGRldl94ZHBfaW5zdGFsbChkZXYsIG1vZGUsIGJwZl9vcCwgTlVMTCwgMCwgTlVMTCkpO1xcbm5ldC9jb3JlL2Rldi5jLTEwNTUzLVxcdGRldl94ZHBfc2V0X2xpbmsoZGV2LCBtb2RlLCBOVUxMKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwNjE4PXN0YXRpYyBpbnQgYnBmX3hkcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDY1My1cXHRicGZfb3AgPSBkZXZfeGRwX2JwZl9vcCh4ZHBfbGluay1cXHUwMDNlZGV2LCBtb2RlKTtcXG5uZXQvY29yZS9kZXYuYzoxMDY1NDpcXHRlcnIgPSBkZXZfeGRwX2luc3RhbGwoeGRwX2xpbmstXFx1MDAzZWRldiwgbW9kZSwgYnBmX29wLCBOVUxMLFxcbm5ldC9jb3JlL2Rldi5jLTEwNjU1LVxcdFxcdFxcdCAgICAgIHhkcF9saW5rLVxcdTAwM2VmbGFncywgbmV3X3Byb2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1MzowMy40OTE5NDk1NzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODMwNjQzMDQ2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl94ZHBfbGlua191cGRhdGVgJ3MgSW1tdXRhYmlsaXR5KipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBYRFAgYW5kIHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgYWdhaW4uIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcg4oCTIG15IG1lbW9yeSdzIHRlbGxpbmcgbWUgdGhhdCBgYnBmX3hkcF9saW5rX3VwZGF0ZWAgaXMgZGVmaW5lZCBhcyBzdGF0aWMgdG9vLCBidXQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucy4gSXQncyBjcnVjaWFsLCBvYnZpb3VzbHksIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbmthZ2UgcmVzdHJpY3Rpb25zIHRoYXQgYWZmZWN0IGhvdyB3ZSBjYW4gdXNlIHRoZW0gYWNyb3NzIGRpZmZlcmVudCBjb21waWxhdGlvbiB1bml0cywgcGFydGljdWxhcmx5IHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgbGlua2luZywgYW5kIEkgZG9uJ3Qgd2FudCB0byBydW4gaW50byBhbnkgdW5leHBlY3RlZCBsaW5rYWdlIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBTbywgbGV0IG1lIGp1c3QgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBicGZfeGRwX2xpbmtfdXBkYXRlYCBhbmQgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIFRpbWUgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gbXkgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjk1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTc6NDYuNTU2MjU2ODk3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjUxNjM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfeGRwX2xpbmtfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTEwNjAzPXN0YXRpYyBpbnQgYnBmX3hkcF9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNjE3LVxcbm5ldC9jb3JlL2Rldi5jOjEwNjE4OnN0YXRpYyBpbnQgYnBmX3hkcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxubmV0L2NvcmUvZGV2LmMtMTA2MTktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDY2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfeGRwX2xpbmtfbG9wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNjczLVxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl94ZHBfbGlua19maWxsX2xpbmtfaW5mbyxcXG5uZXQvY29yZS9kZXYuYzoxMDY3NDpcXHQudXBkYXRlX3Byb2cgPSBicGZfeGRwX2xpbmtfdXBkYXRlLFxcbm5ldC9jb3JlL2Rldi5jLTEwNjc1LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU3OjQ3LjA2MjgxNzQ1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTM4MDY1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgU3RhdGljIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyBpbmRlZWQgc3RhdGljLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIHNvIGxldCdzIGtlZXAgdGhhdCBmcm9udCBhbmQgY2VudGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB0aGVuIGRyaWZ0cyB0byBgZGV2X3hkcF9hdHRhY2hgLi4ueXVwLCB0aGF0J3MgYW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIG9mdGVuIGEgY2x1ZSBhYm91dCBkZXNpZ24gcGF0dGVybnMuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZXNlIHN0YXRpY2FsbHkgZGVjbGFyZWQgaXRlbXMgYXJlICp1c2VkKi4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyB0aGF0IGludm9rZSB0aGVzZSBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbGluZyBjb250ZXh0cyB3aWxsIHJldmVhbCB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwdXJwb3NlIG9mIHRoZXNlIHNlZW1pbmdseSBpc29sYXRlZCBzdGF0aWMgY29tcG9uZW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdW5wYWNrIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1Nzo1MC43MTY2MjY0MDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MzYwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X3hkcF9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MTAzODU9c3RhdGljIHZvaWQgZGV2X3hkcF91bmluc3RhbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNDE1LVxcbm5ldC9jb3JlL2Rldi5jOjEwNDE2OnN0YXRpYyBpbnQgZGV2X3hkcF9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbm5ldC9jb3JlL2Rldi5jLTEwNDE3LVxcdFxcdFxcdCAgc3RydWN0IGJwZl94ZHBfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNTMwLVxcbm5ldC9jb3JlL2Rldi5jOjEwNTMxOnN0YXRpYyBpbnQgZGV2X3hkcF9hdHRhY2hfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2Rldi5jLTEwNTMyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDUzNC17XFxubmV0L2NvcmUvZGV2LmM6MTA1MzU6XFx0cmV0dXJuIGRldl94ZHBfYXR0YWNoKGRldiwgZXh0YWNrLCBsaW5rLCBOVUxMLCBOVUxMLCBsaW5rLVxcdTAwM2VmbGFncyk7XFxubmV0L2NvcmUvZGV2LmMtMTA1MzYtfVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTA2Nzc9aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNzEwLVxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jOjEwNzExOlxcdGVyciA9IGRldl94ZHBfYXR0YWNoX2xpbmsoZGV2LCBcXHUwMDI2ZXh0YWNrLCBsaW5rKTtcXG5uZXQvY29yZS9kZXYuYy0xMDcxMi1cXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTA3NDU9aW50IGRldl9jaGFuZ2VfeGRwX2ZkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNzcwLVxcbm5ldC9jb3JlL2Rldi5jOjEwNzcxOlxcdGVyciA9IGRldl94ZHBfYXR0YWNoKGRldiwgZXh0YWNrLCBOVUxMLCBuZXdfcHJvZywgb2xkX3Byb2csIGZsYWdzKTtcXG5uZXQvY29yZS9kZXYuYy0xMDc3Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTc6NTAuNzYyMzY1NTM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzODM5ODMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBYRFAgQXR0YWNobWVudCBNZXRob2RzKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBYRFAgYXR0YWNobWVudCBtZXRob2RzLiBUaGUgZmFjdCB0aGF0IGBicGZfeGRwX2xpbmtfYXR0YWNoYCBhbmQgYGRldl9jaGFuZ2VfeGRwX2ZkYCBhcmVuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AgaXMgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgdXNlIGNhc2VzIGFuZCBsaW5rYWdlIGltcGxpY2F0aW9ucy4gTm93LCBsZXQgbWUgc2VlLi4uIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcmVsYXRlZCBmdW5jdGlvbnMsIHNvIHRoZSBuZXh0IHRoaW5nIG9uIHRoZSBsaXN0IHRvIGNsYXJpZnkgdGhlIHN0YXRlIG9mIHRoaW5ncyBpcyBgYnBmX21wcm9nX2F0dGFjaGAuIExldCBtZSBjaGVjayB0aGF0IG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1Nzo1Ni42MDA3NjYxMjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzMxMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tcHJvZ19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tcHJvZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbXByb2cuYz0yMjU9c3RhdGljIGludCBicGZfbXByb2dfY2hlY2tfcHJvZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL21wcm9nLmMtMjMyLVxcbmtlcm5lbC9icGYvbXByb2cuYzoyMzM6aW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxua2VybmVsL2JwZi9tcHJvZy5jLTIzNC1cXHRcXHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU3OjU2LjY0OTEwNDEyNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE2MDE5OTI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIGBicGZfbXByb2dfYXR0YWNoYCBpcyBub24tc3RhdGljLCB0aGF0J3MgZ29vZCB0byBrbm93LiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWluIGZyb20gYGJwZl94ZHBfbGlua191cGRhdGVgLiBJIHNlZSBpdCdzIHVzZWQgYXMgYSBjYWxsYmFjayBpbiBgYnBmX3hkcF9saW5rX2xvcHNgLCBhbmQgdGhhdCBgdXBkYXRlX3Byb2dgIGNhbGxiYWNrIGlzIGNhbGxlZCBmcm9tIGBicGZfbGlua191cGRhdGVgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFNvLCBgYnBmX2xpbmtfdXBkYXRlYCBpcyBvdXIgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQuIE5vdywgbGV0IG1lIGNoZWNrIGBkZXZfY2hhbmdlX3hkcF9mZGAgLSB0aGF0J3MgYmVpbmcgY2FsbGVkIGZyb20gbmV0bGluay4gQW5kIGBicGZfeGRwX2xpbmtfYXR0YWNoYCwgd2hpY2ggaXMgYWxzbyBpbXBvcnRhbnQsIGlzIGNhbGxlZCBmcm9tIGBsaW5rX2NyZWF0ZWAgaW4gdGhlIHNhbWUgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBmaWxlLlxuXG5UaGlzIHBhdGNoIGlzIGZpeGluZyBhbiBpc3N1ZSB3aXRoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBzb21laG93IGVuZGluZyB1cCBvbiBnZW5lcmljIFhEUCBwYXRocywgYW5kIGFsc28gcHJldmVudGluZyBvZmZsb2FkZWQgcHJvZ3JhbXMgZnJvbSBiZWluZyBhdHRhY2hlZCB0byBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIHdpdGhvdXQgdGhlIGBIV19NT0RFYCBmbGFnLiBCdXQgd2FpdCwgYGJwZl9tcHJvZ19jaGVja19wcm9nYCBzaG91bGQgaGF2ZSBiZWVuIHJlamVjdGluZyB0aG9zZSBvZmZsb2FkZWQgcHJvZ3JhbXMgYW55d2F5LlxuXG5JcyB0aGlzIHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIEl0IGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgd2hlcmUgYSBkZXZpY2UtYm91bmQgcHJvZ3JhbSBjb3VsZCBleGVjdXRlIGluIHRoZSBYRFAgc29mdHdhcmUgcGF0aCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBpc3N1ZS4gVGhlIHBhdGNoIGlzIGFkZGluZyBjaGVja3MgaW4gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgZGV2X3hkcF9pbnN0YWxsYCwgc28gdGhvc2UgYXJlIGNyaXRpY2FsIGFyZWFzLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb246XG5cbiogICBgYnBmX21wcm9nX2F0dGFjaGBcbiogICBgYnBmX3hkcF9saW5rX2F0dGFjaGBcbiogICBgZGV2X2NoYW5nZV94ZHBfZmRgXG5cbkhvbGQgb24gYSBzZWNvbmQsIGBicGZfeGRwX2xpbmtfYXR0YWNoYCBpcyBmb3IgY3JlYXRpbmcgYSBsaW5rLiBUaGUgYnVnIHdhcyBpbiBgYnBmX3hkcF9saW5rX3VwZGF0ZWAsIHdoaWNoIHNlZW1zIHRvIGhhdmUgYnlwYXNzZWQgc29tZSBjaGVja3MuIFNvLCB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCBpcyBgYnBmX2xpbmtfdXBkYXRlYCB0cmlnZ2VyaW5nIGBicGZfeGRwX2xpbmtfdXBkYXRlYC4gQnV0IGBicGZfbGlua191cGRhdGVgIGlzIGEgZ2VuZXJpYyBzeXN0ZW0gY2FsbCBmdW5jdGlvbi4gSXMgdGhlcmUgYSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgWERQIGxpbmsgdXBkYXRlPyBObywgYGJwZl94ZHBfbGlua191cGRhdGVgIGlzIHN0YXRpYy4gQWxyaWdodCwgbGV0J3Mgc3RpY2sgd2l0aCB0aGUgcGxhbi4gSSBzaG91bGQgc3RpbGwgZm9jdXMgb24gYGJwZl9tcHJvZ19hdHRhY2hgLCBgZGV2X2NoYW5nZV94ZHBfZmRgLCBhbmQgYGJwZl94ZHBfbGlua19hdHRhY2hgLiBUaW1lIHRvIG1ha2Ugc3VyZSBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXNuJ3Qgc3RhdGljLCBqdXN0IHRvIGJlIHN1cmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1ODo0OC44MDkzMDc0MjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTc2MDYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfeGRwX2xpbmtfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTEwNjY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl94ZHBfbGlua19sb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA2NzYtXFxubmV0L2NvcmUvZGV2LmM6MTA2Nzc6aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9kZXYuYy0xMDY3OC17XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDcxNy1cXHRcXHRicGZfbGlua19jbGVhbnVwKFxcdTAwMjZsaW5rX3ByaW1lcik7XFxubmV0L2NvcmUvZGV2LmM6MTA3MTg6XFx0XFx0dHJhY2VfYnBmX3hkcF9saW5rX2F0dGFjaF9mYWlsZWQoZXh0YWNrLl9tc2cpO1xcbm5ldC9jb3JlL2Rldi5jLTEwNzE5LVxcdFxcdGdvdG8gb3V0X3B1dF9kZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU4OjQ5LjIwOTA3MzE2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg4NTQwMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBCUEYgQXR0YWNobWVudCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGNvbmZpcm1pbmcgdGhhdCBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXMgaW5kZWVkICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZCB0byBrbm93LCBjb25maXJtaW5nIG15IHJlY29sbGVjdGlvbi4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCwgYXMgSSBjb25zaWRlciB0aGlzIGF0dGFjaCBwb2ludCwgaXM6IHdoYXQgYWJvdXQgYGJwZl9tcHJvZ19hdHRhY2hgPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaXRzIHN0YXR1cyBhbmQgdXNhZ2Ugc2NlbmFyaW9zIHJlbGF0ZWQgdG8gdGhpcyBhdHRhY2htZW50IHN0cmF0ZWd5LiBJcyB0aGVyZSBzb21lIHBvdGVudGlhbCBmb3IgdXNpbmcgdGhhdCBmdW5jdGlvbiwgb3IgYW5vdGhlciBzaW1pbGFyIG9uZSwgaW4gYSBzY2VuYXJpbyByZWxldmFudCB0byB3aGF0IEknbSBjdXJyZW50bHkgd29ya2luZyBvbj8gTGV0IG1lIHNlZS4gSSBiZXR0ZXIgbWFrZSBzdXJlIEkga25vdyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1ODo1Mi40OTc2MTc0MDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDkwMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tcHJvZ19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tcHJvZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbXByb2cuYz0yMjU9c3RhdGljIGludCBicGZfbXByb2dfY2hlY2tfcHJvZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL21wcm9nLmMtMjMyLVxcbmtlcm5lbC9icGYvbXByb2cuYzoyMzM6aW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxua2VybmVsL2JwZi9tcHJvZy5jLTIzNC1cXHRcXHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU4OjUyLjU0MzExNTgwNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODIyODM4NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgYGJwZl9tcHJvZ19hdHRhY2hgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGJwZl9tcHJvZ19hdHRhY2hgIGlzIGNvbmZpcm1lZCBhcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIGtlcm5lbCBDT05GSUcgb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgdGhhdCdzIGZ1bmRhbWVudGFsIGFuZCBleHBlY3RlZC4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfTkVUYCBpcyBlc3NlbnRpYWwsIG5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gV2hhdCBhYm91dCBgQ09ORklHX1hEUF9TT0NLRVRTYD8gSG1tLCB0aGF0J3MgWERQLXNwZWNpZmljLCBzbyBpdCdzIHByb2JhYmx5IG5vdCBuZWVkZWQgaGVyZS4gVG8gYmUgY2VydGFpbiwgSSBzaG91bGQgcmVhbGx5IGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZSBmb3IgYGtlcm5lbC9icGYvbXByb2cuY2AuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjI2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MDAuMzY1OTU3NTI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAwNjg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHJvZ1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTU9b2JqLSR7Q09ORklHX0JQRl9MU019XFx0ICArPSBicGZfaW5vZGVfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRpc2FzbS5vIG1wcm9nLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MDAuNDEwOTcwNzExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzMyMjQ5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgc2VlbXMgc3VmZmljaWVudCBmb3IgYG1wcm9nLmNgLCB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZSBpbiB0aGlzIGJ1aWxkIHByb2Nlc3MuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGBuZXQvY29yZS9kZXYuY2AuIEkga25vdyB0aGF0J3MgYWx3YXlzIGNvbXBpbGVkIGFzIGxvbmcgYXMgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEgcHJldHR5IGNvbW1vbiBzZXR0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYWZmZWN0IGl0cyBidWlsZCBvciBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSB0ZXN0IGNhc2UgaXRzZWxmLiBJdCB1c2VzIGBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFlgLCB3aGljaCBpcyBhbiBYRFAgZmxhZy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19ORVRERVZfT0ZGTE9BRGAgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGFueXRoaW5nIHRoYXQgZW5hYmxlcyBuZXR3b3JrIGRldmljZSBvZmZsb2FkIGZlYXR1cmVzIGluIHRoZSBCUEYgY29udGV4dCDigJMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBicGZfcHJvZ19pc19vZmZsb2FkZWRgLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGVzZSBhcmUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTowNS40NDQxOTg4OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDM4MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX2lzX29mZmxvYWRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MzYzMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfZGV2X2JvdW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzYzNy1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2Mzg6c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX29mZmxvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNjM5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzY5Nj1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfZGV2X2JvdW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzcwMC1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3MDE6c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX29mZmxvYWRlZChzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzAyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MDUuNDg4NjQ2NDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MTE4Njg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgeW91IGRlc2NyaWJlZDpcblxuKipFeGFtaW5pbmcgQlBGIE9mZmxvYWQgRGV0ZWN0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgZGV0ZXJtaW5pbmcgaWYgYSBCUEYgcHJvZ3JhbSBpcyBvZmZsb2FkZWQuIExldCdzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGhlYWRlciBmaWxlLCBgaW5jbHVkZS9saW51eC9icGYuaGAuIE15IGltbWVkaWF0ZSB0YXJnZXQgaXMgdGhhdCBgI2lmZGVmYCBibG9jayBzdXJyb3VuZGluZyBgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgbGlrZWx5IHJlc2lkZS4gSSdtIGFzc3VtaW5nIHRoaXMgbWFjcm8gb3IgZnVuY3Rpb24gaXMgY2VudHJhbCB0byB0aGUgb2ZmbG9hZCBkZXRlY3Rpb24sIGFuZCBJIG5lZWQgdG8gc2VlIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG9vLCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTowOS41Mjk4Mzc2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9icGYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNjMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjMwOlxcdGludCBicGZfcHJvZ19kZXZfYm91bmRfaW5oZXJpdChzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nKTtcXG4zNjMxOlxcdHZvaWQgYnBmX2Rldl9ib3VuZF9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4zNjMyOlxcdFxcbjM2MzM6XFx0c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX2Rldl9ib3VuZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuMzYzNDpcXHR7XFxuMzYzNTpcXHRcXHRyZXR1cm4gYXV4LVxcdTAwM2VkZXZfYm91bmQ7XFxuMzYzNjpcXHR9XFxuMzYzNzpcXHRcXG4zNjM4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19pc19vZmZsb2FkZWQoY29uc3Qgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcbjM2Mzk6XFx0e1xcbjM2NDA6XFx0XFx0cmV0dXJuIGF1eC1cXHUwMDNlb2ZmbG9hZF9yZXF1ZXN0ZWQ7XFxuMzY0MTpcXHR9XFxuMzY0MjpcXHRcXG4zNjQzOlxcdGJvb2wgYnBmX3Byb2dfZGV2X2JvdW5kX21hdGNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqbGhzLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnJocyk7XFxuMzY0NDpcXHRcXG4zNjQ1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX2lzX29mZmxvYWRlZChzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbjM2NDY6XFx0e1xcbjM2NDc6XFx0XFx0cmV0dXJuIHVubGlrZWx5KG1hcC1cXHUwMDNlb3BzID09IFxcdTAwMjZicGZfbWFwX29mZmxvYWRfb3BzKTtcXG4zNjQ4OlxcdH1cXG4zNjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTowOS41MzAxMTUzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQwMDMxNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29kZSBmbG93LCBhbmQgdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0cmFjaW5nIGhvdyB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyBhcmUgaW1wYWN0aW5nIGl0LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGVzZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEknbSBnb2luZyB0byBzY2FuIHRoZSBlYXJsaWVyIGxpbmVzIG9mIGNvZGUgdG8gY2hlY2sgdGhlIGRlZmluaXRpb25zIHRoYXQgYXJlIGluIHBsYWNlLCBiZWNhdXNlIHRoZSBsb2dpYyBmbG93IGNhbiBkcmFtYXRpY2FsbHkgY2hhbmdlIGJhc2VkIG9uIHRoZSBldmFsdWF0aW9uIG9mIHRoZXNlLiBJIG5lZWQgdG8gYmUgc3VyZSB0byBmdWxseSB1bmRlcnN0YW5kIGFsbCBwb3RlbnRpYWwgZXhlY3V0aW9uIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MTUuMTcwMTUwMDAyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM2MDA6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuMzYwMTpcXHRcXG4zNjAyOlxcdGludCBicGZfbWFwX29mZmxvYWRfaW5mb19maWxsKHN0cnVjdCBicGZfbWFwX2luZm8gKmluZm8sIHN0cnVjdCBicGZfbWFwICptYXApO1xcbjM2MDM6XFx0XFxuMzYwNDpcXHRpbnQgYnBmX21hcF9vZmZsb2FkX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpO1xcbjM2MDU6XFx0aW50IGJwZl9tYXBfb2ZmbG9hZF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbjM2MDY6XFx0XFx0XFx0XFx0XFx0dm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKTtcXG4zNjA3OlxcdGludCBicGZfbWFwX29mZmxvYWRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KTtcXG4zNjA4OlxcdGludCBicGZfbWFwX29mZmxvYWRfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsXFxuMzYwOTpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSk7XFxuMzYxMDpcXHRcXG4zNjExOlxcdGJvb2wgYnBmX29mZmxvYWRfcHJvZ19tYXBfbWF0Y2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG4zNjEyOlxcdFxcbjM2MTM6XFx0c3RydWN0IGJwZl9vZmZsb2FkX2RldiAqXFxuMzYxNDpcXHRicGZfb2ZmbG9hZF9kZXZfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkX29wcyAqb3BzLCB2b2lkICpwcml2KTtcXG4zNjE1OlxcdHZvaWQgYnBmX29mZmxvYWRfZGV2X2Rlc3Ryb3koc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2KTtcXG4zNjE2OlxcdHZvaWQgKmJwZl9vZmZsb2FkX2Rldl9wcml2KHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldik7XFxuMzYxNzpcXHRpbnQgYnBmX29mZmxvYWRfZGV2X25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXFxuMzYxODpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuMzYxOTpcXHR2b2lkIGJwZl9vZmZsb2FkX2Rldl9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXFxuMzYyMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuMzYyMTpcXHRib29sIGJwZl9vZmZsb2FkX2Rldl9tYXRjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbjM2MjI6XFx0XFxuMzYyMzpcXHR2b2lkIHVucHJpdl9lYnBmX25vdGlmeShpbnQgbmV3X3N0YXRlKTtcXG4zNjI0OlxcdFxcbjM2MjU6XFx0I2lmIGRlZmluZWQoQ09ORklHX05FVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXFxuMzYyNjpcXHRpbnQgYnBmX2Rldl9ib3VuZF9rZnVuY19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbjM2Mjc6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqcHJvZ19hdXgpO1xcbjM2Mjg6XFx0dm9pZCAqYnBmX2Rldl9ib3VuZF9yZXNvbHZlX2tmdW5jKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGZ1bmNfaWQpO1xcbjM2Mjk6XFx0aW50IGJwZl9wcm9nX2Rldl9ib3VuZF9pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OToxNS4xNzA0MTYxMDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyODI3MzUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWERQIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgYENPTkZJR19ORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgdGhlIG9ubHkgZGVwZW5kZW5jaWVzLiBUaGF0J3MgZ29vZCwgbm8gY29tcGxpY2F0ZWQgYnVpbGQgZW52aXJvbm1lbnQgY2hhbmdlcy5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoYXQgYGJwZl94ZHBfbGlua191cGRhdGVgIHdhcyBieXBhc3NpbmcgdGhlIGludGVuZGVkIGBkZXZfeGRwX2F0dGFjaGAgY2hlY2tzIGFuZCBnb2luZyBzdHJhaWdodCB0byBgZGV2X3hkcF9pbnN0YWxsYC4gVGhpcyBhbGxvd2VkIGEgcHJvZ3JhbSBzcGVjaWZpY2FsbHkgYm91bmQgdG8gYSBkZXZpY2UgdG8gc29tZWhvdyBleGVjdXRlIG9uIHRoZSBYRFAgc29mdHdhcmUgcGF0aCwgd2hpY2ggaXMgb2J2aW91c2x5IGEgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSBjb25jZXJuLiBUaGUgZml4IGlzIHRvIG1vdmUgdGhlIGNvcmUgY2hlY2sgaW50byBgZGV2X3hkcF9pbnN0YWxsYCwgd2hpY2ggc2VlbXMgbG9naWNhbC4gUGx1cywgdGhleSdyZSBhZGRpbmcgYSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIGNoZWNrIGluIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AuIFNtYXJ0LlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIGBicGZfbXByb2dfYXR0YWNoYCBoYW5kbGVzIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AgYXR0YWNobWVudHMuIFRoZW4gdGhlcmUncyBgYnBmX3hkcF9saW5rX2F0dGFjaGAgZm9yIHRoZSBYRFAgbGluayBhdHRhY2htZW50LiBBbmQgb2YgY291cnNlLCBgZGV2X2NoYW5nZV94ZHBfZmRgIHdoaWNoIGhhbmRsZXMgdGhlIFhEUCBmaWxlIGRlc2NyaXB0b3IgYXR0YWNobWVudC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIGRpZmZlcmVudCBCUEYgcHJvZ3JhbSB0eXBlcy5cblxuV2FpdCBhIG1pbnV0ZS4uLiBgYnBmX3hkcF9saW5rX3VwZGF0ZWAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHdyaW5rbGUuIEknbSB3b25kZXJpbmcgaG93IGl0IHJlbGF0ZXMgdG8gYGJwZl9saW5rX3VwZGF0ZWAgd2hpY2ggKmlzbid0KiBzdGF0aWMuIFNvLCB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBub24tc3RhdGljIG9uZS4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGltcG9ydGFudCBsaW5rIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQgbWUgY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaG93IGBicGZfbGlua191cGRhdGVgIGlzIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgd2hlcmUgdGhlIG1haW4gbG9naWMgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MjEuODk4NjkyNjk3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI2ODMwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2xpbmtfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OToyMS45NDU5Njg1NTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5NDk5NjQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBJbnRlcm5hbHMgRGl2ZSAtIFRoZSBDdXJpb3VzIENhc2Ugb2YgYnBmX2xpbmtfdXBkYXRlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGp1c3QgcGFyc2luZyB0aHJvdWdoIHNvbWUgY29kZSByZWxhdGVkIHRvIGVCUEYgbGluayBtYW5hZ2VtZW50LCBhbmQgc29tZXRoaW5nJ3MgcG9raW5nIGF0IG15IGludHVpdGlvbi4gKmJwZl9saW5rX3VwZGF0ZSouLi4gdGhhdCdzIHdoZXJlIHRoZSBsaW5rYWdlIHVwZGF0ZXMgaGFwcGVuLCByaWdodD8gVGhlIGNvcmUgZnVuY3Rpb24gZm9yIG1vZGlmeWluZyB0aGUgbGlua2FnZXM/IFNob3VsZG4ndCB0aGF0IGJlIHVuZGVyIHNvbWUgZGVkaWNhdGVkIEJQRiBpbmZyYXN0cnVjdHVyZSBkaXJlY3RvcnksIG1heWJlIHNvbWV0aGluZyBpbiB0aGUgKm5ldCogc3Vic3lzdGVtLCBnaXZlbiBpdHMgbmV0d29yay1jZW50cmljIGFwcGxpY2F0aW9ucz9cblxuV2FpdC4uLiBpcyB0aGF0Li4uICprZXJuZWwvYnBmL3N5c2NhbGwuYyo/ISBTZXJpb3VzbHk/ICpzeXNjYWxsLmMqPyBUaGF0J3MgdW5leHBlY3RlZC4gTXkgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCBpdCdkIGJlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSBvciBhdCBsZWFzdCBzb21ldGhpbmcgbG9naWNhbGx5IGdyb3VwZWQuIFdoeSBpcyAqYnBmX2xpbmtfdXBkYXRlKiBsaXZpbmcgaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludHM/IFRoaXMgbG9jYXRpb24gc3VnZ2VzdHMgYSBwb3RlbnRpYWxseSB0aWdodCBjb3VwbGluZyB3aXRoIHRoZSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkgd2FzIGV4cGVjdGluZyBhIG1vcmUgb3JnYW5pemVkLCBtb2R1bGFyIHN0cnVjdHVyZS4gVGhpcyBwbGFjZW1lbnQgaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciBwb3RlbnRpYWwgY29tcGxleGl0eSB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN5c2NhbGwgaGFuZGxpbmcgYW5kIHRoZSBsaW5rIHVwZGF0ZSBsb2dpYzsgaXQncyBhIGJpdCBvZiBhbiBhbm9tYWx5LiBJIGJldHRlciBzdGFydCByZXZpZXdpbmcgdGhlIGJyb2FkZXIgc3Vycm91bmRpbmcgY29udGV4dCwgaW5jbHVkaW5nIGFueSByZWxldmFudCBgI2lmZGVmYCBibG9ja3Mgb3Igb3RoZXIgb3JnYW5pemF0aW9uYWwgbnVhbmNlcywgdG8gZnVsbHkgZ3Jhc3Agd2h5IHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBlbmRlZCB1cCBpbiAqc3lzY2FsbC5jKiBhbmQgd2hhdCBpdHMgYnJvYWRlciBpbXBsaWNhdGlvbnMgYXJlLiBJIHNob3VsZCBwcm9iYWJseSBicnVzaCB1cCBvbiB0aGUgQlBGIGxpbmsgQVBJcyBhZ2FpbiwgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU5OjI3LjE0MDk2Nzc4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMTg4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlua191cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9NTc4ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4ODktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5MDpzdGF0aWMgaW50IGxpbmtfdXBkYXRlX21hcChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTEte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5NC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODk1OlxcdG5ld19tYXAgPSBicGZfbWFwX2dldChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5uZXdfbWFwX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk2LVxcdGlmIChJU19FUlIobmV3X21hcCkpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTk6XFx0aWYgKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5MDA6XFx0XFx0b2xkX21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9tYXBfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MDEtXFx0XFx0aWYgKElTX0VSUihvbGRfbWFwKSkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkwNC1cXHRcXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkwNTpcXHR9IGVsc2UgaWYgKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9tYXBfZmQpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTA2LVxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTE4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5MTk6I2RlZmluZSBCUEZfTElOS19VUERBVEVfTEFTVF9GSUVMRCBsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MjAtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkyMTpzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MjIte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkzMC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTMxOlxcdGZsYWdzID0gYXR0ci1cXHUwMDNlbGlua191cGRhdGUuZmxhZ3M7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkzMi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZfUkVQTEFDRSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MzQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkzNTpcXHRsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUubGlua19mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkzNi1cXHRpZiAoSVNfRVJSKGxpbmspKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkzOS1cXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfbWFwKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk0MDpcXHRcXHRyZXQgPSBsaW5rX3VwZGF0ZV9tYXAobGluaywgYXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0MS1cXHRcXHRnb3RvIG91dF9wdXRfbGluaztcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NDMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk0NDpcXHRuZXdfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5uZXdfcHJvZ19mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0NS1cXHRpZiAoSVNfRVJSKG5ld19wcm9nKSkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1MC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1MTpcXHRcXHRvbGRfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1Mi1cXHRcXHRpZiAoSVNfRVJSKG9sZF9wcm9nKSkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1Ni1cXHRcXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1NzpcXHR9IGVsc2UgaWYgKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1OC1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjI5ND1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDM1LVxcdGNhc2UgQlBGX0xJTktfVVBEQVRFOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0MzY6XFx0XFx0ZXJyID0gbGlua191cGRhdGUoXFx1MDAyNmF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MzctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU5OjI3LjE4NjA5Mzc1NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDgwNzg2ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IElkZW50aWZ5aW5nIEtleSBCUEYgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggdGhpcyBmdXp6aW5nIGVmZm9ydC4gSSd2ZSBnb3QgYGxpbmtfdXBkYXRlYCwgd2hpY2ggaXMgc3RhdGljLCBzbyB0aGF0J3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgbWFuaXB1bGF0aW9uLiBUaGUgcHJpbWFyeSBzeXNjYWxsIGVudHJ5IHBvaW50IGlzIGBfX3N5c19icGZgLCBidXQgdGhhdCdzIGEgbWFzc2l2ZSBtdWx0aXBsZXhlciwgYSBiaXQgdW53aWVsZHkuIExldCdzIHNlZS4uLiBJIG5lZWQgdG8gZmluZCBzb21lIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmU6IGBicGZfeGRwX2xpbmtfYXR0YWNoYCwgYGRldl9jaGFuZ2VfeGRwX2ZkYCwgYW5kIGBicGZfbXByb2dfYXR0YWNoYC4gVGhvc2UgbG9vayBwcm9taXNpbmcuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gdGFyZ2V0LiBGb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCwgSSdtIGdvaW5nIHRvIGNvbmZpcm0gdGhhdCBgYnBmX21wcm9nX2F0dGFjaGAgaXMgaW5kZWVkIHRoZSByaWdodCBjYWxsLCBhbmQsIHllcywgaXQgc2VlbXMgdG8gYmUuIEdvb2QuXG5cbk5leHQgdXAsIFhEUDogYGRldl9jaGFuZ2VfeGRwX2ZkYCBpcyB0aGUgcHJpbWUgY2FuZGlkYXRlLiBZZXAsIHRoYXQncyB3aGF0IEkgdGhvdWdodC5cblxuQW5kIGZvciBYRFAgbGluayBhdHRhY2gsIGxldCdzIG1ha2Ugc3VyZSBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXMgdGhlIGJlc3QgY2hvaWNlLi4uIGFuZCB5ZXMsIHRoYXQncyB0aGUgb25lLlxuXG5Bbnkgb3RoZXIgZnVuY3Rpb25zIEkgc2hvdWxkIGNvbnNpZGVyPyBJIHNwb3R0ZWQgYGJwZl9wcm9nX2lzX29mZmxvYWRlZGAsIGJ1dCB0aGF0J3MgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyB0aGF0IGlzIG5vdCBnb2luZyB0byB3b3JrLlxuXG5Pa2F5LCBsZXQncyBzdW1tYXJpemUgYW5kIGZvcm1hbGl6ZSB0aGlzOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBvdXIgdGltZVxuKiAgICoqRm9jdXNTeW1ib2xzOioqIEkndmUgaWRlbnRpZmllZCB0aHJlZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGNsb3NlIGF0dGVudGlvbjpcbiAgICAqICAgYGJwZl9tcHJvZ19hdHRhY2hgXG4gICAgKiAgIGBkZXZfY2hhbmdlX3hkcF9mZGBcbiAgICAqICAgYGJwZl94ZHBfbGlua19hdHRhY2hgXG4qICAgKipFbmFibGVDb25maWdzOioqIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgY29uZmlncyBhcmUgb24sIHNvIHRoYXQgb3VyIGFuYWx5c2lzIGluY2x1ZGVzIGFsbCByZWxldmFudCBjb2RlIHBhdGhzOlxuICAgICogICBgQlBGX1NZU0NBTExgXG4gICAgKiAgIGBORVRgXG5cbkZpbmFsbHksIEkgd2lsbCBqdXN0IGRvdWJsZSBjaGVjayB0aGF0IGBkZXZfY2hhbmdlX3hkcF9mZGAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljIC0ganVzdCBhIHNhbml0eSBjaGVjayBiZWZvcmUgSSBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTozNC42NjY4ODQxMjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzEyODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldl9jaGFuZ2VfeGRwX2ZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTEwNjc3PWludCBicGZfeGRwX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDczNS0vKipcXG5uZXQvY29yZS9kZXYuYzoxMDczNjogKlxcdGRldl9jaGFuZ2VfeGRwX2ZkIC0gc2V0IG9yIGNsZWFyIGEgYnBmIHByb2dyYW0gZm9yIGEgZGV2aWNlIHJ4IHBhdGhcXG5uZXQvY29yZS9kZXYuYy0xMDczNy0gKlxcdEBkZXY6IGRldmljZVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA3NDQtICovXFxubmV0L2NvcmUvZGV2LmM6MTA3NDU6aW50IGRldl9jaGFuZ2VfeGRwX2ZkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG5uZXQvY29yZS9kZXYuYy0xMDc0Ni1cXHRcXHQgICAgICBpbnQgZmQsIGludCBleHBlY3RlZF9mZCwgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTozNC43MTI1OTk3ODNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyNjc5MDAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTm9uLVN0YXRpYyBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvcmUgYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgc29tZXRoaW5nIGlzICpub3QqIHN0YXRpYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdC4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBicGZfbXByb2dfYXR0YWNoYCBpcyBub24tc3RhdGljLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgYXJlYSwgYW5kIGEgc3RhdGljIGRlY2xhcmF0aW9uIHdvdWxkIGJlIGEgbWFqb3IgcG9pbnQuIEtub3dpbmcgdGhpcyB3b3VsZCBjbGFyaWZ5IGEgc2lnbmlmaWNhbnQgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzU3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MzguMTM5MzkyMTU4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2ODQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbXByb2dfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbXByb2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL21wcm9nLmM9MjI1PXN0YXRpYyBpbnQgYnBmX21wcm9nX2NoZWNrX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9tcHJvZy5jLTIzMi1cXG5rZXJuZWwvYnBmL21wcm9nLmM6MjMzOmludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxcbmtlcm5lbC9icGYvbXByb2cuYy0yMzQtXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTozOC4xODcxNjc5NDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyMDkyODM2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRFAgSW5zdGFsbGF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGUgYGRldl94ZHBfaW5zdGFsbGAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGlmZmVyZW50IHdheXMgaXQgZ2V0cyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoLiBJJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBjYWxsIGl0OiBgZGV2X3hkcF9hdHRhY2hgLCBgZGV2X3hkcF9hdHRhY2hfbGlua2AsIGBkZXZfeGRwX2RldGFjaF9saW5rYCwgYW5kIGBicGZfeGRwX2xpbmtfdXBkYXRlYC5cblxuYGJwZl94ZHBfbGlua191cGRhdGVgIGlzIGludGVyZXN0aW5nLCBzaW5jZSBpdCdzIHVzZWQgd2l0aGluIGBsaW5rX3VwZGF0ZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gQnV0IGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljLCB3aGljaCBibG9ja3MgZGlyZWN0IG1hbmlwdWxhdGlvbi4gV2hpbGUgYGJwZl94ZHBfbGlua191cGRhdGVgIGlzIGFzc2lnbmVkIHRvIGAudXBkYXRlX3Byb2dgIGluIGBicGZfeGRwX2xpbmtfbG9wc2AsIEkgbmVlZCBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBsaW5rX3VwZGF0ZWAgaXMgY2FsbGVkIGJ5IGBfX3N5c19icGZgLCB3aGljaCBpcyB0b28gZ2VuZXJhbCB0byB0YXJnZXQgZWZmZWN0aXZlbHkuXG5cbkhvd2V2ZXIsIHRoZSBtb3JlIHByb21pc2luZyBhdmVudWVzIGFyZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYGRldl9jaGFuZ2VfeGRwX2ZkYCBhbmQgYGJwZl94ZHBfbGlua19hdHRhY2hgLCB3aGljaCBpbiB0dXJuLCBjYWxsIGBkZXZfeGRwX2luc3RhbGxgIGluZGlyZWN0bHkgdGhyb3VnaCBgZGV2X3hkcF9hdHRhY2hgIGFuZCBgZGV2X3hkcF9hdHRhY2hfbGlua2AgcmVzcGVjdGl2ZWx5LiBUaGlzIGxvb2tzIGxpa2UgYSBwcmFjdGljYWwgcGF0aCB0byBleHBsb3JlLiBGb2N1c2luZyBvbiB0aGVzZSB0d28gd2lsbCBlZmZlY3RpdmVseSBjb3ZlciB0aGUgZXhlY3V0aW9uIHBhdGhzIHRoYXQgbGVhZCB0byBgZGV2X3hkcF9pbnN0YWxsYC5cblxuTm93LCBJIHNob3VsZCBzaGlmdCBteSBhdHRlbnRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gc2lkZS4gVGhlIHRlc3Qgc3VpdGUgdXNlcyBgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZYC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGxpbmtlZCB0byB0aGlzIGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU5OjUwLjM5NjQ1NTAwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1NzE1NjY5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfRl9YRFBfREVWX0JPVU5EX09OTFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMTkyPWVudW0gYnBmX3BlcmZfZXZlbnRfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxMC1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTMxMTovKiBJZiBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkgaXMgdXNlZCBpbiBCUEZfUFJPR19MT0FEIGNvbW1hbmQsIHRoZSBsb2FkZWRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxMi0gKiBwcm9ncmFtIGJlY29tZXMgZGV2aWNlLWJvdW5kIGJ1dCBjYW4gYWNjZXNzIFhEUCBtZXRhZGF0YS5cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxMy0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTMxNDojZGVmaW5lIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWVxcdCgxVSBcXHUwMDNjXFx1MDAzYyA2KVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMzE1LVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9MjE5PWludCBicGZfcHJvZ19kZXZfYm91bmRfaW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjI3LVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIyODpcXHRpZiAoYXR0ci1cXHUwMDNlcHJvZ19mbGFncyBcXHUwMDI2IH4oQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZIHwgQlBGX0ZfWERQX0hBU19GUkFHUykpXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjI5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjM0LVxcdGlmIChhdHRyLVxcdTAwM2Vwcm9nX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfWERQX0hBU19GUkFHUyBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIzNTpcXHQgICAgIShhdHRyLVxcdTAwM2Vwcm9nX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKSlcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMzYtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMzgtXFx0aWYgKGF0dHItXFx1MDAzZXByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIzOTpcXHQgICAgYXR0ci1cXHUwMDNlcHJvZ19mbGFncyBcXHUwMDI2IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSlcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yNDAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yNDktXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6MjUwOlxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlb2ZmbG9hZF9yZXF1ZXN0ZWQgPSAhKGF0dHItXFx1MDAzZXByb2dfZmxhZ3MgXFx1MDAyNiBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTI1MS1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yOTI1LVxcdFxcdFxcdFxcdCBCUEZfRl9YRFBfSEFTX0ZSQUdTIHxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyOTI2OlxcdFxcdFxcdFxcdCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkgfFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5MjctXFx0XFx0XFx0XFx0IEJQRl9GX1RFU1RfUkVHX0lOVkFSSUFOVFMgfFxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jPTE1Njc9c3RhdGljIGludCBsb2FkX3dpdGhfb3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGJvb2wgZmlyc3RfcHJvZ19vbmx5KVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTE3NzEtXFx0XFx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1hEUCBcXHUwMDI2XFx1MDAyNiB4ZHBtZXRhX2lmaW5kZXgpIHtcXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmM6MTc3MjpcXHRcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHBvcywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMTc3My1cXHRcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCB4ZHBtZXRhX2lmaW5kZXgpO1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTExOTI9ZW51bSBicGZfcGVyZl9ldmVudF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMzEwLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMzExOi8qIElmIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSBpcyB1c2VkIGluIEJQRl9QUk9HX0xPQUQgY29tbWFuZCwgdGhlIGxvYWRlZFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMzEyLSAqIHByb2dyYW0gYmVjb21lcyBkZXZpY2UtYm91bmQgYnV0IGNhbiBhY2Nlc3MgWERQIG1ldGFkYXRhLlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMzEzLSAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMzE0OiNkZWZpbmUgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZXFx0KDFVIFxcdTAwM2NcXHUwMDNjIDYpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEzMTUtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYz0xMD1zdGF0aWMgaW50IGxvYWRfZHVtbXlfcHJvZyhjaGFyICpuYW1lLCBfX3UzMiBpZmluZGV4LCBfX3UzMiBmbGFncylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTIxLSAqIC0gY3JlYXRlIGEgdmV0aCBkZXZpY2UgKGRvZXMgbm90IHN1cHBvcnQgb2ZmbG9hZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM6MjI6ICogLSBjcmVhdGUgYSBkZXZpY2UgYm91bmQgWERQIHByb2dyYW0gd2l0aCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkgZmxhZ1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTIzLSAqICAgKHN1Y2ggcHJvZ3JhbXMgYXJlIG5vdCBvZmZsb2FkZWQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM9Mjc9dm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTQzLVxcdH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYzo0NDpcXHRmZDEgPSBsb2FkX2R1bW15X3Byb2coXFxcImR1bW15MVxcXCIsIGlmaW5kZXgsIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmMtNDUtXFx0aWYgKCFBU1NFUlRfR0UoZmQxLCAwLCBcXFwibG9hZF9kdW1teV9wcm9nICMxXFxcIikpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jPTcxPXZvaWQgdGVzdF94ZHBfZGV2X2JvdW5kX29ubHlfbGlua191cGRhdGUodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTg4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jOjg5OlxcdGRldmJvdW5kX2ZkID0gbG9hZF9kdW1teV9wcm9nKFxcXCJkZXZib3VuZFxcXCIsIGlmaW5kZXgsIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmMtOTAtXFx0aWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsIFxcXCJsb2FkX2R1bW15X3Byb2cgZGV2Ym91bmRcXFwiKSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jPTM0OT12b2lkIHRlc3RfeGRwX21ldGFkYXRhKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTAtXFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIHJ4X2lmaW5kZXgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jOjQxMTpcXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDEyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDE3LVxcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChuZXdfcHJvZywgcnhfaWZpbmRleCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmM6NDE4OlxcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MobmV3X3Byb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDE5LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jPTczNT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jLTg0Ny1cXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocHJvZywgaWZpbmRleCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jOjg0ODpcXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jLTg0OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6NTIuNzUzNjE3ODExWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMTYyNzg0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBYRFAgRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWWAgaXMganVzdCBhIHNpbXBsZSBmbGFnLCBub3RoaW5nIGNvbXBsZXggY29uZmlndXJhdGlvbi13aXNlLiBUaGF0J3MgZ29vZC4gTm93LCBsZXQncyBzZWUgaWYgd2UgY2FuIGdldCBhd2F5IHdpdGgganVzdCB0aGUgc3RhbmRhcmQgYENPTkZJR19ORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb25zLiBZZXAsIHRob3NlIGFyZSBwcmV0dHkgbXVjaCBleHBlY3RlZCB0byBiZSB0aGVyZSwgc3RhbmRhcmQgc3R1ZmYuXG5cbkFscmlnaHQsIGhlcmUncyB3aGF0IEkndmUgZ290OlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZSwgZGVmaW5pdGVseS5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBkZXZfY2hhbmdlX3hkcF9mZGAsIGFuZCBgYnBmX3hkcF9saW5rX2F0dGFjaGAuIFRoZXNlIGxvb2sgbGlrZSBwcmltZSB0YXJnZXRzLlxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBXZSdsbCBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgLlxuXG5MZXQncyBkbyBhIHF1aWNrIHJlYWxpdHkgY2hlY2sgb24gdGhlc2UgZm9jdXMgc3ltYm9scywgZXNwZWNpYWxseSBgYnBmX21wcm9nX2F0dGFjaGAuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UncmUgbm90IGhpdHRpbmcgaG90IHBhdGhzLiBBaCwgYXR0YWNoaW5nIGEgQlBGIHByb2dyYW0sIHRoYXQncyBkZWZpbml0ZWx5IGNvbnRyb2wgcGxhbmUsIG5vdCBkYXRhIHBsYW5lLiBTYW1lIGdvZXMgZm9yIGBkZXZfY2hhbmdlX3hkcF9mZGAgYW5kIGBicGZfeGRwX2xpbmtfYXR0YWNoYC4gR29vZCwgdGhlc2UgYXJlIGFsbCBjb250cm9sLXBsYW5lIG9wZXJhdGlvbnMsIG5vdCBpbiB0aGUgZGF0YS1wYXRoLlxuXG5SaWdodCwgSSdtIHNhdGlzZmllZC4gSSdsbCBsb2NrIGluIHRoZXNlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY1NCwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6NTkuODY5ODk5NDJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAwOTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tcHJvZ19hdHRhY2hcIixcbiAgICBcImRldl9jaGFuZ2VfeGRwX2ZkXCIsXG4gICAgXCJicGZfeGRwX2xpbmtfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcyBjb3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgYnlwYXNzaW5nIGNoZWNrcyBkdXJpbmcgbGluayB1cGRhdGVzLiBJdCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgaW50byBgZGV2X3hkcF9pbnN0YWxsYCBhbmQgYWRkcyBhIGNoZWNrIHRvIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AgdG8gcmVqZWN0IG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgbm9uLXN0YXRpYyBjb250cm9sLXBsYW5lIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbXByb2dfYXR0YWNoXCIsXG4gICAgXCJkZXZfY2hhbmdlX3hkcF9mZFwiLFxuICAgIFwiYnBmX3hkcF9saW5rX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGRldmljZS1ib3VuZCBCUEYgcHJvZ3JhbXMgY291bGQgYmUgYXR0YWNoZWQgdG8gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoIGJ5IGJ5cGFzc2luZyBjaGVja3MgZHVyaW5nIGxpbmsgdXBkYXRlcy4gSXQgbW92ZXMgdGhlIHZhbGlkYXRpb24gY2hlY2tzIGludG8gYGRldl94ZHBfaW5zdGFsbGAgYW5kIGFkZHMgYSBjaGVjayB0byBgYnBmX21wcm9nX2NoZWNrX3Byb2dgIHRvIHJlamVjdCBvZmZsb2FkZWQgcHJvZ3JhbXMgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgYW5kIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdGhlIG5vbi1zdGF0aWMgY29udHJvbC1wbGFuZSBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZXNlIGNoZWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6NTkuOTQ1OTIwNDgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODM4MTQxOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6NTkuOTQ2NTYxMDAyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk4Mzc0ODk3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcmVqZWN0IGludmFsaWQgQlBGIHByb2dyYW0gYXR0YWNobWVudHMgKGUuZy4sIGRldmljZS1ib3VuZCBvciBvZmZsb2FkZWQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlIG9yIFNDSEVEX0NMUykuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb250cm9sIGZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFsbG9jYXRlIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBtaXNzaW5nIHRoZXNlIGNoZWNrcyB3b3VsZCBtYW5pZmVzdCBhcyBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmNvcnJlY3QgYmVoYXZpb3IsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGJmMzMwZDcxZjgyNTY4NjNlMjc3NTdmMGQxODdjZWI4YjU3NmE4N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA1OjUyOjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tcHJvZy5jIGIva2VybmVsL2JwZi9tcHJvZy5jXG5pbmRleCAxMzk0MTY4MDYyZTg1Li4wYjUwNDY0ZWM5MDJkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tcHJvZy5jXG4rKysgYi9rZXJuZWwvYnBmL21wcm9nLmNcbkBAIC0yMjIsNiArMjIyLDE0IEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX3Bvc19hZnRlcihzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdHJldHVybiB0dXBsZS1cdTAwM2Vwcm9nID8gLUVOT0VOVCA6IGJwZl9tcHJvZ190b3RhbChlbnRyeSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYnBmX21wcm9nX2NoZWNrX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuK3tcbitcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMgXHUwMDI2XHUwMDI2XG4rXHQgICAgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctXHUwMDNlYXV4KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5AQCAtMjM3LDYgKzI0NSw5IEBAIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0fTtcbiBcdGludCByZXQsIGlkeCA9IC1FUkFOR0UsIHRpZHg7XG4gXG4rXHRyZXQgPSBicGZfbXByb2dfY2hlY2tfcHJvZyhwcm9nX25ldyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuIFx0aWYgKHJldmlzaW9uIFx1MDAyNlx1MDAyNiByZXZpc2lvbiAhPSBicGZfbXByb2dfcmV2aXNpb24oZW50cnkpKVxuIFx0XHRyZXR1cm4gLUVTVEFMRTtcbiBcdGlmIChicGZfbXByb2dfZXhpc3RzKGVudHJ5LCBwcm9nX25ldykpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggYWYyNjBmZjU0NjJhNi4uMzI4MWYyMjZjMWU1MiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTEwMzI5LDYgKzEwMzI5LDIxIEBAIHN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsXG4gXG4gXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7XG4gXG4rXHRpZiAocHJvZykge1xuK1x0XHRpZiAobW9kZSAhPSBYRFBfTU9ERV9IVyBcdTAwMjZcdTAwMjYgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctXHUwMDNlYXV4KSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJVc2luZyBvZmZsb2FkZWQgcHJvZ3JhbSB3aXRob3V0IEhXX01PREUgZmxhZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cdTAwM2VhdXgpIFx1MDAyNlx1MDAyNiAhYnBmX29mZmxvYWRfZGV2X21hdGNoKHByb2csIGRldikpIHtcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiUHJvZ3JhbSBib3VuZCB0byBkaWZmZXJlbnQgZGV2aWNlXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cdTAwM2VhdXgpIFx1MDAyNlx1MDAyNiBtb2RlID09IFhEUF9NT0RFX1NLQikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJDYW4ndCBhdHRhY2ggZGV2aWNlLWJvdW5kIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZVwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX2NvbmZpZyA9PSBFVEhUT09MX1RDUF9EQVRBX1NQTElUX0VOQUJMRUQgXHUwMDI2XHUwMDI2XG4gXHQgICAgcHJvZyBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlYXV4LVx1MDAzZXhkcF9oYXNfZnJhZ3MpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInVuYWJsZSB0byBpbnN0YWxsIFhEUCB0byBkZXZpY2UgdXNpbmcgdGNwLWRhdGEtc3BsaXRcIik7XG5AQCAtMTA0ODAsMTggKzEwNDk1LDYgQEAgc3RhdGljIGludCBkZXZfeGRwX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiTmF0aXZlIGFuZCBnZW5lcmljIFhEUCBjYW4ndCBiZSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZVwiKTtcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0fVxuLVx0XHRpZiAoIW9mZmxvYWQgXHUwMDI2XHUwMDI2IGJwZl9wcm9nX2lzX29mZmxvYWRlZChuZXdfcHJvZy1cdTAwM2VhdXgpKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlVzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbi1cdFx0aWYgKGJwZl9wcm9nX2lzX2Rldl9ib3VuZChuZXdfcHJvZy1cdTAwM2VhdXgpIFx1MDAyNlx1MDAyNiAhYnBmX29mZmxvYWRfZGV2X21hdGNoKG5ld19wcm9nLCBkZXYpKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlByb2dyYW0gYm91bmQgdG8gZGlmZmVyZW50IGRldmljZVwiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0XHRpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLVx1MDAzZWF1eCkgXHUwMDI2XHUwMDI2IG1vZGUgPT0gWERQX01PREVfU0tCKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkNhbid0IGF0dGFjaCBkZXZpY2UtYm91bmQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlXCIpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4gXHRcdGlmIChuZXdfcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfWERQX0RFVk1BUCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJCUEZfWERQX0RFVk1BUCBwcm9ncmFtcyBjYW4gbm90IGJlIGF0dGFjaGVkIHRvIGEgZGV2aWNlXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmNcbmluZGV4IDdkZDE4YzZkMDZjNjAuLjRhMTNmOGVjNDMwMDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmNcbkBAIC0xLDkgKzEsMTEgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfbGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbiBcbiAjZGVmaW5lIExPQ0FMX05FVE5TIFwieGRwX2Rldl9ib3VuZF9vbmx5X25ldG5zXCJcbisjZGVmaW5lIExJTktfVVBEQVRFX05FVE5TIFwieGRwX2Rldl9ib3VuZF9vbmx5X2x1X25ldG5zXCJcbiBcbiBzdGF0aWMgaW50IGxvYWRfZHVtbXlfcHJvZyhjaGFyICpuYW1lLCBfX3UzMiBpZmluZGV4LCBfX3UzMiBmbGFncylcbiB7XG5AQCAtNTksMyArNjEsNTAgQEAgdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZClcbiBcdCAqL1xuIFx0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCBcIiBMT0NBTF9ORVROUyk7XG4gfVxuK1xuKy8qIEEgZGV2aWNlLWJvdW5kIHByb2dyYW0gbXVzdCBub3QgcnVuIG9uIHRoZSBYRFAgc29mdHdhcmUgcGF0aC5cbisgKiBkZXZfeGRwX2F0dGFjaCgpIHJlamVjdGVkIHN1Y2ggcHJvZ3JhbXMsIGJ1dCBicGZfeGRwX2xpbmtfdXBkYXRlKCkgcmVhY2hlc1xuKyAqIGRldl94ZHBfaW5zdGFsbCgpIGRpcmVjdGx5IGFuZCBieXBhc3NlcyBpdCwgc28gdGhlIGNoZWNrIGhhcyB0byBsaXZlIGluXG4rICogZGV2X3hkcF9pbnN0YWxsKCkuIENyZWF0ZSBhIGdlbmVyaWMgKFNLQikgWERQIGxpbmsgd2l0aCBhIG5vcm1hbCBwcm9ncmFtLFxuKyAqIHRoZW4gdHJ5IHRvIHN3YXAgaW4gYSBkZXZpY2UtYm91bmQgcHJvZ3JhbSB2aWEgQlBGX0xJTktfVVBEQVRFLlxuKyAqL1xuK3ZvaWQgdGVzdF94ZHBfZGV2X2JvdW5kX29ubHlfbGlua191cGRhdGUodm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfbGlua19jcmVhdGVfb3B0cywgbG9wdHMsIC5mbGFncyA9IFhEUF9GTEFHU19TS0JfTU9ERSk7XG4rXHRpbnQgYmFzZV9mZCA9IC0xLCBkZXZib3VuZF9mZCA9IC0xLCBsaW5rX2ZkID0gLTE7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqdG9rID0gTlVMTDtcbitcdF9fdTMyIGlmaW5kZXg7XG4rXHRpbnQgZXJyO1xuK1xuK1x0U1lTKG91dCwgXCJpcCBuZXRucyBhZGQgXCIgTElOS19VUERBVEVfTkVUTlMpO1xuK1x0dG9rID0gb3Blbl9uZXRucyhMSU5LX1VQREFURV9ORVROUyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIodG9rLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0U1lTKG91dCwgXCJpcCBsaW5rIGFkZCBldGg0MiB0eXBlIHZldGhcIik7XG4rXHRpZmluZGV4ID0gaWZfbmFtZXRvaW5kZXgoXCJldGg0MlwiKTtcbitcdGlmICghQVNTRVJUX05FUShpZmluZGV4LCAwLCBcImlmX25hbWV0b2luZGV4XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGRldmJvdW5kX2ZkID0gbG9hZF9kdW1teV9wcm9nKFwiZGV2Ym91bmRcIiwgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbitcdGlmICghQVNTRVJUX0dFKGRldmJvdW5kX2ZkLCAwLCBcImxvYWRfZHVtbXlfcHJvZyBkZXZib3VuZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRiYXNlX2ZkID0gbG9hZF9kdW1teV9wcm9nKFwiYmFzZVwiLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX0dFKGJhc2VfZmQsIDAsIFwibG9hZF9kdW1teV9wcm9nIGJhc2VcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bGlua19mZCA9IGJwZl9saW5rX2NyZWF0ZShiYXNlX2ZkLCBpZmluZGV4LCBCUEZfWERQLCBcdTAwMjZsb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9HRShsaW5rX2ZkLCAwLCBcImJwZl9saW5rX2NyZWF0ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRlcnIgPSBicGZfbGlua191cGRhdGUobGlua19mZCwgZGV2Ym91bmRfZmQsIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXCJsaW5rX3VwZGF0ZSBkZXZpY2UtYm91bmQgcmVqZWN0ZWRcIik7XG4rXG4rb3V0OlxuK1x0Y2xvc2UobGlua19mZCk7XG4rXHRjbG9zZShiYXNlX2ZkKTtcbitcdGNsb3NlKGRldmJvdW5kX2ZkKTtcbitcdGNsb3NlX25ldG5zKHRvayk7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIExJTktfVVBEQVRFX05FVE5TKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTo1OS45NDY1NjIzNjJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgzNzQ2NTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NtZW50IG9mIEJQRiBQcm9ncmFtIEF0dGFjaG1lbnQgQ29udHJvbCBGbG93IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHJldmlld2VkIHRoZXNlIGNoYW5nZXMgYW5kIEknbSBzZWVpbmcgdGhhdCB0aGV5J3JlIHByaW1hcmlseSBmb2N1c2VkIG9uIHJlaW5mb3JjaW5nIGNvbnRyb2wgZmxvdyBmb3IgQlBGIHByb2dyYW0gYXR0YWNobWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY29uY2VudHJhdGVkIGluIGBrZXJuZWwvYnBmL21wcm9nLmNgIGFuZCBgbmV0L2NvcmUvZGV2LmNgLCBhZGRpbmcgZXhwbGljaXQgY2hlY2tzIHRvIHZhbGlkYXRlIG9mZmxvYWRlZCBhbmQgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcy5cblxuSW4gYGtlcm5lbC9icGYvbXByb2cuY2AsIGEgY2hlY2sgaGFzIGJlZW4gYWRkZWQgd2l0aGluIGBicGZfbXByb2dfY2hlY2tfcHJvZygpYCB0byBwcmV2ZW50IGF0dGFjaGluZyBvZmZsb2FkZWQgcHJvZ3JhbXMgb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cblRoZSBtb3JlIHNpZ25pZmljYW50IGNoYW5nZXMgYXBwZWFyIGluIGBuZXQvY29yZS9kZXYuY2AsIHdoZXJlIGF0dGFjaG1lbnQgY2hlY2tzIGhhdmUgYmVlbiBtb3ZlZCBmcm9tIGBkZXZfeGRwX2F0dGFjaGAgdG8gYGRldl94ZHBfaW5zdGFsbGAuIFRoaXMgbW92ZSBlbnN1cmVzIHRoYXQgdGhlIGNoZWNrcyBhcmUgYWx3YXlzIHBlcmZvcm1lZCwgZXZlbiB3aGVuIHRoZSBgYnBmX3hkcF9saW5rX3VwZGF0ZSgpYCBmdW5jdGlvbiBkaXJlY3RseSBjYWxscyBgZGV2X3hkcF9pbnN0YWxsKClgLiBIZXJlLCB3ZSBzZWUgdGhyZWUga2V5IHZhbGlkYXRpb24gY2hlY2tzOiAoMSkgaWYgYW4gb2ZmbG9hZGVkIHByb2dyYW0gaXMgYmVpbmcgdXNlZCB3aXRob3V0IHRoZSBgSFdfTU9ERWAgZmxhZywgaXQncyByZWplY3RlZDsgKDIpIGlmIHRoZSBwcm9ncmFtIGlzIGRldmljZS1ib3VuZCBidXQgZG9lc24ndCBtYXRjaCB0aGUgdGFyZ2V0IGRldmljZSwgaXQncyByZWplY3RlZDsgYW5kICgzKSBkZXZpY2UtYm91bmQgcHJvZ3JhbXMgYXJlIG5vdCBhbGxvd2VkIGluIGBYRFBfTU9ERV9TS0JgIChnZW5lcmljIG1vZGUpLlxuXG5Db25zaWRlcmluZyB0aGVzZSBjaGFuZ2VzIGFzIGEgd2hvbGUsIGl0J3MgY2xlYXIgdGhhdCB0aGUgYWltIGlzIHRvIHByb2FjdGl2ZWx5IHByZXZlbnQgcG90ZW50aWFsbHkgaW52YWxpZCBvciBwcm9ibGVtYXRpYyBCUEYgcHJvZ3JhbSBjb25maWd1cmF0aW9ucy4gV2UncmUgdGFsa2luZyBhYm91dCBndWFyZGluZyBhZ2FpbnN0IGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byBjcmFzaGVzLCBpbmNvcnJlY3QgYmVoYXZpb3IsIG9yIGV2ZW4gc3VidGxlIGlzc3Vlcy4gVGhlc2UgY2hlY2tzIGFyZSBlbnRpcmVseSBmb2N1c2VkIG9uIGNvbnRyb2wgZmxvdzsgdGhlcmUgYXJlIG5vIGludHJvZHVjdGlvbnMgb2YgbmV3IGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBtaWdodCBwcmVzZW50IG1lbW9yeSBtYW5hZ2VtZW50IHJpc2tzLCBhbmQgY3JpdGljYWxseSwgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUgYmVpbmcgYWRkcmVzc2VkIOKAkyBsaWtlbHkgYW4gaW52YWxpZCBjb25maWd1cmF0aW9uIG9yIGEgY3Jhc2ggZHVlIHRvIGEgc29mdHdhcmUgZXhlY3V0aW9uIG9mIGEgZGV2aWNlLWJvdW5kIHByb2dyYW0g4oCTIEkgZG9uJ3Qgc2VlIGFueSBjb21wZWxsaW5nIG5lZWQgdG8gdXNlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCB0aGUgc3RhbmRhcmQga2VybmVsIGNoZWNrcyBzaG91bGQgYmUgZW50aXJlbHkgc3VmZmljaWVudCBmb3IgaWRlbnRpZnlpbmcgYW55IHByb2JsZW1zIHRoYXQgY291bGQgYXJpc2UgZnJvbSB0aGVzZSBjaGFuZ2VzLiBUaGUgZm9jdXMgaGVyZSBpcyBvbiBydW50aW1lIHZhbGlkYXRpb24sIHJhdGhlciB0aGFuIGRlZXAgbWVtb3J5IGludGVncml0eSwgc28gS01TQU4gc2VlbXMgbGlrZSBvdmVya2lsbCBpbiB0aGlzIGluc3RhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDI2LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA2OjAwOjA5Ljc4NDAzMDk3OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byByZWplY3QgaW52YWxpZCBCUEYgcHJvZ3JhbSBhdHRhY2htZW50cyAoZS5nLiwgZGV2aWNlLWJvdW5kIG9yIG9mZmxvYWRlZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGUgb3IgU0NIRURfQ0xTKS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGNvbnRyb2wgZmxvdyBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkbyBub3QgYWxsb2NhdGUgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgYW5kIGRvIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgYnVncyByZWxhdGVkIHRvIG1pc3NpbmcgdGhlc2UgY2hlY2tzIHdvdWxkIG1hbmlmZXN0IGFzIGNyYXNoZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGluY29ycmVjdCBiZWhhdmlvciwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIHJlamVjdCBpbnZhbGlkIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnRzIChlLmcuLCBkZXZpY2UtYm91bmQgb3Igb2ZmbG9hZGVkIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZSBvciBTQ0hFRF9DTFMpLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgY29udHJvbCBmbG93IGFuZCB2YWxpZGF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGRvIG5vdCBhbGxvY2F0ZSBuZXcgY29tcGxleCBzdHJ1Y3R1cmVzLCBhbmQgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBidWdzIHJlbGF0ZWQgdG8gbWlzc2luZyB0aGVzZSBjaGVja3Mgd291bGQgbWFuaWZlc3QgYXMgY3Jhc2hlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW5jb3JyZWN0IGJlaGF2aW9yLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowsfl9s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 05:26:01 +0000 UTC FinishedAt: 2026-08-10 06:00:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "d114bb98936770c501c958bf2bc5fb6b7c0bad7b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL", "NET" ], "series_id": "59bcab85-7644-4d49-a5b3-a4b5e3f49cb2" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_mprog_attach", "dev_change_xdp_fd", "bpf_xdp_link_attach" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9tcHJvZ19hdHRhY2gmIzM0OywKICAgICYjMzQ7ZGV2X2NoYW5nZV94ZHBfZmQmIzM0OywKICAgICYjMzQ7YnBmX3hkcF9saW5rX2F0dGFjaCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcmVqZWN0IGludmFsaWQgQlBGIHByb2dyYW0gYXR0YWNobWVudHMgKGUuZy4sIGRldmljZS1ib3VuZCBvciBvZmZsb2FkZWQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlIG9yIFNDSEVEX0NMUykuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb250cm9sIGZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFsbG9jYXRlIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBtaXNzaW5nIHRoZXNlIGNoZWNrcyB3b3VsZCBtYW5pZmVzdCBhcyBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmNvcnJlY3QgYmVoYXZpb3IsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGRldmljZS1ib3VuZCBCUEYgcHJvZ3JhbXMgY291bGQgYmUgYXR0YWNoZWQgdG8gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoIGJ5IGJ5cGFzc2luZyBjaGVja3MgZHVyaW5nIGxpbmsgdXBkYXRlcy4gSXQgbW92ZXMgdGhlIHZhbGlkYXRpb24gY2hlY2tzIGludG8gYGRldl94ZHBfaW5zdGFsbGAgYW5kIGFkZHMgYSBjaGVjayB0byBgYnBmX21wcm9nX2NoZWNrX3Byb2dgIHRvIHJlamVjdCBvZmZsb2FkZWQgcHJvZ3JhbXMgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgYW5kIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdGhlIG5vbi1zdGF0aWMgY29udHJvbC1wbGFuZSBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZXNlIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBiZjMzMGQ3MWY4MjU2ODYzZTI3NzU3ZjBkMTg3Y2ViOGI1NzZhODdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwNTo1Mjo0OSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21wcm9nLmMgYi9rZXJuZWwvYnBmL21wcm9nLmNcbmluZGV4IDEzOTQxNjgwNjJlODUuLjBiNTA0NjRlYzkwMmQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbXByb2cuY1xuQEAgLTIyMiw2ICYjNDM7MjIyLDE0IEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX3Bvc19hZnRlcihzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdHJldHVybiB0dXBsZS1cdTAwM2Vwcm9nID8gLUVOT0VOVCA6IGJwZl9tcHJvZ190b3RhbChlbnRyeSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGJwZl9tcHJvZ19jaGVja19wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjNDM7e1xuJiM0MztcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGJwZl9wcm9nX2lzX29mZmxvYWRlZChwcm9nLVx1MDAzZWF1eCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuIFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZ19uZXcsIHN0cnVjdCBicGZfbGluayAqbGluayxcbkBAIC0yMzcsNiAmIzQzOzI0NSw5IEBAIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0fTtcbiBcdGludCByZXQsIGlkeCA9IC1FUkFOR0UsIHRpZHg7XG4gXG4mIzQzO1x0cmV0ID0gYnBmX21wcm9nX2NoZWNrX3Byb2cocHJvZ19uZXcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0aWYgKHJldmlzaW9uIFx1MDAyNlx1MDAyNiByZXZpc2lvbiAhPSBicGZfbXByb2dfcmV2aXNpb24oZW50cnkpKVxuIFx0XHRyZXR1cm4gLUVTVEFMRTtcbiBcdGlmIChicGZfbXByb2dfZXhpc3RzKGVudHJ5LCBwcm9nX25ldykpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggYWYyNjBmZjU0NjJhNi4uMzI4MWYyMjZjMWU1MiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTEwMzI5LDYgJiM0MzsxMDMyOSwyMSBAQCBzdGF0aWMgaW50IGRldl94ZHBfaW5zdGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIGJwZl94ZHBfbW9kZSBtb2RlLFxuIFxuIFx0bmV0ZGV2X2Fzc2VydF9sb2NrZWRfb3BzX2NvbXBhdChkZXYpO1xuIFxuJiM0MztcdGlmIChwcm9nKSB7XG4mIzQzO1x0XHRpZiAobW9kZSAhPSBYRFBfTU9ERV9IVyBcdTAwMjZcdTAwMjYgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctXHUwMDNlYXV4KSkge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1VzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cdTAwM2VhdXgpIFx1MDAyNlx1MDAyNiAhYnBmX29mZmxvYWRfZGV2X21hdGNoKHByb2csIGRldikpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtQcm9ncmFtIGJvdW5kIHRvIGRpZmZlcmVudCBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cdTAwM2VhdXgpIFx1MDAyNlx1MDAyNiBtb2RlID09IFhEUF9NT0RFX1NLQikge1xuJiM0MztcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0NhbiYjMzk7dCBhdHRhY2ggZGV2aWNlLWJvdW5kIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZVwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoZGV2LVx1MDAzZWNmZy1cdTAwM2VoZHNfY29uZmlnID09IEVUSFRPT0xfVENQX0RBVEFfU1BMSVRfRU5BQkxFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICBwcm9nIFx1MDAyNlx1MDAyNiAhcHJvZy1cdTAwM2VhdXgtXHUwMDNleGRwX2hhc19mcmFncykge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O3VuYWJsZSB0byBpbnN0YWxsIFhEUCB0byBkZXZpY2UgdXNpbmcgdGNwLWRhdGEtc3BsaXRcJiMzNDspO1xuQEAgLTEwNDgwLDE4ICYjNDM7MTA0OTUsNiBAQCBzdGF0aWMgaW50IGRldl94ZHBfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7TmF0aXZlIGFuZCBnZW5lcmljIFhEUCBjYW4mIzM5O3QgYmUgYWN0aXZlIGF0IHRoZSBzYW1lIHRpbWVcJiMzNDspO1xuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHR9XG4tXHRcdGlmICghb2ZmbG9hZCBcdTAwMjZcdTAwMjYgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKG5ld19wcm9nLVx1MDAzZWF1eCkpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1VzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWRcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQobmV3X3Byb2ctXHUwMDNlYXV4KSBcdTAwMjZcdTAwMjYgIWJwZl9vZmZsb2FkX2Rldl9tYXRjaChuZXdfcHJvZywgZGV2KSkge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7UHJvZ3JhbSBib3VuZCB0byBkaWZmZXJlbnQgZGV2aWNlXCYjMzQ7KTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0XHRpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLVx1MDAzZWF1eCkgXHUwMDI2XHUwMDI2IG1vZGUgPT0gWERQX01PREVfU0tCKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtDYW4mIzM5O3QgYXR0YWNoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGVcJiMzNDspO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4gXHRcdGlmIChuZXdfcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfWERQX0RFVk1BUCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7QlBGX1hEUF9ERVZNQVAgcHJvZ3JhbXMgY2FuIG5vdCBiZSBhdHRhY2hlZCB0byBhIGRldmljZVwmIzM0Oyk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xuaW5kZXggN2RkMThjNmQwNmM2MC4uNGExM2Y4ZWM0MzAwOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xuQEAgLTEsOSAmIzQzOzEsMTEgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2xpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldHdvcmtfaGVscGVycy5oXHUwMDNlXG4gXG4gI2RlZmluZSBMT0NBTF9ORVROUyBcJiMzNDt4ZHBfZGV2X2JvdW5kX29ubHlfbmV0bnNcJiMzNDtcbiYjNDM7I2RlZmluZSBMSU5LX1VQREFURV9ORVROUyBcJiMzNDt4ZHBfZGV2X2JvdW5kX29ubHlfbHVfbmV0bnNcJiMzNDtcbiBcbiBzdGF0aWMgaW50IGxvYWRfZHVtbXlfcHJvZyhjaGFyICpuYW1lLCBfX3UzMiBpZmluZGV4LCBfX3UzMiBmbGFncylcbiB7XG5AQCAtNTksMyAmIzQzOzYxLDUwIEBAIHZvaWQgdGVzdF94ZHBfZGV2X2JvdW5kX29ubHlfb2ZmZGV2KHZvaWQpXG4gXHQgKi9cbiBcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsIFwmIzM0OyBMT0NBTF9ORVROUyk7XG4gfVxuJiM0MztcbiYjNDM7LyogQSBkZXZpY2UtYm91bmQgcHJvZ3JhbSBtdXN0IG5vdCBydW4gb24gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoLlxuJiM0MzsgKiBkZXZfeGRwX2F0dGFjaCgpIHJlamVjdGVkIHN1Y2ggcHJvZ3JhbXMsIGJ1dCBicGZfeGRwX2xpbmtfdXBkYXRlKCkgcmVhY2hlc1xuJiM0MzsgKiBkZXZfeGRwX2luc3RhbGwoKSBkaXJlY3RseSBhbmQgYnlwYXNzZXMgaXQsIHNvIHRoZSBjaGVjayBoYXMgdG8gbGl2ZSBpblxuJiM0MzsgKiBkZXZfeGRwX2luc3RhbGwoKS4gQ3JlYXRlIGEgZ2VuZXJpYyAoU0tCKSBYRFAgbGluayB3aXRoIGEgbm9ybWFsIHByb2dyYW0sXG4mIzQzOyAqIHRoZW4gdHJ5IHRvIHN3YXAgaW4gYSBkZXZpY2UtYm91bmQgcHJvZ3JhbSB2aWEgQlBGX0xJTktfVVBEQVRFLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9saW5rX3VwZGF0ZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX2xpbmtfY3JlYXRlX29wdHMsIGxvcHRzLCAuZmxhZ3MgPSBYRFBfRkxBR1NfU0tCX01PREUpO1xuJiM0MztcdGludCBiYXNlX2ZkID0gLTEsIGRldmJvdW5kX2ZkID0gLTEsIGxpbmtfZmQgPSAtMTtcbiYjNDM7XHRzdHJ1Y3QgbnN0b2tlbiAqdG9rID0gTlVMTDtcbiYjNDM7XHRfX3UzMiBpZmluZGV4O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFNZUyhvdXQsIFwmIzM0O2lwIG5ldG5zIGFkZCBcJiMzNDsgTElOS19VUERBVEVfTkVUTlMpO1xuJiM0MztcdHRvayA9IG9wZW5fbmV0bnMoTElOS19VUERBVEVfTkVUTlMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUih0b2ssIFwmIzM0O29wZW5fbmV0bnNcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdFNZUyhvdXQsIFwmIzM0O2lwIGxpbmsgYWRkIGV0aDQyIHR5cGUgdmV0aFwmIzM0Oyk7XG4mIzQzO1x0aWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFwmIzM0O2V0aDQyXCYjMzQ7KTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9ORVEoaWZpbmRleCwgMCwgXCYjMzQ7aWZfbmFtZXRvaW5kZXhcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGRldmJvdW5kX2ZkID0gbG9hZF9kdW1teV9wcm9nKFwmIzM0O2RldmJvdW5kXCYjMzQ7LCBpZmluZGV4LCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGRldmJvdW5kX2ZkLCAwLCBcJiMzNDtsb2FkX2R1bW15X3Byb2cgZGV2Ym91bmRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGJhc2VfZmQgPSBsb2FkX2R1bW15X3Byb2coXCYjMzQ7YmFzZVwmIzM0OywgMCwgMCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfR0UoYmFzZV9mZCwgMCwgXCYjMzQ7bG9hZF9kdW1teV9wcm9nIGJhc2VcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGxpbmtfZmQgPSBicGZfbGlua19jcmVhdGUoYmFzZV9mZCwgaWZpbmRleCwgQlBGX1hEUCwgXHUwMDI2bG9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX0dFKGxpbmtfZmQsIDAsIFwmIzM0O2JwZl9saW5rX2NyZWF0ZVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2xpbmtfdXBkYXRlKGxpbmtfZmQsIGRldmJvdW5kX2ZkLCBOVUxMKTtcbiYjNDM7XHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcJiMzNDtsaW5rX3VwZGF0ZSBkZXZpY2UtYm91bmQgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGNsb3NlKGxpbmtfZmQpO1xuJiM0MztcdGNsb3NlKGJhc2VfZmQpO1xuJiM0MztcdGNsb3NlKGRldmJvdW5kX2ZkKTtcbiYjNDM7XHRjbG9zZV9uZXRucyh0b2spO1xuJiM0MztcdFNZU19OT0ZBSUwoXCYjMzQ7aXAgbmV0bnMgZGVsIFwmIzM0OyBMSU5LX1VQREFURV9ORVROUyk7XG4mIzQzO31cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT43bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7TkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICAgJiMzNDtkZXZfY2hhbmdlX3hkcF9mZCYjMzQ7LAogICAgJiMzNDticGZfeGRwX2xpbmtfYXR0YWNoJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGRldmljZS1ib3VuZCBCUEYgcHJvZ3JhbXMgY291bGQgYmUgYXR0YWNoZWQgdG8gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoIGJ5IGJ5cGFzc2luZyBjaGVja3MgZHVyaW5nIGxpbmsgdXBkYXRlcy4gSXQgbW92ZXMgdGhlIHZhbGlkYXRpb24gY2hlY2tzIGludG8gYGRldl94ZHBfaW5zdGFsbGAgYW5kIGFkZHMgYSBjaGVjayB0byBgYnBmX21wcm9nX2NoZWNrX3Byb2dgIHRvIHJlamVjdCBvZmZsb2FkZWQgcHJvZ3JhbXMgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgYW5kIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdGhlIG5vbi1zdGF0aWMgY29udHJvbC1wbGFuZSBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZXNlIGNoZWNrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiZjMzMGQ3MWY4MjU2ODYzZTI3NzU3ZjBkMTg3Y2ViOGI1NzZhODcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwNTo1Mjo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbXByb2cuYyBiL2tlcm5lbC9icGYvbXByb2cuYwppbmRleCAxMzk0MTY4MDYyZTg1Li4wYjUwNDY0ZWM5MDJkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tcHJvZy5jCkBAIC0yMjIsNiAmIzQzOzIyMiwxNCBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wb3NfYWZ0ZXIoc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksCiAJcmV0dXJuIHR1cGxlLSZndDtwcm9nID8gLUVOT0VOVCA6IGJwZl9tcHJvZ190b3RhbChlbnRyeSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGJwZl9tcHJvZ19jaGVja19wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTICZhbXA7JmFtcDsKJiM0MzsJICAgIGJwZl9wcm9nX2lzX29mZmxvYWRlZChwcm9nLSZndDthdXgpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCQkgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsCiAJCSAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX25ldywgc3RydWN0IGJwZl9saW5rICpsaW5rLApAQCAtMjM3LDYgJiM0MzsyNDUsOSBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIAl9OwogCWludCByZXQsIGlkeCA9IC1FUkFOR0UsIHRpZHg7CiAKJiM0MzsJcmV0ID0gYnBmX21wcm9nX2NoZWNrX3Byb2cocHJvZ19uZXcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAlpZiAocmV2aXNpb24gJmFtcDsmYW1wOyByZXZpc2lvbiAhPSBicGZfbXByb2dfcmV2aXNpb24oZW50cnkpKQogCQlyZXR1cm4gLUVTVEFMRTsKIAlpZiAoYnBmX21wcm9nX2V4aXN0cyhlbnRyeSwgcHJvZ19uZXcpKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhZjI2MGZmNTQ2MmE2Li4zMjgxZjIyNmMxZTUyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTAzMjksNiAmIzQzOzEwMzI5LDIxIEBAIHN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsCiAKIAluZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7CiAKJiM0MzsJaWYgKHByb2cpIHsKJiM0MzsJCWlmIChtb2RlICE9IFhEUF9NT0RFX0hXICZhbXA7JmFtcDsgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctJmd0O2F1eCkpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7VXNpbmcgb2ZmbG9hZGVkIHByb2dyYW0gd2l0aG91dCBIV19NT0RFIGZsYWcgaXMgbm90IHN1cHBvcnRlZCYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy0mZ3Q7YXV4KSAmYW1wOyZhbXA7ICFicGZfb2ZmbG9hZF9kZXZfbWF0Y2gocHJvZywgZGV2KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtQcm9ncmFtIGJvdW5kIHRvIGRpZmZlcmVudCBkZXZpY2UmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKHByb2ctJmd0O2F1eCkgJmFtcDsmYW1wOyBtb2RlID09IFhEUF9NT0RFX1NLQikgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtDYW4mIzM5O3QgYXR0YWNoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGUmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZGV2LSZndDtjZmctJmd0O2hkc19jb25maWcgPT0gRVRIVE9PTF9UQ1BfREFUQV9TUExJVF9FTkFCTEVEICZhbXA7JmFtcDsKIAkgICAgcHJvZyAmYW1wOyZhbXA7ICFwcm9nLSZndDthdXgtJmd0O3hkcF9oYXNfZnJhZ3MpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3VuYWJsZSB0byBpbnN0YWxsIFhEUCB0byBkZXZpY2UgdXNpbmcgdGNwLWRhdGEtc3BsaXQmIzM0Oyk7CkBAIC0xMDQ4MCwxOCAmIzQzOzEwNDk1LDYgQEAgc3RhdGljIGludCBkZXZfeGRwX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtOYXRpdmUgYW5kIGdlbmVyaWMgWERQIGNhbiYjMzk7dCBiZSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZSYjMzQ7KTsKIAkJCXJldHVybiAtRUVYSVNUOwogCQl9Ci0JCWlmICghb2ZmbG9hZCAmYW1wOyZhbXA7IGJwZl9wcm9nX2lzX29mZmxvYWRlZChuZXdfcHJvZy0mZ3Q7YXV4KSkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O1VzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQmIzM0Oyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLSZndDthdXgpICZhbXA7JmFtcDsgIWJwZl9vZmZsb2FkX2Rldl9tYXRjaChuZXdfcHJvZywgZGV2KSkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O1Byb2dyYW0gYm91bmQgdG8gZGlmZmVyZW50IGRldmljZSYjMzQ7KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChicGZfcHJvZ19pc19kZXZfYm91bmQobmV3X3Byb2ctJmd0O2F1eCkgJmFtcDsmYW1wOyBtb2RlID09IFhEUF9NT0RFX1NLQikgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0NhbiYjMzk7dCBhdHRhY2ggZGV2aWNlLWJvdW5kIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZSYjMzQ7KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJCWlmIChuZXdfcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1hEUF9ERVZNQVApIHsKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtCUEZfWERQX0RFVk1BUCBwcm9ncmFtcyBjYW4gbm90IGJlIGF0dGFjaGVkIHRvIGEgZGV2aWNlJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCmluZGV4IDdkZDE4YzZkMDZjNjAuLjRhMTNmOGVjNDMwMDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCkBAIC0xLDkgJiM0MzsxLDExIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogI2luY2x1ZGUgJmx0O25ldC9pZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9saW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldHdvcmtfaGVscGVycy5oJmd0OwogCiAjZGVmaW5lIExPQ0FMX05FVE5TICYjMzQ7eGRwX2Rldl9ib3VuZF9vbmx5X25ldG5zJiMzNDsKJiM0MzsjZGVmaW5lIExJTktfVVBEQVRFX05FVE5TICYjMzQ7eGRwX2Rldl9ib3VuZF9vbmx5X2x1X25ldG5zJiMzNDsKIAogc3RhdGljIGludCBsb2FkX2R1bW15X3Byb2coY2hhciAqbmFtZSwgX191MzIgaWZpbmRleCwgX191MzIgZmxhZ3MpCiB7CkBAIC01OSwzICYjNDM7NjEsNTAgQEAgdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZCkKIAkgKi8KIAlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICYjMzQ7IExPQ0FMX05FVE5TKTsKIH0KJiM0MzsKJiM0MzsvKiBBIGRldmljZS1ib3VuZCBwcm9ncmFtIG11c3Qgbm90IHJ1biBvbiB0aGUgWERQIHNvZnR3YXJlIHBhdGguCiYjNDM7ICogZGV2X3hkcF9hdHRhY2goKSByZWplY3RlZCBzdWNoIHByb2dyYW1zLCBidXQgYnBmX3hkcF9saW5rX3VwZGF0ZSgpIHJlYWNoZXMKJiM0MzsgKiBkZXZfeGRwX2luc3RhbGwoKSBkaXJlY3RseSBhbmQgYnlwYXNzZXMgaXQsIHNvIHRoZSBjaGVjayBoYXMgdG8gbGl2ZSBpbgomIzQzOyAqIGRldl94ZHBfaW5zdGFsbCgpLiBDcmVhdGUgYSBnZW5lcmljIChTS0IpIFhEUCBsaW5rIHdpdGggYSBub3JtYWwgcHJvZ3JhbSwKJiM0MzsgKiB0aGVuIHRyeSB0byBzd2FwIGluIGEgZGV2aWNlLWJvdW5kIHByb2dyYW0gdmlhIEJQRl9MSU5LX1VQREFURS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHRlc3RfeGRwX2Rldl9ib3VuZF9vbmx5X2xpbmtfdXBkYXRlKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfbGlua19jcmVhdGVfb3B0cywgbG9wdHMsIC5mbGFncyA9IFhEUF9GTEFHU19TS0JfTU9ERSk7CiYjNDM7CWludCBiYXNlX2ZkID0gLTEsIGRldmJvdW5kX2ZkID0gLTEsIGxpbmtfZmQgPSAtMTsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKnRvayA9IE5VTEw7CiYjNDM7CV9fdTMyIGlmaW5kZXg7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgbmV0bnMgYWRkICYjMzQ7IExJTktfVVBEQVRFX05FVE5TKTsKJiM0MzsJdG9rID0gb3Blbl9uZXRucyhMSU5LX1VQREFURV9ORVROUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUih0b2ssICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIGxpbmsgYWRkIGV0aDQyIHR5cGUgdmV0aCYjMzQ7KTsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7ZXRoNDImIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShpZmluZGV4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWRldmJvdW5kX2ZkID0gbG9hZF9kdW1teV9wcm9nKCYjMzQ7ZGV2Ym91bmQmIzM0OywgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsICYjMzQ7bG9hZF9kdW1teV9wcm9nIGRldmJvdW5kJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWJhc2VfZmQgPSBsb2FkX2R1bW15X3Byb2coJiMzNDtiYXNlJiMzNDssIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShiYXNlX2ZkLCAwLCAmIzM0O2xvYWRfZHVtbXlfcHJvZyBiYXNlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWxpbmtfZmQgPSBicGZfbGlua19jcmVhdGUoYmFzZV9mZCwgaWZpbmRleCwgQlBGX1hEUCwgJmFtcDtsb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGxpbmtfZmQsIDAsICYjMzQ7YnBmX2xpbmtfY3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9saW5rX3VwZGF0ZShsaW5rX2ZkLCBkZXZib3VuZF9mZCwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FSU5WQUwsICYjMzQ7bGlua191cGRhdGUgZGV2aWNlLWJvdW5kIHJlamVjdGVkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJY2xvc2UobGlua19mZCk7CiYjNDM7CWNsb3NlKGJhc2VfZmQpOwomIzQzOwljbG9zZShkZXZib3VuZF9mZCk7CiYjNDM7CWNsb3NlX25ldG5zKHRvayk7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTElOS19VUERBVEVfTkVUTlMpOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAyOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDkwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHRvdWNoZXMgYGtlcm5lbC9icGYvbXByb2cuY2AgYW5kIGBuZXQvY29yZS9kZXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIGlzc3VlcyByZWxhdGVkIHRvIEJQRiBwcm9ncmFtcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIG9mZmxvYWRlZCBhbmQgZGV2aWNlLWJvdW5kIHByb2dyYW1zIHdpdGhpbiB0aGUgWERQIGFuZCB0YyAodHJhZmZpYyBjb250cm9sKSBjb250ZXh0cy4gVGhlIGNvbW1pdCBtZXNzYWdlIG1lbnRpb25zIHRoaXMgb3JpZ2luYXRlZCBmcm9tIGEgc3l6LWNsdXN0ZXIgcmVwb3J0LCBzbyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlIGl0IGFkZHJlc3NlcyBhIHJlYWwgdnVsbmVyYWJpbGl0eS4KCkxldCYjMzk7cyBicmVhayBkb3duIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJbiBga2VybmVsL2JwZi9tcHJvZy5jYCwgYSBuZXcgY2hlY2sgaGFzIGJlZW4gYWRkZWQgaW4gYGJwZl9tcHJvZ19jaGVja19wcm9nYC4gSXQgbG9va3MgbGlrZSBpdCByZWplY3RzIG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCwgd2hpY2ggaXMgcmVsZXZhbnQgdG8gdGN4LiBUaGlzIGZ1bmN0aW9uIGlzIHN1YnNlcXVlbnRseSBjYWxsZWQgYnkgYGJwZl9tcHJvZ19hdHRhY2hgLgoKVGhlbiwgd2UgaGF2ZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9kZXYuY2AuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW52b2x2ZSBtb3ZpbmcgY2hlY2tzIGZyb20gYGRldl94ZHBfYXR0YWNoYCB0byBgZGV2X3hkcF9pbnN0YWxsYC4gIFRoZXNlIGNoZWNrcyBhcmUgYXJvdW5kIGhvdyBvZmZsb2FkZWQgcHJvZ3JhbXMgYmVoYXZlIGluIFhEUCwgYW5kIHRoZXkgYXBwZWFyIHRvIGJlIGFkZHJlc3NpbmcgYSBjYXNlIHdoZXJlIGBicGZfeGRwX2xpbmtfdXBkYXRlYCBieXBhc3NlcyBgZGV2X3hkcF9hdHRhY2hgLCBhbmQgaW5zdGVhZCBkaXJlY3RseSByZWFjaGVzIGBkZXZfeGRwX2luc3RhbGxgLgoKRXNzZW50aWFsbHksIHRoaXMgcGF0Y2ggaXMgcHJvdGVjdGluZyB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgbWFraW5nIHN1cmUgdGhhdCBkZXZpY2UtYm91bmQgcHJvZ3JhbXMgY2FuJiMzOTt0IHJ1biB0aGVyZS4gSXQgYWxzbyBwcmV2ZW50cyBvZmZsb2FkZWQgcHJvZ3JhbXMgZnJvbSBiZWluZyB1c2VkIHdpdGggYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4KClNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBhcmU6CgoqICAgYGJwZl9tcHJvZ19hdHRhY2hgOiBUaGlzIGlzIHdoZXJlIHRoYXQgbmV3IGNoZWNrIGluIGBtcHJvZy5jYCBnZXRzIHRyaWdnZXJlZC4gSXQgc2VlbXMgaW1wb3J0YW50IHRvIHRyaWdnZXIgdGhlIHNwZWNpZmljIGVycm9yIGNhc2VzLgoqICAgYGRldl94ZHBfaW5zdGFsbGA6IFRoZSB0YXJnZXQgb2YgdGhlIGJ5cGFzcywgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29yZSBuZXcgY2hlY2tzIGFkZGVkIGhlcmUuCiogICBgYnBmX3hkcF9saW5rX3VwZGF0ZWA6IFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgYnlwYXNzZXMgYGRldl94ZHBfYXR0YWNoYCwgc28gd29ydGggaW52ZXN0aWdhdGluZyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGNoZWNrcyBpbiBgZGV2X3hkcF9pbnN0YWxsYC4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgdGhhdCBgZGV2X3hkcF9pbnN0YWxsYCBpcyBzdGF0aWMsIHdoaWNoIGNhbiBjb21wbGljYXRlIGRpcmVjdCBmdXp6aW5nIG9mIGl0LCBidXQgZmluZGluZyB0aGUgY2FsbGVycyB3aWxsIGJlIGVzc2VudGlhbC4gYGJwZl9tcHJvZ19hdHRhY2hgIGlzIG5vdCBzdGF0aWMsIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byB0ZXN0LiBJdCBsb29rcyBsaWtlIGl0IGlzIGFuIGltcG9ydGFudCBmdW5jdGlvbiwgYW5kIHRoZSBuZXcgYWRkZWQgY2hlY2sgaW4gYGJwZl9tcHJvZ19jaGVja19wcm9nYCBtdXN0IGJlIGV2YWx1YXRlZC4KVGhlIGNoYW5nZSBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCB0b3VjaGVzIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGxvZ2ljLCBhbmQgdGhlIHN5ei1jbHVzdGVyIG9yaWdpbiBpbXBsaWVzIHRoYXQgaXQgaGFzIHNvbWUgcmVhbC13b3JsZCByZWxldmFuY2UuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gc3BlY2lmaWNhbGx5IHRyaWdnZXIgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIHRob3NlIG5ldyBjaGVja3MgYmVpbmcgaGl0IHdpdGhpbiB0aGUgbmV3IGVycm9yIGNhc2VzLCBhbmQgdHJpZ2dlciB0aGUgYnlwYXNzLCB3aGljaCBpcyB3aGVyZSB0aGUgYnVncyBtYXkgcmVzaWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Rldl94ZHBfaW5zdGFsbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTEwMzE2PXN0YXRpYyB2b2lkIGRldl94ZHBfc2V0X3Byb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBicGZfeGRwX21vZGUgbW9kZSxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDMyMi1cbm5ldC9jb3JlL2Rldi5jOjEwMzIzOnN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsXG5uZXQvY29yZS9kZXYuYy0xMDMyNC1cdFx0XHQgICBicGZfb3BfdCBicGZfb3AsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvY29yZS9kZXYuYz0xMDM4NT1zdGF0aWMgdm9pZCBkZXZfeGRwX3VuaW5zdGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNDAyLVxubmV0L2NvcmUvZGV2LmM6MTA0MDM6XHRcdFdBUk5fT04oZGV2X3hkcF9pbnN0YWxsKGRldiwgbW9kZSwgYnBmX29wLCBOVUxMLCAwLCBOVUxMKSk7XG5uZXQvY29yZS9kZXYuYy0xMDQwNC1cbi0tXG5uZXQvY29yZS9kZXYuYz0xMDQxNj1zdGF0aWMgaW50IGRldl94ZHBfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDUxNS1cbm5ldC9jb3JlL2Rldi5jOjEwNTE2Olx0XHRlcnIgPSBkZXZfeGRwX2luc3RhbGwoZGV2LCBtb2RlLCBicGZfb3AsIGV4dGFjaywgZmxhZ3MsIG5ld19wcm9nKTtcbm5ldC9jb3JlL2Rldi5jLTEwNTE3LVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEwNTM4PXN0YXRpYyBpbnQgZGV2X3hkcF9kZXRhY2hfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNTUxLVx0YnBmX29wID0gZGV2X3hkcF9icGZfb3AoZGV2LCBtb2RlKTtcbm5ldC9jb3JlL2Rldi5jOjEwNTUyOlx0V0FSTl9PTihkZXZfeGRwX2luc3RhbGwoZGV2LCBtb2RlLCBicGZfb3AsIE5VTEwsIDAsIE5VTEwpKTtcbm5ldC9jb3JlL2Rldi5jLTEwNTUzLVx0ZGV2X3hkcF9zZXRfbGluayhkZXYsIG1vZGUsIE5VTEwpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTEwNjE4PXN0YXRpYyBpbnQgYnBmX3hkcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXG4tLVxubmV0L2NvcmUvZGV2LmMtMTA2NTMtXHRicGZfb3AgPSBkZXZfeGRwX2JwZl9vcCh4ZHBfbGluay1cdTAwM2VkZXYsIG1vZGUpO1xubmV0L2NvcmUvZGV2LmM6MTA2NTQ6XHRlcnIgPSBkZXZfeGRwX2luc3RhbGwoeGRwX2xpbmstXHUwMDNlZGV2LCBtb2RlLCBicGZfb3AsIE5VTEwsXG5uZXQvY29yZS9kZXYuYy0xMDY1NS1cdFx0XHQgICAgICB4ZHBfbGluay1cdTAwM2VmbGFncywgbmV3X3Byb2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyOTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBicGZfeGRwX2xpbmtfdXBkYXRlYCYjMzk7cyBJbW11dGFiaWxpdHkqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gWERQIGFuZCB0aGUgQlBGIGluZnJhc3RydWN0dXJlIGFnYWluLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gc29tZXRoaW5nIOKAkyBteSBtZW1vcnkmIzM5O3MgdGVsbGluZyBtZSB0aGF0IGBicGZfeGRwX2xpbmtfdXBkYXRlYCBpcyBkZWZpbmVkIGFzIHN0YXRpYyB0b28sIGJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zLiBJdCYjMzk7cyBjcnVjaWFsLCBvYnZpb3VzbHksIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbmthZ2UgcmVzdHJpY3Rpb25zIHRoYXQgYWZmZWN0IGhvdyB3ZSBjYW4gdXNlIHRoZW0gYWNyb3NzIGRpZmZlcmVudCBjb21waWxhdGlvbiB1bml0cywgcGFydGljdWxhcmx5IHdoZW4gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBkeW5hbWljIEJQRiBwcm9ncmFtIGxvYWRpbmcgYW5kIGxpbmtpbmcsIGFuZCBJIGRvbiYjMzk7dCB3YW50IHRvIHJ1biBpbnRvIGFueSB1bmV4cGVjdGVkIGxpbmthZ2UgaXNzdWVzIGRvd24gdGhlIGxpbmUuIFNvLCBsZXQgbWUganVzdCBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYGJwZl94ZHBfbGlua191cGRhdGVgIGFuZCB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZy4gVGltZSB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gbXkgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JwZl94ZHBfbGlua191cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMDYwMz1zdGF0aWMgaW50IGJwZl94ZHBfbGlua19maWxsX2xpbmtfaW5mbyhjb25zdCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG4tLVxubmV0L2NvcmUvZGV2LmMtMTA2MTctXG5uZXQvY29yZS9kZXYuYzoxMDYxODpzdGF0aWMgaW50IGJwZl94ZHBfbGlua191cGRhdGUoc3RydWN0IGJwZl9saW5rICpsaW5rLCBzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLFxubmV0L2NvcmUvZGV2LmMtMTA2MTktXHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpXG4tLVxubmV0L2NvcmUvZGV2LmM9MTA2Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfbGlua19vcHMgYnBmX3hkcF9saW5rX2xvcHMgPSB7XG4tLVxubmV0L2NvcmUvZGV2LmMtMTA2NzMtXHQuZmlsbF9saW5rX2luZm8gPSBicGZfeGRwX2xpbmtfZmlsbF9saW5rX2luZm8sXG5uZXQvY29yZS9kZXYuYzoxMDY3NDpcdC51cGRhdGVfcHJvZyA9IGJwZl94ZHBfbGlua191cGRhdGUsXG5uZXQvY29yZS9kZXYuYy0xMDY3NS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBTdGF0aWMgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyBpbmRlZWQgc3RhdGljLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLCBzbyBsZXQmIzM5O3Mga2VlcCB0aGF0IGZyb250IGFuZCBjZW50ZXIuIE15IGltbWVkaWF0ZSB0aG91Z2h0IHRoZW4gZHJpZnRzIHRvIGBkZXZfeGRwX2F0dGFjaGAuLi55dXAsIHRoYXQmIzM5O3MgYW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIG9mdGVuIGEgY2x1ZSBhYm91dCBkZXNpZ24gcGF0dGVybnMuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZXNlIHN0YXRpY2FsbHkgZGVjbGFyZWQgaXRlbXMgYXJlICp1c2VkKi4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyB0aGF0IGludm9rZSB0aGVzZSBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbGluZyBjb250ZXh0cyB3aWxsIHJldmVhbCB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwdXJwb3NlIG9mIHRoZXNlIHNlZW1pbmdseSBpc29sYXRlZCBzdGF0aWMgY29tcG9uZW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdW5wYWNrIHRoZSBkYXRhIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X3hkcF9hdHRhY2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMDM4NT1zdGF0aWMgdm9pZCBkZXZfeGRwX3VuaW5zdGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNDE1LVxubmV0L2NvcmUvZGV2LmM6MTA0MTY6c3RhdGljIGludCBkZXZfeGRwX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG5uZXQvY29yZS9kZXYuYy0xMDQxNy1cdFx0XHQgIHN0cnVjdCBicGZfeGRwX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXG4tLVxubmV0L2NvcmUvZGV2LmMtMTA1MzAtXG5uZXQvY29yZS9kZXYuYzoxMDUzMTpzdGF0aWMgaW50IGRldl94ZHBfYXR0YWNoX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9jb3JlL2Rldi5jLTEwNTMyLVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG4tLVxubmV0L2NvcmUvZGV2LmMtMTA1MzQte1xubmV0L2NvcmUvZGV2LmM6MTA1MzU6XHRyZXR1cm4gZGV2X3hkcF9hdHRhY2goZGV2LCBleHRhY2ssIGxpbmssIE5VTEwsIE5VTEwsIGxpbmstXHUwMDNlZmxhZ3MpO1xubmV0L2NvcmUvZGV2LmMtMTA1MzYtfVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEwNjc3PWludCBicGZfeGRwX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxubmV0L2NvcmUvZGV2LmMtMTA3MTAtXHRuZXRkZXZfbG9ja19vcHMoZGV2KTtcbm5ldC9jb3JlL2Rldi5jOjEwNzExOlx0ZXJyID0gZGV2X3hkcF9hdHRhY2hfbGluayhkZXYsIFx1MDAyNmV4dGFjaywgbGluayk7XG5uZXQvY29yZS9kZXYuYy0xMDcxMi1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L2NvcmUvZGV2LmM9MTA3NDU9aW50IGRldl9jaGFuZ2VfeGRwX2ZkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDc3MC1cbm5ldC9jb3JlL2Rldi5jOjEwNzcxOlx0ZXJyID0gZGV2X3hkcF9hdHRhY2goZGV2LCBleHRhY2ssIE5VTEwsIG5ld19wcm9nLCBvbGRfcHJvZywgZmxhZ3MpO1xubmV0L2NvcmUvZGV2LmMtMTA3NzItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU5MwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIFhEUCBBdHRhY2htZW50IE1ldGhvZHMqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlc2UgWERQIGF0dGFjaG1lbnQgbWV0aG9kcy4gVGhlIGZhY3QgdGhhdCBgYnBmX3hkcF9saW5rX2F0dGFjaGAgYW5kIGBkZXZfY2hhbmdlX3hkcF9mZGAgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYCBpcyBpbnRlcmVzdGluZywgYW5kIGl0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IHBvdGVudGlhbCB1c2UgY2FzZXMgYW5kIGxpbmthZ2UgaW1wbGljYXRpb25zLiBOb3csIGxldCBtZSBzZWUuLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGFsbCByZWxhdGVkIGZ1bmN0aW9ucywgc28gdGhlIG5leHQgdGhpbmcgb24gdGhlIGxpc3QgdG8gY2xhcmlmeSB0aGUgc3RhdGUgb2YgdGhpbmdzIGlzIGBicGZfbXByb2dfYXR0YWNoYC4gTGV0IG1lIGNoZWNrIHRoYXQgbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbXByb2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21wcm9nLmM9MjI1PXN0YXRpYyBpbnQgYnBmX21wcm9nX2NoZWNrX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvbXByb2cuYy0yMzItXG5rZXJuZWwvYnBmL21wcm9nLmM6MjMzOmludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxua2VybmVsL2JwZi9tcHJvZy5jLTIzNC1cdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTM5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQlBGIFBhdGNoIGFuZCBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKioKCk9rYXksIHNvIGBicGZfbXByb2dfYXR0YWNoYCBpcyBub24tc3RhdGljLCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gSSYjMzk7bSBnb2luZyB0byBmb2xsb3cgdGhlIGNhbGwgY2hhaW4gZnJvbSBgYnBmX3hkcF9saW5rX3VwZGF0ZWAuIEkgc2VlIGl0JiMzOTtzIHVzZWQgYXMgYSBjYWxsYmFjayBpbiBgYnBmX3hkcF9saW5rX2xvcHNgLCBhbmQgdGhhdCBgdXBkYXRlX3Byb2dgIGNhbGxiYWNrIGlzIGNhbGxlZCBmcm9tIGBicGZfbGlua191cGRhdGVgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFNvLCBgYnBmX2xpbmtfdXBkYXRlYCBpcyBvdXIgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQuIE5vdywgbGV0IG1lIGNoZWNrIGBkZXZfY2hhbmdlX3hkcF9mZGAgLSB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIG5ldGxpbmsuIEFuZCBgYnBmX3hkcF9saW5rX2F0dGFjaGAsIHdoaWNoIGlzIGFsc28gaW1wb3J0YW50LCBpcyBjYWxsZWQgZnJvbSBgbGlua19jcmVhdGVgIGluIHRoZSBzYW1lIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AgZmlsZS4KClRoaXMgcGF0Y2ggaXMgZml4aW5nIGFuIGlzc3VlIHdpdGggZGV2aWNlLWJvdW5kIHByb2dyYW1zIHNvbWVob3cgZW5kaW5nIHVwIG9uIGdlbmVyaWMgWERQIHBhdGhzLCBhbmQgYWxzbyBwcmV2ZW50aW5nIG9mZmxvYWRlZCBwcm9ncmFtcyBmcm9tIGJlaW5nIGF0dGFjaGVkIHRvIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2Agd2l0aG91dCB0aGUgYEhXX01PREVgIGZsYWcuIEJ1dCB3YWl0LCBgYnBmX21wcm9nX2NoZWNrX3Byb2dgIHNob3VsZCBoYXZlIGJlZW4gcmVqZWN0aW5nIHRob3NlIG9mZmxvYWRlZCBwcm9ncmFtcyBhbnl3YXkuCgpJcyB0aGlzIHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIEl0IGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgd2hlcmUgYSBkZXZpY2UtYm91bmQgcHJvZ3JhbSBjb3VsZCBleGVjdXRlIGluIHRoZSBYRFAgc29mdHdhcmUgcGF0aCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBpc3N1ZS4gVGhlIHBhdGNoIGlzIGFkZGluZyBjaGVja3MgaW4gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgZGV2X3hkcF9pbnN0YWxsYCwgc28gdGhvc2UgYXJlIGNyaXRpY2FsIGFyZWFzLgoKTXkgZm9jdXMgc2hvdWxkIGJlIG9uOgoKKiAgIGBicGZfbXByb2dfYXR0YWNoYAoqICAgYGJwZl94ZHBfbGlua19hdHRhY2hgCiogICBgZGV2X2NoYW5nZV94ZHBfZmRgCgpIb2xkIG9uIGEgc2Vjb25kLCBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXMgZm9yIGNyZWF0aW5nIGEgbGluay4gVGhlIGJ1ZyB3YXMgaW4gYGJwZl94ZHBfbGlua191cGRhdGVgLCB3aGljaCBzZWVtcyB0byBoYXZlIGJ5cGFzc2VkIHNvbWUgY2hlY2tzLiBTbywgdGhlIHN5c2NhbGwgZW50cnkgcG9pbnQgaXMgYGJwZl9saW5rX3VwZGF0ZWAgdHJpZ2dlcmluZyBgYnBmX3hkcF9saW5rX3VwZGF0ZWAuIEJ1dCBgYnBmX2xpbmtfdXBkYXRlYCBpcyBhIGdlbmVyaWMgc3lzdGVtIGNhbGwgZnVuY3Rpb24uIElzIHRoZXJlIGEgc3BlY2lmaWMgZnVuY3Rpb24gZm9yIFhEUCBsaW5rIHVwZGF0ZT8gTm8sIGBicGZfeGRwX2xpbmtfdXBkYXRlYCBpcyBzdGF0aWMuIEFscmlnaHQsIGxldCYjMzk7cyBzdGljayB3aXRoIHRoZSBwbGFuLiBJIHNob3VsZCBzdGlsbCBmb2N1cyBvbiBgYnBmX21wcm9nX2F0dGFjaGAsIGBkZXZfY2hhbmdlX3hkcF9mZGAsIGFuZCBgYnBmX3hkcF9saW5rX2F0dGFjaGAuIFRpbWUgdG8gbWFrZSBzdXJlIGBicGZfeGRwX2xpbmtfYXR0YWNoYCBpc24mIzM5O3Qgc3RhdGljLCBqdXN0IHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX3hkcF9saW5rX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTEwNjY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl94ZHBfbGlua19sb3BzID0ge1xuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNjc2LVxubmV0L2NvcmUvZGV2LmM6MTA2Nzc6aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbm5ldC9jb3JlL2Rldi5jLTEwNjc4LXtcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDcxNy1cdFx0YnBmX2xpbmtfY2xlYW51cChcdTAwMjZsaW5rX3ByaW1lcik7XG5uZXQvY29yZS9kZXYuYzoxMDcxODpcdFx0dHJhY2VfYnBmX3hkcF9saW5rX2F0dGFjaF9mYWlsZWQoZXh0YWNrLl9tc2cpO1xubmV0L2NvcmUvZGV2LmMtMTA3MTktXHRcdGdvdG8gb3V0X3B1dF9kZXY7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNzAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgQlBGIEF0dGFjaG1lbnQgRnVuY3Rpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXMgaW5kZWVkICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdywgY29uZmlybWluZyBteSByZWNvbGxlY3Rpb24uIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gdGhhdCBzcHJpbmdzIHRvIG1pbmQsIGFzIEkgY29uc2lkZXIgdGhpcyBhdHRhY2ggcG9pbnQsIGlzOiB3aGF0IGFib3V0IGBicGZfbXByb2dfYXR0YWNoYD8gSSBuZWVkIHRvIHF1aWNrbHkgcmVjYWxsIGl0cyBzdGF0dXMgYW5kIHVzYWdlIHNjZW5hcmlvcyByZWxhdGVkIHRvIHRoaXMgYXR0YWNobWVudCBzdHJhdGVneS4gSXMgdGhlcmUgc29tZSBwb3RlbnRpYWwgZm9yIHVzaW5nIHRoYXQgZnVuY3Rpb24sIG9yIGFub3RoZXIgc2ltaWxhciBvbmUsIGluIGEgc2NlbmFyaW8gcmVsZXZhbnQgdG8gd2hhdCBJJiMzOTttIGN1cnJlbnRseSB3b3JraW5nIG9uPyBMZXQgbWUgc2VlLiBJIGJldHRlciBtYWtlIHN1cmUgSSBrbm93IHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbXByb2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21wcm9nLmM9MjI1PXN0YXRpYyBpbnQgYnBmX21wcm9nX2NoZWNrX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvbXByb2cuYy0yMzItXG5rZXJuZWwvYnBmL21wcm9nLmM6MjMzOmludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxua2VybmVsL2JwZi9tcHJvZy5jLTIzNC1cdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjI2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBgYnBmX21wcm9nX2F0dGFjaGAgRnVuY3Rpb24qKgoKT2theSwgc28gYGJwZl9tcHJvZ19hdHRhY2hgIGlzIGNvbmZpcm1lZCBhcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIGtlcm5lbCBDT05GSUcgb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgdGhhdCYjMzk7cyBmdW5kYW1lbnRhbCBhbmQgZXhwZWN0ZWQuIEFuZCwgb2YgY291cnNlLCBgQ09ORklHX05FVGAgaXMgZXNzZW50aWFsLCBub3RoaW5nIHN1cnByaXNpbmcgdGhlcmUuIFdoYXQgYWJvdXQgYENPTkZJR19YRFBfU09DS0VUU2A/IEhtbSwgdGhhdCYjMzk7cyBYRFAtc3BlY2lmaWMsIHNvIGl0JiMzOTtzIHByb2JhYmx5IG5vdCBuZWVkZWQgaGVyZS4gVG8gYmUgY2VydGFpbiwgSSBzaG91bGQgcmVhbGx5IGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZSBmb3IgYGtlcm5lbC9icGYvbXByb2cuY2AuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcHJvZ1xcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGU9MTU9b2JqLSR7Q09ORklHX0JQRl9MU019XHQgICYjNDM7PSBicGZfaW5vZGVfc3RvcmFnZS5vXG5rZXJuZWwvYnBmL01ha2VmaWxlOjE2Om9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGRpc2FzbS5vIG1wcm9nLm9cbmtlcm5lbC9icGYvTWFrZWZpbGUtMTctb2JqLSQoQ09ORklHX0JQRl9KSVQpICYjNDM7PSB0cmFtcG9saW5lLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgQ09ORklHX0JQRl9TWVNDQUxMYCBzZWVtcyBzdWZmaWNpZW50IGZvciBgbXByb2cuY2AsIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgaW4gdGhpcyBidWlsZCBwcm9jZXNzLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYG5ldC9jb3JlL2Rldi5jYC4gSSBrbm93IHRoYXQmIzM5O3MgYWx3YXlzIGNvbXBpbGVkIGFzIGxvbmcgYXMgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEgcHJldHR5IGNvbW1vbiBzZXR0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYWZmZWN0IGl0cyBidWlsZCBvciBmdW5jdGlvbmFsaXR5LgoKTm93LCBsZXQmIzM5O3MgY29uc2lkZXIgdGhlIHRlc3QgY2FzZSBpdHNlbGYuIEl0IHVzZXMgYEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWWAsIHdoaWNoIGlzIGFuIFhEUCBmbGFnLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19ORVRERVZfT0ZGTE9BRGAgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGFueXRoaW5nIHRoYXQgZW5hYmxlcyBuZXR3b3JrIGRldmljZSBvZmZsb2FkIGZlYXR1cmVzIGluIHRoZSBCUEYgY29udGV4dCDigJMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBicGZfcHJvZ19pc19vZmZsb2FkZWRgLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGVzZSBhcmUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfcHJvZ19pc19vZmZsb2FkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmLmg9MzYzMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfZGV2X2JvdW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2MzctXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2Mzg6c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX29mZmxvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM2Mzkte1xuLS1cbmluY2x1ZGUvbGludXgvYnBmLmg9MzY5Nj1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfZGV2X2JvdW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbi0tXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3MDAtXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3MDE6c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX29mZmxvYWRlZChzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG5pbmNsdWRlL2xpbnV4L2JwZi5oLTM3MDIte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYxMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgeW91IGRlc2NyaWJlZDoKCioqRXhhbWluaW5nIEJQRiBPZmZsb2FkIERldGVjdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSYjMzk7cmUgZGV0ZXJtaW5pbmcgaWYgYSBCUEYgcHJvZ3JhbSBpcyBvZmZsb2FkZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBzdGFuZGFyZCBoZWFkZXIgZmlsZSwgYGluY2x1ZGUvbGludXgvYnBmLmhgLiBNeSBpbW1lZGlhdGUgdGFyZ2V0IGlzIHRoYXQgYCNpZmRlZmAgYmxvY2sgc3Vycm91bmRpbmcgYGJwZl9wcm9nX2lzX29mZmxvYWRlZGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgd2lsbCBsaWtlbHkgcmVzaWRlLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgbWFjcm8gb3IgZnVuY3Rpb24gaXMgY2VudHJhbCB0byB0aGUgb2ZmbG9hZCBkZXRlY3Rpb24sIGFuZCBJIG5lZWQgdG8gc2VlIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG9vLCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNjMwOlx0aW50IGJwZl9wcm9nX2Rldl9ib3VuZF9pbmhlcml0KHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpO1xuMzYzMTpcdHZvaWQgYnBmX2Rldl9ib3VuZF9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbjM2MzI6XHRcbjM2MzM6XHRzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfZGV2X2JvdW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcbjM2MzQ6XHR7XG4zNjM1Olx0XHRyZXR1cm4gYXV4LVx1MDAzZWRldl9ib3VuZDtcbjM2MzY6XHR9XG4zNjM3Olx0XG4zNjM4Olx0c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX29mZmxvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXG4zNjM5Olx0e1xuMzY0MDpcdFx0cmV0dXJuIGF1eC1cdTAwM2VvZmZsb2FkX3JlcXVlc3RlZDtcbjM2NDE6XHR9XG4zNjQyOlx0XG4zNjQzOlx0Ym9vbCBicGZfcHJvZ19kZXZfYm91bmRfbWF0Y2goY29uc3Qgc3RydWN0IGJwZl9wcm9nICpsaHMsIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcmhzKTtcbjM2NDQ6XHRcbjM2NDU6XHRzdGF0aWMgaW5saW5lIGJvb2wgYnBmX21hcF9pc19vZmZsb2FkZWQoc3RydWN0IGJwZl9tYXAgKm1hcClcbjM2NDY6XHR7XG4zNjQ3Olx0XHRyZXR1cm4gdW5saWtlbHkobWFwLVx1MDAzZW9wcyA9PSBcdTAwMjZicGZfbWFwX29mZmxvYWRfb3BzKTtcbjM2NDg6XHR9XG4zNjQ5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTkwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjb2RlIGZsb3csIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyB0cmFjaW5nIGhvdyB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyBhcmUgaW1wYWN0aW5nIGl0LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGVzZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgZWFybGllciBsaW5lcyBvZiBjb2RlIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBpbiBwbGFjZSwgYmVjYXVzZSB0aGUgbG9naWMgZmxvdyBjYW4gZHJhbWF0aWNhbGx5IGNoYW5nZSBiYXNlZCBvbiB0aGUgZXZhbHVhdGlvbiBvZiB0aGVzZS4gSSBuZWVkIHRvIGJlIHN1cmUgdG8gZnVsbHkgdW5kZXJzdGFuZCBhbGwgcG90ZW50aWFsIGV4ZWN1dGlvbiBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JwZi5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzYwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNjAwOlx0XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4zNjAxOlx0XG4zNjAyOlx0aW50IGJwZl9tYXBfb2ZmbG9hZF9pbmZvX2ZpbGwoc3RydWN0IGJwZl9tYXBfaW5mbyAqaW5mbywgc3RydWN0IGJwZl9tYXAgKm1hcCk7XG4zNjAzOlx0XG4zNjA0Olx0aW50IGJwZl9tYXBfb2ZmbG9hZF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlKTtcbjM2MDU6XHRpbnQgYnBmX21hcF9vZmZsb2FkX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsXG4zNjA2Olx0XHRcdFx0XHR2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgZmxhZ3MpO1xuMzYwNzpcdGludCBicGZfbWFwX29mZmxvYWRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KTtcbjM2MDg6XHRpbnQgYnBmX21hcF9vZmZsb2FkX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuMzYwOTpcdFx0XHRcdFx0IHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpO1xuMzYxMDpcdFxuMzYxMTpcdGJvb2wgYnBmX29mZmxvYWRfcHJvZ19tYXBfbWF0Y2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcbjM2MTI6XHRcbjM2MTM6XHRzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpcbjM2MTQ6XHRicGZfb2ZmbG9hZF9kZXZfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkX29wcyAqb3BzLCB2b2lkICpwcml2KTtcbjM2MTU6XHR2b2lkIGJwZl9vZmZsb2FkX2Rldl9kZXN0cm95KHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldik7XG4zNjE2Olx0dm9pZCAqYnBmX29mZmxvYWRfZGV2X3ByaXYoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2KTtcbjM2MTc6XHRpbnQgYnBmX29mZmxvYWRfZGV2X25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXG4zNjE4Olx0XHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4zNjE5Olx0dm9pZCBicGZfb2ZmbG9hZF9kZXZfbmV0ZGV2X3VucmVnaXN0ZXIoc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2LFxuMzYyMDpcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuMzYyMTpcdGJvb2wgYnBmX29mZmxvYWRfZGV2X21hdGNoKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XG4zNjIyOlx0XG4zNjIzOlx0dm9pZCB1bnByaXZfZWJwZl9ub3RpZnkoaW50IG5ld19zdGF0ZSk7XG4zNjI0Olx0XG4zNjI1Olx0I2lmIGRlZmluZWQoQ09ORklHX05FVCkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX0JQRl9TWVNDQUxMKVxuMzYyNjpcdGludCBicGZfZGV2X2JvdW5kX2tmdW5jX2NoZWNrKHN0cnVjdCBicGZfdmVyaWZpZXJfbG9nICpsb2csXG4zNjI3Olx0XHRcdFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqcHJvZ19hdXgpO1xuMzYyODpcdHZvaWQgKmJwZl9kZXZfYm91bmRfcmVzb2x2ZV9rZnVuYyhzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBmdW5jX2lkKTtcbjM2Mjk6XHRpbnQgYnBmX3Byb2dfZGV2X2JvdW5kX2luaXQoc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0cik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDgyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBYRFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQg4oCTIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYXJlIHRoZSBvbmx5IGRlcGVuZGVuY2llcy4gVGhhdCYjMzk7cyBnb29kLCBubyBjb21wbGljYXRlZCBidWlsZCBlbnZpcm9ubWVudCBjaGFuZ2VzLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoYXQgYGJwZl94ZHBfbGlua191cGRhdGVgIHdhcyBieXBhc3NpbmcgdGhlIGludGVuZGVkIGBkZXZfeGRwX2F0dGFjaGAgY2hlY2tzIGFuZCBnb2luZyBzdHJhaWdodCB0byBgZGV2X3hkcF9pbnN0YWxsYC4gVGhpcyBhbGxvd2VkIGEgcHJvZ3JhbSBzcGVjaWZpY2FsbHkgYm91bmQgdG8gYSBkZXZpY2UgdG8gc29tZWhvdyBleGVjdXRlIG9uIHRoZSBYRFAgc29mdHdhcmUgcGF0aCwgd2hpY2ggaXMgb2J2aW91c2x5IGEgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSBjb25jZXJuLiBUaGUgZml4IGlzIHRvIG1vdmUgdGhlIGNvcmUgY2hlY2sgaW50byBgZGV2X3hkcF9pbnN0YWxsYCwgd2hpY2ggc2VlbXMgbG9naWNhbC4gUGx1cywgdGhleSYjMzk7cmUgYWRkaW5nIGEgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBjaGVjayBpbiBgYnBmX21wcm9nX2NoZWNrX3Byb2dgLiBTbWFydC4KCk5vdywgd2hpY2ggZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaGVyZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRyb2wgZmxvdy4gYGJwZl9tcHJvZ19hdHRhY2hgIGhhbmRsZXMgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCBhdHRhY2htZW50cy4gVGhlbiB0aGVyZSYjMzk7cyBgYnBmX3hkcF9saW5rX2F0dGFjaGAgZm9yIHRoZSBYRFAgbGluayBhdHRhY2htZW50LiBBbmQgb2YgY291cnNlLCBgZGV2X2NoYW5nZV94ZHBfZmRgIHdoaWNoIGhhbmRsZXMgdGhlIFhEUCBmaWxlIGRlc2NyaXB0b3IgYXR0YWNobWVudC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIGRpZmZlcmVudCBCUEYgcHJvZ3JhbSB0eXBlcy4KCldhaXQgYSBtaW51dGUuLi4gYGJwZl94ZHBfbGlua191cGRhdGVgIGlzIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgb2YgYSB3cmlua2xlLiBJJiMzOTttIHdvbmRlcmluZyBob3cgaXQgcmVsYXRlcyB0byBgYnBmX2xpbmtfdXBkYXRlYCB3aGljaCAqaXNuJiMzOTt0KiBzdGF0aWMuIFNvLCB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBub24tc3RhdGljIG9uZS4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGltcG9ydGFudCBsaW5rIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQgbWUgY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaG93IGBicGZfbGlua191cGRhdGVgIGlzIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgd2hlcmUgdGhlIG1haW4gbG9naWMgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2xpbmtfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9zeXNjYWxsLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgyMAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipLZXJuZWwgSW50ZXJuYWxzIERpdmUgLSBUaGUgQ3VyaW91cyBDYXNlIG9mIGJwZl9saW5rX3VwZGF0ZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJJiMzOTttIGp1c3QgcGFyc2luZyB0aHJvdWdoIHNvbWUgY29kZSByZWxhdGVkIHRvIGVCUEYgbGluayBtYW5hZ2VtZW50LCBhbmQgc29tZXRoaW5nJiMzOTtzIHBva2luZyBhdCBteSBpbnR1aXRpb24uICpicGZfbGlua191cGRhdGUqLi4uIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGxpbmthZ2UgdXBkYXRlcyBoYXBwZW4sIHJpZ2h0PyBUaGUgY29yZSBmdW5jdGlvbiBmb3IgbW9kaWZ5aW5nIHRoZSBsaW5rYWdlcz8gU2hvdWxkbiYjMzk7dCB0aGF0IGJlIHVuZGVyIHNvbWUgZGVkaWNhdGVkIEJQRiBpbmZyYXN0cnVjdHVyZSBkaXJlY3RvcnksIG1heWJlIHNvbWV0aGluZyBpbiB0aGUgKm5ldCogc3Vic3lzdGVtLCBnaXZlbiBpdHMgbmV0d29yay1jZW50cmljIGFwcGxpY2F0aW9ucz8KCldhaXQuLi4gaXMgdGhhdC4uLiAqa2VybmVsL2JwZi9zeXNjYWxsLmMqPyEgU2VyaW91c2x5PyAqc3lzY2FsbC5jKj8gVGhhdCYjMzk7cyB1bmV4cGVjdGVkLiBNeSB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IGl0JiMzOTtkIGJlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSBvciBhdCBsZWFzdCBzb21ldGhpbmcgbG9naWNhbGx5IGdyb3VwZWQuIFdoeSBpcyAqYnBmX2xpbmtfdXBkYXRlKiBsaXZpbmcgaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludHM/IFRoaXMgbG9jYXRpb24gc3VnZ2VzdHMgYSBwb3RlbnRpYWxseSB0aWdodCBjb3VwbGluZyB3aXRoIHRoZSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkgd2FzIGV4cGVjdGluZyBhIG1vcmUgb3JnYW5pemVkLCBtb2R1bGFyIHN0cnVjdHVyZS4gVGhpcyBwbGFjZW1lbnQgaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciBwb3RlbnRpYWwgY29tcGxleGl0eSB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN5c2NhbGwgaGFuZGxpbmcgYW5kIHRoZSBsaW5rIHVwZGF0ZSBsb2dpYzsgaXQmIzM5O3MgYSBiaXQgb2YgYW4gYW5vbWFseS4gSSBiZXR0ZXIgc3RhcnQgcmV2aWV3aW5nIHRoZSBicm9hZGVyIHN1cnJvdW5kaW5nIGNvbnRleHQsIGluY2x1ZGluZyBhbnkgcmVsZXZhbnQgYCNpZmRlZmAgYmxvY2tzIG9yIG90aGVyIG9yZ2FuaXphdGlvbmFsIG51YW5jZXMsIHRvIGZ1bGx5IGdyYXNwIHdoeSB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24gZW5kZWQgdXAgaW4gKnN5c2NhbGwuYyogYW5kIHdoYXQgaXRzIGJyb2FkZXIgaW1wbGljYXRpb25zIGFyZS4gSSBzaG91bGQgcHJvYmFibHkgYnJ1c2ggdXAgb24gdGhlIEJQRiBsaW5rIEFQSXMgYWdhaW4sIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGlua191cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3N5c2NhbGwuYz01Nzg0PXN0YXRpYyBpbnQgbGlua19jcmVhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIsIGJwZnB0cl90IHVhdHRyKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4ODktXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODkwOnN0YXRpYyBpbnQgbGlua191cGRhdGVfbWFwKHN0cnVjdCBicGZfbGluayAqbGluaywgdW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODkxLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk0LVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5NTpcdG5ld19tYXAgPSBicGZfbWFwX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm5ld19tYXBfZmQpO1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5Ni1cdGlmIChJU19FUlIobmV3X21hcCkpXG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5OC1cbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTk6XHRpZiAoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5mbGFncyBcdTAwMjYgQlBGX0ZfUkVQTEFDRSkge1xua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkwMDpcdFx0b2xkX21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXHUwMDNlbGlua191cGRhdGUub2xkX21hcF9mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTAxLVx0XHRpZiAoSVNfRVJSKG9sZF9tYXApKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkwNC1cdFx0fVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkwNTpcdH0gZWxzZSBpZiAoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfbWFwX2ZkKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTA2LVx0XHRyZXQgPSAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MTgtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTE5OiNkZWZpbmUgQlBGX0xJTktfVVBEQVRFX0xBU1RfRklFTEQgbGlua191cGRhdGUub2xkX3Byb2dfZmRcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MjAtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTIxOnN0YXRpYyBpbnQgbGlua191cGRhdGUodW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTIyLXtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTMwLVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkzMTpcdGZsYWdzID0gYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5mbGFncztcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MzItXHRpZiAoZmxhZ3MgXHUwMDI2IH5CUEZfRl9SRVBMQUNFKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MzQtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTM1Olx0bGluayA9IGJwZl9saW5rX2dldF9mcm9tX2ZkKGF0dHItXHUwMDNlbGlua191cGRhdGUubGlua19mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTM2LVx0aWYgKElTX0VSUihsaW5rKSlcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTM5LVx0aWYgKGxpbmstXHUwMDNlb3BzLVx1MDAzZXVwZGF0ZV9tYXApIHtcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5NDA6XHRcdHJldCA9IGxpbmtfdXBkYXRlX21hcChsaW5rLCBhdHRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NDEtXHRcdGdvdG8gb3V0X3B1dF9saW5rO1xuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NDMtXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTQ0Olx0bmV3X3Byb2cgPSBicGZfcHJvZ19nZXQoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5uZXdfcHJvZ19mZCk7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTQ1LVx0aWYgKElTX0VSUihuZXdfcHJvZykpIHtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTUwLVx0aWYgKGZsYWdzIFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTUxOlx0XHRvbGRfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NTItXHRcdGlmIChJU19FUlIob2xkX3Byb2cpKSB7XG4tLVxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1Ni1cdFx0fVxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1NzpcdH0gZWxzZSBpZiAoYXR0ci1cdTAwM2VsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZCkge1xua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1OC1cdFx0cmV0ID0gLUVJTlZBTDtcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz02Mjk0PXN0YXRpYyBpbnQgX19zeXNfYnBmKGVudW0gYnBmX2NtZCBjbWQsIGJwZnB0cl90IHVhdHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSxcbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDM1LVx0Y2FzZSBCUEZfTElOS19VUERBVEU6XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo2NDM2Olx0XHRlcnIgPSBsaW5rX3VwZGF0ZShcdTAwMjZhdHRyKTtcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MzctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI5NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5OiBJZGVudGlmeWluZyBLZXkgQlBGIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggdGhpcyBmdXp6aW5nIGVmZm9ydC4gSSYjMzk7dmUgZ290IGBsaW5rX3VwZGF0ZWAsIHdoaWNoIGlzIHN0YXRpYywgc28gdGhhdCYjMzk7cyBub3QgaWRlYWwgZm9yIGRpcmVjdCBtYW5pcHVsYXRpb24uIFRoZSBwcmltYXJ5IHN5c2NhbGwgZW50cnkgcG9pbnQgaXMgYF9fc3lzX2JwZmAsIGJ1dCB0aGF0JiMzOTtzIGEgbWFzc2l2ZSBtdWx0aXBsZXhlciwgYSBiaXQgdW53aWVsZHkuIExldCYjMzk7cyBzZWUuLi4gSSBuZWVkIHRvIGZpbmQgc29tZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0byB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBpbml0aWFsIHRob3VnaHRzIGFyZTogYGJwZl94ZHBfbGlua19hdHRhY2hgLCBgZGV2X2NoYW5nZV94ZHBfZmRgLCBhbmQgYGJwZl9tcHJvZ19hdHRhY2hgLiBUaG9zZSBsb29rIHByb21pc2luZy4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGJlc3QgZnVuY3Rpb25zIHRvIHRhcmdldC4gRm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIEkmIzM5O20gZ29pbmcgdG8gY29uZmlybSB0aGF0IGBicGZfbXByb2dfYXR0YWNoYCBpcyBpbmRlZWQgdGhlIHJpZ2h0IGNhbGwsIGFuZCwgeWVzLCBpdCBzZWVtcyB0byBiZS4gR29vZC4KCk5leHQgdXAsIFhEUDogYGRldl9jaGFuZ2VfeGRwX2ZkYCBpcyB0aGUgcHJpbWUgY2FuZGlkYXRlLiBZZXAsIHRoYXQmIzM5O3Mgd2hhdCBJIHRob3VnaHQuCgpBbmQgZm9yIFhEUCBsaW5rIGF0dGFjaCwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXMgdGhlIGJlc3QgY2hvaWNlLi4uIGFuZCB5ZXMsIHRoYXQmIzM5O3MgdGhlIG9uZS4KCkFueSBvdGhlciBmdW5jdGlvbnMgSSBzaG91bGQgY29uc2lkZXI/IEkgc3BvdHRlZCBgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkYCwgYnV0IHRoYXQmIzM5O3MgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyB0aGF0IGlzIG5vdCBnb2luZyB0byB3b3JrLgoKT2theSwgbGV0JiMzOTtzIHN1bW1hcml6ZSBhbmQgZm9ybWFsaXplIHRoaXM6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBvdXIgdGltZQoqICAgKipGb2N1c1N5bWJvbHM6KiogSSYjMzk7dmUgaWRlbnRpZmllZCB0aHJlZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGNsb3NlIGF0dGVudGlvbjoKICAgICogICBgYnBmX21wcm9nX2F0dGFjaGAKICAgICogICBgZGV2X2NoYW5nZV94ZHBfZmRgCiAgICAqICAgYGJwZl94ZHBfbGlua19hdHRhY2hgCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVzZSBjb25maWdzIGFyZSBvbiwgc28gdGhhdCBvdXIgYW5hbHlzaXMgaW5jbHVkZXMgYWxsIHJlbGV2YW50IGNvZGUgcGF0aHM6CiAgICAqICAgYEJQRl9TWVNDQUxMYAogICAgKiAgIGBORVRgCgpGaW5hbGx5LCBJIHdpbGwganVzdCBkb3VibGUgY2hlY2sgdGhhdCBgZGV2X2NoYW5nZV94ZHBfZmRgIGlzIGRlZmluaXRlbHkgbm9uLXN0YXRpYyAtIGp1c3QgYSBzYW5pdHkgY2hlY2sgYmVmb3JlIEkgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2NoYW5nZV94ZHBfZmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9kZXYuYz0xMDY3Nz1pbnQgYnBmX3hkcF9saW5rX2F0dGFjaChjb25zdCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEwNzM1LS8qKlxubmV0L2NvcmUvZGV2LmM6MTA3MzY6ICpcdGRldl9jaGFuZ2VfeGRwX2ZkIC0gc2V0IG9yIGNsZWFyIGEgYnBmIHByb2dyYW0gZm9yIGEgZGV2aWNlIHJ4IHBhdGhcbm5ldC9jb3JlL2Rldi5jLTEwNzM3LSAqXHRAZGV2OiBkZXZpY2Vcbi0tXG5uZXQvY29yZS9kZXYuYy0xMDc0NC0gKi9cbm5ldC9jb3JlL2Rldi5jOjEwNzQ1OmludCBkZXZfY2hhbmdlX3hkcF9mZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXG5uZXQvY29yZS9kZXYuYy0xMDc0Ni1cdFx0ICAgICAgaW50IGZkLCBpbnQgZXhwZWN0ZWRfZmQsIHUzMiBmbGFncylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzNTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipOb24tU3RhdGljIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgdGhlIGNvcmUgYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgc29tZXRoaW5nIGlzICpub3QqIHN0YXRpYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdC4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBpZiBgYnBmX21wcm9nX2F0dGFjaGAgaXMgbm9uLXN0YXRpYy4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhpcyBhcmVhLCBhbmQgYSBzdGF0aWMgZGVjbGFyYXRpb24gd291bGQgYmUgYSBtYWpvciBwb2ludC4gS25vd2luZyB0aGlzIHdvdWxkIGNsYXJpZnkgYSBzaWduaWZpY2FudCBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX21wcm9nX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbXByb2cuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL21wcm9nLmM9MjI1PXN0YXRpYyBpbnQgYnBmX21wcm9nX2NoZWNrX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuLS1cbmtlcm5lbC9icGYvbXByb2cuYy0yMzItXG5rZXJuZWwvYnBmL21wcm9nLmM6MjMzOmludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxua2VybmVsL2JwZi9tcHJvZy5jLTIzNC1cdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY1MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFhEUCBJbnN0YWxsYXRpb24gUGF0aCoqCgpPa2F5LCBzbyB0aGUgYGRldl94ZHBfaW5zdGFsbGAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGlmZmVyZW50IHdheXMgaXQgZ2V0cyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoLiBJJiMzOTt2ZSBhbHJlYWR5IGlkZW50aWZpZWQgc2V2ZXJhbCBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgY2FsbCBpdDogYGRldl94ZHBfYXR0YWNoYCwgYGRldl94ZHBfYXR0YWNoX2xpbmtgLCBgZGV2X3hkcF9kZXRhY2hfbGlua2AsIGFuZCBgYnBmX3hkcF9saW5rX3VwZGF0ZWAuCgpgYnBmX3hkcF9saW5rX3VwZGF0ZWAgaXMgaW50ZXJlc3RpbmcsIHNpbmNlIGl0JiMzOTtzIHVzZWQgd2l0aGluIGBsaW5rX3VwZGF0ZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gQnV0IGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljLCB3aGljaCBibG9ja3MgZGlyZWN0IG1hbmlwdWxhdGlvbi4gV2hpbGUgYGJwZl94ZHBfbGlua191cGRhdGVgIGlzIGFzc2lnbmVkIHRvIGAudXBkYXRlX3Byb2dgIGluIGBicGZfeGRwX2xpbmtfbG9wc2AsIEkgbmVlZCBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBsaW5rX3VwZGF0ZWAgaXMgY2FsbGVkIGJ5IGBfX3N5c19icGZgLCB3aGljaCBpcyB0b28gZ2VuZXJhbCB0byB0YXJnZXQgZWZmZWN0aXZlbHkuCgpIb3dldmVyLCB0aGUgbW9yZSBwcm9taXNpbmcgYXZlbnVlcyBhcmUgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGBkZXZfY2hhbmdlX3hkcF9mZGAgYW5kIGBicGZfeGRwX2xpbmtfYXR0YWNoYCwgd2hpY2ggaW4gdHVybiwgY2FsbCBgZGV2X3hkcF9pbnN0YWxsYCBpbmRpcmVjdGx5IHRocm91Z2ggYGRldl94ZHBfYXR0YWNoYCBhbmQgYGRldl94ZHBfYXR0YWNoX2xpbmtgIHJlc3BlY3RpdmVseS4gVGhpcyBsb29rcyBsaWtlIGEgcHJhY3RpY2FsIHBhdGggdG8gZXhwbG9yZS4gRm9jdXNpbmcgb24gdGhlc2UgdHdvIHdpbGwgZWZmZWN0aXZlbHkgY292ZXIgdGhlIGV4ZWN1dGlvbiBwYXRocyB0aGF0IGxlYWQgdG8gYGRldl94ZHBfaW5zdGFsbGAuCgpOb3csIEkgc2hvdWxkIHNoaWZ0IG15IGF0dGVudGlvbiB0byB0aGUgY29uZmlndXJhdGlvbiBzaWRlLiBUaGUgdGVzdCBzdWl0ZSB1c2VzIGBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFlgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgbGlua2VkIHRvIHRoaXMgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMTkyPWVudW0gYnBmX3BlcmZfZXZlbnRfdHlwZSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEzMTAtXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTMxMTovKiBJZiBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkgaXMgdXNlZCBpbiBCUEZfUFJPR19MT0FEIGNvbW1hbmQsIHRoZSBsb2FkZWRcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMzEyLSAqIHByb2dyYW0gYmVjb21lcyBkZXZpY2UtYm91bmQgYnV0IGNhbiBhY2Nlc3MgWERQIG1ldGFkYXRhLlxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEzMTMtICovXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTMxNDojZGVmaW5lIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWVx0KDFVIFx1MDAzY1x1MDAzYyA2KVxuaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEzMTUtXG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmM9MjE5PWludCBicGZfcHJvZ19kZXZfYm91bmRfaW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIyNy1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIyODpcdGlmIChhdHRyLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IH4oQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZIHwgQlBGX0ZfWERQX0hBU19GUkFHUykpXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMjktXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIzNC1cdGlmIChhdHRyLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IEJQRl9GX1hEUF9IQVNfRlJBR1MgXHUwMDI2XHUwMDI2XG5rZXJuZWwvYnBmL29mZmxvYWQuYzoyMzU6XHQgICAgIShhdHRyLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSkpXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMzYtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTIzOC1cdGlmIChhdHRyLVx1MDAzZXByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyBcdTAwMjZcdTAwMjZcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIzOTpcdCAgICBhdHRyLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSlcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTI0MC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjQ5LVxua2VybmVsL2JwZi9vZmZsb2FkLmM6MjUwOlx0cHJvZy1cdTAwM2VhdXgtXHUwMDNlb2ZmbG9hZF9yZXF1ZXN0ZWQgPSAhKGF0dHItXHUwMDNlcHJvZ19mbGFncyBcdTAwMjYgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTI1MS1cbi0tXG5rZXJuZWwvYnBmL3N5c2NhbGwuYz0yOTA2PXN0YXRpYyBpbnQgYnBmX3Byb2dfbG9hZCh1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsIHN0cnVjdCBicGZfbG9nX2F0dHIgKmF0dHJfbG9nKVxuLS1cbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5MjUtXHRcdFx0XHQgQlBGX0ZfWERQX0hBU19GUkFHUyB8XG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyOTI2Olx0XHRcdFx0IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSB8XG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yOTI3LVx0XHRcdFx0IEJQRl9GX1RFU1RfUkVHX0lOVkFSSUFOVFMgfFxuLS1cbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYz0xNTY3PXN0YXRpYyBpbnQgbG9hZF93aXRoX29wdGlvbnMoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBib29sIGZpcnN0X3Byb2dfb25seSlcbi0tXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMTc3MS1cdFx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1hEUCBcdTAwMjZcdTAwMjYgeGRwbWV0YV9pZmluZGV4KSB7XG50b29scy9icGYvYnBmdG9vbC9wcm9nLmM6MTc3MjpcdFx0XHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHBvcywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbnRvb2xzL2JwZi9icGZ0b29sL3Byb2cuYy0xNzczLVx0XHRcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChwb3MsIHhkcG1ldGFfaWZpbmRleCk7XG4tLVxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTExOTI9ZW51bSBicGZfcGVyZl9ldmVudF90eXBlIHtcbi0tXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxMC1cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMzExOi8qIElmIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSBpcyB1c2VkIGluIEJQRl9QUk9HX0xPQUQgY29tbWFuZCwgdGhlIGxvYWRlZFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEzMTItICogcHJvZ3JhbSBiZWNvbWVzIGRldmljZS1ib3VuZCBidXQgY2FuIGFjY2VzcyBYRFAgbWV0YWRhdGEuXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxMy0gKi9cbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMzE0OiNkZWZpbmUgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZXHQoMVUgXHUwMDNjXHUwMDNjIDYpXG50b29scy9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxNS1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYz0xMD1zdGF0aWMgaW50IGxvYWRfZHVtbXlfcHJvZyhjaGFyICpuYW1lLCBfX3UzMiBpZmluZGV4LCBfX3UzMiBmbGFncylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYy0yMS0gKiAtIGNyZWF0ZSBhIHZldGggZGV2aWNlIChkb2VzIG5vdCBzdXBwb3J0IG9mZmxvYWQpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM6MjI6ICogLSBjcmVhdGUgYSBkZXZpY2UgYm91bmQgWERQIHByb2dyYW0gd2l0aCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkgZmxhZ1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmMtMjMtICogICAoc3VjaCBwcm9ncmFtcyBhcmUgbm90IG9mZmxvYWRlZCk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM9Mjc9dm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYy00My1cdH1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jOjQ0Olx0ZmQxID0gbG9hZF9kdW1teV9wcm9nKFwmIzM0O2R1bW15MVwmIzM0OywgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTQ1LVx0aWYgKCFBU1NFUlRfR0UoZmQxLCAwLCBcJiMzNDtsb2FkX2R1bW15X3Byb2cgIzFcJiMzNDspKSB7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM9NzE9dm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9saW5rX3VwZGF0ZSh2b2lkKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTg4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM6ODk6XHRkZXZib3VuZF9mZCA9IGxvYWRfZHVtbXlfcHJvZyhcJiMzNDtkZXZib3VuZFwmIzM0OywgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTkwLVx0aWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsIFwmIzM0O2xvYWRfZHVtbXlfcHJvZyBkZXZib3VuZFwmIzM0OykpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmM9MzQ5PXZvaWQgdGVzdF94ZHBfbWV0YWRhdGEodm9pZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTAtXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocHJvZywgcnhfaWZpbmRleCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYzo0MTE6XHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTItXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDE3LVx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KG5ld19wcm9nLCByeF9pZmluZGV4KTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jOjQxODpcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MobmV3X3Byb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTktXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jPTczNT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi94ZHBfaHdfbWV0YWRhdGEuYy04NDctXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocHJvZywgaWZpbmRleCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYveGRwX2h3X21ldGFkYXRhLmM6ODQ4Olx0YnBmX3Byb2dyYW1fX3NldF9mbGFncyhwcm9nLCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jLTg0OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg2NTQKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgWERQIEZ1enppbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZYCBpcyBqdXN0IGEgc2ltcGxlIGZsYWcsIG5vdGhpbmcgY29tcGxleCBjb25maWd1cmF0aW9uLXdpc2UuIFRoYXQmIzM5O3MgZ29vZC4gTm93LCBsZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBnZXQgYXdheSB3aXRoIGp1c3QgdGhlIHN0YW5kYXJkIGBDT05GSUdfTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgb3B0aW9ucy4gWWVwLCB0aG9zZSBhcmUgcHJldHR5IG11Y2ggZXhwZWN0ZWQgdG8gYmUgdGhlcmUsIHN0YW5kYXJkIHN0dWZmLgoKQWxyaWdodCwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIGdvdDoKCiogICAqKldvcnRoRnV6emluZyoqOiBUcnVlLCBkZWZpbml0ZWx5LgoqICAgKipGb2N1c1N5bWJvbHMqKjogYGJwZl9tcHJvZ19hdHRhY2hgLCBgZGV2X2NoYW5nZV94ZHBfZmRgLCBhbmQgYGJwZl94ZHBfbGlua19hdHRhY2hgLiBUaGVzZSBsb29rIGxpa2UgcHJpbWUgdGFyZ2V0cy4KKiAgICoqRW5hYmxlQ29uZmlncyoqOiBXZSYjMzk7bGwgbmVlZCBgQlBGX1NZU0NBTExgIGFuZCBgTkVUYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHJlYWxpdHkgY2hlY2sgb24gdGhlc2UgZm9jdXMgc3ltYm9scywgZXNwZWNpYWxseSBgYnBmX21wcm9nX2F0dGFjaGAuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIG5vdCBoaXR0aW5nIGhvdCBwYXRocy4gQWgsIGF0dGFjaGluZyBhIEJQRiBwcm9ncmFtLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgY29udHJvbCBwbGFuZSwgbm90IGRhdGEgcGxhbmUuIFNhbWUgZ29lcyBmb3IgYGRldl9jaGFuZ2VfeGRwX2ZkYCBhbmQgYGJwZl94ZHBfbGlua19hdHRhY2hgLiBHb29kLCB0aGVzZSBhcmUgYWxsIGNvbnRyb2wtcGxhbmUgb3BlcmF0aW9ucywgbm90IGluIHRoZSBkYXRhLXBhdGguCgpSaWdodCwgSSYjMzk7bSBzYXRpc2ZpZWQuIEkmIzM5O2xsIGxvY2sgaW4gdGhlc2UgcmVzdWx0cyBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Rldl9jaGFuZ2VfeGRwX2ZkJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcyBjb3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgYnlwYXNzaW5nIGNoZWNrcyBkdXJpbmcgbGluayB1cGRhdGVzLiBJdCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgaW50byBgZGV2X3hkcF9pbnN0YWxsYCBhbmQgYWRkcyBhIGNoZWNrIHRvIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AgdG8gcmVqZWN0IG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgbm9uLXN0YXRpYyBjb250cm9sLXBsYW5lIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgY2hlY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfbXByb2dfYXR0YWNoJiMzNDssCiAgICAmIzM0O2Rldl9jaGFuZ2VfeGRwX2ZkJiMzNDssCiAgICAmIzM0O2JwZl94ZHBfbGlua19hdHRhY2gmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcyBjb3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgYnlwYXNzaW5nIGNoZWNrcyBkdXJpbmcgbGluayB1cGRhdGVzLiBJdCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgaW50byBgZGV2X3hkcF9pbnN0YWxsYCBhbmQgYWRkcyBhIGNoZWNrIHRvIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AgdG8gcmVqZWN0IG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgbm9uLXN0YXRpYyBjb250cm9sLXBsYW5lIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgY2hlY2tzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwNTo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcmVqZWN0IGludmFsaWQgQlBGIHByb2dyYW0gYXR0YWNobWVudHMgKGUuZy4sIGRldmljZS1ib3VuZCBvciBvZmZsb2FkZWQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlIG9yIFNDSEVEX0NMUykuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb250cm9sIGZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFsbG9jYXRlIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBtaXNzaW5nIHRoZXNlIGNoZWNrcyB3b3VsZCBtYW5pZmVzdCBhcyBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmNvcnJlY3QgYmVoYXZpb3IsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiZjMzMGQ3MWY4MjU2ODYzZTI3NzU3ZjBkMTg3Y2ViOGI1NzZhODcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAwNTo1Mjo0OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbXByb2cuYyBiL2tlcm5lbC9icGYvbXByb2cuYwppbmRleCAxMzk0MTY4MDYyZTg1Li4wYjUwNDY0ZWM5MDJkIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL21wcm9nLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tcHJvZy5jCkBAIC0yMjIsNiAmIzQzOzIyMiwxNCBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wb3NfYWZ0ZXIoc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksCiAJcmV0dXJuIHR1cGxlLSZndDtwcm9nID8gLUVOT0VOVCA6IGJwZl9tcHJvZ190b3RhbChlbnRyeSk7CiB9CiAKJiM0MztzdGF0aWMgaW50IGJwZl9tcHJvZ19jaGVja19wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTICZhbXA7JmFtcDsKJiM0MzsJICAgIGJwZl9wcm9nX2lzX29mZmxvYWRlZChwcm9nLSZndDthdXgpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LAogCQkgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsCiAJCSAgICAgc3RydWN0IGJwZl9wcm9nICpwcm9nX25ldywgc3RydWN0IGJwZl9saW5rICpsaW5rLApAQCAtMjM3LDYgJiM0MzsyNDUsOSBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSwKIAl9OwogCWludCByZXQsIGlkeCA9IC1FUkFOR0UsIHRpZHg7CiAKJiM0MzsJcmV0ID0gYnBmX21wcm9nX2NoZWNrX3Byb2cocHJvZ19uZXcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKIAlpZiAocmV2aXNpb24gJmFtcDsmYW1wOyByZXZpc2lvbiAhPSBicGZfbXByb2dfcmV2aXNpb24oZW50cnkpKQogCQlyZXR1cm4gLUVTVEFMRTsKIAlpZiAoYnBmX21wcm9nX2V4aXN0cyhlbnRyeSwgcHJvZ19uZXcpKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCBhZjI2MGZmNTQ2MmE2Li4zMjgxZjIyNmMxZTUyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtMTAzMjksNiAmIzQzOzEwMzI5LDIxIEBAIHN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsCiAKIAluZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7CiAKJiM0MzsJaWYgKHByb2cpIHsKJiM0MzsJCWlmIChtb2RlICE9IFhEUF9NT0RFX0hXICZhbXA7JmFtcDsgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctJmd0O2F1eCkpIHsKJiM0MzsJCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7VXNpbmcgb2ZmbG9hZGVkIHByb2dyYW0gd2l0aG91dCBIV19NT0RFIGZsYWcgaXMgbm90IHN1cHBvcnRlZCYjMzQ7KTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy0mZ3Q7YXV4KSAmYW1wOyZhbXA7ICFicGZfb2ZmbG9hZF9kZXZfbWF0Y2gocHJvZywgZGV2KSkgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtQcm9ncmFtIGJvdW5kIHRvIGRpZmZlcmVudCBkZXZpY2UmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKHByb2ctJmd0O2F1eCkgJmFtcDsmYW1wOyBtb2RlID09IFhEUF9NT0RFX1NLQikgewomIzQzOwkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtDYW4mIzM5O3QgYXR0YWNoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGUmIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZGV2LSZndDtjZmctJmd0O2hkc19jb25maWcgPT0gRVRIVE9PTF9UQ1BfREFUQV9TUExJVF9FTkFCTEVEICZhbXA7JmFtcDsKIAkgICAgcHJvZyAmYW1wOyZhbXA7ICFwcm9nLSZndDthdXgtJmd0O3hkcF9oYXNfZnJhZ3MpIHsKIAkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O3VuYWJsZSB0byBpbnN0YWxsIFhEUCB0byBkZXZpY2UgdXNpbmcgdGNwLWRhdGEtc3BsaXQmIzM0Oyk7CkBAIC0xMDQ4MCwxOCAmIzQzOzEwNDk1LDYgQEAgc3RhdGljIGludCBkZXZfeGRwX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2sKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtOYXRpdmUgYW5kIGdlbmVyaWMgWERQIGNhbiYjMzk7dCBiZSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZSYjMzQ7KTsKIAkJCXJldHVybiAtRUVYSVNUOwogCQl9Ci0JCWlmICghb2ZmbG9hZCAmYW1wOyZhbXA7IGJwZl9wcm9nX2lzX29mZmxvYWRlZChuZXdfcHJvZy0mZ3Q7YXV4KSkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O1VzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQmIzM0Oyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLSZndDthdXgpICZhbXA7JmFtcDsgIWJwZl9vZmZsb2FkX2Rldl9tYXRjaChuZXdfcHJvZywgZGV2KSkgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O1Byb2dyYW0gYm91bmQgdG8gZGlmZmVyZW50IGRldmljZSYjMzQ7KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChicGZfcHJvZ19pc19kZXZfYm91bmQobmV3X3Byb2ctJmd0O2F1eCkgJmFtcDsmYW1wOyBtb2RlID09IFhEUF9NT0RFX1NLQikgewotCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0NhbiYjMzk7dCBhdHRhY2ggZGV2aWNlLWJvdW5kIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZSYjMzQ7KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CiAJCWlmIChuZXdfcHJvZy0mZ3Q7ZXhwZWN0ZWRfYXR0YWNoX3R5cGUgPT0gQlBGX1hEUF9ERVZNQVApIHsKIAkJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtCUEZfWERQX0RFVk1BUCBwcm9ncmFtcyBjYW4gbm90IGJlIGF0dGFjaGVkIHRvIGEgZGV2aWNlJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCmluZGV4IDdkZDE4YzZkMDZjNjAuLjRhMTNmOGVjNDMwMDkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jCkBAIC0xLDkgJiM0MzsxLDExIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogI2luY2x1ZGUgJmx0O25ldC9pZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9saW5rLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldHdvcmtfaGVscGVycy5oJmd0OwogCiAjZGVmaW5lIExPQ0FMX05FVE5TICYjMzQ7eGRwX2Rldl9ib3VuZF9vbmx5X25ldG5zJiMzNDsKJiM0MzsjZGVmaW5lIExJTktfVVBEQVRFX05FVE5TICYjMzQ7eGRwX2Rldl9ib3VuZF9vbmx5X2x1X25ldG5zJiMzNDsKIAogc3RhdGljIGludCBsb2FkX2R1bW15X3Byb2coY2hhciAqbmFtZSwgX191MzIgaWZpbmRleCwgX191MzIgZmxhZ3MpCiB7CkBAIC01OSwzICYjNDM7NjEsNTAgQEAgdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZCkKIAkgKi8KIAlTWVNfTk9GQUlMKCYjMzQ7aXAgbmV0bnMgZGVsICYjMzQ7IExPQ0FMX05FVE5TKTsKIH0KJiM0MzsKJiM0MzsvKiBBIGRldmljZS1ib3VuZCBwcm9ncmFtIG11c3Qgbm90IHJ1biBvbiB0aGUgWERQIHNvZnR3YXJlIHBhdGguCiYjNDM7ICogZGV2X3hkcF9hdHRhY2goKSByZWplY3RlZCBzdWNoIHByb2dyYW1zLCBidXQgYnBmX3hkcF9saW5rX3VwZGF0ZSgpIHJlYWNoZXMKJiM0MzsgKiBkZXZfeGRwX2luc3RhbGwoKSBkaXJlY3RseSBhbmQgYnlwYXNzZXMgaXQsIHNvIHRoZSBjaGVjayBoYXMgdG8gbGl2ZSBpbgomIzQzOyAqIGRldl94ZHBfaW5zdGFsbCgpLiBDcmVhdGUgYSBnZW5lcmljIChTS0IpIFhEUCBsaW5rIHdpdGggYSBub3JtYWwgcHJvZ3JhbSwKJiM0MzsgKiB0aGVuIHRyeSB0byBzd2FwIGluIGEgZGV2aWNlLWJvdW5kIHByb2dyYW0gdmlhIEJQRl9MSU5LX1VQREFURS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHRlc3RfeGRwX2Rldl9ib3VuZF9vbmx5X2xpbmtfdXBkYXRlKHZvaWQpCiYjNDM7ewomIzQzOwlMSUJCUEZfT1BUUyhicGZfbGlua19jcmVhdGVfb3B0cywgbG9wdHMsIC5mbGFncyA9IFhEUF9GTEFHU19TS0JfTU9ERSk7CiYjNDM7CWludCBiYXNlX2ZkID0gLTEsIGRldmJvdW5kX2ZkID0gLTEsIGxpbmtfZmQgPSAtMTsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKnRvayA9IE5VTEw7CiYjNDM7CV9fdTMyIGlmaW5kZXg7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CVNZUyhvdXQsICYjMzQ7aXAgbmV0bnMgYWRkICYjMzQ7IExJTktfVVBEQVRFX05FVE5TKTsKJiM0MzsJdG9rID0gb3Blbl9uZXRucyhMSU5LX1VQREFURV9ORVROUyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUih0b2ssICYjMzQ7b3Blbl9uZXRucyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlTWVMob3V0LCAmIzM0O2lwIGxpbmsgYWRkIGV0aDQyIHR5cGUgdmV0aCYjMzQ7KTsKJiM0MzsJaWZpbmRleCA9IGlmX25hbWV0b2luZGV4KCYjMzQ7ZXRoNDImIzM0Oyk7CiYjNDM7CWlmICghQVNTRVJUX05FUShpZmluZGV4LCAwLCAmIzM0O2lmX25hbWV0b2luZGV4JiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWRldmJvdW5kX2ZkID0gbG9hZF9kdW1teV9wcm9nKCYjMzQ7ZGV2Ym91bmQmIzM0OywgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTsKJiM0MzsJaWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsICYjMzQ7bG9hZF9kdW1teV9wcm9nIGRldmJvdW5kJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWJhc2VfZmQgPSBsb2FkX2R1bW15X3Byb2coJiMzNDtiYXNlJiMzNDssIDAsIDApOwomIzQzOwlpZiAoIUFTU0VSVF9HRShiYXNlX2ZkLCAwLCAmIzM0O2xvYWRfZHVtbXlfcHJvZyBiYXNlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWxpbmtfZmQgPSBicGZfbGlua19jcmVhdGUoYmFzZV9mZCwgaWZpbmRleCwgQlBGX1hEUCwgJmFtcDtsb3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX0dFKGxpbmtfZmQsIDAsICYjMzQ7YnBmX2xpbmtfY3JlYXRlJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWVyciA9IGJwZl9saW5rX3VwZGF0ZShsaW5rX2ZkLCBkZXZib3VuZF9mZCwgTlVMTCk7CiYjNDM7CUFTU0VSVF9FUShlcnIsIC1FSU5WQUwsICYjMzQ7bGlua191cGRhdGUgZGV2aWNlLWJvdW5kIHJlamVjdGVkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJY2xvc2UobGlua19mZCk7CiYjNDM7CWNsb3NlKGJhc2VfZmQpOwomIzQzOwljbG9zZShkZXZib3VuZF9mZCk7CiYjNDM7CWNsb3NlX25ldG5zKHRvayk7CiYjNDM7CVNZU19OT0ZBSUwoJiMzNDtpcCBuZXRucyBkZWwgJiMzNDsgTElOS19VUERBVEVfTkVUTlMpOwomIzQzO30KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMjYKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogNTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc21lbnQgb2YgQlBGIFByb2dyYW0gQXR0YWNobWVudCBDb250cm9sIEZsb3cgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSByZXZpZXdlZCB0aGVzZSBjaGFuZ2VzIGFuZCBJJiMzOTttIHNlZWluZyB0aGF0IHRoZXkmIzM5O3JlIHByaW1hcmlseSBmb2N1c2VkIG9uIHJlaW5mb3JjaW5nIGNvbnRyb2wgZmxvdyBmb3IgQlBGIHByb2dyYW0gYXR0YWNobWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY29uY2VudHJhdGVkIGluIGBrZXJuZWwvYnBmL21wcm9nLmNgIGFuZCBgbmV0L2NvcmUvZGV2LmNgLCBhZGRpbmcgZXhwbGljaXQgY2hlY2tzIHRvIHZhbGlkYXRlIG9mZmxvYWRlZCBhbmQgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcy4KCkluIGBrZXJuZWwvYnBmL21wcm9nLmNgLCBhIGNoZWNrIGhhcyBiZWVuIGFkZGVkIHdpdGhpbiBgYnBmX21wcm9nX2NoZWNrX3Byb2coKWAgdG8gcHJldmVudCBhdHRhY2hpbmcgb2ZmbG9hZGVkIHByb2dyYW1zIG9mIHR5cGUgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLgoKVGhlIG1vcmUgc2lnbmlmaWNhbnQgY2hhbmdlcyBhcHBlYXIgaW4gYG5ldC9jb3JlL2Rldi5jYCwgd2hlcmUgYXR0YWNobWVudCBjaGVja3MgaGF2ZSBiZWVuIG1vdmVkIGZyb20gYGRldl94ZHBfYXR0YWNoYCB0byBgZGV2X3hkcF9pbnN0YWxsYC4gVGhpcyBtb3ZlIGVuc3VyZXMgdGhhdCB0aGUgY2hlY2tzIGFyZSBhbHdheXMgcGVyZm9ybWVkLCBldmVuIHdoZW4gdGhlIGBicGZfeGRwX2xpbmtfdXBkYXRlKClgIGZ1bmN0aW9uIGRpcmVjdGx5IGNhbGxzIGBkZXZfeGRwX2luc3RhbGwoKWAuIEhlcmUsIHdlIHNlZSB0aHJlZSBrZXkgdmFsaWRhdGlvbiBjaGVja3M6ICgxKSBpZiBhbiBvZmZsb2FkZWQgcHJvZ3JhbSBpcyBiZWluZyB1c2VkIHdpdGhvdXQgdGhlIGBIV19NT0RFYCBmbGFnLCBpdCYjMzk7cyByZWplY3RlZDsgKDIpIGlmIHRoZSBwcm9ncmFtIGlzIGRldmljZS1ib3VuZCBidXQgZG9lc24mIzM5O3QgbWF0Y2ggdGhlIHRhcmdldCBkZXZpY2UsIGl0JiMzOTtzIHJlamVjdGVkOyBhbmQgKDMpIGRldmljZS1ib3VuZCBwcm9ncmFtcyBhcmUgbm90IGFsbG93ZWQgaW4gYFhEUF9NT0RFX1NLQmAgKGdlbmVyaWMgbW9kZSkuCgpDb25zaWRlcmluZyB0aGVzZSBjaGFuZ2VzIGFzIGEgd2hvbGUsIGl0JiMzOTtzIGNsZWFyIHRoYXQgdGhlIGFpbSBpcyB0byBwcm9hY3RpdmVseSBwcmV2ZW50IHBvdGVudGlhbGx5IGludmFsaWQgb3IgcHJvYmxlbWF0aWMgQlBGIHByb2dyYW0gY29uZmlndXJhdGlvbnMuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGd1YXJkaW5nIGFnYWluc3QgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMsIGluY29ycmVjdCBiZWhhdmlvciwgb3IgZXZlbiBzdWJ0bGUgaXNzdWVzLiBUaGVzZSBjaGVja3MgYXJlIGVudGlyZWx5IGZvY3VzZWQgb24gY29udHJvbCBmbG93OyB0aGVyZSBhcmUgbm8gaW50cm9kdWN0aW9ucyBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZSwgbm8gY29tcGxleCBhbGxvY2F0aW9ucyB0aGF0IG1pZ2h0IHByZXNlbnQgbWVtb3J5IG1hbmFnZW1lbnQgcmlza3MsIGFuZCBjcml0aWNhbGx5LCBubyBvYnZpb3VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUgYmVpbmcgYWRkcmVzc2VkIOKAkyBsaWtlbHkgYW4gaW52YWxpZCBjb25maWd1cmF0aW9uIG9yIGEgY3Jhc2ggZHVlIHRvIGEgc29mdHdhcmUgZXhlY3V0aW9uIG9mIGEgZGV2aWNlLWJvdW5kIHByb2dyYW0g4oCTIEkgZG9uJiMzOTt0IHNlZSBhbnkgY29tcGVsbGluZyBuZWVkIHRvIHVzZSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpLiBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSBhbmQgdGhlIHN0YW5kYXJkIGtlcm5lbCBjaGVja3Mgc2hvdWxkIGJlIGVudGlyZWx5IHN1ZmZpY2llbnQgZm9yIGlkZW50aWZ5aW5nIGFueSBwcm9ibGVtcyB0aGF0IGNvdWxkIGFyaXNlIGZyb20gdGhlc2UgY2hhbmdlcy4gVGhlIGZvY3VzIGhlcmUgaXMgb24gcnVudGltZSB2YWxpZGF0aW9uLCByYXRoZXIgdGhhbiBkZWVwIG1lbW9yeSBpbnRlZ3JpdHksIHNvIEtNU0FOIHNlZW1zIGxpa2Ugb3ZlcmtpbGwgaW4gdGhpcyBpbnN0YW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byByZWplY3QgaW52YWxpZCBCUEYgcHJvZ3JhbSBhdHRhY2htZW50cyAoZS5nLiwgZGV2aWNlLWJvdW5kIG9yIG9mZmxvYWRlZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGUgb3IgU0NIRURfQ0xTKS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGNvbnRyb2wgZmxvdyBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkbyBub3QgYWxsb2NhdGUgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgYW5kIGRvIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgYnVncyByZWxhdGVkIHRvIG1pc3NpbmcgdGhlc2UgY2hlY2tzIHdvdWxkIG1hbmlmZXN0IGFzIGNyYXNoZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGluY29ycmVjdCBiZWhhdmlvciwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcmVqZWN0IGludmFsaWQgQlBGIHByb2dyYW0gYXR0YWNobWVudHMgKGUuZy4sIGRldmljZS1ib3VuZCBvciBvZmZsb2FkZWQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlIG9yIFNDSEVEX0NMUykuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb250cm9sIGZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFsbG9jYXRlIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBtaXNzaW5nIHRoZXNlIGNoZWNrcyB3b3VsZCBtYW5pZmVzdCBhcyBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmNvcnJlY3QgYmVoYXZpb3IsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjUyOjUwLjc1ODM2NDIzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTAyNTcxMjMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX21wcm9nX2F0dGFjaFwiLFxuICAgIFwiZGV2X2NoYW5nZV94ZHBfZmRcIixcbiAgICBcImJwZl94ZHBfbGlua19hdHRhY2hcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcmVqZWN0IGludmFsaWQgQlBGIHByb2dyYW0gYXR0YWNobWVudHMgKGUuZy4sIGRldmljZS1ib3VuZCBvciBvZmZsb2FkZWQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlIG9yIFNDSEVEX0NMUykuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb250cm9sIGZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFsbG9jYXRlIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBtaXNzaW5nIHRoZXNlIGNoZWNrcyB3b3VsZCBtYW5pZmVzdCBhcyBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmNvcnJlY3QgYmVoYXZpb3IsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcyBjb3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgYnlwYXNzaW5nIGNoZWNrcyBkdXJpbmcgbGluayB1cGRhdGVzLiBJdCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgaW50byBgZGV2X3hkcF9pbnN0YWxsYCBhbmQgYWRkcyBhIGNoZWNrIHRvIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AgdG8gcmVqZWN0IG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgbm9uLXN0YXRpYyBjb250cm9sLXBsYW5lIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1Mjo1MC43NTgzNjk2MTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MTE5MDk1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBiZjMzMGQ3MWY4MjU2ODYzZTI3NzU3ZjBkMTg3Y2ViOGI1NzZhODdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDU6NTI6NDkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tcHJvZy5jIGIva2VybmVsL2JwZi9tcHJvZy5jXFxuaW5kZXggMTM5NDE2ODA2MmU4NS4uMGI1MDQ2NGVjOTAyZCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcXG4rKysgYi9rZXJuZWwvYnBmL21wcm9nLmNcXG5AQCAtMjIyLDYgKzIyMiwxNCBAQCBzdGF0aWMgaW50IGJwZl9tcHJvZ19wb3NfYWZ0ZXIoc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdHJldHVybiB0dXBsZS1cXHUwMDNlcHJvZyA/IC1FTk9FTlQgOiBicGZfbXByb2dfdG90YWwoZW50cnkpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGJwZl9tcHJvZ19jaGVja19wcm9nKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4re1xcbitcXHRpZiAocHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctXFx1MDAzZWF1eCkpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxuIFxcdFxcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcXG4gXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXFxuQEAgLTIzNyw2ICsyNDUsOSBAQCBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcXG4gXFx0fTtcXG4gXFx0aW50IHJldCwgaWR4ID0gLUVSQU5HRSwgdGlkeDtcXG4gXFxuK1xcdHJldCA9IGJwZl9tcHJvZ19jaGVja19wcm9nKHByb2dfbmV3KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0aWYgKHJldmlzaW9uIFxcdTAwMjZcXHUwMDI2IHJldmlzaW9uICE9IGJwZl9tcHJvZ19yZXZpc2lvbihlbnRyeSkpXFxuIFxcdFxcdHJldHVybiAtRVNUQUxFO1xcbiBcXHRpZiAoYnBmX21wcm9nX2V4aXN0cyhlbnRyeSwgcHJvZ19uZXcpKVxcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXFxuaW5kZXggYWYyNjBmZjU0NjJhNi4uMzI4MWYyMjZjMWU1MiAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTEwMzI5LDYgKzEwMzI5LDIxIEBAIHN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsXFxuIFxcbiBcXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7XFxuIFxcbitcXHRpZiAocHJvZykge1xcbitcXHRcXHRpZiAobW9kZSAhPSBYRFBfTU9ERV9IVyBcXHUwMDI2XFx1MDAyNiBicGZfcHJvZ19pc19vZmZsb2FkZWQocHJvZy1cXHUwMDNlYXV4KSkge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJVc2luZyBvZmZsb2FkZWQgcHJvZ3JhbSB3aXRob3V0IEhXX01PREUgZmxhZyBpcyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cXHUwMDNlYXV4KSBcXHUwMDI2XFx1MDAyNiAhYnBmX29mZmxvYWRfZGV2X21hdGNoKHByb2csIGRldikpIHtcXG4rXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUHJvZ3JhbSBib3VuZCB0byBkaWZmZXJlbnQgZGV2aWNlXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cXHUwMDNlYXV4KSBcXHUwMDI2XFx1MDAyNiBtb2RlID09IFhEUF9NT0RFX1NLQikge1xcbitcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDYW4ndCBhdHRhY2ggZGV2aWNlLWJvdW5kIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZVxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRpZiAoZGV2LVxcdTAwM2VjZmctXFx1MDAzZWhkc19jb25maWcgPT0gRVRIVE9PTF9UQ1BfREFUQV9TUExJVF9FTkFCTEVEIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBwcm9nIFxcdTAwMjZcXHUwMDI2ICFwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZXhkcF9oYXNfZnJhZ3MpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwidW5hYmxlIHRvIGluc3RhbGwgWERQIHRvIGRldmljZSB1c2luZyB0Y3AtZGF0YS1zcGxpdFxcXCIpO1xcbkBAIC0xMDQ4MCwxOCArMTA0OTUsNiBAQCBzdGF0aWMgaW50IGRldl94ZHBfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJOYXRpdmUgYW5kIGdlbmVyaWMgWERQIGNhbid0IGJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmICghb2ZmbG9hZCBcXHUwMDI2XFx1MDAyNiBicGZfcHJvZ19pc19vZmZsb2FkZWQobmV3X3Byb2ctXFx1MDAzZWF1eCkpIHtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiVXNpbmcgb2ZmbG9hZGVkIHByb2dyYW0gd2l0aG91dCBIV19NT0RFIGZsYWcgaXMgbm90IHN1cHBvcnRlZFxcXCIpO1xcbi1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLVxcdTAwM2VhdXgpIFxcdTAwMjZcXHUwMDI2ICFicGZfb2ZmbG9hZF9kZXZfbWF0Y2gobmV3X3Byb2csIGRldikpIHtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUHJvZ3JhbSBib3VuZCB0byBkaWZmZXJlbnQgZGV2aWNlXFxcIik7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQobmV3X3Byb2ctXFx1MDAzZWF1eCkgXFx1MDAyNlxcdTAwMjYgbW9kZSA9PSBYRFBfTU9ERV9TS0IpIHtcXG4tXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2FuJ3QgYXR0YWNoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGVcXFwiKTtcXG4tXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcdFxcdH1cXG4gXFx0XFx0aWYgKG5ld19wcm9nLVxcdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfWERQX0RFVk1BUCkge1xcbiBcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJCUEZfWERQX0RFVk1BUCBwcm9ncmFtcyBjYW4gbm90IGJlIGF0dGFjaGVkIHRvIGEgZGV2aWNlXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jXFxuaW5kZXggN2RkMThjNmQwNmM2MC4uNGExM2Y4ZWM0MzAwOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jXFxuQEAgLTEsOSArMSwxMSBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9saW5rLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFxcdTAwM2VcXG4gXFxuICNkZWZpbmUgTE9DQUxfTkVUTlMgXFxcInhkcF9kZXZfYm91bmRfb25seV9uZXRuc1xcXCJcXG4rI2RlZmluZSBMSU5LX1VQREFURV9ORVROUyBcXFwieGRwX2Rldl9ib3VuZF9vbmx5X2x1X25ldG5zXFxcIlxcbiBcXG4gc3RhdGljIGludCBsb2FkX2R1bW15X3Byb2coY2hhciAqbmFtZSwgX191MzIgaWZpbmRleCwgX191MzIgZmxhZ3MpXFxuIHtcXG5AQCAtNTksMyArNjEsNTAgQEAgdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZClcXG4gXFx0ICovXFxuIFxcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIExPQ0FMX05FVE5TKTtcXG4gfVxcbitcXG4rLyogQSBkZXZpY2UtYm91bmQgcHJvZ3JhbSBtdXN0IG5vdCBydW4gb24gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoLlxcbisgKiBkZXZfeGRwX2F0dGFjaCgpIHJlamVjdGVkIHN1Y2ggcHJvZ3JhbXMsIGJ1dCBicGZfeGRwX2xpbmtfdXBkYXRlKCkgcmVhY2hlc1xcbisgKiBkZXZfeGRwX2luc3RhbGwoKSBkaXJlY3RseSBhbmQgYnlwYXNzZXMgaXQsIHNvIHRoZSBjaGVjayBoYXMgdG8gbGl2ZSBpblxcbisgKiBkZXZfeGRwX2luc3RhbGwoKS4gQ3JlYXRlIGEgZ2VuZXJpYyAoU0tCKSBYRFAgbGluayB3aXRoIGEgbm9ybWFsIHByb2dyYW0sXFxuKyAqIHRoZW4gdHJ5IHRvIHN3YXAgaW4gYSBkZXZpY2UtYm91bmQgcHJvZ3JhbSB2aWEgQlBGX0xJTktfVVBEQVRFLlxcbisgKi9cXG4rdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9saW5rX3VwZGF0ZSh2b2lkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl9saW5rX2NyZWF0ZV9vcHRzLCBsb3B0cywgLmZsYWdzID0gWERQX0ZMQUdTX1NLQl9NT0RFKTtcXG4rXFx0aW50IGJhc2VfZmQgPSAtMSwgZGV2Ym91bmRfZmQgPSAtMSwgbGlua19mZCA9IC0xO1xcbitcXHRzdHJ1Y3QgbnN0b2tlbiAqdG9rID0gTlVMTDtcXG4rXFx0X191MzIgaWZpbmRleDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdFNZUyhvdXQsIFxcXCJpcCBuZXRucyBhZGQgXFxcIiBMSU5LX1VQREFURV9ORVROUyk7XFxuK1xcdHRvayA9IG9wZW5fbmV0bnMoTElOS19VUERBVEVfTkVUTlMpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIodG9rLCBcXFwib3Blbl9uZXRuc1xcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFNZUyhvdXQsIFxcXCJpcCBsaW5rIGFkZCBldGg0MiB0eXBlIHZldGhcXFwiKTtcXG4rXFx0aWZpbmRleCA9IGlmX25hbWV0b2luZGV4KFxcXCJldGg0MlxcXCIpO1xcbitcXHRpZiAoIUFTU0VSVF9ORVEoaWZpbmRleCwgMCwgXFxcImlmX25hbWV0b2luZGV4XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0ZGV2Ym91bmRfZmQgPSBsb2FkX2R1bW15X3Byb2coXFxcImRldmJvdW5kXFxcIiwgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsIFxcXCJsb2FkX2R1bW15X3Byb2cgZGV2Ym91bmRcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRiYXNlX2ZkID0gbG9hZF9kdW1teV9wcm9nKFxcXCJiYXNlXFxcIiwgMCwgMCk7XFxuK1xcdGlmICghQVNTRVJUX0dFKGJhc2VfZmQsIDAsIFxcXCJsb2FkX2R1bW15X3Byb2cgYmFzZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGxpbmtfZmQgPSBicGZfbGlua19jcmVhdGUoYmFzZV9mZCwgaWZpbmRleCwgQlBGX1hEUCwgXFx1MDAyNmxvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfR0UobGlua19mZCwgMCwgXFxcImJwZl9saW5rX2NyZWF0ZVxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGVyciA9IGJwZl9saW5rX3VwZGF0ZShsaW5rX2ZkLCBkZXZib3VuZF9mZCwgTlVMTCk7XFxuK1xcdEFTU0VSVF9FUShlcnIsIC1FSU5WQUwsIFxcXCJsaW5rX3VwZGF0ZSBkZXZpY2UtYm91bmQgcmVqZWN0ZWRcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0Y2xvc2UobGlua19mZCk7XFxuK1xcdGNsb3NlKGJhc2VfZmQpO1xcbitcXHRjbG9zZShkZXZib3VuZF9mZCk7XFxuK1xcdGNsb3NlX25ldG5zKHRvayk7XFxuK1xcdFNZU19OT0ZBSUwoXFxcImlwIG5ldG5zIGRlbCBcXFwiIExJTktfVVBEQVRFX05FVE5TKTtcXG4rfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1Mjo1MS4zMTAzNzY5MDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0Mjg2MzU1Mzk2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tcHJvZ19hdHRhY2hcIixcbiAgICBcImRldl9jaGFuZ2VfeGRwX2ZkXCIsXG4gICAgXCJicGZfeGRwX2xpbmtfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcyBjb3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgYnlwYXNzaW5nIGNoZWNrcyBkdXJpbmcgbGluayB1cGRhdGVzLiBJdCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgaW50byBgZGV2X3hkcF9pbnN0YWxsYCBhbmQgYWRkcyBhIGNoZWNrIHRvIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AgdG8gcmVqZWN0IG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgbm9uLXN0YXRpYyBjb250cm9sLXBsYW5lIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwYmYzMzBkNzFmODI1Njg2M2UyNzc1N2YwZDE4N2NlYjhiNTc2YTg3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDU6NTI6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21wcm9nLmMgYi9rZXJuZWwvYnBmL21wcm9nLmNcbmluZGV4IDEzOTQxNjgwNjJlODUuLjBiNTA0NjRlYzkwMmQgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21wcm9nLmNcbisrKyBiL2tlcm5lbC9icGYvbXByb2cuY1xuQEAgLTIyMiw2ICsyMjIsMTQgQEAgc3RhdGljIGludCBicGZfbXByb2dfcG9zX2FmdGVyKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0cmV0dXJuIHR1cGxlLVx1MDAzZXByb2cgPyAtRU5PRU5UIDogYnBmX21wcm9nX3RvdGFsKGVudHJ5KTtcbiB9XG4gXG4rc3RhdGljIGludCBicGZfbXByb2dfY2hlY2tfcHJvZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4re1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyBcdTAwMjZcdTAwMjZcbitcdCAgICBicGZfcHJvZ19pc19vZmZsb2FkZWQocHJvZy1cdTAwM2VhdXgpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdHJldHVybiAwO1xuK31cbitcbiBpbnQgYnBmX21wcm9nX2F0dGFjaChzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxuIFx0XHQgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZ19uZXcsIHN0cnVjdCBicGZfbGluayAqbGluayxcbkBAIC0yMzcsNiArMjQ1LDkgQEAgaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHR9O1xuIFx0aW50IHJldCwgaWR4ID0gLUVSQU5HRSwgdGlkeDtcbiBcbitcdHJldCA9IGJwZl9tcHJvZ19jaGVja19wcm9nKHByb2dfbmV3KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4gXHRpZiAocmV2aXNpb24gXHUwMDI2XHUwMDI2IHJldmlzaW9uICE9IGJwZl9tcHJvZ19yZXZpc2lvbihlbnRyeSkpXG4gXHRcdHJldHVybiAtRVNUQUxFO1xuIFx0aWYgKGJwZl9tcHJvZ19leGlzdHMoZW50cnksIHByb2dfbmV3KSlcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBhZjI2MGZmNTQ2MmE2Li4zMjgxZjIyNmMxZTUyIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtMTAzMjksNiArMTAzMjksMjEgQEAgc3RhdGljIGludCBkZXZfeGRwX2luc3RhbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBicGZfeGRwX21vZGUgbW9kZSxcbiBcbiBcdG5ldGRldl9hc3NlcnRfbG9ja2VkX29wc19jb21wYXQoZGV2KTtcbiBcbitcdGlmIChwcm9nKSB7XG4rXHRcdGlmIChtb2RlICE9IFhEUF9NT0RFX0hXIFx1MDAyNlx1MDAyNiBicGZfcHJvZ19pc19vZmZsb2FkZWQocHJvZy1cdTAwM2VhdXgpKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlVzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdFx0aWYgKGJwZl9wcm9nX2lzX2Rldl9ib3VuZChwcm9nLVx1MDAzZWF1eCkgXHUwMDI2XHUwMDI2ICFicGZfb2ZmbG9hZF9kZXZfbWF0Y2gocHJvZywgZGV2KSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJQcm9ncmFtIGJvdW5kIHRvIGRpZmZlcmVudCBkZXZpY2VcIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdFx0aWYgKGJwZl9wcm9nX2lzX2Rldl9ib3VuZChwcm9nLVx1MDAzZWF1eCkgXHUwMDI2XHUwMDI2IG1vZGUgPT0gWERQX01PREVfU0tCKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkNhbid0IGF0dGFjaCBkZXZpY2UtYm91bmQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRpZiAoZGV2LVx1MDAzZWNmZy1cdTAwM2VoZHNfY29uZmlnID09IEVUSFRPT0xfVENQX0RBVEFfU1BMSVRfRU5BQkxFRCBcdTAwMjZcdTAwMjZcbiBcdCAgICBwcm9nIFx1MDAyNlx1MDAyNiAhcHJvZy1cdTAwM2VhdXgtXHUwMDNleGRwX2hhc19mcmFncykge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwidW5hYmxlIHRvIGluc3RhbGwgWERQIHRvIGRldmljZSB1c2luZyB0Y3AtZGF0YS1zcGxpdFwiKTtcbkBAIC0xMDQ4MCwxOCArMTA0OTUsNiBAQCBzdGF0aWMgaW50IGRldl94ZHBfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFja1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJOYXRpdmUgYW5kIGdlbmVyaWMgWERQIGNhbid0IGJlIGFjdGl2ZSBhdCB0aGUgc2FtZSB0aW1lXCIpO1xuIFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIFx0XHR9XG4tXHRcdGlmICghb2ZmbG9hZCBcdTAwMjZcdTAwMjYgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKG5ld19wcm9nLVx1MDAzZWF1eCkpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiVXNpbmcgb2ZmbG9hZGVkIHByb2dyYW0gd2l0aG91dCBIV19NT0RFIGZsYWcgaXMgbm90IHN1cHBvcnRlZFwiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0XHRpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLVx1MDAzZWF1eCkgXHUwMDI2XHUwMDI2ICFicGZfb2ZmbG9hZF9kZXZfbWF0Y2gobmV3X3Byb2csIGRldikpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiUHJvZ3JhbSBib3VuZCB0byBkaWZmZXJlbnQgZGV2aWNlXCIpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4tXHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQobmV3X3Byb2ctXHUwMDNlYXV4KSBcdTAwMjZcdTAwMjYgbW9kZSA9PSBYRFBfTU9ERV9TS0IpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiQ2FuJ3QgYXR0YWNoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGVcIik7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbiBcdFx0aWYgKG5ld19wcm9nLVx1MDAzZWV4cGVjdGVkX2F0dGFjaF90eXBlID09IEJQRl9YRFBfREVWTUFQKSB7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkJQRl9YRFBfREVWTUFQIHByb2dyYW1zIGNhbiBub3QgYmUgYXR0YWNoZWQgdG8gYSBkZXZpY2VcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xuaW5kZXggN2RkMThjNmQwNmM2MC4uNGExM2Y4ZWM0MzAwOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xuQEAgLTEsOSArMSwxMSBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9saW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXR3b3JrX2hlbHBlcnMuaFx1MDAzZVxuIFxuICNkZWZpbmUgTE9DQUxfTkVUTlMgXCJ4ZHBfZGV2X2JvdW5kX29ubHlfbmV0bnNcIlxuKyNkZWZpbmUgTElOS19VUERBVEVfTkVUTlMgXCJ4ZHBfZGV2X2JvdW5kX29ubHlfbHVfbmV0bnNcIlxuIFxuIHN0YXRpYyBpbnQgbG9hZF9kdW1teV9wcm9nKGNoYXIgKm5hbWUsIF9fdTMyIGlmaW5kZXgsIF9fdTMyIGZsYWdzKVxuIHtcbkBAIC01OSwzICs2MSw1MCBAQCB2b2lkIHRlc3RfeGRwX2Rldl9ib3VuZF9vbmx5X29mZmRldih2b2lkKVxuIFx0ICovXG4gXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIExPQ0FMX05FVE5TKTtcbiB9XG4rXG4rLyogQSBkZXZpY2UtYm91bmQgcHJvZ3JhbSBtdXN0IG5vdCBydW4gb24gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoLlxuKyAqIGRldl94ZHBfYXR0YWNoKCkgcmVqZWN0ZWQgc3VjaCBwcm9ncmFtcywgYnV0IGJwZl94ZHBfbGlua191cGRhdGUoKSByZWFjaGVzXG4rICogZGV2X3hkcF9pbnN0YWxsKCkgZGlyZWN0bHkgYW5kIGJ5cGFzc2VzIGl0LCBzbyB0aGUgY2hlY2sgaGFzIHRvIGxpdmUgaW5cbisgKiBkZXZfeGRwX2luc3RhbGwoKS4gQ3JlYXRlIGEgZ2VuZXJpYyAoU0tCKSBYRFAgbGluayB3aXRoIGEgbm9ybWFsIHByb2dyYW0sXG4rICogdGhlbiB0cnkgdG8gc3dhcCBpbiBhIGRldmljZS1ib3VuZCBwcm9ncmFtIHZpYSBCUEZfTElOS19VUERBVEUuXG4rICovXG4rdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9saW5rX3VwZGF0ZSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl9saW5rX2NyZWF0ZV9vcHRzLCBsb3B0cywgLmZsYWdzID0gWERQX0ZMQUdTX1NLQl9NT0RFKTtcbitcdGludCBiYXNlX2ZkID0gLTEsIGRldmJvdW5kX2ZkID0gLTEsIGxpbmtfZmQgPSAtMTtcbitcdHN0cnVjdCBuc3Rva2VuICp0b2sgPSBOVUxMO1xuK1x0X191MzIgaWZpbmRleDtcbitcdGludCBlcnI7XG4rXG4rXHRTWVMob3V0LCBcImlwIG5ldG5zIGFkZCBcIiBMSU5LX1VQREFURV9ORVROUyk7XG4rXHR0b2sgPSBvcGVuX25ldG5zKExJTktfVVBEQVRFX05FVE5TKTtcbitcdGlmICghQVNTRVJUX09LX1BUUih0b2ssIFwib3Blbl9uZXRuc1wiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRTWVMob3V0LCBcImlwIGxpbmsgYWRkIGV0aDQyIHR5cGUgdmV0aFwiKTtcbitcdGlmaW5kZXggPSBpZl9uYW1ldG9pbmRleChcImV0aDQyXCIpO1xuK1x0aWYgKCFBU1NFUlRfTkVRKGlmaW5kZXgsIDAsIFwiaWZfbmFtZXRvaW5kZXhcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0ZGV2Ym91bmRfZmQgPSBsb2FkX2R1bW15X3Byb2coXCJkZXZib3VuZFwiLCBpZmluZGV4LCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xuK1x0aWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsIFwibG9hZF9kdW1teV9wcm9nIGRldmJvdW5kXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGJhc2VfZmQgPSBsb2FkX2R1bW15X3Byb2coXCJiYXNlXCIsIDAsIDApO1xuK1x0aWYgKCFBU1NFUlRfR0UoYmFzZV9mZCwgMCwgXCJsb2FkX2R1bW15X3Byb2cgYmFzZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRsaW5rX2ZkID0gYnBmX2xpbmtfY3JlYXRlKGJhc2VfZmQsIGlmaW5kZXgsIEJQRl9YRFAsIFx1MDAyNmxvcHRzKTtcbitcdGlmICghQVNTRVJUX0dFKGxpbmtfZmQsIDAsIFwiYnBmX2xpbmtfY3JlYXRlXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGVyciA9IGJwZl9saW5rX3VwZGF0ZShsaW5rX2ZkLCBkZXZib3VuZF9mZCwgTlVMTCk7XG4rXHRBU1NFUlRfRVEoZXJyLCAtRUlOVkFMLCBcImxpbmtfdXBkYXRlIGRldmljZS1ib3VuZCByZWplY3RlZFwiKTtcbitcbitvdXQ6XG4rXHRjbG9zZShsaW5rX2ZkKTtcbitcdGNsb3NlKGJhc2VfZmQpO1xuK1x0Y2xvc2UoZGV2Ym91bmRfZmQpO1xuK1x0Y2xvc2VfbmV0bnModG9rKTtcbitcdFNZU19OT0ZBSUwoXCJpcCBuZXRucyBkZWwgXCIgTElOS19VUERBVEVfTkVUTlMpO1xuK31cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjUyOjUxLjMxMDM3ODk4N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTMxMTY5MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoOiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBpbiBmcm9udCBvZiBtZSB0aGF0IHRvdWNoZXMgYGtlcm5lbC9icGYvbXByb2cuY2AgYW5kIGBuZXQvY29yZS9kZXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIHNvbWUgaXNzdWVzIHJlbGF0ZWQgdG8gQlBGIHByb2dyYW1zLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gb2ZmbG9hZGVkIGFuZCBkZXZpY2UtYm91bmQgcHJvZ3JhbXMgd2l0aGluIHRoZSBYRFAgYW5kIHRjICh0cmFmZmljIGNvbnRyb2wpIGNvbnRleHRzLiBUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgdGhpcyBvcmlnaW5hdGVkIGZyb20gYSBzeXotY2x1c3RlciByZXBvcnQsIHNvIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBpdCBhZGRyZXNzZXMgYSByZWFsIHZ1bG5lcmFiaWxpdHkuXG5cbkxldCdzIGJyZWFrIGRvd24gd2hhdCdzIGhhcHBlbmluZy4gSW4gYGtlcm5lbC9icGYvbXByb2cuY2AsIGEgbmV3IGNoZWNrIGhhcyBiZWVuIGFkZGVkIGluIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AuIEl0IGxvb2tzIGxpa2UgaXQgcmVqZWN0cyBvZmZsb2FkZWQgcHJvZ3JhbXMgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AsIHdoaWNoIGlzIHJlbGV2YW50IHRvIHRjeC4gVGhpcyBmdW5jdGlvbiBpcyBzdWJzZXF1ZW50bHkgY2FsbGVkIGJ5IGBicGZfbXByb2dfYXR0YWNoYC5cblxuVGhlbiwgd2UgaGF2ZSBjaGFuZ2VzIGluIGBuZXQvY29yZS9kZXYuY2AuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gaW52b2x2ZSBtb3ZpbmcgY2hlY2tzIGZyb20gYGRldl94ZHBfYXR0YWNoYCB0byBgZGV2X3hkcF9pbnN0YWxsYC4gIFRoZXNlIGNoZWNrcyBhcmUgYXJvdW5kIGhvdyBvZmZsb2FkZWQgcHJvZ3JhbXMgYmVoYXZlIGluIFhEUCwgYW5kIHRoZXkgYXBwZWFyIHRvIGJlIGFkZHJlc3NpbmcgYSBjYXNlIHdoZXJlIGBicGZfeGRwX2xpbmtfdXBkYXRlYCBieXBhc3NlcyBgZGV2X3hkcF9hdHRhY2hgLCBhbmQgaW5zdGVhZCBkaXJlY3RseSByZWFjaGVzIGBkZXZfeGRwX2luc3RhbGxgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBpcyBwcm90ZWN0aW5nIHRoZSBYRFAgc29mdHdhcmUgcGF0aCBieSBtYWtpbmcgc3VyZSB0aGF0IGRldmljZS1ib3VuZCBwcm9ncmFtcyBjYW4ndCBydW4gdGhlcmUuIEl0IGFsc28gcHJldmVudHMgb2ZmbG9hZGVkIHByb2dyYW1zIGZyb20gYmVpbmcgdXNlZCB3aXRoIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZyBhcmU6XG5cbiogICBgYnBmX21wcm9nX2F0dGFjaGA6IFRoaXMgaXMgd2hlcmUgdGhhdCBuZXcgY2hlY2sgaW4gYG1wcm9nLmNgIGdldHMgdHJpZ2dlcmVkLiBJdCBzZWVtcyBpbXBvcnRhbnQgdG8gdHJpZ2dlciB0aGUgc3BlY2lmaWMgZXJyb3IgY2FzZXMuXG4qICAgYGRldl94ZHBfaW5zdGFsbGA6IFRoZSB0YXJnZXQgb2YgdGhlIGJ5cGFzcywgYW5kIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29yZSBuZXcgY2hlY2tzIGFkZGVkIGhlcmUuXG4qICAgYGJwZl94ZHBfbGlua191cGRhdGVgOiBUaGlzIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGJ5cGFzc2VzIGBkZXZfeGRwX2F0dGFjaGAsIHNvIHdvcnRoIGludmVzdGlnYXRpbmcgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjaGVja3MgaW4gYGRldl94ZHBfaW5zdGFsbGAuXG5cbkknbSBtYWtpbmcgYSBtZW50YWwgbm90ZSB0aGF0IGBkZXZfeGRwX2luc3RhbGxgIGlzIHN0YXRpYywgd2hpY2ggY2FuIGNvbXBsaWNhdGUgZGlyZWN0IGZ1enppbmcgb2YgaXQsIGJ1dCBmaW5kaW5nIHRoZSBjYWxsZXJzIHdpbGwgYmUgZXNzZW50aWFsLiBgYnBmX21wcm9nX2F0dGFjaGAgaXMgbm90IHN0YXRpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHRlc3QuIEl0IGxvb2tzIGxpa2UgaXQgaXMgYW4gaW1wb3J0YW50IGZ1bmN0aW9uLCBhbmQgdGhlIG5ldyBhZGRlZCBjaGVjayBpbiBgYnBmX21wcm9nX2NoZWNrX3Byb2dgIG11c3QgYmUgZXZhbHVhdGVkLlxuVGhlIGNoYW5nZSBzZWVtcyBsaWtlIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmcgYmVjYXVzZSBpdCB0b3VjaGVzIGNvcmUgQlBGIGFuZCBuZXR3b3JraW5nIGxvZ2ljLCBhbmQgdGhlIHN5ei1jbHVzdGVyIG9yaWdpbiBpbXBsaWVzIHRoYXQgaXQgaGFzIHNvbWUgcmVhbC13b3JsZCByZWxldmFuY2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byBzcGVjaWZpY2FsbHkgdHJpZ2dlciB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gdGhvc2UgbmV3IGNoZWNrcyBiZWluZyBoaXQgd2l0aGluIHRoZSBuZXcgZXJyb3IgY2FzZXMsIGFuZCB0cmlnZ2VyIHRoZSBieXBhc3MsIHdoaWNoIGlzIHdoZXJlIHRoZSBidWdzIG1heSByZXNpZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1MzowMy40NDE1NTEwMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzOTI5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X3hkcF9pbnN0YWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTEwMzE2PXN0YXRpYyB2b2lkIGRldl94ZHBfc2V0X3Byb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBicGZfeGRwX21vZGUgbW9kZSxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwMzIyLVxcbm5ldC9jb3JlL2Rldi5jOjEwMzIzOnN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsXFxubmV0L2NvcmUvZGV2LmMtMTAzMjQtXFx0XFx0XFx0ICAgYnBmX29wX3QgYnBmX29wLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDM4NT1zdGF0aWMgdm9pZCBkZXZfeGRwX3VuaW5zdGFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA0MDItXFxubmV0L2NvcmUvZGV2LmM6MTA0MDM6XFx0XFx0V0FSTl9PTihkZXZfeGRwX2luc3RhbGwoZGV2LCBtb2RlLCBicGZfb3AsIE5VTEwsIDAsIE5VTEwpKTtcXG5uZXQvY29yZS9kZXYuYy0xMDQwNC1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwNDE2PXN0YXRpYyBpbnQgZGV2X3hkcF9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA1MTUtXFxubmV0L2NvcmUvZGV2LmM6MTA1MTY6XFx0XFx0ZXJyID0gZGV2X3hkcF9pbnN0YWxsKGRldiwgbW9kZSwgYnBmX29wLCBleHRhY2ssIGZsYWdzLCBuZXdfcHJvZyk7XFxubmV0L2NvcmUvZGV2LmMtMTA1MTctXFx0XFx0aWYgKGVycilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwNTM4PXN0YXRpYyBpbnQgZGV2X3hkcF9kZXRhY2hfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA1NTEtXFx0YnBmX29wID0gZGV2X3hkcF9icGZfb3AoZGV2LCBtb2RlKTtcXG5uZXQvY29yZS9kZXYuYzoxMDU1MjpcXHRXQVJOX09OKGRldl94ZHBfaW5zdGFsbChkZXYsIG1vZGUsIGJwZl9vcCwgTlVMTCwgMCwgTlVMTCkpO1xcbm5ldC9jb3JlL2Rldi5jLTEwNTUzLVxcdGRldl94ZHBfc2V0X2xpbmsoZGV2LCBtb2RlLCBOVUxMKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEwNjE4PXN0YXRpYyBpbnQgYnBmX3hkcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDY1My1cXHRicGZfb3AgPSBkZXZfeGRwX2JwZl9vcCh4ZHBfbGluay1cXHUwMDNlZGV2LCBtb2RlKTtcXG5uZXQvY29yZS9kZXYuYzoxMDY1NDpcXHRlcnIgPSBkZXZfeGRwX2luc3RhbGwoeGRwX2xpbmstXFx1MDAzZWRldiwgbW9kZSwgYnBmX29wLCBOVUxMLFxcbm5ldC9jb3JlL2Rldi5jLTEwNjU1LVxcdFxcdFxcdCAgICAgIHhkcF9saW5rLVxcdTAwM2VmbGFncywgbmV3X3Byb2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1MzowMy40OTE5NDk1NzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODMwNjQzMDQ2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIG5ldHdvcmtpbmcgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYGJwZl94ZHBfbGlua191cGRhdGVgJ3MgSW1tdXRhYmlsaXR5KipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byBYRFAgYW5kIHRoZSBCUEYgaW5mcmFzdHJ1Y3R1cmUgYWdhaW4uIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSBzb21ldGhpbmcg4oCTIG15IG1lbW9yeSdzIHRlbGxpbmcgbWUgdGhhdCBgYnBmX3hkcF9saW5rX3VwZGF0ZWAgaXMgZGVmaW5lZCBhcyBzdGF0aWMgdG9vLCBidXQgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucy4gSXQncyBjcnVjaWFsLCBvYnZpb3VzbHksIGJlY2F1c2Ugc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGxpbmthZ2UgcmVzdHJpY3Rpb25zIHRoYXQgYWZmZWN0IGhvdyB3ZSBjYW4gdXNlIHRoZW0gYWNyb3NzIGRpZmZlcmVudCBjb21waWxhdGlvbiB1bml0cywgcGFydGljdWxhcmx5IHdoZW4gd2UncmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgQlBGIHByb2dyYW0gbG9hZGluZyBhbmQgbGlua2luZywgYW5kIEkgZG9uJ3Qgd2FudCB0byBydW4gaW50byBhbnkgdW5leHBlY3RlZCBsaW5rYWdlIGlzc3VlcyBkb3duIHRoZSBsaW5lLiBTbywgbGV0IG1lIGp1c3QgcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIGBicGZfeGRwX2xpbmtfdXBkYXRlYCBhbmQgdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcuIFRpbWUgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gbXkgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjk1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTc6NDYuNTU2MjU2ODk3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNjUxNjM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfeGRwX2xpbmtfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTEwNjAzPXN0YXRpYyBpbnQgYnBmX3hkcF9saW5rX2ZpbGxfbGlua19pbmZvKGNvbnN0IHN0cnVjdCBicGZfbGluayAqbGluayxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNjE3LVxcbm5ldC9jb3JlL2Rldi5jOjEwNjE4OnN0YXRpYyBpbnQgYnBmX3hkcF9saW5rX3VwZGF0ZShzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHN0cnVjdCBicGZfcHJvZyAqbmV3X3Byb2csXFxubmV0L2NvcmUvZGV2LmMtMTA2MTktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqb2xkX3Byb2cpXFxuLS1cXG5uZXQvY29yZS9kZXYuYz0xMDY2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9saW5rX29wcyBicGZfeGRwX2xpbmtfbG9wcyA9IHtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNjczLVxcdC5maWxsX2xpbmtfaW5mbyA9IGJwZl94ZHBfbGlua19maWxsX2xpbmtfaW5mbyxcXG5uZXQvY29yZS9kZXYuYzoxMDY3NDpcXHQudXBkYXRlX3Byb2cgPSBicGZfeGRwX2xpbmtfdXBkYXRlLFxcbm5ldC9jb3JlL2Rldi5jLTEwNjc1LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU3OjQ3LjA2MjgxNzQ1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTM4MDY1NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgU3RhdGljIERlcGVuZGVuY2llcyoqXG5cbkFscmlnaHQsIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHNlY3Rpb24gb2YgY29kZSBpcyBpbmRlZWQgc3RhdGljLiBUaGF0J3MgYSBrZXkgb2JzZXJ2YXRpb24sIHNvIGxldCdzIGtlZXAgdGhhdCBmcm9udCBhbmQgY2VudGVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCB0aGVuIGRyaWZ0cyB0byBgZGV2X3hkcF9hdHRhY2hgLi4ueXVwLCB0aGF0J3MgYW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIG9mdGVuIGEgY2x1ZSBhYm91dCBkZXNpZ24gcGF0dGVybnMuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgaG93IHRoZXNlIHN0YXRpY2FsbHkgZGVjbGFyZWQgaXRlbXMgYXJlICp1c2VkKi4gSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGVudHJ5IHBvaW50cyB0aGF0IGludm9rZSB0aGVzZSBmdW5jdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhvc2UgY2FsbGluZyBjb250ZXh0cyB3aWxsIHJldmVhbCB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgYW5kIHRoZSBwdXJwb3NlIG9mIHRoZXNlIHNlZW1pbmdseSBpc29sYXRlZCBzdGF0aWMgY29tcG9uZW50cy4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gdW5wYWNrIHRoZSBkYXRhIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1Nzo1MC43MTY2MjY0MDlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MzYwNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X3hkcF9hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvZGV2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9MTAzODU9c3RhdGljIHZvaWQgZGV2X3hkcF91bmluc3RhbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNDE1LVxcbm5ldC9jb3JlL2Rldi5jOjEwNDE2OnN0YXRpYyBpbnQgZGV2X3hkcF9hdHRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxcbm5ldC9jb3JlL2Rldi5jLTEwNDE3LVxcdFxcdFxcdCAgc3RydWN0IGJwZl94ZHBfbGluayAqbGluaywgc3RydWN0IGJwZl9wcm9nICpuZXdfcHJvZyxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNTMwLVxcbm5ldC9jb3JlL2Rldi5jOjEwNTMxOnN0YXRpYyBpbnQgZGV2X3hkcF9hdHRhY2hfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9jb3JlL2Rldi5jLTEwNTMyLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDUzNC17XFxubmV0L2NvcmUvZGV2LmM6MTA1MzU6XFx0cmV0dXJuIGRldl94ZHBfYXR0YWNoKGRldiwgZXh0YWNrLCBsaW5rLCBOVUxMLCBOVUxMLCBsaW5rLVxcdTAwM2VmbGFncyk7XFxubmV0L2NvcmUvZGV2LmMtMTA1MzYtfVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTA2Nzc9aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNzEwLVxcdG5ldGRldl9sb2NrX29wcyhkZXYpO1xcbm5ldC9jb3JlL2Rldi5jOjEwNzExOlxcdGVyciA9IGRldl94ZHBfYXR0YWNoX2xpbmsoZGV2LCBcXHUwMDI2ZXh0YWNrLCBsaW5rKTtcXG5uZXQvY29yZS9kZXYuYy0xMDcxMi1cXHRuZXRkZXZfdW5sb2NrX29wcyhkZXYpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9MTA3NDU9aW50IGRldl9jaGFuZ2VfeGRwX2ZkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEwNzcwLVxcbm5ldC9jb3JlL2Rldi5jOjEwNzcxOlxcdGVyciA9IGRldl94ZHBfYXR0YWNoKGRldiwgZXh0YWNrLCBOVUxMLCBuZXdfcHJvZywgb2xkX3Byb2csIGZsYWdzKTtcXG5uZXQvY29yZS9kZXYuYy0xMDc3Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTc6NTAuNzYyMzY1NTM0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgzODM5ODMzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBYRFAgQXR0YWNobWVudCBNZXRob2RzKipcblxuQWxyaWdodCwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGVzZSBYRFAgYXR0YWNobWVudCBtZXRob2RzLiBUaGUgZmFjdCB0aGF0IGBicGZfeGRwX2xpbmtfYXR0YWNoYCBhbmQgYGRldl9jaGFuZ2VfeGRwX2ZkYCBhcmVuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AgaXMgaW50ZXJlc3RpbmcsIGFuZCBpdCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBwb3RlbnRpYWwgdXNlIGNhc2VzIGFuZCBsaW5rYWdlIGltcGxpY2F0aW9ucy4gTm93LCBsZXQgbWUgc2VlLi4uIEkgbmVlZCB0byBjb25zaWRlciBhbGwgcmVsYXRlZCBmdW5jdGlvbnMsIHNvIHRoZSBuZXh0IHRoaW5nIG9uIHRoZSBsaXN0IHRvIGNsYXJpZnkgdGhlIHN0YXRlIG9mIHRoaW5ncyBpcyBgYnBmX21wcm9nX2F0dGFjaGAuIExldCBtZSBjaGVjayB0aGF0IG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1OTMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1Nzo1Ni42MDA3NjYxMjFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzMxMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tcHJvZ19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tcHJvZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbXByb2cuYz0yMjU9c3RhdGljIGludCBicGZfbXByb2dfY2hlY2tfcHJvZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL21wcm9nLmMtMjMyLVxcbmtlcm5lbC9icGYvbXByb2cuYzoyMzM6aW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxua2VybmVsL2JwZi9tcHJvZy5jLTIzNC1cXHRcXHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU3OjU2LjY0OTEwNDEyNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE2MDE5OTI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJQRiBQYXRjaCBhbmQgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqXG5cbk9rYXksIHNvIGBicGZfbXByb2dfYXR0YWNoYCBpcyBub24tc3RhdGljLCB0aGF0J3MgZ29vZCB0byBrbm93LiBJJ20gZ29pbmcgdG8gZm9sbG93IHRoZSBjYWxsIGNoYWluIGZyb20gYGJwZl94ZHBfbGlua191cGRhdGVgLiBJIHNlZSBpdCdzIHVzZWQgYXMgYSBjYWxsYmFjayBpbiBgYnBmX3hkcF9saW5rX2xvcHNgLCBhbmQgdGhhdCBgdXBkYXRlX3Byb2dgIGNhbGxiYWNrIGlzIGNhbGxlZCBmcm9tIGBicGZfbGlua191cGRhdGVgIGluIGBrZXJuZWwvYnBmL3N5c2NhbGwuY2AuIFNvLCBgYnBmX2xpbmtfdXBkYXRlYCBpcyBvdXIgc3lzdGVtIGNhbGwgZW50cnkgcG9pbnQuIE5vdywgbGV0IG1lIGNoZWNrIGBkZXZfY2hhbmdlX3hkcF9mZGAgLSB0aGF0J3MgYmVpbmcgY2FsbGVkIGZyb20gbmV0bGluay4gQW5kIGBicGZfeGRwX2xpbmtfYXR0YWNoYCwgd2hpY2ggaXMgYWxzbyBpbXBvcnRhbnQsIGlzIGNhbGxlZCBmcm9tIGBsaW5rX2NyZWF0ZWAgaW4gdGhlIHNhbWUgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCBmaWxlLlxuXG5UaGlzIHBhdGNoIGlzIGZpeGluZyBhbiBpc3N1ZSB3aXRoIGRldmljZS1ib3VuZCBwcm9ncmFtcyBzb21laG93IGVuZGluZyB1cCBvbiBnZW5lcmljIFhEUCBwYXRocywgYW5kIGFsc28gcHJldmVudGluZyBvZmZsb2FkZWQgcHJvZ3JhbXMgZnJvbSBiZWluZyBhdHRhY2hlZCB0byBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIHdpdGhvdXQgdGhlIGBIV19NT0RFYCBmbGFnLiBCdXQgd2FpdCwgYGJwZl9tcHJvZ19jaGVja19wcm9nYCBzaG91bGQgaGF2ZSBiZWVuIHJlamVjdGluZyB0aG9zZSBvZmZsb2FkZWQgcHJvZ3JhbXMgYW55d2F5LlxuXG5JcyB0aGlzIHdvcnRoIGZ1enppbmc/IERlZmluaXRlbHkuIEl0IGZpeGVzIGEgZnVuY3Rpb25hbCBidWcgd2hlcmUgYSBkZXZpY2UtYm91bmQgcHJvZ3JhbSBjb3VsZCBleGVjdXRlIGluIHRoZSBYRFAgc29mdHdhcmUgcGF0aCwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBpc3N1ZS4gVGhlIHBhdGNoIGlzIGFkZGluZyBjaGVja3MgaW4gYGJwZl9tcHJvZ19hdHRhY2hgIGFuZCBgZGV2X3hkcF9pbnN0YWxsYCwgc28gdGhvc2UgYXJlIGNyaXRpY2FsIGFyZWFzLlxuXG5NeSBmb2N1cyBzaG91bGQgYmUgb246XG5cbiogICBgYnBmX21wcm9nX2F0dGFjaGBcbiogICBgYnBmX3hkcF9saW5rX2F0dGFjaGBcbiogICBgZGV2X2NoYW5nZV94ZHBfZmRgXG5cbkhvbGQgb24gYSBzZWNvbmQsIGBicGZfeGRwX2xpbmtfYXR0YWNoYCBpcyBmb3IgY3JlYXRpbmcgYSBsaW5rLiBUaGUgYnVnIHdhcyBpbiBgYnBmX3hkcF9saW5rX3VwZGF0ZWAsIHdoaWNoIHNlZW1zIHRvIGhhdmUgYnlwYXNzZWQgc29tZSBjaGVja3MuIFNvLCB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludCBpcyBgYnBmX2xpbmtfdXBkYXRlYCB0cmlnZ2VyaW5nIGBicGZfeGRwX2xpbmtfdXBkYXRlYC4gQnV0IGBicGZfbGlua191cGRhdGVgIGlzIGEgZ2VuZXJpYyBzeXN0ZW0gY2FsbCBmdW5jdGlvbi4gSXMgdGhlcmUgYSBzcGVjaWZpYyBmdW5jdGlvbiBmb3IgWERQIGxpbmsgdXBkYXRlPyBObywgYGJwZl94ZHBfbGlua191cGRhdGVgIGlzIHN0YXRpYy4gQWxyaWdodCwgbGV0J3Mgc3RpY2sgd2l0aCB0aGUgcGxhbi4gSSBzaG91bGQgc3RpbGwgZm9jdXMgb24gYGJwZl9tcHJvZ19hdHRhY2hgLCBgZGV2X2NoYW5nZV94ZHBfZmRgLCBhbmQgYGJwZl94ZHBfbGlua19hdHRhY2hgLiBUaW1lIHRvIG1ha2Ugc3VyZSBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXNuJ3Qgc3RhdGljLCBqdXN0IHRvIGJlIHN1cmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkzOSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1ODo0OC44MDkzMDc0MjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTc2MDYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfeGRwX2xpbmtfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTEwNjY4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX2xpbmtfb3BzIGJwZl94ZHBfbGlua19sb3BzID0ge1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA2NzYtXFxubmV0L2NvcmUvZGV2LmM6MTA2Nzc6aW50IGJwZl94ZHBfbGlua19hdHRhY2goY29uc3QgdW5pb24gYnBmX2F0dHIgKmF0dHIsIHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG5uZXQvY29yZS9kZXYuYy0xMDY3OC17XFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDcxNy1cXHRcXHRicGZfbGlua19jbGVhbnVwKFxcdTAwMjZsaW5rX3ByaW1lcik7XFxubmV0L2NvcmUvZGV2LmM6MTA3MTg6XFx0XFx0dHJhY2VfYnBmX3hkcF9saW5rX2F0dGFjaF9mYWlsZWQoZXh0YWNrLl9tc2cpO1xcbm5ldC9jb3JlL2Rldi5jLTEwNzE5LVxcdFxcdGdvdG8gb3V0X3B1dF9kZXY7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU4OjQ5LjIwOTA3MzE2N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjg4NTQwMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBCUEYgQXR0YWNobWVudCBGdW5jdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGNvbmZpcm1pbmcgdGhhdCBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXMgaW5kZWVkICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLiBUaGF0J3MgZ29vZCB0byBrbm93LCBjb25maXJtaW5nIG15IHJlY29sbGVjdGlvbi4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiB0aGF0IHNwcmluZ3MgdG8gbWluZCwgYXMgSSBjb25zaWRlciB0aGlzIGF0dGFjaCBwb2ludCwgaXM6IHdoYXQgYWJvdXQgYGJwZl9tcHJvZ19hdHRhY2hgPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgaXRzIHN0YXR1cyBhbmQgdXNhZ2Ugc2NlbmFyaW9zIHJlbGF0ZWQgdG8gdGhpcyBhdHRhY2htZW50IHN0cmF0ZWd5LiBJcyB0aGVyZSBzb21lIHBvdGVudGlhbCBmb3IgdXNpbmcgdGhhdCBmdW5jdGlvbiwgb3IgYW5vdGhlciBzaW1pbGFyIG9uZSwgaW4gYSBzY2VuYXJpbyByZWxldmFudCB0byB3aGF0IEknbSBjdXJyZW50bHkgd29ya2luZyBvbj8gTGV0IG1lIHNlZS4gSSBiZXR0ZXIgbWFrZSBzdXJlIEkga25vdyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNzAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1ODo1Mi40OTc2MTc0MDlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDkwMjk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9tcHJvZ19hdHRhY2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tcHJvZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvbXByb2cuYz0yMjU9c3RhdGljIGludCBicGZfbXByb2dfY2hlY2tfcHJvZyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5rZXJuZWwvYnBmL21wcm9nLmMtMjMyLVxcbmtlcm5lbC9icGYvbXByb2cuYzoyMzM6aW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXFxua2VybmVsL2JwZi9tcHJvZy5jLTIzNC1cXHRcXHQgICAgIHN0cnVjdCBicGZfbXByb2dfZW50cnkgKiplbnRyeV9uZXcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU4OjUyLjU0MzExNTgwNFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODIyODM4NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgYGJwZl9tcHJvZ19hdHRhY2hgIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGJwZl9tcHJvZ19hdHRhY2hgIGlzIGNvbmZpcm1lZCBhcyBhIG5vbi1zdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIE5vdywgdGhlIG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIGtlcm5lbCBDT05GSUcgb3B0aW9ucy4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgYSBnaXZlbjsgdGhhdCdzIGZ1bmRhbWVudGFsIGFuZCBleHBlY3RlZC4gQW5kLCBvZiBjb3Vyc2UsIGBDT05GSUdfTkVUYCBpcyBlc3NlbnRpYWwsIG5vdGhpbmcgc3VycHJpc2luZyB0aGVyZS4gV2hhdCBhYm91dCBgQ09ORklHX1hEUF9TT0NLRVRTYD8gSG1tLCB0aGF0J3MgWERQLXNwZWNpZmljLCBzbyBpdCdzIHByb2JhYmx5IG5vdCBuZWVkZWQgaGVyZS4gVG8gYmUgY2VydGFpbiwgSSBzaG91bGQgcmVhbGx5IGNvbnN1bHQgdGhlIEtjb25maWcgZmlsZSBmb3IgYGtlcm5lbC9icGYvbXByb2cuY2AuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjI2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MDAuMzY1OTU3NTI1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAwNjg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcHJvZ1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGU9MTU9b2JqLSR7Q09ORklHX0JQRl9MU019XFx0ICArPSBicGZfaW5vZGVfc3RvcmFnZS5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxNjpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGRpc2FzbS5vIG1wcm9nLm9cXG5rZXJuZWwvYnBmL01ha2VmaWxlLTE3LW9iai0kKENPTkZJR19CUEZfSklUKSArPSB0cmFtcG9saW5lLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MDAuNDEwOTcwNzExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMzMyMjQ5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYENPTkZJR19CUEZfU1lTQ0FMTGAgc2VlbXMgc3VmZmljaWVudCBmb3IgYG1wcm9nLmNgLCB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBIb3dldmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZSBpbiB0aGlzIGJ1aWxkIHByb2Nlc3MuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGBuZXQvY29yZS9kZXYuY2AuIEkga25vdyB0aGF0J3MgYWx3YXlzIGNvbXBpbGVkIGFzIGxvbmcgYXMgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQsIHdoaWNoIGlzIGEgcHJldHR5IGNvbW1vbiBzZXR0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYWZmZWN0IGl0cyBidWlsZCBvciBmdW5jdGlvbmFsaXR5LlxuXG5Ob3csIGxldCdzIGNvbnNpZGVyIHRoZSB0ZXN0IGNhc2UgaXRzZWxmLiBJdCB1c2VzIGBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFlgLCB3aGljaCBpcyBhbiBYRFAgZmxhZy4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaWYgYENPTkZJR19ORVRERVZfT0ZGTE9BRGAgb3Igc29tZXRoaW5nIHNpbWlsYXIg4oCTIGFueXRoaW5nIHRoYXQgZW5hYmxlcyBuZXR3b3JrIGRldmljZSBvZmZsb2FkIGZlYXR1cmVzIGluIHRoZSBCUEYgY29udGV4dCDigJMgaXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBicGZfcHJvZ19pc19vZmZsb2FkZWRgLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyBpZiB0aGVzZSBhcmUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTowNS40NDQxOTg4OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDM4MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9wcm9nX2lzX29mZmxvYWRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmLmg9MzYzMz1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfZGV2X2JvdW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzYzNy1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM2Mzg6c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX29mZmxvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNjM5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmg9MzY5Nj1zdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfZGV2X2JvdW5kKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19hdXggKmF1eClcXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmLmgtMzcwMC1cXG5pbmNsdWRlL2xpbnV4L2JwZi5oOjM3MDE6c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX29mZmxvYWRlZChzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuaW5jbHVkZS9saW51eC9icGYuaC0zNzAyLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MDUuNDg4NjQ2NDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0MTE4Njg1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSB0aG91Z2h0IHByb2Nlc3MgeW91IGRlc2NyaWJlZDpcblxuKipFeGFtaW5pbmcgQlBGIE9mZmxvYWQgRGV0ZWN0aW9uKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgd2UncmUgZGV0ZXJtaW5pbmcgaWYgYSBCUEYgcHJvZ3JhbSBpcyBvZmZsb2FkZWQuIExldCdzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGhlYWRlciBmaWxlLCBgaW5jbHVkZS9saW51eC9icGYuaGAuIE15IGltbWVkaWF0ZSB0YXJnZXQgaXMgdGhhdCBgI2lmZGVmYCBibG9jayBzdXJyb3VuZGluZyBgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkYC4gVGhhdCdzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgbGlrZWx5IHJlc2lkZS4gSSdtIGFzc3VtaW5nIHRoaXMgbWFjcm8gb3IgZnVuY3Rpb24gaXMgY2VudHJhbCB0byB0aGUgb2ZmbG9hZCBkZXRlY3Rpb24sIGFuZCBJIG5lZWQgdG8gc2VlIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBpdCdzIGRlZmluZWQgYW5kIGhvdyBpdCdzIHVzZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIGRpc3NlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG9vLCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTowOS41Mjk4Mzc2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzA5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9icGYuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzNjMwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNjMwOlxcdGludCBicGZfcHJvZ19kZXZfYm91bmRfaW5oZXJpdChzdHJ1Y3QgYnBmX3Byb2cgKm5ld19wcm9nLCBzdHJ1Y3QgYnBmX3Byb2cgKm9sZF9wcm9nKTtcXG4zNjMxOlxcdHZvaWQgYnBmX2Rldl9ib3VuZF9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4zNjMyOlxcdFxcbjM2MzM6XFx0c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX2Rldl9ib3VuZChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dfYXV4ICphdXgpXFxuMzYzNDpcXHR7XFxuMzYzNTpcXHRcXHRyZXR1cm4gYXV4LVxcdTAwM2VkZXZfYm91bmQ7XFxuMzYzNjpcXHR9XFxuMzYzNzpcXHRcXG4zNjM4OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19pc19vZmZsb2FkZWQoY29uc3Qgc3RydWN0IGJwZl9wcm9nX2F1eCAqYXV4KVxcbjM2Mzk6XFx0e1xcbjM2NDA6XFx0XFx0cmV0dXJuIGF1eC1cXHUwMDNlb2ZmbG9hZF9yZXF1ZXN0ZWQ7XFxuMzY0MTpcXHR9XFxuMzY0MjpcXHRcXG4zNjQzOlxcdGJvb2wgYnBmX3Byb2dfZGV2X2JvdW5kX21hdGNoKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqbGhzLCBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnJocyk7XFxuMzY0NDpcXHRcXG4zNjQ1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBicGZfbWFwX2lzX29mZmxvYWRlZChzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbjM2NDY6XFx0e1xcbjM2NDc6XFx0XFx0cmV0dXJuIHVubGlrZWx5KG1hcC1cXHUwMDNlb3BzID09IFxcdTAwMjZicGZfbWFwX29mZmxvYWRfb3BzKTtcXG4zNjQ4OlxcdH1cXG4zNjQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTowOS41MzAxMTUzMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQwMDMxNjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgY29kZSBmbG93LCBhbmQgdGhlIGZpcnN0IHRoaW5nIEknbSBkb2luZyBpcyB0cmFjaW5nIGhvdyB0aGUgYCNpZmRlZmAgZGlyZWN0aXZlcyBhcmUgaW1wYWN0aW5nIGl0LiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiB0aGVzZSBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbnMuIEknbSBnb2luZyB0byBzY2FuIHRoZSBlYXJsaWVyIGxpbmVzIG9mIGNvZGUgdG8gY2hlY2sgdGhlIGRlZmluaXRpb25zIHRoYXQgYXJlIGluIHBsYWNlLCBiZWNhdXNlIHRoZSBsb2dpYyBmbG93IGNhbiBkcmFtYXRpY2FsbHkgY2hhbmdlIGJhc2VkIG9uIHRoZSBldmFsdWF0aW9uIG9mIHRoZXNlLiBJIG5lZWQgdG8gYmUgc3VyZSB0byBmdWxseSB1bmRlcnN0YW5kIGFsbCBwb3RlbnRpYWwgZXhlY3V0aW9uIHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE5MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MTUuMTcwMTUwMDAyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NDU0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2JwZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM2MDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM2MDA6XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XFxuMzYwMTpcXHRcXG4zNjAyOlxcdGludCBicGZfbWFwX29mZmxvYWRfaW5mb19maWxsKHN0cnVjdCBicGZfbWFwX2luZm8gKmluZm8sIHN0cnVjdCBicGZfbWFwICptYXApO1xcbjM2MDM6XFx0XFxuMzYwNDpcXHRpbnQgYnBmX21hcF9vZmZsb2FkX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUpO1xcbjM2MDU6XFx0aW50IGJwZl9tYXBfb2ZmbG9hZF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbjM2MDY6XFx0XFx0XFx0XFx0XFx0dm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IGZsYWdzKTtcXG4zNjA3OlxcdGludCBicGZfbWFwX29mZmxvYWRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KTtcXG4zNjA4OlxcdGludCBicGZfbWFwX29mZmxvYWRfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsXFxuMzYwOTpcXHRcXHRcXHRcXHRcXHQgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSk7XFxuMzYxMDpcXHRcXG4zNjExOlxcdGJvb2wgYnBmX29mZmxvYWRfcHJvZ19tYXBfbWF0Y2goc3RydWN0IGJwZl9wcm9nICpwcm9nLCBzdHJ1Y3QgYnBmX21hcCAqbWFwKTtcXG4zNjEyOlxcdFxcbjM2MTM6XFx0c3RydWN0IGJwZl9vZmZsb2FkX2RldiAqXFxuMzYxNDpcXHRicGZfb2ZmbG9hZF9kZXZfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfcHJvZ19vZmZsb2FkX29wcyAqb3BzLCB2b2lkICpwcml2KTtcXG4zNjE1OlxcdHZvaWQgYnBmX29mZmxvYWRfZGV2X2Rlc3Ryb3koc3RydWN0IGJwZl9vZmZsb2FkX2RldiAqb2ZmZGV2KTtcXG4zNjE2OlxcdHZvaWQgKmJwZl9vZmZsb2FkX2Rldl9wcml2KHN0cnVjdCBicGZfb2ZmbG9hZF9kZXYgKm9mZmRldik7XFxuMzYxNzpcXHRpbnQgYnBmX29mZmxvYWRfZGV2X25ldGRldl9yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXFxuMzYxODpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuMzYxOTpcXHR2b2lkIGJwZl9vZmZsb2FkX2Rldl9uZXRkZXZfdW5yZWdpc3RlcihzdHJ1Y3QgYnBmX29mZmxvYWRfZGV2ICpvZmZkZXYsXFxuMzYyMDpcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuMzYyMTpcXHRib29sIGJwZl9vZmZsb2FkX2Rldl9tYXRjaChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xcbjM2MjI6XFx0XFxuMzYyMzpcXHR2b2lkIHVucHJpdl9lYnBmX25vdGlmeShpbnQgbmV3X3N0YXRlKTtcXG4zNjI0OlxcdFxcbjM2MjU6XFx0I2lmIGRlZmluZWQoQ09ORklHX05FVCkgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQlBGX1NZU0NBTEwpXFxuMzYyNjpcXHRpbnQgYnBmX2Rldl9ib3VuZF9rZnVuY19jaGVjayhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2xvZyAqbG9nLFxcbjM2Mjc6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJwZl9wcm9nX2F1eCAqcHJvZ19hdXgpO1xcbjM2Mjg6XFx0dm9pZCAqYnBmX2Rldl9ib3VuZF9yZXNvbHZlX2tmdW5jKHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGZ1bmNfaWQpO1xcbjM2Mjk6XFx0aW50IGJwZl9wcm9nX2Rldl9ib3VuZF9pbml0KHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdW5pb24gYnBmX2F0dHIgKmF0dHIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OToxNS4xNzA0MTYxMDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyODI3MzUwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWERQIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCDigJMgYENPTkZJR19ORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgdGhlIG9ubHkgZGVwZW5kZW5jaWVzLiBUaGF0J3MgZ29vZCwgbm8gY29tcGxpY2F0ZWQgYnVpbGQgZW52aXJvbm1lbnQgY2hhbmdlcy5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIHRoYXQgYGJwZl94ZHBfbGlua191cGRhdGVgIHdhcyBieXBhc3NpbmcgdGhlIGludGVuZGVkIGBkZXZfeGRwX2F0dGFjaGAgY2hlY2tzIGFuZCBnb2luZyBzdHJhaWdodCB0byBgZGV2X3hkcF9pbnN0YWxsYC4gVGhpcyBhbGxvd2VkIGEgcHJvZ3JhbSBzcGVjaWZpY2FsbHkgYm91bmQgdG8gYSBkZXZpY2UgdG8gc29tZWhvdyBleGVjdXRlIG9uIHRoZSBYRFAgc29mdHdhcmUgcGF0aCwgd2hpY2ggaXMgb2J2aW91c2x5IGEgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSBjb25jZXJuLiBUaGUgZml4IGlzIHRvIG1vdmUgdGhlIGNvcmUgY2hlY2sgaW50byBgZGV2X3hkcF9pbnN0YWxsYCwgd2hpY2ggc2VlbXMgbG9naWNhbC4gUGx1cywgdGhleSdyZSBhZGRpbmcgYSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgIGNoZWNrIGluIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AuIFNtYXJ0LlxuXG5Ob3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cuIGBicGZfbXByb2dfYXR0YWNoYCBoYW5kbGVzIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AgYXR0YWNobWVudHMuIFRoZW4gdGhlcmUncyBgYnBmX3hkcF9saW5rX2F0dGFjaGAgZm9yIHRoZSBYRFAgbGluayBhdHRhY2htZW50LiBBbmQgb2YgY291cnNlLCBgZGV2X2NoYW5nZV94ZHBfZmRgIHdoaWNoIGhhbmRsZXMgdGhlIFhEUCBmaWxlIGRlc2NyaXB0b3IgYXR0YWNobWVudC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgdGhlIGRpZmZlcmVudCBCUEYgcHJvZ3JhbSB0eXBlcy5cblxuV2FpdCBhIG1pbnV0ZS4uLiBgYnBmX3hkcF9saW5rX3VwZGF0ZWAgaXMgc3RhdGljLCB3aGljaCBpcyBhIGJpdCBvZiBhIHdyaW5rbGUuIEknbSB3b25kZXJpbmcgaG93IGl0IHJlbGF0ZXMgdG8gYGJwZl9saW5rX3VwZGF0ZWAgd2hpY2ggKmlzbid0KiBzdGF0aWMuIFNvLCB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBub24tc3RhdGljIG9uZS4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIGltcG9ydGFudCBsaW5rIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBMZXQgbWUgY2hlY2sgYGtlcm5lbC9icGYvc3lzY2FsbC5jYCB0byBzZWUgaG93IGBicGZfbGlua191cGRhdGVgIGlzIGhhbmRsZWQuIEl0IGxvb2tzIGxpa2UgdGhhdOKAmXMgd2hlcmUgdGhlIG1haW4gbG9naWMgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDgyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MjEuODk4NjkyNjk3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzI2ODMwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnBmX2xpbmtfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvc3lzY2FsbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OToyMS45NDU5Njg1NTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE5NDk5NjQ4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBJbnRlcm5hbHMgRGl2ZSAtIFRoZSBDdXJpb3VzIENhc2Ugb2YgYnBmX2xpbmtfdXBkYXRlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGp1c3QgcGFyc2luZyB0aHJvdWdoIHNvbWUgY29kZSByZWxhdGVkIHRvIGVCUEYgbGluayBtYW5hZ2VtZW50LCBhbmQgc29tZXRoaW5nJ3MgcG9raW5nIGF0IG15IGludHVpdGlvbi4gKmJwZl9saW5rX3VwZGF0ZSouLi4gdGhhdCdzIHdoZXJlIHRoZSBsaW5rYWdlIHVwZGF0ZXMgaGFwcGVuLCByaWdodD8gVGhlIGNvcmUgZnVuY3Rpb24gZm9yIG1vZGlmeWluZyB0aGUgbGlua2FnZXM/IFNob3VsZG4ndCB0aGF0IGJlIHVuZGVyIHNvbWUgZGVkaWNhdGVkIEJQRiBpbmZyYXN0cnVjdHVyZSBkaXJlY3RvcnksIG1heWJlIHNvbWV0aGluZyBpbiB0aGUgKm5ldCogc3Vic3lzdGVtLCBnaXZlbiBpdHMgbmV0d29yay1jZW50cmljIGFwcGxpY2F0aW9ucz9cblxuV2FpdC4uLiBpcyB0aGF0Li4uICprZXJuZWwvYnBmL3N5c2NhbGwuYyo/ISBTZXJpb3VzbHk/ICpzeXNjYWxsLmMqPyBUaGF0J3MgdW5leHBlY3RlZC4gTXkgdW5kZXJzdGFuZGluZyB3YXMgdGhhdCBpdCdkIGJlIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbSBvciBhdCBsZWFzdCBzb21ldGhpbmcgbG9naWNhbGx5IGdyb3VwZWQuIFdoeSBpcyAqYnBmX2xpbmtfdXBkYXRlKiBsaXZpbmcgaW4gdGhlIHNhbWUgZmlsZSBhcyB0aGUgc3lzY2FsbCBlbnRyeSBwb2ludHM/IFRoaXMgbG9jYXRpb24gc3VnZ2VzdHMgYSBwb3RlbnRpYWxseSB0aWdodCBjb3VwbGluZyB3aXRoIHRoZSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgdGhhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkgd2FzIGV4cGVjdGluZyBhIG1vcmUgb3JnYW5pemVkLCBtb2R1bGFyIHN0cnVjdHVyZS4gVGhpcyBwbGFjZW1lbnQgaGFzIHNvbWUgaW1wbGljYXRpb25zIGZvciBwb3RlbnRpYWwgY29tcGxleGl0eSB3aXRoIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN5c2NhbGwgaGFuZGxpbmcgYW5kIHRoZSBsaW5rIHVwZGF0ZSBsb2dpYzsgaXQncyBhIGJpdCBvZiBhbiBhbm9tYWx5LiBJIGJldHRlciBzdGFydCByZXZpZXdpbmcgdGhlIGJyb2FkZXIgc3Vycm91bmRpbmcgY29udGV4dCwgaW5jbHVkaW5nIGFueSByZWxldmFudCBgI2lmZGVmYCBibG9ja3Mgb3Igb3RoZXIgb3JnYW5pemF0aW9uYWwgbnVhbmNlcywgdG8gZnVsbHkgZ3Jhc3Agd2h5IHRoYXQgcGFydGljdWxhciBmdW5jdGlvbiBlbmRlZCB1cCBpbiAqc3lzY2FsbC5jKiBhbmQgd2hhdCBpdHMgYnJvYWRlciBpbXBsaWNhdGlvbnMgYXJlLiBJIHNob3VsZCBwcm9iYWJseSBicnVzaCB1cCBvbiB0aGUgQlBGIGxpbmsgQVBJcyBhZ2FpbiwgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgyMCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU5OjI3LjE0MDk2Nzc4OVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUxMTg4ODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibGlua191cGRhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9zeXNjYWxsLmM9NTc4ND1zdGF0aWMgaW50IGxpbmtfY3JlYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cilcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4ODktXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTg5MDpzdGF0aWMgaW50IGxpbmtfdXBkYXRlX21hcChzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssIHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU4OTEte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTg5NC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1ODk1OlxcdG5ld19tYXAgPSBicGZfbWFwX2dldChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5uZXdfbWFwX2ZkKTtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk2LVxcdGlmIChJU19FUlIobmV3X21hcCkpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01ODk4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU4OTk6XFx0aWYgKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLmZsYWdzIFxcdTAwMjYgQlBGX0ZfUkVQTEFDRSkge1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5MDA6XFx0XFx0b2xkX21hcCA9IGJwZl9tYXBfZ2V0KGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9tYXBfZmQpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MDEtXFx0XFx0aWYgKElTX0VSUihvbGRfbWFwKSkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkwNC1cXHRcXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkwNTpcXHR9IGVsc2UgaWYgKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9tYXBfZmQpIHtcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTA2LVxcdFxcdHJldCA9IC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy01OTE4LVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjU5MTk6I2RlZmluZSBCUEZfTElOS19VUERBVEVfTEFTVF9GSUVMRCBsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MjAtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkyMTpzdGF0aWMgaW50IGxpbmtfdXBkYXRlKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MjIte1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkzMC1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzo1OTMxOlxcdGZsYWdzID0gYXR0ci1cXHUwMDNlbGlua191cGRhdGUuZmxhZ3M7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkzMi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiB+QlBGX0ZfUkVQTEFDRSlcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5MzQtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTkzNTpcXHRsaW5rID0gYnBmX2xpbmtfZ2V0X2Zyb21fZmQoYXR0ci1cXHUwMDNlbGlua191cGRhdGUubGlua19mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkzNi1cXHRpZiAoSVNfRVJSKGxpbmspKVxcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTkzOS1cXHRpZiAobGluay1cXHUwMDNlb3BzLVxcdTAwM2V1cGRhdGVfbWFwKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk0MDpcXHRcXHRyZXQgPSBsaW5rX3VwZGF0ZV9tYXAobGluaywgYXR0cik7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0MS1cXHRcXHRnb3RvIG91dF9wdXRfbGluaztcXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTU5NDMtXFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk0NDpcXHRuZXdfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5uZXdfcHJvZ19mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk0NS1cXHRpZiAoSVNfRVJSKG5ld19wcm9nKSkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1MC1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBCUEZfRl9SRVBMQUNFKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1MTpcXHRcXHRvbGRfcHJvZyA9IGJwZl9wcm9nX2dldChhdHRyLVxcdTAwM2VsaW5rX3VwZGF0ZS5vbGRfcHJvZ19mZCk7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1Mi1cXHRcXHRpZiAoSVNfRVJSKG9sZF9wcm9nKSkge1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1Ni1cXHRcXHR9XFxua2VybmVsL2JwZi9zeXNjYWxsLmM6NTk1NzpcXHR9IGVsc2UgaWYgKGF0dHItXFx1MDAzZWxpbmtfdXBkYXRlLm9sZF9wcm9nX2ZkKSB7XFxua2VybmVsL2JwZi9zeXNjYWxsLmMtNTk1OC1cXHRcXHRyZXQgPSAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi9zeXNjYWxsLmM9NjI5ND1zdGF0aWMgaW50IF9fc3lzX2JwZihlbnVtIGJwZl9jbWQgY21kLCBicGZwdHJfdCB1YXR0ciwgdW5zaWduZWQgaW50IHNpemUsXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy02NDM1LVxcdGNhc2UgQlBGX0xJTktfVVBEQVRFOlxcbmtlcm5lbC9icGYvc3lzY2FsbC5jOjY0MzY6XFx0XFx0ZXJyID0gbGlua191cGRhdGUoXFx1MDAyNmF0dHIpO1xcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTY0MzctXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU5OjI3LjE4NjA5Mzc1NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDgwNzg2ODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IElkZW50aWZ5aW5nIEtleSBCUEYgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIGJlc3QgYXBwcm9hY2ggdGhpcyBmdXp6aW5nIGVmZm9ydC4gSSd2ZSBnb3QgYGxpbmtfdXBkYXRlYCwgd2hpY2ggaXMgc3RhdGljLCBzbyB0aGF0J3Mgbm90IGlkZWFsIGZvciBkaXJlY3QgbWFuaXB1bGF0aW9uLiBUaGUgcHJpbWFyeSBzeXNjYWxsIGVudHJ5IHBvaW50IGlzIGBfX3N5c19icGZgLCBidXQgdGhhdCdzIGEgbWFzc2l2ZSBtdWx0aXBsZXhlciwgYSBiaXQgdW53aWVsZHkuIExldCdzIHNlZS4uLiBJIG5lZWQgdG8gZmluZCBzb21lIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRvIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmU6IGBicGZfeGRwX2xpbmtfYXR0YWNoYCwgYGRldl9jaGFuZ2VfeGRwX2ZkYCwgYW5kIGBicGZfbXByb2dfYXR0YWNoYC4gVGhvc2UgbG9vayBwcm9taXNpbmcuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgYmVzdCBmdW5jdGlvbnMgdG8gdGFyZ2V0LiBGb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYCwgSSdtIGdvaW5nIHRvIGNvbmZpcm0gdGhhdCBgYnBmX21wcm9nX2F0dGFjaGAgaXMgaW5kZWVkIHRoZSByaWdodCBjYWxsLCBhbmQsIHllcywgaXQgc2VlbXMgdG8gYmUuIEdvb2QuXG5cbk5leHQgdXAsIFhEUDogYGRldl9jaGFuZ2VfeGRwX2ZkYCBpcyB0aGUgcHJpbWUgY2FuZGlkYXRlLiBZZXAsIHRoYXQncyB3aGF0IEkgdGhvdWdodC5cblxuQW5kIGZvciBYRFAgbGluayBhdHRhY2gsIGxldCdzIG1ha2Ugc3VyZSBgYnBmX3hkcF9saW5rX2F0dGFjaGAgaXMgdGhlIGJlc3QgY2hvaWNlLi4uIGFuZCB5ZXMsIHRoYXQncyB0aGUgb25lLlxuXG5Bbnkgb3RoZXIgZnVuY3Rpb25zIEkgc2hvdWxkIGNvbnNpZGVyPyBJIHNwb3R0ZWQgYGJwZl9wcm9nX2lzX29mZmxvYWRlZGAsIGJ1dCB0aGF0J3MgYW4gaW5saW5lIGZ1bmN0aW9uLCBzbyB0aGF0IGlzIG5vdCBnb2luZyB0byB3b3JrLlxuXG5Pa2F5LCBsZXQncyBzdW1tYXJpemUgYW5kIGZvcm1hbGl6ZSB0aGlzOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZSAtIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBvdXIgdGltZVxuKiAgICoqRm9jdXNTeW1ib2xzOioqIEkndmUgaWRlbnRpZmllZCB0aHJlZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGNsb3NlIGF0dGVudGlvbjpcbiAgICAqICAgYGJwZl9tcHJvZ19hdHRhY2hgXG4gICAgKiAgIGBkZXZfY2hhbmdlX3hkcF9mZGBcbiAgICAqICAgYGJwZl94ZHBfbGlua19hdHRhY2hgXG4qICAgKipFbmFibGVDb25maWdzOioqIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlc2UgY29uZmlncyBhcmUgb24sIHNvIHRoYXQgb3VyIGFuYWx5c2lzIGluY2x1ZGVzIGFsbCByZWxldmFudCBjb2RlIHBhdGhzOlxuICAgICogICBgQlBGX1NZU0NBTExgXG4gICAgKiAgIGBORVRgXG5cbkZpbmFsbHksIEkgd2lsbCBqdXN0IGRvdWJsZSBjaGVjayB0aGF0IGBkZXZfY2hhbmdlX3hkcF9mZGAgaXMgZGVmaW5pdGVseSBub24tc3RhdGljIC0ganVzdCBhIHNhbml0eSBjaGVjayBiZWZvcmUgSSBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTozNC42NjY4ODQxMjhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NzEyODc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldl9jaGFuZ2VfeGRwX2ZkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTEwNjc3PWludCBicGZfeGRwX2xpbmtfYXR0YWNoKGNvbnN0IHVuaW9uIGJwZl9hdHRyICphdHRyLCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xMDczNS0vKipcXG5uZXQvY29yZS9kZXYuYzoxMDczNjogKlxcdGRldl9jaGFuZ2VfeGRwX2ZkIC0gc2V0IG9yIGNsZWFyIGEgYnBmIHByb2dyYW0gZm9yIGEgZGV2aWNlIHJ4IHBhdGhcXG5uZXQvY29yZS9kZXYuYy0xMDczNy0gKlxcdEBkZXY6IGRldmljZVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTA3NDQtICovXFxubmV0L2NvcmUvZGV2LmM6MTA3NDU6aW50IGRldl9jaGFuZ2VfeGRwX2ZkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG5uZXQvY29yZS9kZXYuYy0xMDc0Ni1cXHRcXHQgICAgICBpbnQgZmQsIGludCBleHBlY3RlZF9mZCwgdTMyIGZsYWdzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTozNC43MTI1OTk3ODNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQyNjc5MDAwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGZyYW1lZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqTm9uLVN0YXRpYyBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvcmUgYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgc29tZXRoaW5nIGlzICpub3QqIHN0YXRpYy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdC4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGlmIGBicGZfbXByb2dfYXR0YWNoYCBpcyBub24tc3RhdGljLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIHRoaXMgYXJlYSwgYW5kIGEgc3RhdGljIGRlY2xhcmF0aW9uIHdvdWxkIGJlIGEgbWFqb3IgcG9pbnQuIEtub3dpbmcgdGhpcyB3b3VsZCBjbGFyaWZ5IGEgc2lnbmlmaWNhbnQgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzU3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6MzguMTM5MzkyMTU4WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc2ODQyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfbXByb2dfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvbXByb2cuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL21wcm9nLmM9MjI1PXN0YXRpYyBpbnQgYnBmX21wcm9nX2NoZWNrX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbi0tXFxua2VybmVsL2JwZi9tcHJvZy5jLTIzMi1cXG5rZXJuZWwvYnBmL21wcm9nLmM6MjMzOmludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxcbmtlcm5lbC9icGYvbXByb2cuYy0yMzQtXFx0XFx0ICAgICBzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICoqZW50cnlfbmV3LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTozOC4xODcxNjc5NDJaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyMDkyODM2MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYRFAgSW5zdGFsbGF0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGUgYGRldl94ZHBfaW5zdGFsbGAgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBub24tc3RhdGljLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGlmZmVyZW50IHdheXMgaXQgZ2V0cyBjYWxsZWQuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoLiBJJ3ZlIGFscmVhZHkgaWRlbnRpZmllZCBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBkaXJlY3RseSBjYWxsIGl0OiBgZGV2X3hkcF9hdHRhY2hgLCBgZGV2X3hkcF9hdHRhY2hfbGlua2AsIGBkZXZfeGRwX2RldGFjaF9saW5rYCwgYW5kIGBicGZfeGRwX2xpbmtfdXBkYXRlYC5cblxuYGJwZl94ZHBfbGlua191cGRhdGVgIGlzIGludGVyZXN0aW5nLCBzaW5jZSBpdCdzIHVzZWQgd2l0aGluIGBsaW5rX3VwZGF0ZWAgaW4gYGtlcm5lbC9icGYvc3lzY2FsbC5jYC4gQnV0IGBsaW5rX3VwZGF0ZWAgaXMgc3RhdGljLCB3aGljaCBibG9ja3MgZGlyZWN0IG1hbmlwdWxhdGlvbi4gV2hpbGUgYGJwZl94ZHBfbGlua191cGRhdGVgIGlzIGFzc2lnbmVkIHRvIGAudXBkYXRlX3Byb2dgIGluIGBicGZfeGRwX2xpbmtfbG9wc2AsIEkgbmVlZCBhIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBsaW5rX3VwZGF0ZWAgaXMgY2FsbGVkIGJ5IGBfX3N5c19icGZgLCB3aGljaCBpcyB0b28gZ2VuZXJhbCB0byB0YXJnZXQgZWZmZWN0aXZlbHkuXG5cbkhvd2V2ZXIsIHRoZSBtb3JlIHByb21pc2luZyBhdmVudWVzIGFyZSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYGRldl9jaGFuZ2VfeGRwX2ZkYCBhbmQgYGJwZl94ZHBfbGlua19hdHRhY2hgLCB3aGljaCBpbiB0dXJuLCBjYWxsIGBkZXZfeGRwX2luc3RhbGxgIGluZGlyZWN0bHkgdGhyb3VnaCBgZGV2X3hkcF9hdHRhY2hgIGFuZCBgZGV2X3hkcF9hdHRhY2hfbGlua2AgcmVzcGVjdGl2ZWx5LiBUaGlzIGxvb2tzIGxpa2UgYSBwcmFjdGljYWwgcGF0aCB0byBleHBsb3JlLiBGb2N1c2luZyBvbiB0aGVzZSB0d28gd2lsbCBlZmZlY3RpdmVseSBjb3ZlciB0aGUgZXhlY3V0aW9uIHBhdGhzIHRoYXQgbGVhZCB0byBgZGV2X3hkcF9pbnN0YWxsYC5cblxuTm93LCBJIHNob3VsZCBzaGlmdCBteSBhdHRlbnRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gc2lkZS4gVGhlIHRlc3Qgc3VpdGUgdXNlcyBgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZYC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGxpbmtlZCB0byB0aGlzIGZsYWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA1OjU5OjUwLjM5NjQ1NTAwOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1NzE1NjY5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCUEZfRl9YRFBfREVWX0JPVU5EX09OTFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9icGYuaD0xMTkyPWVudW0gYnBmX3BlcmZfZXZlbnRfdHlwZSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxMC1cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTMxMTovKiBJZiBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkgaXMgdXNlZCBpbiBCUEZfUFJPR19MT0FEIGNvbW1hbmQsIHRoZSBsb2FkZWRcXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxMi0gKiBwcm9ncmFtIGJlY29tZXMgZGV2aWNlLWJvdW5kIGJ1dCBjYW4gYWNjZXNzIFhEUCBtZXRhZGF0YS5cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmgtMTMxMy0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYnBmLmg6MTMxNDojZGVmaW5lIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWVxcdCgxVSBcXHUwMDNjXFx1MDAzYyA2KVxcbmluY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMzE1LVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmM9MjE5PWludCBicGZfcHJvZ19kZXZfYm91bmRfaW5pdChzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjI3LVxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIyODpcXHRpZiAoYXR0ci1cXHUwMDNlcHJvZ19mbGFncyBcXHUwMDI2IH4oQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZIHwgQlBGX0ZfWERQX0hBU19GUkFHUykpXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjI5LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxua2VybmVsL2JwZi9vZmZsb2FkLmMtMjM0LVxcdGlmIChhdHRyLVxcdTAwM2Vwcm9nX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfWERQX0hBU19GUkFHUyBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIzNTpcXHQgICAgIShhdHRyLVxcdTAwM2Vwcm9nX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKSlcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMzYtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yMzgtXFx0aWYgKGF0dHItXFx1MDAzZXByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1NDSEVEX0NMUyBcXHUwMDI2XFx1MDAyNlxcbmtlcm5lbC9icGYvb2ZmbG9hZC5jOjIzOTpcXHQgICAgYXR0ci1cXHUwMDNlcHJvZ19mbGFncyBcXHUwMDI2IEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSlcXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yNDAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5rZXJuZWwvYnBmL29mZmxvYWQuYy0yNDktXFxua2VybmVsL2JwZi9vZmZsb2FkLmM6MjUwOlxcdHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlb2ZmbG9hZF9yZXF1ZXN0ZWQgPSAhKGF0dHItXFx1MDAzZXByb2dfZmxhZ3MgXFx1MDAyNiBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkpO1xcbmtlcm5lbC9icGYvb2ZmbG9hZC5jLTI1MS1cXG4tLVxcbmtlcm5lbC9icGYvc3lzY2FsbC5jPTI5MDY9c3RhdGljIGludCBicGZfcHJvZ19sb2FkKHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0ciwgc3RydWN0IGJwZl9sb2dfYXR0ciAqYXR0cl9sb2cpXFxuLS1cXG5rZXJuZWwvYnBmL3N5c2NhbGwuYy0yOTI1LVxcdFxcdFxcdFxcdCBCUEZfRl9YRFBfSEFTX0ZSQUdTIHxcXG5rZXJuZWwvYnBmL3N5c2NhbGwuYzoyOTI2OlxcdFxcdFxcdFxcdCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkgfFxcbmtlcm5lbC9icGYvc3lzY2FsbC5jLTI5MjctXFx0XFx0XFx0XFx0IEJQRl9GX1RFU1RfUkVHX0lOVkFSSUFOVFMgfFxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jPTE1Njc9c3RhdGljIGludCBsb2FkX3dpdGhfb3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGJvb2wgZmlyc3RfcHJvZ19vbmx5KVxcbi0tXFxudG9vbHMvYnBmL2JwZnRvb2wvcHJvZy5jLTE3NzEtXFx0XFx0aWYgKHByb2dfdHlwZSA9PSBCUEZfUFJPR19UWVBFX1hEUCBcXHUwMDI2XFx1MDAyNiB4ZHBtZXRhX2lmaW5kZXgpIHtcXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmM6MTc3MjpcXHRcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHBvcywgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcXG50b29scy9icGYvYnBmdG9vbC9wcm9nLmMtMTc3My1cXHRcXHRcXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocG9zLCB4ZHBtZXRhX2lmaW5kZXgpO1xcbi0tXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oPTExOTI9ZW51bSBicGZfcGVyZl9ldmVudF90eXBlIHtcXG4tLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMzEwLVxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMzExOi8qIElmIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSBpcyB1c2VkIGluIEJQRl9QUk9HX0xPQUQgY29tbWFuZCwgdGhlIGxvYWRlZFxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMzEyLSAqIHByb2dyYW0gYmVjb21lcyBkZXZpY2UtYm91bmQgYnV0IGNhbiBhY2Nlc3MgWERQIG1ldGFkYXRhLlxcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaC0xMzEzLSAqL1xcbnRvb2xzL2luY2x1ZGUvdWFwaS9saW51eC9icGYuaDoxMzE0OiNkZWZpbmUgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZXFx0KDFVIFxcdTAwM2NcXHUwMDNjIDYpXFxudG9vbHMvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oLTEzMTUtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYz0xMD1zdGF0aWMgaW50IGxvYWRfZHVtbXlfcHJvZyhjaGFyICpuYW1lLCBfX3UzMiBpZmluZGV4LCBfX3UzMiBmbGFncylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTIxLSAqIC0gY3JlYXRlIGEgdmV0aCBkZXZpY2UgKGRvZXMgbm90IHN1cHBvcnQgb2ZmbG9hZCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM6MjI6ICogLSBjcmVhdGUgYSBkZXZpY2UgYm91bmQgWERQIHByb2dyYW0gd2l0aCBCUEZfRl9YRFBfREVWX0JPVU5EX09OTFkgZmxhZ1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTIzLSAqICAgKHN1Y2ggcHJvZ3JhbXMgYXJlIG5vdCBvZmZsb2FkZWQpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmM9Mjc9dm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTQzLVxcdH1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuYzo0NDpcXHRmZDEgPSBsb2FkX2R1bW15X3Byb2coXFxcImR1bW15MVxcXCIsIGlmaW5kZXgsIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmMtNDUtXFx0aWYgKCFBU1NFUlRfR0UoZmQxLCAwLCBcXFwibG9hZF9kdW1teV9wcm9nICMxXFxcIikpIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jPTcxPXZvaWQgdGVzdF94ZHBfZGV2X2JvdW5kX29ubHlfbGlua191cGRhdGUodm9pZClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jLTg4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jOjg5OlxcdGRldmJvdW5kX2ZkID0gbG9hZF9kdW1teV9wcm9nKFxcXCJkZXZib3VuZFxcXCIsIGlmaW5kZXgsIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmMtOTAtXFx0aWYgKCFBU1NFUlRfR0UoZGV2Ym91bmRfZmQsIDAsIFxcXCJsb2FkX2R1bW15X3Byb2cgZGV2Ym91bmRcXFwiKSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jPTM0OT12b2lkIHRlc3RfeGRwX21ldGFkYXRhKHZvaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfbWV0YWRhdGEuYy00MTAtXFx0YnBmX3Byb2dyYW1fX3NldF9pZmluZGV4KHByb2csIHJ4X2lmaW5kZXgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9tZXRhZGF0YS5jOjQxMTpcXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDEyLVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDE3LVxcdGJwZl9wcm9ncmFtX19zZXRfaWZpbmRleChuZXdfcHJvZywgcnhfaWZpbmRleCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmM6NDE4OlxcdGJwZl9wcm9ncmFtX19zZXRfZmxhZ3MobmV3X3Byb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX21ldGFkYXRhLmMtNDE5LVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jPTczNT1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jLTg0Ny1cXHRicGZfcHJvZ3JhbV9fc2V0X2lmaW5kZXgocHJvZywgaWZpbmRleCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jOjg0ODpcXHRicGZfcHJvZ3JhbV9fc2V0X2ZsYWdzKHByb2csIEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3hkcF9od19tZXRhZGF0YS5jLTg0OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6NTIuNzUzNjE3ODExWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMTYyNzg0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBYRFAgRnV6emluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gYEJQRl9GX1hEUF9ERVZfQk9VTkRfT05MWWAgaXMganVzdCBhIHNpbXBsZSBmbGFnLCBub3RoaW5nIGNvbXBsZXggY29uZmlndXJhdGlvbi13aXNlLiBUaGF0J3MgZ29vZC4gTm93LCBsZXQncyBzZWUgaWYgd2UgY2FuIGdldCBhd2F5IHdpdGgganVzdCB0aGUgc3RhbmRhcmQgYENPTkZJR19ORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBvcHRpb25zLiBZZXAsIHRob3NlIGFyZSBwcmV0dHkgbXVjaCBleHBlY3RlZCB0byBiZSB0aGVyZSwgc3RhbmRhcmQgc3R1ZmYuXG5cbkFscmlnaHQsIGhlcmUncyB3aGF0IEkndmUgZ290OlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogVHJ1ZSwgZGVmaW5pdGVseS5cbiogICAqKkZvY3VzU3ltYm9scyoqOiBgYnBmX21wcm9nX2F0dGFjaGAsIGBkZXZfY2hhbmdlX3hkcF9mZGAsIGFuZCBgYnBmX3hkcF9saW5rX2F0dGFjaGAuIFRoZXNlIGxvb2sgbGlrZSBwcmltZSB0YXJnZXRzLlxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBXZSdsbCBuZWVkIGBCUEZfU1lTQ0FMTGAgYW5kIGBORVRgLlxuXG5MZXQncyBkbyBhIHF1aWNrIHJlYWxpdHkgY2hlY2sgb24gdGhlc2UgZm9jdXMgc3ltYm9scywgZXNwZWNpYWxseSBgYnBmX21wcm9nX2F0dGFjaGAuIEkgd2FudCB0byBtYWtlIHN1cmUgd2UncmUgbm90IGhpdHRpbmcgaG90IHBhdGhzLiBBaCwgYXR0YWNoaW5nIGEgQlBGIHByb2dyYW0sIHRoYXQncyBkZWZpbml0ZWx5IGNvbnRyb2wgcGxhbmUsIG5vdCBkYXRhIHBsYW5lLiBTYW1lIGdvZXMgZm9yIGBkZXZfY2hhbmdlX3hkcF9mZGAgYW5kIGBicGZfeGRwX2xpbmtfYXR0YWNoYC4gR29vZCwgdGhlc2UgYXJlIGFsbCBjb250cm9sLXBsYW5lIG9wZXJhdGlvbnMsIG5vdCBpbiB0aGUgZGF0YS1wYXRoLlxuXG5SaWdodCwgSSdtIHNhdGlzZmllZC4gSSdsbCBsb2NrIGluIHRoZXNlIHJlc3VsdHMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODY1NCwiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6NTkuODY5ODk5NDJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAwOTcyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIk5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9tcHJvZ19hdHRhY2hcIixcbiAgICBcImRldl9jaGFuZ2VfeGRwX2ZkXCIsXG4gICAgXCJicGZfeGRwX2xpbmtfYXR0YWNoXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcyBjb3VsZCBiZSBhdHRhY2hlZCB0byB0aGUgWERQIHNvZnR3YXJlIHBhdGggYnkgYnlwYXNzaW5nIGNoZWNrcyBkdXJpbmcgbGluayB1cGRhdGVzLiBJdCBtb3ZlcyB0aGUgdmFsaWRhdGlvbiBjaGVja3MgaW50byBgZGV2X3hkcF9pbnN0YWxsYCBhbmQgYWRkcyBhIGNoZWNrIHRvIGBicGZfbXByb2dfY2hlY2tfcHJvZ2AgdG8gcmVqZWN0IG9mZmxvYWRlZCBwcm9ncmFtcyBmb3IgYEJQRl9QUk9HX1RZUEVfU0NIRURfQ0xTYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIEJQRiBhbmQgbmV0d29ya2luZyBsb2dpYyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSB0aGUgbm9uLXN0YXRpYyBjb250cm9sLXBsYW5lIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgdGhlc2UgY2hlY2tzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfbXByb2dfYXR0YWNoXCIsXG4gICAgXCJkZXZfY2hhbmdlX3hkcF9mZFwiLFxuICAgIFwiYnBmX3hkcF9saW5rX2F0dGFjaFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGRldmljZS1ib3VuZCBCUEYgcHJvZ3JhbXMgY291bGQgYmUgYXR0YWNoZWQgdG8gdGhlIFhEUCBzb2Z0d2FyZSBwYXRoIGJ5IGJ5cGFzc2luZyBjaGVja3MgZHVyaW5nIGxpbmsgdXBkYXRlcy4gSXQgbW92ZXMgdGhlIHZhbGlkYXRpb24gY2hlY2tzIGludG8gYGRldl94ZHBfaW5zdGFsbGAgYW5kIGFkZHMgYSBjaGVjayB0byBgYnBmX21wcm9nX2NoZWNrX3Byb2dgIHRvIHJlamVjdCBvZmZsb2FkZWQgcHJvZ3JhbXMgZm9yIGBCUEZfUFJPR19UWVBFX1NDSEVEX0NMU2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBCUEYgYW5kIG5ldHdvcmtpbmcgbG9naWMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgdGhlIG5vbi1zdGF0aWMgY29udHJvbC1wbGFuZSBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZXNlIGNoZWNrcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6NTkuOTQ1OTIwNDgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODM4MTQxOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDU6NTk6NTkuOTQ2NTYxMDAyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk4Mzc0ODk3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgdG8gcmVqZWN0IGludmFsaWQgQlBGIHByb2dyYW0gYXR0YWNobWVudHMgKGUuZy4sIGRldmljZS1ib3VuZCBvciBvZmZsb2FkZWQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlIG9yIFNDSEVEX0NMUykuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSBjb250cm9sIGZsb3cgYW5kIHZhbGlkYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgZG8gbm90IGFsbG9jYXRlIG5ldyBjb21wbGV4IHN0cnVjdHVyZXMsIGFuZCBkbyBub3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQW55IGJ1Z3MgcmVsYXRlZCB0byBtaXNzaW5nIHRoZXNlIGNoZWNrcyB3b3VsZCBtYW5pZmVzdCBhcyBjcmFzaGVzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciBpbmNvcnJlY3QgYmVoYXZpb3IsIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGJmMzMwZDcxZjgyNTY4NjNlMjc3NTdmMGQxODdjZWI4YjU3NmE4N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA1OjUyOjQ5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tcHJvZy5jIGIva2VybmVsL2JwZi9tcHJvZy5jXG5pbmRleCAxMzk0MTY4MDYyZTg1Li4wYjUwNDY0ZWM5MDJkIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tcHJvZy5jXG4rKysgYi9rZXJuZWwvYnBmL21wcm9nLmNcbkBAIC0yMjIsNiArMjIyLDE0IEBAIHN0YXRpYyBpbnQgYnBmX21wcm9nX3Bvc19hZnRlcihzdHJ1Y3QgYnBmX21wcm9nX2VudHJ5ICplbnRyeSxcbiBcdHJldHVybiB0dXBsZS1cdTAwM2Vwcm9nID8gLUVOT0VOVCA6IGJwZl9tcHJvZ190b3RhbChlbnRyeSk7XG4gfVxuIFxuK3N0YXRpYyBpbnQgYnBmX21wcm9nX2NoZWNrX3Byb2coY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxuK3tcbitcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFMgXHUwMDI2XHUwMDI2XG4rXHQgICAgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctXHUwMDNlYXV4KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gaW50IGJwZl9tcHJvZ19hdHRhY2goc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqZW50cnksXG4gXHRcdCAgICAgc3RydWN0IGJwZl9tcHJvZ19lbnRyeSAqKmVudHJ5X25ldyxcbiBcdFx0ICAgICBzdHJ1Y3QgYnBmX3Byb2cgKnByb2dfbmV3LCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmssXG5AQCAtMjM3LDYgKzI0NSw5IEBAIGludCBicGZfbXByb2dfYXR0YWNoKHN0cnVjdCBicGZfbXByb2dfZW50cnkgKmVudHJ5LFxuIFx0fTtcbiBcdGludCByZXQsIGlkeCA9IC1FUkFOR0UsIHRpZHg7XG4gXG4rXHRyZXQgPSBicGZfbXByb2dfY2hlY2tfcHJvZyhwcm9nX25ldyk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuIFx0aWYgKHJldmlzaW9uIFx1MDAyNlx1MDAyNiByZXZpc2lvbiAhPSBicGZfbXByb2dfcmV2aXNpb24oZW50cnkpKVxuIFx0XHRyZXR1cm4gLUVTVEFMRTtcbiBcdGlmIChicGZfbXByb2dfZXhpc3RzKGVudHJ5LCBwcm9nX25ldykpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xuaW5kZXggYWYyNjBmZjU0NjJhNi4uMzI4MWYyMjZjMWU1MiAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4rKysgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTEwMzI5LDYgKzEwMzI5LDIxIEBAIHN0YXRpYyBpbnQgZGV2X3hkcF9pbnN0YWxsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGVudW0gYnBmX3hkcF9tb2RlIG1vZGUsXG4gXG4gXHRuZXRkZXZfYXNzZXJ0X2xvY2tlZF9vcHNfY29tcGF0KGRldik7XG4gXG4rXHRpZiAocHJvZykge1xuK1x0XHRpZiAobW9kZSAhPSBYRFBfTU9ERV9IVyBcdTAwMjZcdTAwMjYgYnBmX3Byb2dfaXNfb2ZmbG9hZGVkKHByb2ctXHUwMDNlYXV4KSkge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJVc2luZyBvZmZsb2FkZWQgcHJvZ3JhbSB3aXRob3V0IEhXX01PREUgZmxhZyBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cdTAwM2VhdXgpIFx1MDAyNlx1MDAyNiAhYnBmX29mZmxvYWRfZGV2X21hdGNoKHByb2csIGRldikpIHtcbitcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiUHJvZ3JhbSBib3VuZCB0byBkaWZmZXJlbnQgZGV2aWNlXCIpO1xuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdGlmIChicGZfcHJvZ19pc19kZXZfYm91bmQocHJvZy1cdTAwM2VhdXgpIFx1MDAyNlx1MDAyNiBtb2RlID09IFhEUF9NT0RFX1NLQikge1xuK1x0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJDYW4ndCBhdHRhY2ggZGV2aWNlLWJvdW5kIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZVwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0fVxuK1xuIFx0aWYgKGRldi1cdTAwM2VjZmctXHUwMDNlaGRzX2NvbmZpZyA9PSBFVEhUT09MX1RDUF9EQVRBX1NQTElUX0VOQUJMRUQgXHUwMDI2XHUwMDI2XG4gXHQgICAgcHJvZyBcdTAwMjZcdTAwMjYgIXByb2ctXHUwMDNlYXV4LVx1MDAzZXhkcF9oYXNfZnJhZ3MpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcInVuYWJsZSB0byBpbnN0YWxsIFhEUCB0byBkZXZpY2UgdXNpbmcgdGNwLWRhdGEtc3BsaXRcIik7XG5AQCAtMTA0ODAsMTggKzEwNDk1LDYgQEAgc3RhdGljIGludCBkZXZfeGRwX2F0dGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2tcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiTmF0aXZlIGFuZCBnZW5lcmljIFhEUCBjYW4ndCBiZSBhY3RpdmUgYXQgdGhlIHNhbWUgdGltZVwiKTtcbiBcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiBcdFx0fVxuLVx0XHRpZiAoIW9mZmxvYWQgXHUwMDI2XHUwMDI2IGJwZl9wcm9nX2lzX29mZmxvYWRlZChuZXdfcHJvZy1cdTAwM2VhdXgpKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlVzaW5nIG9mZmxvYWRlZCBwcm9ncmFtIHdpdGhvdXQgSFdfTU9ERSBmbGFnIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbi1cdFx0aWYgKGJwZl9wcm9nX2lzX2Rldl9ib3VuZChuZXdfcHJvZy1cdTAwM2VhdXgpIFx1MDAyNlx1MDAyNiAhYnBmX29mZmxvYWRfZGV2X21hdGNoKG5ld19wcm9nLCBkZXYpKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIlByb2dyYW0gYm91bmQgdG8gZGlmZmVyZW50IGRldmljZVwiKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuLVx0XHRpZiAoYnBmX3Byb2dfaXNfZGV2X2JvdW5kKG5ld19wcm9nLVx1MDAzZWF1eCkgXHUwMDI2XHUwMDI2IG1vZGUgPT0gWERQX01PREVfU0tCKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkNhbid0IGF0dGFjaCBkZXZpY2UtYm91bmQgcHJvZ3JhbXMgaW4gZ2VuZXJpYyBtb2RlXCIpO1xuLVx0XHRcdHJldHVybiAtRUlOVkFMO1xuLVx0XHR9XG4gXHRcdGlmIChuZXdfcHJvZy1cdTAwM2VleHBlY3RlZF9hdHRhY2hfdHlwZSA9PSBCUEZfWERQX0RFVk1BUCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJCUEZfWERQX0RFVk1BUCBwcm9ncmFtcyBjYW4gbm90IGJlIGF0dGFjaGVkIHRvIGEgZGV2aWNlXCIpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL3hkcF9kZXZfYm91bmRfb25seS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmNcbmluZGV4IDdkZDE4YzZkMDZjNjAuLjRhMTNmOGVjNDMwMDkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy94ZHBfZGV2X2JvdW5kX29ubHkuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMveGRwX2Rldl9ib3VuZF9vbmx5LmNcbkBAIC0xLDkgKzEsMTEgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICNpbmNsdWRlIFx1MDAzY25ldC9pZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfbGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0d29ya19oZWxwZXJzLmhcdTAwM2VcbiBcbiAjZGVmaW5lIExPQ0FMX05FVE5TIFwieGRwX2Rldl9ib3VuZF9vbmx5X25ldG5zXCJcbisjZGVmaW5lIExJTktfVVBEQVRFX05FVE5TIFwieGRwX2Rldl9ib3VuZF9vbmx5X2x1X25ldG5zXCJcbiBcbiBzdGF0aWMgaW50IGxvYWRfZHVtbXlfcHJvZyhjaGFyICpuYW1lLCBfX3UzMiBpZmluZGV4LCBfX3UzMiBmbGFncylcbiB7XG5AQCAtNTksMyArNjEsNTAgQEAgdm9pZCB0ZXN0X3hkcF9kZXZfYm91bmRfb25seV9vZmZkZXYodm9pZClcbiBcdCAqL1xuIFx0U1lTX05PRkFJTChcImlwIG5ldG5zIGRlbCBcIiBMT0NBTF9ORVROUyk7XG4gfVxuK1xuKy8qIEEgZGV2aWNlLWJvdW5kIHByb2dyYW0gbXVzdCBub3QgcnVuIG9uIHRoZSBYRFAgc29mdHdhcmUgcGF0aC5cbisgKiBkZXZfeGRwX2F0dGFjaCgpIHJlamVjdGVkIHN1Y2ggcHJvZ3JhbXMsIGJ1dCBicGZfeGRwX2xpbmtfdXBkYXRlKCkgcmVhY2hlc1xuKyAqIGRldl94ZHBfaW5zdGFsbCgpIGRpcmVjdGx5IGFuZCBieXBhc3NlcyBpdCwgc28gdGhlIGNoZWNrIGhhcyB0byBsaXZlIGluXG4rICogZGV2X3hkcF9pbnN0YWxsKCkuIENyZWF0ZSBhIGdlbmVyaWMgKFNLQikgWERQIGxpbmsgd2l0aCBhIG5vcm1hbCBwcm9ncmFtLFxuKyAqIHRoZW4gdHJ5IHRvIHN3YXAgaW4gYSBkZXZpY2UtYm91bmQgcHJvZ3JhbSB2aWEgQlBGX0xJTktfVVBEQVRFLlxuKyAqL1xuK3ZvaWQgdGVzdF94ZHBfZGV2X2JvdW5kX29ubHlfbGlua191cGRhdGUodm9pZClcbit7XG4rXHRMSUJCUEZfT1BUUyhicGZfbGlua19jcmVhdGVfb3B0cywgbG9wdHMsIC5mbGFncyA9IFhEUF9GTEFHU19TS0JfTU9ERSk7XG4rXHRpbnQgYmFzZV9mZCA9IC0xLCBkZXZib3VuZF9mZCA9IC0xLCBsaW5rX2ZkID0gLTE7XG4rXHRzdHJ1Y3QgbnN0b2tlbiAqdG9rID0gTlVMTDtcbitcdF9fdTMyIGlmaW5kZXg7XG4rXHRpbnQgZXJyO1xuK1xuK1x0U1lTKG91dCwgXCJpcCBuZXRucyBhZGQgXCIgTElOS19VUERBVEVfTkVUTlMpO1xuK1x0dG9rID0gb3Blbl9uZXRucyhMSU5LX1VQREFURV9ORVROUyk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIodG9rLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0U1lTKG91dCwgXCJpcCBsaW5rIGFkZCBldGg0MiB0eXBlIHZldGhcIik7XG4rXHRpZmluZGV4ID0gaWZfbmFtZXRvaW5kZXgoXCJldGg0MlwiKTtcbitcdGlmICghQVNTRVJUX05FUShpZmluZGV4LCAwLCBcImlmX25hbWV0b2luZGV4XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdGRldmJvdW5kX2ZkID0gbG9hZF9kdW1teV9wcm9nKFwiZGV2Ym91bmRcIiwgaWZpbmRleCwgQlBGX0ZfWERQX0RFVl9CT1VORF9PTkxZKTtcbitcdGlmICghQVNTRVJUX0dFKGRldmJvdW5kX2ZkLCAwLCBcImxvYWRfZHVtbXlfcHJvZyBkZXZib3VuZFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRiYXNlX2ZkID0gbG9hZF9kdW1teV9wcm9nKFwiYmFzZVwiLCAwLCAwKTtcbitcdGlmICghQVNTRVJUX0dFKGJhc2VfZmQsIDAsIFwibG9hZF9kdW1teV9wcm9nIGJhc2VcIikpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bGlua19mZCA9IGJwZl9saW5rX2NyZWF0ZShiYXNlX2ZkLCBpZmluZGV4LCBCUEZfWERQLCBcdTAwMjZsb3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9HRShsaW5rX2ZkLCAwLCBcImJwZl9saW5rX2NyZWF0ZVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRlcnIgPSBicGZfbGlua191cGRhdGUobGlua19mZCwgZGV2Ym91bmRfZmQsIE5VTEwpO1xuK1x0QVNTRVJUX0VRKGVyciwgLUVJTlZBTCwgXCJsaW5rX3VwZGF0ZSBkZXZpY2UtYm91bmQgcmVqZWN0ZWRcIik7XG4rXG4rb3V0OlxuK1x0Y2xvc2UobGlua19mZCk7XG4rXHRjbG9zZShiYXNlX2ZkKTtcbitcdGNsb3NlKGRldmJvdW5kX2ZkKTtcbitcdGNsb3NlX25ldG5zKHRvayk7XG4rXHRTWVNfTk9GQUlMKFwiaXAgbmV0bnMgZGVsIFwiIExJTktfVVBEQVRFX05FVE5TKTtcbit9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwNTo1OTo1OS45NDY1NjIzNjJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgzNzQ2NTU2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBc3Nlc3NtZW50IG9mIEJQRiBQcm9ncmFtIEF0dGFjaG1lbnQgQ29udHJvbCBGbG93IENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHJldmlld2VkIHRoZXNlIGNoYW5nZXMgYW5kIEknbSBzZWVpbmcgdGhhdCB0aGV5J3JlIHByaW1hcmlseSBmb2N1c2VkIG9uIHJlaW5mb3JjaW5nIGNvbnRyb2wgZmxvdyBmb3IgQlBGIHByb2dyYW0gYXR0YWNobWVudC4gU3BlY2lmaWNhbGx5LCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgY29uY2VudHJhdGVkIGluIGBrZXJuZWwvYnBmL21wcm9nLmNgIGFuZCBgbmV0L2NvcmUvZGV2LmNgLCBhZGRpbmcgZXhwbGljaXQgY2hlY2tzIHRvIHZhbGlkYXRlIG9mZmxvYWRlZCBhbmQgZGV2aWNlLWJvdW5kIEJQRiBwcm9ncmFtcy5cblxuSW4gYGtlcm5lbC9icGYvbXByb2cuY2AsIGEgY2hlY2sgaGFzIGJlZW4gYWRkZWQgd2l0aGluIGBicGZfbXByb2dfY2hlY2tfcHJvZygpYCB0byBwcmV2ZW50IGF0dGFjaGluZyBvZmZsb2FkZWQgcHJvZ3JhbXMgb2YgdHlwZSBgQlBGX1BST0dfVFlQRV9TQ0hFRF9DTFNgLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cblRoZSBtb3JlIHNpZ25pZmljYW50IGNoYW5nZXMgYXBwZWFyIGluIGBuZXQvY29yZS9kZXYuY2AsIHdoZXJlIGF0dGFjaG1lbnQgY2hlY2tzIGhhdmUgYmVlbiBtb3ZlZCBmcm9tIGBkZXZfeGRwX2F0dGFjaGAgdG8gYGRldl94ZHBfaW5zdGFsbGAuIFRoaXMgbW92ZSBlbnN1cmVzIHRoYXQgdGhlIGNoZWNrcyBhcmUgYWx3YXlzIHBlcmZvcm1lZCwgZXZlbiB3aGVuIHRoZSBgYnBmX3hkcF9saW5rX3VwZGF0ZSgpYCBmdW5jdGlvbiBkaXJlY3RseSBjYWxscyBgZGV2X3hkcF9pbnN0YWxsKClgLiBIZXJlLCB3ZSBzZWUgdGhyZWUga2V5IHZhbGlkYXRpb24gY2hlY2tzOiAoMSkgaWYgYW4gb2ZmbG9hZGVkIHByb2dyYW0gaXMgYmVpbmcgdXNlZCB3aXRob3V0IHRoZSBgSFdfTU9ERWAgZmxhZywgaXQncyByZWplY3RlZDsgKDIpIGlmIHRoZSBwcm9ncmFtIGlzIGRldmljZS1ib3VuZCBidXQgZG9lc24ndCBtYXRjaCB0aGUgdGFyZ2V0IGRldmljZSwgaXQncyByZWplY3RlZDsgYW5kICgzKSBkZXZpY2UtYm91bmQgcHJvZ3JhbXMgYXJlIG5vdCBhbGxvd2VkIGluIGBYRFBfTU9ERV9TS0JgIChnZW5lcmljIG1vZGUpLlxuXG5Db25zaWRlcmluZyB0aGVzZSBjaGFuZ2VzIGFzIGEgd2hvbGUsIGl0J3MgY2xlYXIgdGhhdCB0aGUgYWltIGlzIHRvIHByb2FjdGl2ZWx5IHByZXZlbnQgcG90ZW50aWFsbHkgaW52YWxpZCBvciBwcm9ibGVtYXRpYyBCUEYgcHJvZ3JhbSBjb25maWd1cmF0aW9ucy4gV2UncmUgdGFsa2luZyBhYm91dCBndWFyZGluZyBhZ2FpbnN0IGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byBjcmFzaGVzLCBpbmNvcnJlY3QgYmVoYXZpb3IsIG9yIGV2ZW4gc3VidGxlIGlzc3Vlcy4gVGhlc2UgY2hlY2tzIGFyZSBlbnRpcmVseSBmb2N1c2VkIG9uIGNvbnRyb2wgZmxvdzsgdGhlcmUgYXJlIG5vIGludHJvZHVjdGlvbnMgb2YgbmV3IGRhdGEgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2UsIG5vIGNvbXBsZXggYWxsb2NhdGlvbnMgdGhhdCBtaWdodCBwcmVzZW50IG1lbW9yeSBtYW5hZ2VtZW50IHJpc2tzLCBhbmQgY3JpdGljYWxseSwgbm8gb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgaXNzdWUgYmVpbmcgYWRkcmVzc2VkIOKAkyBsaWtlbHkgYW4gaW52YWxpZCBjb25maWd1cmF0aW9uIG9yIGEgY3Jhc2ggZHVlIHRvIGEgc29mdHdhcmUgZXhlY3V0aW9uIG9mIGEgZGV2aWNlLWJvdW5kIHByb2dyYW0g4oCTIEkgZG9uJ3Qgc2VlIGFueSBjb21wZWxsaW5nIG5lZWQgdG8gdXNlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCB0aGUgc3RhbmRhcmQga2VybmVsIGNoZWNrcyBzaG91bGQgYmUgZW50aXJlbHkgc3VmZmljaWVudCBmb3IgaWRlbnRpZnlpbmcgYW55IHByb2JsZW1zIHRoYXQgY291bGQgYXJpc2UgZnJvbSB0aGVzZSBjaGFuZ2VzLiBUaGUgZm9jdXMgaGVyZSBpcyBvbiBydW50aW1lIHZhbGlkYXRpb24sIHJhdGhlciB0aGFuIGRlZXAgbWVtb3J5IGludGVncml0eSwgc28gS01TQU4gc2VlbXMgbGlrZSBvdmVya2lsbCBpbiB0aGlzIGluc3RhbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDI2LCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA2OjAwOjA5Ljc4NDAzMDk3OFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyB0byByZWplY3QgaW52YWxpZCBCUEYgcHJvZ3JhbSBhdHRhY2htZW50cyAoZS5nLiwgZGV2aWNlLWJvdW5kIG9yIG9mZmxvYWRlZCBwcm9ncmFtcyBpbiBnZW5lcmljIG1vZGUgb3IgU0NIRURfQ0xTKS4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IGNvbnRyb2wgZmxvdyBhbmQgdmFsaWRhdGlvbiBsb2dpYy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBkbyBub3QgYWxsb2NhdGUgbmV3IGNvbXBsZXggc3RydWN0dXJlcywgYW5kIGRvIG5vdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbnkgYnVncyByZWxhdGVkIHRvIG1pc3NpbmcgdGhlc2UgY2hlY2tzIHdvdWxkIG1hbmlmZXN0IGFzIGNyYXNoZXMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIGluY29ycmVjdCBiZWhhdmlvciwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHRvIHJlamVjdCBpbnZhbGlkIEJQRiBwcm9ncmFtIGF0dGFjaG1lbnRzIChlLmcuLCBkZXZpY2UtYm91bmQgb3Igb2ZmbG9hZGVkIHByb2dyYW1zIGluIGdlbmVyaWMgbW9kZSBvciBTQ0hFRF9DTFMpLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgY29udHJvbCBmbG93IGFuZCB2YWxpZGF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIGRvIG5vdCBhbGxvY2F0ZSBuZXcgY29tcGxleCBzdHJ1Y3R1cmVzLCBhbmQgZG8gbm90IGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEFueSBidWdzIHJlbGF0ZWQgdG8gbWlzc2luZyB0aGVzZSBjaGVja3Mgd291bGQgbWFuaWZlc3QgYXMgY3Jhc2hlcywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgaW5jb3JyZWN0IGJlaGF2aW9yLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowsfl9s[1] Phase: Succeeded StartedAt: 2026-08-10 06:00:16 +0000 UTC FinishedAt: 2026-08-10 06:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 06:00:16 +0000 UTC FinishedAt: 2026-08-10 06:00:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2] Phase: Succeeded StartedAt: 2026-08-10 06:00:16 +0000 UTC FinishedAt: 2026-08-10 09:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 06:00:16 +0000 UTC FinishedAt: 2026-08-10 09:49:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 06:00:16 +0000 UTC FinishedAt: 2026-08-10 06:00:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 06:00:16 +0000 UTC FinishedAt: 2026-08-10 06:00:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowsfl9s/series-workflowsfl9s-convert-artifact-1440063158/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 06:00:26 +0000 UTC FinishedAt: 2026-08-10 06:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 06:00:26 +0000 UTC FinishedAt: 2026-08-10 06:18:00 +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:*1418d551-48a2-4a9f-bcb8-ee73c1ebc344,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-workflowsfl9s/series-workflowsfl9s-convert-artifact-1440063158/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": "81b7f858-a35c-4f60-b2d1-b8aab8636930", "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-workflowsfl9s/series-workflowsfl9s-build-action-1361495500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 06:00:26 +0000 UTC FinishedAt: 2026-08-10 06:17:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1418d551-48a2-4a9f-bcb8-ee73c1ebc344,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-workflowsfl9s/series-workflowsfl9s-convert-artifact-1440063158/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": "81b7f858-a35c-4f60-b2d1-b8aab8636930", "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-workflowsfl9s/series-workflowsfl9s-build-action-1361495500/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 06:18:00 +0000 UTC FinishedAt: 2026-08-10 06:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 06:18:00 +0000 UTC FinishedAt: 2026-08-10 06:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 06:18:00 +0000 UTC FinishedAt: 2026-08-10 06:18:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 06:18:00 +0000 UTC FinishedAt: 2026-08-10 06:18:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflowsfl9s/series-workflowsfl9s-convert-artifact-3819770441/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 06:18:10 +0000 UTC FinishedAt: 2026-08-10 06:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 06:18:10 +0000 UTC FinishedAt: 2026-08-10 06:20:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*81b7f858-a35c-4f60-b2d1-b8aab8636930,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-workflowsfl9s/series-workflowsfl9s-build-action-1361495500/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-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 06:20:16 +0000 UTC FinishedAt: 2026-08-10 06:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 06:20:16 +0000 UTC FinishedAt: 2026-08-10 06:20:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 06:20:16 +0000 UTC FinishedAt: 2026-08-10 06:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 06:20:16 +0000 UTC FinishedAt: 2026-08-10 06:41: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:*1418d551-48a2-4a9f-bcb8-ee73c1ebc344,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-workflowsfl9s/series-workflowsfl9s-convert-artifact-3819770441/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": "0ecf5ae2-5c54-4763-b4ad-c8733cab13e1", "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-workflowsfl9s/series-workflowsfl9s-build-action-1437770021/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 06:20:16 +0000 UTC FinishedAt: 2026-08-10 06:41:34 +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:*1418d551-48a2-4a9f-bcb8-ee73c1ebc344,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-workflowsfl9s/series-workflowsfl9s-convert-artifact-3819770441/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": "0ecf5ae2-5c54-4763-b4ad-c8733cab13e1", "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-workflowsfl9s/series-workflowsfl9s-build-action-1437770021/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 06:41:45 +0000 UTC FinishedAt: 2026-08-10 06:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 06:41:45 +0000 UTC FinishedAt: 2026-08-10 06:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 06:41:45 +0000 UTC FinishedAt: 2026-08-10 06:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 06:41:45 +0000 UTC FinishedAt: 2026-08-10 06:43:59 +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:*0ecf5ae2-5c54-4763-b4ad-c8733cab13e1,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-workflowsfl9s/series-workflowsfl9s-build-action-1437770021/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-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 06:44:09 +0000 UTC FinishedAt: 2026-08-10 09:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 06:44:09 +0000 UTC FinishedAt: 2026-08-10 09:49:17 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},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:*81b7f858-a35c-4f60-b2d1-b8aab8636930,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0ecf5ae2-5c54-4763-b4ad-c8733cab13e1,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-workflowsfl9s/series-workflowsfl9s-build-action-1361495500/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-workflowsfl9s/series-workflowsfl9s-build-action-1437770021/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 06:44:09 +0000 UTC FinishedAt: 2026-08-10 06:44:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 06:44:09 +0000 UTC FinishedAt: 2026-08-10 06:44:13 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},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-workflowsfl9s/series-workflowsfl9s-convert-artifact-388568478/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 06:44:09 +0000 UTC FinishedAt: 2026-08-10 06:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 06:44:09 +0000 UTC FinishedAt: 2026-08-10 06:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 06:44:09 +0000 UTC FinishedAt: 2026-08-10 06:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 06:44:19 +0000 UTC FinishedAt: 2026-08-10 09:49:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsfl9s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_mprog_attach","dev_change_xdp_fd","bpf_xdp_link_attach"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d114bb98936770c501c958bf2bc5fb6b7c0bad7b","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL","NET"],"series_id":"59bcab85-7644-4d49-a5b3-a4b5e3f49cb2","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 06:44:19 +0000 UTC FinishedAt: 2026-08-10 09:49:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*81b7f858-a35c-4f60-b2d1-b8aab8636930,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0ecf5ae2-5c54-4763-b4ad-c8733cab13e1,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-workflowsfl9s/series-workflowsfl9s-build-action-1361495500/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-workflowsfl9s/series-workflowsfl9s-build-action-1437770021/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-workflowsfl9s/series-workflowsfl9s-convert-artifact-388568478/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,}