Name: series-workflow9mk4m Phase: Succeeded StartedAt: 2026-08-19 11:15:18 +0000 UTC FinishedAt: 2026-08-19 13:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[0] Phase: Succeeded StartedAt: 2026-08-19 11:15:18 +0000 UTC FinishedAt: 2026-08-19 12:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[0].run-triage Phase: Succeeded StartedAt: 2026-08-19 11:15:18 +0000 UTC FinishedAt: 2026-08-19 12:06:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5453bc3279e9f8578ac3e534d476240e40c879e1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_ATH", "ATH12K" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5453bc3279e9f8578ac3e534d476240e40c879e1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_ATH", "ATH12K" ], "series_id": "d0b84d19-3cb6-42e1-a402-147373c7b6a1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath12k_pci_probe", "ath12k_pci_config_irq", "ath12k_pci_ext_irq_config" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfQVRIJiMzNDssCiAgICAmIzM0O0FUSDEySyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDEya19wY2lfcHJvYmUmIzM0OywKICAgICYjMzQ7YXRoMTJrX3BjaV9jb25maWdfaXJxJiMzNDssCiAgICAmIzM0O2F0aDEya19wY2lfZXh0X2lycV9jb25maWcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBhbmQgaW5jb3JyZWN0IGNsZWFudXAgbG9naWMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGluIHRoZSBhdGgxMmsgZHJpdmVyLiBJdCByZWZhY3RvcnMgdGhlIElSUSBmcmVlaW5nIGZ1bmN0aW9ucyB0byBhY2NlcHQgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIElSUXMvZ3JvdXBzIGFuZCBlbnN1cmVzIHRoYXQgb25seSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFyZSBmcmVlZC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW52YWxpZCBmcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVha3MgaW4gdGhlc2UgcGF0aHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiAoYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCkgb2YgdGhlIGF0aDEyayBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHRoZSBzeXprYWxsZXIgUENJIGZ1enplciBpbmplY3RpbmcgYSB2aXJ0dWFsIGRldmljZSBhbmQgY2F1c2luZyBhbGxvY2F0aW9uIGZhaWx1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzQ5MDY1MTUyMzY0M2FhODZhYjhlNjgzOGM2M2ZlMTRlZmE5ZDMyM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDEyOjAxOjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXG5pbmRleCA2NDQxOTI3YjUzODIyLi5hZjBlODgyZmQwYjUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1xuQEAgLTMxMywxMSAmIzQzOzMxMywyNCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX3N3X3Jlc2V0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgcG93ZXJfb24pXG4gXHRhdGgxMmtfbWhpX3NldF9taGljdHJsX3Jlc2V0KGFiKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2NlX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgbnVtX2NlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIGlycV9pZHg7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpcnFfaWR4ID0gQVRIMTJLX1BDSV9JUlFfQ0UwX09GRlNFVCAmIzQzOyBpO1xuJiM0MztcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgbnVtX2V4dF9pcnFfZ3JwKVxuIHtcbiBcdGludCBpLCBqO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2V4dF9pcnFfZ3JwOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4gXG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG5AQCAtMzMwLDE2ICYjNDM7MzQzLDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4ge1xuLVx0aW50IGksIGlycV9pZHg7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpcnFfaWR4ID0gQVRIMTJLX1BDSV9JUlFfQ0UwX09GRlNFVCAmIzQzOyBpO1xuLVx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbi1cdH1cbi1cbi1cdGF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiKTtcbiYjNDM7XHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQpO1xuJiM0MztcdGF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiLCBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfY2VfaXJxX2VuYWJsZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MTYgY2VfaWQpXG5AQCAtNTk1LDggJiM0Mzs2MDAsNiBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBcdFx0XHRpcnEgPSBhdGgxMmtfcGNpX2dldF9tc2lfaXJxKGFiLVx1MDAzZWRldiwgdmVjdG9yKTtcbiBcbi1cdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuLVxuIFx0XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUENJLFxuIFx0XHRcdFx0ICAgXCYjMzQ7aXJxOiVkIGdyb3VwOiVkXFxuXCYjMzQ7LCBpcnEsIGkpO1xuIFxuQEAgLTYwNywyMiAmIzQzOzYxMCwyNCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgcmVxdWVzdCBpcnEgJWQ6ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICB2ZWN0b3IsIHJldCk7XG4tXHRcdFx0XHRnb3RvIGZhaWxfcmVxdWVzdDtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0Zm9yIChuID0gMDsgbiBcdTAwM2MgajsgbiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tuXV0sIGlycV9ncnApO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXS5uYXBpKTtcbiYjNDM7XHRcdFx0XHRmcmVlX25ldGRldihhYi1cdTAwM2VleHRfaXJxX2dycFtpXS5uYXBpX25kZXYpO1xuJiM0MztcdFx0XHRcdGdvdG8gZmFpbF9hbGxvY2F0ZTtcbiBcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuIFx0XHR9XG4gXHRcdGF0aDEya19wY2lfZXh0X2dycF9kaXNhYmxlKGlycV9ncnApO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZmFpbF9yZXF1ZXN0OlxuLVx0LyogaSAtXHUwMDNlbmFwaV9uZGV2IHdhcyBwcm9wZXJseSBhbGxvY2F0ZWQuIEZyZWUgaXQgYWxzbyAqL1xuLVx0aSAmIzQzOz0gMTtcbiBmYWlsX2FsbG9jYXRlOlxuLVx0Zm9yIChuID0gMDsgbiBcdTAwM2MgaTsgbiYjNDM7JiM0MzspIHtcbi1cdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW25dO1xuLVx0XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4tXHR9XG4mIzQzO1x0YXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoYWIsIGkpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjcxLDYgJiM0Mzs2NzYsOCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxcblwmIzM0OyxcbiBcdFx0XHRcdCAgIGlycV9pZHgsIHJldCk7XG4mIzQzO1xuJiM0MztcdFx0XHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXG5AQCAtNjgxLDggJiM0Mzs2ODgsMTAgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdH1cbiBcbiBcdHJldCA9IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoYWIpO1xuLVx0aWYgKHJldClcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTiYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9BVEgmIzM0OywKICAgICYjMzQ7QVRIMTJLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTJrX3BjaV9wcm9iZSYjMzQ7LAogICAgJiMzNDthdGgxMmtfcGNpX2NvbmZpZ19pcnEmIzM0OywKICAgICYjMzQ7YXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gKGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2ApIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgaW5qZWN0aW5nIGEgdmlydHVhbCBkZXZpY2UgYW5kIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0OTA2NTE1MjM2NDNhYTg2YWI4ZTY4MzhjNjNmZTE0ZWZhOWQzMjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMjowMTo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jCmluZGV4IDY0NDE5MjdiNTM4MjIuLmFmMGU4ODJmZDBiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYwpAQCAtMzEzLDExICYjNDM7MzEzLDI0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfc3dfcmVzZXQoc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBwb3dlcl9vbikKIAlhdGgxMmtfbWhpX3NldF9taGljdHJsX3Jlc2V0KGFiKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fY2UpCiYjNDM7ewomIzQzOwlpbnQgaSwgaXJxX2lkeDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9jZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpcnFfaWR4ID0gQVRIMTJLX1BDSV9JUlFfQ0UwX09GRlNFVCAmIzQzOyBpOwomIzQzOwkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2lkeF0sICZhbXA7YWItJmd0O2NlLmNlX3BpcGVbaV0pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fZXh0X2lycV9ncnApCiB7CiAJaW50IGksIGo7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fZXh0X2lycV9ncnA7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBhdGgxMmtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKIAogCQlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspCkBAIC0zMzAsMTYgJiM0MzszNDMsOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiB7Ci0JaW50IGksIGlycV9pZHg7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgYWItJmd0O2h3X3BhcmFtcy0mZ3Q7Y2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCi0JCQljb250aW51ZTsKLQkJaXJxX2lkeCA9IEFUSDEyS19QQ0lfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTsKLQkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2lkeF0sICZhbXA7YWItJmd0O2NlLmNlX3BpcGVbaV0pOwotCX0KLQotCWF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiKTsKJiM0MzsJYXRoMTJrX3BjaV9mcmVlX2NlX2lycShhYiwgYWItJmd0O2h3X3BhcmFtcy0mZ3Q7Y2VfY291bnQpOwomIzQzOwlhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVgpOwogfQogCiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NlX2lycV9lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IGNlX2lkKQpAQCAtNTk1LDggJiM0Mzs2MDAsNiBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYikKIAogCQkJaXJxID0gYXRoMTJrX3BjaV9nZXRfbXNpX2lycShhYi0mZ3Q7ZGV2LCB2ZWN0b3IpOwogCi0JCQlhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSA9IGlycTsKLQogCQkJYXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19QQ0ksCiAJCQkJICAgJiMzNDtpcnE6JWQgZ3JvdXA6JWRcbiYjMzQ7LCBpcnEsIGkpOwogCkBAIC02MDcsMjIgJiM0Mzs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiAJCQlpZiAocmV0KSB7CiAJCQkJYXRoMTJrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdCBpcnEgJWQ6ICVkXG4mIzM0OywKIAkJCQkJICAgdmVjdG9yLCByZXQpOwotCQkJCWdvdG8gZmFpbF9yZXF1ZXN0OwomIzQzOwomIzQzOwkJCQlmb3IgKG4gPSAwOyBuICZsdDsgajsgbiYjNDM7JiM0MzspCiYjNDM7CQkJCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfZ3JwLSZndDtpcnFzW25dXSwgaXJxX2dycCk7CiYjNDM7CiYjNDM7CQkJCW5ldGlmX25hcGlfZGVsKCZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldLm5hcGkpOwomIzQzOwkJCQlmcmVlX25ldGRldihhYi0mZ3Q7ZXh0X2lycV9ncnBbaV0ubmFwaV9uZGV2KTsKJiM0MzsJCQkJZ290byBmYWlsX2FsbG9jYXRlOwogCQkJfQomIzQzOwomIzQzOwkJCWFiLSZndDtpcnFfbnVtW2lycV9pZHhdID0gaXJxOwogCQl9CiAJCWF0aDEya19wY2lfZXh0X2dycF9kaXNhYmxlKGlycV9ncnApOwogCX0KIAogCXJldHVybiAwOwogCi1mYWlsX3JlcXVlc3Q6Ci0JLyogaSAtJmd0O25hcGlfbmRldiB3YXMgcHJvcGVybHkgYWxsb2NhdGVkLiBGcmVlIGl0IGFsc28gKi8KLQlpICYjNDM7PSAxOwogZmFpbF9hbGxvY2F0ZToKLQlmb3IgKG4gPSAwOyBuICZsdDsgaTsgbiYjNDM7JiM0MzspIHsKLQkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW25dOwotCQlmcmVlX25ldGRldihpcnFfZ3JwLSZndDtuYXBpX25kZXYpOwotCX0KJiM0MzsJYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoYWIsIGkpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY3MSw2ICYjNDM7Njc2LDggQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYikKIAkJaWYgKHJldCkgewogCQkJYXRoMTJrX2VycihhYiwgJiMzNDtmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4mIzM0OywKIAkJCQkgICBpcnFfaWR4LCByZXQpOwomIzQzOwomIzQzOwkJCWF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGkpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCkBAIC02ODEsOCAmIzQzOzY4OCwxMCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCX0KIAogCXJldCA9IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoYWIpOwotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGFiLSZndDtod19wYXJhbXMtJmd0O2NlX2NvdW50KTsKIAkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IEF0aDEyayBQQ0kgSVJRIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGZvciBgYXRoMTJrL3BjaS5jYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIElSUSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBpbiB0aGUgYXRoMTJrIFBDSSBkcml2ZXIuIFRoaXMgaXMgUXVhbGNvbW0gV2ktRmkgNyBoYXJkd2FyZSwgc28gZGVmaW5pdGVseSB2ZW5kb3Itc3BlY2lmaWMuIFRoZSBxdWVzdGlvbiBpczogd29ydGggZnV6emluZz8KClRoZSBwcm9tcHQmIzM5O3MgZXhjbHVzaW9uIGNyaXRlcmlhIHNwZWNpZmljYWxseSB0YXJnZXRzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBJcyBgYXRoMTJrYCBvbmUgb2YgdGhvc2U/IFllcywgaXQmIzM5O3MgdmVuZG9yLXNwZWNpZmljLCBhbmQgeWVzLCBpdCYjMzk7cyBhIFBDSSBXaS1GaSBkcml2ZXIsIHNvIGl0IG5lZWRzIHNwZWNpZmljIGhhcmR3YXJlLiBJdCYjMzk7cyBub3QgYSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgdGhvdWdoLgoKQ2FuIEkgZnV6eiBpdCBzb21laG93IHVzaW5nIGVtdWxhdGlvbj8gYG1hYzgwMjExX2h3c2ltYCBpcyBvdXQsIHRoYXQmIzM5O3Mgc29mdHdhcmUtYmFzZWQgYW5kIGRvZXNuJiMzOTt0IHRvdWNoIHRoaXMuIFBDSSBXaS1GaSBkcml2ZXJzIGFyZSBnZW5lcmFsbHkgYSBwYWluIHRvIGZ1enogdW5sZXNzIHRoZXJlIGlzIGRlZGljYXRlZCBRRU1VIG9yIHRoZXkgYXJlIFVTQi4KClRoZSBleGNsdXNpb24gY3JpdGVyaWEgbWFrZSBtZSBxdWVzdGlvbiBpdHMgZmVhc2liaWxpdHkgYmVjYXVzZSBhdGgxMmsgbmVlZHMgc3BlY2lmaWMgaGFyZHdhcmUuIFN5emthbGxlciBtaWdodCBoYXZlIHNvbWUgUENJIGZ1enppbmcsIGJ1dCBpdCYjMzk7cyBvZnRlbiBsaW1pdGVkLCBhbmQgdGhpcyBwYXRjaCBkZWFscyB3aXRoIGRldmljZSBwcm9iZS4gV2l0aG91dCB0aGUgcmlnaHQgaGFyZHdhcmUsIHRoZSBwcm9iZSB3b24mIzM5O3QgZXZlbiBoYXBwZW4sIG9yIGl0JiMzOTtsbCBlcnJvciBvdXQgZWFybHkuIEkgY2FuIGRvdWJsZS1jaGVjayB0aGUga2VybmVsIHNvdXJjZSwgYnV0IHJlYWxpc3RpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBpcyBnb2luZyB0byBiZSBkaWZmaWN1bHQgdG8gZnV6ei4gQmFzZWQgb24gdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYSBpdCBzZWVtcyBsaWtlIHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM1MzExIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9Mj1jb25maWcgQVRIMTJLXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MzpcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBIQVNfRE1BIFx1MDAyNlx1MDAyNiBQQ0lcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MTU6XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgYXRoMTJrLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnPTE3PWNvbmZpZyBBVEgxMktfQUhCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MTg6XHRib29sIFwmIzM0O1F1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE5LVx0ZGVwZW5kcyBvbiBBVEgxMksgXHUwMDI2XHUwMDI2IFJFTU9URVBST0Ncbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9MjU9Y29uZmlnIEFUSDEyS19ERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjI2Olx0Ym9vbCBcJiMzNDthdGgxMmsgZGVidWdnaW5nXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjctXHRkZXBlbmRzIG9uIEFUSDEyS1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZz0zNT1jb25maWcgQVRIMTJLX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzozNjpcdGJvb2wgXCYjMzQ7UXVhbGNvbW0gYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM3LVx0ZGVwZW5kcyBvbiBBVEgxMksgXHUwMDI2XHUwMDI2IE1BQzgwMjExX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zOC1cdGhlbHBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzozOTpcdCAgRW5hYmxlIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00MC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9NDQ9Y29uZmlnIEFUSDEyS19UUkFDSU5HXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NDU6XHRib29sIFwmIzM0O2F0aDEyayB0cmFjaW5nIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00Ni1cdGRlcGVuZHMgb24gQVRIMTJLIFx1MDAyNlx1MDAyNiBFVkVOVF9UUkFDSU5HXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDctXHRoZWxwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NDg6XHQgIEVuYWJsZSBhdGgxMmsgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00OS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9NTM9Y29uZmlnIEFUSDEyS19DT1JFRFVNUFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjU0Olx0Ym9vbCBcJiMzNDthdGgxMmsgY29yZWR1bXBcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01NS1cdGRlcGVuZHMgb24gQVRIMTJLXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTU3LVx0aGVscFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjU4Olx0ICBFbmFibGUgYXRoMTJrIGNvcmVkdW1wIGNvbGxlY3Rpb25cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01OS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0FUSDEySykgJiM0Mzs9IGF0aDEyay5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjM6YXRoMTJrLXkgJiM0Mzs9IGNvcmUubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS00LVx0ICAgIGhhbC5vIFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU6MjU6YXRoMTJrLSQoQ09ORklHX0FUSDEyS19BSEIpICYjNDM7PSBhaGIub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS0yNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX0FUSDEySykgJiM0Mzs9IHdpZmk3L1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS0yOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU6Mjk6YXRoMTJrLSQoQ09ORklHX0FUSDEyS19ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vIGRlYnVnZnNfaHR0X3N0YXRzLm8gZGVidWdmc19zdGEub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozMDphdGgxMmstJChDT05GSUdfQUNQSSkgJiM0Mzs9IGFjcGkub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozMTphdGgxMmstJChDT05GSUdfQVRIMTJLX1RSQUNJTkcpICYjNDM7PSB0cmFjZS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjMyOmF0aDEyay0kKENPTkZJR19QTSkgJiM0Mzs9IHdvdy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjMzOmF0aDEyay0kKENPTkZJR19BVEgxMktfQ09SRURVTVApICYjNDM7PSBjb3JlZHVtcC5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjM0OmF0aDEyay0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSAmIzQzOz0gdGVzdG1vZGUub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozNTphdGgxMmstJChDT05GSUdfVEhFUk1BTCkgJiM0Mzs9IHRoZXJtYWwub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS0zNi1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjExOnN0YXRpYyBpbnQgYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBmdW5jKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE4LVx0aWYgKCFyb290X2hhbmRsZSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTk6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXCYjMzQ7aW52YWxpZCBhY3BpIGhhbmRsZXJcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNi1cdGlmICghb2JqKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNzpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcJiMzNDthY3BpX2V2YWx1YXRlX2RzbSgpIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yOC1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDYtXHRcdFx0XHQgICBBVEgxMktfQUNQSV9CREZfQU5DSE9SX1NUUklOR19MRU4pKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0NzpcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtpbnZhbGlkIEFDUEkgRFNNIEJERiBzaXplOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ4LVx0XHRcdFx0XHQgICAgb2JqLVx1MDAzZXN0cmluZy5sZW5ndGgpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTYyLVx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCBcdTAwM2UgQVRIMTJLX0FDUElfRFNNX0ZVTkNfTUFYX0JJVE1BUF9TSVpFKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo2MzpcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtpbnZhbGlkIEFDUEkgRFNNIGZ1bmMgc2l6ZTogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy02NC1cdFx0XHRcdFx0ICAgIG9iai1cdTAwM2VidWZmZXIubGVuZ3RoKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy03NS1cdFx0XHRpZiAob2JqLVx1MDAzZWJ1ZmZlci5sZW5ndGggIT0gQVRIMTJLX0FDUElfRFNNX1RBU19DRkdfU0laRSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NzY6XHRcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7aW52YWxpZCBBQ1BJIERTTSBUQVMgY29uZmlnIHNpemU6ICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNzctXHRcdFx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtODctXHRcdFx0aWYgKG9iai1cdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9UQVNfREFUQV9TSVpFKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo4ODpcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtpbnZhbGlkIEFDUEkgRFNNIFRBUyBkYXRhIHNpemU6ICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtODktXHRcdFx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtOTktXHRcdFx0aWYgKG9iai1cdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9CSU9TX1NBUl9EQVRBX1NJWkUpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjEwMDpcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtpbnZhbGlkIEFDUEkgQklPUyBTQVIgZGF0YSBzaXplOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTEwMS1cdFx0XHRcdFx0ICAgIG9iai1cdTAwM2VidWZmZXIubGVuZ3RoKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMTEtXHRcdFx0aWYgKG9iai1cdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9HRU9fT0ZGU0VUX0RBVEFfU0laRSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTEyOlx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ludmFsaWQgQUNQSSBHRU8gT0ZGU0VUIGRhdGEgc2l6ZTogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMTMtXHRcdFx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTIzLVx0XHRcdGlmIChvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCAhPSBBVEgxMktfQUNQSV9EU01fQ0NBX0RBVEFfU0laRSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTI0Olx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ludmFsaWQgQUNQSSBEU00gQ0NBIGRhdGEgc2l6ZTogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMjUtXHRcdFx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTM1LVx0XHRcdGlmIChvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCAhPSBBVEgxMktfQUNQSV9EU01fQkFORF9FREdFX0RBVEFfU0laRSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTM2Olx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ludmFsaWQgQUNQSSBEU00gYmFuZCBlZGdlIGRhdGEgc2l6ZTogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMzctXHRcdFx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTQ3LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjE0ODpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O0FDUEkgRFNNIG1ldGhvZCByZXR1cm5lZCBhbiB1bnN1cHBvcnRlZCBvYmplY3QgdHlwZTogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNDktXHRcdFx0ICAgIG9iai1cdTAwM2V0eXBlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxNjE6c3RhdGljIGludCBhdGgxMmtfYWNwaV9zZXRfcG93ZXJfbGltaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE2Mi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTY3LVx0ICAgIHRhc19zYXJfcG93ZXJfdGFibGVbMV0gIT0gQVRIMTJLX0FDUElfVEFTX0RBVEFfRU5BQkxFKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxNjg6XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtsYXRlc3QgQUNQSSBUQVMgZGF0YSBpcyBpbnZhbGlkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE2OS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTcxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTcyOlx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfYmlvc19jbWQoYWIsIFdNSV9CSU9TX1BBUkFNX1RBU19EQVRBX1RZUEUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNzMtXHRcdFx0XHQgICAgICB0YXNfc2FyX3Bvd2VyX3RhYmxlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE3NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjE3NjpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBzZW5kIEFDUEkgVEFTIGRhdGEgdGFibGU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTc3LVx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE4Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjE4MzpzdGF0aWMgaW50IGF0aDEya19hY3BpX3NldF9iaW9zX3Nhcl9wb3dlcihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTg0LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xODgtXHQgICAgYWItXHUwMDNlYWNwaS5iaW9zX3Nhcl9kYXRhWzFdICE9IEFUSDEyS19BQ1BJX1BPV0VSX0xJTUlUX0VOQUJMRV9GTEFHKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxODk6XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtpbnZhbGlkIGxhdGVzdCBBQ1BJIEJJT1MgU0FSIGRhdGFcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTkwLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xOTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxOTM6XHRyZXQgPSBhdGgxMmtfd21pX3NldF9iaW9zX3Nhcl9jbWQoYWIsIGFiLVx1MDAzZWFjcGkuYmlvc19zYXJfZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xOTQtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxOTU6XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2V0IEFDUEkgQklPUyBTQVIgdGFibGU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTk2LVx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIwMjpzdGF0aWMgdm9pZCBhdGgxMmtfYWNwaV9kc21fbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjAzLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwNC1cdGludCByZXQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMDU6XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gZGF0YTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwNy1cdGlmIChldmVudCA9PSBBVEgxMktfQUNQSV9OT1RJRllfRVZFTlQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIwODpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O3Vua25vd24gYWNwaSBub3RpZnkgJXVcXG5cJiMzNDssIGV2ZW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwOS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIxMi1cdGlmICghYWItXHUwMDNlYWNwaS5hY3BpX3Rhc19lbmFibGUpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIxMzpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcJiMzNDthY3BpX3Rhc19lbmFibGUgaXMgZmFsc2VcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjE0LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjE3Olx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19UQVNfREFUQSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMTgtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMTk6XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gdXBkYXRlIEFDUEkgVEFTIGRhdGEgdGFibGU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjIwLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjIyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjIzOlx0cmV0ID0gYXRoMTJrX2FjcGlfc2V0X3Bvd2VyX2xpbWl0KGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIyNC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIyNTpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBzZXQgQUNQSSBUQVMgcG93ZXIgbGltaXQgZGF0YTogJWRcJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMjYtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMzI6XHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0JJT1NfU0FSKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIzMy1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIzNDpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byB1cGRhdGUgQklPUyBTQVI6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjM1LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjM4Olx0cmV0ID0gYXRoMTJrX2FjcGlfc2V0X2Jpb3Nfc2FyX3Bvd2VyKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIzOS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI0MDpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBzZXQgQklPUyBTQVIgcG93ZXIgbGltaXQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjQxLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjQ1OnN0YXRpYyBpbnQgYXRoMTJrX2FjcGlfc2V0X2Jpb3Nfc2FyX3BhcmFtcyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjQ2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNDk6XHRyZXQgPSBhdGgxMmtfd21pX3NldF9iaW9zX3Nhcl9jbWQoYWIsIGFiLVx1MDAzZWFjcGkuYmlvc19zYXJfZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNTAtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNTE6XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2V0IEFDUEkgQklPUyBTQVIgdGFibGU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjUyLVx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI1NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI1NTpcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3NfZ2VvX2NtZChhYiwgYWItXHUwMDNlYWNwaS5nZW9fb2Zmc2V0X2RhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjU2LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjU3Olx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCBBQ1BJIEJJT1MgR0VPIHRhYmxlOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI1OC1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNjQ6c3RhdGljIGludCBhdGgxMmtfYWNwaV9zZXRfdGFzX3BhcmFtcyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjY1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNjctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNjg6XHRyZXQgPSBhdGgxMmtfd21pX3NldF9iaW9zX2NtZChhYiwgV01JX0JJT1NfUEFSQU1fVEFTX0NPTkZJR19UWVBFLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjY5LVx0XHRcdFx0ICAgICAgYWItXHUwMDNlYWNwaS50YXNfY2ZnLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI3MS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI3MjpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBzZW5kIEFDUEkgVEFTIGNvbmZpZyB0YWJsZSBwYXJhbWV0ZXI6ICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjczLVx0XHRcdCAgICByZXQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI3Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI3NzpcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3NfY21kKGFiLCBXTUlfQklPU19QQVJBTV9UQVNfREFUQV9UWVBFLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjc4LVx0XHRcdFx0ICAgICAgYWItXHUwMDNlYWNwaS50YXNfc2FyX3Bvd2VyX3RhYmxlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI4MC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI4MTpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBzZW5kIEFDUEkgVEFTIGRhdGEgdGFibGUgcGFyYW1ldGVyOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI4Mi1cdFx0XHQgICAgcmV0KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyODk6Ym9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV9yZmtpbGwoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI5MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjkzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mjk0OmJvb2wgYXRoMTJrX2FjcGlfZ2V0X2Rpc2FibGVfMTFiZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjk1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yOTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyOTk6dm9pZCBhdGgxMmtfYWNwaV9zZXRfZHNtX2Z1bmMoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMwMC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzA4LVx0aWYgKGFiLVx1MDAzZWFjcGkuYWNwaV90YXNfZW5hYmxlKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozMDk6XHRcdHJldCA9IGF0aDEya19hY3BpX3NldF90YXNfcGFyYW1zKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMxMC1cdFx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MzExOlx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2VuZCBBQ1BJIFRBUyBwYXJhbWV0ZXJzOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMxMi1cdFx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzE2LVx0aWYgKGFiLVx1MDAzZWFjcGkuYWNwaV9iaW9zX3Nhcl9lbmFibGUpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjMxNzpcdFx0cmV0ID0gYXRoMTJrX2FjcGlfc2V0X2Jpb3Nfc2FyX3BhcmFtcyhhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMTgtXHRcdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjMxOTpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNlbmQgQUNQSSBCSU9TIFNBUjogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMjAtXHRcdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMyNS1cdFx0YnVmID0gYWItXHUwMDNlYWNwaS5jY2FfZGF0YSAmIzQzOyBBVEgxMktfQUNQSV9DQ0FfVEhSX09GRlNFVF9EQVRBX09GRlNFVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjMyNjpcdFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfYmlvc19jbWQoYWIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMjctXHRcdFx0XHRcdCAgICAgIFdNSV9CSU9TX1BBUkFNX0NDQV9USFJFU0hPTERfVFlQRSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMzAtXHRcdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjMzMTpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCBBQ1BJIERTTSBDQ0EgdGhyZXNob2xkOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMzMi1cdFx0XHRcdCAgICByZXQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMzNy1cdGlmIChhYi1cdTAwM2VhY3BpLmFjcGlfYmFuZF9lZGdlX2VuYWJsZSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MzM4Olx0XHRyZXQgPSBhdGgxMmtfd21pX3NldF9iaW9zX2NtZChhYixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMzOS1cdFx0XHRcdFx0ICAgICAgV01JX0JJT1NfUEFSQU1fVFlQRV9CQU5ERURHRSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNDItXHRcdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM0MzpcdFx0XHRhdGgxMmtfd2FybihhYixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM0NC1cdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gc2V0IEFDUEkgRFNNIGJhbmQgZWRnZSBjaGFubmVsIHBvd2VyOiAlZFxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozNTE6aW50IGF0aDEya19hY3BpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNTIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM2OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM2OTpcdHJldCA9IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShhYiwgQVRIMTJLX0FDUElfRFNNX0ZVTkNfU1VQUE9SVF9GVU5DUyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzAtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozNzE6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBBQ1BJIERTTSBkYXRhOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM3Mi1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzUtXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfRElTQUJMRV9GTEFHKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mzc2Olx0XHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0RJU0FCTEVfRkxBRyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzctXHRcdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM3ODpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBBQ1BJIERJU0FCTEUgRkxBRzogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzktXHRcdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zOTEtXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfQkRGX0VYVCkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM5MjpcdFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19CREZfRVhUKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM5My1cdFx0aWYgKHJldCB8fCBhYi1cdTAwM2VhY3BpLmJkZl9zdHJpbmdbMF0gPT0gJiMzOTtcXDAmIzM5Oykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mzk0Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IEFDUEkgQkRGIEVYVDogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zOTUtXHRcdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MDEtXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfVEFTX0NGRykpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQwMjpcdFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19UQVNfQ0ZHKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQwMy1cdFx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDA0Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IEFDUEkgVEFTIGNvbmZpZyB0YWJsZTogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MDUtXHRcdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MDktXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfVEFTX0RBVEEpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MTA6XHRcdHJldCA9IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShhYiwgQVRIMTJLX0FDUElfRFNNX0ZVTkNfVEFTX0RBVEEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDExLVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MTI6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUNQSSBUQVMgZGF0YSB0YWJsZTogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MTMtXHRcdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MjItXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfQklPU19TQVIpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MjM6XHRcdHJldCA9IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShhYiwgQVRIMTJLX0FDUElfRFNNX0ZVTkNfQklPU19TQVIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDI0LVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MjU6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUNQSSBiaW9zIHNhciBkYXRhOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQyNi1cdFx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQzMC1cdGlmIChBVEgxMktfQUNQSV9GVU5DX0JJVF9WQUxJRChhYi1cdTAwM2VhY3BpLCBBVEgxMktfQUNQSV9GVU5DX0JJVF9HRU9fT0ZGU0VUKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDMxOlx0XHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0dFT19PRkZTRVQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDMyLVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MzM6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUNQSSBnZW8gb2Zmc2V0IGRhdGE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDM0LVx0XHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDQ0LVx0aWYgKEFUSDEyS19BQ1BJX0ZVTkNfQklUX1ZBTElEKGFiLVx1MDAzZWFjcGksIEFUSDEyS19BQ1BJX0ZVTkNfQklUX0NDQSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ0NTpcdFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19JTkRFWF9DQ0EpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDQ2LVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0NDc6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUNQSSBEU00gQ0NBIHRocmVzaG9sZCBjb25maWd1cmF0aW9uOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ0OC1cdFx0XHRcdCAgICByZXQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ1OS1cdFx0XHRcdCAgICAgICBBVEgxMktfQUNQSV9GVU5DX0JJVF9CQU5EX0VER0VfQ0hBTl9QT1dFUikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ2MDpcdFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19JTkRFWF9CQU5EX0VER0UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDYxLVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0NjI6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUNQSSBEU00gYmFuZCBlZGdlIGNoYW5uZWwgcG93ZXI6ICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDYzLVx0XHRcdFx0ICAgIHJldCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDczLVx0XHRcdFx0XHQgICAgIEFDUElfREVWSUNFX05PVElGWSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ3NDpcdFx0XHRcdFx0ICAgICBhdGgxMmtfYWNwaV9kc21fbm90aWZ5LCBhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NzUtXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ3NjpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBpbnN0YWxsIERTTSBub3RpZnkgY2FsbGJhY2s6ICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDc3LVx0XHRyZXR1cm4gLUVJTztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00ODQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0ODU6aW50IGF0aDEya19hY3BpX2NoZWNrX2JkZl92YXJpYW50X25hbWUoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ4Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDkyLVx0aWYgKHN0cnNjcHkoYWItXHUwMDNlcW1pLnRhcmdldC5iZGZfZXh0LCBhYi1cdTAwM2VhY3BpLmJkZl9zdHJpbmcgJiM0MzsgNCwgbWF4X2xlbikgXHUwMDNjIDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0OTM6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ5NC1cdFx0XHQgICBcJiMzNDthY3BpIGJkZiB2YXJpYW50IGxvbmdlciB0aGFuIHRoZSBidWZmZXIgKHZhcmlhbnQ6ICVzKVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00OTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo1MDA6dm9pZCBhdGgxMmtfYWNwaV9zdG9wKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy01MDEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTUwNi1cdFx0XHRcdCAgIEFDUElfREVWSUNFX05PVElGWSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjUwNzpcdFx0XHRcdCAgIGF0aDEya19hY3BpX2RzbV9ub3RpZnkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNTA4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6NzU6aW50IGF0aDEya19hY3BpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6NzY6dm9pZCBhdGgxMmtfYWNwaV9zdG9wKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6Nzc6Ym9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV9yZmtpbGwoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo3ODpib29sIGF0aDEya19hY3BpX2dldF9kaXNhYmxlXzExYmUoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo3OTp2b2lkIGF0aDEya19hY3BpX3NldF9kc21fZnVuYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjgwOmludCBhdGgxMmtfYWNwaV9jaGVja19iZGZfdmFyaWFudF9uYW1lKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtODEtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtODMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo4NDpzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfYWNwaV9zdGFydChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtODUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTg4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6ODk6c3RhdGljIGlubGluZSB2b2lkIGF0aDEya19hY3BpX3N0b3Aoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTkwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC05Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjkzOnN0YXRpYyBpbmxpbmUgYm9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV9yZmtpbGwoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTk0LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC05Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjk4OnN0YXRpYyBpbmxpbmUgYm9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV8xMWJlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC05OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtMTAyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6MTAzOnN0YXRpYyBpbmxpbmUgdm9pZCBhdGgxMmtfYWNwaV9zZXRfZHNtX2Z1bmMoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTEwNC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtMTA2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6MTA3OnN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19hY3BpX2NoZWNrX2JkZl92YXJpYW50X25hbWUoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTEwOC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjM6c3RhdGljIHN0cnVjdCBhdGgxMmtfYWhiX2RyaXZlciAqYXRoMTJrX2FoYl9mYW1pbHlfZHJpdmVyc1tBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVhdO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNDpzdGF0aWMgY29uc3QgY2hhciBhdGgxMmtfdXNlcnBkX2lycVtdWzldID0ge1wmIzM0O3NwYXduXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNS1cdFx0XHRcdCAgICAgXCYjMzQ7cmVhZHlcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMS0gKiBPbmUgUTYgUm9vdFBEIChtYW5hZ2VkIGJ5IHNlcGFyYXRlIHJwcm9jIGRyaXZlcikgc3VwcG9ydHMgbXVsdGlwbGVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzI6ICogYXRoMTJrIFVzZXJQRHMuIEVhY2ggVXNlclBEIHJlcHJlc2VudHMgYSBXaUZpIHJhZGlvIGluc3RhbmNlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMy0gKlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMzgtICogTG9ja2luZzpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mzk6ICogIC0gYXRoMTJrX3Jwcm9jX2luZm9fbG9jazogUHJvdGVjdHMgZ19ycHJvY19pbmZvIGFsbG9jYXRpb24vZnJlZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy00MC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6NDE6c3RhdGljIHN0cnVjdCBhdGgxMmtfYWhiX3Jwcm9jX2luZm8gKmdfcnByb2NfaW5mbztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6NDI6c3RhdGljIERFRklORV9NVVRFWChhdGgxMmtfcnByb2NfaW5mb19sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtNDMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDA9ZW51bSBleHRfaXJxX251bSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE0MDpzdGF0aWMgdTMyIGF0aDEya19haGJfcmVhZDMyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUzMiBvZmZzZXQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE0MS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNDYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE0NzpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX3dyaXRlMzIoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTMyIG9mZnNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTQ4LVx0XHRcdCAgICAgICB1MzIgdmFsdWUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE1NjpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX2NhbmNlbF93b3JrcXVldWUoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTU3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE2MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VjZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTYxOlx0XHRzdHJ1Y3QgYXRoMTJrX2NlX3BpcGUgKmNlX3BpcGUgPSBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE2MzpcdFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE2NC1cdFx0XHRjb250aW51ZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE2OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTcwOnN0YXRpYyB2b2lkIGF0aDEya19haGJfZXh0X2dycF9kaXNhYmxlKHN0cnVjdCBhdGgxMmtfZXh0X2lycV9ncnAgKmlycV9ncnApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE3MS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE3ODpzdGF0aWMgdm9pZCBfX2F0aDEya19haGJfZXh0X2lycV9kaXNhYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE3OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xODItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTgzOlx0XHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE4NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTg1Olx0XHRhdGgxMmtfYWhiX2V4dF9ncnBfZGlzYWJsZShpcnFfZ3JwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTg2LVx0XHRpZiAoaXJxX2dycC1cdTAwM2VuYXBpX2VuYWJsZWQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTk0OnN0YXRpYyB2b2lkIGF0aDEya19haGJfZXh0X2dycF9lbmFibGUoc3RydWN0IGF0aDEya19leHRfaXJxX2dycCAqaXJxX2dycClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTk1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjAyOnN0YXRpYyB2b2lkIGF0aDEya19haGJfc2V0Yml0MzIoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTggYml0LCB1MzIgb2Zmc2V0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMDMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjA1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMDY6XHR2YWwgPSBhdGgxMmtfYWhiX3JlYWQzMihhYiwgb2Zmc2V0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjA3Olx0YXRoMTJrX2FoYl93cml0ZTMyKGFiLCBvZmZzZXQsIHZhbCB8IEJJVChiaXQpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjA4LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjA5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMTA6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9jbGVhcmJpdDMyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHU4IGJpdCwgdTMyIG9mZnNldClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjExLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIxMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjE0Olx0dmFsID0gYXRoMTJrX2FoYl9yZWFkMzIoYWIsIG9mZnNldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjIxNTpcdGF0aDEya19haGJfd3JpdGUzMihhYiwgb2Zmc2V0LCB2YWwgXHUwMDI2IH5CSVQoYml0KSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIxNi19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIxNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjE4OnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxX2VuYWJsZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MTYgY2VfaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIxOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMjktXHRpZiAoY2VfYXR0ci1cdTAwM2VzcmNfbmVudHJpZXMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjIzMDpcdFx0YXRoMTJrX2FoYl9zZXRiaXQzMihhYiwgY2VfaWQsIGllMV9yZWdfYWRkcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjMyLVx0aWYgKGNlX2F0dHItXHUwMDNlZGVzdF9uZW50cmllcykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMzM6XHRcdGF0aDEya19haGJfc2V0Yml0MzIoYWIsIGNlX2lkLCBpZTJfcmVnX2FkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMzQ6XHRcdGF0aDEya19haGJfc2V0Yml0MzIoYWIsIGNlX2lkICYjNDM7IENFX0hPU1RfSUVfM19TSElGVCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjM1LVx0XHRcdFx0ICAgIGllM19yZWdfYWRkcik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjIzOTpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX2NlX2lycV9kaXNhYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUxNiBjZV9pZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjQwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI1MC1cdGlmIChjZV9hdHRyLVx1MDAzZXNyY19uZW50cmllcylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjUxOlx0XHRhdGgxMmtfYWhiX2NsZWFyYml0MzIoYWIsIGNlX2lkLCBpZTFfcmVnX2FkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI1My1cdGlmIChjZV9hdHRyLVx1MDAzZWRlc3RfbmVudHJpZXMpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjU0Olx0XHRhdGgxMmtfYWhiX2NsZWFyYml0MzIoYWIsIGNlX2lkLCBpZTJfcmVnX2FkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNTU6XHRcdGF0aDEya19haGJfY2xlYXJiaXQzMihhYiwgY2VfaWQgJiM0MzsgQ0VfSE9TVF9JRV8zX1NISUZULFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNTYtXHRcdFx0XHQgICAgICBpZTNfcmVnX2FkZHIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjU5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNjA6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9zeW5jX2NlX2lycXMoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjYxLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI2NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VjZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjY2Olx0XHRpZiAoYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjY3LVx0XHRcdGNvbnRpbnVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNzQ6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9zeW5jX2V4dF9pcnFzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI3NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNzktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjgwOlx0XHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI4MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mjg5OnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxc19lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjkwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VjZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mjk0Olx0XHRpZiAoYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjk1LVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyOTY6XHRcdGF0aDEya19haGJfY2VfaXJxX2VuYWJsZShhYiwgaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5Ny1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzAwOnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxc19kaXNhYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTMwMS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMDQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjMwNTpcdFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTMwNi1cdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzA3Olx0XHRhdGgxMmtfYWhiX2NlX2lycV9kaXNhYmxlKGFiLCBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMzA4LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMzEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMTE6c3RhdGljIGludCBhdGgxMmtfYWhiX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTMxMi17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjMxMzpcdGF0aDEya19haGJfY2VfaXJxc19lbmFibGUoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMTQ6XHRhdGgxMmtfY2VfcnhfcG9zdF9idWYoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMTUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjMxOTpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX2V4dF9pcnFfZW5hYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIxMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDc1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBhdGgxMmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYGF0aDEya2AgZHJpdmVyLiBJdCBhcHBlYXJzIHRvIG1vZGlmeSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY2AsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIFBDSSBpbXBsZW1lbnRhdGlvbi4gVGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSBoYXZlIG1lIHRoaW5raW5nLgoKRmlyc3QsIGlzIHRoaXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgY29kZSB0aGF0IHJlbGllcyBvbiBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVT8gWWVzLCBgYXRoMTJrYCBpcyBhIFF1YWxjb21tIFdpLUZpIDcgZHJpdmVyLCBzbyBpdCBkZWZpbml0ZWx5IG5lZWRzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKG9yIHBvdGVudGlhbGx5IEFIQiBmb3IgU29DcykuIGBtYWM4MDIxMV9od3NpbWAgaXNuJiMzOTt0IGdvaW5nIHRvIGhlbHAgaGVyZTsgdGhhdCYjMzk7cyBhIHNvZnR3YXJlIHNpbXVsYXRvciB0aGF0IGRvZXNuJiMzOTt0IGludGVyYWN0IHdpdGggYGF0aDEya2AuIFBDSSBXaS1GaSBkcml2ZXJzLCBpbiBnZW5lcmFsLCBhcmUgdG91Z2ggdG8gZnV6eiB1bmxlc3Mgd2UgaGF2ZSBhIHNwZWNpZmljIFFFTVUgc2V0dXAgb3IgaXQmIzM5O3MgYSBVU0IgZHJpdmVyIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyBleGNsdWRpbmcgJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4mIzM0OyBOb3csIGBhdGgxMmtgIGlzIGEgKnZlbmRvci1zcGVjaWZpYyogUENJZSBXaS1GaSBkcml2ZXIsIHNvIGl0IHNvcnQgb2YgZml0cyB0aGUgZGVzY3JpcHRpb24uIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgaW50ZW50IGJlaGluZCB0aGUgcHJvbXB0IGVuY29tcGFzcyBkcml2ZXJzIGxpa2UgdGhpcz8gSXQgZG9lc24mIzM5O3QgZXhwbGljaXRseSBtZW50aW9uIFdpLUZpLgoKSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQuIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGlzIGJlaW5nIHRvdWNoZWQsIGFuZCB0aGF0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZGV2aWNlIHByb2JlLiBXaXRob3V0IHRoZSBjb3JyZWN0IGhhcmR3YXJlLCB0aGUgcHJvYmUgZWl0aGVyIHdvbiYjMzk7dCBiZSBjYWxsZWQsIG9yIGl0IHdpbGwgZmFpbCBlYXJseS4gSWYgdGhlIHByb2JlIGZhaWxzLCB0aGF0IHdvdWxkIG1lYW4gdGhhdCB0aGlzIHBhdGggaXMgaW5hY2Nlc3NpYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgd2hpY2ggd291bGQgaW5kaWNhdGUgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpIb3dldmVyLCBzeXprYWxsZXIgZG9lcyBoYXZlIGEgUENJIGZ1enplciwgd2hpY2ggaGFzIGdvdCBtZSB0aGlua2luZy4gSXQgaGFzIHRoZSBhYmlsaXR5IHRvIGVtdWxhdGUgUENJIGRldmljZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGNhbiBzdWNjZXNzZnVsbHkgZW11bGF0ZSB0aGUgcGFydHMgb2YgdGhlIGRldmljZSB0aGF0IHRoZSBgYXRoMTJrYCBkcml2ZXIgcmVxdWlyZXMuIElmIHRoZSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIHByb2JlIG9mIGF0aDEyaywgdGhlbiBpdCBtaWdodCBiZSByZWFjaGFibGUuIEkgbXVzdCBpbnZlc3RpZ2F0ZSBpZiBzeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBvciBzdXBwb3J0IGZvciBgYXRoMTJrYCB0byBzZWUgaWYgdGhpcyBpcyBwb3NzaWJsZS4gSWYgaXQgaXMsIHRoZW4gdGhlIHByb21wdCYjMzk7cyBleGNsdXNpb24gbWF5IG5vdCBhcHBseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEyayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3N5cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDk2CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMqKgoKT2theSwgc28gdGhlIGdyZXBwZXIgdG9vbCBpcyB1c2VsZXNzIGZvciBkaWdnaW5nIGludG8gdGhlIGBzeXMvYCBkaXJlY3RvcnkgZm9yIHN5emxhbmcgZGVzY3JpcHRpb25zLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBxdWl0ZSBleHBsaWNpdCBhYm91dCB0aGF0LiBJdCYjMzk7cyBlc3NlbnRpYWxseSB0ZWxsaW5nIG1lLCAmIzM0O0RvbiYjMzk7dCBldmVuIGJvdGhlcjsgaXQgd29uJiMzOTt0IHdvcmsuJiMzNDsgQW5kIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBpc3N1ZTogSSBkb24mIzM5O3QgaGF2ZSB0aG9zZSBhbHRlcm5hdGl2ZSB0b29scywgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgLCBpbnN0YWxsZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gVGhlIHN5c3RlbSBwcm9tcHQgcmVhbGx5IHNob3VsZCBoYXZlIG1lbnRpb25lZCB0aG9zZSB0b29scyBpZiBpdCYjMzk7cyBleHBlY3RpbmcgbWUgdG8gdXNlIHRoZW0gZm9yIHRoaXMgdGFzaywgc2luY2UgdGhlIGBnaXQgZ3JlcGAgZmxhZ3MgYXJlIGlycmVsZXZhbnQgaGVyZSEKClNvLCBJIG5lZWQgdG8gcGl2b3QuIEkgY2FuIHN0aWxsIHRyeSB0byB1bmRlcnN0YW5kIFBDSSBwcm9iZSByZWFjaGFiaWxpdHkgdGhvdWdoLgoKVGhlIGhpbnQgbGllcyBpbiB0aGVzZSBwYXRjaCBtb2RpZmljYXRpb25zOiBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBhbmQgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLiBMZXQgbWUgZGl2ZSBpbnRvIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBzcGVjaWZpY2FsbHksIGFzIHRoYXQgc2VlbXMgdGhlIG1vcmUgcmVsZXZhbnQgb2YgdGhlIHR3by4gSSYjMzk7bGwgY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz01MjM9c3RhdGljIGlycXJldHVybl90IGF0aDEya19wY2lfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTU0NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6NTQ1OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy01NDYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9NjQzPXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9jb25maWdfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy02ODktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjY5MDpcdHJldCA9IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy02OTEtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzODUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGF0aDEyayBQQ0kgSVJRIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYGF0aDEya19wY2lfY29uZmlnX2lycWAgaXMgZGVmaW5pdGVseSBwb3BwaW5nIHVwIGFzIGEgc3VzcGVjdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYXRoMTJrX3BjaV9wcm9iZWA/JiMzNDsgVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgSVJRIGNvbmZpZ3VyYXRpb24sIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgUENJIGluaXRpYWxpemF0aW9uIGZsb3cuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGNhbGwgZ3JhcGguIFRoZSBkcml2ZXLigJlzIGluaXRpYWxpemF0aW9uIGlzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIGNvbmZpZ3VyZSB0aGUgaW50ZXJydXB0cywgc28gdGhpcyBzaG91bGQgYmUgZWFzeSB0byBjb25maXJtLiBBIHF1aWNrIGNvZGUgZGl2ZSB0byB0cmFjZSB0aGUgY2FsbCBjaGFpbiBpcyBpbiBvcmRlciwgSSBzdXBwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX2NvbmZpZ19pcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9NjM0PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY0Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6NjQzOnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9jb25maWdfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY0NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTQ4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2NDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE2NDM6XHRyZXQgPSBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjQ0LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkzNQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgU3l6a2FsbGVyIHRvIFRyaWdnZXIgYGF0aDEya19wY2lfY29uZmlnX2lycWAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYGF0aDEya19wY2lfY29uZmlnX2lycWAgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSB3aXRoaW4gYGF0aDEya19wY2lfcHJvYmVgLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyIHRvIGFjdHVhbGx5ICpnZXQqIGBhdGgxMmtfcGNpX3Byb2JlYCB0byBleGVjdXRlLiBNeSBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIHBvc3NpYmxlLiBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgaGVyZTsgaXQmIzM5O3MgY2FwYWJsZSBvZiBpbmplY3RpbmcgdmlydHVhbCBQQ0kgZGV2aWNlcy4gVGhlIHBpZWNlcyBzZWVtIHRvIGZpdCBpZiB3ZSBjYW4gbWFrZSB0aGUgUENJIGZ1enplciBpbmplY3QgYSBkZXZpY2UgdGhhdCBsb29rcyBlbm91Z2ggbGlrZSBhbiBhdGgxMmsgZGV2aWNlLCBhcyBpdCBzZWVtcyB0aGF0IHRoaXMgaXMgdGhlIG1lY2hhbmlzbSBieSB3aGljaCB0aGUgZGV2aWNlIGRyaXZlciBpcyBkZXRlY3RlZC4gSWYgdGhlIHZlbmRvciBhbmQgZGV2aWNlIElEIG1hdGNoZXMgd2hhdCB0aGUgZHJpdmVyIGV4cGVjdHMsIGBhdGgxMmtfcGNpX3Byb2JlYCBzaG91bGQgdHJpZ2dlci4gVGhlIG5leHQgbG9naWNhbCBzdGVwLCB0aGVyZWZvcmUsIGlzIHRvIHZlcmlmeSB0aGUgdmVuZG9yIGFuZCBkZXZpY2UgSURzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0aDEyayBkcml2ZXIgdG8gc2VlIGlmIHRoZXNlIG1hdGNoLCBhcyB0aGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIHRvIHRoZSBhcHByb2FjaCBiZWluZyBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfaWRfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkh1bnRpbmcgRG93biB0aGUgUENJIERldmljZSBJRCBpbiBhdGgxMmsqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIFBDSSBkZXZpY2UgSUQgaGFuZGxpbmcgZm9yIHRoZSBhdGgxMmsgd2lyZWxlc3MgZHJpdmVyLCBsaWtlbHkgZm9yIHNvbWUgc29ydCBvZiBkZWJ1Z2dpbmcgb3IgY29tcGF0aWJpbGl0eSBhbmFseXNpcy4gTXkgaW5zdGluY3Qgc2F5cyBpdCYjMzk7cyBnb2luZyB0byBiZSBpbiB0aGUgUENJLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLCB3aGljaCB1c3VhbGx5IHJlc2lkZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEya2AgdHJlZSwgYW5kIHNwZWNpZmljYWxseSwgdGhlIGBwY2kuY2AgZmlsZS4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbiAtICYjMzQ7cGNpLmMmIzM0OyBhbG1vc3QgYWx3YXlzIGNvbnRhaW5zIHRoZSBQQ0ktc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBJRCB0YWJsZS4gVGhpcyBpc24mIzM5O3QgYSBzaG90IGluIHRoZSBkYXJrLCBidXQgYSB0YXJnZXRlZCBzZWFyY2ggYmFzZWQgb24gZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGtpbmRzIG9mIGRyaXZlcnMuIEtub3dpbmcgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGRyaXZlciBsYXlvdXRzIG1ha2VzIHRoaXMgYSBxdWljayBhbmQgZWZmaWNpZW50IHN0YXJ0aW5nIHBvaW50LiBOb3csIEkmIzM5O2xsIGp1c3Qgb3BlbiB0aGF0IGZpbGUgYW5kIHNlYXJjaCBmb3IgJiMzNDtwY2lcX2RldmljZVxfaWQmIzM0OyBhbmQgc2VlIHdoYXQgSSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfZGV2aWNlX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MjY9c3RhdGljIGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTUyNzphdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1Mjgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTI5LVx0ZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfZmFtaWx5X2lkO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTMwOlx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTMxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTU0OD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1NDk6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTUwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5NzgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYXRoMTJrIFBDSSBEcml2ZXIqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgYXRoMTJrYCBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgUENJIGltcGxlbWVudGF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgaXMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBsb29rIGZvciBob3cgdGhpcyBkcml2ZXIgaXMgKmlkZW50aWZpZWQqIGFuZCAqbG9hZGVkKiBieSB0aGUga2VybmVsLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHdpdGhpbiB0aGF0IGZpbGUgZm9yIHR3byBrZXkgdGhpbmdzOiBgTU9EVUxFX0RFVklDRV9UQUJMRWAsIHdoaWNoIGRlZmluZXMgdGhlIG1vZHVsZSYjMzk7cyBzdXBwb3J0ZWQgZGV2aWNlcywgYW5kIGBwY2lfZHJpdmVyYCwgd2hpY2ggaXMgdGhlIGNvcmUgc3RydWN0dXJlIGZvciByZWdpc3RlcmluZyB0aGUgZHJpdmVyIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0uIEZpbmRpbmcgdGhlc2Ugd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBrZXJuZWwgcmVjb2duaXplcyBhbmQgYXR0YWNoZXMgdGhpcyBkcml2ZXIgdG8gdGhlIFBDSSBoYXJkd2FyZS4gVGhpcyBzaG91bGQgYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdheSB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgbWF0Y2hpbmcgYW5kIGRyaXZlciBpbml0aWFsaXphdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzozOTpzdGF0aWMgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICphdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW0FUSDEyS19ERVZJQ0VfRkFNSUxZX01BWF07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTQwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX21zaV9jb25maWcgbXNpX2NvbmZpZ19vbmVfbXNpID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgyOD1pbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4Mjk6XHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMwLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgzMTpcdHN0cnVjdCBwY2lfZHJpdmVyICpwY2lfZHJpdmVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0NzpcdHBjaV9kcml2ZXIgPSBcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXHUwMDNlZHJpdmVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODQ4Olx0cGNpX2RyaXZlci1cdTAwM2VuYW1lID0gZHJpdmVyLVx1MDAzZW5hbWU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NDk6XHRwY2lfZHJpdmVyLVx1MDAzZWlkX3RhYmxlID0gZHJpdmVyLVx1MDAzZWlkX3RhYmxlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUwOlx0cGNpX2RyaXZlci1cdTAwM2Vwcm9iZSA9IGF0aDEya19wY2lfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTE6XHRwY2lfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19wY2lfcmVtb3ZlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUyOlx0cGNpX2RyaXZlci1cdTAwM2VzaHV0ZG93biA9IGF0aDEya19wY2lfc2h1dGRvd247XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTM6XHRwY2lfZHJpdmVyLVx1MDAzZWRyaXZlci5wbSA9IFx1MDAyNmF0aDEya19wY2lfcG1fb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODU0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODU1Olx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIocGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NTYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk3MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIERyaXZlciBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gYGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyYC4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20uIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy4gSXQmIzM5O3Mgbm90IGVub3VnaCB0byBrbm93ICp0aGF0KiBpdCYjMzk7cyByZWdpc3RlcmVkOyBJIG5lZWQgdG8ga25vdyAqaG93KiBhbmQgKndoZW4qLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGRyaXZlciYjMzk7cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgX19tYXliZV91bnVzZWQgYXRoMTJrX3BjaV9wbV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODI4OmludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgyOS1cdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICpkcml2ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODU2LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg1NzpFWFBPUlRfU1lNQk9MKGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg1OC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oPTE3Nj12b2lkIGF0aDEya19wY2lfcG93ZXJfZG93bihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIGlzX3N1c3BlbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzc6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzgtXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE5Nz1pbnQgYXRoMTJrX3dpZmk3X3BjaV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0yMDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjIwMTpcdHJldCA9IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKEFUSDEyS19ERVZJQ0VfRkFNSUxZX1dJRkk3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0yMDItXHRcdFx0XHRcdCBcdTAwMjZhdGgxMmtfd2lmaTdfcGNpX2RyaXZlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzM5CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZHJpdmVyIGRldmVsb3BtZW50OgoKKipJbml0aWFsIERyaXZlciBSZWdpc3RyYXRpb24gJmFtcDsgSUQgVGFibGUgSW5zcGVjdGlvbioqCgpSaWdodCwgc28gYGF0aDEya193aWZpN19wY2lfaW5pdGAgaGFzIGp1c3QgcmVnaXN0ZXJlZCB0aGUgZGFtbiBkcml2ZXIuIEdvb2QsIHRoYXQmIzM5O3Mgc3RlcCBvbmUuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB3aG9sZSBQQ0kgZGV2aWNlIG1hdGNoaW5nIHRoaW5nIGlzIHNldCB1cCwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgYGlkX3RhYmxlYCBmb3IgdGhlIGBhdGgxMmtfd2lmaTdfcGNpX2RyaXZlcmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIFBDSSBkZXZpY2UgSURzIGFyZSBzdXBwb3J0ZWQgYW5kIHNlZSBpZiBhbnl0aGluZyBsb29rcyBvdXQgb2YgcGxhY2UuIEl0JiMzOTtzIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXJkd2FyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgc3VwcG9zZWQgdG8gYmUgdGFsa2luZyB0bywgYW5kIGhvdyB0aGUgZHJpdmVyIGtub3dzIGl0JiMzOTtzIHRoZSByaWdodCBvbmUuIExldCYjMzk7cyBzZWUgd2hhdCBkZXZpY2VzIHRoaXMgY292ZXJzIGFuZCBpZiBhbnl0aGluZyBpcyBvYnZpb3VzbHkgbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3dpZmk3X3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX3BjaV9yZWdfYmFzZSBhdGgxMmtfd2lmaTdfcmVnX2Jhc2UgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjE4ODpzdGF0aWMgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyIGF0aDEya193aWZpN19wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xODktXHQubmFtZSA9IFwmIzM0O2F0aDEya193aWZpN19wY2lcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYz0xOTc9aW50IGF0aDEya193aWZpN19wY2lfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAxLVx0cmV0ID0gYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoQVRIMTJLX0RFVklDRV9GQU1JTFlfV0lGSTcsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjIwMjpcdFx0XHRcdFx0IFx1MDAyNmF0aDEya193aWZpN19wY2lfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAzLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBhdGgxMmsgUENJIElEIFRhYmxlKioKClJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3MgcmVjb2duaXppbmcgdGhlc2UgZGV2aWNlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlciBmb3IgdGhlIGxhdGVzdCBXaS1GaSA3IHNpbGljb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgaWRfdGFibGVgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmNgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQg4oCTIHRoZSBQQ0kgSUQgdGFibGUgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hpY2ggc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zIGFuZCB2ZW5kb3JzIGFyZSBzdXBwb3J0ZWQgYW5kIGhvdyB0aGUgZHJpdmVyIGtub3dzIHRvIGJpbmQgdG8gdGhlbS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgUENJIGRldmljZSBJRHMsIHZlbmRvciBJRHMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGZsYWdzIG9yIHByb3BlcnRpZXMgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgZW5hYmxpbmcgc3BlY2lmaWMgZmVhdHVyZXMgb3Igd29ya2Fyb3VuZHMgZm9yIGNlcnRhaW4gaGFyZHdhcmUgcmV2aXNpb25zLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGFueSBuZXcsIG1vcmUgcmVmaW5lZCBtYXRjaGluZyB0ZWNobmlxdWVzIGluIHRoaXMgZ2VuZXJhdGlvbi4gVGhpcyB0YWJsZSBpcyB0aGUgYmVkcm9jayBmb3IgZGV2aWNlIHJlY29nbml0aW9uLCBhbmQgZ2V0dGluZyBmYW1pbGlhciB3aXRoIGl0IHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyJiMzOTtzIGJlaGF2aW91ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGgxMmtfd2lmaTdfcGNpX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTM1LVx0eyBQQ0lfVkRFVklDRShRQ09NLCBRQ045Mjc0X0RFVklDRV9JRCkgfSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYzo0MTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRoMTJrX3dpZmk3X3BjaV9pZF90YWJsZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTQyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTg4PXN0YXRpYyBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgYXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTE4OS1cdC5uYW1lID0gXCYjMzQ7YXRoMTJrX3dpZmk3X3BjaVwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MTkwOlx0LmlkX3RhYmxlID0gYXRoMTJrX3dpZmk3X3BjaV9pZF90YWJsZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMTkxLVx0Lm9wcy5wcm9iZSA9IGF0aDEya193aWZpN19wY2lfcHJvYmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTE1CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KioKCkFscmlnaHQsIHNvIHN5emthbGxlciAqY2FuKiBpbmplY3QgYSBQQ0kgZGV2aWNlLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgdmVuZG9yIElEIFFDT00gYW5kIGRldmljZSBJRCBRQ045Mjc0X0RFVklDRV9JRC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB3YWl0Li4uIGRvZXMgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgcmVhbGx5IGFsbG93ICphcmJpdHJhcnkqIFBDSSBkZXZpY2UgaW5qZWN0aW9uPyBZZXMsIEkmIzM5O20gcHJldHR5IHN1cmUgaXQgaGFzIHRoYXQgYHN5el9wY2lfc2V0dXBgIHBzZXVkby1zeXNjYWxsIHRoYXQgZ2l2ZXMgdXMgc29tZSBjb250cm9sIG92ZXIgdmVuZG9yIGFuZCBkZXZpY2UgSURzLiBHb29kLgoKTm93LCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gZm9jdXMgb24gJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyYjMzQ7IHRoYXQgcmVseSBvbiBwaHlzaWNhbCBQQ0llIGNhcmRzIHRoYXQgYXJlbiYjMzk7dCBlbXVsYXRlZCB3ZWxsIGluIHN0YW5kYXJkIFFFTVUuIElzIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBmb3IgUXVhbGNvbW0gV2ktRmkgNyBkZXZpY2VzLCByZWFsbHkgaW4gdGhhdCBjYXRlZ29yeT8gSXQmIzM5O3MgYSBXaS1GaSBkcml2ZXIsIG5vdCBhIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVS4gSG1tLi4uCgpCdXQsIGhvbGQgb24sIHRoZSBjb3JlIHByaW5jaXBsZSBpcyB0aGUgc2FtZS4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBkcml2ZXIgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uIGFuZCBkbyBhbnl0aGluZyB1c2VmdWwgZHVyaW5nIGZ1enppbmc/IElmIGl0IGRvZXMsIHRoZW4gZnV6emluZyBpdCBpcyBwcm9iYWJseSBub3Qgd29ydGggdGhlIGVmZm9ydC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgbG9naWMgYXMgdGhlICYjMzQ7c3dpdGNoL1NtYXJ0TklDL0dQVSYjMzQ7IGRyaXZlcnMuCgpMZXQgbWUgdGhpbmvigKYgd2hhdCAqZXhhY3RseSogZG9lcyBgYXRoMTJrX3BjaV9wcm9iZWAgZG8/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgZnVuY3Rpb24mIzM5O3MgY29kZS4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gYXNzZXNzaW5nIGlmIHRoaXMgaXMgYSB2aWFibGUgZnV6emluZyB0YXJnZXQgb3Igbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1Mjc9YXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTU0Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTU0ODpzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NDktXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgyOD1pbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODQ5LVx0cGNpX2RyaXZlci1cdTAwM2VpZF90YWJsZSA9IGRyaXZlci1cdTAwM2VpZF90YWJsZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg1MDpcdHBjaV9kcml2ZXItXHUwMDNlcHJvYmUgPSBhdGgxMmtfcGNpX3Byb2JlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODUxLVx0cGNpX2RyaXZlci1cdTAwM2VyZW1vdmUgPSBhdGgxMmtfcGNpX3JlbW92ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMTAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYXRoMTJrX3BjaV9wcm9iZSBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgYXRoMTJrX3BjaV9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB0aGlzIHJvdXRpbmUgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIGFuZCwgY3J1Y2lhbGx5LCBpZiBpdCBjb250YWlucyBhbnkgZWFybHkgYmFpbG91dCBwYXRocyB0aGF0IGFyZSBpbmRpY2F0aXZlIG9mIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIG9yIGZ1bmRhbWVudGFsIHJlc291cmNlIGNvbmZsaWN0cy4gVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBoaWdoLWxldmVsIHNlbnNlIG9mIGl0cyBlcnJvciBoYW5kbGluZyBzdHJhdGVneSBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgaW5pdGlhbCBwb2ludHMgb2YgZmFpbHVyZSBkdXJpbmcgdGhlIFBDSSBkZXZpY2UgYnJpbmctdXAgcHJvY2Vzcy4gQW55IHF1aWNrIGRpc3F1YWxpZmljYXRpb24gYmFzZWQgb24gcmVnaXN0ZXIgYWNjZXNzIHdvdWxkIGJlIGV4dHJlbWVseSB1c2VmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NDg6XHRzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4xNTQ5Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuMTU1MDpcdHtcbjE1NTE6XHRcdGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkO1xuMTU1MjpcdFx0c3RydWN0IGF0aDEya19wY2kgKmFiX3BjaTtcbjE1NTM6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XG4xNTU0Olx0XHRpbnQgcmV0O1xuMTU1NTpcdFxuMTU1NjpcdFx0YWIgPSBhdGgxMmtfY29yZV9hbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCphYl9wY2kpLCBBVEgxMktfQlVTX1BDSSk7XG4xNTU3Olx0XHRpZiAoIWFiKSB7XG4xNTU4Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMmsgYmFzZVxcblwmIzM0Oyk7XG4xNTU5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTU2MDpcdFx0fVxuMTU2MTpcdFxuMTU2MjpcdFx0YWItXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4xNTYzOlx0XHRhYl9wY2kgPSBhdGgxMmtfcGNpX3ByaXYoYWIpO1xuMTU2NDpcdFx0YWJfcGNpLVx1MDAzZWRldl9pZCA9IHBjaV9kZXYtXHUwMDNlZGV2aWNlO1xuMTU2NTpcdFx0YWJfcGNpLVx1MDAzZWFiID0gYWI7XG4xNTY2Olx0XHRhYl9wY2ktXHUwMDNlcGRldiA9IHBkZXY7XG4xNTY3Olx0XHRhYi1cdTAwM2VoaWYub3BzID0gXHUwMDI2YXRoMTJrX3BjaV9oaWZfb3BzO1xuMTU2ODpcdFx0YWItXHUwMDNlZndfbW9kZSA9IEFUSDEyS19RTUlfRklSTVdBUkVfTU9ERV9OT1JNQUw7XG4xNTY5Olx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWIpO1xuMTU3MDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YWJfcGNpLVx1MDAzZXdpbmRvd19sb2NrKTtcbjE1NzE6XHRcbjE1NzI6XHRcdHJldCA9IGF0aDEya19wY2lfY2xhaW0oYWJfcGNpLCBwZGV2KTtcbjE1NzM6XHRcdGlmIChyZXQpIHtcbjE1NzQ6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNsYWltIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xNTc1Olx0XHRcdGdvdG8gZXJyX2ZyZWVfY29yZTtcbjE1NzY6XHRcdH1cbjE1Nzc6XHRcbjE1Nzg6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXCYjMzQ7cGNpIHByb2JlICUwNHg6JTA0eCAlMDR4OiUwNHhcXG5cJiMzNDssXG4xNTc5Olx0XHRcdCAgIHBkZXYtXHUwMDNldmVuZG9yLCBwZGV2LVx1MDAzZWRldmljZSxcbjE1ODA6XHRcdFx0ICAgcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yLCBwZGV2LVx1MDAzZXN1YnN5c3RlbV9kZXZpY2UpO1xuMTU4MTpcdFxuMTU4MjpcdFx0YWItXHUwMDNlaWQudmVuZG9yID0gcGRldi1cdTAwM2V2ZW5kb3I7XG4xNTgzOlx0XHRhYi1cdTAwM2VpZC5kZXZpY2UgPSBwZGV2LVx1MDAzZWRldmljZTtcbjE1ODQ6XHRcdGFiLVx1MDAzZWlkLnN1YnN5c3RlbV92ZW5kb3IgPSBwZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3I7XG4xNTg1Olx0XHRhYi1cdTAwM2VpZC5zdWJzeXN0ZW1fZGV2aWNlID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xuMTU4NjpcdFxuMTU4NzpcdFx0ZGV2aWNlX2lkID0gYXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KHBjaV9kZXYpO1xuMTU4ODpcdFx0aWYgKGRldmljZV9pZCBcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xuMTU4OTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IGRldmljZSBmYW1pbHkgaWRcXG5cJiMzNDspO1xuMTU5MDpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTU5MTpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNTkyOlx0XHR9XG4xNTkzOlx0XG4xNTk0Olx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1BDSSwgXCYjMzQ7UENJIGRldmljZSBmYW1pbHkgaWQ6ICVkXFxuXCYjMzQ7LCBkZXZpY2VfaWQpO1xuMTU5NTpcdFxuMTU5NjpcdFx0YWJfcGNpLVx1MDAzZWRldmljZV9mYW1pbHlfb3BzID0gXHUwMDI2YXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVx1MDAzZW9wcztcbjE1OTc6XHRcdGFiX3BjaS1cdTAwM2VyZWdfYmFzZSA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cdTAwM2VyZWdfYmFzZTtcbjE1OTg6XHRcbjE1OTk6XHRcdC8qIENhbGwgZGV2aWNlIHNwZWNpZmljIHByb2JlLiBUaGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IGNhblxuMTYwMDpcdFx0ICogYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgb3BzIGluIGZ1dHVyZVxuMTYwMTpcdFx0ICogcHJvYmUgaXMgdmFsaWRhdGVkIGZvciBOVUxMIGR1cmluZyByZWdpc3RyYXRpb24uXG4xNjAyOlx0XHQgKi9cbjE2MDM6XHRcdHJldCA9IGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2Vwcm9iZShwZGV2LCBwY2lfZGV2KTtcbjE2MDQ6XHRcdGlmIChyZXQpIHtcbjE2MDU6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHByb2JlIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjA2Olx0XHRcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcbjE2MDc6XHRcdH1cbjE2MDg6XHRcbjE2MDk6XHRcdHJldCA9IGF0aDEya19wY2lfbXNpX2FsbG9jKGFiX3BjaSk7XG4xNjEwOlx0XHRpZiAocmV0KSB7XG4xNjExOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvYyBtc2k6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTYxMjpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNjEzOlx0XHR9XG4xNjE0Olx0XG4xNjE1Olx0XHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XG4xNjE2Olx0XHRpZiAocmV0KVxuMTYxNzpcdFx0XHRnb3RvIGVycl9wY2lfbXNpX2ZyZWU7XG4xNjE4Olx0XG4xNjE5Olx0XHRyZXQgPSBhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChhYl9wY2ksIGNwdW1hc2tfb2YoMCkpO1xuMTYyMDpcdFx0aWYgKHJldCkge1xuMTYyMTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2V0IGlycSBhZmZpbml0eSAlZFxcblwmIzM0OywgcmV0KTtcbjE2MjI6XHRcdFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xuMTYyMzpcdFx0fVxuMTYyNDpcdFxuMTYyNTpcdFx0cmV0ID0gYXRoMTJrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xuMTYyNjpcdFx0aWYgKHJldCkge1xuMTYyNzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgbWhpOiAlZFxcblwmIzM0OywgcmV0KTtcbjE2Mjg6XHRcdFx0Z290byBlcnJfaXJxX2FmZmluaXR5X2NsZWFudXA7XG4xNjI5Olx0XHR9XG4xNjMwOlx0XG4xNjMxOlx0XHRyZXQgPSBhdGgxMmtfaGFsX3NybmdfaW5pdChhYik7XG4xNjMyOlx0XHRpZiAocmV0KVxuMTYzMzpcdFx0XHRnb3RvIGVycl9taGlfdW5yZWdpc3RlcjtcbjE2MzQ6XHRcbjE2MzU6XHRcdHJldCA9IGF0aDEya19jZV9hbGxvY19waXBlcyhhYik7XG4xNjM2Olx0XHRpZiAocmV0KSB7XG4xNjM3Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBjZSBwaXBlczogJWRcXG5cJiMzNDssIHJldCk7XG4xNjM4Olx0XHRcdGdvdG8gZXJyX2hhbF9zcm5nX2RlaW5pdDtcbjE2Mzk6XHRcdH1cbjE2NDA6XHRcbjE2NDE6XHRcdGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcbjE2NDI6XHRcbjE2NDM6XHRcdHJldCA9IGF0aDEya19wY2lfY29uZmlnX2lycShhYik7XG4xNjQ0Olx0XHRpZiAocmV0KSB7XG4xNjQ1Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjb25maWcgaXJxOiAlZFxcblwmIzM0OywgcmV0KTtcbjE2NDY6XHRcdFx0Z290byBlcnJfY2VfZnJlZTtcbjE2NDc6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxMjEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgYXRoMTJrX3BjaV9wcm9iZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGF0aDEya19wY2lfcHJvYmVgLCBsaW5lIDE2NDMgc2hvd3MgYSBjYWxsIHRvIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgLiBCZWZvcmUgdGhhdCwgdGhlcmUmIzM5O3MgcXVpdGUgYSBjaGFpbiBvZiBpbml0aWFsaXphdGlvbnM6IGBhdGgxMmtfcGNpX2NsYWltYCwgdGhlbiBgYWJfcGNpLSZndDtkZXZpY2VfZmFtaWx5X29wcy0mZ3Q7cHJvYmVgLCBmb2xsb3dlZCBieSBgYXRoMTJrX3BjaV9tc2lfYWxsb2NgLCBgYXRoMTJrX2NvcmVfcHJlX2luaXRgLCBgYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnRgLCBgYXRoMTJrX21oaV9yZWdpc3RlcmAsIGBhdGgxMmtfaGFsX3NybmdfaW5pdGAsIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgLCBhbmQgZmluYWxseSBgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWdgLiBUaGF0JiMzOTtzIGEgbG90IG9mIHNldHVwIGJlZm9yZSBldmVuIGdldHRpbmcgdG8gSVJRIGNvbmZpZ3VyYXRpb24uCgpUaGUgYGF0aDEya19taGlfcmVnaXN0ZXJgIGNhbGwgc3RpY2tzIG91dC4gSSByZW1lbWJlciBNSEksIE1vZGVtIEhvc3QgSW50ZXJmYWNlLCBpcyBhIFF1YWxjb21tLXNwZWNpZmljIHByb3RvY29sLiBJIHJlY2FsbCBpdCYjMzk7cyB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIG1vZGVtIGluIHRoZXNlIHR5cGVzIG9mIGRldmljZXMuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGRvZXMgdGhpcyBNSEkgcmVnaXN0cmF0aW9uICpyZXF1aXJlKiB0aGUgaGFyZHdhcmUgdG8gYmUgYWN0dWFsbHkgcHJlc2VudCBhbmQgcmVzcG9uZGluZyBiZWZvcmUgaXQgcmVnaXN0ZXJzPyBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIGJlIHN1cmUuIEl0IGNvdWxkIGJlIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBmb3Igc3Vic2VxdWVudCBpbml0aWFsaXphdGlvbiBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21oaV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0xODA9c3RhdGljIHZvaWQgYXRoMTJrX21oaV9vcF93cml0ZV9yZWcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0xODYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjE4NzppbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0xODgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg3OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDEya19taGlfcmVnaXN0ZXJgIHRoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGFub3RoZXIgcmVnaXN0ZXIgZnVuY3Rpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggaW5pdGlhbGl6YXRpb24gb3IgY29uZmlndXJhdGlvbiBvZiB0aGUgYXRoMTJrIGRyaXZlciwgcHJvYmFibHkgZm9yIHRoZSBNSEkgaW50ZXJmYWNlLiYjMzQ7IEl0JiMzOTtzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJlIGxvdy1sZXZlbCwgZmlkZGxpbmcgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlcnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBzdHVmZiBsaWtlIHJlZ2lzdGVyIG9mZnNldHMsIGJpdGZpZWxkcywgcG90ZW50aWFsbHkgc29tZSBtZW1vcnkgbWFwcGluZyBpZiBpdCYjMzk7cyBoYW5kbGluZyBhIGhhcmR3YXJlIHJlc291cmNlLiBJJiMzOTttIGd1ZXNzaW5nIGl0IHdpbGwgYmUgZWl0aGVyIGEgcmVhZCBvciB3cml0ZSByZWdpc3RlciB0aGF0IGNvbmZpZ3VyZXMgc29tZSBhc3BlY3Qgb2YgdGhlIE1ISSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBhbnkgY29tbWVudHMgb3Igc3Vycm91bmRpbmcgY29kZSB0byBmaWd1cmUgb3V0ICp3aGF0KiBzcGVjaWZpY2FsbHkgaXMgYmVpbmcgcmVnaXN0ZXJlZC4gSXMgaXQgYW4gaW50ZXJydXB0IG1hc2s/IEEgY2xvY2sgY29uZmlndXJhdGlvbj8gQSBETUEgc2V0dGluZz8gSXQmIzM5O3MgYWxsIGFib3V0IGNvbnRleHQgaGVyZS4gQWxyaWdodCwgbGV0JiMzOTtzIGdldCByZWFkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODc6XHRpbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuIDE4ODpcdHtcbiAxODk6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBhYl9wY2ktXHUwMDNlYWI7XG4gMTkwOlx0XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsO1xuIDE5MTpcdFx0dW5zaWduZWQgaW50IGJvYXJkX2lkO1xuIDE5MjpcdFx0aW50IHJldDtcbiAxOTM6XHRcdGJvb2wgZHVhbG1hYyA9IGZhbHNlO1xuIDE5NDpcdFxuIDE5NTpcdFx0bWhpX2N0cmwgPSBtaGlfYWxsb2NfY29udHJvbGxlcigpO1xuIDE5NjpcdFx0aWYgKCFtaGlfY3RybClcbiAxOTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTk4Olx0XG4gMTk5Olx0XHRhYl9wY2ktXHUwMDNlbWhpX3ByZV9jYiA9IE1ISV9DQl9JTlZBTElEO1xuIDIwMDpcdFx0YWJfcGNpLVx1MDAzZW1oaV9jdHJsID0gbWhpX2N0cmw7XG4gMjAxOlx0XHRtaGlfY3RybC1cdTAwM2VjbnRybF9kZXYgPSBhYi1cdTAwM2VkZXY7XG4gMjAyOlx0XHRtaGlfY3RybC1cdTAwM2VyZWdzID0gYWItXHUwMDNlbWVtO1xuIDIwMzpcdFx0bWhpX2N0cmwtXHUwMDNlcmVnX2xlbiA9IGFiLVx1MDAzZW1lbV9sZW47XG4gMjA0Olx0XHRtaGlfY3RybC1cdTAwM2VyZGRtX3NpemUgPSBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlcmRkbV9zaXplO1xuIDIwNTpcdFxuIDIwNjpcdFx0aWYgKGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VvdHBfYm9hcmRfaWRfcmVnaXN0ZXIpIHtcbiAyMDc6XHRcdFx0Ym9hcmRfaWQgPVxuIDIwODpcdFx0XHRcdGF0aDEya19wY2lfcmVhZDMyKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKTtcbiAyMDk6XHRcdFx0Ym9hcmRfaWQgPSB1MzJfZ2V0X2JpdHMoYm9hcmRfaWQsIE9UUF9CT0FSRF9JRF9NQVNLKTtcbiAyMTA6XHRcbiAyMTE6XHRcdFx0aWYgKCFib2FyZF9pZCB8fCAoYm9hcmRfaWQgPT0gT1RQX0lOVkFMSURfQk9BUkRfSUQpKSB7XG4gMjEyOlx0XHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULFxuIDIxMzpcdFx0XHRcdFx0ICAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgYm9hcmQgaWRcXG5cJiMzNDspO1xuIDIxNDpcdFx0XHR9IGVsc2UgaWYgKGJvYXJkX2lkIFx1MDAyNiBPVFBfVkFMSURfRFVBTE1BQ19CT0FSRF9JRF9NQVNLKSB7XG4gMjE1Olx0XHRcdFx0ZHVhbG1hYyA9IHRydWU7XG4gMjE2Olx0XHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULFxuIDIxNzpcdFx0XHRcdFx0ICAgXCYjMzQ7ZHVhbG1hYyBmdyBzZWxlY3RlZCBmb3IgYm9hcmQgaWQ6ICV4XFxuXCYjMzQ7LCBib2FyZF9pZCk7XG4gMjE4Olx0XHRcdH1cbiAyMTk6XHRcdH1cbiAyMjA6XHRcbiAyMjE6XHRcdGlmIChkdWFsbWFjKSB7XG4gMjIyOlx0XHRcdGlmIChhYi1cdTAwM2Vmdy5hbXNzX2R1YWxtYWNfZGF0YSBcdTAwMjZcdTAwMjYgYWItXHUwMDNlZncuYW1zc19kdWFsbWFjX2xlbiBcdTAwM2UgMCkge1xuIDIyMzpcdFx0XHRcdC8qIHVzZSBNSEkgZmlybXdhcmUgZmlsZSBmcm9tIGZpcm13YXJlLU4uYmluICovXG4gMjI0Olx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfZGF0YSA9IGFiLVx1MDAzZWZ3LmFtc3NfZHVhbG1hY19kYXRhO1xuIDIyNTpcdFx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X3N6ID0gYWItXHUwMDNlZncuYW1zc19kdWFsbWFjX2xlbjtcbiAyMjY6XHRcdFx0fSBlbHNlIHtcbiAyMjc6XHRcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZHVhbG1hYyBmaXJtd2FyZSBJRSBub3QgcHJlc2VudCBpbiBmaXJtd2FyZS1OLmJpblxcblwmIzM0Oyk7XG4gMjI4Olx0XHRcdFx0cmV0ID0gLUVOT0VOVDtcbiAyMjk6XHRcdFx0XHRnb3RvIGZyZWVfY29udHJvbGxlcjtcbiAyMzA6XHRcdFx0fVxuIDIzMTpcdFx0fSBlbHNlIHtcbiAyMzI6XHRcdFx0aWYgKGFiLVx1MDAzZWZ3LmFtc3NfZGF0YSBcdTAwMjZcdTAwMjYgYWItXHUwMDNlZncuYW1zc19sZW4gXHUwMDNlIDApIHtcbiAyMzM6XHRcdFx0XHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xuIDIzNDpcdFx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X2RhdGEgPSBhYi1cdTAwM2Vmdy5hbXNzX2RhdGE7XG4gMjM1Olx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfc3ogPSBhYi1cdTAwM2Vmdy5hbXNzX2xlbjtcbiAyMzY6XHRcdFx0fSBlbHNlIHtcbiAyMzc6XHRcdFx0XHQvKiB1c2UgdGhlIG9sZCBzZXBhcmF0ZSBtaGkuYmluIE1ISSBmaXJtd2FyZSBmaWxlICovXG4gMjM4Olx0XHRcdFx0YXRoMTJrX2NvcmVfY3JlYXRlX2Zpcm13YXJlX3BhdGgoYWIsIEFUSDEyS19BTVNTX0ZJTEUsXG4gMjM5Olx0XHRcdFx0XHRcdFx0XHQgYWJfcGNpLVx1MDAzZWFtc3NfcGF0aCxcbiAyNDA6XHRcdFx0XHRcdFx0XHRcdCBzaXplb2YoYWJfcGNpLVx1MDAzZWFtc3NfcGF0aCkpO1xuIDI0MTpcdFx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X2ltYWdlID0gYWJfcGNpLVx1MDAzZWFtc3NfcGF0aDtcbiAyNDI6XHRcdFx0fVxuIDI0MzpcdFx0fVxuIDI0NDpcdFxuIDI0NTpcdFx0cmV0ID0gYXRoMTJrX21oaV9nZXRfbXNpKGFiX3BjaSk7XG4gMjQ2Olx0XHRpZiAocmV0KSB7XG4gMjQ3Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgbXNpIGZvciBtaGlcXG5cJiMzNDspO1xuIDI0ODpcdFx0XHRnb3RvIGZyZWVfY29udHJvbGxlcjtcbiAyNDk6XHRcdH1cbiAyNTA6XHRcbiAyNTE6XHRcdGlmICghdGVzdF9iaXQoQVRIMTJLX1BDSV9GTEFHX01VTFRJX01TSV9WRUNUT1JTLCBcdTAwMjZhYl9wY2ktXHUwMDNlZmxhZ3MpKVxuIDI1MjpcdFx0XHRtaGlfY3RybC1cdTAwM2VpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfTk9CQUxBTkNJTkc7XG4gMjUzOlx0XG4gMjU0Olx0XHRtaGlfY3RybC1cdTAwM2Vpb3ZhX3N0YXJ0ID0gMDtcbiAyNTU6XHRcdG1oaV9jdHJsLVx1MDAzZWlvdmFfc3RvcCA9IGFiX3BjaS1cdTAwM2VkbWFfbWFzaztcbiAyNTY6XHRcdG1oaV9jdHJsLVx1MDAzZXNibF9zaXplID0gU1pfNTEySztcbiAyNTc6XHRcdG1oaV9jdHJsLVx1MDAzZXNlZ19sZW4gPSBTWl81MTJLO1xuIDI1ODpcdFx0bWhpX2N0cmwtXHUwMDNlZmJjX2Rvd25sb2FkID0gdHJ1ZTtcbiAyNTk6XHRcdG1oaV9jdHJsLVx1MDAzZXJ1bnRpbWVfZ2V0ID0gYXRoMTJrX21oaV9vcF9ydW50aW1lX2dldDtcbiAyNjA6XHRcdG1oaV9jdHJsLVx1MDAzZXJ1bnRpbWVfcHV0ID0gYXRoMTJrX21oaV9vcF9ydW50aW1lX3B1dDtcbiAyNjE6XHRcdG1oaV9jdHJsLVx1MDAzZXN0YXR1c19jYiA9IGF0aDEya19taGlfb3Bfc3RhdHVzX2NiO1xuIDI2MjpcdFx0bWhpX2N0cmwtXHUwMDNlcmVhZF9yZWcgPSBhdGgxMmtfbWhpX29wX3JlYWRfcmVnO1xuIDI2MzpcdFx0bWhpX2N0cmwtXHUwMDNld3JpdGVfcmVnID0gYXRoMTJrX21oaV9vcF93cml0ZV9yZWc7XG4gMjY0Olx0XG4gMjY1Olx0XHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZW1oaV9jb25maWcpO1xuIDI2NjpcdFx0aWYgKHJldCkge1xuIDI2NzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgdG8gbWhpIGJ1cywgZXJyID0gJWRcXG5cJiMzNDssIHJldCk7XG4gMjY4Olx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDI2OTpcdFx0fVxuIDI3MDpcdFxuIDI3MTpcdFx0cmV0dXJuIDA7XG4gMjcyOlx0XG4gMjczOlx0ZnJlZV9jb250cm9sbGVyOlxuIDI3NDpcdFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XG4gMjc1Olx0XHRhYl9wY2ktXHUwMDNlbWhpX2N0cmwgPSBOVUxMO1xuIDI3NjpcdFx0cmV0dXJuIHJldDtcbiAyNzc6XHR9XG4gMjc4Olx0XG4gMjc5Olx0dm9pZCBhdGgxMmtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbiAyODA6XHR7XG4gMjgxOlx0XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsID0gYWJfcGNpLVx1MDAzZW1oaV9jdHJsO1xuIDI4MjpcdFxuIDI4MzpcdFx0bWhpX3VucmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCk7XG4gMjg0Olx0XHRrZnJlZShtaGlfY3RybC1cdTAwM2VpcnEpO1xuIDI4NTpcdFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XG4gMjg2Olx0XHRhYl9wY2ktXHUwMDNlbWhpX2N0cmwgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk5OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGF0aDEyayBEcml2ZXImIzM5O3MgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGBhdGgxMmtgIGRyaXZlciBhbmQgSSYjMzk7dmUgaGl0IGEga2V5IHBvaW50OiBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIFRoaXMgZnVuY3Rpb24sIEkgc2VlLCBjYWxscyBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyB0aGlzIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAgaGF2ZSBhIGhhcmQgZGVwZW5kZW5jeSBvbiBwaHlzaWNhbCBoYXJkd2FyZT8gSXQgKnNob3VsZG4mIzM5O3QqLCBpbiBwcmluY2lwbGUsIHNpbmNlIGl0cyBwcmltYXJ5IHJvbGUgaXMgYnVzIHJlZ2lzdHJhdGlvbi4gSXQmIzM5O3Mgc3VwcG9zZWQgdG8gYW5ub3VuY2UgdGhlIGNvbnRyb2xsZXIgdG8gdGhlIE1ISSBidXMgaW5mcmFzdHJ1Y3R1cmUuCgpCdXQgSSBuZWVkIHRvIGJlIHN1cmUuIFRoaW5raW5nIGZ1cnRoZXIsIEkgc2VlIHRoYXQgYGF0aDEya19wY2lfcHJvYmVgIOKAkyB0aGUgUENJIHByb2JlIGZ1bmN0aW9uIOKAkyBjYWxscyBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIFRoZW4sIGluIHdoYXQgYXBwZWFycyB0byBiZSBhIHR5cGljYWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGl0IGNhbGxzIGEgd2hvbGUgc2xldyBvZiBvdGhlciBmdW5jdGlvbnM6IGBhdGgxMmtfaGFsX3NybmdfaW5pdGAsIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgLCBgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWdgLCBhbmQgZmluYWxseSwgYGF0aDEya19wY2lfY29uZmlnX2lycWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBwYXRoIHdpbGwgd29yayBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiByZWFsIGhhcmR3YXJlLgoKVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBpcyB0aGVyZSBhbnl0aGluZyBpbiB0aGlzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRoYXQgd291bGQgcHJldmVudCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBmcm9tIHJ1bm5pbmcgaWYgaXQmIzM5O3MgcnVubmluZyBvbiBhIHN5c3RlbSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmU/IEkgbmVlZCB0byBrbm93IHRoaXMsIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBsaWtlbHkgY29uZmlndXJlcyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgSSBuZWVkIHRvIHRlc3QgdGhhdCBwb3J0aW9uIG9mIHRoZSBjb2RlLgoKVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgYGF0aDEya19oYWxfc3JuZ19pbml0YC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIG5leHQgc3RlcCB0byBmb2xsb3cgdG8gYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19oYWxfc3JuZ19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5jPTcyNj1zdGF0aWMgdm9pZCBhdGgxMmtfaGFsX3VucmVnaXN0ZXJfc3JuZ19sb2NrX2tleXMoc3RydWN0IGF0aDEya19oYWwgKmhhbClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5jLTczMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmM6NzM0OmludCBhdGgxMmtfaGFsX3NybmdfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuYy03MzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc1OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgYXRoMTJrX2hhbF9zcm5nX2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYXRoMTJrX2hhbF9zcm5nX2luaXRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgZmFpcmx5IGRlc2NyaXB0aXZlLCBzdWdnZXN0aW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW5pdGlhbGl6YXRpb24gb2YgYSAmIzM0O3NlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciYjMzQ7IOKAkyBzcGVjaWZpY2FsbHksIHRoZSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIEF0aGVyb3MgMTJrIGNoaXBzZXQsIEkmIzM5O20gYXNzdW1pbmcuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IGNvbXBvbmVudHMgYXJlIGJlaW5nIGluaXRpYWxpemVkPyBXaGF0IGtpbmQgb2Ygc2VjdXJpdHkgbWVhc3VyZXMgYXJlIGltcGxlbWVudGVkLCBvciBiZWluZyBwcmVwYXJlZCBmb3I/IFdoYXQgY29udGV4dCBpcyBuZWVkZWQgZm9yIHRoaXMgaW5pdGlhbGl6YXRpb24gdG8gc3VjY2VlZD8gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzPyBBcmUgd2Ugc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgaXRzZWxmLCBjb25maWd1cmluZyByZWdpc3RlcnMsIG9yIHBlcmhhcHMgZXN0YWJsaXNoaW5nIGNvbW11bmljYXRpb24gY2hhbm5lbHMgZm9yIGVudHJvcHkgZ2F0aGVyaW5nPyBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOiByZWdpc3RlciBhY2Nlc3MsIHNlZWQgZ2VuZXJhdGlvbiwgbWF5YmUgaW50ZXJydXB0IHNldHVwIGZvciBldmVudCBoYW5kbGluZywgcGVyaGFwcyBldmVuIHRlc3RzIGZvciBiYXNpYyBmdW5jdGlvbmFsaXR5IHRvIGVuc3VyZSB0aGUgUk5HIGlzIHdvcmtpbmcgYXMgZGVzaWduZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2FyZWZ1bGx5IGZvciBlcnJvciBoYW5kbGluZy4gQSBwcm9wZXIgc2VjdXJlIFJORyBpcyAqY3JpdGljYWwqIHNvIHRoZSBkZXRhaWxzIG9uIHRoZSBlcnJvciBwYXRocyB3aWxsIGJlIGV4dHJlbWVseSB2YWx1YWJsZS4gVGhlIGZsb3cgaXRzZWxmIGlzIHNvbWV0aGluZyBJJiMzOTtsbCB3YW50IHRvIHRyYWNlLiBXaGF0IGlzIHRoZSBvcmRlciBvZiBldmVudHM/IFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZDsgdGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MzQ6XHRpbnQgYXRoMTJrX2hhbF9zcm5nX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA3MzU6XHR7XG4gNzM2Olx0XHRzdHJ1Y3QgYXRoMTJrX2hhbCAqaGFsID0gXHUwMDI2YWItXHUwMDNlaGFsO1xuIDczNzpcdFx0aW50IHJldDtcbiA3Mzg6XHRcbiA3Mzk6XHRcdHJldCA9IGhhbC1cdTAwM2VvcHMtXHUwMDNlY3JlYXRlX3NybmdfY29uZmlnKGhhbCk7XG4gNzQwOlx0XHRpZiAocmV0KVxuIDc0MTpcdFx0XHRnb3RvIGVycl9oYWw7XG4gNzQyOlx0XG4gNzQzOlx0XHRoYWwtXHUwMDNlZGV2ID0gYWItXHUwMDNlZGV2O1xuIDc0NDpcdFxuIDc0NTpcdFx0cmV0ID0gYXRoMTJrX2hhbF9hbGxvY19jb250X3JkcChoYWwpO1xuIDc0NjpcdFx0aWYgKHJldClcbiA3NDc6XHRcdFx0Z290byBlcnJfaGFsO1xuIDc0ODpcdFxuIDc0OTpcdFx0cmV0ID0gYXRoMTJrX2hhbF9hbGxvY19jb250X3dycChoYWwpO1xuIDc1MDpcdFx0aWYgKHJldClcbiA3NTE6XHRcdFx0Z290byBlcnJfZnJlZV9jb250X3JkcDtcbiA3NTI6XHRcbiA3NTM6XHRcdGF0aDEya19oYWxfcmVnaXN0ZXJfc3JuZ19sb2NrX2tleXMoaGFsKTtcbiA3NTQ6XHRcbiA3NTU6XHRcdHJldHVybiAwO1xuIDc1NjpcdFxuIDc1NzpcdGVycl9mcmVlX2NvbnRfcmRwOlxuIDc1ODpcdFx0YXRoMTJrX2hhbF9mcmVlX2NvbnRfcmRwKGhhbCk7XG4gNzU5Olx0XG4gNzYwOlx0ZXJyX2hhbDpcbiA3NjE6XHRcdHJldHVybiByZXQ7XG4gNzYyOlx0fVxuIDc2MzpcdFxuIDc2NDpcdHZvaWQgYXRoMTJrX2hhbF9zcm5nX2RlaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIDc2NTpcdHtcbiA3NjY6XHRcdHN0cnVjdCBhdGgxMmtfaGFsICpoYWwgPSBcdTAwMjZhYi1cdTAwM2VoYWw7XG4gNzY3Olx0XG4gNzY4Olx0XHRhdGgxMmtfaGFsX3VucmVnaXN0ZXJfc3JuZ19sb2NrX2tleXMoaGFsKTtcbiA3Njk6XHRcdGF0aDEya19oYWxfZnJlZV9jb250X3JkcChoYWwpO1xuIDc3MDpcdFx0YXRoMTJrX2hhbF9mcmVlX2NvbnRfd3JwKGhhbCk7XG4gNzcxOlx0XHRrZnJlZShoYWwtXHUwMDNlc3JuZ19jb25maWcpO1xuIDc3MjpcdFx0aGFsLVx1MDAzZXNybmdfY29uZmlnID0gTlVMTDtcbiA3NzM6XHR9XG4gNzc0Olx0XG4gNzc1Olx0dm9pZCBhdGgxMmtfaGFsX2R1bXBfc3JuZ19zdGF0cyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIDc3NjpcdHtcbiA3Nzc6XHRcdHN0cnVjdCBoYWxfc3JuZyAqc3JuZztcbiA3Nzg6XHRcdHN0cnVjdCBhdGgxMmtfZXh0X2lycV9ncnAgKmlycV9ncnA7XG4gNzc5Olx0XHRzdHJ1Y3QgYXRoMTJrX2NlX3BpcGUgKmNlX3BpcGU7XG4gNzgwOlx0XHRpbnQgaTtcbiA3ODE6XHRcbiA3ODI6XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O0xhc3QgaW50ZXJydXB0IHJlY2VpdmVkIGZvciBlYWNoIENFOlxcblwmIzM0Oyk7XG4gNzgzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODU3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNZW1vcnkgYW5kIExvY2tpbmc6IEEgUXVpY2sgQ2hlY2stSW4qKgoKUmlnaHQsIHNvIHRoaXMgcGllY2Ugb2YgY29kZSBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2luZyBsb2NrIGtleXMuIFByZXR0eSBzdHJhaWdodGZvcndhcmQgYXQgZmFjZSB2YWx1ZS4gTm8gY29tcGxleCBhbGdvcml0aG1zIG9yIGludHJpY2F0ZSBkYXRhIHN0cnVjdHVyZXMgaGVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gdGhlIGJhc2ljczogc2VjdXJpbmcgdGhlIG5lY2Vzc2FyeSBtZW1vcnkgcmVzb3VyY2VzIGFuZCBlbnN1cmluZyBjb25jdXJyZW50IGFjY2VzcyBpcyBwcm9wZXJseSBoYW5kbGVkLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbG93LWxldmVsIGtlcm5lbCBvcGVyYXRpb25zLCBsaWtlbHkgd2l0aGluIGEgZHJpdmVyIGNvbnRleHQuCgpIb3dldmVyLCBJJiMzOTttIGFscmVhZHkgc3RhcnRpbmcgdG8gcHJvYmUgYSBiaXQgZGVlcGVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGF0aDEya19jZV9hbGxvY19waXBlc2AuIFdoeSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uPyBXaGF0IGltcGxpY2F0aW9ucyBkb2VzIHRoYXQgZnVuY3Rpb24gY2FsbCBoYXZlPyBEb2VzIGl0IGRlYWwgd2l0aCBhbnl0aGluZyByZWxhdGVkIHRvIHNwZWNpZmljIHJlc291cmNlcz8gSSB3YW50IHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHRoYXQgcGllY2Ugb2YgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgcGlwZSBhbGxvY2F0aW9uIHBsYXlzIGEgcm9sZSBpbiB0aGUgYnJvYWRlciBzeXN0ZW0gdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgYXJlYXMgcmVxdWlyaW5nIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgdGhpbmtpbmcsIHNvIEkmIzM5O2xsIHJldmlldyBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGJlZm9yZSBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19jZV9hbGxvY19waXBlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NlLmM9NjczPXZvaWQgYXRoMTJrX2NlX2ZyZWVfcGlwZXMoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NlLmMtNzIxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jZS5jOjcyMjppbnQgYXRoMTJrX2NlX2FsbG9jX3BpcGVzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NlLmMtNzIzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMTkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGF0aDEya19jZV9hbGxvY19waXBlc2A6CgoqKkRlY29kaW5nIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gZGlzc2VjdCB0aGlzIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGBhdGgxMmtgIGRyaXZlciAobGlrZWx5IGRlYWxpbmcgd2l0aCBBdGhlcm9zL1F1YWxjb21tIHdpcmVsZXNzIGNoaXBzZXRzKSwgdGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gYWxsb2NhdGluZyBjb21tdW5pY2F0aW9uIHBpcGVzIG9yIGNoYW5uZWxzIHdpdGhpbiB0aGUgY2hpcCYjMzk7cyBoYXJkd2FyZSBjb250ZXh0LiBUaGUgJiMzNDtDRSYjMzQ7IHByb2JhYmx5IHN0YW5kcyBmb3IgJiMzNDtDb21wbGV0aW9uIEVuZ2luZSYjMzQ7IG9yICYjMzQ7Q29tbXVuaWNhdGlvbiBFbmdpbmUmIzM0OywgYSBjcnVjaWFsIGNvbXBvbmVudCBmb3IgRE1BIG9wZXJhdGlvbnMgYW5kIGludGVycnVwdCBoYW5kbGluZyB3aXRoaW4gdGhlIHdpcmVsZXNzIGNvbnRyb2xsZXIuCgpNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaGFuZGxpbmcgdGhlIHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAgb2YgdGhlc2UgcGlwZXMsIHBlcmhhcHMgZm9yIGRpZmZlcmVudCB0cmFmZmljIGNsYXNzZXMgKFZvSVAsIHZpZGVvLCBiZXN0IGVmZm9ydCwgZXRjLikuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBvYnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSByZXNvdXJjZXMg4oCTIGRlc2NyaXB0b3JzLCBidWZmZXJzLCBpbnRlcnJ1cHQgdmVjdG9ycywgYW5kIHRoZSBsaWtlIOKAkyByZXF1aXJlZCBmb3IgdGhlc2UgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHNvbWUgZXJyb3IgY2hlY2tpbmcsIHJlc291cmNlIGFsbG9jYXRpb24gZnJvbSB0aGUgZGV2aWNlJiMzOTtzIGNvbnRleHQgKGxpa2VseSBhIGBzdHJ1Y3QgYXRoMTJrYCksIGFuZCBpbml0aWFsaXphdGlvbiBvZiByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgdG8gdHJhY2sgdGhlIHBpcGUgc3RhdGUuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBoaW50cyBhYm91dCB0aGUgcGlwZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJcyBpdCBzdGF0aWMsIGR5bmFtaWMsIG9yIGEgaHlicmlkIGFwcHJvYWNoPyBBcmUgdGhlcmUgbGltaXRzIG9uIHRoZSBudW1iZXIgb2YgcGlwZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkPyBEb2VzIGl0IHRha2UgaW50byBhY2NvdW50IHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMgdG8gZWZmaWNpZW50bHkgbWFuYWdlIHRoZSByZXNvdXJjZXM/IFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gbG9vayBmb3IgYXJndW1lbnRzIHRoYXQgcmVwcmVzZW50IHRoaW5ncyBsaWtlOiBkZXZpY2UgY29udGV4dCwgcGlwZSBpZGVudGlmaWVyLCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKGUuZy4gcXVldWUgcHJpb3JpdHksIGJ1ZmZlciBzaXplcywgaW50ZXJydXB0IHNldHRpbmdzKSwgYW5kIHBlcmhhcHMgcG9pbnRlcnMgdG8gY2FsbGJhY2sgZnVuY3Rpb25zIG9yIGNvbXBsZXRpb24gaGFuZGxlcnMuCgpVbHRpbWF0ZWx5LCBJIGV4cGVjdCB0byBzZWUgdGhpcyBmdW5jdGlvbiBhcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBtYW5hZ2luZyB0aGUgZmxvdyBvZiBkYXRhIHRvIGFuZCBmcm9tIHRoZSB3aXJlbGVzcyBoYXJkd2FyZS4gVW5kZXJzdGFuZGluZyB0aGUgZGV0YWlscyBvZiBwaXBlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgaXMgZnVuZGFtZW50YWwgZm9yIGVmZmljaWVudCB3aXJlbGVzcyBvcGVyYXRpb24sIHRocm91Z2hwdXQsIGFuZCBRb1MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBgYXRoMTJrYCBkcml2ZXIgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMjpcdGludCBhdGgxMmtfY2VfYWxsb2NfcGlwZXMoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA3MjM6XHR7XG4gNzI0Olx0XHRzdHJ1Y3QgYXRoMTJrX2NlX3BpcGUgKnBpcGU7XG4gNzI1Olx0XHRpbnQgaTtcbiA3MjY6XHRcdGludCByZXQ7XG4gNzI3Olx0XHRjb25zdCBzdHJ1Y3QgY2VfYXR0ciAqYXR0cjtcbiA3Mjg6XHRcbiA3Mjk6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFiLVx1MDAzZWNlLmNlX2xvY2spO1xuIDczMDpcdFxuIDczMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZWNlX2NvdW50OyBpJiM0MzsmIzQzOykge1xuIDczMjpcdFx0XHRhdHRyID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZWhvc3RfY2VfY29uZmlnW2ldO1xuIDczMzpcdFx0XHRwaXBlID0gXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXTtcbiA3MzQ6XHRcdFx0cGlwZS1cdTAwM2VwaXBlX251bSA9IGk7XG4gNzM1Olx0XHRcdHBpcGUtXHUwMDNlYWIgPSBhYjtcbiA3MzY6XHRcdFx0cGlwZS1cdTAwM2VidWZfc3ogPSBhdHRyLVx1MDAzZXNyY19zel9tYXg7XG4gNzM3Olx0XG4gNzM4Olx0XHRcdHJldCA9IGF0aDEya19jZV9hbGxvY19waXBlKGFiLCBpKTtcbiA3Mzk6XHRcdFx0aWYgKHJldCkge1xuIDc0MDpcdFx0XHRcdC8qIEZyZWUgYW55IHBhcnRpYWwgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uICovXG4gNzQxOlx0XHRcdFx0YXRoMTJrX2NlX2ZyZWVfcGlwZXMoYWIpO1xuIDc0MjpcdFx0XHRcdHJldHVybiByZXQ7XG4gNzQzOlx0XHRcdH1cbiA3NDQ6XHRcdH1cbiA3NDU6XHRcbiA3NDY6XHRcdHJldHVybiAwO1xuIDc0NzpcdH1cbiA3NDg6XHRcbiA3NDk6XHRpbnQgYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBjZV9pZClcbiA3NTA6XHR7XG4gNzUxOlx0XHRpZiAoY2VfaWQgXHUwMDNlPSBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQpXG4gNzUyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc1MzpcdFxuIDc1NDpcdFx0cmV0dXJuIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2Vob3N0X2NlX2NvbmZpZ1tjZV9pZF0uZmxhZ3M7XG4gNzU1Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTMxNAoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTWVtb3J5IEFsbG9jYXRpb24gQ29uY2VybnMgYW5kIGEgU3BlY2lmaWMgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGltbWVkaWF0ZSBjb250ZXh0IGhlcmUgaXMgc2ltcGxlOiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIG1lbW9yeSBhbGxvY2F0aW9uIG9wZXJhdGlvbiwgcHJlc3VtYWJseSByZWxhdGVkIHRvIHdpcmVsZXNzIGRyaXZlciBpbml0aWFsaXphdGlvbi4gVGhhdCBmaXJzdCB0aG91Z2h0LCAmIzM0O0l0IGp1c3QgYWxsb2NhdGVzIG1lbW9yeSwmIzM0OyBmZWVscyBhbG1vc3QgZGlzbWlzc2l2ZSwgYnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiBpdCBpc24mIzM5O3QgaW1wb3J0YW50LiBNZW1vcnkgYWxsb2NhdGlvbiBpcyBmdW5kYW1lbnRhbC4gV2UgbmVlZCB0byBiZSBzdXJlIGl0JiMzOTtzIGRvbmUgY29ycmVjdGx5LCBzYWZlbHksIGFuZCBlZmZpY2llbnRseS4gTm8gbGVha3MsIG5vIGZyYWdtZW50YXRpb24sIGFuZCBwcmVmZXJhYmx5LCBhbiBvcHRpbWl6ZWQgYXBwcm9hY2ggZm9yIG91ciBzcGVjaWZpYyBoYXJkd2FyZS4gV2Ugd291bGRuJiMzOTt0IHdhbnQgdG8gZ2V0IG91ciBzeXN0ZW1zIGludG8gYW4gdW5zdGFibGUgc3RhdGUgZnJvbSBhIG1lbW9yeSBpc3N1ZS4KCkJ1dCB0aGVuIG15IG1pbmQganVtcHMgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbjogYGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnYC4gV2h5IGRvZXMgdGhhdCBjb21lIHRvIG1pbmQ/IE15IGluc3RpbmN0IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFzIGEgY3JpdGljYWwgcm9sZSB0byBwbGF5IGluIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLiBQZXJoYXBzIHRoYXQgZnVuY3Rpb24gY29udGFpbnMgb25lIG9mIG91ciBiaWdnZXN0IGJvdHRsZW5lY2tzLiBEb2VzIGl0IGludm9sdmUgc29tZSBjcml0aWNhbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgY29tbWFuZCBhbmQgZXZlbnQgZGF0YT8gTWF5YmUgdGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGF0IGZ1bmN0aW9uLCB0aGF0IHdlIGFyZSBtaXNzaW5nLiBEb2VzIGl0IHJlbGF0ZSB0byB0aGUgUU1JIGludGVyZmFjZSBhbmQgc29tZSBjcnVjaWFsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmU/IFRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gaGFzIHByb2JhYmx5IGNvbWUgdG8gbWluZCBiZWNhdXNlIEkgcmVjYWxsIGhhdmluZyB0cm91YmxlIHdpdGggaXQgaW4gdGhlIHBhc3QuIEl0IG1heSBhbHNvIHByb3ZpZGUgc29tZSBtb3JlIGluc2lnaHQgaW50byB0aGUgcHJvYmxlbSBhdCBoYW5kLiBXZSBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gd2hhdCBgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWdgIGlzIGRvaW5nIGFuZCBzZWUgaG93IGl0IGZpdHMgaW4gdG8gdGhlIHdpZGVyIHNjb3BlIG9mIHRoZSBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTY0Mz1zdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNjk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo2OTk6c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNzAwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1NDg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTY0MTpcdGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwMjMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZ2AgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBRTUkgY29uZmlndXJhdGlvbiBhbmQgbGlrZWx5IGVycm9yIGhhbmRsaW5nIGZvciB0aGUgUENJIGludGVyZmFjZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBDRSBwcm9iYWJseSByZWZlcnMgdG8gJiMzNDtDb21tYW5kIEVuZ2luZSYjMzQ7IG9yIHNvbWV0aGluZyBzaW1pbGFyIHdpdGhpbiB0aGUgUXVhbGNvbW0gY2hpcHNldCBiZWluZyB1c2VkIGhlcmUuIEdpdmVuIHRoYXQgSSBhbSB3ZWxsIHZlcnNlZCBpbiB0aGlzIGZpZWxkLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQgY29kZSwgYWx0aG91Z2ggcG90ZW50aWFsbHkgZGVuc2Ugd2l0aCBzcGVjaWZpYyByZWdpc3RlciB3cml0ZXMgYW5kIGJpdCBtYW5pcHVsYXRpb24uIEl0JiMzOTtzIGtleSB0byBpZGVudGlmeSBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gV2hhdCBwb3dlciBzdGF0ZXMgZG9lcyBpdCBhc3N1bWUgdGhlIFBDSSBkZXZpY2UgaXMgaW4gYXQgdGhpcyBwb2ludD8gRG9lcyBpdCB1c2UgZGlyZWN0IHJlZ2lzdGVyIGFjY2VzcyBvciBkb2VzIGl0IGFic3RyYWN0IGFueSBvZiB0aGUgaGFyZHdhcmUgZGV0YWlscyB3aXRoIGFuIEFQST8gRG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIGNvbmZpZ3VyZSB0aGUgY29tbWFuZCBlbmdpbmUgZm9yIGEgc3BlY2lmaWMgZmlybXdhcmUgdmVyc2lvbiBvciBkZXZpY2UgcmV2aXNpb24/IFRoZXNlIGFyZSBpbXBvcnRhbnQgcXVlc3Rpb25zLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IGFueSBlcnJvciBoYW5kbGluZyAtIGFyZSB0aGVyZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBiZWluZyBjaGVja2VkLCBvciBkb2VzIGl0IHJlbHkgb24gZ2VuZXJpYyBlcnJvciBoYW5kbGluZyByb3V0aW5lcywgSSYjMzk7bGwgbmVlZCB0byB3YXRjaCBvdXQgZm9yIHRoYXQuIEkgaG9wZSBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZCBiZWNhdXNlIGdvb2QgUU1JIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGFyZSBoYXJkIHRvIHdyaXRlIGluIGEgd2F5IHdoaWNoIGlzIHNpbXVsdGFuZW91c2x5IHBlcmZvcm1hbnQgYW5kIG1haW50YWluYWJsZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCBpbiwgZXNwZWNpYWxseSBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGNvbmZpZ3VyYXRpb24gb3IgZGV2aWNlLXNwZWNpZmljIHBhcmFtZXRlcnMuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgcGxheXMgb3V0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk5Olx0c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA3MDA6XHR7XG4gNzAxOlx0XHRzdHJ1Y3QgYXRoMTJrX3FtaV9jZV9jZmcgKmNmZyA9IFx1MDAyNmFiLVx1MDAzZXFtaS5jZV9jZmc7XG4gNzAyOlx0XG4gNzAzOlx0XHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcbiA3MDQ6XHRcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBhYl9wY2ktXHUwMDNlcGRldi1cdTAwM2VidXM7XG4gNzA1Olx0XG4gNzA2Olx0XHRjZmctXHUwMDNldGd0X2NlID0gYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZXRhcmdldF9jZV9jb25maWc7XG4gNzA3Olx0XHRjZmctXHUwMDNldGd0X2NlX2xlbiA9IGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2V0YXJnZXRfY2VfY291bnQ7XG4gNzA4Olx0XG4gNzA5Olx0XHRjZmctXHUwMDNlc3ZjX3RvX2NlX21hcCA9IGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VzdmNfdG9fY2VfbWFwO1xuIDcxMDpcdFx0Y2ZnLVx1MDAzZXN2Y190b19jZV9tYXBfbGVuID0gYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZXN2Y190b19jZV9tYXBfbGVuO1xuIDcxMTpcdFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZXFtaV9zZXJ2aWNlX2luc19pZDtcbiA3MTI6XHRcbiA3MTM6XHRcdGlmIChhdGgxMmtfZndfZmVhdHVyZV9zdXBwb3J0ZWQoYWIsIEFUSDEyS19GV19GRUFUVVJFX01VTFRJX1FSVFJfSUQpKSB7XG4gNzE0Olx0XHRcdGFiX3BjaS1cdTAwM2VxbWlfaW5zdGFuY2UgPVxuIDcxNTpcdFx0XHRcdHUzMl9lbmNvZGVfYml0cyhwY2lfZG9tYWluX25yKGJ1cyksIERPTUFJTl9OVU1CRVJfTUFTSykgfFxuIDcxNjpcdFx0XHRcdHUzMl9lbmNvZGVfYml0cyhidXMtXHUwMDNlbnVtYmVyLCBCVVNfTlVNQkVSX01BU0spO1xuIDcxNzpcdFx0XHRhYi1cdTAwM2VxbWkuc2VydmljZV9pbnNfaWQgJiM0Mzs9IGFiX3BjaS1cdTAwM2VxbWlfaW5zdGFuY2U7XG4gNzE4Olx0XHR9XG4gNzE5Olx0fVxuIDcyMDpcdFxuIDcyMTpcdHN0YXRpYyB2b2lkIGF0aDEya19wY2lfY2VfaXJxc19lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA3MjI6XHR7XG4gNzIzOlx0XHRpbnQgaTtcbiA3MjQ6XHRcbiA3MjU6XHRcdHNldF9iaXQoQVRIMTJLX0ZMQUdfQ0VfSVJRX0VOQUJMRUQsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG4gNzI2Olx0XG4gNzI3Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4gNzI4Olx0XHRcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuIDcyOTpcdFx0XHRcdGNvbnRpbnVlO1xuIDczMDpcdFx0XHRhdGgxMmtfcGNpX2NlX2lycV9lbmFibGUoYWIsIGkpO1xuIDczMTpcdFx0fVxuIDczMjpcdH1cbiA3MzM6XHRcbiA3MzQ6XHRzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX21zaV9jb25maWcoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSwgYm9vbCBlbmFibGUpXG4gNzM1Olx0e1xuIDczNjpcdFx0c3RydWN0IHBjaV9kZXYgKmRldiA9IGFiX3BjaS1cdTAwM2VwZGV2O1xuIDczNzpcdFx0dTE2IGNvbnRyb2w7XG4gNzM4Olx0XG4gNzM5Olx0XHRwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGRldi1cdTAwM2Vtc2lfY2FwICYjNDM7IFBDSV9NU0lfRkxBR1MsIFx1MDAyNmNvbnRyb2wpO1xuIDc0MDpcdFxuIDc0MTpcdFx0aWYgKGVuYWJsZSlcbiA3NDI6XHRcdFx0Y29udHJvbCB8PSBQQ0lfTVNJX0ZMQUdTX0VOQUJMRTtcbiA3NDM6XHRcdGVsc2VcbiA3NDQ6XHRcdFx0Y29udHJvbCBcdTAwMjY9IH5QQ0lfTVNJX0ZMQUdTX0VOQUJMRTtcbiA3NDU6XHRcbiA3NDY6XHRcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGRldi1cdTAwM2Vtc2lfY2FwICYjNDM7IFBDSV9NU0lfRkxBR1MsIGNvbnRyb2wpO1xuIDc0NzpcdH1cbiA3NDg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczMjEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipBbmFseXppbmcgdGhlIGBhdGgxMmtfcGNpYCBEcml2ZXIgVnVsbmVyYWJpbGl0eSBSb3V0ZSoqCgpPa2F5LCBzbyB0aGUgcGF0aCB0byBleHBsb2l0IHRoZSBgYXRoMTJrX3BjaWAgZHJpdmVyIHZpYSBhbiBpbnRlcnJ1cHQgcmVxdWVzdCwgc3BlY2lmaWNhbGx5IHRoZSBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBmdW5jdGlvbiwgc2VlbXMgaGlnaGx5IHBsYXVzaWJsZSBpZiBTeXprYWxsZXIgY2FuIGluamVjdCBhIFBDSSBkZXZpY2Ugd2l0aCBhIHNwZWNpZmljIHZlbmRvciBhbmQgZGV2aWNlIElELiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGJlY29tZXMgd2hldGhlciB0aGUgcHJvYmUgZnVuY3Rpb24sIGBhdGgxMmtfcGNpX3Byb2JlYCwgcGVyZm9ybXMgYW55IGhhcmR3YXJlIHJlZ2lzdGVyIHJlYWRzIG9yIG90aGVyIGNoZWNrcyB0aGF0IHdvdWxkIGZhaWwgaWYgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IGEgKnJlYWwqIGRldmljZS4gSWYgaXQmIzM5O3MgdG9vIGFnZ3Jlc3NpdmUgaW4gaXRzIHZhbGlkYXRpb24sIHdlIHdvbiYjMzk7dCBnZXQgZmFyLiBSaWdodCwgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMgSSBzaG91bGQgcHJvYmFibHkgaW52ZXN0aWdhdGUgYGF0aDEya19wY2lfY2xhaW1gLiBJdCYjMzk7bGwgYmUga2V5IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkZXZpY2UgY2xhaW1pbmcgYW5kIHJlc291cmNlIGFsbG9jYXRpb24sIHNpbmNlIHRoYXQmIzM5O3MgYSBjb21tb24gcG9pbnQgb2YgZmFpbHVyZSBmb3IgdGhpcyBraW5kIG9mIGF0dGFjay4gSXQmIzM5O2xsIGFsc28gbGlrZWx5IGdpdmUgbWUgbW9yZSBjb250ZXh0IGZvciB3aGF0IGhhcHBlbnMgYmVmb3JlIGFuZCBwb3RlbnRpYWxseSBhZnRlciB0aGUgcHJvYmluZyBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX2NsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTgyMT1zdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX21zaV9kYXRhKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy04MzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjg0MDpzdGF0aWMgaW50IGF0aDEya19wY2lfY2xhaW0oc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTg0MS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTQ4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1NzI6XHRyZXQgPSBhdGgxMmtfcGNpX2NsYWltKGFiX3BjaSwgcGRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NzMtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDEwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgYGF0aDEya19wY2lfY2xhaW1gIGZ1bmN0aW9uLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgYXRoMTJrX3BjaV9jbGFpbWAqKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBhdGgxMmtfcGNpX2NsYWltYC4gSW1tZWRpYXRlbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyAqZG9pbmcqIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhlIGF0aDEyayBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIFBDSS4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNsYWltaW5nIG9mIHRoZSBQQ0kgZGV2aWNlLCB3aGljaCBhbGlnbnMgd2l0aCBzdGFuZGFyZCBQQ0kgZHJpdmVyIG9wZXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBjaGVja2VkLCBhbnkgaW5pdGlhbGl6YXRpb24gc3RlcHMsIGFuZCB0aGUgZ2VuZXJhbCBmbG93IG9mIHdoYXQgdGhpcyBjbGFpbSBkb2VzIGFuZCBlbnN1cmVzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IHJlc291cmNlIGFsbG9jYXRpb24sIGVycm9yIGhhbmRsaW5nLCBjaGVja3MgZm9yIGV4aXN0aW5nIGRldmljZSBjbGFpbXMgKGNydWNpYWwgdG8gYXZvaWQgY29uZmxpY3RzKSwgYW5kIHBvdGVudGlhbGx5IGFueSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gdGhhdCYjMzk7cyBwZXJmb3JtZWQgaGVyZSBiZWZvcmUgaGFuZGluZyBvZmYgdG8gdGhlIGNvcmUgZHJpdmVyLiBJIGV4cGVjdCBhIGNhcmVmdWwgZGFuY2UgdG8gZW5zdXJlIHRoZSBoYXJkd2FyZSBpcyBhY2Nlc3NpYmxlIGFuZCByZWFkeSB0byBnbyBiZWZvcmUgd2Ugc3RhcnQgYWN0dWFsbHkgdXNpbmcgaXQgZm9yIHdpcmVsZXNzIGNvbW11bmljYXRpb24uIExldCYjMzk7cyBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBob2xkIHRydWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0c3RhdGljIGludCBhdGgxMmtfcGNpX2NsYWltKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksIHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIDg0MTpcdHtcbiA4NDI6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBhYl9wY2ktXHUwMDNlYWI7XG4gODQzOlx0XHR1MTYgZGV2aWNlX2lkO1xuIDg0NDpcdFx0aW50IHJldCA9IDA7XG4gODQ1Olx0XG4gODQ2Olx0XHRwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfREVWSUNFX0lELCBcdTAwMjZkZXZpY2VfaWQpO1xuIDg0NzpcdFx0aWYgKGRldmljZV9pZCAhPSBhYl9wY2ktXHUwMDNlZGV2X2lkKSAge1xuIDg0ODpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtwY2kgZGV2aWNlIGlkIG1pc21hdGNoOiAweCV4IDB4JXhcXG5cJiMzNDssXG4gODQ5Olx0XHRcdFx0ICAgZGV2aWNlX2lkLCBhYl9wY2ktXHUwMDNlZGV2X2lkKTtcbiA4NTA6XHRcdFx0cmV0ID0gLUVJTztcbiA4NTE6XHRcdFx0Z290byBvdXQ7XG4gODUyOlx0XHR9XG4gODUzOlx0XG4gODU0Olx0XHRyZXQgPSBwY2lfYXNzaWduX3Jlc291cmNlKHBkZXYsIEFUSDEyS19QQ0lfQkFSX05VTSk7XG4gODU1Olx0XHRpZiAocmV0KSB7XG4gODU2Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhc3NpZ24gcGNpIHJlc291cmNlOiAlZFxcblwmIzM0OywgcmV0KTtcbiA4NTc6XHRcdFx0Z290byBvdXQ7XG4gODU4Olx0XHR9XG4gODU5Olx0XG4gODYwOlx0XHRyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTtcbiA4NjE6XHRcdGlmIChyZXQpIHtcbiA4NjI6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBwY2kgZGV2aWNlOiAlZFxcblwmIzM0OywgcmV0KTtcbiA4NjM6XHRcdFx0Z290byBvdXQ7XG4gODY0Olx0XHR9XG4gODY1Olx0XG4gODY2Olx0XHRyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgQVRIMTJLX1BDSV9CQVJfTlVNLCBcJiMzNDthdGgxMmtfcGNpXCYjMzQ7KTtcbiA4Njc6XHRcdGlmIChyZXQpIHtcbiA4Njg6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlcXVlc3QgcGNpIHJlZ2lvbjogJWRcXG5cJiMzNDssIHJldCk7XG4gODY5Olx0XHRcdGdvdG8gZGlzYWJsZV9kZXZpY2U7XG4gODcwOlx0XHR9XG4gODcxOlx0XG4gODcyOlx0XHRhYl9wY2ktXHUwMDNlZG1hX21hc2sgPSBETUFfQklUX01BU0soQVRIMTJLX1BDSV9ETUFfTUFTSyk7XG4gODczOlx0XHRkbWFfc2V0X21hc2soXHUwMDI2cGRldi1cdTAwM2VkZXYsIGFiX3BjaS1cdTAwM2VkbWFfbWFzayk7XG4gODc0Olx0XHRkbWFfc2V0X2NvaGVyZW50X21hc2soXHUwMDI2cGRldi1cdTAwM2VkZXYsIERNQV9CSVRfTUFTSygzMikpO1xuIDg3NTpcdFxuIDg3NjpcdFx0cGNpX3NldF9tYXN0ZXIocGRldik7XG4gODc3Olx0XG4gODc4Olx0XHRhYi1cdTAwM2VtZW1fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBBVEgxMktfUENJX0JBUl9OVU0pO1xuIDg3OTpcdFx0YWItXHUwMDNlbWVtID0gcGNpX2lvbWFwKHBkZXYsIEFUSDEyS19QQ0lfQkFSX05VTSwgMCk7XG4gODgwOlx0XHRpZiAoIWFiLVx1MDAzZW1lbSkge1xuIDg4MTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gbWFwIHBjaSBiYXIgJWRcXG5cJiMzNDssIEFUSDEyS19QQ0lfQkFSX05VTSk7XG4gODgyOlx0XHRcdHJldCA9IC1FSU87XG4gODgzOlx0XHRcdGdvdG8gcmVsZWFzZV9yZWdpb247XG4gODg0Olx0XHR9XG4gODg1Olx0XG4gODg2Olx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFwmIzM0O2Jvb3QgcGNpX21lbSAweCVwXFxuXCYjMzQ7LCBhYi1cdTAwM2VtZW0pO1xuIDg4NzpcdFx0cmV0dXJuIDA7XG4gODg4Olx0XG4gODg5Olx0cmVsZWFzZV9yZWdpb246XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjQyCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUENJIFJlc291cmNlIEFsbG9jYXRpb24gYW5kIFByb2JlIEZ1bmN0aW9uIEV4YW1pbmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGJhc2ljYWxseSBkb2luZyB0aGUgdXN1YWwgUENJIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIG1hcHBpbmcg4oCTIG5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeSwgcmlnaHQ/IFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzIHdpdGhvdXQgYW55IHJlYWwgaXNzdWVzLiBCdXQsIGhhbmcgb24uLi4gbGV0JiMzOTtzIG5vdCBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzLiBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gV2hhdCBhYm91dCB0aGUgYGFiX3BjaS0mZ3Q7ZGV2aWNlX2ZhbWlseV9vcHMtJmd0O3Byb2JlKHBkZXYsIHBjaV9kZXYpYCBjYWxsPyBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIG1pZ2h0IGJlLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIG9mIHRoaXMgZm9yIFdpZmk3IGRldmljZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGRyaXZlciB3aGljaCBzaG91bGQgdXNlIHRoZSBgYXRoMTJrX3dpZmk3X3BjaV9wcm9iZWAgZnVuY3Rpb24uIEJldHRlciBjaGVjayB0aGF0IG9uZSBvdXQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIHVzdWFsbHkgaGlkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya193aWZpN19wY2lfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9ODE9dm9pZCBhdGgxMmtfd2lmaTdfcGNpX3JlYWRfaHdfdmVyc2lvbihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtOTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjkxOnN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtOTItXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTg4PXN0YXRpYyBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgYXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xOTAtXHQuaWRfdGFibGUgPSBhdGgxMmtfd2lmaTdfcGNpX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYzoxOTE6XHQub3BzLnByb2JlID0gYXRoMTJrX3dpZmk3X3BjaV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMTkyLVx0LnJlZ19iYXNlID0gXHUwMDI2YXRoMTJrX3dpZmk3X3JlZ19iYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkyMgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlYC4KCioqQW5hbHl6aW5nIHRoZSBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlIEZ1bmN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlYCBmdW5jdGlvbiBub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGF0aDEyayBkcml2ZXIgZnJhbWV3b3JrLiBDbGVhcmx5LCBpdCYjMzk7cyB0aGUgUENJIHByb2JlIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzZXR1cCBvZiB0aGUgYXRoMTJrIGRyaXZlciB3aGVuIGEgY29tcGF0aWJsZSBXaUZpIDcgUENJIGRldmljZSBpcyBkZXRlY3RlZC4gSSBleHBlY3QgdG8gc2VlIHRoZSB0eXBpY2FsIFBDSSBkZXZpY2UgaWRlbnRpZmljYXRpb24gY2hlY2tzIOKAkyBsb29raW5nIGZvciBzcGVjaWZpYyBWZW5kb3IgSURzIGFuZCBEZXZpY2UgSURzLCBtYWtpbmcgc3VyZSB0aGUgaGFyZHdhcmUgaXMgYWN0dWFsbHkgd2hhdCB3ZSB0aGluayBpdCBpcy4KCk5leHQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlc291cmNlIGFsbG9jYXRpb24uIFRoaXMgZnVuY3Rpb24gbGlrZWx5IHN0YXJ0cyBieSByZXF1ZXN0aW5nIG5lY2Vzc2FyeSByZXNvdXJjZXMgZnJvbSB0aGUga2VybmVsOiBtZW1vcnkgcmVnaW9ucyBmb3IgdGhlIGRldmljZSYjMzk7cyByZWdpc3RlcnMsIGludGVycnVwdCBsaW5lcywgRE1BIGNoYW5uZWxzLCBhbmQgcG9zc2libHkgb3RoZXIgY3JpdGljYWwgcmVzb3VyY2VzLiBJ4oCZbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSwgZW5zdXJpbmcgdGhhdCBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBmYWlsdXJlcy4gV2UgZG9uJiMzOTt0IHdhbnQgdGhlIGRyaXZlciB0byBjcmFzaCBiZWNhdXNlIGl0IGNvdWxkbiYjMzk7dCBncmFiIHRoZSByZXNvdXJjZXMgaXQgbmVlZHMuCgpJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGFmdGVyIHJlc291cmNlIGFsbG9jYXRpb24sIHRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZS4gVGhpcyBpbmNsdWRlcyBzZXR0aW5nIHVwIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgZW5hYmxpbmcgdGhlIGRldmljZSwgYW5kIHBvdGVudGlhbGx5IHJlc2V0dGluZyBpdCBpbnRvIGEga25vd24gc3RhdGUuIEl0JiMzOTtzIGxpa2VseSB3ZSYjMzk7bGwgYmUgZGVhbGluZyB3aXRoIHZhcmlvdXMgUENJIGNhcGFiaWxpdGllcyB0b28sIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgZmVhdHVyZXMgc3BlY2lmaWMgdG8gV2lGaSA3LiBUaGlzIGlzIHdoZXJlIHRob3NlIGNhcGFiaWxpdGllcyB3b3VsZCBiZSBkZXRlY3RlZCBhbmQgbWFuYWdlZC4KClRoZW4sIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjcnVjaWFsIHN0ZXAgb2YgY3JlYXRpbmcgdGhlIG1haW4gZGV2aWNlIHN0cnVjdHVyZSAobGlrZWx5IGFuIGBhdGgxMmtfYmFzZWAgc3RydWN0LCBvciBzb21ldGhpbmcgc2ltaWxhciwgdGhhdCBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSBhbmQgc3RhdGUpLiBXaXRoaW4gdGhhdCBkZXZpY2Ugc3RydWN0dXJlLCB0aGUgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIHBvcHVsYXRlIHRoZSBkYXRhLiBUaGlzIHdpbGwgaW5jbHVkZSBpZGVudGlmeWluZyB0aGUgZGV2aWNlIGFuZCBzZXR0aW5nIHVwIHRoZSBkaWZmZXJlbnQgcmVnaXN0ZXJzLiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgc2V0dGluZyB1cCB2YXJpb3VzIHN1Yi1kcml2ZXJzIG9yIG1vZHVsZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIFdpRmkgNyBoYXJkd2FyZS4KCkZpbmFsbHksIHRoZSBmdW5jdGlvbiB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgcmVnaXN0ZXIgdGhlIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUgTGludXgga2VybmVsIChsaWtlbHkgdGhlIG1hYzgwMjExIHdpcmVsZXNzIHN0YWNrKS4gSXQmIzM5O2xsIG5lZWQgdG8gbGluayB0aGUgbmV3IGRldmljZSB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBzbyBpdOKAmXMgYXZhaWxhYmxlIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJdCB3aWxsIGxpa2VseSB0aGVuIGluaXRpYWxpemUgdGhlIHdpcmVsZXNzIGludGVyZmFjZSBhbmQgYWN0aXZhdGUgaXQsIG1ha2luZyBpdCByZWFkeSB0byBiZSB1c2VkLiBJIHdpbGwgbG9vayBjYXJlZnVsbHkgYXQgdGhlIHRlYXJkb3duIHByb2Nlc3MgZm9yIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCwgbWFraW5nIHN1cmUgYWxsIGFsbG9jYXRlZCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIHByb3Blcmx5IHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkIG9yIHRoZXJlJiMzOTtzIGFuIGVycm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkxOlx0c3RhdGljIGludCBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuICA5MjpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcbiAgOTM6XHR7XG4gIDk0Olx0XHR1MzIgc29jX2h3X3ZlcnNpb25fbWFqb3IsIHNvY19od192ZXJzaW9uX21pbm9yO1xuICA5NTpcdFx0c3RydWN0IGF0aDEya19wY2kgKmFiX3BjaTtcbiAgOTY6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XG4gIDk3Olx0XHRpbnQgcmV0O1xuICA5ODpcdFxuICA5OTpcdFx0YWIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4gMTAwOlx0XHRpZiAoIWFiKVxuIDEwMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMDI6XHRcbiAxMDM6XHRcdGFiX3BjaSA9IGF0aDEya19wY2lfcHJpdihhYik7XG4gMTA0Olx0XHRpZiAoIWFiX3BjaSlcbiAxMDU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTA2Olx0XG4gMTA3Olx0XHRzd2l0Y2ggKHBjaV9kZXYtXHUwMDNlZGV2aWNlKSB7XG4gMTA4Olx0XHRjYXNlIFFDTjkyNzRfREVWSUNFX0lEOlxuIDEwOTpcdFx0XHRhYl9wY2ktXHUwMDNlbXNpX2NvbmZpZyA9IFx1MDAyNmF0aDEya193aWZpN19tc2lfY29uZmlnWzBdO1xuIDExMDpcdFx0XHRhYi1cdTAwM2VzdGF0aWNfd2luZG93X21hcCA9IHRydWU7XG4gMTExOlx0XHRcdGFiX3BjaS1cdTAwM2VwY2lfb3BzID0gXHUwMDI2YXRoMTJrX3dpZmk3X3BjaV9vcHNfcWNuOTI3NDtcbiAxMTI6XHRcdFx0LypcbiAxMTM6XHRcdFx0ICogaW5pdCB3aW5kb3cgcmVnIGFkZHIgYmVmb3JlIHJlYWRpbmcgaGFyZHdhcmUgdmVyc2lvblxuIDExNDpcdFx0XHQgKiBhcyBpdCB3aWxsIGJlIHVzZWQgdGhlcmVcbiAxMTU6XHRcdFx0ICovXG4gMTE2Olx0XHRcdGFiX3BjaS1cdTAwM2V3aW5kb3dfcmVnX2FkZHIgPSBXSU5ET1dfUkVHX0FERFJFU1M7XG4gMTE3Olx0XHRcdGF0aDEya193aWZpN19wY2lfcmVhZF9od192ZXJzaW9uKGFiLCBcdTAwMjZzb2NfaHdfdmVyc2lvbl9tYWpvcixcbiAxMTg6XHRcdFx0XHRcdFx0XHQgXHUwMDI2c29jX2h3X3ZlcnNpb25fbWlub3IpO1xuIDExOTpcdFx0XHRhYi1cdTAwM2V0YXJnZXRfbWVtX21vZGUgPSBhdGgxMmtfY29yZV9nZXRfbWVtb3J5X21vZGUoYWIpO1xuIDEyMDpcdFx0XHRzd2l0Y2ggKHNvY19od192ZXJzaW9uX21ham9yKSB7XG4gMTIxOlx0XHRcdGNhc2UgQVRIMTJLX1BDSV9XN19TT0NfSFdfVkVSU0lPTl8yOlxuIDEyMjpcdFx0XHRcdGFiLVx1MDAzZWh3X3JldiA9IEFUSDEyS19IV19RQ045Mjc0X0hXMjA7XG4gMTIzOlx0XHRcdFx0YnJlYWs7XG4gMTI0Olx0XHRcdGNhc2UgQVRIMTJLX1BDSV9XN19TT0NfSFdfVkVSU0lPTl8xOlxuIDEyNTpcdFx0XHRcdGFiLVx1MDAzZWh3X3JldiA9IEFUSDEyS19IV19RQ045Mjc0X0hXMTA7XG4gMTI2Olx0XHRcdFx0YnJlYWs7XG4gMTI3Olx0XHRcdGRlZmF1bHQ6XG4gMTI4Olx0XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbiAxMjk6XHRcdFx0XHRcdFwmIzM0O1Vua25vd24gaGFyZHdhcmUgdmVyc2lvbiBmb3VuZCBmb3IgUUNOOTI3NDogMHgleFxcblwmIzM0OyxcbiAxMzA6XHRcdFx0XHRcdHNvY19od192ZXJzaW9uX21ham9yKTtcbiAxMzE6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMTMyOlx0XHRcdH1cbiAxMzM6XHRcdFx0YnJlYWs7XG4gMTM0Olx0XHRjYXNlIFdDTjc4NTBfREVWSUNFX0lEOlxuIDEzNTpcdFx0XHRhYi1cdTAwM2VpZC5iZGZfc2VhcmNoID0gQVRIMTJLX0JERl9TRUFSQ0hfQlVTX0FORF9CT0FSRDtcbiAxMzY6XHRcdFx0YWJfcGNpLVx1MDAzZW1zaV9jb25maWcgPSBcdTAwMjZhdGgxMmtfd2lmaTdfbXNpX2NvbmZpZ1swXTtcbiAxMzc6XHRcdFx0YWItXHUwMDNlc3RhdGljX3dpbmRvd19tYXAgPSBmYWxzZTtcbiAxMzg6XHRcdFx0YWJfcGNpLVx1MDAzZXBjaV9vcHMgPSBcdTAwMjZhdGgxMmtfd2lmaTdfcGNpX29wc193Y243ODUwO1xuIDEzOTpcdFx0XHQvKlxuIDE0MDpcdFx0XHQgKiBpbml0IHdpbmRvdyByZWcgYWRkciBiZWZvcmUgcmVhZGluZyBoYXJkd2FyZSB2ZXJzaW9uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDUyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIYXJkd2FyZSBWZXJzaW9uIFJlYWQqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgYXRoMTJrX3dpZmk3X3BjaV9yZWFkX2h3X3ZlcnNpb25gIGZ1bmN0aW9uLi4uIHRoYXQmIzM5O3MgYSBoYXJkd2FyZSByZWFkLCBpc24mIzM5O3QgaXQ/IFJpZ2h0LCBpdCYjMzk7cyBwdWxsaW5nIGRpcmVjdGx5IGZyb20gdGhlIHNpbGljb24uIEFuZCBpZiBpdCBlbmNvdW50ZXJzIGEgaGFyZHdhcmUgdmVyc2lvbiBpdCBkb2VzbiYjMzk7dCByZWNvZ25pemUg4oCTIGFuIHVua25vd24gb25lLCBsZXQmIzM5O3Mgc2F5IOKAkyBpdCYjMzk7cyBnb2luZyB0byB0aHJvdyBhIGAtRU9QTk9UU1VQUGAgZXJyb3IuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgc3RhbmRhcmQgd2F5IHRvIHNpZ25hbCAmIzM0O25vdCBzdXBwb3J0ZWQuJiMzNDsgU28sIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBjbGVhciBvbiBob3cgdGhpcyBgYXRoMTJrX3dpZmk3X3BjaV9yZWFkX2h3X3ZlcnNpb25gIGZ1bmN0aW9uIG9wZXJhdGVzLiBXZSBuZWVkIHRvIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdmVyaWZ5IHRoaXMgc3BlY2lmaWMgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgaW50ZXJwcmV0aW5nIGFueSBzdWJzZXF1ZW50IGVycm9yIGNvZGVzIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgcm9vdCBjYXVzZSBvZiBhbnkgcHJvYmxlbXMgd2UmIzM5O3JlIHNlZWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MTpcdHZvaWQgYXRoMTJrX3dpZmk3X3BjaV9yZWFkX2h3X3ZlcnNpb24oc3RydWN0IGF0aDEya19iYXNlICphYixcbiAgODI6XHRcdFx0XHRcdCAgICAgIHUzMiAqbWFqb3IsIHUzMiAqbWlub3IpXG4gIDgzOlx0e1xuICA4NDpcdFx0dTMyIHNvY19od192ZXJzaW9uO1xuICA4NTpcdFxuICA4NjpcdFx0c29jX2h3X3ZlcnNpb24gPSBhdGgxMmtfcGNpX3JlYWQzMihhYiwgVENTUl9TT0NfSFdfVkVSU0lPTik7XG4gIDg3Olx0XHQqbWFqb3IgPSB1MzJfZ2V0X2JpdHMoc29jX2h3X3ZlcnNpb24sIFRDU1JfU09DX0hXX1ZFUlNJT05fTUFKT1JfTUFTSyk7XG4gIDg4Olx0XHQqbWlub3IgPSB1MzJfZ2V0X2JpdHMoc29jX2h3X3ZlcnNpb24sIFRDU1JfU09DX0hXX1ZFUlNJT05fTUlOT1JfTUFTSyk7XG4gIDg5Olx0fVxuICA5MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTk2MQoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDg3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IGBhdGgxMmtgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgaXQmIzM5O3MgdG91Y2hpbmcgYFRDU1JfU09DX0hXX1ZFUlNJT05gLiBUaGUgY29kZSBjaGVja3MgdGhpcyB2ZXJzaW9uIG51bWJlciBhbmQgaWYgaXQmIzM5O3MgYEFUSDEyS19QQ0lfVzdfU09DX0hXX1ZFUlNJT05fMWAgb3IgYEFUSDEyS19QQ0lfVzdfU09DX0hXX1ZFUlNJT05fMmAsIGl0IHByb2NlZWRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdpdGggc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgcHJvdmlkaW5nIHJhbmRvbSBCQVIgbWVtb3J5LCB0aGF0IGNoZWNrIGlzIHRyaXZpYWwgdG8gYnlwYXNzLiBBbnkgdmFsdWUgaXMgcG9zc2libGUsIGFuZCB0aGUgcmFuZG9tIG5hdHVyZSBvZiBzeXprYWxsZXIgY291bGQgZGVmaW5pdGVseSB0cmlnZ2VyIHRoZXNlIGNvbmRpdGlvbnMuCgpUaGUgcHJvbXB0LCB0aG91Z2gsIHRocm93cyBhIGN1cnZlYmFsbC4gSXQmIzM5O3MgYXNraW5nIG1lIHRvIGNvbnNpZGVyIGlmIHRoZSBwYXRjaCBpcyBpbiBhICp2ZW5kb3Itc3BlY2lmaWMqIFBDSWUgZHJpdmVyLCBwYXJ0aWN1bGFybHkgZm9yIHRoaW5ncyBsaWtlIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVcywgd2hpY2ggbm9ybWFsbHkgbmVlZCAqcGh5c2ljYWwqIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGhlcmVmb3JlIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGUgYGF0aDEya2AgZHJpdmVyIGlzIGZvciBRdWFsY29tbSBXaS1GaSA3LCBhbmQgdGhhdCAqaXMqIHZlbmRvci1zcGVjaWZpYyBQQ0llLiBTbyB0aGF0IHJhaXNlcyBhIGZsYWcuCgpIb3dldmVyLCB0aGUgcHJvbXB0ICpzcGVjaWZpY2FsbHkqIGxpc3RzIHRob3NlIG90aGVyIGRldmljZSB0eXBlcyBhbmQgZG9lc24mIzM5O3QgbWVudGlvbiBXaS1GaS4gVGhhdCYjMzk7cyBhIGtleSBkaXN0aW5jdGlvbi4gQnV0IHRoZW4gSSByZWFsaXplIFdpLUZpIGRyaXZlcnMgbGlrZSBgYXRoMTJrYCBhcmUgYWxzbyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkgZmFsbCB1bmRlciB0aGUgc2FtZSBjb25zdHJhaW50cy4KClRoZSBjcnVjaWFsIGNsdWUgY29tZXMgZnJvbSB0aGUgY29tbWl0IGF1dGhvcjogYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLiBUaGlzIHRlbGxzIG1lIHRoYXQgc3l6a2FsbGVyICpkaWQqIGZpbmQgYSBidWcgaGVyZSwgYW5kIHRoaXMgcGF0Y2ggaXMgdGhlIGZpeC4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgZ2VuZXJhdGVkIHRoaXMgcGF0Y2ggKnByb3ZlcyogdGhhdCBpdCBjYW4gcmVhY2ggdGhpcyBjb2RlIHBhdGguIFRoaXMgYWxzbyBtZWFucyB0aGlzIHBhdGNoIGlzIHByb2JhYmx5IGJlaW5nIHRlc3RlZCBieSBzeXprYWxsZXIuCgpOb3csIHRoZSBwcm9tcHQgc2F5cyB0aGUgY2hhbmdlcyBhcmUgKmFscmVhZHkqIGFwcGxpZWQgYW5kIHRoZSBjb21taXQgbWVzc2FnZSBzYXlzIGl0JiMzOTtzIGEgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0Oywgd2hpY2ggbWVhbnMgc3l6a2FsbGVyIGlzICp0ZXN0aW5nKiB0aGlzIHBhdGNoLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBleGNsdWRlcyB0aGluZ3MgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIElzIGBhdGgxMmtgIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVU/IE5vLiBEb2VzIGl0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcz8gWWVzLCBub3JtYWxseSBpdCBkb2VzLgoKQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQsIHN5emthbGxlciAqaGFzKiBpdHMgUENJIGZ1enplciwgd2hpY2ggaW5qZWN0cyBQQ0kgZGV2aWNlcyBhbmQgZnV6emVzIHRoZWlyIE1NSU8gc3BhY2UuIFRoZSBwcm9tcHQgaXMgYXNraW5nIGlmIHRoZSBwYXRjaCBpcyBpbiBhbiBlbnZpcm9ubWVudCAqaW1wb3NzaWJsZSogdG8gcmVhY2guIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyICppcyogc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuCgpUaGUgcHJvbXB0IGV4cGxpY2l0bHkgZXhjbHVkZXMgdGhpbmdzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gV2h5PyBUaGF0JiMzOTtzIGJlY2F1c2UgdGhlIFBDSSBmdXp6ZXIgaXMgdXN1YWxseSBzaGFsbG93LCBvZnRlbiBvbmx5IHJlYWNoaW5nIHRoZSBwcm9iZSBmdW5jdGlvbiBhbmQgbWF5YmUgc29tZSBpbml0IGZ1bmN0aW9ucy4gSXQgKnJhcmVseSogZ2V0cyBkZWVwIGludG8gdGhlIGNvcmUgbG9naWMgb2YgY29tcGxleCBkZXZpY2VzLiBIb3dldmVyLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBhbmQgYGF0aDEya19wY2lfY29uZmlnX2lycWAsIHdoaWNoIGFyZSAqY2FsbGVkIGR1cmluZyBwcm9iZSouIFRoZSBQQ0kgZnV6emVyIGNhbiByZWFjaCB0aGVzZSwgYW5kIGl0ICpkaWQqIHJlYWNoIHRoZW0sIG90aGVyd2lzZSwgdGhlcmUgd291bGQgYmUgbm8gYnVnLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgZml4aW5nIGFuIGVycm9yIGhhbmRsaW5nIGlzc3VlIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhlIFBDSSBmdXp6ZXIgaXMgZGVzaWduZWQgdG8gZGlzY292ZXIuCgpUaGVyZWZvcmUsIGl0IGxvb2tzIGxpa2UgaXQgKmlzKiB3b3J0aCBmdXp6aW5nLiBOb3csIGxldCBtZSByZXZpZXcgdGhlIHBhdGNoIGluIGRldGFpbCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTUyMz1zdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTJrX3BjaV9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNTQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo1NDU6c3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTU0Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz02NDM9c3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6NjkwOlx0cmV0ID0gYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY5MS1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5NDcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgUGF0Y2ggaW4gdGhlIGBhdGgxMmtgIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLiBJdCBzZWVtcyBsaWtlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeDsgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciBkb3VibGUtZnJlZSBzaXR1YXRpb24gd2l0aGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgbWlzc2luZyBzb21lIGBmcmVlX2lycWAgY2FsbHMgYW5kIGhhZCBpbmNvcnJlY3QgYGZyZWVfbmV0ZGV2YCBjYWxscyBpbiB0aGUgZXJyb3IgcGF0aCB3aGVuIGByZXF1ZXN0X2lycWAgZmFpbGVkLiBUaGUgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBiZWVuIHVwZGF0ZWQgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVzb3VyY2VzIGluIHRoZSBldmVudCBvZiBhbiBgaXJxYCBhbGxvY2F0aW9uIGZhaWx1cmUgYnkgbWFraW5nIHN1cmUgdGhhdCBhbGwgYWNxdWlyZWQgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCB3aGVuIGVycm9ycyBvY2N1ci4gSSYjMzk7dmUgcmVvcmRlcmVkIHRoZSBgZnJlZV9uZXRkZXZgIGNhbGxzIGFuZCByZW1vdmVkIHRoZSByZWR1bmRhbnQgaXRlcmF0aW9uLgoKTXkgbWFpbiBjb25jZXJuIGlzLCBvZiBjb3Vyc2UsIHRoZSBwb3RlbnRpYWwgZm9yIHJlZ3Jlc3Npb24uIEVycm9yIHBhdGhzIGFyZSBub3RvcmlvdXMgZm9yIGludHJvZHVjaW5nIHN1YnRsZSBpc3N1ZXMsIHNvIHdoaWxlIHRoZSBwYXRjaCAqbG9va3MqIGNvcnJlY3QgYXQgZmlyc3QgZ2xhbmNlLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjb3JyZWN0bmVzcy4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gZnV6emluZyB0aGlzLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBlcnJvciBjb25kaXRpb24uIFRoZSBmYWN0IHRoYXQgdGhlIFBDSSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhpcywgZXZlbiByYW5kb21seSBkdWUgdG8gZmF1bHQgaW5qZWN0aW9uLCBpbmNyZWFzZXMgbXkgZGVzaXJlIGZvciBmdXp6aW5nLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgYGF0aDEya2AgZmFsbCB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgZHJpdmVycyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYXJkd2FyZSBmb3IgdGVzdGluZz8gVGhlIHByb21wdCBsaXN0cyBhIGJ1bmNoIG9mIGRyaXZlcnMgdGhhdCBnZW5lcmFsbHkgb3BlcmF0ZSBvbiByZWFsIGhhcmR3YXJlLiBXaS1GaSBkcml2ZXJzIGFyZW4mIzM5O3QgKmV4cGxpY2l0bHkqIGxpc3RlZCwgYnV0IHRoZXkgYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMsIGp1c3QgbGlrZSB0aGUgb25lcyBtZW50aW9uZWQuIEkmIzM5O20gZ29pbmcgdG8gY29uc2lkZXIgaXQgd29ydGggZnV6emluZywgYW5kIEkgc2hvdWxkIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBhdGgxMmtgIGluIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVEgxMksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6Mjpjb25maWcgQVRIMTJLXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoxNzpjb25maWcgQVRIMTJLX0FIQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjU6Y29uZmlnIEFUSDEyS19ERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDthdGgxMmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM1OmNvbmZpZyBBVEgxMktfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjQ0OmNvbmZpZyBBVEgxMktfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ1LVx0Ym9vbCBcJiMzNDthdGgxMmsgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjUzOmNvbmZpZyBBVEgxMktfQ09SRURVTVBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7YXRoMTJrIGNvcmVkdW1wXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTQ4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBVEgxMksgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgbGFiZWxlZCBgQVRIMTJLYC4gTXkgaW1tZWRpYXRlIHJlZmxleCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uICpyZWxpZXMqIG9uLCB3aGF0IG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgYXJlIGludGVydHdpbmVkIHdpdGggaXRzIG9wZXJhdGlvbi4gV2l0aG91dCBrbm93aW5nIHRoZSBpbnRlcmNvbm5lY3RlZCBjb21wb25lbnRzLCBJIGNhbiYjMzk7dCBlZmZlY3RpdmVseSB0cm91Ymxlc2hvb3QsIG9wdGltaXplLCBvciBldmVuIHJlbGlhYmx5IGFzc2VzcyBpdHMgb3ZlcmFsbCBpbXBhY3Qgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBEZXBlbmRlbmNpZXMgYXJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgYW5kIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRhdGEgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcbiAgIDI6XHRjb25maWcgQVRIMTJLXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSBXaS1GaSA3IHN1cHBvcnQgKGF0aDEyaylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IEhBU19ETUEgXHUwMDI2XHUwMDI2IFBDSVxuICAgNTpcdFx0c2VsZWN0IFFDT01fUU1JX0hFTFBFUlNcbiAgIDY6XHRcdHNlbGVjdCBNSElfQlVTXG4gICA3Olx0XHRzZWxlY3QgUVJUUlxuICAgODpcdFx0c2VsZWN0IFFSVFJfTUhJXG4gICA5Olx0XHRzZWxlY3QgUENJX1BXUkNUUkxfUFdSU0VRIGlmIEhBVkVfUFdSQ1RSTFxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgUXVhbGNvbW0gVGVjaG5vbG9naWVzIFdpLUZpIDcgKElFRUVcbiAgMTI6XHRcdCAgODAyLjExYmUpIGZhbWlseSBvZiBjaGlwc2V0cywgZm9yIGV4YW1wbGUgV0NONzg1MCBhbmRcbiAgMTM6XHRcdCAgUUNOOTI3NC5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBhdGgxMmsuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIEFUSDEyS19BSEJcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7UXVhbGNvbW0gYXRoMTJrIEFIQiBzdXBwb3J0XCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFUSDEySyBcdTAwMjZcdTAwMjYgUkVNT1RFUFJPQ1xuICAyMDpcdFx0c2VsZWN0IFFDT01fTURUX0xPQURFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjA0NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDYwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFUSDEySyBQQ0kgRHJpdmVyIGZvciBTeW1ib2wgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGVuYWJsaW5nIGBBVEgxMktgLCB3aGljaCByZWxpZXMgb24gYE1BQzgwMjExYCwgYEhBU19ETUFgLCBhbmQgYFBDSWAuIFRoZSBwYXRjaCBtb2RpZmllcyBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AgYW5kIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgLiBUaGVzZSBmdW5jdGlvbnMgbGl2ZSBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gdGhvc2UgdHdvLCBzaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlbSwgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXkgZml0IGluLiBJIHNlZSBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AgaXMgY2FsbGVkIGJ5IGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYGF0aDEya19wY2lfcHJvYmVgLgoKU28sIHRoZSBuYXR1cmFsIGNhbmRpZGF0ZXMgc2VlbWVkIHRvIGJlIHRob3NlIHRocmVlOiBgYXRoMTJrX3BjaV9wcm9iZWAsIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgLCBhbmQgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLgoKQnV0IHRoZW4gSSBzYXcgdGhhdCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AsIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9wcm9iZWAgYXJlIGFsbCBzdGF0aWMuIFRoZSBwcm9tcHQgc2F5cyB0aGF0IHRoZSBwcmVmZXJyZWQgc3ltYm9scyBzaG91bGQgYmUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLgoKSSB3ZW50IGJhY2sgdG8gY2hlY2sgYGF0aDEya19wY2lfcHJvYmVgLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgcGNpX2RyaXZlci0mZ3Q7cHJvYmVgLCBtYWtpbmcgaXQgYW4gZW50cnlwb2ludC4gVGhlcmUmIzM5O3MgYWxzbyBgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXJgLCB3aGljaCBpc24mIzM5O3Qgc3RhdGljLCBidXQganVzdCByZWdpc3RlcnMgdGhlIGRyaXZlci4gSSBjaGVja2VkIGBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlYCB0b28sIGp1c3QgaW4gY2FzZSwgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLgoKRXZlbiB0aG91Z2ggYGF0aDEya19wY2lfcHJvYmVgIGlzIHN0YXRpYywgc3l6a2FsbGVyICpjYW4qIHN0aWxsIHJlYWNoIGl0IGJlY2F1c2UgaXQmIzM5O3MgcGFydCBvZiB0aGUgUENJIHN1YnN5c3RlbS4gQnV0IHRoZSBwcm9tcHQgaXMgY2xlYXI6IHByaW9yaXRpemUgdGhlIG5vbi1zdGF0aWMgb25lcy4KCkhvd2V2ZXIsIHNpbmNlIGBhdGgxMmtfcGNpX3Byb2JlYCBpcyBhIHByb2JlIGZ1bmN0aW9uLCBpdCB3b24mIzM5O3QgYmUgaW5saW5lZCwgYXMgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgcGNpIGxheWVyLiBTbywgSSB0aGluayBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgdGhlIHJpZ2h0IGZvY3VzIHN5bWJvbCBoZXJlLCBkZXNwaXRlIGJlaW5nIHN0YXRpYywgYmVjYXVzZSBpdCBpcyBhbiBlbnRyeXBvaW50LiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBhbnkgb3RoZXIgcmVsZXZhbnQgbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyNz1hdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTQ3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTQ4OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTU0OS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODI4PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NDktXHRwY2lfZHJpdmVyLVx1MDAzZWlkX3RhYmxlID0gZHJpdmVyLVx1MDAzZWlkX3RhYmxlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUwOlx0cGNpX2RyaXZlci1cdTAwM2Vwcm9iZSA9IGF0aDEya19wY2lfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NTEtXHRwY2lfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19wY2lfcmVtb3ZlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzYwMAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBNb2R1bGUmIzM5O3MgSW50ZXJydXB0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkgc2VlIGBhdGgxMmtfcGNpX3Byb2JlYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyOyB0aGF0IG1lYW5zIGl0JiMzOTtzIG5vdCBiZWluZyBpbmxpbmVkLCB3aGljaCBpbXBhY3RzIHBvdGVudGlhbCBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLgoKSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmc6IGBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxYCAod2hpY2ggaXMgbmV3KSwgYGF0aDEya19wY2lfZnJlZV9leHRfaXJxYCAobW9kaWZpZWQpLCBgYXRoMTJrX3BjaV9mcmVlX2lycWAgKG1vZGlmaWVkKSwgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgIChtb2RpZmllZCksIGFuZCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCAobW9kaWZpZWQpLiBBbGwgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGxpbWl0cyB0aGVpciB2aXNpYmlsaXR5LCBidXQgaXMgZXhwZWN0ZWQgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZHJpdmVyIGNvZGUuCgpMb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoLCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBpcyBjYWxsZWQgZnJvbSBgYXRoMTJrX3BjaV9wcm9iZWAgYW5kIGBhdGgxMmtfcGNpX2ZyZWVfaXJxYCBpcyBjYWxsZWQgZnJvbSBgYXRoMTJrX3BjaV9yZW1vdmVgIGFuZCBlcnJvciBwYXRocy4gVGhpcyBtYWtlcyBzZW5zZS4gVGhlIHByb2JlIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR1cCwgYW5kIHJlbW92ZSBkZWFscyB3aXRoIGNsZWFudXAuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGF0aDEya19wY2lfcmVtb3ZlYCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY2hhbmdlcyBtZWFuIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGRyaXZlciBsaWZlY3ljbGUgYW5kIGVycm9yIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTQ4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE3MDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE3MDg6c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE3MDkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgyOD1pbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODUwLVx0cGNpX2RyaXZlci1cdTAwM2Vwcm9iZSA9IGF0aDEya19wY2lfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTE6XHRwY2lfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19wY2lfcmVtb3ZlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODUyLVx0cGNpX2RyaXZlci1cdTAwM2VzaHV0ZG93biA9IGF0aDEya19wY2lfc2h1dGRvd247XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTE0CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IGBhdGgxMmtgIERyaXZlciBUZWFyZG93bioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBhdGgxMmtgIGRyaXZlciBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGZ1enphYmxlLiBGaXJzdCwgSSBzZWUgdGhlIG1haW4gZW50cnkgcG9pbnRzIGFyZSBgYXRoMTJrX3BjaV9wcm9iZWAgYW5kIGBhdGgxMmtfcGNpX3JlbW92ZWAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIG5vdGluZyBhcyBteSBgRm9jdXNTeW1ib2xzYC4gTm93LCBJIHJlY2FsbCB0aGUgcnVsZTogaWYgdGhlIHBhdGNoICpvbmx5KiB0b3VjaGVzIGRyaXZlciBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBhcmUgZXhlY3V0ZWQgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucywgdGhlbiBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZywgYW5kIEkgc2hvdWxkIHNldCBgUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZWAuCgpUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCAqb25seSogbW9kaWZ5IHRob3NlIHRlYXJkb3duIGNhbGxiYWNrcz8gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIGl0LiBJIHNlZSBjaGFuZ2VzIGluIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBhbmQgYGF0aDEya19wY2lfY29uZmlnX2lycWAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgYXJlIGNhbGxlZCAqZHVyaW5nKiBgcHJvYmVgIC0tIHRoZXkmIzM5O3JlIHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uLiBBbHNvLCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgZXJyb3IgcGF0aHMgKndpdGhpbiogdGhlIGBwcm9iZWAgZnVuY3Rpb24gaXRzZWxmLiBTbywgdGhpcyBpc24mIzM5O3QgZXhjbHVzaXZlbHkgYSB0ZWFyZG93biBwYXRjaC4KCkkgc3RpbGwgbmVlZCB0byBjb25maXJtIG9uZSB0aGluZzogSXMgYGF0aDEya19wY2lfZnJlZV9pcnFgICpvbmx5KiBjYWxsZWQgZHVyaW5nIGByZW1vdmVgPyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjYWxsIHNpdGVzIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfZnJlZV9pcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MzI5PXN0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fZXh0X2lycV9ncnApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0zNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjM0NDpzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTM0NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTQ4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2ODEtXHRhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChhYl9wY2ksIE5VTEwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjgyOlx0YXRoMTJrX3BjaV9mcmVlX2lycShhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2ODMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNzA4PXN0YXRpYyB2b2lkIGF0aDEya19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTczMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTczMTpcdGF0aDEya19wY2lfZnJlZV9pcnEoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNzMyLVx0YXRoMTJrX3BjaV9tc2lfZnJlZShhYl9wY2kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTY1NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kLCBiYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLCBoZXJlJiMzOTtzIG15IHBsYW4gZm9yIGZ1enppbmcgaXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBhdGgxMmtgIFBDSSBkcml2ZXIuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGF0aDEya19wY2lfcHJvYmVgIGFuZCB0aGUgYGF0aDEya19wY2lfcmVtb3ZlYCBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBpc3N1ZXMgdGhhdCBhcmlzZSBkdXJpbmcgZGV2aWNlIHByb2JpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24sIG5hbWVseSB3aXRoaW4gYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYC4gVGhlIGtleSBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGluIHRoZSBlcnJvciBwYXRocywgbWVhbmluZyB0aGV5IGFyZSBsaWtlbHkgdG8gYmUgcmVhY2hlZCBpbiBhbiB1bnVzdWFsIHN0YXRlLCB3aGljaCBpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBBbHNvLCBpdCYjMzk7cyBub3QganVzdCB0ZWFyZG93biwgYXMgdGhpcyBwYXRjaCBtb2RpZmllcyBlcnJvciBwYXRocyB0aGF0IG9jY3VyIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgYFdvcnRoRnV6emluZzogdHJ1ZWAuCgpGb3Igc3ltYm9scyB0byB0YXJnZXQsIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZToKCiogICBgYXRoMTJrX3BjaV9wcm9iZWA6IFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgYW5kIGRlZmluaXRlbHkgbm90IGlubGluZWQuCiogICBgYXRoMTJrX3BjaV9jb25maWdfaXJxYDogR2l2ZW4gdGhlIHNpemUgYW5kIGltcG9ydGFuY2UsIG5vdCBsaWtlbHkgaW5saW5lZC4KKiAgIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYDogQWxzbyBxdWl0ZSBsYXJnZSwgbWFraW5nIGlubGluaW5nIHVubGlrZWx5LgoKU28sIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBhdGgxMmtfcGNpX3Byb2JlYCwgYGF0aDEya19wY2lfY29uZmlnX2lycWAsIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYC4KClRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBjb2RlIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBQQ0kgc3Vic3lzdGVtLiBJIGV4cGVjdCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciB0byBpbmplY3QgYSB2aXJ0dWFsIGRldmljZSBhbmQgdHJpZ2dlciBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgdGhpcyBwYXRjaCB3aWxsIGJlIGhpdCBkdXJpbmcgdGhvc2Ugc2NlbmFyaW9zLgoKTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgaXQgbG9va3MgbGlrZSBvbmx5IGBBVEgxMktgIGlzIHN0cmljdGx5IG5lZWRlZC4gYE1BQzgwMjExYCBpcyBhbHNvIHJlcXVpcmVkLCBidXQgaXQgaXMgdW5saWtlbHkgdGhpcyBuZWVkcyB0byBiZSBzcGVjaWZpZWQgYXMgaXQgaXMgYSBjb21tb24gZHJpdmVyLiBUaGUgcGF0Y2ggaXMgaW4gYHBjaS5jYCwgc28gYEFUSDEyS19BSEJgIGlzIG5vdCBuZWVkZWQuIGBBVEgxMktfREVCVUdgIGlzIG5vdCBzdHJpY3RseSBuZWVkZWQuIFNvIEkmIzM5O2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gaW5jbHVkZTogYEFUSDEyS2AuCgpJJiMzOTtsbCBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgbGF0ZXIsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzoyOmNvbmZpZyBBVEhfQ09NTU9OXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZz0yND1pZiBXTEFOX1ZFTkRPUl9BVEhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTI1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc6MjY6Y29uZmlnIEFUSF9ERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMjctXHRib29sIFwmIzM0O0F0aGVyb3Mgd2lyZWxlc3MgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzozMjpjb25maWcgQVRIX1RSQUNFUE9JTlRTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZy0zMy1cdGJvb2wgXCYjMzQ7QXRoZXJvcyB3aXJlbGVzcyB0cmFjaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzo0MDpjb25maWcgQVRIX1JFR19EWU5BTUlDX1VTRVJfUkVHX0hJTlRTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBkeW5hbWljIHVzZXIgcmVndWxhdG9yeSBoaW50c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc6NDk6Y29uZmlnIEFUSF9SRUdfRFlOQU1JQ19VU0VSX0NFUlRfVEVTVElOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctNTAtXHRib29sIFwmIzM0O0F0aGVyb3MgZHluYW1pYyB1c2VyIHJlZ3VsYXRvcnkgdGVzdGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQxMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTmF2aWdhdGluZyB0aGUgV0xBTiBWZW5kb3IgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBpbnRvIHRoZSBgYXRoYCBkaXJlY3RvcnkuIFN0YW5kYXJkIHByb2NlZHVyZSwgcmlnaHQ/IEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgV0xBTiB2ZW5kb3Igc3BhY2UsIGFuZCBpdCBsb29rcyBsaWtlIEkgbmVlZCBhIHNwZWNpZmljIGtleSB0byB1bmxvY2sgdGhpcyBwYXJ0aWN1bGFyIGRvb3IuIEFoLCByaWdodCwgSSBuZWVkIGBXTEFOX1ZFTkRPUl9BVEhgLiBUaGF0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgbWFnaWMgd29yZCB0byBnZXQgcGFzdCB0aGUgaW5pdGlhbCBhY2Nlc3MgY29udHJvbHMuIEl0JiMzOTtzIGFsbW9zdCBzZWNvbmQgbmF0dXJlIGF0IHRoaXMgcG9pbnQsIGJ1dCBpdCBhbHdheXMgaGVscHMgdG8gdGhpbmsgdGhyb3VnaCB0aGUgcHJlcmVxdWlzaXRlcyBiZWZvcmUgZGl2aW5nIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgV0xBTl9WRU5ET1JfQVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc9Mj1jb25maWcgQVRIX0NPTU1PTlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzo1OmNvbmZpZyBXTEFOX1ZFTkRPUl9BVEhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTYtXHRib29sIFwmIzM0O0F0aGVyb3MvUXVhbGNvbW0gZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTY4OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBXaXJlbGVzcyBWZW5kb3IgU3VwcG9ydCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogaXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBBdGhlcm9zLWJhc2VkIFdMQU4gaGFyZHdhcmUuIFNvLCBgV0xBTl9WRU5ET1JfQVRIYCBuZWVkcyB0byBiZSBzZXQuIE5vdywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGhlYWQgb3ZlciB0byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IGRlZmluZXMgd2lyZWxlc3MgZHJpdmVycyBhbmQgb3B0aW9ucy4gVGhhdCYjMzk7bGwgYmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgV0xBTl9WRU5ET1JfQVRIYCBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBwZXJoYXBzIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIHRvIHByb2NlZWQgc2FmZWx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBXTEFOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnOjY6bWVudWNvbmZpZyBXTEFOXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTctXHRib29sIFwmIzM0O1dpcmVsZXNzIExBTlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTk1MAoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA3NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZW5hYmxlIFdMQU4gc3VwcG9ydCwgc3BlY2lmaWNhbGx5IHRoZSBBdGhlcm9zIHZlbmRvciBtb2R1bGUsIGFuZCB0aGUgYXRoMTJrIGRyaXZlci4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgV0xBTmAsIGBXTEFOX1ZFTkRPUl9BVEhgLCBhbmQgYEFUSDEyS2AgbmVlZCB0byBiZSBlbmFibGVkLgoKTm93LCBJJiMzOTttIHJlLXJlYWRpbmcgdGhlIHByb21wdCwgc3BlY2lmaWNhbGx5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3MgdGFsa2luZyBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IGNvZGUgdGhhdCByZWxpZXMgb24gdW4tZW11bGF0ZWQgcGh5c2ljYWwgaGFyZHdhcmUgbGlrZSBzcGVjaWZpYyBQQ0llIGRldmljZXMuIFRoZSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgdGhlIGBhdGgxMmtgIGRyaXZlciBmYWxsIGludG8gdGhpcyBjYXRlZ29yeT8KCk15IGluaXRpYWwgdGhvdWdodCBpcyB5ZXMsIGBhdGgxMmtgIGlzIGEgZHJpdmVyIGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUuIEhvd2V2ZXIsIGl0IGxldmVyYWdlcyB0aGUgUENJIGZ1enplciwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGVtdWxhdGUgUENJIGNvbmZpZ3VyYXRpb24gYW5kIG1lbW9yeS1tYXBwZWQgSS9PIChNTUlPKSBzcGFjZXMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhlIHByb21wdCYjMzk7cyBwaHJhc2UsICYjMzQ7Li4uKmV2ZW4qIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFRoaXMgaXMga2V5ISBUaGUgUENJIGZ1enplciAqaXMqIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBwYXRoIHdpdGhpbiB0aGUgYHByb2JlYCBmdW5jdGlvbi4gVGhlIFBDSSBmdXp6ZXIgY2FuIGVhc2lseSB0cmlnZ2VyIHRoaXMsIGJ5IGNhdXNpbmcgYW4gYWxsb2NhdGlvbiBmYWlsdXJlIG9yIGJ5IHJlYWRpbmcgYSBzcGVjaWZpYyB2YWx1ZSBmcm9tIE1NSU8uIFN5emthbGxlciBmb3VuZCB0aGUgYnVnLCBzbyB0aGlzIGNvbmZpcm1zIHJlYWNoYWJpbGl0eS4gIFRoZXJlZm9yZSwgaXQgKmlzKiByZWFjaGFibGUsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gVGh1cywgSSYjMzk7bSByZXR1cm5pbmcgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgcmVnYXJkaW5nIGZvY3VzIHN5bWJvbHMsIEkmIzM5O20gaW5jbHVkaW5nIGBhdGgxMmtfcGNpX3Byb2JlYCwgYGF0aDEya19wY2lfY29uZmlnX2lycWAsIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AuCgpUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBhbmQgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLCByZWxhdGVkIHRvIHRoZSBgYXRoMTJrYCBkcml2ZXIuIFRoZSBQQ0kgZnV6emVyIGFuZCBwb3RlbnRpYWxseSBzeXprYWxsZXIgY2FuIGVhc2lseSB0cmlnZ2VyIGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gYGF0aDEya19wY2lfcHJvYmVgLgoKT25lIGxhc3QgdGhpbmc6IHRoZSBwcm9tcHQgc3VnZ2VzdHMgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gV2hpbGUgYGF0aDEya19wY2lfcHJvYmVgICppcyogc3RhdGljLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIGdlbmVyYWxseSBtZWFucyBpdCYjMzk7cyBub3QgaW5saW5lZC4gSXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIGFuZCBpdCBzZWVtcyB0aGUgYmVzdCBjaG9pY2UuIEkgd2lsbCBpbmNsdWRlIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AgYmVjYXVzZSB0aGV5IGNvbnRhaW4gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTiYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9BVEgmIzM0OywKICAgICYjMzQ7QVRIMTJLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTJrX3BjaV9wcm9iZSYjMzQ7LAogICAgJiMzNDthdGgxMmtfcGNpX2NvbmZpZ19pcnEmIzM0OywKICAgICYjMzQ7YXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gKGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2ApIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgaW5qZWN0aW5nIGEgdmlydHVhbCBkZXZpY2UgYW5kIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTiYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9BVEgmIzM0OywKICAgICYjMzQ7QVRIMTJLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTJrX3BjaV9wcm9iZSYjMzQ7LAogICAgJiMzNDthdGgxMmtfcGNpX2NvbmZpZ19pcnEmIzM0OywKICAgICYjMzQ7YXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gKGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2ApIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgaW5qZWN0aW5nIGEgdmlydHVhbCBkZXZpY2UgYW5kIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBhbmQgaW5jb3JyZWN0IGNsZWFudXAgbG9naWMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGluIHRoZSBhdGgxMmsgZHJpdmVyLiBJdCByZWZhY3RvcnMgdGhlIElSUSBmcmVlaW5nIGZ1bmN0aW9ucyB0byBhY2NlcHQgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIElSUXMvZ3JvdXBzIGFuZCBlbnN1cmVzIHRoYXQgb25seSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFyZSBmcmVlZC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW52YWxpZCBmcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVha3MgaW4gdGhlc2UgcGF0aHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0OTA2NTE1MjM2NDNhYTg2YWI4ZTY4MzhjNjNmZTE0ZWZhOWQzMjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMjowMTo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jCmluZGV4IDY0NDE5MjdiNTM4MjIuLmFmMGU4ODJmZDBiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYwpAQCAtMzEzLDExICYjNDM7MzEzLDI0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfc3dfcmVzZXQoc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBwb3dlcl9vbikKIAlhdGgxMmtfbWhpX3NldF9taGljdHJsX3Jlc2V0KGFiKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fY2UpCiYjNDM7ewomIzQzOwlpbnQgaSwgaXJxX2lkeDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9jZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpcnFfaWR4ID0gQVRIMTJLX1BDSV9JUlFfQ0UwX09GRlNFVCAmIzQzOyBpOwomIzQzOwkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2lkeF0sICZhbXA7YWItJmd0O2NlLmNlX3BpcGVbaV0pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fZXh0X2lycV9ncnApCiB7CiAJaW50IGksIGo7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fZXh0X2lycV9ncnA7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBhdGgxMmtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKIAogCQlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspCkBAIC0zMzAsMTYgJiM0MzszNDMsOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiB7Ci0JaW50IGksIGlycV9pZHg7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgYWItJmd0O2h3X3BhcmFtcy0mZ3Q7Y2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCi0JCQljb250aW51ZTsKLQkJaXJxX2lkeCA9IEFUSDEyS19QQ0lfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTsKLQkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2lkeF0sICZhbXA7YWItJmd0O2NlLmNlX3BpcGVbaV0pOwotCX0KLQotCWF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiKTsKJiM0MzsJYXRoMTJrX3BjaV9mcmVlX2NlX2lycShhYiwgYWItJmd0O2h3X3BhcmFtcy0mZ3Q7Y2VfY291bnQpOwomIzQzOwlhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVgpOwogfQogCiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NlX2lycV9lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IGNlX2lkKQpAQCAtNTk1LDggJiM0Mzs2MDAsNiBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYikKIAogCQkJaXJxID0gYXRoMTJrX3BjaV9nZXRfbXNpX2lycShhYi0mZ3Q7ZGV2LCB2ZWN0b3IpOwogCi0JCQlhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSA9IGlycTsKLQogCQkJYXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19QQ0ksCiAJCQkJICAgJiMzNDtpcnE6JWQgZ3JvdXA6JWRcbiYjMzQ7LCBpcnEsIGkpOwogCkBAIC02MDcsMjIgJiM0Mzs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiAJCQlpZiAocmV0KSB7CiAJCQkJYXRoMTJrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdCBpcnEgJWQ6ICVkXG4mIzM0OywKIAkJCQkJICAgdmVjdG9yLCByZXQpOwotCQkJCWdvdG8gZmFpbF9yZXF1ZXN0OwomIzQzOwomIzQzOwkJCQlmb3IgKG4gPSAwOyBuICZsdDsgajsgbiYjNDM7JiM0MzspCiYjNDM7CQkJCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfZ3JwLSZndDtpcnFzW25dXSwgaXJxX2dycCk7CiYjNDM7CiYjNDM7CQkJCW5ldGlmX25hcGlfZGVsKCZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldLm5hcGkpOwomIzQzOwkJCQlmcmVlX25ldGRldihhYi0mZ3Q7ZXh0X2lycV9ncnBbaV0ubmFwaV9uZGV2KTsKJiM0MzsJCQkJZ290byBmYWlsX2FsbG9jYXRlOwogCQkJfQomIzQzOwomIzQzOwkJCWFiLSZndDtpcnFfbnVtW2lycV9pZHhdID0gaXJxOwogCQl9CiAJCWF0aDEya19wY2lfZXh0X2dycF9kaXNhYmxlKGlycV9ncnApOwogCX0KIAogCXJldHVybiAwOwogCi1mYWlsX3JlcXVlc3Q6Ci0JLyogaSAtJmd0O25hcGlfbmRldiB3YXMgcHJvcGVybHkgYWxsb2NhdGVkLiBGcmVlIGl0IGFsc28gKi8KLQlpICYjNDM7PSAxOwogZmFpbF9hbGxvY2F0ZToKLQlmb3IgKG4gPSAwOyBuICZsdDsgaTsgbiYjNDM7JiM0MzspIHsKLQkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW25dOwotCQlmcmVlX25ldGRldihpcnFfZ3JwLSZndDtuYXBpX25kZXYpOwotCX0KJiM0MzsJYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoYWIsIGkpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY3MSw2ICYjNDM7Njc2LDggQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYikKIAkJaWYgKHJldCkgewogCQkJYXRoMTJrX2VycihhYiwgJiMzNDtmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4mIzM0OywKIAkJCQkgICBpcnFfaWR4LCByZXQpOwomIzQzOwomIzQzOwkJCWF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGkpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCkBAIC02ODEsOCAmIzQzOzY4OCwxMCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCX0KIAogCXJldCA9IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoYWIpOwotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGFiLSZndDtod19wYXJhbXMtJmd0O2NlX2NvdW50KTsKIAkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDUzCgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDQ1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBhdGgxMmsgUENJIElSUSBIYW5kbGluZyBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB3ZSBoYW5kbGUgSVJRcyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93bi4gTXkgaW5pdGlhbCByZWFkIHRlbGxzIG1lIHRoaXMgaXMgYWxsIGFib3V0IHJlZmFjdG9yaW5nIGFuZCBzdHJlbmd0aGVuaW5nIHRoZSBlcnJvciBoYW5kbGluZyBhcm91bmQgSVJRIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbuKAlHNwZWNpZmljYWxseSwgdGhlIGBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycWAsIGBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxYCwgYW5kIGBhdGgxMmtfcGNpX2ZyZWVfaXJxYCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgcGxheWVycyBoZXJlLgoKVGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIG9uIGNvcnJlY3RpbmcgcmVzb3VyY2UgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgaW4gdGhlIGVycm9yIHBhdGhzIG9mIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBhbmQgYGF0aDEya19wY2lfY29uZmlnX2lycWAuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IGlmIGFuIElSUSByZXF1ZXN0IGZhaWxzLCB3ZSBwcm9wZXJseSBjbGVhbiB1cCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCByZXNvdXJjZXPigJRJUlEgbGluZXMgYW5kIHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgZGV2aWNlc+KAlGJlZm9yZSBleGl0aW5nLiBJdCYjMzk7cyBhIG1lbW9yeS9yZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLCBwbGFpbiBhbmQgc2ltcGxlLiBXZSYjMzk7cmUgbm90IHRhbGtpbmcgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZC4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBLQVNBTiwgc3RhbmRhcmQgbGVhayBkZXRlY3RvcnMsIG9yIEttZW1sZWFrIHdvdWxkIGNhdGNoIHdpdGhvdXQgYW4gaXNzdWUuIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCkxvb2tpbmcgY2xvc2VyLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxYCBhbmQgdGhlIGFkanVzdG1lbnQgdG8gYGF0aDEya19wY2lfZnJlZV9leHRfaXJxYCBjb25maXJtIHRoZSBpbnRlbnQgdG8gbWFuYWdlIHRoZSBjbGVhbnVwIG9mIENFIGFuZCBleHRlcm5hbCBJUlFzIHdpdGggbW9yZSBwcmVjaXNpb24uIFNwZWNpZmljYWxseSwgaW4gYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLCB0aGUgcmV2aXNlZCBlcnJvciBoYW5kbGluZyBtZXRpY3Vsb3VzbHkgZnJlZXMgYW55IGFscmVhZHktcmVxdWVzdGVkIElSUXMgd2l0aGluIGEgZ3JvdXAgdXBvbiBmYWlsdXJlLCBkZWxldGVzIE5BUEkgaW5zdGFuY2VzLCBhbmQgZnJlZXMgdGhlIGFzc29jaWF0ZWQgbmV0ZGV2LiBUaGVuIGl0IGNhbGxzIGBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycWAgdG8gZnJlZSB0aGUgcHJlaXZvdXNseSBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIGdyb3Vwcy4gVGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIGJ1ZyB3aGVyZSBgYWItJmd0O2lycV9udW1baXJxX2lkeF1gIG1pZ2h0IGJlIGFzc2lnbmVkIGJlZm9yZSB0aGUgYHJlcXVlc3RfaXJxYCBjYWxsIHN1Y2NlZWRzLCBvciB3aGVyZSB0aGUgY2xlYW51cCBsb2dpYyB3YXNuJiMzOTt0IGNvcnJlY3QuCgpJbiBlc3NlbmNlLCB0aGlzIGlzIGEgdGFyZ2V0ZWQgZml4IGZvciB0aGUgSVJRIGNvbmZpZ3VyYXRpb24mIzM5O3MgZXJyb3IgaGFuZGxpbmcuIEl0JiMzOTtzIG5vdCBhIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZSBjaGFuZ2UsIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IHVzZXItc3BhY2UgaW50ZXJmYWNlcyBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdpdGggdGhpcyBpbiBtaW5kLCBhbmQgYWZ0ZXIgYSBjYXJlZnVsIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB3ZSBkb24mIzM5O3QgbmVlZCB0byBpbnZvbHZlIEtNU0FOIGZvciB0aGlzLiBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBhbmQgaW5jb3JyZWN0IGNsZWFudXAgbG9naWMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGluIHRoZSBhdGgxMmsgZHJpdmVyLiBJdCByZWZhY3RvcnMgdGhlIElSUSBmcmVlaW5nIGZ1bmN0aW9ucyB0byBhY2NlcHQgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIElSUXMvZ3JvdXBzIGFuZCBlbnN1cmVzIHRoYXQgb25seSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFyZSBmcmVlZC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW52YWxpZCBmcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVha3MgaW4gdGhlc2UgcGF0aHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBhbmQgaW5jb3JyZWN0IGNsZWFudXAgbG9naWMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGluIHRoZSBhdGgxMmsgZHJpdmVyLiBJdCByZWZhY3RvcnMgdGhlIElSUSBmcmVlaW5nIGZ1bmN0aW9ucyB0byBhY2NlcHQgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIElSUXMvZ3JvdXBzIGFuZCBlbnN1cmVzIHRoYXQgb25seSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFyZSBmcmVlZC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW52YWxpZCBmcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVha3MgaW4gdGhlc2UgcGF0aHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAxOjU1LjA5MDUzMDA4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTczOTk5ODgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOXCIsXG4gICAgXCJXTEFOX1ZFTkRPUl9BVEhcIixcbiAgICBcIkFUSDEyS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDEya19wY2lfcHJvYmVcIixcbiAgICBcImF0aDEya19wY2lfY29uZmlnX2lycVwiLFxuICAgIFwiYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgYW5kIGluY29ycmVjdCBjbGVhbnVwIGxvZ2ljIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBvZiBJUlEgY29uZmlndXJhdGlvbiBpbiB0aGUgYXRoMTJrIGRyaXZlci4gSXQgcmVmYWN0b3JzIHRoZSBJUlEgZnJlZWluZyBmdW5jdGlvbnMgdG8gYWNjZXB0IHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBJUlFzL2dyb3VwcyBhbmQgZW5zdXJlcyB0aGF0IG9ubHkgYWxsb2NhdGVkIHJlc291cmNlcyBhcmUgZnJlZWQuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGludmFsaWQgZnJlZXMsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtzIGluIHRoZXNlIHBhdGhzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiAoYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCkgb2YgdGhlIGF0aDEyayBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHRoZSBzeXprYWxsZXIgUENJIGZ1enplciBpbmplY3RpbmcgYSB2aXJ0dWFsIGRldmljZSBhbmQgY2F1c2luZyBhbGxvY2F0aW9uIGZhaWx1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMTo1NS4wOTA1MzU2MjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQyNDM5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDkwNjUxNTIzNjQzYWE4NmFiOGU2ODM4YzYzZmUxNGVmYTlkMzIzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDEyOjAxOjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXFxuaW5kZXggNjQ0MTkyN2I1MzgyMi4uYWYwZTg4MmZkMGI1MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1xcbkBAIC0zMTMsMTEgKzMxMywyNCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX3N3X3Jlc2V0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgcG93ZXJfb24pXFxuIFxcdGF0aDEya19taGlfc2V0X21oaWN0cmxfcmVzZXQoYWIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbitzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fY2UpXFxuK3tcXG4rXFx0aW50IGksIGlycV9pZHg7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2NlOyBpKyspIHtcXG4rXFx0XFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlycV9pZHggPSBBVEgxMktfUENJX0lSUV9DRTBfT0ZGU0VUICsgaTtcXG4rXFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2lkeF0sIFxcdTAwMjZhYi1cXHUwMDNlY2UuY2VfcGlwZVtpXSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYiwgaW50IG51bV9leHRfaXJxX2dycClcXG4ge1xcbiBcXHRpbnQgaSwgajtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fZXh0X2lycV9ncnA7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4gXFxuIFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpcnFfZ3JwLVxcdTAwM2VudW1faXJxOyBqKyspXFxuQEAgLTMzMCwxNiArMzQzLDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFxuIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4ge1xcbi1cXHRpbnQgaSwgaXJxX2lkeDtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VjZV9jb3VudDsgaSsrKSB7XFxuLVxcdFxcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFxcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlycV9pZHggPSBBVEgxMktfUENJX0lSUV9DRTBfT0ZGU0VUICsgaTtcXG4tXFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2lkeF0sIFxcdTAwMjZhYi1cXHUwMDNlY2UuY2VfcGlwZVtpXSk7XFxuLVxcdH1cXG4tXFxuLVxcdGF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiKTtcXG4rXFx0YXRoMTJrX3BjaV9mcmVlX2NlX2lycShhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlY2VfY291bnQpO1xcbitcXHRhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NlX2lycV9lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IGNlX2lkKVxcbkBAIC01OTUsOCArNjAwLDYgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIFxcbiBcXHRcXHRcXHRpcnEgPSBhdGgxMmtfcGNpX2dldF9tc2lfaXJxKGFiLVxcdTAwM2VkZXYsIHZlY3Rvcik7XFxuIFxcbi1cXHRcXHRcXHRhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcXG4tXFxuIFxcdFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUENJLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiaXJxOiVkIGdyb3VwOiVkXFxcXG5cXFwiLCBpcnEsIGkpO1xcbiBcXG5AQCAtNjA3LDIyICs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCByZXF1ZXN0IGlycSAlZDogJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHZlY3RvciwgcmV0KTtcXG4tXFx0XFx0XFx0XFx0Z290byBmYWlsX3JlcXVlc3Q7XFxuK1xcbitcXHRcXHRcXHRcXHRmb3IgKG4gPSAwOyBuIFxcdTAwM2MgajsgbisrKVxcbitcXHRcXHRcXHRcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfZ3JwLVxcdTAwM2VpcnFzW25dXSwgaXJxX2dycCk7XFxuK1xcbitcXHRcXHRcXHRcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldLm5hcGkpO1xcbitcXHRcXHRcXHRcXHRmcmVlX25ldGRldihhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV0ubmFwaV9uZGV2KTtcXG4rXFx0XFx0XFx0XFx0Z290byBmYWlsX2FsbG9jYXRlO1xcbiBcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRhdGgxMmtfcGNpX2V4dF9ncnBfZGlzYWJsZShpcnFfZ3JwKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1mYWlsX3JlcXVlc3Q6XFxuLVxcdC8qIGkgLVxcdTAwM2VuYXBpX25kZXYgd2FzIHByb3Blcmx5IGFsbG9jYXRlZC4gRnJlZSBpdCBhbHNvICovXFxuLVxcdGkgKz0gMTtcXG4gZmFpbF9hbGxvY2F0ZTpcXG4tXFx0Zm9yIChuID0gMDsgbiBcXHUwMDNjIGk7IG4rKykge1xcbi1cXHRcXHRpcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtuXTtcXG4tXFx0XFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KTtcXG4tXFx0fVxcbitcXHRhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgaSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTY3MSw2ICs2NzYsOCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICBpcnFfaWR4LCByZXQpO1xcbitcXG4rXFx0XFx0XFx0YXRoMTJrX3BjaV9mcmVlX2NlX2lycShhYiwgaSk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTY4MSw4ICs2ODgsMTAgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhhYik7XFxuLVxcdGlmIChyZXQpXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0YXRoMTJrX3BjaV9mcmVlX2NlX2lycShhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlY2VfY291bnQpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMTo1Ni40MTU3MjM2NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNzAyMjcyNTE4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTlwiLFxuICAgIFwiV0xBTl9WRU5ET1JfQVRIXCIsXG4gICAgXCJBVEgxMktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdGgxMmtfcGNpX3Byb2JlXCIsXG4gICAgXCJhdGgxMmtfcGNpX2NvbmZpZ19pcnFcIixcbiAgICBcImF0aDEya19wY2lfZXh0X2lycV9jb25maWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gKGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2ApIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgaW5qZWN0aW5nIGEgdmlydHVhbCBkZXZpY2UgYW5kIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzQ5MDY1MTUyMzY0M2FhODZhYjhlNjgzOGM2M2ZlMTRlZmE5ZDMyM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDEyOjAxOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcbmluZGV4IDY0NDE5MjdiNTM4MjIuLmFmMGU4ODJmZDBiNTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXG5AQCAtMzEzLDExICszMTMsMjQgQEAgc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9zd19yZXNldChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIHBvd2VyX29uKVxuIFx0YXRoMTJrX21oaV9zZXRfbWhpY3RybF9yZXNldChhYik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4rc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2NlX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgbnVtX2NlKVxuK3tcbitcdGludCBpLCBpcnFfaWR4O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2NlOyBpKyspIHtcbitcdFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlycV9pZHggPSBBVEgxMktfUENJX0lSUV9DRTBfT0ZGU0VUICsgaTtcbitcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fZXh0X2lycV9ncnApXG4ge1xuIFx0aW50IGksIGo7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZXh0X2lycV9ncnA7IGkrKykge1xuIFx0XHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4gXG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaisrKVxuQEAgLTMzMCwxNiArMzQzLDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4ge1xuLVx0aW50IGksIGlycV9pZHg7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQ7IGkrKykge1xuLVx0XHRpZiAoYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aXJxX2lkeCA9IEFUSDEyS19QQ0lfSVJRX0NFMF9PRkZTRVQgKyBpO1xuLVx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbi1cdH1cbi1cbi1cdGF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiKTtcbitcdGF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VjZV9jb3VudCk7XG4rXHRhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NlX2lycV9lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IGNlX2lkKVxuQEAgLTU5NSw4ICs2MDAsNiBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBcdFx0XHRpcnEgPSBhdGgxMmtfcGNpX2dldF9tc2lfaXJxKGFiLVx1MDAzZWRldiwgdmVjdG9yKTtcbiBcbi1cdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuLVxuIFx0XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUENJLFxuIFx0XHRcdFx0ICAgXCJpcnE6JWQgZ3JvdXA6JWRcXG5cIiwgaXJxLCBpKTtcbiBcbkBAIC02MDcsMjIgKzYxMCwyNCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRhdGgxMmtfZXJyKGFiLCBcImZhaWxlZCByZXF1ZXN0IGlycSAlZDogJWRcXG5cIixcbiBcdFx0XHRcdFx0ICAgdmVjdG9yLCByZXQpO1xuLVx0XHRcdFx0Z290byBmYWlsX3JlcXVlc3Q7XG4rXG4rXHRcdFx0XHRmb3IgKG4gPSAwOyBuIFx1MDAzYyBqOyBuKyspXG4rXHRcdFx0XHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW25dXSwgaXJxX2dycCk7XG4rXG4rXHRcdFx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXS5uYXBpKTtcbitcdFx0XHRcdGZyZWVfbmV0ZGV2KGFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldLm5hcGlfbmRldik7XG4rXHRcdFx0XHRnb3RvIGZhaWxfYWxsb2NhdGU7XG4gXHRcdFx0fVxuK1xuK1x0XHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHRcdH1cbiBcdFx0YXRoMTJrX3BjaV9leHRfZ3JwX2Rpc2FibGUoaXJxX2dycCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1mYWlsX3JlcXVlc3Q6XG4tXHQvKiBpIC1cdTAwM2VuYXBpX25kZXYgd2FzIHByb3Blcmx5IGFsbG9jYXRlZC4gRnJlZSBpdCBhbHNvICovXG4tXHRpICs9IDE7XG4gZmFpbF9hbGxvY2F0ZTpcbi1cdGZvciAobiA9IDA7IG4gXHUwMDNjIGk7IG4rKykge1xuLVx0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbbl07XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdGF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiLCBpKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY3MSw2ICs2NzYsOCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0YXRoMTJrX2VycihhYiwgXCJmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXFxuXCIsXG4gXHRcdFx0XHQgICBpcnFfaWR4LCByZXQpO1xuK1xuK1x0XHRcdGF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGkpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbiBcbkBAIC02ODEsOCArNjg4LDEwIEBAIHN0YXRpYyBpbnQgYXRoMTJrX3BjaV9jb25maWdfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXHR9XG4gXG4gXHRyZXQgPSBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKGFiKTtcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VjZV9jb3VudCk7XG4gXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMTo1Ni40MTU3MjQ2NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg3NjIzMTYyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogQXRoMTJrIFBDSSBJUlEgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUgZ290IGEgcGF0Y2ggZm9yIGBhdGgxMmsvcGNpLmNgLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgSVJRIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGluIHRoZSBhdGgxMmsgUENJIGRyaXZlci4gVGhpcyBpcyBRdWFsY29tbSBXaS1GaSA3IGhhcmR3YXJlLCBzbyBkZWZpbml0ZWx5IHZlbmRvci1zcGVjaWZpYy4gVGhlIHF1ZXN0aW9uIGlzOiB3b3J0aCBmdXp6aW5nP1xuXG5UaGUgcHJvbXB0J3MgZXhjbHVzaW9uIGNyaXRlcmlhIHNwZWNpZmljYWxseSB0YXJnZXRzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBJcyBgYXRoMTJrYCBvbmUgb2YgdGhvc2U/IFllcywgaXQncyB2ZW5kb3Itc3BlY2lmaWMsIGFuZCB5ZXMsIGl0J3MgYSBQQ0kgV2ktRmkgZHJpdmVyLCBzbyBpdCBuZWVkcyBzcGVjaWZpYyBoYXJkd2FyZS4gSXQncyBub3QgYSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgdGhvdWdoLlxuXG5DYW4gSSBmdXp6IGl0IHNvbWVob3cgdXNpbmcgZW11bGF0aW9uPyBgbWFjODAyMTFfaHdzaW1gIGlzIG91dCwgdGhhdCdzIHNvZnR3YXJlLWJhc2VkIGFuZCBkb2Vzbid0IHRvdWNoIHRoaXMuIFBDSSBXaS1GaSBkcml2ZXJzIGFyZSBnZW5lcmFsbHkgYSBwYWluIHRvIGZ1enogdW5sZXNzIHRoZXJlIGlzIGRlZGljYXRlZCBRRU1VIG9yIHRoZXkgYXJlIFVTQi5cblxuVGhlIGV4Y2x1c2lvbiBjcml0ZXJpYSBtYWtlIG1lIHF1ZXN0aW9uIGl0cyBmZWFzaWJpbGl0eSBiZWNhdXNlIGF0aDEyayBuZWVkcyBzcGVjaWZpYyBoYXJkd2FyZS4gU3l6a2FsbGVyIG1pZ2h0IGhhdmUgc29tZSBQQ0kgZnV6emluZywgYnV0IGl0J3Mgb2Z0ZW4gbGltaXRlZCwgYW5kIHRoaXMgcGF0Y2ggZGVhbHMgd2l0aCBkZXZpY2UgcHJvYmUuIFdpdGhvdXQgdGhlIHJpZ2h0IGhhcmR3YXJlLCB0aGUgcHJvYmUgd29uJ3QgZXZlbiBoYXBwZW4sIG9yIGl0J2xsIGVycm9yIG91dCBlYXJseS4gSSBjYW4gZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgc291cmNlLCBidXQgcmVhbGlzdGljYWxseSwgSSdtIHRoaW5raW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgZGlmZmljdWx0IHRvIGZ1enouIEJhc2VkIG9uIHRoZSBleGNsdXNpb24gY3JpdGVyaWEgaXQgc2VlbXMgbGlrZSB0aGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6MDcuMjkxOTYzMTc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzkxNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM1MzExIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9Mj1jb25maWcgQVRIMTJLXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM6XFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IEhBU19ETUEgXFx1MDAyNlxcdTAwMjYgUENJXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjE1OlxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDEyay5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnPTE3PWNvbmZpZyBBVEgxMktfQUhCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjE4OlxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTktXFx0ZGVwZW5kcyBvbiBBVEgxMksgXFx1MDAyNlxcdTAwMjYgUkVNT1RFUFJPQ1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnPTI1PWNvbmZpZyBBVEgxMktfREVCVUdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjY6XFx0Ym9vbCBcXFwiYXRoMTJrIGRlYnVnZ2luZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjctXFx0ZGVwZW5kcyBvbiBBVEgxMktcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZz0zNT1jb25maWcgQVRIMTJLX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MzY6XFx0Ym9vbCBcXFwiUXVhbGNvbW0gYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzctXFx0ZGVwZW5kcyBvbiBBVEgxMksgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTFfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zOC1cXHRoZWxwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM5OlxcdCAgRW5hYmxlIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9NDQ9Y29uZmlnIEFUSDEyS19UUkFDSU5HXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjQ1OlxcdGJvb2wgXFxcImF0aDEyayB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ2LVxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IEVWRU5UX1RSQUNJTkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDctXFx0aGVscFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzo0ODpcXHQgIEVuYWJsZSBhdGgxMmsgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9NTM9Y29uZmlnIEFUSDEyS19DT1JFRFVNUFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzo1NDpcXHRib29sIFxcXCJhdGgxMmsgY29yZWR1bXBcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTU1LVxcdGRlcGVuZHMgb24gQVRIMTJLXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTctXFx0aGVscFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzo1ODpcXHQgIEVuYWJsZSBhdGgxMmsgY29yZWR1bXAgY29sbGVjdGlvblxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0FUSDEySykgKz0gYXRoMTJrLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjM6YXRoMTJrLXkgKz0gY29yZS5vIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlLTQtXFx0ICAgIGhhbC5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGUtMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZToyNTphdGgxMmstJChDT05GSUdfQVRIMTJLX0FIQikgKz0gYWhiLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlLTI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX0FUSDEySykgKz0gd2lmaTcvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS0yOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjI5OmF0aDEyay0kKENPTkZJR19BVEgxMktfREVCVUdGUykgKz0gZGVidWdmcy5vIGRlYnVnZnNfaHR0X3N0YXRzLm8gZGVidWdmc19zdGEub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU6MzA6YXRoMTJrLSQoQ09ORklHX0FDUEkpICs9IGFjcGkub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU6MzE6YXRoMTJrLSQoQ09ORklHX0FUSDEyS19UUkFDSU5HKSArPSB0cmFjZS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozMjphdGgxMmstJChDT05GSUdfUE0pICs9IHdvdy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozMzphdGgxMmstJChDT05GSUdfQVRIMTJLX0NPUkVEVU1QKSArPSBjb3JlZHVtcC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozNDphdGgxMmstJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU6MzU6YXRoMTJrLSQoQ09ORklHX1RIRVJNQUwpICs9IHRoZXJtYWwub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGUtMzYtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxMTpzdGF0aWMgaW50IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgZnVuYylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xOC1cXHRpZiAoIXJvb3RfaGFuZGxlKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTk6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcXFwiaW52YWxpZCBhY3BpIGhhbmRsZXJcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI2LVxcdGlmICghb2JqKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mjc6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcXFwiYWNwaV9ldmFsdWF0ZV9kc20oKSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI4LVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDYtXFx0XFx0XFx0XFx0ICAgQVRIMTJLX0FDUElfQkRGX0FOQ0hPUl9TVFJJTkdfTEVOKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ3OlxcdFxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiaW52YWxpZCBBQ1BJIERTTSBCREYgc2l6ZTogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDgtXFx0XFx0XFx0XFx0XFx0ICAgIG9iai1cXHUwMDNlc3RyaW5nLmxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy02Mi1cXHRcXHRcXHQgICAgb2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoIFxcdTAwM2UgQVRIMTJLX0FDUElfRFNNX0ZVTkNfTUFYX0JJVE1BUF9TSVpFKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NjM6XFx0XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJpbnZhbGlkIEFDUEkgRFNNIGZ1bmMgc2l6ZTogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNjQtXFx0XFx0XFx0XFx0XFx0ICAgIG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy03NS1cXHRcXHRcXHRpZiAob2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9UQVNfQ0ZHX1NJWkUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo3NjpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImludmFsaWQgQUNQSSBEU00gVEFTIGNvbmZpZyBzaXplOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy03Ny1cXHRcXHRcXHRcXHRcXHQgICAgb2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTg3LVxcdFxcdFxcdGlmIChvYmotXFx1MDAzZWJ1ZmZlci5sZW5ndGggIT0gQVRIMTJLX0FDUElfRFNNX1RBU19EQVRBX1NJWkUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo4ODpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImludmFsaWQgQUNQSSBEU00gVEFTIGRhdGEgc2l6ZTogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtODktXFx0XFx0XFx0XFx0XFx0ICAgIG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy05OS1cXHRcXHRcXHRpZiAob2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9CSU9TX1NBUl9EQVRBX1NJWkUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxMDA6XFx0XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJpbnZhbGlkIEFDUEkgQklPUyBTQVIgZGF0YSBzaXplOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMDEtXFx0XFx0XFx0XFx0XFx0ICAgIG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMTEtXFx0XFx0XFx0aWYgKG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCAhPSBBVEgxMktfQUNQSV9EU01fR0VPX09GRlNFVF9EQVRBX1NJWkUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxMTI6XFx0XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJpbnZhbGlkIEFDUEkgR0VPIE9GRlNFVCBkYXRhIHNpemU6ICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTExMy1cXHRcXHRcXHRcXHRcXHQgICAgb2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTEyMy1cXHRcXHRcXHRpZiAob2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9DQ0FfREFUQV9TSVpFKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTI0OlxcdFxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiaW52YWxpZCBBQ1BJIERTTSBDQ0EgZGF0YSBzaXplOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMjUtXFx0XFx0XFx0XFx0XFx0ICAgIG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMzUtXFx0XFx0XFx0aWYgKG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCAhPSBBVEgxMktfQUNQSV9EU01fQkFORF9FREdFX0RBVEFfU0laRSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjEzNjpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImludmFsaWQgQUNQSSBEU00gYmFuZCBlZGdlIGRhdGEgc2l6ZTogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTM3LVxcdFxcdFxcdFxcdFxcdCAgICBvYmotXFx1MDAzZWJ1ZmZlci5sZW5ndGgpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTQ3LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTQ4OlxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiQUNQSSBEU00gbWV0aG9kIHJldHVybmVkIGFuIHVuc3VwcG9ydGVkIG9iamVjdCB0eXBlOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNDktXFx0XFx0XFx0ICAgIG9iai1cXHUwMDNldHlwZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTYxOnN0YXRpYyBpbnQgYXRoMTJrX2FjcGlfc2V0X3Bvd2VyX2xpbWl0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE2Ny1cXHQgICAgdGFzX3Nhcl9wb3dlcl90YWJsZVsxXSAhPSBBVEgxMktfQUNQSV9UQVNfREFUQV9FTkFCTEUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxNjg6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJsYXRlc3QgQUNQSSBUQVMgZGF0YSBpcyBpbnZhbGlkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNjktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTcyOlxcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3NfY21kKGFiLCBXTUlfQklPU19QQVJBTV9UQVNfREFUQV9UWVBFLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE3My1cXHRcXHRcXHRcXHQgICAgICB0YXNfc2FyX3Bvd2VyX3RhYmxlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTc1LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxNzY6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gc2VuZCBBQ1BJIFRBUyBkYXRhIHRhYmxlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNzctXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE4Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxODM6c3RhdGljIGludCBhdGgxMmtfYWNwaV9zZXRfYmlvc19zYXJfcG93ZXIoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xODQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTg4LVxcdCAgICBhYi1cXHUwMDNlYWNwaS5iaW9zX3Nhcl9kYXRhWzFdICE9IEFUSDEyS19BQ1BJX1BPV0VSX0xJTUlUX0VOQUJMRV9GTEFHKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTg5OlxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiaW52YWxpZCBsYXRlc3QgQUNQSSBCSU9TIFNBUiBkYXRhXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xOTAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xOTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTkzOlxcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3Nfc2FyX2NtZChhYiwgYWItXFx1MDAzZWFjcGkuYmlvc19zYXJfZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTk0LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxOTU6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gc2V0IEFDUEkgQklPUyBTQVIgdGFibGU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE5Ni1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjAxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIwMjpzdGF0aWMgdm9pZCBhdGgxMmtfYWNwaV9kc21fbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwMy17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjA0LVxcdGludCByZXQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjA1OlxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBkYXRhO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMDctXFx0aWYgKGV2ZW50ID09IEFUSDEyS19BQ1BJX05PVElGWV9FVkVOVCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIwODpcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInVua25vd24gYWNwaSBub3RpZnkgJXVcXFxcblxcXCIsIGV2ZW50KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMDktXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjEyLVxcdGlmICghYWItXFx1MDAzZWFjcGkuYWNwaV90YXNfZW5hYmxlKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjEzOlxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXFxcImFjcGlfdGFzX2VuYWJsZSBpcyBmYWxzZVxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjE0LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIxNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMTc6XFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19UQVNfREFUQSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjE4LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMTk6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gdXBkYXRlIEFDUEkgVEFTIGRhdGEgdGFibGU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIyMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMjItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjIzOlxcdHJldCA9IGF0aDEya19hY3BpX3NldF9wb3dlcl9saW1pdChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjI0LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMjU6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gc2V0IEFDUEkgVEFTIHBvd2VyIGxpbWl0IGRhdGE6ICVkXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjMxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIzMjpcXHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0JJT1NfU0FSKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMzMtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIzNDpcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byB1cGRhdGUgQklPUyBTQVI6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIzNS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjM4OlxcdHJldCA9IGF0aDEya19hY3BpX3NldF9iaW9zX3Nhcl9wb3dlcihhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjM5LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNDA6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gc2V0IEJJT1MgU0FSIHBvd2VyIGxpbWl0OiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNDEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI0NTpzdGF0aWMgaW50IGF0aDEya19hY3BpX3NldF9iaW9zX3Nhcl9wYXJhbXMoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjQ4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI0OTpcXHRyZXQgPSBhdGgxMmtfd21pX3NldF9iaW9zX3Nhcl9jbWQoYWIsIGFiLVxcdTAwM2VhY3BpLmJpb3Nfc2FyX2RhdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI1MC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjUxOlxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHNldCBBQ1BJIEJJT1MgU0FSIHRhYmxlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNTItXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI1NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNTU6XFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfYmlvc19nZW9fY21kKGFiLCBhYi1cXHUwMDNlYWNwaS5nZW9fb2Zmc2V0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI1Ni1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjU3OlxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHNldCBBQ1BJIEJJT1MgR0VPIHRhYmxlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNTgtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI2My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNjQ6c3RhdGljIGludCBhdGgxMmtfYWNwaV9zZXRfdGFzX3BhcmFtcyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI2NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjY4OlxcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3NfY21kKGFiLCBXTUlfQklPU19QQVJBTV9UQVNfQ09ORklHX1RZUEUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjY5LVxcdFxcdFxcdFxcdCAgICAgIGFiLVxcdTAwM2VhY3BpLnRhc19jZmcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNzEtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI3MjpcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBzZW5kIEFDUEkgVEFTIGNvbmZpZyB0YWJsZSBwYXJhbWV0ZXI6ICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI3My1cXHRcXHRcXHQgICAgcmV0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI3Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNzc6XFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfYmlvc19jbWQoYWIsIFdNSV9CSU9TX1BBUkFNX1RBU19EQVRBX1RZUEUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjc4LVxcdFxcdFxcdFxcdCAgICAgIGFiLVxcdTAwM2VhY3BpLnRhc19zYXJfcG93ZXJfdGFibGUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yODAtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI4MTpcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBzZW5kIEFDUEkgVEFTIGRhdGEgdGFibGUgcGFyYW1ldGVyOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yODItXFx0XFx0XFx0ICAgIHJldCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yODgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mjg5OmJvb2wgYXRoMTJrX2FjcGlfZ2V0X2Rpc2FibGVfcmZraWxsKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyOTQ6Ym9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV8xMWJlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI5OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyOTk6dm9pZCBhdGgxMmtfYWNwaV9zZXRfZHNtX2Z1bmMoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzA4LVxcdGlmIChhYi1cXHUwMDNlYWNwaS5hY3BpX3Rhc19lbmFibGUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozMDk6XFx0XFx0cmV0ID0gYXRoMTJrX2FjcGlfc2V0X3Rhc19wYXJhbXMoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMxMC1cXHRcXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MzExOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHNlbmQgQUNQSSBUQVMgcGFyYW1ldGVyczogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzEyLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMxNi1cXHRpZiAoYWItXFx1MDAzZWFjcGkuYWNwaV9iaW9zX3Nhcl9lbmFibGUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozMTc6XFx0XFx0cmV0ID0gYXRoMTJrX2FjcGlfc2V0X2Jpb3Nfc2FyX3BhcmFtcyhhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzE4LVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozMTk6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gc2VuZCBBQ1BJIEJJT1MgU0FSOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMjAtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzI1LVxcdFxcdGJ1ZiA9IGFiLVxcdTAwM2VhY3BpLmNjYV9kYXRhICsgQVRIMTJLX0FDUElfQ0NBX1RIUl9PRkZTRVRfREFUQV9PRkZTRVQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MzI2OlxcdFxcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3NfY21kKGFiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMyNy1cXHRcXHRcXHRcXHRcXHQgICAgICBXTUlfQklPU19QQVJBTV9DQ0FfVEhSRVNIT0xEX1RZUEUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMzAtXFx0XFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjMzMTpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBzZXQgQUNQSSBEU00gQ0NBIHRocmVzaG9sZDogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzMyLVxcdFxcdFxcdFxcdCAgICByZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzM3LVxcdGlmIChhYi1cXHUwMDNlYWNwaS5hY3BpX2JhbmRfZWRnZV9lbmFibGUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozMzg6XFx0XFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfYmlvc19jbWQoYWIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzM5LVxcdFxcdFxcdFxcdFxcdCAgICAgIFdNSV9CSU9TX1BBUkFNX1RZUEVfQkFOREVER0UsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNDItXFx0XFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM0MzpcXHRcXHRcXHRhdGgxMmtfd2FybihhYixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNDQtXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gc2V0IEFDUEkgRFNNIGJhbmQgZWRnZSBjaGFubmVsIHBvd2VyOiAlZFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozNTE6aW50IGF0aDEya19hY3BpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM2OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozNjk6XFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19TVVBQT1JUX0ZVTkNTKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzAtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM3MTpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFxcXCJmYWlsZWQgdG8gZ2V0IEFDUEkgRFNNIGRhdGE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM3Mi1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzc1LVxcdGlmIChBVEgxMktfQUNQSV9GVU5DX0JJVF9WQUxJRChhYi1cXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfRElTQUJMRV9GTEFHKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM3NjpcXHRcXHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0RJU0FCTEVfRkxBRyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzc3LVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozNzg6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gZ2V0IEFDUEkgRElTQUJMRSBGTEFHOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzktXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM5MS1cXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXFx1MDAzZWFjcGksIEFUSDEyS19BQ1BJX0ZVTkNfQklUX0JERl9FWFQpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MzkyOlxcdFxcdHJldCA9IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShhYiwgQVRIMTJLX0FDUElfRFNNX0ZVTkNfQkRGX0VYVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzkzLVxcdFxcdGlmIChyZXQgfHwgYWItXFx1MDAzZWFjcGkuYmRmX3N0cmluZ1swXSA9PSAnXFxcXDAnKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mzk0OlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBBQ1BJIEJERiBFWFQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM5NS1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDAxLVxcdGlmIChBVEgxMktfQUNQSV9GVU5DX0JJVF9WQUxJRChhYi1cXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfVEFTX0NGRykpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MDI6XFx0XFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19UQVNfQ0ZHKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MDMtXFx0XFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQwNDpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBnZXQgQUNQSSBUQVMgY29uZmlnIHRhYmxlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MDUtXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQwOS1cXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXFx1MDAzZWFjcGksIEFUSDEyS19BQ1BJX0ZVTkNfQklUX1RBU19EQVRBKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQxMDpcXHRcXHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX1RBU19EQVRBKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MTEtXFx0XFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQxMjpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBnZXQgQUNQSSBUQVMgZGF0YSB0YWJsZTogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDEzLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MjItXFx0aWYgKEFUSDEyS19BQ1BJX0ZVTkNfQklUX1ZBTElEKGFiLVxcdTAwM2VhY3BpLCBBVEgxMktfQUNQSV9GVU5DX0JJVF9CSU9TX1NBUikpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MjM6XFx0XFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19CSU9TX1NBUik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDI0LVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MjU6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gZ2V0IEFDUEkgYmlvcyBzYXIgZGF0YTogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDI2LVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MzAtXFx0aWYgKEFUSDEyS19BQ1BJX0ZVTkNfQklUX1ZBTElEKGFiLVxcdTAwM2VhY3BpLCBBVEgxMktfQUNQSV9GVU5DX0JJVF9HRU9fT0ZGU0VUKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQzMTpcXHRcXHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0dFT19PRkZTRVQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQzMi1cXHRcXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDMzOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBBQ1BJIGdlbyBvZmZzZXQgZGF0YTogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDM0LVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NDQtXFx0aWYgKEFUSDEyS19BQ1BJX0ZVTkNfQklUX1ZBTElEKGFiLVxcdTAwM2VhY3BpLCBBVEgxMktfQUNQSV9GVU5DX0JJVF9DQ0EpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDQ1OlxcdFxcdHJldCA9IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShhYiwgQVRIMTJLX0FDUElfRFNNX0ZVTkNfSU5ERVhfQ0NBKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NDYtXFx0XFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ0NzpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBnZXQgQUNQSSBEU00gQ0NBIHRocmVzaG9sZCBjb25maWd1cmF0aW9uOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NDgtXFx0XFx0XFx0XFx0ICAgIHJldCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NTktXFx0XFx0XFx0XFx0ICAgICAgIEFUSDEyS19BQ1BJX0ZVTkNfQklUX0JBTkRfRURHRV9DSEFOX1BPV0VSKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ2MDpcXHRcXHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0lOREVYX0JBTkRfRURHRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDYxLVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0NjI6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gZ2V0IEFDUEkgRFNNIGJhbmQgZWRnZSBjaGFubmVsIHBvd2VyOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NjMtXFx0XFx0XFx0XFx0ICAgIHJldCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NzMtXFx0XFx0XFx0XFx0XFx0ICAgICBBQ1BJX0RFVklDRV9OT1RJRlksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDc0OlxcdFxcdFxcdFxcdFxcdCAgICAgYXRoMTJrX2FjcGlfZHNtX25vdGlmeSwgYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ3NS1cXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0NzY6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gaW5zdGFsbCBEU00gbm90aWZ5IGNhbGxiYWNrOiAlZFxcXFxuXFxcIiwgc3RhdHVzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NzctXFx0XFx0cmV0dXJuIC1FSU87XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00ODQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDg1OmludCBhdGgxMmtfYWNwaV9jaGVja19iZGZfdmFyaWFudF9uYW1lKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDg2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ5Mi1cXHRpZiAoc3Ryc2NweShhYi1cXHUwMDNlcW1pLnRhcmdldC5iZGZfZXh0LCBhYi1cXHUwMDNlYWNwaS5iZGZfc3RyaW5nICsgNCwgbWF4X2xlbikgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ5MzpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDk0LVxcdFxcdFxcdCAgIFxcXCJhY3BpIGJkZiB2YXJpYW50IGxvbmdlciB0aGFuIHRoZSBidWZmZXIgKHZhcmlhbnQ6ICVzKVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ5OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo1MDA6dm9pZCBhdGgxMmtfYWNwaV9zdG9wKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNTAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTUwNi1cXHRcXHRcXHRcXHQgICBBQ1BJX0RFVklDRV9OT1RJRlksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NTA3OlxcdFxcdFxcdFxcdCAgIGF0aDEya19hY3BpX2RzbV9ub3RpZnkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTUwOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjc1OmludCBhdGgxMmtfYWNwaV9zdGFydChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo3Njp2b2lkIGF0aDEya19hY3BpX3N0b3Aoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6Nzc6Ym9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV9yZmtpbGwoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6Nzg6Ym9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV8xMWJlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjc5OnZvaWQgYXRoMTJrX2FjcGlfc2V0X2RzbV9mdW5jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjgwOmludCBhdGgxMmtfYWNwaV9jaGVja19iZGZfdmFyaWFudF9uYW1lKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTgxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtODMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6ODQ6c3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2FjcGlfc3RhcnQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC04NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC04OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo4OTpzdGF0aWMgaW5saW5lIHZvaWQgYXRoMTJrX2FjcGlfc3RvcChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTkyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjkzOnN0YXRpYyBpbmxpbmUgYm9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV9yZmtpbGwoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC05NC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC05Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo5ODpzdGF0aWMgaW5saW5lIGJvb2wgYXRoMTJrX2FjcGlfZ2V0X2Rpc2FibGVfMTFiZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTEwMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDoxMDM6c3RhdGljIGlubGluZSB2b2lkIGF0aDEya19hY3BpX3NldF9kc21fZnVuYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTEwNC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC0xMDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6MTA3OnN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19hY3BpX2NoZWNrX2JkZl92YXJpYW50X25hbWUoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC0xMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjIzOnN0YXRpYyBzdHJ1Y3QgYXRoMTJrX2FoYl9kcml2ZXIgKmF0aDEya19haGJfZmFtaWx5X2RyaXZlcnNbQVRIMTJLX0RFVklDRV9GQU1JTFlfTUFYXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI0OnN0YXRpYyBjb25zdCBjaGFyIGF0aDEya191c2VycGRfaXJxW11bOV0gPSB7XFxcInNwYXduXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI1LVxcdFxcdFxcdFxcdCAgICAgXFxcInJlYWR5XFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMzEtICogT25lIFE2IFJvb3RQRCAobWFuYWdlZCBieSBzZXBhcmF0ZSBycHJvYyBkcml2ZXIpIHN1cHBvcnRzIG11bHRpcGxlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMjogKiBhdGgxMmsgVXNlclBEcy4gRWFjaCBVc2VyUEQgcmVwcmVzZW50cyBhIFdpRmkgcmFkaW8gaW5zdGFuY2UuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMy0gKlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zOC0gKiBMb2NraW5nOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mzk6ICogIC0gYXRoMTJrX3Jwcm9jX2luZm9fbG9jazogUHJvdGVjdHMgZ19ycHJvY19pbmZvIGFsbG9jYXRpb24vZnJlZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtNDAtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzo0MTpzdGF0aWMgc3RydWN0IGF0aDEya19haGJfcnByb2NfaW5mbyAqZ19ycHJvY19pbmZvO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6NDI6c3RhdGljIERFRklORV9NVVRFWChhdGgxMmtfcnByb2NfaW5mb19sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTQzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDA9ZW51bSBleHRfaXJxX251bSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEzOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE0MDpzdGF0aWMgdTMyIGF0aDEya19haGJfcmVhZDMyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUzMiBvZmZzZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNDEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxNDc6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl93cml0ZTMyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUzMiBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNDgtXFx0XFx0XFx0ICAgICAgIHUzMiB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTU1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTU2OnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2FuY2VsX3dvcmtxdWV1ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTYwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VjZV9jb3VudDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxNjE6XFx0XFx0c3RydWN0IGF0aDEya19jZV9waXBlICpjZV9waXBlID0gXFx1MDAyNmFiLVxcdTAwM2VjZS5jZV9waXBlW2ldO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTYyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTYzOlxcdFxcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFxcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE2NC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTY5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTcwOnN0YXRpYyB2b2lkIGF0aDEya19haGJfZXh0X2dycF9kaXNhYmxlKHN0cnVjdCBhdGgxMmtfZXh0X2lycV9ncnAgKmlycV9ncnApXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNzEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxNzg6c3RhdGljIHZvaWQgX19hdGgxMmtfYWhiX2V4dF9pcnFfZGlzYWJsZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTc5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTgyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxODM6XFx0XFx0c3RydWN0IGF0aDEya19leHRfaXJxX2dycCAqaXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xODQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxODU6XFx0XFx0YXRoMTJrX2FoYl9leHRfZ3JwX2Rpc2FibGUoaXJxX2dycCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xODYtXFx0XFx0aWYgKGlycV9ncnAtXFx1MDAzZW5hcGlfZW5hYmxlZCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xOTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxOTQ6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9leHRfZ3JwX2VuYWJsZShzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjAxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjAyOnN0YXRpYyB2b2lkIGF0aDEya19haGJfc2V0Yml0MzIoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTggYml0LCB1MzIgb2Zmc2V0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjA2OlxcdHZhbCA9IGF0aDEya19haGJfcmVhZDMyKGFiLCBvZmZzZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjA3OlxcdGF0aDEya19haGJfd3JpdGUzMihhYiwgb2Zmc2V0LCB2YWwgfCBCSVQoYml0KSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMDgtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjA5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjEwOnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2xlYXJiaXQzMihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1OCBiaXQsIHUzMiBvZmZzZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMTEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMTQ6XFx0dmFsID0gYXRoMTJrX2FoYl9yZWFkMzIoYWIsIG9mZnNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMTU6XFx0YXRoMTJrX2FoYl93cml0ZTMyKGFiLCBvZmZzZXQsIHZhbCBcXHUwMDI2IH5CSVQoYml0KSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMTYtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjE3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjE4OnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxX2VuYWJsZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MTYgY2VfaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMjktXFx0aWYgKGNlX2F0dHItXFx1MDAzZXNyY19uZW50cmllcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjIzMDpcXHRcXHRhdGgxMmtfYWhiX3NldGJpdDMyKGFiLCBjZV9pZCwgaWUxX3JlZ19hZGRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIzMi1cXHRpZiAoY2VfYXR0ci1cXHUwMDNlZGVzdF9uZW50cmllcykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjMzOlxcdFxcdGF0aDEya19haGJfc2V0Yml0MzIoYWIsIGNlX2lkLCBpZTJfcmVnX2FkZHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjM0OlxcdFxcdGF0aDEya19haGJfc2V0Yml0MzIoYWIsIGNlX2lkICsgQ0VfSE9TVF9JRV8zX1NISUZULFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjM1LVxcdFxcdFxcdFxcdCAgICBpZTNfcmVnX2FkZHIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMzk6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9jZV9pcnFfZGlzYWJsZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MTYgY2VfaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNTAtXFx0aWYgKGNlX2F0dHItXFx1MDAzZXNyY19uZW50cmllcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI1MTpcXHRcXHRhdGgxMmtfYWhiX2NsZWFyYml0MzIoYWIsIGNlX2lkLCBpZTFfcmVnX2FkZHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjUyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjUzLVxcdGlmIChjZV9hdHRyLVxcdTAwM2VkZXN0X25lbnRyaWVzKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNTQ6XFx0XFx0YXRoMTJrX2FoYl9jbGVhcmJpdDMyKGFiLCBjZV9pZCwgaWUyX3JlZ19hZGRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI1NTpcXHRcXHRhdGgxMmtfYWhiX2NsZWFyYml0MzIoYWIsIGNlX2lkICsgQ0VfSE9TVF9JRV8zX1NISUZULFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjU2LVxcdFxcdFxcdFxcdCAgICAgIGllM19yZWdfYWRkcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI1OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI2MDpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX3N5bmNfY2VfaXJxcyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjY1LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VjZV9jb3VudDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNjY6XFx0XFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjY3LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNzQ6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9zeW5jX2V4dF9pcnFzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDEyS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI4MDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mjg5OnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxc19lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlY2VfY291bnQ7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mjk0OlxcdFxcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFxcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5NS1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI5NjpcXHRcXHRhdGgxMmtfYWhiX2NlX2lycV9lbmFibGUoYWIsIGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjk3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjk5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzAwOnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxc19kaXNhYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMDEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMDQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZWNlX2NvdW50OyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjMwNTpcXHRcXHRpZiAoYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMDYtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMDc6XFx0XFx0YXRoMTJrX2FoYl9jZV9pcnFfZGlzYWJsZShhYiwgaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMDgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMTE6c3RhdGljIGludCBhdGgxMmtfYWhiX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMTIte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzEzOlxcdGF0aDEya19haGJfY2VfaXJxc19lbmFibGUoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzE0OlxcdGF0aDEya19jZV9yeF9wb3N0X2J1ZihhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTMxOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjMxOTpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX2V4dF9pcnFfZW5hYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAyOjA3LjM1NjM1ODc0OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MjMzNTQ1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciB0aGUgYXRoMTJrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgYXRoMTJrYCBkcml2ZXIuIEl0IGFwcGVhcnMgdG8gbW9kaWZ5IGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYCwgd2hpY2ggdGVsbHMgbWUgaXQncyByZWxhdGVkIHRvIHRoZSBQQ0kgaW1wbGVtZW50YXRpb24uIFRoZSBwcm9tcHQncyBjcml0ZXJpYSBoYXZlIG1lIHRoaW5raW5nLlxuXG5GaXJzdCwgaXMgdGhpcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBjb2RlIHRoYXQgcmVsaWVzIG9uIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VPyBZZXMsIGBhdGgxMmtgIGlzIGEgUXVhbGNvbW0gV2ktRmkgNyBkcml2ZXIsIHNvIGl0IGRlZmluaXRlbHkgbmVlZHMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAob3IgcG90ZW50aWFsbHkgQUhCIGZvciBTb0NzKS4gYG1hYzgwMjExX2h3c2ltYCBpc24ndCBnb2luZyB0byBoZWxwIGhlcmU7IHRoYXQncyBhIHNvZnR3YXJlIHNpbXVsYXRvciB0aGF0IGRvZXNuJ3QgaW50ZXJhY3Qgd2l0aCBgYXRoMTJrYC4gUENJIFdpLUZpIGRyaXZlcnMsIGluIGdlbmVyYWwsIGFyZSB0b3VnaCB0byBmdXp6IHVubGVzcyB3ZSBoYXZlIGEgc3BlY2lmaWMgUUVNVSBzZXR1cCBvciBpdCdzIGEgVVNCIGRyaXZlciB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyBleGNsdWRpbmcgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy5cIiBOb3csIGBhdGgxMmtgIGlzIGEgKnZlbmRvci1zcGVjaWZpYyogUENJZSBXaS1GaSBkcml2ZXIsIHNvIGl0IHNvcnQgb2YgZml0cyB0aGUgZGVzY3JpcHRpb24uIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgaW50ZW50IGJlaGluZCB0aGUgcHJvbXB0IGVuY29tcGFzcyBkcml2ZXJzIGxpa2UgdGhpcz8gSXQgZG9lc24ndCBleHBsaWNpdGx5IG1lbnRpb24gV2ktRmkuXG5cbkkgbmVlZCB0byBsb29rIGNsb3NlciBhdCB3aGF0J3MgYmVpbmcgbW9kaWZpZWQuIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGlzIGJlaW5nIHRvdWNoZWQsIGFuZCB0aGF0J3MgY2FsbGVkIGR1cmluZyBkZXZpY2UgcHJvYmUuIFdpdGhvdXQgdGhlIGNvcnJlY3QgaGFyZHdhcmUsIHRoZSBwcm9iZSBlaXRoZXIgd29uJ3QgYmUgY2FsbGVkLCBvciBpdCB3aWxsIGZhaWwgZWFybHkuIElmIHRoZSBwcm9iZSBmYWlscywgdGhhdCB3b3VsZCBtZWFuIHRoYXQgdGhpcyBwYXRoIGlzIGluYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAsIHdoaWNoIHdvdWxkIGluZGljYXRlIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Ib3dldmVyLCBzeXprYWxsZXIgZG9lcyBoYXZlIGEgUENJIGZ1enplciwgd2hpY2ggaGFzIGdvdCBtZSB0aGlua2luZy4gSXQgaGFzIHRoZSBhYmlsaXR5IHRvIGVtdWxhdGUgUENJIGRldmljZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGNhbiBzdWNjZXNzZnVsbHkgZW11bGF0ZSB0aGUgcGFydHMgb2YgdGhlIGRldmljZSB0aGF0IHRoZSBgYXRoMTJrYCBkcml2ZXIgcmVxdWlyZXMuIElmIHRoZSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIHByb2JlIG9mIGF0aDEyaywgdGhlbiBpdCBtaWdodCBiZSByZWFjaGFibGUuIEkgbXVzdCBpbnZlc3RpZ2F0ZSBpZiBzeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBvciBzdXBwb3J0IGZvciBgYXRoMTJrYCB0byBzZWUgaWYgdGhpcyBpcyBwb3NzaWJsZS4gSWYgaXQgaXMsIHRoZW4gdGhlIHByb21wdCdzIGV4Y2x1c2lvbiBtYXkgbm90IGFwcGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIxMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjoxNi43Nzk3MTYxNDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxOTA2NjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzeXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjoxNi44Mjc5MTM4OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDI1NzUzMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgZ3JlcHBlciB0b29sIGlzIHVzZWxlc3MgZm9yIGRpZ2dpbmcgaW50byB0aGUgYHN5cy9gIGRpcmVjdG9yeSBmb3Igc3l6bGFuZyBkZXNjcmlwdGlvbnMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHF1aXRlIGV4cGxpY2l0IGFib3V0IHRoYXQuIEl0J3MgZXNzZW50aWFsbHkgdGVsbGluZyBtZSwgXCJEb24ndCBldmVuIGJvdGhlcjsgaXQgd29uJ3Qgd29yay5cIiBBbmQgSSBpbW1lZGlhdGVseSBzZWUgdGhlIGlzc3VlOiBJIGRvbid0IGhhdmUgdGhvc2UgYWx0ZXJuYXRpdmUgdG9vbHMsIGByZWFkLXN5ei1zcGVjYCBhbmQgYHN5ei1ncmVwcGVyYCwgaW5zdGFsbGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIFRoZSBzeXN0ZW0gcHJvbXB0IHJlYWxseSBzaG91bGQgaGF2ZSBtZW50aW9uZWQgdGhvc2UgdG9vbHMgaWYgaXQncyBleHBlY3RpbmcgbWUgdG8gdXNlIHRoZW0gZm9yIHRoaXMgdGFzaywgc2luY2UgdGhlIGBnaXQgZ3JlcGAgZmxhZ3MgYXJlIGlycmVsZXZhbnQgaGVyZSFcblxuU28sIEkgbmVlZCB0byBwaXZvdC4gSSBjYW4gc3RpbGwgdHJ5IHRvIHVuZGVyc3RhbmQgUENJIHByb2JlIHJlYWNoYWJpbGl0eSB0aG91Z2guXG5cblRoZSBoaW50IGxpZXMgaW4gdGhlc2UgcGF0Y2ggbW9kaWZpY2F0aW9uczogYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYC4gTGV0IG1lIGRpdmUgaW50byBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2Agc3BlY2lmaWNhbGx5LCBhcyB0aGF0IHNlZW1zIHRoZSBtb3JlIHJlbGV2YW50IG9mIHRoZSB0d28uIEknbGwgY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDk2LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAyOjI2LjI1MzY2OTc2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTkzNTQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz01MjM9c3RhdGljIGlycXJldHVybl90IGF0aDEya19wY2lfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNTQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6NTQ1OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNTQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9NjQzPXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9jb25maWdfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY4OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjY5MDpcXHRyZXQgPSBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY5MS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAyOjI2LjMwMzYxMDY5MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNjcxNjAzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYXRoMTJrIFBDSSBJUlEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGlzIGRlZmluaXRlbHkgcG9wcGluZyB1cCBhcyBhIHN1c3BlY3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldhaXQsIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGF0aDEya19wY2lfcHJvYmVgP1wiIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgSVJRIGNvbmZpZ3VyYXRpb24sIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBzdGFuZGFyZCBQQ0kgaW5pdGlhbGl6YXRpb24gZmxvdy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgY2FsbCBncmFwaC4gVGhlIGRyaXZlcuKAmXMgaW5pdGlhbGl6YXRpb24gaXMgdGhlIG5hdHVyYWwgcGxhY2UgdG8gY29uZmlndXJlIHRoZSBpbnRlcnJ1cHRzLCBzbyB0aGlzIHNob3VsZCBiZSBlYXN5IHRvIGNvbmZpcm0uIEEgcXVpY2sgY29kZSBkaXZlIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIGlzIGluIG9yZGVyLCBJIHN1cHBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzg1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6MzQuNjcwNzczODQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwMzg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX2NvbmZpZ19pcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTYzND1zdGF0aWMgaW50IGF0aDEya19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY0Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjY0MzpzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNjQ0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTU0OD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2NDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjQzOlxcdHJldCA9IGF0aDEya19wY2lfY29uZmlnX2lycShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjQ0LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6MzQuNzE5MTgzMTIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDk0NTAzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIFN5emthbGxlciB0byBUcmlnZ2VyIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgYXRoMTJrX3BjaV9wcm9iZWAsIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiBsZXZlcmFnZSBzeXprYWxsZXIgdG8gYWN0dWFsbHkgKmdldCogYGF0aDEya19wY2lfcHJvYmVgIHRvIGV4ZWN1dGUuIE15IGh1bmNoIGlzIHRoYXQgaXQncyBwb3NzaWJsZS4gU3l6a2FsbGVyJ3MgUENJIGZ1enplciBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgaGVyZTsgaXQncyBjYXBhYmxlIG9mIGluamVjdGluZyB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGUgcGllY2VzIHNlZW0gdG8gZml0IGlmIHdlIGNhbiBtYWtlIHRoZSBQQ0kgZnV6emVyIGluamVjdCBhIGRldmljZSB0aGF0IGxvb2tzIGVub3VnaCBsaWtlIGFuIGF0aDEyayBkZXZpY2UsIGFzIGl0IHNlZW1zIHRoYXQgdGhpcyBpcyB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZSBkZXZpY2UgZHJpdmVyIGlzIGRldGVjdGVkLiBJZiB0aGUgdmVuZG9yIGFuZCBkZXZpY2UgSUQgbWF0Y2hlcyB3aGF0IHRoZSBkcml2ZXIgZXhwZWN0cywgYGF0aDEya19wY2lfcHJvYmVgIHNob3VsZCB0cmlnZ2VyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIHRoZXJlZm9yZSwgaXMgdG8gdmVyaWZ5IHRoZSB2ZW5kb3IgYW5kIGRldmljZSBJRHMgdGhhdCBhcmUgdXNlZCBieSB0aGUgYXRoMTJrIGRyaXZlciB0byBzZWUgaWYgdGhlc2UgbWF0Y2gsIGFzIHRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgdG8gdGhlIGFwcHJvYWNoIGJlaW5nIGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTM1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAyOjM5LjE2ODYzNjQwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NTM0OTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19wY2lfaWRfdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6MzkuMjE1MTk0NjU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzkzMTQ0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipIdW50aW5nIERvd24gdGhlIFBDSSBEZXZpY2UgSUQgaW4gYXRoMTJrKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIFBDSSBkZXZpY2UgSUQgaGFuZGxpbmcgZm9yIHRoZSBhdGgxMmsgd2lyZWxlc3MgZHJpdmVyLCBsaWtlbHkgZm9yIHNvbWUgc29ydCBvZiBkZWJ1Z2dpbmcgb3IgY29tcGF0aWJpbGl0eSBhbmFseXNpcy4gTXkgaW5zdGluY3Qgc2F5cyBpdCdzIGdvaW5nIHRvIGJlIGluIHRoZSBQQ0ktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIHdoaWNoIHVzdWFsbHkgcmVzaWRlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrYCB0cmVlLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYHBjaS5jYCBmaWxlLiBUaGF0J3MgYSBwcmV0dHkgc3RhbmRhcmQgbmFtaW5nIGNvbnZlbnRpb24gLSBcInBjaS5jXCIgYWxtb3N0IGFsd2F5cyBjb250YWlucyB0aGUgUENJLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgSUQgdGFibGUuIFRoaXMgaXNuJ3QgYSBzaG90IGluIHRoZSBkYXJrLCBidXQgYSB0YXJnZXRlZCBzZWFyY2ggYmFzZWQgb24gZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGtpbmRzIG9mIGRyaXZlcnMuIEtub3dpbmcgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGRyaXZlciBsYXlvdXRzIG1ha2VzIHRoaXMgYSBxdWljayBhbmQgZWZmaWNpZW50IHN0YXJ0aW5nIHBvaW50LiBOb3csIEknbGwganVzdCBvcGVuIHRoYXQgZmlsZSBhbmQgc2VhcmNoIGZvciBcInBjaVxcX2RldmljZVxcX2lkXCIgYW5kIHNlZSB3aGF0IEkgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNTksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjo0My4yNTQ1MTMzMTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjA5NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kZXZpY2VfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MjY9c3RhdGljIGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1Mjc6YXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUyOC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTI5LVxcdGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2ZhbWlseV9pZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1MzA6XFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUzMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTU0OD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTQ5OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjo0My4zMDY3MjgwMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMTczMjg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGF0aDEyayBQQ0kgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgYXRoMTJrYCBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgUENJIGltcGxlbWVudGF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgaXMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBsb29rIGZvciBob3cgdGhpcyBkcml2ZXIgaXMgKmlkZW50aWZpZWQqIGFuZCAqbG9hZGVkKiBieSB0aGUga2VybmVsLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggd2l0aGluIHRoYXQgZmlsZSBmb3IgdHdvIGtleSB0aGluZ3M6IGBNT0RVTEVfREVWSUNFX1RBQkxFYCwgd2hpY2ggZGVmaW5lcyB0aGUgbW9kdWxlJ3Mgc3VwcG9ydGVkIGRldmljZXMsIGFuZCBgcGNpX2RyaXZlcmAsIHdoaWNoIGlzIHRoZSBjb3JlIHN0cnVjdHVyZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIGRyaXZlciB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtLiBGaW5kaW5nIHRoZXNlIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIHJlY29nbml6ZXMgYW5kIGF0dGFjaGVzIHRoaXMgZHJpdmVyIHRvIHRoZSBQQ0kgaGFyZHdhcmUuIFRoaXMgc2hvdWxkIGJlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIG1hdGNoaW5nIGFuZCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NzgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjo0Ni43Mzg0NjM3MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTg1NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6Mzk6c3RhdGljIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVhdO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNDAtc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfbXNpX2NvbmZpZyBtc2lfY29uZmlnX29uZV9tc2kgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE4Mjg9aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgyOTpcXHRcXHRcXHQgICAgICAgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICpkcml2ZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MzE6XFx0c3RydWN0IHBjaV9kcml2ZXIgKnBjaV9kcml2ZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0NzpcXHRwY2lfZHJpdmVyID0gXFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cXHUwMDNlZHJpdmVyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0ODpcXHRwY2lfZHJpdmVyLVxcdTAwM2VuYW1lID0gZHJpdmVyLVxcdTAwM2VuYW1lO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0OTpcXHRwY2lfZHJpdmVyLVxcdTAwM2VpZF90YWJsZSA9IGRyaXZlci1cXHUwMDNlaWRfdGFibGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUwOlxcdHBjaV9kcml2ZXItXFx1MDAzZXByb2JlID0gYXRoMTJrX3BjaV9wcm9iZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTE6XFx0cGNpX2RyaXZlci1cXHUwMDNlcmVtb3ZlID0gYXRoMTJrX3BjaV9yZW1vdmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUyOlxcdHBjaV9kcml2ZXItXFx1MDAzZXNodXRkb3duID0gYXRoMTJrX3BjaV9zaHV0ZG93bjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTM6XFx0cGNpX2RyaXZlci1cXHUwMDNlZHJpdmVyLnBtID0gXFx1MDAyNmF0aDEya19wY2lfcG1fb3BzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg1NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTU6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIocGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODU2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6NDYuNzg1MDUzODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5NzI5MTgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgRHJpdmVyIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIGBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcmAuLi4gdGhhdCdzIHRoZSBrZXkgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQncyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBmbG93LiBJdCdzIG5vdCBlbm91Z2ggdG8ga25vdyAqdGhhdCogaXQncyByZWdpc3RlcmVkOyBJIG5lZWQgdG8ga25vdyAqaG93KiBhbmQgKndoZW4qLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGRyaXZlcidzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTczLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6NTEuODgyMzQ4MjY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk1NjEwOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgX19tYXliZV91bnVzZWQgYXRoMTJrX3BjaV9wbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODI4OmludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODU2LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTc6RVhQT1JUX1NZTUJPTChhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODU4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzY9dm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oOjE3NzppbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTk3PWludCBhdGgxMmtfd2lmaTdfcGNpX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MjAxOlxcdHJldCA9IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKEFUSDEyS19ERVZJQ0VfRkFNSUxZX1dJRkk3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAyLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjo1My4xNzc5NjcyMjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA2NzE1MzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZHJpdmVyIGRldmVsb3BtZW50OlxuXG4qKkluaXRpYWwgRHJpdmVyIFJlZ2lzdHJhdGlvbiBcdTAwMjYgSUQgVGFibGUgSW5zcGVjdGlvbioqXG5cblJpZ2h0LCBzbyBgYXRoMTJrX3dpZmk3X3BjaV9pbml0YCBoYXMganVzdCByZWdpc3RlcmVkIHRoZSBkYW1uIGRyaXZlci4gR29vZCwgdGhhdCdzIHN0ZXAgb25lLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgd2hvbGUgUENJIGRldmljZSBtYXRjaGluZyB0aGluZyBpcyBzZXQgdXAsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGBpZF90YWJsZWAgZm9yIHRoZSBgYXRoMTJrX3dpZmk3X3BjaV9kcml2ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBQQ0kgZGV2aWNlIElEcyBhcmUgc3VwcG9ydGVkIGFuZCBzZWUgaWYgYW55dGhpbmcgbG9va3Mgb3V0IG9mIHBsYWNlLiBJdCdzIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXJkd2FyZSB3ZSdyZSBhY3R1YWxseSBzdXBwb3NlZCB0byBiZSB0YWxraW5nIHRvLCBhbmQgaG93IHRoZSBkcml2ZXIga25vd3MgaXQncyB0aGUgcmlnaHQgb25lLiBMZXQncyBzZWUgd2hhdCBkZXZpY2VzIHRoaXMgY292ZXJzIGFuZCBpZiBhbnl0aGluZyBpcyBvYnZpb3VzbHkgbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3MzksIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMzowMS4yNDUxMjQ1MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExMjI5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3dpZmk3X3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19wY2lfcmVnX2Jhc2UgYXRoMTJrX3dpZmk3X3JlZ19iYXNlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYzoxODg6c3RhdGljIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciBhdGgxMmtfd2lmaTdfcGNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTE4OS1cXHQubmFtZSA9IFxcXCJhdGgxMmtfd2lmaTdfcGNpXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTk3PWludCBhdGgxMmtfd2lmaTdfcGNpX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAxLVxcdHJldCA9IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKEFUSDEyS19ERVZJQ0VfRkFNSUxZX1dJRkk3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MjAyOlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6MDEuMjk2MjU1MDA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDQyNzM4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYXRoMTJrIFBDSSBJRCBUYWJsZSoqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyByZWNvZ25pemluZyB0aGVzZSBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBhdGgxMmsgZHJpdmVyIGZvciB0aGUgbGF0ZXN0IFdpLUZpIDcgc2lsaWNvbi4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYGlkX3RhYmxlYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQg4oCTIHRoZSBQQ0kgSUQgdGFibGUgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hpY2ggc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zIGFuZCB2ZW5kb3JzIGFyZSBzdXBwb3J0ZWQgYW5kIGhvdyB0aGUgZHJpdmVyIGtub3dzIHRvIGJpbmQgdG8gdGhlbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBQQ0kgZGV2aWNlIElEcywgdmVuZG9yIElEcywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZmxhZ3Mgb3IgcHJvcGVydGllcyB0aGF0IGFyZSBjcnVjaWFsIGZvciBlbmFibGluZyBzcGVjaWZpYyBmZWF0dXJlcyBvciB3b3JrYXJvdW5kcyBmb3IgY2VydGFpbiBoYXJkd2FyZSByZXZpc2lvbnMuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGV5J3JlIHVzaW5nIGFueSBuZXcsIG1vcmUgcmVmaW5lZCBtYXRjaGluZyB0ZWNobmlxdWVzIGluIHRoaXMgZ2VuZXJhdGlvbi4gVGhpcyB0YWJsZSBpcyB0aGUgYmVkcm9jayBmb3IgZGV2aWNlIHJlY29nbml0aW9uLCBhbmQgZ2V0dGluZyBmYW1pbGlhciB3aXRoIGl0IHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyJ3MgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM3NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjA2LjMwMDUzMjI3NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NzkzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWRfdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTMzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDEya193aWZpN19wY2lfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTM1LVxcdHsgUENJX1ZERVZJQ0UoUUNPTSwgUUNOOTI3NF9ERVZJQ0VfSUQpIH0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6NDE6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aDEya193aWZpN19wY2lfaWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtNDItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE4OD1zdGF0aWMgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyIGF0aDEya193aWZpN19wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMTg5LVxcdC5uYW1lID0gXFxcImF0aDEya193aWZpN19wY2lcXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MTkwOlxcdC5pZF90YWJsZSA9IGF0aDEya193aWZpN19wY2lfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xOTEtXFx0Lm9wcy5wcm9iZSA9IGF0aDEya193aWZpN19wY2lfcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjA2LjM0NzExNzM2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA3NTAxNDQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFRhcmdldCoqXG5cbkFscmlnaHQsIHNvIHN5emthbGxlciAqY2FuKiBpbmplY3QgYSBQQ0kgZGV2aWNlLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgdmVuZG9yIElEIFFDT00gYW5kIGRldmljZSBJRCBRQ045Mjc0X0RFVklDRV9JRC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IHdhaXQuLi4gZG9lcyBzeXprYWxsZXIncyBQQ0kgZnV6emVyIHJlYWxseSBhbGxvdyAqYXJiaXRyYXJ5KiBQQ0kgZGV2aWNlIGluamVjdGlvbj8gWWVzLCBJJ20gcHJldHR5IHN1cmUgaXQgaGFzIHRoYXQgYHN5el9wY2lfc2V0dXBgIHBzZXVkby1zeXNjYWxsIHRoYXQgZ2l2ZXMgdXMgc29tZSBjb250cm9sIG92ZXIgdmVuZG9yIGFuZCBkZXZpY2UgSURzLiBHb29kLlxuXG5Ob3csIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBmb2N1cyBvbiBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzXCIgdGhhdCByZWx5IG9uIHBoeXNpY2FsIFBDSWUgY2FyZHMgdGhhdCBhcmVuJ3QgZW11bGF0ZWQgd2VsbCBpbiBzdGFuZGFyZCBRRU1VLiBJcyB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcywgcmVhbGx5IGluIHRoYXQgY2F0ZWdvcnk/IEl0J3MgYSBXaS1GaSBkcml2ZXIsIG5vdCBhIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVS4gSG1tLi4uXG5cbkJ1dCwgaG9sZCBvbiwgdGhlIGNvcmUgcHJpbmNpcGxlIGlzIHRoZSBzYW1lLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGRyaXZlciAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24gYW5kIGRvIGFueXRoaW5nIHVzZWZ1bCBkdXJpbmcgZnV6emluZz8gSWYgaXQgZG9lcywgdGhlbiBmdXp6aW5nIGl0IGlzIHByb2JhYmx5IG5vdCB3b3J0aCB0aGUgZWZmb3J0LiBJdCdzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGxvZ2ljIGFzIHRoZSBcInN3aXRjaC9TbWFydE5JQy9HUFVcIiBkcml2ZXJzLlxuXG5MZXQgbWUgdGhpbmvigKYgd2hhdCAqZXhhY3RseSogZG9lcyBgYXRoMTJrX3BjaV9wcm9iZWAgZG8/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgZnVuY3Rpb24ncyBjb2RlLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byBhc3Nlc3NpbmcgaWYgdGhpcyBpcyBhIHZpYWJsZSBmdXp6aW5nIHRhcmdldCBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTE1LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjE4LjQyMjEzNTE5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzNjk3MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3BjaV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyNz1hdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTQ4OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NDktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODI4PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0OS1cXHRwY2lfZHJpdmVyLVxcdTAwM2VpZF90YWJsZSA9IGRyaXZlci1cXHUwMDNlaWRfdGFibGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUwOlxcdHBjaV9kcml2ZXItXFx1MDAzZXByb2JlID0gYXRoMTJrX3BjaV9wcm9iZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NTEtXFx0cGNpX2RyaXZlci1cXHUwMDNlcmVtb3ZlID0gYXRoMTJrX3BjaV9yZW1vdmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjE4LjQ3MzUxMDkxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzMyNzg5NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYXRoMTJrX3BjaV9wcm9iZSBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGF0aDEya19wY2lfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhpcyByb3V0aW5lIGludGVyYWN0cyBkaXJlY3RseSB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQsIGNydWNpYWxseSwgaWYgaXQgY29udGFpbnMgYW55IGVhcmx5IGJhaWxvdXQgcGF0aHMgdGhhdCBhcmUgaW5kaWNhdGl2ZSBvZiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBvciBmdW5kYW1lbnRhbCByZXNvdXJjZSBjb25mbGljdHMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaGlnaC1sZXZlbCBzZW5zZSBvZiBpdHMgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3kgYW5kIHBvdGVudGlhbGx5IGlkZW50aWZ5IGluaXRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgZHVyaW5nIHRoZSBQQ0kgZGV2aWNlIGJyaW5nLXVwIHByb2Nlc3MuIEFueSBxdWljayBkaXNxdWFsaWZpY2F0aW9uIGJhc2VkIG9uIHJlZ2lzdGVyIGFjY2VzcyB3b3VsZCBiZSBleHRyZW1lbHkgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzExMCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjIzLjIwNjMwMzAzNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTQ4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU0ODpcXHRzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuMTU0OTpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuMTU1MDpcXHR7XFxuMTU1MTpcXHRcXHRlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZDtcXG4xNTUyOlxcdFxcdHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2k7XFxuMTU1MzpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiO1xcbjE1NTQ6XFx0XFx0aW50IHJldDtcXG4xNTU1OlxcdFxcbjE1NTY6XFx0XFx0YWIgPSBhdGgxMmtfY29yZV9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDEyS19CVVNfUENJKTtcXG4xNTU3OlxcdFxcdGlmICghYWIpIHtcXG4xNTU4OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMmsgYmFzZVxcXFxuXFxcIik7XFxuMTU1OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNTYwOlxcdFxcdH1cXG4xNTYxOlxcdFxcbjE1NjI6XFx0XFx0YWItXFx1MDAzZWRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuMTU2MzpcXHRcXHRhYl9wY2kgPSBhdGgxMmtfcGNpX3ByaXYoYWIpO1xcbjE1NjQ6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZfaWQgPSBwY2lfZGV2LVxcdTAwM2VkZXZpY2U7XFxuMTU2NTpcXHRcXHRhYl9wY2ktXFx1MDAzZWFiID0gYWI7XFxuMTU2NjpcXHRcXHRhYl9wY2ktXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjE1Njc6XFx0XFx0YWItXFx1MDAzZWhpZi5vcHMgPSBcXHUwMDI2YXRoMTJrX3BjaV9oaWZfb3BzO1xcbjE1Njg6XFx0XFx0YWItXFx1MDAzZWZ3X21vZGUgPSBBVEgxMktfUU1JX0ZJUk1XQVJFX01PREVfTk9STUFMO1xcbjE1Njk6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcXG4xNTcwOlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZhYl9wY2ktXFx1MDAzZXdpbmRvd19sb2NrKTtcXG4xNTcxOlxcdFxcbjE1NzI6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9jbGFpbShhYl9wY2ksIHBkZXYpO1xcbjE1NzM6XFx0XFx0aWYgKHJldCkge1xcbjE1NzQ6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBjbGFpbSBkZXZpY2U6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE1NzU6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9jb3JlO1xcbjE1NzY6XFx0XFx0fVxcbjE1Nzc6XFx0XFxuMTU3ODpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFxcXCJwY2kgcHJvYmUgJTA0eDolMDR4ICUwNHg6JTA0eFxcXFxuXFxcIixcXG4xNTc5OlxcdFxcdFxcdCAgIHBkZXYtXFx1MDAzZXZlbmRvciwgcGRldi1cXHUwMDNlZGV2aWNlLFxcbjE1ODA6XFx0XFx0XFx0ICAgcGRldi1cXHUwMDNlc3Vic3lzdGVtX3ZlbmRvciwgcGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZSk7XFxuMTU4MTpcXHRcXG4xNTgyOlxcdFxcdGFiLVxcdTAwM2VpZC52ZW5kb3IgPSBwZGV2LVxcdTAwM2V2ZW5kb3I7XFxuMTU4MzpcXHRcXHRhYi1cXHUwMDNlaWQuZGV2aWNlID0gcGRldi1cXHUwMDNlZGV2aWNlO1xcbjE1ODQ6XFx0XFx0YWItXFx1MDAzZWlkLnN1YnN5c3RlbV92ZW5kb3IgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xcbjE1ODU6XFx0XFx0YWItXFx1MDAzZWlkLnN1YnN5c3RlbV9kZXZpY2UgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xcbjE1ODY6XFx0XFxuMTU4NzpcXHRcXHRkZXZpY2VfaWQgPSBhdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkocGNpX2Rldik7XFxuMTU4ODpcXHRcXHRpZiAoZGV2aWNlX2lkIFxcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xcbjE1ODk6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgZGV2aWNlIGZhbWlseSBpZFxcXFxuXFxcIik7XFxuMTU5MDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjE1OTE6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjE1OTI6XFx0XFx0fVxcbjE1OTM6XFx0XFxuMTU5NDpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1BDSSwgXFxcIlBDSSBkZXZpY2UgZmFtaWx5IGlkOiAlZFxcXFxuXFxcIiwgZGV2aWNlX2lkKTtcXG4xNTk1OlxcdFxcbjE1OTY6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFxcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZW9wcztcXG4xNTk3OlxcdFxcdGFiX3BjaS1cXHUwMDNlcmVnX2Jhc2UgPSBhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZXJlZ19iYXNlO1xcbjE1OTg6XFx0XFxuMTU5OTpcXHRcXHQvKiBDYWxsIGRldmljZSBzcGVjaWZpYyBwcm9iZS4gVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCBjYW5cXG4xNjAwOlxcdFxcdCAqIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55IG9wcyBpbiBmdXR1cmVcXG4xNjAxOlxcdFxcdCAqIHByb2JlIGlzIHZhbGlkYXRlZCBmb3IgTlVMTCBkdXJpbmcgcmVnaXN0cmF0aW9uLlxcbjE2MDI6XFx0XFx0ICovXFxuMTYwMzpcXHRcXHRyZXQgPSBhYl9wY2ktXFx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVxcdTAwM2Vwcm9iZShwZGV2LCBwY2lfZGV2KTtcXG4xNjA0OlxcdFxcdGlmIChyZXQpIHtcXG4xNjA1OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcHJvYmUgZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjA2OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xNjA3OlxcdFxcdH1cXG4xNjA4OlxcdFxcbjE2MDk6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9tc2lfYWxsb2MoYWJfcGNpKTtcXG4xNjEwOlxcdFxcdGlmIChyZXQpIHtcXG4xNjExOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2MgbXNpOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjEyOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xNjEzOlxcdFxcdH1cXG4xNjE0OlxcdFxcbjE2MTU6XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfcHJlX2luaXQoYWIpO1xcbjE2MTY6XFx0XFx0aWYgKHJldClcXG4xNjE3OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcXG4xNjE4OlxcdFxcbjE2MTk6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcXG4xNjIwOlxcdFxcdGlmIChyZXQpIHtcXG4xNjIxOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gc2V0IGlycSBhZmZpbml0eSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjIyOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcXG4xNjIzOlxcdFxcdH1cXG4xNjI0OlxcdFxcbjE2MjU6XFx0XFx0cmV0ID0gYXRoMTJrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xcbjE2MjY6XFx0XFx0aWYgKHJldCkge1xcbjE2Mjc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBtaGk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2Mjg6XFx0XFx0XFx0Z290byBlcnJfaXJxX2FmZmluaXR5X2NsZWFudXA7XFxuMTYyOTpcXHRcXHR9XFxuMTYzMDpcXHRcXG4xNjMxOlxcdFxcdHJldCA9IGF0aDEya19oYWxfc3JuZ19pbml0KGFiKTtcXG4xNjMyOlxcdFxcdGlmIChyZXQpXFxuMTYzMzpcXHRcXHRcXHRnb3RvIGVycl9taGlfdW5yZWdpc3RlcjtcXG4xNjM0OlxcdFxcbjE2MzU6XFx0XFx0cmV0ID0gYXRoMTJrX2NlX2FsbG9jX3BpcGVzKGFiKTtcXG4xNjM2OlxcdFxcdGlmIChyZXQpIHtcXG4xNjM3OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2Mzg6XFx0XFx0XFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xcbjE2Mzk6XFx0XFx0fVxcbjE2NDA6XFx0XFxuMTY0MTpcXHRcXHRhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XFxuMTY0MjpcXHRcXG4xNjQzOlxcdFxcdHJldCA9IGF0aDEya19wY2lfY29uZmlnX2lycShhYik7XFxuMTY0NDpcXHRcXHRpZiAocmV0KSB7XFxuMTY0NTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZyBpcnE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2NDY6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xNjQ3OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6MjMuMjA2NDI4Nzg1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTgxNzIwMjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIGF0aDEya19wY2lfcHJvYmUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYXRoMTJrX3BjaV9wcm9iZWAsIGxpbmUgMTY0MyBzaG93cyBhIGNhbGwgdG8gYGF0aDEya19wY2lfY29uZmlnX2lycWAuIEJlZm9yZSB0aGF0LCB0aGVyZSdzIHF1aXRlIGEgY2hhaW4gb2YgaW5pdGlhbGl6YXRpb25zOiBgYXRoMTJrX3BjaV9jbGFpbWAsIHRoZW4gYGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2Vwcm9iZWAsIGZvbGxvd2VkIGJ5IGBhdGgxMmtfcGNpX21zaV9hbGxvY2AsIGBhdGgxMmtfY29yZV9wcmVfaW5pdGAsIGBhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludGAsIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCwgYGF0aDEya19oYWxfc3JuZ19pbml0YCwgYGF0aDEya19jZV9hbGxvY19waXBlc2AsIGFuZCBmaW5hbGx5IGBhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZ2AuIFRoYXQncyBhIGxvdCBvZiBzZXR1cCBiZWZvcmUgZXZlbiBnZXR0aW5nIHRvIElSUSBjb25maWd1cmF0aW9uLlxuXG5UaGUgYGF0aDEya19taGlfcmVnaXN0ZXJgIGNhbGwgc3RpY2tzIG91dC4gSSByZW1lbWJlciBNSEksIE1vZGVtIEhvc3QgSW50ZXJmYWNlLCBpcyBhIFF1YWxjb21tLXNwZWNpZmljIHByb3RvY29sLiBJIHJlY2FsbCBpdCdzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUgbW9kZW0gaW4gdGhlc2UgdHlwZXMgb2YgZGV2aWNlcy4gVGhlIHF1ZXN0aW9uIG5vdyBpczogZG9lcyB0aGlzIE1ISSByZWdpc3RyYXRpb24gKnJlcXVpcmUqIHRoZSBoYXJkd2FyZSB0byBiZSBhY3R1YWxseSBwcmVzZW50IGFuZCByZXNwb25kaW5nIGJlZm9yZSBpdCByZWdpc3RlcnM/IEkgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYGF0aDEya19taGlfcmVnaXN0ZXJgIGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gSXQgY291bGQgYmUgYSBjcml0aWNhbCBkZXBlbmRlbmN5IGZvciBzdWJzZXF1ZW50IGluaXRpYWxpemF0aW9uIHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTEyMSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjMzLjM4ODE1MTYyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MDk5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX21oaV9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9MTgwPXN0YXRpYyB2b2lkIGF0aDEya19taGlfb3Bfd3JpdGVfcmVnKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0xODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzoxODc6aW50IGF0aDEya19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTE4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjMzLjQzNjg3MjA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODgxMDYxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCB0aGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBhbm90aGVyIHJlZ2lzdGVyIGZ1bmN0aW9uLCBsaWtlbHkgZGVhbGluZyB3aXRoIGluaXRpYWxpemF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGF0aDEyayBkcml2ZXIsIHByb2JhYmx5IGZvciB0aGUgTUhJIGludGVyZmFjZS5cIiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJlIGxvdy1sZXZlbCwgZmlkZGxpbmcgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlcnMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHN0dWZmIGxpa2UgcmVnaXN0ZXIgb2Zmc2V0cywgYml0ZmllbGRzLCBwb3RlbnRpYWxseSBzb21lIG1lbW9yeSBtYXBwaW5nIGlmIGl0J3MgaGFuZGxpbmcgYSBoYXJkd2FyZSByZXNvdXJjZS4gSSdtIGd1ZXNzaW5nIGl0IHdpbGwgYmUgZWl0aGVyIGEgcmVhZCBvciB3cml0ZSByZWdpc3RlciB0aGF0IGNvbmZpZ3VyZXMgc29tZSBhc3BlY3Qgb2YgdGhlIE1ISSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGFueSBjb21tZW50cyBvciBzdXJyb3VuZGluZyBjb2RlIHRvIGZpZ3VyZSBvdXQgKndoYXQqIHNwZWNpZmljYWxseSBpcyBiZWluZyByZWdpc3RlcmVkLiBJcyBpdCBhbiBpbnRlcnJ1cHQgbWFzaz8gQSBjbG9jayBjb25maWd1cmF0aW9uPyBBIERNQSBzZXR0aW5nPyBJdCdzIGFsbCBhYm91dCBjb250ZXh0IGhlcmUuIEFscmlnaHQsIGxldCdzIGdldCByZWFkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg3OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjM4LjAyNDk4MjEwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTg3OlxcdGludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXFxuIDE4ODpcXHR7XFxuIDE4OTpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gYWJfcGNpLVxcdTAwM2VhYjtcXG4gMTkwOlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmw7XFxuIDE5MTpcXHRcXHR1bnNpZ25lZCBpbnQgYm9hcmRfaWQ7XFxuIDE5MjpcXHRcXHRpbnQgcmV0O1xcbiAxOTM6XFx0XFx0Ym9vbCBkdWFsbWFjID0gZmFsc2U7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdG1oaV9jdHJsID0gbWhpX2FsbG9jX2NvbnRyb2xsZXIoKTtcXG4gMTk2OlxcdFxcdGlmICghbWhpX2N0cmwpXFxuIDE5NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XFxuIDIwMDpcXHRcXHRhYl9wY2ktXFx1MDAzZW1oaV9jdHJsID0gbWhpX2N0cmw7XFxuIDIwMTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlY250cmxfZGV2ID0gYWItXFx1MDAzZWRldjtcXG4gMjAyOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VyZWdzID0gYWItXFx1MDAzZW1lbTtcXG4gMjAzOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VyZWdfbGVuID0gYWItXFx1MDAzZW1lbV9sZW47XFxuIDIwNDpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmRkbV9zaXplID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlcmRkbV9zaXplO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKSB7XFxuIDIwNzpcXHRcXHRcXHRib2FyZF9pZCA9XFxuIDIwODpcXHRcXHRcXHRcXHRhdGgxMmtfcGNpX3JlYWQzMihhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKTtcXG4gMjA5OlxcdFxcdFxcdGJvYXJkX2lkID0gdTMyX2dldF9iaXRzKGJvYXJkX2lkLCBPVFBfQk9BUkRfSURfTUFTSyk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdFxcdGlmICghYm9hcmRfaWQgfHwgKGJvYXJkX2lkID09IE9UUF9JTlZBTElEX0JPQVJEX0lEKSkge1xcbiAyMTI6XFx0XFx0XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULFxcbiAyMTM6XFx0XFx0XFx0XFx0XFx0ICAgXFxcImZhaWxlZCB0byByZWFkIGJvYXJkIGlkXFxcXG5cXFwiKTtcXG4gMjE0OlxcdFxcdFxcdH0gZWxzZSBpZiAoYm9hcmRfaWQgXFx1MDAyNiBPVFBfVkFMSURfRFVBTE1BQ19CT0FSRF9JRF9NQVNLKSB7XFxuIDIxNTpcXHRcXHRcXHRcXHRkdWFsbWFjID0gdHJ1ZTtcXG4gMjE2OlxcdFxcdFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcXG4gMjE3OlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJkdWFsbWFjIGZ3IHNlbGVjdGVkIGZvciBib2FyZCBpZDogJXhcXFxcblxcXCIsIGJvYXJkX2lkKTtcXG4gMjE4OlxcdFxcdFxcdH1cXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0aWYgKGR1YWxtYWMpIHtcXG4gMjIyOlxcdFxcdFxcdGlmIChhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGEgXFx1MDAyNlxcdTAwMjYgYWItXFx1MDAzZWZ3LmFtc3NfZHVhbG1hY19sZW4gXFx1MDAzZSAwKSB7XFxuIDIyMzpcXHRcXHRcXHRcXHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xcbiAyMjQ6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2RhdGEgPSBhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGE7XFxuIDIyNTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfc3ogPSBhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2xlbjtcXG4gMjI2OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIyNzpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImR1YWxtYWMgZmlybXdhcmUgSUUgbm90IHByZXNlbnQgaW4gZmlybXdhcmUtTi5iaW5cXFxcblxcXCIpO1xcbiAyMjg6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMjI5OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xcbiAyMzA6XFx0XFx0XFx0fVxcbiAyMzE6XFx0XFx0fSBlbHNlIHtcXG4gMjMyOlxcdFxcdFxcdGlmIChhYi1cXHUwMDNlZncuYW1zc19kYXRhIFxcdTAwMjZcXHUwMDI2IGFiLVxcdTAwM2Vmdy5hbXNzX2xlbiBcXHUwMDNlIDApIHtcXG4gMjMzOlxcdFxcdFxcdFxcdC8qIHVzZSBNSEkgZmlybXdhcmUgZmlsZSBmcm9tIGZpcm13YXJlLU4uYmluICovXFxuIDIzNDpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfZGF0YSA9IGFiLVxcdTAwM2Vmdy5hbXNzX2RhdGE7XFxuIDIzNTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfc3ogPSBhYi1cXHUwMDNlZncuYW1zc19sZW47XFxuIDIzNjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMzc6XFx0XFx0XFx0XFx0LyogdXNlIHRoZSBvbGQgc2VwYXJhdGUgbWhpLmJpbiBNSEkgZmlybXdhcmUgZmlsZSAqL1xcbiAyMzg6XFx0XFx0XFx0XFx0YXRoMTJrX2NvcmVfY3JlYXRlX2Zpcm13YXJlX3BhdGgoYWIsIEFUSDEyS19BTVNTX0ZJTEUsXFxuIDIzOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYWJfcGNpLVxcdTAwM2VhbXNzX3BhdGgsXFxuIDI0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKGFiX3BjaS1cXHUwMDNlYW1zc19wYXRoKSk7XFxuIDI0MTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfaW1hZ2UgPSBhYl9wY2ktXFx1MDAzZWFtc3NfcGF0aDtcXG4gMjQyOlxcdFxcdFxcdH1cXG4gMjQzOlxcdFxcdH1cXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0cmV0ID0gYXRoMTJrX21oaV9nZXRfbXNpKGFiX3BjaSk7XFxuIDI0NjpcXHRcXHRpZiAocmV0KSB7XFxuIDI0NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBtc2kgZm9yIG1oaVxcXFxuXFxcIik7XFxuIDI0ODpcXHRcXHRcXHRnb3RvIGZyZWVfY29udHJvbGxlcjtcXG4gMjQ5OlxcdFxcdH1cXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0aWYgKCF0ZXN0X2JpdChBVEgxMktfUENJX0ZMQUdfTVVMVElfTVNJX1ZFQ1RPUlMsIFxcdTAwMjZhYl9wY2ktXFx1MDAzZWZsYWdzKSlcXG4gMjUyOlxcdFxcdFxcdG1oaV9jdHJsLVxcdTAwM2VpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfTk9CQUxBTkNJTkc7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2Vpb3ZhX3N0YXJ0ID0gMDtcXG4gMjU1OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2Vpb3ZhX3N0b3AgPSBhYl9wY2ktXFx1MDAzZWRtYV9tYXNrO1xcbiAyNTY6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXNibF9zaXplID0gU1pfNTEySztcXG4gMjU3OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VzZWdfbGVuID0gU1pfNTEySztcXG4gMjU4OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VmYmNfZG93bmxvYWQgPSB0cnVlO1xcbiAyNTk6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJ1bnRpbWVfZ2V0ID0gYXRoMTJrX21oaV9vcF9ydW50aW1lX2dldDtcXG4gMjYwOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VydW50aW1lX3B1dCA9IGF0aDEya19taGlfb3BfcnVudGltZV9wdXQ7XFxuIDI2MTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlc3RhdHVzX2NiID0gYXRoMTJrX21oaV9vcF9zdGF0dXNfY2I7XFxuIDI2MjpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVhZF9yZWcgPSBhdGgxMmtfbWhpX29wX3JlYWRfcmVnO1xcbiAyNjM6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXdyaXRlX3JlZyA9IGF0aDEya19taGlfb3Bfd3JpdGVfcmVnO1xcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlbWhpX2NvbmZpZyk7XFxuIDI2NjpcXHRcXHRpZiAocmV0KSB7XFxuIDI2NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHRvIG1oaSBidXMsIGVyciA9ICVkXFxcXG5cXFwiLCByZXQpO1xcbiAyNjg6XFx0XFx0XFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XFxuIDI2OTpcXHRcXHR9XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdHJldHVybiAwO1xcbiAyNzI6XFx0XFxuIDI3MzpcXHRmcmVlX2NvbnRyb2xsZXI6XFxuIDI3NDpcXHRcXHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcXG4gMjc1OlxcdFxcdGFiX3BjaS1cXHUwMDNlbWhpX2N0cmwgPSBOVUxMO1xcbiAyNzY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjc3OlxcdH1cXG4gMjc4OlxcdFxcbiAyNzk6XFx0dm9pZCBhdGgxMmtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG4gMjgwOlxcdHtcXG4gMjgxOlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmwgPSBhYl9wY2ktXFx1MDAzZW1oaV9jdHJsO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRtaGlfdW5yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsKTtcXG4gMjg0OlxcdFxcdGtmcmVlKG1oaV9jdHJsLVxcdTAwM2VpcnEpO1xcbiAyODU6XFx0XFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XFxuIDI4NjpcXHRcXHRhYl9wY2ktXFx1MDAzZW1oaV9jdHJsID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6MzguMDI1MTAxMzI5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzkxMDQ0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBhdGgxMmsgRHJpdmVyJ3MgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBgYXRoMTJrYCBkcml2ZXIgYW5kIEkndmUgaGl0IGEga2V5IHBvaW50OiBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIFRoaXMgZnVuY3Rpb24sIEkgc2VlLCBjYWxscyBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyB0aGlzIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAgaGF2ZSBhIGhhcmQgZGVwZW5kZW5jeSBvbiBwaHlzaWNhbCBoYXJkd2FyZT8gSXQgKnNob3VsZG4ndCosIGluIHByaW5jaXBsZSwgc2luY2UgaXRzIHByaW1hcnkgcm9sZSBpcyBidXMgcmVnaXN0cmF0aW9uLiBJdCdzIHN1cHBvc2VkIHRvIGFubm91bmNlIHRoZSBjb250cm9sbGVyIHRvIHRoZSBNSEkgYnVzIGluZnJhc3RydWN0dXJlLlxuXG5CdXQgSSBuZWVkIHRvIGJlIHN1cmUuIFRoaW5raW5nIGZ1cnRoZXIsIEkgc2VlIHRoYXQgYGF0aDEya19wY2lfcHJvYmVgIOKAkyB0aGUgUENJIHByb2JlIGZ1bmN0aW9uIOKAkyBjYWxscyBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIFRoZW4sIGluIHdoYXQgYXBwZWFycyB0byBiZSBhIHR5cGljYWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGl0IGNhbGxzIGEgd2hvbGUgc2xldyBvZiBvdGhlciBmdW5jdGlvbnM6IGBhdGgxMmtfaGFsX3NybmdfaW5pdGAsIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgLCBgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWdgLCBhbmQgZmluYWxseSwgYGF0aDEya19wY2lfY29uZmlnX2lycWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBwYXRoIHdpbGwgd29yayBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiByZWFsIGhhcmR3YXJlLlxuXG5UaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoZXJlIGFueXRoaW5nIGluIHRoaXMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdGhhdCB3b3VsZCBwcmV2ZW50IGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGZyb20gcnVubmluZyBpZiBpdCdzIHJ1bm5pbmcgb24gYSBzeXN0ZW0gd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlPyBJIG5lZWQgdG8ga25vdyB0aGlzLCBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gbGlrZWx5IGNvbmZpZ3VyZXMgdGhlIGludGVycnVwdCBoYW5kbGluZywgYW5kIEkgbmVlZCB0byB0ZXN0IHRoYXQgcG9ydGlvbiBvZiB0aGUgY29kZS5cblxuVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgYGF0aDEya19oYWxfc3JuZ19pbml0YC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIG5leHQgc3RlcCB0byBmb2xsb3cgdG8gYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTk5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6NDMuODY0MjEwMDIyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjA2NjkyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfaGFsX3NybmdfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmM9NzI2PXN0YXRpYyB2b2lkIGF0aDEya19oYWxfdW5yZWdpc3Rlcl9zcm5nX2xvY2tfa2V5cyhzdHJ1Y3QgYXRoMTJrX2hhbCAqaGFsKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuYy03MzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuYzo3MzQ6aW50IGF0aDEya19oYWxfc3JuZ19pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuYy03MzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMzo0My45MjAyODA4NDZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NDA5MjQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiwgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGF0aDEya19oYWxfc3JuZ19pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfaGFsX3NybmdfaW5pdGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgZGVzY3JpcHRpdmUsIHN1Z2dlc3Rpbmcgd2UncmUgZGVhbGluZyB3aXRoIGluaXRpYWxpemF0aW9uIG9mIGEgXCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcIiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgaGFyZHdhcmUgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBBdGhlcm9zIDEyayBjaGlwc2V0LCBJJ20gYXNzdW1pbmcuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IGNvbXBvbmVudHMgYXJlIGJlaW5nIGluaXRpYWxpemVkPyBXaGF0IGtpbmQgb2Ygc2VjdXJpdHkgbWVhc3VyZXMgYXJlIGltcGxlbWVudGVkLCBvciBiZWluZyBwcmVwYXJlZCBmb3I/IFdoYXQgY29udGV4dCBpcyBuZWVkZWQgZm9yIHRoaXMgaW5pdGlhbGl6YXRpb24gdG8gc3VjY2VlZD8gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzPyBBcmUgd2Ugc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgaXRzZWxmLCBjb25maWd1cmluZyByZWdpc3RlcnMsIG9yIHBlcmhhcHMgZXN0YWJsaXNoaW5nIGNvbW11bmljYXRpb24gY2hhbm5lbHMgZm9yIGVudHJvcHkgZ2F0aGVyaW5nPyBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOiByZWdpc3RlciBhY2Nlc3MsIHNlZWQgZ2VuZXJhdGlvbiwgbWF5YmUgaW50ZXJydXB0IHNldHVwIGZvciBldmVudCBoYW5kbGluZywgcGVyaGFwcyBldmVuIHRlc3RzIGZvciBiYXNpYyBmdW5jdGlvbmFsaXR5IHRvIGVuc3VyZSB0aGUgUk5HIGlzIHdvcmtpbmcgYXMgZGVzaWduZWQuIEknbGwgYmUgbG9va2luZyBjYXJlZnVsbHkgZm9yIGVycm9yIGhhbmRsaW5nLiBBIHByb3BlciBzZWN1cmUgUk5HIGlzICpjcml0aWNhbCogc28gdGhlIGRldGFpbHMgb24gdGhlIGVycm9yIHBhdGhzIHdpbGwgYmUgZXh0cmVtZWx5IHZhbHVhYmxlLiBUaGUgZmxvdyBpdHNlbGYgaXMgc29tZXRoaW5nIEknbGwgd2FudCB0byB0cmFjZS4gV2hhdCBpcyB0aGUgb3JkZXIgb2YgZXZlbnRzPyBUaGlzIGlzIGdvaW5nIHRvIGJlIGdvb2Q7IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzU5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6NDcuODY0Mzc1OTA1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzM0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzM0OlxcdGludCBhdGgxMmtfaGFsX3NybmdfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbiA3MzU6XFx0e1xcbiA3MzY6XFx0XFx0c3RydWN0IGF0aDEya19oYWwgKmhhbCA9IFxcdTAwMjZhYi1cXHUwMDNlaGFsO1xcbiA3Mzc6XFx0XFx0aW50IHJldDtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0cmV0ID0gaGFsLVxcdTAwM2VvcHMtXFx1MDAzZWNyZWF0ZV9zcm5nX2NvbmZpZyhoYWwpO1xcbiA3NDA6XFx0XFx0aWYgKHJldClcXG4gNzQxOlxcdFxcdFxcdGdvdG8gZXJyX2hhbDtcXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0aGFsLVxcdTAwM2VkZXYgPSBhYi1cXHUwMDNlZGV2O1xcbiA3NDQ6XFx0XFxuIDc0NTpcXHRcXHRyZXQgPSBhdGgxMmtfaGFsX2FsbG9jX2NvbnRfcmRwKGhhbCk7XFxuIDc0NjpcXHRcXHRpZiAocmV0KVxcbiA3NDc6XFx0XFx0XFx0Z290byBlcnJfaGFsO1xcbiA3NDg6XFx0XFxuIDc0OTpcXHRcXHRyZXQgPSBhdGgxMmtfaGFsX2FsbG9jX2NvbnRfd3JwKGhhbCk7XFxuIDc1MDpcXHRcXHRpZiAocmV0KVxcbiA3NTE6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9jb250X3JkcDtcXG4gNzUyOlxcdFxcbiA3NTM6XFx0XFx0YXRoMTJrX2hhbF9yZWdpc3Rlcl9zcm5nX2xvY2tfa2V5cyhoYWwpO1xcbiA3NTQ6XFx0XFxuIDc1NTpcXHRcXHRyZXR1cm4gMDtcXG4gNzU2OlxcdFxcbiA3NTc6XFx0ZXJyX2ZyZWVfY29udF9yZHA6XFxuIDc1ODpcXHRcXHRhdGgxMmtfaGFsX2ZyZWVfY29udF9yZHAoaGFsKTtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0ZXJyX2hhbDpcXG4gNzYxOlxcdFxcdHJldHVybiByZXQ7XFxuIDc2MjpcXHR9XFxuIDc2MzpcXHRcXG4gNzY0OlxcdHZvaWQgYXRoMTJrX2hhbF9zcm5nX2RlaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbiA3NjU6XFx0e1xcbiA3NjY6XFx0XFx0c3RydWN0IGF0aDEya19oYWwgKmhhbCA9IFxcdTAwMjZhYi1cXHUwMDNlaGFsO1xcbiA3Njc6XFx0XFxuIDc2ODpcXHRcXHRhdGgxMmtfaGFsX3VucmVnaXN0ZXJfc3JuZ19sb2NrX2tleXMoaGFsKTtcXG4gNzY5OlxcdFxcdGF0aDEya19oYWxfZnJlZV9jb250X3JkcChoYWwpO1xcbiA3NzA6XFx0XFx0YXRoMTJrX2hhbF9mcmVlX2NvbnRfd3JwKGhhbCk7XFxuIDc3MTpcXHRcXHRrZnJlZShoYWwtXFx1MDAzZXNybmdfY29uZmlnKTtcXG4gNzcyOlxcdFxcdGhhbC1cXHUwMDNlc3JuZ19jb25maWcgPSBOVUxMO1xcbiA3NzM6XFx0fVxcbiA3NzQ6XFx0XFxuIDc3NTpcXHR2b2lkIGF0aDEya19oYWxfZHVtcF9zcm5nX3N0YXRzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDc3NjpcXHR7XFxuIDc3NzpcXHRcXHRzdHJ1Y3QgaGFsX3NybmcgKnNybmc7XFxuIDc3ODpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwO1xcbiA3Nzk6XFx0XFx0c3RydWN0IGF0aDEya19jZV9waXBlICpjZV9waXBlO1xcbiA3ODA6XFx0XFx0aW50IGk7XFxuIDc4MTpcXHRcXG4gNzgyOlxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJMYXN0IGludGVycnVwdCByZWNlaXZlZCBmb3IgZWFjaCBDRTpcXFxcblxcXCIpO1xcbiA3ODM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZWNlX2NvdW50OyBpKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6NDcuODY0NDc1MzE1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjY4MzgyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTWVtb3J5IGFuZCBMb2NraW5nOiBBIFF1aWNrIENoZWNrLUluKipcblxuUmlnaHQsIHNvIHRoaXMgcGllY2Ugb2YgY29kZSBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2luZyBsb2NrIGtleXMuIFByZXR0eSBzdHJhaWdodGZvcndhcmQgYXQgZmFjZSB2YWx1ZS4gTm8gY29tcGxleCBhbGdvcml0aG1zIG9yIGludHJpY2F0ZSBkYXRhIHN0cnVjdHVyZXMgaGVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBmb2N1c2luZyBvbiB0aGUgYmFzaWNzOiBzZWN1cmluZyB0aGUgbmVjZXNzYXJ5IG1lbW9yeSByZXNvdXJjZXMgYW5kIGVuc3VyaW5nIGNvbmN1cnJlbnQgYWNjZXNzIGlzIHByb3Blcmx5IGhhbmRsZWQuIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggbG93LWxldmVsIGtlcm5lbCBvcGVyYXRpb25zLCBsaWtlbHkgd2l0aGluIGEgZHJpdmVyIGNvbnRleHQuXG5cbkhvd2V2ZXIsIEknbSBhbHJlYWR5IHN0YXJ0aW5nIHRvIHByb2JlIGEgYml0IGRlZXBlci4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgYGF0aDEya19jZV9hbGxvY19waXBlc2AuIFdoeSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uPyBXaGF0IGltcGxpY2F0aW9ucyBkb2VzIHRoYXQgZnVuY3Rpb24gY2FsbCBoYXZlPyBEb2VzIGl0IGRlYWwgd2l0aCBhbnl0aGluZyByZWxhdGVkIHRvIHNwZWNpZmljIHJlc291cmNlcz8gSSB3YW50IHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHRoYXQgcGllY2Ugb2YgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgcGlwZSBhbGxvY2F0aW9uIHBsYXlzIGEgcm9sZSBpbiB0aGUgYnJvYWRlciBzeXN0ZW0gdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgYXJlYXMgcmVxdWlyaW5nIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgdGhpbmtpbmcsIHNvIEknbGwgcmV2aWV3IGFueSByZWxhdGVkIGRvY3VtZW50YXRpb24gYmVmb3JlIG1vdmluZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4NTcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjUxLjc5MTMxNjEyM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMTU4ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2NlX2FsbG9jX3BpcGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NlLmM9NjczPXZvaWQgYXRoMTJrX2NlX2ZyZWVfcGlwZXMoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY2UuYy03MjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jZS5jOjcyMjppbnQgYXRoMTJrX2NlX2FsbG9jX3BpcGVzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jZS5jLTcyMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjUxLjgzOTUzNjAyN1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzQ0NjkwODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGF0aDEya19jZV9hbGxvY19waXBlc2A6XG5cbioqRGVjb2RpbmcgYGF0aDEya19jZV9hbGxvY19waXBlc2AqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGlzc2VjdCB0aGlzIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGBhdGgxMmtgIGRyaXZlciAobGlrZWx5IGRlYWxpbmcgd2l0aCBBdGhlcm9zL1F1YWxjb21tIHdpcmVsZXNzIGNoaXBzZXRzKSwgdGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gYWxsb2NhdGluZyBjb21tdW5pY2F0aW9uIHBpcGVzIG9yIGNoYW5uZWxzIHdpdGhpbiB0aGUgY2hpcCdzIGhhcmR3YXJlIGNvbnRleHQuIFRoZSBcIkNFXCIgcHJvYmFibHkgc3RhbmRzIGZvciBcIkNvbXBsZXRpb24gRW5naW5lXCIgb3IgXCJDb21tdW5pY2F0aW9uIEVuZ2luZVwiLCBhIGNydWNpYWwgY29tcG9uZW50IGZvciBETUEgb3BlcmF0aW9ucyBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIHdpdGhpbiB0aGUgd2lyZWxlc3MgY29udHJvbGxlci5cblxuTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGhhbmRsaW5nIHRoZSByZWdpc3RyYXRpb24gYW5kIHNldHVwIG9mIHRoZXNlIHBpcGVzLCBwZXJoYXBzIGZvciBkaWZmZXJlbnQgdHJhZmZpYyBjbGFzc2VzIChWb0lQLCB2aWRlbywgYmVzdCBlZmZvcnQsIGV0Yy4pLiBJdCdzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBvYnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSByZXNvdXJjZXMg4oCTIGRlc2NyaXB0b3JzLCBidWZmZXJzLCBpbnRlcnJ1cHQgdmVjdG9ycywgYW5kIHRoZSBsaWtlIOKAkyByZXF1aXJlZCBmb3IgdGhlc2UgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gSSdkIGV4cGVjdCB0byBzZWUgc29tZSBlcnJvciBjaGVja2luZywgcmVzb3VyY2UgYWxsb2NhdGlvbiBmcm9tIHRoZSBkZXZpY2UncyBjb250ZXh0IChsaWtlbHkgYSBgc3RydWN0IGF0aDEya2ApLCBhbmQgaW5pdGlhbGl6YXRpb24gb2YgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHRoZSBwaXBlIHN0YXRlLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGhpbnRzIGFib3V0IHRoZSBwaXBlIGFsbG9jYXRpb24gc3RyYXRlZ3kuIElzIGl0IHN0YXRpYywgZHluYW1pYywgb3IgYSBoeWJyaWQgYXBwcm9hY2g/IEFyZSB0aGVyZSBsaW1pdHMgb24gdGhlIG51bWJlciBvZiBwaXBlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQ/IERvZXMgaXQgdGFrZSBpbnRvIGFjY291bnQgcG93ZXIgbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyB0byBlZmZpY2llbnRseSBtYW5hZ2UgdGhlIHJlc291cmNlcz8gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIGxvb2sgZm9yIGFyZ3VtZW50cyB0aGF0IHJlcHJlc2VudCB0aGluZ3MgbGlrZTogZGV2aWNlIGNvbnRleHQsIHBpcGUgaWRlbnRpZmllciwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIChlLmcuIHF1ZXVlIHByaW9yaXR5LCBidWZmZXIgc2l6ZXMsIGludGVycnVwdCBzZXR0aW5ncyksIGFuZCBwZXJoYXBzIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucyBvciBjb21wbGV0aW9uIGhhbmRsZXJzLlxuXG5VbHRpbWF0ZWx5LCBJIGV4cGVjdCB0byBzZWUgdGhpcyBmdW5jdGlvbiBhcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBtYW5hZ2luZyB0aGUgZmxvdyBvZiBkYXRhIHRvIGFuZCBmcm9tIHRoZSB3aXJlbGVzcyBoYXJkd2FyZS4gVW5kZXJzdGFuZGluZyB0aGUgZGV0YWlscyBvZiBwaXBlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgaXMgZnVuZGFtZW50YWwgZm9yIGVmZmljaWVudCB3aXJlbGVzcyBvcGVyYXRpb24sIHRocm91Z2hwdXQsIGFuZCBRb1MuIEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBhdGgxMmtgIGRyaXZlciBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMxOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA0OjAxLjE4NDIzMDgwNloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyMjpcXHRpbnQgYXRoMTJrX2NlX2FsbG9jX3BpcGVzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDcyMzpcXHR7XFxuIDcyNDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2NlX3BpcGUgKnBpcGU7XFxuIDcyNTpcXHRcXHRpbnQgaTtcXG4gNzI2OlxcdFxcdGludCByZXQ7XFxuIDcyNzpcXHRcXHRjb25zdCBzdHJ1Y3QgY2VfYXR0ciAqYXR0cjtcXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmFiLVxcdTAwM2VjZS5jZV9sb2NrKTtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZWNlX2NvdW50OyBpKyspIHtcXG4gNzMyOlxcdFxcdFxcdGF0dHIgPSBcXHUwMDI2YWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlaG9zdF9jZV9jb25maWdbaV07XFxuIDczMzpcXHRcXHRcXHRwaXBlID0gXFx1MDAyNmFiLVxcdTAwM2VjZS5jZV9waXBlW2ldO1xcbiA3MzQ6XFx0XFx0XFx0cGlwZS1cXHUwMDNlcGlwZV9udW0gPSBpO1xcbiA3MzU6XFx0XFx0XFx0cGlwZS1cXHUwMDNlYWIgPSBhYjtcXG4gNzM2OlxcdFxcdFxcdHBpcGUtXFx1MDAzZWJ1Zl9zeiA9IGF0dHItXFx1MDAzZXNyY19zel9tYXg7XFxuIDczNzpcXHRcXG4gNzM4OlxcdFxcdFxcdHJldCA9IGF0aDEya19jZV9hbGxvY19waXBlKGFiLCBpKTtcXG4gNzM5OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gNzQwOlxcdFxcdFxcdFxcdC8qIEZyZWUgYW55IHBhcnRpYWwgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uICovXFxuIDc0MTpcXHRcXHRcXHRcXHRhdGgxMmtfY2VfZnJlZV9waXBlcyhhYik7XFxuIDc0MjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3NDM6XFx0XFx0XFx0fVxcbiA3NDQ6XFx0XFx0fVxcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRyZXR1cm4gMDtcXG4gNzQ3OlxcdH1cXG4gNzQ4OlxcdFxcbiA3NDk6XFx0aW50IGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgY2VfaWQpXFxuIDc1MDpcXHR7XFxuIDc1MTpcXHRcXHRpZiAoY2VfaWQgXFx1MDAzZT0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlY2VfY291bnQpXFxuIDc1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzUzOlxcdFxcbiA3NTQ6XFx0XFx0cmV0dXJuIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZWhvc3RfY2VfY29uZmlnW2NlX2lkXS5mbGFncztcXG4gNzU1OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MDEuMTg0MzMzMzQ2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzQ3MzM3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTWVtb3J5IEFsbG9jYXRpb24gQ29uY2VybnMgYW5kIGEgU3BlY2lmaWMgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGNvbnRleHQgaGVyZSBpcyBzaW1wbGU6IHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBtZW1vcnkgYWxsb2NhdGlvbiBvcGVyYXRpb24sIHByZXN1bWFibHkgcmVsYXRlZCB0byB3aXJlbGVzcyBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIFRoYXQgZmlyc3QgdGhvdWdodCwgXCJJdCBqdXN0IGFsbG9jYXRlcyBtZW1vcnksXCIgZmVlbHMgYWxtb3N0IGRpc21pc3NpdmUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiBpdCBpc24ndCBpbXBvcnRhbnQuIE1lbW9yeSBhbGxvY2F0aW9uIGlzIGZ1bmRhbWVudGFsLiBXZSBuZWVkIHRvIGJlIHN1cmUgaXQncyBkb25lIGNvcnJlY3RseSwgc2FmZWx5LCBhbmQgZWZmaWNpZW50bHkuIE5vIGxlYWtzLCBubyBmcmFnbWVudGF0aW9uLCBhbmQgcHJlZmVyYWJseSwgYW4gb3B0aW1pemVkIGFwcHJvYWNoIGZvciBvdXIgc3BlY2lmaWMgaGFyZHdhcmUuIFdlIHdvdWxkbid0IHdhbnQgdG8gZ2V0IG91ciBzeXN0ZW1zIGludG8gYW4gdW5zdGFibGUgc3RhdGUgZnJvbSBhIG1lbW9yeSBpc3N1ZS5cblxuQnV0IHRoZW4gbXkgbWluZCBqdW1wcyB0byBhIHNwZWNpZmljIGZ1bmN0aW9uOiBgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWdgLiBXaHkgZG9lcyB0aGF0IGNvbWUgdG8gbWluZD8gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYXMgYSBjcml0aWNhbCByb2xlIHRvIHBsYXkgaW4gdGhlIGRyaXZlcidzIG9wZXJhdGlvbi4gUGVyaGFwcyB0aGF0IGZ1bmN0aW9uIGNvbnRhaW5zIG9uZSBvZiBvdXIgYmlnZ2VzdCBib3R0bGVuZWNrcy4gRG9lcyBpdCBpbnZvbHZlIHNvbWUgY3JpdGljYWwgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGNvbW1hbmQgYW5kIGV2ZW50IGRhdGE/IE1heWJlIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhhdCBmdW5jdGlvbiwgdGhhdCB3ZSBhcmUgbWlzc2luZy4gRG9lcyBpdCByZWxhdGUgdG8gdGhlIFFNSSBpbnRlcmZhY2UgYW5kIHNvbWUgY3J1Y2lhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZpcm13YXJlPyBUaGlzIHNwZWNpZmljIGZ1bmN0aW9uIGhhcyBwcm9iYWJseSBjb21lIHRvIG1pbmQgYmVjYXVzZSBJIHJlY2FsbCBoYXZpbmcgdHJvdWJsZSB3aXRoIGl0IGluIHRoZSBwYXN0LiBJdCBtYXkgYWxzbyBwcm92aWRlIHNvbWUgbW9yZSBpbnNpZ2h0IGludG8gdGhlIHByb2JsZW0gYXQgaGFuZC4gV2UgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHdoYXQgYGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnYCBpcyBkb2luZyBhbmQgc2VlIGhvdyBpdCBmaXRzIGluIHRvIHRoZSB3aWRlciBzY29wZSBvZiB0aGUgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTMxNCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MDUuNjU5MDcwNzE0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI1OTg5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz02NDM9c3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNjk4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6Njk5OnN0YXRpYyB2b2lkIGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy03MDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTQ4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE2NDE6XFx0YXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWcoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MDYuOTg1MDY1ODY0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NjMyNDIyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZ2AgZnVuY3Rpb24uIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIFFNSSBjb25maWd1cmF0aW9uIGFuZCBsaWtlbHkgZXJyb3IgaGFuZGxpbmcgZm9yIHRoZSBQQ0kgaW50ZXJmYWNlLiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIENFIHByb2JhYmx5IHJlZmVycyB0byBcIkNvbW1hbmQgRW5naW5lXCIgb3Igc29tZXRoaW5nIHNpbWlsYXIgd2l0aGluIHRoZSBRdWFsY29tbSBjaGlwc2V0IGJlaW5nIHVzZWQgaGVyZS4gR2l2ZW4gdGhhdCBJIGFtIHdlbGwgdmVyc2VkIGluIHRoaXMgZmllbGQsIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGNvZGUsIGFsdGhvdWdoIHBvdGVudGlhbGx5IGRlbnNlIHdpdGggc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGVzIGFuZCBiaXQgbWFuaXB1bGF0aW9uLiBJdCdzIGtleSB0byBpZGVudGlmeSBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gV2hhdCBwb3dlciBzdGF0ZXMgZG9lcyBpdCBhc3N1bWUgdGhlIFBDSSBkZXZpY2UgaXMgaW4gYXQgdGhpcyBwb2ludD8gRG9lcyBpdCB1c2UgZGlyZWN0IHJlZ2lzdGVyIGFjY2VzcyBvciBkb2VzIGl0IGFic3RyYWN0IGFueSBvZiB0aGUgaGFyZHdhcmUgZGV0YWlscyB3aXRoIGFuIEFQST8gRG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIGNvbmZpZ3VyZSB0aGUgY29tbWFuZCBlbmdpbmUgZm9yIGEgc3BlY2lmaWMgZmlybXdhcmUgdmVyc2lvbiBvciBkZXZpY2UgcmV2aXNpb24/IFRoZXNlIGFyZSBpbXBvcnRhbnQgcXVlc3Rpb25zLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IGFueSBlcnJvciBoYW5kbGluZyAtIGFyZSB0aGVyZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBiZWluZyBjaGVja2VkLCBvciBkb2VzIGl0IHJlbHkgb24gZ2VuZXJpYyBlcnJvciBoYW5kbGluZyByb3V0aW5lcywgSSdsbCBuZWVkIHRvIHdhdGNoIG91dCBmb3IgdGhhdC4gSSBob3BlIGl0J3Mgd2VsbC1jb21tZW50ZWQgYmVjYXVzZSBnb29kIFFNSSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhcmUgaGFyZCB0byB3cml0ZSBpbiBhIHdheSB3aGljaCBpcyBzaW11bHRhbmVvdXNseSBwZXJmb3JtYW50IGFuZCBtYWludGFpbmFibGUuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCBpbiwgZXNwZWNpYWxseSBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGNvbmZpZ3VyYXRpb24gb3IgZGV2aWNlLXNwZWNpZmljIHBhcmFtZXRlcnMuIExldCdzIHNlZSBob3cgdGhpcyBwbGF5cyBvdXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwMjMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNDoxMy41NDgzMTEyNzJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk5OlxcdHN0YXRpYyB2b2lkIGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDcwMDpcXHR7XFxuIDcwMTpcXHRcXHRzdHJ1Y3QgYXRoMTJrX3FtaV9jZV9jZmcgKmNmZyA9IFxcdTAwMjZhYi1cXHUwMDNlcW1pLmNlX2NmZztcXG4gNzAyOlxcdFxcbiA3MDM6XFx0XFx0c3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSA9IGF0aDEya19wY2lfcHJpdihhYik7XFxuIDcwNDpcXHRcXHRzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gYWJfcGNpLVxcdTAwM2VwZGV2LVxcdTAwM2VidXM7XFxuIDcwNTpcXHRcXG4gNzA2OlxcdFxcdGNmZy1cXHUwMDNldGd0X2NlID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNldGFyZ2V0X2NlX2NvbmZpZztcXG4gNzA3OlxcdFxcdGNmZy1cXHUwMDNldGd0X2NlX2xlbiA9IGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZXRhcmdldF9jZV9jb3VudDtcXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0Y2ZnLVxcdTAwM2VzdmNfdG9fY2VfbWFwID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlc3ZjX3RvX2NlX21hcDtcXG4gNzEwOlxcdFxcdGNmZy1cXHUwMDNlc3ZjX3RvX2NlX21hcF9sZW4gPSBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VzdmNfdG9fY2VfbWFwX2xlbjtcXG4gNzExOlxcdFxcdGFiLVxcdTAwM2VxbWkuc2VydmljZV9pbnNfaWQgPSBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VxbWlfc2VydmljZV9pbnNfaWQ7XFxuIDcxMjpcXHRcXG4gNzEzOlxcdFxcdGlmIChhdGgxMmtfZndfZmVhdHVyZV9zdXBwb3J0ZWQoYWIsIEFUSDEyS19GV19GRUFUVVJFX01VTFRJX1FSVFJfSUQpKSB7XFxuIDcxNDpcXHRcXHRcXHRhYl9wY2ktXFx1MDAzZXFtaV9pbnN0YW5jZSA9XFxuIDcxNTpcXHRcXHRcXHRcXHR1MzJfZW5jb2RlX2JpdHMocGNpX2RvbWFpbl9ucihidXMpLCBET01BSU5fTlVNQkVSX01BU0spIHxcXG4gNzE2OlxcdFxcdFxcdFxcdHUzMl9lbmNvZGVfYml0cyhidXMtXFx1MDAzZW51bWJlciwgQlVTX05VTUJFUl9NQVNLKTtcXG4gNzE3OlxcdFxcdFxcdGFiLVxcdTAwM2VxbWkuc2VydmljZV9pbnNfaWQgKz0gYWJfcGNpLVxcdTAwM2VxbWlfaW5zdGFuY2U7XFxuIDcxODpcXHRcXHR9XFxuIDcxOTpcXHR9XFxuIDcyMDpcXHRcXG4gNzIxOlxcdHN0YXRpYyB2b2lkIGF0aDEya19wY2lfY2VfaXJxc19lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gNzIyOlxcdHtcXG4gNzIzOlxcdFxcdGludCBpO1xcbiA3MjQ6XFx0XFxuIDcyNTpcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX0NFX0lSUV9FTkFCTEVELCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuIDcyNjpcXHRcXG4gNzI3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VjZV9jb3VudDsgaSsrKSB7XFxuIDcyODpcXHRcXHRcXHRpZiAoYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXFxuIDcyOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzMwOlxcdFxcdFxcdGF0aDEya19wY2lfY2VfaXJxX2VuYWJsZShhYiwgaSk7XFxuIDczMTpcXHRcXHR9XFxuIDczMjpcXHR9XFxuIDczMzpcXHRcXG4gNzM0OlxcdHN0YXRpYyB2b2lkIGF0aDEya19wY2lfbXNpX2NvbmZpZyhzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLCBib29sIGVuYWJsZSlcXG4gNzM1OlxcdHtcXG4gNzM2OlxcdFxcdHN0cnVjdCBwY2lfZGV2ICpkZXYgPSBhYl9wY2ktXFx1MDAzZXBkZXY7XFxuIDczNzpcXHRcXHR1MTYgY29udHJvbDtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0cGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBkZXYtXFx1MDAzZW1zaV9jYXAgKyBQQ0lfTVNJX0ZMQUdTLCBcXHUwMDI2Y29udHJvbCk7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdGlmIChlbmFibGUpXFxuIDc0MjpcXHRcXHRcXHRjb250cm9sIHw9IFBDSV9NU0lfRkxBR1NfRU5BQkxFO1xcbiA3NDM6XFx0XFx0ZWxzZVxcbiA3NDQ6XFx0XFx0XFx0Y29udHJvbCBcXHUwMDI2PSB+UENJX01TSV9GTEFHU19FTkFCTEU7XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGRldi1cXHUwMDNlbXNpX2NhcCArIFBDSV9NU0lfRkxBR1MsIGNvbnRyb2wpO1xcbiA3NDc6XFx0fVxcbiA3NDg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA0OjEzLjU0ODQzMjM2MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTU5MTQyNjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkFuYWx5emluZyB0aGUgYGF0aDEya19wY2lgIERyaXZlciBWdWxuZXJhYmlsaXR5IFJvdXRlKipcblxuT2theSwgc28gdGhlIHBhdGggdG8gZXhwbG9pdCB0aGUgYGF0aDEya19wY2lgIGRyaXZlciB2aWEgYW4gaW50ZXJydXB0IHJlcXVlc3QsIHNwZWNpZmljYWxseSB0aGUgYGF0aDEya19wY2lfY29uZmlnX2lycWAgZnVuY3Rpb24sIHNlZW1zIGhpZ2hseSBwbGF1c2libGUgaWYgU3l6a2FsbGVyIGNhbiBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIGRldmljZSBJRC4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGJlY29tZXMgd2hldGhlciB0aGUgcHJvYmUgZnVuY3Rpb24sIGBhdGgxMmtfcGNpX3Byb2JlYCwgcGVyZm9ybXMgYW55IGhhcmR3YXJlIHJlZ2lzdGVyIHJlYWRzIG9yIG90aGVyIGNoZWNrcyB0aGF0IHdvdWxkIGZhaWwgaWYgaXQncyBub3QgYWN0dWFsbHkgYSAqcmVhbCogZGV2aWNlLiBJZiBpdCdzIHRvbyBhZ2dyZXNzaXZlIGluIGl0cyB2YWxpZGF0aW9uLCB3ZSB3b24ndCBnZXQgZmFyLiBSaWdodCwgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMgSSBzaG91bGQgcHJvYmFibHkgaW52ZXN0aWdhdGUgYGF0aDEya19wY2lfY2xhaW1gLiBJdCdsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRldmljZSBjbGFpbWluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgc2luY2UgdGhhdCdzIGEgY29tbW9uIHBvaW50IG9mIGZhaWx1cmUgZm9yIHRoaXMga2luZCBvZiBhdHRhY2suIEl0J2xsIGFsc28gbGlrZWx5IGdpdmUgbWUgbW9yZSBjb250ZXh0IGZvciB3aGF0IGhhcHBlbnMgYmVmb3JlIGFuZCBwb3RlbnRpYWxseSBhZnRlciB0aGUgcHJvYmluZyBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMyMSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MjEuNTA3NTc3MzY0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTg1Nzk4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX2NsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz04MjE9c3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19tc2lfZGF0YShzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy04MzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo4NDA6c3RhdGljIGludCBhdGgxMmtfcGNpX2NsYWltKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksIHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtODQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTU0OD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTcyOlxcdHJldCA9IGF0aDEya19wY2lfY2xhaW0oYWJfcGNpLCBwZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NzMtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNDoyMS41NTk0NDIzNjdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0MTc0NTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgYGF0aDEya19wY2lfY2xhaW1gIGZ1bmN0aW9uLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGF0aDEya19wY2lfY2xhaW1gKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBhdGgxMmtfcGNpX2NsYWltYC4gSW1tZWRpYXRlbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyAqZG9pbmcqIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhlIGF0aDEyayBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIFBDSS4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaXQncyByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY2xhaW1pbmcgb2YgdGhlIFBDSSBkZXZpY2UsIHdoaWNoIGFsaWducyB3aXRoIHN0YW5kYXJkIFBDSSBkcml2ZXIgb3BlcmF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgY2hlY2tlZCwgYW55IGluaXRpYWxpemF0aW9uIHN0ZXBzLCBhbmQgdGhlIGdlbmVyYWwgZmxvdyBvZiB3aGF0IHRoaXMgY2xhaW0gZG9lcyBhbmQgZW5zdXJlcy5cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogcmVzb3VyY2UgYWxsb2NhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGNoZWNrcyBmb3IgZXhpc3RpbmcgZGV2aWNlIGNsYWltcyAoY3J1Y2lhbCB0byBhdm9pZCBjb25mbGljdHMpLCBhbmQgcG90ZW50aWFsbHkgYW55IGRldmljZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiB0aGF0J3MgcGVyZm9ybWVkIGhlcmUgYmVmb3JlIGhhbmRpbmcgb2ZmIHRvIHRoZSBjb3JlIGRyaXZlci4gSSBleHBlY3QgYSBjYXJlZnVsIGRhbmNlIHRvIGVuc3VyZSB0aGUgaGFyZHdhcmUgaXMgYWNjZXNzaWJsZSBhbmQgcmVhZHkgdG8gZ28gYmVmb3JlIHdlIHN0YXJ0IGFjdHVhbGx5IHVzaW5nIGl0IGZvciB3aXJlbGVzcyBjb21tdW5pY2F0aW9uLiBMZXQncyBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBob2xkIHRydWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDEwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MjUuNTAxMTkxNTg2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg0MDpcXHRzdGF0aWMgaW50IGF0aDEya19wY2lfY2xhaW0oc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIDg0MTpcXHR7XFxuIDg0MjpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gYWJfcGNpLVxcdTAwM2VhYjtcXG4gODQzOlxcdFxcdHUxNiBkZXZpY2VfaWQ7XFxuIDg0NDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gODQ1OlxcdFxcbiA4NDY6XFx0XFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0RFVklDRV9JRCwgXFx1MDAyNmRldmljZV9pZCk7XFxuIDg0NzpcXHRcXHRpZiAoZGV2aWNlX2lkICE9IGFiX3BjaS1cXHUwMDNlZGV2X2lkKSAge1xcbiA4NDg6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcInBjaSBkZXZpY2UgaWQgbWlzbWF0Y2g6IDB4JXggMHgleFxcXFxuXFxcIixcXG4gODQ5OlxcdFxcdFxcdFxcdCAgIGRldmljZV9pZCwgYWJfcGNpLVxcdTAwM2VkZXZfaWQpO1xcbiA4NTA6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gODUxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA4NTI6XFx0XFx0fVxcbiA4NTM6XFx0XFxuIDg1NDpcXHRcXHRyZXQgPSBwY2lfYXNzaWduX3Jlc291cmNlKHBkZXYsIEFUSDEyS19QQ0lfQkFSX05VTSk7XFxuIDg1NTpcXHRcXHRpZiAocmV0KSB7XFxuIDg1NjpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFzc2lnbiBwY2kgcmVzb3VyY2U6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiA4NTc6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDg1ODpcXHRcXHR9XFxuIDg1OTpcXHRcXG4gODYwOlxcdFxcdHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbiA4NjE6XFx0XFx0aWYgKHJldCkge1xcbiA4NjI6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBlbmFibGUgcGNpIGRldmljZTogJWRcXFxcblxcXCIsIHJldCk7XFxuIDg2MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODY0OlxcdFxcdH1cXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0cmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIEFUSDEyS19QQ0lfQkFSX05VTSwgXFxcImF0aDEya19wY2lcXFwiKTtcXG4gODY3OlxcdFxcdGlmIChyZXQpIHtcXG4gODY4OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVxdWVzdCBwY2kgcmVnaW9uOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gODY5OlxcdFxcdFxcdGdvdG8gZGlzYWJsZV9kZXZpY2U7XFxuIDg3MDpcXHRcXHR9XFxuIDg3MTpcXHRcXG4gODcyOlxcdFxcdGFiX3BjaS1cXHUwMDNlZG1hX21hc2sgPSBETUFfQklUX01BU0soQVRIMTJLX1BDSV9ETUFfTUFTSyk7XFxuIDg3MzpcXHRcXHRkbWFfc2V0X21hc2soXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgYWJfcGNpLVxcdTAwM2VkbWFfbWFzayk7XFxuIDg3NDpcXHRcXHRkbWFfc2V0X2NvaGVyZW50X21hc2soXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XFxuIDg3NTpcXHRcXG4gODc2OlxcdFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiA4Nzc6XFx0XFxuIDg3ODpcXHRcXHRhYi1cXHUwMDNlbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgQVRIMTJLX1BDSV9CQVJfTlVNKTtcXG4gODc5OlxcdFxcdGFiLVxcdTAwM2VtZW0gPSBwY2lfaW9tYXAocGRldiwgQVRIMTJLX1BDSV9CQVJfTlVNLCAwKTtcXG4gODgwOlxcdFxcdGlmICghYWItXFx1MDAzZW1lbSkge1xcbiA4ODE6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBtYXAgcGNpIGJhciAlZFxcXFxuXFxcIiwgQVRIMTJLX1BDSV9CQVJfTlVNKTtcXG4gODgyOlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDg4MzpcXHRcXHRcXHRnb3RvIHJlbGVhc2VfcmVnaW9uO1xcbiA4ODQ6XFx0XFx0fVxcbiA4ODU6XFx0XFxuIDg4NjpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFxcXCJib290IHBjaV9tZW0gMHglcFxcXFxuXFxcIiwgYWItXFx1MDAzZW1lbSk7XFxuIDg4NzpcXHRcXHRyZXR1cm4gMDtcXG4gODg4OlxcdFxcbiA4ODk6XFx0cmVsZWFzZV9yZWdpb246XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA0OjI1LjUwMTMwOTkyNloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTE1MjIxNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBSZXNvdXJjZSBBbGxvY2F0aW9uIGFuZCBQcm9iZSBGdW5jdGlvbiBFeGFtaW5hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBiYXNpY2FsbHkgZG9pbmcgdGhlIHVzdWFsIFBDSSByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBtYXBwaW5nIOKAkyBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnksIHJpZ2h0PyBTeXprYWxsZXIncyBQQ0kgZnV6emVyIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzIHdpdGhvdXQgYW55IHJlYWwgaXNzdWVzLiBCdXQsIGhhbmcgb24uLi4gbGV0J3Mgbm90IGdldCBhaGVhZCBvZiBvdXJzZWx2ZXMuIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBXaGF0IGFib3V0IHRoZSBgYWJfcGNpLVx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVx1MDAzZXByb2JlKHBkZXYsIHBjaV9kZXYpYCBjYWxsPyBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgbWlnaHQgYmUuXG5cblNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIG9mIHRoaXMgZm9yIFdpZmk3IGRldmljZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGRyaXZlciB3aGljaCBzaG91bGQgdXNlIHRoZSBgYXRoMTJrX3dpZmk3X3BjaV9wcm9iZWAgZnVuY3Rpb24uIEJldHRlciBjaGVjayB0aGF0IG9uZSBvdXQuIFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgdXN1YWxseSBoaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyNDIsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA0OjMxLjYxNjUzNDUzN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MjgwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3dpZmk3X3BjaV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9ODE9dm9pZCBhdGgxMmtfd2lmaTdfcGNpX3JlYWRfaHdfdmVyc2lvbihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy05MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjkxOnN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTkyLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE4OD1zdGF0aWMgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyIGF0aDEya193aWZpN19wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xOTAtXFx0LmlkX3RhYmxlID0gYXRoMTJrX3dpZmk3X3BjaV9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjE5MTpcXHQub3BzLnByb2JlID0gYXRoMTJrX3dpZmk3X3BjaV9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTE5Mi1cXHQucmVnX2Jhc2UgPSBcXHUwMDI2YXRoMTJrX3dpZmk3X3JlZ19iYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNDozMS42NjYyNjgyNjFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3MzU0OTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlYC5cblxuKipBbmFseXppbmcgdGhlIGF0aDEya193aWZpN19wY2lfcHJvYmUgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlYCBmdW5jdGlvbiBub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGF0aDEyayBkcml2ZXIgZnJhbWV3b3JrLiBDbGVhcmx5LCBpdCdzIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24sIHNvIGl0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAgb2YgdGhlIGF0aDEyayBkcml2ZXIgd2hlbiBhIGNvbXBhdGlibGUgV2lGaSA3IFBDSSBkZXZpY2UgaXMgZGV0ZWN0ZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgdHlwaWNhbCBQQ0kgZGV2aWNlIGlkZW50aWZpY2F0aW9uIGNoZWNrcyDigJMgbG9va2luZyBmb3Igc3BlY2lmaWMgVmVuZG9yIElEcyBhbmQgRGV2aWNlIElEcywgbWFraW5nIHN1cmUgdGhlIGhhcmR3YXJlIGlzIGFjdHVhbGx5IHdoYXQgd2UgdGhpbmsgaXQgaXMuXG5cbk5leHQsIEknbGwgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgc3RhcnRzIGJ5IHJlcXVlc3RpbmcgbmVjZXNzYXJ5IHJlc291cmNlcyBmcm9tIHRoZSBrZXJuZWw6IG1lbW9yeSByZWdpb25zIGZvciB0aGUgZGV2aWNlJ3MgcmVnaXN0ZXJzLCBpbnRlcnJ1cHQgbGluZXMsIERNQSBjaGFubmVscywgYW5kIHBvc3NpYmx5IG90aGVyIGNyaXRpY2FsIHJlc291cmNlcy4gSeKAmWxsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGhlcmUsIGVuc3VyaW5nIHRoYXQgaXQgZ3JhY2VmdWxseSBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbHVyZXMuIFdlIGRvbid0IHdhbnQgdGhlIGRyaXZlciB0byBjcmFzaCBiZWNhdXNlIGl0IGNvdWxkbid0IGdyYWIgdGhlIHJlc291cmNlcyBpdCBuZWVkcy5cblxuSSdtIGFudGljaXBhdGluZyB0aGF0IGFmdGVyIHJlc291cmNlIGFsbG9jYXRpb24sIHRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZS4gVGhpcyBpbmNsdWRlcyBzZXR0aW5nIHVwIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgZW5hYmxpbmcgdGhlIGRldmljZSwgYW5kIHBvdGVudGlhbGx5IHJlc2V0dGluZyBpdCBpbnRvIGEga25vd24gc3RhdGUuIEl0J3MgbGlrZWx5IHdlJ2xsIGJlIGRlYWxpbmcgd2l0aCB2YXJpb3VzIFBDSSBjYXBhYmlsaXRpZXMgdG9vLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGZlYXR1cmVzIHNwZWNpZmljIHRvIFdpRmkgNy4gVGhpcyBpcyB3aGVyZSB0aG9zZSBjYXBhYmlsaXRpZXMgd291bGQgYmUgZGV0ZWN0ZWQgYW5kIG1hbmFnZWQuXG5cblRoZW4sIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGNydWNpYWwgc3RlcCBvZiBjcmVhdGluZyB0aGUgbWFpbiBkZXZpY2Ugc3RydWN0dXJlIChsaWtlbHkgYW4gYGF0aDEya19iYXNlYCBzdHJ1Y3QsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB0aGF0IGVuY2Fwc3VsYXRlcyBhbGwgdGhlIGRldmljZS1zcGVjaWZpYyBkYXRhIGFuZCBzdGF0ZSkuIFdpdGhpbiB0aGF0IGRldmljZSBzdHJ1Y3R1cmUsIHRoZSBmdW5jdGlvbiB3aWxsIG5lZWQgdG8gcG9wdWxhdGUgdGhlIGRhdGEuIFRoaXMgd2lsbCBpbmNsdWRlIGlkZW50aWZ5aW5nIHRoZSBkZXZpY2UgYW5kIHNldHRpbmcgdXAgdGhlIGRpZmZlcmVudCByZWdpc3RlcnMuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBzZXR0aW5nIHVwIHZhcmlvdXMgc3ViLWRyaXZlcnMgb3IgbW9kdWxlcyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgV2lGaSA3IGhhcmR3YXJlLlxuXG5GaW5hbGx5LCB0aGUgZnVuY3Rpb24gd2lsbCBhbG1vc3QgY2VydGFpbmx5IHJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgc3Vic3lzdGVtcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCAobGlrZWx5IHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBzdGFjaykuIEl0J2xsIG5lZWQgdG8gbGluayB0aGUgbmV3IGRldmljZSB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBzbyBpdOKAmXMgYXZhaWxhYmxlIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJdCB3aWxsIGxpa2VseSB0aGVuIGluaXRpYWxpemUgdGhlIHdpcmVsZXNzIGludGVyZmFjZSBhbmQgYWN0aXZhdGUgaXQsIG1ha2luZyBpdCByZWFkeSB0byBiZSB1c2VkLiBJIHdpbGwgbG9vayBjYXJlZnVsbHkgYXQgdGhlIHRlYXJkb3duIHByb2Nlc3MgZm9yIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCwgbWFraW5nIHN1cmUgYWxsIGFsbG9jYXRlZCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIHByb3Blcmx5IHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkIG9yIHRoZXJlJ3MgYW4gZXJyb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTIyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MzYuNDM5ODIxMDQyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkxOlxcdHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gIDkyOlxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuICA5MzpcXHR7XFxuICA5NDpcXHRcXHR1MzIgc29jX2h3X3ZlcnNpb25fbWFqb3IsIHNvY19od192ZXJzaW9uX21pbm9yO1xcbiAgOTU6XFx0XFx0c3RydWN0IGF0aDEya19wY2kgKmFiX3BjaTtcXG4gIDk2OlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XFxuICA5NzpcXHRcXHRpbnQgcmV0O1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRhYiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4gMTAwOlxcdFxcdGlmICghYWIpXFxuIDEwMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0YWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcXG4gMTA0OlxcdFxcdGlmICghYWJfcGNpKVxcbiAxMDU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdHN3aXRjaCAocGNpX2Rldi1cXHUwMDNlZGV2aWNlKSB7XFxuIDEwODpcXHRcXHRjYXNlIFFDTjkyNzRfREVWSUNFX0lEOlxcbiAxMDk6XFx0XFx0XFx0YWJfcGNpLVxcdTAwM2Vtc2lfY29uZmlnID0gXFx1MDAyNmF0aDEya193aWZpN19tc2lfY29uZmlnWzBdO1xcbiAxMTA6XFx0XFx0XFx0YWItXFx1MDAzZXN0YXRpY193aW5kb3dfbWFwID0gdHJ1ZTtcXG4gMTExOlxcdFxcdFxcdGFiX3BjaS1cXHUwMDNlcGNpX29wcyA9IFxcdTAwMjZhdGgxMmtfd2lmaTdfcGNpX29wc19xY245Mjc0O1xcbiAxMTI6XFx0XFx0XFx0LypcXG4gMTEzOlxcdFxcdFxcdCAqIGluaXQgd2luZG93IHJlZyBhZGRyIGJlZm9yZSByZWFkaW5nIGhhcmR3YXJlIHZlcnNpb25cXG4gMTE0OlxcdFxcdFxcdCAqIGFzIGl0IHdpbGwgYmUgdXNlZCB0aGVyZVxcbiAxMTU6XFx0XFx0XFx0ICovXFxuIDExNjpcXHRcXHRcXHRhYl9wY2ktXFx1MDAzZXdpbmRvd19yZWdfYWRkciA9IFdJTkRPV19SRUdfQUREUkVTUztcXG4gMTE3OlxcdFxcdFxcdGF0aDEya193aWZpN19wY2lfcmVhZF9od192ZXJzaW9uKGFiLCBcXHUwMDI2c29jX2h3X3ZlcnNpb25fbWFqb3IsXFxuIDExODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcXG4gMTE5OlxcdFxcdFxcdGFiLVxcdTAwM2V0YXJnZXRfbWVtX21vZGUgPSBhdGgxMmtfY29yZV9nZXRfbWVtb3J5X21vZGUoYWIpO1xcbiAxMjA6XFx0XFx0XFx0c3dpdGNoIChzb2NfaHdfdmVyc2lvbl9tYWpvcikge1xcbiAxMjE6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUENJX1c3X1NPQ19IV19WRVJTSU9OXzI6XFxuIDEyMjpcXHRcXHRcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gQVRIMTJLX0hXX1FDTjkyNzRfSFcyMDtcXG4gMTIzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMjQ6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUENJX1c3X1NPQ19IV19WRVJTSU9OXzE6XFxuIDEyNTpcXHRcXHRcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gQVRIMTJLX0hXX1FDTjkyNzRfSFcxMDtcXG4gMTI2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMjc6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gMTI4OlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gMTI5OlxcdFxcdFxcdFxcdFxcdFxcXCJVbmtub3duIGhhcmR3YXJlIHZlcnNpb24gZm91bmQgZm9yIFFDTjkyNzQ6IDB4JXhcXFxcblxcXCIsXFxuIDEzMDpcXHRcXHRcXHRcXHRcXHRzb2NfaHdfdmVyc2lvbl9tYWpvcik7XFxuIDEzMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDEzMjpcXHRcXHRcXHR9XFxuIDEzMzpcXHRcXHRcXHRicmVhaztcXG4gMTM0OlxcdFxcdGNhc2UgV0NONzg1MF9ERVZJQ0VfSUQ6XFxuIDEzNTpcXHRcXHRcXHRhYi1cXHUwMDNlaWQuYmRmX3NlYXJjaCA9IEFUSDEyS19CREZfU0VBUkNIX0JVU19BTkRfQk9BUkQ7XFxuIDEzNjpcXHRcXHRcXHRhYl9wY2ktXFx1MDAzZW1zaV9jb25maWcgPSBcXHUwMDI2YXRoMTJrX3dpZmk3X21zaV9jb25maWdbMF07XFxuIDEzNzpcXHRcXHRcXHRhYi1cXHUwMDNlc3RhdGljX3dpbmRvd19tYXAgPSBmYWxzZTtcXG4gMTM4OlxcdFxcdFxcdGFiX3BjaS1cXHUwMDNlcGNpX29wcyA9IFxcdTAwMjZhdGgxMmtfd2lmaTdfcGNpX29wc193Y243ODUwO1xcbiAxMzk6XFx0XFx0XFx0LypcXG4gMTQwOlxcdFxcdFxcdCAqIGluaXQgd2luZG93IHJlZyBhZGRyIGJlZm9yZSByZWFkaW5nIGhhcmR3YXJlIHZlcnNpb25cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MzYuNDM5OTI0ODIyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDQwMDAwMzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgVmVyc2lvbiBSZWFkKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgYXRoMTJrX3dpZmk3X3BjaV9yZWFkX2h3X3ZlcnNpb25gIGZ1bmN0aW9uLi4uIHRoYXQncyBhIGhhcmR3YXJlIHJlYWQsIGlzbid0IGl0PyBSaWdodCwgaXQncyBwdWxsaW5nIGRpcmVjdGx5IGZyb20gdGhlIHNpbGljb24uIEFuZCBpZiBpdCBlbmNvdW50ZXJzIGEgaGFyZHdhcmUgdmVyc2lvbiBpdCBkb2Vzbid0IHJlY29nbml6ZSDigJMgYW4gdW5rbm93biBvbmUsIGxldCdzIHNheSDigJMgaXQncyBnb2luZyB0byB0aHJvdyBhIGAtRU9QTk9UU1VQUGAgZXJyb3IuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgc3RhbmRhcmQgd2F5IHRvIHNpZ25hbCBcIm5vdCBzdXBwb3J0ZWQuXCIgU28sIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UncmUgY2xlYXIgb24gaG93IHRoaXMgYGF0aDEya193aWZpN19wY2lfcmVhZF9od192ZXJzaW9uYCBmdW5jdGlvbiBvcGVyYXRlcy4gV2UgbmVlZCB0byBjaGVjayBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHZlcmlmeSB0aGlzIHNwZWNpZmljIGJlaGF2aW9yLiBUaGlzIGlzIGNydWNpYWwgZm9yIGludGVycHJldGluZyBhbnkgc3Vic2VxdWVudCBlcnJvciBjb2RlcyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgcG90ZW50aWFsIHJvb3QgY2F1c2Ugb2YgYW55IHByb2JsZW1zIHdlJ3JlIHNlZWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0NTIsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA0OjQ4LjQ3OTkyODQyNFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MTpcXHR2b2lkIGF0aDEya193aWZpN19wY2lfcmVhZF9od192ZXJzaW9uKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXFxuICA4MjpcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgKm1ham9yLCB1MzIgKm1pbm9yKVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0dTMyIHNvY19od192ZXJzaW9uO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRzb2NfaHdfdmVyc2lvbiA9IGF0aDEya19wY2lfcmVhZDMyKGFiLCBUQ1NSX1NPQ19IV19WRVJTSU9OKTtcXG4gIDg3OlxcdFxcdCptYWpvciA9IHUzMl9nZXRfYml0cyhzb2NfaHdfdmVyc2lvbiwgVENTUl9TT0NfSFdfVkVSU0lPTl9NQUpPUl9NQVNLKTtcXG4gIDg4OlxcdFxcdCptaW5vciA9IHUzMl9nZXRfYml0cyhzb2NfaHdfdmVyc2lvbiwgVENTUl9TT0NfSFdfVkVSU0lPTl9NSU5PUl9NQVNLKTtcXG4gIDg5OlxcdH1cXG4gIDkwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNDo0OC40ODAwNjA4ODRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1NTc5NDc2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBgYXRoMTJrYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyBpdCdzIHRvdWNoaW5nIGBUQ1NSX1NPQ19IV19WRVJTSU9OYC4gVGhlIGNvZGUgY2hlY2tzIHRoaXMgdmVyc2lvbiBudW1iZXIgYW5kIGlmIGl0J3MgYEFUSDEyS19QQ0lfVzdfU09DX0hXX1ZFUlNJT05fMWAgb3IgYEFUSDEyS19QQ0lfVzdfU09DX0hXX1ZFUlNJT05fMmAsIGl0IHByb2NlZWRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdpdGggc3l6a2FsbGVyJ3MgUENJIGZ1enplciBwcm92aWRpbmcgcmFuZG9tIEJBUiBtZW1vcnksIHRoYXQgY2hlY2sgaXMgdHJpdmlhbCB0byBieXBhc3MuIEFueSB2YWx1ZSBpcyBwb3NzaWJsZSwgYW5kIHRoZSByYW5kb20gbmF0dXJlIG9mIHN5emthbGxlciBjb3VsZCBkZWZpbml0ZWx5IHRyaWdnZXIgdGhlc2UgY29uZGl0aW9ucy5cblxuVGhlIHByb21wdCwgdGhvdWdoLCB0aHJvd3MgYSBjdXJ2ZWJhbGwuIEl0J3MgYXNraW5nIG1lIHRvIGNvbnNpZGVyIGlmIHRoZSBwYXRjaCBpcyBpbiBhICp2ZW5kb3Itc3BlY2lmaWMqIFBDSWUgZHJpdmVyLCBwYXJ0aWN1bGFybHkgZm9yIHRoaW5ncyBsaWtlIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVcywgd2hpY2ggbm9ybWFsbHkgbmVlZCAqcGh5c2ljYWwqIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGhlcmVmb3JlIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGUgYGF0aDEya2AgZHJpdmVyIGlzIGZvciBRdWFsY29tbSBXaS1GaSA3LCBhbmQgdGhhdCAqaXMqIHZlbmRvci1zcGVjaWZpYyBQQ0llLiBTbyB0aGF0IHJhaXNlcyBhIGZsYWcuXG5cbkhvd2V2ZXIsIHRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogbGlzdHMgdGhvc2Ugb3RoZXIgZGV2aWNlIHR5cGVzIGFuZCBkb2Vzbid0IG1lbnRpb24gV2ktRmkuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbi4gQnV0IHRoZW4gSSByZWFsaXplIFdpLUZpIGRyaXZlcnMgbGlrZSBgYXRoMTJrYCBhcmUgYWxzbyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkgZmFsbCB1bmRlciB0aGUgc2FtZSBjb25zdHJhaW50cy5cblxuVGhlIGNydWNpYWwgY2x1ZSBjb21lcyBmcm9tIHRoZSBjb21taXQgYXV0aG9yOiBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBUaGlzIHRlbGxzIG1lIHRoYXQgc3l6a2FsbGVyICpkaWQqIGZpbmQgYSBidWcgaGVyZSwgYW5kIHRoaXMgcGF0Y2ggaXMgdGhlIGZpeC4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgZ2VuZXJhdGVkIHRoaXMgcGF0Y2ggKnByb3ZlcyogdGhhdCBpdCBjYW4gcmVhY2ggdGhpcyBjb2RlIHBhdGguIFRoaXMgYWxzbyBtZWFucyB0aGlzIHBhdGNoIGlzIHByb2JhYmx5IGJlaW5nIHRlc3RlZCBieSBzeXprYWxsZXIuXG5cbk5vdywgdGhlIHByb21wdCBzYXlzIHRoZSBjaGFuZ2VzIGFyZSAqYWxyZWFkeSogYXBwbGllZCBhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIHNheXMgaXQncyBhIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIsIHdoaWNoIG1lYW5zIHN5emthbGxlciBpcyAqdGVzdGluZyogdGhpcyBwYXRjaC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgZXhjbHVkZXMgdGhpbmdzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJcyBgYXRoMTJrYCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VPyBOby4gRG9lcyBpdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHM/IFllcywgbm9ybWFsbHkgaXQgZG9lcy5cblxuQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQsIHN5emthbGxlciAqaGFzKiBpdHMgUENJIGZ1enplciwgd2hpY2ggaW5qZWN0cyBQQ0kgZGV2aWNlcyBhbmQgZnV6emVzIHRoZWlyIE1NSU8gc3BhY2UuIFRoZSBwcm9tcHQgaXMgYXNraW5nIGlmIHRoZSBwYXRjaCBpcyBpbiBhbiBlbnZpcm9ubWVudCAqaW1wb3NzaWJsZSogdG8gcmVhY2guIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgKmlzKiBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS5cblxuVGhlIHByb21wdCBleHBsaWNpdGx5IGV4Y2x1ZGVzIHRoaW5ncyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuIFdoeT8gVGhhdCdzIGJlY2F1c2UgdGhlIFBDSSBmdXp6ZXIgaXMgdXN1YWxseSBzaGFsbG93LCBvZnRlbiBvbmx5IHJlYWNoaW5nIHRoZSBwcm9iZSBmdW5jdGlvbiBhbmQgbWF5YmUgc29tZSBpbml0IGZ1bmN0aW9ucy4gSXQgKnJhcmVseSogZ2V0cyBkZWVwIGludG8gdGhlIGNvcmUgbG9naWMgb2YgY29tcGxleCBkZXZpY2VzLiBIb3dldmVyLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBhbmQgYGF0aDEya19wY2lfY29uZmlnX2lycWAsIHdoaWNoIGFyZSAqY2FsbGVkIGR1cmluZyBwcm9iZSouIFRoZSBQQ0kgZnV6emVyIGNhbiByZWFjaCB0aGVzZSwgYW5kIGl0ICpkaWQqIHJlYWNoIHRoZW0sIG90aGVyd2lzZSwgdGhlcmUgd291bGQgYmUgbm8gYnVnLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgZml4aW5nIGFuIGVycm9yIGhhbmRsaW5nIGlzc3VlIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhlIFBDSSBmdXp6ZXIgaXMgZGVzaWduZWQgdG8gZGlzY292ZXIuXG5cblRoZXJlZm9yZSwgaXQgbG9va3MgbGlrZSBpdCAqaXMqIHdvcnRoIGZ1enppbmcuIE5vdywgbGV0IG1lIHJldmlldyB0aGUgcGF0Y2ggaW4gZGV0YWlsIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTYxLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDU6MDIuMDM4MDExNTA4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzg0NjgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz01MjM9c3RhdGljIGlycXJldHVybl90IGF0aDEya19wY2lfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNTQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6NTQ1OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNTQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9NjQzPXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9jb25maWdfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY4OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjY5MDpcXHRyZXQgPSBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY5MS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA1OjAyLjA5NTg2NTE3M1oiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTYzNDk1ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIFBhdGNoIGluIHRoZSBgYXRoMTJrYCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AuIEl0IHNlZW1zIGxpa2UgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4OyBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgZG91YmxlLWZyZWUgc2l0dWF0aW9uIHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIGV4dGVuZGVkIGludGVycnVwdCBjb25maWd1cmF0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgd2FzIG1pc3Npbmcgc29tZSBgZnJlZV9pcnFgIGNhbGxzIGFuZCBoYWQgaW5jb3JyZWN0IGBmcmVlX25ldGRldmAgY2FsbHMgaW4gdGhlIGVycm9yIHBhdGggd2hlbiBgcmVxdWVzdF9pcnFgIGZhaWxlZC4gVGhlIHBhdGNoIGxvb2tzIGxpa2UgaXQncyBiZWVuIHVwZGF0ZWQgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVzb3VyY2VzIGluIHRoZSBldmVudCBvZiBhbiBgaXJxYCBhbGxvY2F0aW9uIGZhaWx1cmUgYnkgbWFraW5nIHN1cmUgdGhhdCBhbGwgYWNxdWlyZWQgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCB3aGVuIGVycm9ycyBvY2N1ci4gSSd2ZSByZW9yZGVyZWQgdGhlIGBmcmVlX25ldGRldmAgY2FsbHMgYW5kIHJlbW92ZWQgdGhlIHJlZHVuZGFudCBpdGVyYXRpb24uXG5cbk15IG1haW4gY29uY2VybiBpcywgb2YgY291cnNlLCB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9uLiBFcnJvciBwYXRocyBhcmUgbm90b3Jpb3VzIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgaXNzdWVzLCBzbyB3aGlsZSB0aGUgcGF0Y2ggKmxvb2tzKiBjb3JyZWN0IGF0IGZpcnN0IGdsYW5jZSwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgY29ycmVjdG5lc3MuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGZ1enppbmcgdGhpcywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IgY29uZGl0aW9uLiBUaGUgZmFjdCB0aGF0IHRoZSBQQ0kgZnV6emVyIGNhbiB0cmlnZ2VyIHRoaXMsIGV2ZW4gcmFuZG9tbHkgZHVlIHRvIGZhdWx0IGluamVjdGlvbiwgaW5jcmVhc2VzIG15IGRlc2lyZSBmb3IgZnV6emluZy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgYGF0aDEya2AgZmFsbCB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgZHJpdmVycyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYXJkd2FyZSBmb3IgdGVzdGluZz8gVGhlIHByb21wdCBsaXN0cyBhIGJ1bmNoIG9mIGRyaXZlcnMgdGhhdCBnZW5lcmFsbHkgb3BlcmF0ZSBvbiByZWFsIGhhcmR3YXJlLiBXaS1GaSBkcml2ZXJzIGFyZW4ndCAqZXhwbGljaXRseSogbGlzdGVkLCBidXQgdGhleSBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycywganVzdCBsaWtlIHRoZSBvbmVzIG1lbnRpb25lZC4gSSdtIGdvaW5nIHRvIGNvbnNpZGVyIGl0IHdvcnRoIGZ1enppbmcsIGFuZCBJIHNob3VsZCBtYWtlIHN1cmUgdG8gaW5jbHVkZSBgYXRoMTJrYCBpbiB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk0NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNToxMS42NTkzNjM3MDdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDkyNjQxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFUSDEyS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjI6Y29uZmlnIEFUSDEyS1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBXaS1GaSA3IHN1cHBvcnQgKGF0aDEyaylcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjE3OmNvbmZpZyBBVEgxMktfQUhCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0yNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjU6Y29uZmlnIEFUSDEyS19ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJhdGgxMmsgZGVidWdnaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzozNTpjb25maWcgQVRIMTJLX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiUXVhbGNvbW0gYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NDQ6Y29uZmlnIEFUSDEyS19UUkFDSU5HXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ1LVxcdGJvb2wgXFxcImF0aDEyayB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjUzOmNvbmZpZyBBVEgxMktfQ09SRURVTVBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTQtXFx0Ym9vbCBcXFwiYXRoMTJrIGNvcmVkdW1wXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNToxMi45MDg2MzYyMjFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NDQ1MjgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBBVEgxMksgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyBsYWJlbGVkIGBBVEgxMktgLiBNeSBpbW1lZGlhdGUgcmVmbGV4IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29uZmlndXJhdGlvbiAqcmVsaWVzKiBvbiwgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGFyZSBpbnRlcnR3aW5lZCB3aXRoIGl0cyBvcGVyYXRpb24uIFdpdGhvdXQga25vd2luZyB0aGUgaW50ZXJjb25uZWN0ZWQgY29tcG9uZW50cywgSSBjYW4ndCBlZmZlY3RpdmVseSB0cm91Ymxlc2hvb3QsIG9wdGltaXplLCBvciBldmVuIHJlbGlhYmx5IGFzc2VzcyBpdHMgb3ZlcmFsbCBpbXBhY3Qgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBEZXBlbmRlbmNpZXMgYXJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgYW5kIGZ1bmN0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgZGF0YSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTU0OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA1OjE2LjQwMzA5MTY0NloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG4gICAyOlxcdGNvbmZpZyBBVEgxMktcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBXaS1GaSA3IHN1cHBvcnQgKGF0aDEyaylcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IEhBU19ETUEgXFx1MDAyNlxcdTAwMjYgUENJXFxuICAgNTpcXHRcXHRzZWxlY3QgUUNPTV9RTUlfSEVMUEVSU1xcbiAgIDY6XFx0XFx0c2VsZWN0IE1ISV9CVVNcXG4gICA3OlxcdFxcdHNlbGVjdCBRUlRSXFxuICAgODpcXHRcXHRzZWxlY3QgUVJUUl9NSElcXG4gICA5OlxcdFxcdHNlbGVjdCBQQ0lfUFdSQ1RSTF9QV1JTRVEgaWYgSEFWRV9QV1JDVFJMXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIEVuYWJsZSBzdXBwb3J0IGZvciBRdWFsY29tbSBUZWNobm9sb2dpZXMgV2ktRmkgNyAoSUVFRVxcbiAgMTI6XFx0XFx0ICA4MDIuMTFiZSkgZmFtaWx5IG9mIGNoaXBzZXRzLCBmb3IgZXhhbXBsZSBXQ043ODUwIGFuZFxcbiAgMTM6XFx0XFx0ICBRQ045Mjc0LlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBhdGgxMmsuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBBVEgxMktfQUhCXFxuICAxODpcXHRcXHRib29sIFxcXCJRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIEFUSDEySyBcXHUwMDI2XFx1MDAyNiBSRU1PVEVQUk9DXFxuICAyMDpcXHRcXHRzZWxlY3QgUUNPTV9NRFRfTE9BREVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA1OjE2LjQwMzE2NDUyNloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTkxODM5MzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFUSDEySyBQQ0kgRHJpdmVyIGZvciBTeW1ib2wgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBlbmFibGluZyBgQVRIMTJLYCwgd2hpY2ggcmVsaWVzIG9uIGBNQUM4MDIxMWAsIGBIQVNfRE1BYCwgYW5kIGBQQ0lgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgIGFuZCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYC4gVGhlc2UgZnVuY3Rpb25zIGxpdmUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIHRob3NlIHR3bywgc2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZW0sIGFuZCBmaWd1cmUgb3V0IGhvdyB0aGV5IGZpdCBpbi4gSSBzZWUgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgIGlzIGNhbGxlZCBieSBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBhdGgxMmtfcGNpX3Byb2JlYC5cblxuU28sIHRoZSBuYXR1cmFsIGNhbmRpZGF0ZXMgc2VlbWVkIHRvIGJlIHRob3NlIHRocmVlOiBgYXRoMTJrX3BjaV9wcm9iZWAsIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgLCBhbmQgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLlxuXG5CdXQgdGhlbiBJIHNhdyB0aGF0IGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCwgYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX3Byb2JlYCBhcmUgYWxsIHN0YXRpYy4gVGhlIHByb21wdCBzYXlzIHRoYXQgdGhlIHByZWZlcnJlZCBzeW1ib2xzIHNob3VsZCBiZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuXG5cbkkgd2VudCBiYWNrIHRvIGNoZWNrIGBhdGgxMmtfcGNpX3Byb2JlYC4gSXQncyBzdGF0aWMsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGBwY2lfZHJpdmVyLVx1MDAzZXByb2JlYCwgbWFraW5nIGl0IGFuIGVudHJ5cG9pbnQuIFRoZXJlJ3MgYWxzbyBgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXJgLCB3aGljaCBpc24ndCBzdGF0aWMsIGJ1dCBqdXN0IHJlZ2lzdGVycyB0aGUgZHJpdmVyLiBJIGNoZWNrZWQgYGF0aDEya193aWZpN19wY2lfcHJvYmVgIHRvbywganVzdCBpbiBjYXNlLCBidXQgdGhhdCdzIHN0YXRpYy5cblxuRXZlbiB0aG91Z2ggYGF0aDEya19wY2lfcHJvYmVgIGlzIHN0YXRpYywgc3l6a2FsbGVyICpjYW4qIHN0aWxsIHJlYWNoIGl0IGJlY2F1c2UgaXQncyBwYXJ0IG9mIHRoZSBQQ0kgc3Vic3lzdGVtLiBCdXQgdGhlIHByb21wdCBpcyBjbGVhcjogcHJpb3JpdGl6ZSB0aGUgbm9uLXN0YXRpYyBvbmVzLlxuXG5Ib3dldmVyLCBzaW5jZSBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgYSBwcm9iZSBmdW5jdGlvbiwgaXQgd29uJ3QgYmUgaW5saW5lZCwgYXMgaXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBwY2kgbGF5ZXIuIFNvLCBJIHRoaW5rIGBhdGgxMmtfcGNpX3Byb2JlYCBpcyB0aGUgcmlnaHQgZm9jdXMgc3ltYm9sIGhlcmUsIGRlc3BpdGUgYmVpbmcgc3RhdGljLCBiZWNhdXNlIGl0IGlzIGFuIGVudHJ5cG9pbnQuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIEkgZGlkbid0IG1pc3MgYW55IG90aGVyIHJlbGV2YW50IG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjA0NywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA1OjQ2LjMyMTU2NDcyMVoiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ1NTM5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3BjaV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyNz1hdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTQ4OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NDktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODI4PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0OS1cXHRwY2lfZHJpdmVyLVxcdTAwM2VpZF90YWJsZSA9IGRyaXZlci1cXHUwMDNlaWRfdGFibGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUwOlxcdHBjaV9kcml2ZXItXFx1MDAzZXByb2JlID0gYXRoMTJrX3BjaV9wcm9iZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NTEtXFx0cGNpX2RyaXZlci1cXHUwMDNlcmVtb3ZlID0gYXRoMTJrX3BjaV9yZW1vdmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA1OjQ2LjM3NjEyNDI3NVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM5ODgxMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIE1vZHVsZSdzIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkgc2VlIGBhdGgxMmtfcGNpX3Byb2JlYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyOyB0aGF0IG1lYW5zIGl0J3Mgbm90IGJlaW5nIGlubGluZWQsIHdoaWNoIGltcGFjdHMgcG90ZW50aWFsIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2guXG5cbkknbSBzZWVpbmcgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmc6IGBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxYCAod2hpY2ggaXMgbmV3KSwgYGF0aDEya19wY2lfZnJlZV9leHRfaXJxYCAobW9kaWZpZWQpLCBgYXRoMTJrX3BjaV9mcmVlX2lycWAgKG1vZGlmaWVkKSwgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgIChtb2RpZmllZCksIGFuZCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCAobW9kaWZpZWQpLiBBbGwgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGxpbWl0cyB0aGVpciB2aXNpYmlsaXR5LCBidXQgaXMgZXhwZWN0ZWQgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZHJpdmVyIGNvZGUuXG5cbkxvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGlzIGNhbGxlZCBmcm9tIGBhdGgxMmtfcGNpX3Byb2JlYCBhbmQgYGF0aDEya19wY2lfZnJlZV9pcnFgIGlzIGNhbGxlZCBmcm9tIGBhdGgxMmtfcGNpX3JlbW92ZWAgYW5kIGVycm9yIHBhdGhzLiBUaGlzIG1ha2VzIHNlbnNlLiBUaGUgcHJvYmUgaXMgcmVzcG9uc2libGUgZm9yIHNldHVwLCBhbmQgcmVtb3ZlIGRlYWxzIHdpdGggY2xlYW51cC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBhdGgxMmtfcGNpX3JlbW92ZWAgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNoYW5nZXMgbWVhbiBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBkcml2ZXIgbGlmZWN5Y2xlIGFuZCBlcnJvciBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2MDAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDU6NTEuMTE2MDA5MzU0WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc4NTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTU0OD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE3MDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNzA4OnN0YXRpYyB2b2lkIGF0aDEya19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTcwOS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE4Mjg9aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODUwLVxcdHBjaV9kcml2ZXItXFx1MDAzZXByb2JlID0gYXRoMTJrX3BjaV9wcm9iZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTE6XFx0cGNpX2RyaXZlci1cXHUwMDNlcmVtb3ZlID0gYXRoMTJrX3BjaV9yZW1vdmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODUyLVxcdHBjaV9kcml2ZXItXFx1MDAzZXNodXRkb3duID0gYXRoMTJrX3BjaV9zaHV0ZG93bjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDU6NTEuMTYzNzk5ODU4WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTk4NDIyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYGF0aDEya2AgRHJpdmVyIFRlYXJkb3duKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBhdGgxMmtgIGRyaXZlciBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZnV6emFibGUuIEZpcnN0LCBJIHNlZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGBhdGgxMmtfcGNpX3Byb2JlYCBhbmQgYGF0aDEya19wY2lfcmVtb3ZlYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggbm90aW5nIGFzIG15IGBGb2N1c1N5bWJvbHNgLiBOb3csIEkgcmVjYWxsIHRoZSBydWxlOiBpZiB0aGUgcGF0Y2ggKm9ubHkqIHRvdWNoZXMgZHJpdmVyIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLCB0aGVuIGl0J3Mgbm90IHdvcnRoIGZ1enppbmcsIGFuZCBJIHNob3VsZCBzZXQgYFJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5UaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCAqb25seSogbW9kaWZ5IHRob3NlIHRlYXJkb3duIGNhbGxiYWNrcz8gSXQgZG9lc24ndCBsb29rIGxpa2UgaXQuIEkgc2VlIGNoYW5nZXMgaW4gYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgIGFuZCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBhcmUgY2FsbGVkICpkdXJpbmcqIGBwcm9iZWAgLS0gdGhleSdyZSBwYXJ0IG9mIHRoZSBpbml0aWFsaXphdGlvbi4gQWxzbywgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGVycm9yIHBhdGhzICp3aXRoaW4qIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGl0c2VsZi4gU28sIHRoaXMgaXNuJ3QgZXhjbHVzaXZlbHkgYSB0ZWFyZG93biBwYXRjaC5cblxuSSBzdGlsbCBuZWVkIHRvIGNvbmZpcm0gb25lIHRoaW5nOiBJcyBgYXRoMTJrX3BjaV9mcmVlX2lycWAgKm9ubHkqIGNhbGxlZCBkdXJpbmcgYHJlbW92ZWA/IEkgbmVlZCB0byB2ZXJpZnkgaXRzIGNhbGwgc2l0ZXMgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1MTQsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDU6NTcuMjYzNjQ2NDI2WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMwNDE4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX2ZyZWVfaXJxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0zMjk9c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYiwgaW50IG51bV9leHRfaXJxX2dycClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMzQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MzQ0OnN0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTM0NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1NDg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjgxLVxcdGF0aDEya19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KGFiX3BjaSwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjgyOlxcdGF0aDEya19wY2lfZnJlZV9pcnEoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY4My1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTcwOD1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTczMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE3MzE6XFx0YXRoMTJrX3BjaV9mcmVlX2lycShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNzMyLVxcdGF0aDEya19wY2lfbXNpX2ZyZWUoYWJfcGNpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDU6NTcuMzEwOTU1MDlaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1OTE5NTk4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBBc3Nlc3NtZW50IGZvciB0aGlzIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIHRoZSBjb2RlIGNoYW5nZXMsIGhlcmUncyBteSBwbGFuIGZvciBmdXp6aW5nIGl0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGBhdGgxMmtgIFBDSSBkcml2ZXIuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgYXRoMTJrX3BjaV9wcm9iZWAgYW5kIHRoZSBgYXRoMTJrX3BjaV9yZW1vdmVgIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgaXNzdWVzIHRoYXQgYXJpc2UgZHVyaW5nIGRldmljZSBwcm9iaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGludGVycnVwdCBjb25maWd1cmF0aW9uLCBuYW1lbHkgd2l0aGluIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AuIFRoZSBrZXkgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGUgZXJyb3IgcGF0aHMsIG1lYW5pbmcgdGhleSBhcmUgbGlrZWx5IHRvIGJlIHJlYWNoZWQgaW4gYW4gdW51c3VhbCBzdGF0ZSwgd2hpY2ggaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gQWxzbywgaXQncyBub3QganVzdCB0ZWFyZG93biwgYXMgdGhpcyBwYXRjaCBtb2RpZmllcyBlcnJvciBwYXRocyB0aGF0IG9jY3VyIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSSdsbCBmbGFnIGBXb3J0aEZ1enppbmc6IHRydWVgLlxuXG5Gb3Igc3ltYm9scyB0byB0YXJnZXQsIEknbSBnb2luZyB0byBpbmNsdWRlOlxuXG4qICAgYGF0aDEya19wY2lfcHJvYmVgOiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGFuZCBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkLlxuKiAgIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgOiBHaXZlbiB0aGUgc2l6ZSBhbmQgaW1wb3J0YW5jZSwgbm90IGxpa2VseSBpbmxpbmVkLlxuKiAgIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYDogQWxzbyBxdWl0ZSBsYXJnZSwgbWFraW5nIGlubGluaW5nIHVubGlrZWx5LlxuXG5TbywgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZTogYGF0aDEya19wY2lfcHJvYmVgLCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCwgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLlxuXG5UaGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoaXMgY29kZSBpcyBkaXJlY3RseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgUENJIHN1YnN5c3RlbS4gSSBleHBlY3Qgc3l6a2FsbGVyJ3MgUENJIGZ1enplciB0byBpbmplY3QgYSB2aXJ0dWFsIGRldmljZSBhbmQgdHJpZ2dlciBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgdGhpcyBwYXRjaCB3aWxsIGJlIGhpdCBkdXJpbmcgdGhvc2Ugc2NlbmFyaW9zLlxuXG5Ob3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIG9ubHkgYEFUSDEyS2AgaXMgc3RyaWN0bHkgbmVlZGVkLiBgTUFDODAyMTFgIGlzIGFsc28gcmVxdWlyZWQsIGJ1dCBpdCBpcyB1bmxpa2VseSB0aGlzIG5lZWRzIHRvIGJlIHNwZWNpZmllZCBhcyBpdCBpcyBhIGNvbW1vbiBkcml2ZXIuIFRoZSBwYXRjaCBpcyBpbiBgcGNpLmNgLCBzbyBgQVRIMTJLX0FIQmAgaXMgbm90IG5lZWRlZC4gYEFUSDEyS19ERUJVR2AgaXMgbm90IHN0cmljdGx5IG5lZWRlZC4gU28gSSdsbCBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGluY2x1ZGU6IGBBVEgxMktgLlxuXG5JJ2xsIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBsYXRlciwgYnV0IHRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTY1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNjowNy45MDI5MTc2ODdaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDM3Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzoyOmNvbmZpZyBBVEhfQ09NTU9OXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc9MjQ9aWYgV0xBTl9WRU5ET1JfQVRIXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc6MjY6Y29uZmlnIEFUSF9ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIkF0aGVyb3Mgd2lyZWxlc3MgZGVidWdnaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc6MzI6Y29uZmlnIEFUSF9UUkFDRVBPSU5UU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTMzLVxcdGJvb2wgXFxcIkF0aGVyb3Mgd2lyZWxlc3MgdHJhY2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnOjQwOmNvbmZpZyBBVEhfUkVHX0RZTkFNSUNfVVNFUl9SRUdfSElOVFNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZy00MS1cXHRib29sIFxcXCJBdGhlcm9zIGR5bmFtaWMgdXNlciByZWd1bGF0b3J5IGhpbnRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctNDgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc6NDk6Y29uZmlnIEFUSF9SRUdfRFlOQU1JQ19VU0VSX0NFUlRfVEVTVElOR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkF0aGVyb3MgZHluYW1pYyB1c2VyIHJlZ3VsYXRvcnkgdGVzdGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDY6MDcuOTYyOTU4MzUxWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODM4ODg0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmF2aWdhdGluZyB0aGUgV0xBTiBWZW5kb3IgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgaW50byB0aGUgYGF0aGAgZGlyZWN0b3J5LiBTdGFuZGFyZCBwcm9jZWR1cmUsIHJpZ2h0PyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgV0xBTiB2ZW5kb3Igc3BhY2UsIGFuZCBpdCBsb29rcyBsaWtlIEkgbmVlZCBhIHNwZWNpZmljIGtleSB0byB1bmxvY2sgdGhpcyBwYXJ0aWN1bGFyIGRvb3IuIEFoLCByaWdodCwgSSBuZWVkIGBXTEFOX1ZFTkRPUl9BVEhgLiBUaGF0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBtYWdpYyB3b3JkIHRvIGdldCBwYXN0IHRoZSBpbml0aWFsIGFjY2VzcyBjb250cm9scy4gSXQncyBhbG1vc3Qgc2Vjb25kIG5hdHVyZSBhdCB0aGlzIHBvaW50LCBidXQgaXQgYWx3YXlzIGhlbHBzIHRvIHRoaW5rIHRocm91Z2ggdGhlIHByZXJlcXVpc2l0ZXMgYmVmb3JlIGRpdmluZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0MTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNjoxMS4wNDY4NDk3OTRaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDQ3MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBXTEFOX1ZFTkRPUl9BVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc9Mj1jb25maWcgQVRIX0NPTU1PTlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzo1OmNvbmZpZyBXTEFOX1ZFTkRPUl9BVEhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZy02LVxcdGJvb2wgXFxcIkF0aGVyb3MvUXVhbGNvbW0gZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDY6MTEuMDk0MzA0MDc4WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzE5NTg1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIFdpcmVsZXNzIFZlbmRvciBTdXBwb3J0KipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBwcmV0dHkgY2xlYXI6IGl0IGxvb2tzIGxpa2Ugd2UgbmVlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgQXRoZXJvcy1iYXNlZCBXTEFOIGhhcmR3YXJlLiBTbywgYFdMQU5fVkVORE9SX0FUSGAgbmVlZHMgdG8gYmUgc2V0LiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBoZWFkIG92ZXIgdG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBkZWZpbmVzIHdpcmVsZXNzIGRyaXZlcnMgYW5kIG9wdGlvbnMuIFRoYXQnbGwgYmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgV0xBTl9WRU5ET1JfQVRIYCBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBwZXJoYXBzIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIHRvIHByb2NlZWQgc2FmZWx5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE2ODgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNjoxNC4yMjYyNjQ4MTNaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTU5NjY5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFdMQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZzo2Om1lbnVjb25maWcgV0xBTlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWctNy1cXHRib29sIFxcXCJXaXJlbGVzcyBMQU5cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA2OjE1LjQ4MjI0MTE4N1oiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA4NDc0MjQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZW5hYmxlIFdMQU4gc3VwcG9ydCwgc3BlY2lmaWNhbGx5IHRoZSBBdGhlcm9zIHZlbmRvciBtb2R1bGUsIGFuZCB0aGUgYXRoMTJrIGRyaXZlci4gSSd2ZSBub3RlZCB0aGF0IGBXTEFOYCwgYFdMQU5fVkVORE9SX0FUSGAsIGFuZCBgQVRIMTJLYCBuZWVkIHRvIGJlIGVuYWJsZWQuXG5cbk5vdywgSSdtIHJlLXJlYWRpbmcgdGhlIHByb21wdCwgc3BlY2lmaWNhbGx5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQncyB0YWxraW5nIGFib3V0IHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgY29kZSB0aGF0IHJlbGllcyBvbiB1bi1lbXVsYXRlZCBwaHlzaWNhbCBoYXJkd2FyZSBsaWtlIHNwZWNpZmljIFBDSWUgZGV2aWNlcy4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyB0aGUgYGF0aDEya2AgZHJpdmVyIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5P1xuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgeWVzLCBgYXRoMTJrYCBpcyBhIGRyaXZlciBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLiBIb3dldmVyLCBpdCBsZXZlcmFnZXMgdGhlIFBDSSBmdXp6ZXIsIHdoaWNoIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBlbXVsYXRlIFBDSSBjb25maWd1cmF0aW9uIGFuZCBtZW1vcnktbWFwcGVkIEkvTyAoTU1JTykgc3BhY2VzLiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoZSBwcm9tcHQncyBwaHJhc2UsIFwiLi4uKmV2ZW4qIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFRoaXMgaXMga2V5ISBUaGUgUENJIGZ1enplciAqaXMqIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIHBhdGggd2l0aGluIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLiBUaGUgUENJIGZ1enplciBjYW4gZWFzaWx5IHRyaWdnZXIgdGhpcywgYnkgY2F1c2luZyBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgb3IgYnkgcmVhZGluZyBhIHNwZWNpZmljIHZhbHVlIGZyb20gTU1JTy4gU3l6a2FsbGVyIGZvdW5kIHRoZSBidWcsIHNvIHRoaXMgY29uZmlybXMgcmVhY2hhYmlsaXR5LiAgVGhlcmVmb3JlLCBpdCAqaXMqIHJlYWNoYWJsZSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBUaHVzLCBJJ20gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgcmVnYXJkaW5nIGZvY3VzIHN5bWJvbHMsIEknbSBpbmNsdWRpbmcgYGF0aDEya19wY2lfcHJvYmVgLCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCwgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYC5cblxuVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCwgcmVsYXRlZCB0byB0aGUgYGF0aDEya2AgZHJpdmVyLiBUaGUgUENJIGZ1enplciBhbmQgcG90ZW50aWFsbHkgc3l6a2FsbGVyIGNhbiBlYXNpbHkgdHJpZ2dlciBhbGxvY2F0aW9uIGZhaWx1cmVzIGluIGBhdGgxMmtfcGNpX3Byb2JlYC5cblxuT25lIGxhc3QgdGhpbmc6IHRoZSBwcm9tcHQgc3VnZ2VzdHMgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gV2hpbGUgYGF0aDEya19wY2lfcHJvYmVgICppcyogc3RhdGljLCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIGl0J3Mgbm90IGlubGluZWQuIEl0J3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIGFuZCBpdCBzZWVtcyB0aGUgYmVzdCBjaG9pY2UuIEkgd2lsbCBpbmNsdWRlIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AgYmVjYXVzZSB0aGV5IGNvbnRhaW4gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuICBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTk1MCwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDY6MjYuNTY2OTg3MTAzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5ODU2NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX0FUSFwiLFxuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTJrX3BjaV9wcm9iZVwiLFxuICAgIFwiYXRoMTJrX3BjaV9jb25maWdfaXJxXCIsXG4gICAgXCJhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiB0aGUgUENJIHByb2JlIGZ1bmN0aW9uIChgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBhbmQgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgKSBvZiB0aGUgYXRoMTJrIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSBzdWJzeXN0ZW0gYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIGluamVjdGluZyBhIHZpcnR1YWwgZGV2aWNlIGFuZCBjYXVzaW5nIGFsbG9jYXRpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTlwiLFxuICAgIFwiV0xBTl9WRU5ET1JfQVRIXCIsXG4gICAgXCJBVEgxMktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdGgxMmtfcGNpX3Byb2JlXCIsXG4gICAgXCJhdGgxMmtfcGNpX2NvbmZpZ19pcnFcIixcbiAgICBcImF0aDEya19wY2lfZXh0X2lycV9jb25maWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gKGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2ApIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgaW5qZWN0aW5nIGEgdmlydHVhbCBkZXZpY2UgYW5kIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDY6MjYuNjQyOTc5MDA5WiIsIlNlcSI6NzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE4NzUzNzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA2OjI2LjY0MzQzNzQ1OVoiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDE4NzA3NTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgYW5kIGluY29ycmVjdCBjbGVhbnVwIGxvZ2ljIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBvZiBJUlEgY29uZmlndXJhdGlvbiBpbiB0aGUgYXRoMTJrIGRyaXZlci4gSXQgcmVmYWN0b3JzIHRoZSBJUlEgZnJlZWluZyBmdW5jdGlvbnMgdG8gYWNjZXB0IHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBJUlFzL2dyb3VwcyBhbmQgZW5zdXJlcyB0aGF0IG9ubHkgYWxsb2NhdGVkIHJlc291cmNlcyBhcmUgZnJlZWQuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGludmFsaWQgZnJlZXMsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtzIGluIHRoZXNlIHBhdGhzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0OTA2NTE1MjM2NDNhYTg2YWI4ZTY4MzhjNjNmZTE0ZWZhOWQzMjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxMjowMTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXG5pbmRleCA2NDQxOTI3YjUzODIyLi5hZjBlODgyZmQwYjUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1xuQEAgLTMxMywxMSArMzEzLDI0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfc3dfcmVzZXQoc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBwb3dlcl9vbilcbiBcdGF0aDEya19taGlfc2V0X21oaWN0cmxfcmVzZXQoYWIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuK3N0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9jZV9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYiwgaW50IG51bV9jZSlcbit7XG4rXHRpbnQgaSwgaXJxX2lkeDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jZTsgaSsrKSB7XG4rXHRcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpcnFfaWR4ID0gQVRIMTJLX1BDSV9JUlFfQ0UwX09GRlNFVCArIGk7XG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0sIFx1MDAyNmFiLVx1MDAzZWNlLmNlX3BpcGVbaV0pO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgbnVtX2V4dF9pcnFfZ3JwKVxuIHtcbiBcdGludCBpLCBqO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2V4dF9pcnFfZ3JwOyBpKyspIHtcbiBcdFx0c3RydWN0IGF0aDEya19leHRfaXJxX2dycCAqaXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuIFxuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGorKylcbkBAIC0zMzAsMTYgKzM0Myw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXG4gc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpLCBpcnFfaWR4O1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZWNlX2NvdW50OyBpKyspIHtcbi1cdFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlycV9pZHggPSBBVEgxMktfUENJX0lSUV9DRTBfT0ZGU0VUICsgaTtcbi1cdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4tXHR9XG4tXG4tXHRhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYik7XG4rXHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQpO1xuK1x0YXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoYWIsIEFUSDEyS19FWFRfSVJRX0dSUF9OVU1fTUFYKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9jZV9pcnFfZW5hYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUxNiBjZV9pZClcbkBAIC01OTUsOCArNjAwLDYgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXG4gXHRcdFx0aXJxID0gYXRoMTJrX3BjaV9nZXRfbXNpX2lycShhYi1cdTAwM2VkZXYsIHZlY3Rvcik7XG4gXG4tXHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbi1cbiBcdFx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1BDSSxcbiBcdFx0XHRcdCAgIFwiaXJxOiVkIGdyb3VwOiVkXFxuXCIsIGlycSwgaSk7XG4gXG5AQCAtNjA3LDIyICs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTJrX2VycihhYiwgXCJmYWlsZWQgcmVxdWVzdCBpcnEgJWQ6ICVkXFxuXCIsXG4gXHRcdFx0XHRcdCAgIHZlY3RvciwgcmV0KTtcbi1cdFx0XHRcdGdvdG8gZmFpbF9yZXF1ZXN0O1xuK1xuK1x0XHRcdFx0Zm9yIChuID0gMDsgbiBcdTAwM2MgajsgbisrKVxuK1x0XHRcdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tuXV0sIGlycV9ncnApO1xuK1xuK1x0XHRcdFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0ubmFwaSk7XG4rXHRcdFx0XHRmcmVlX25ldGRldihhYi1cdTAwM2VleHRfaXJxX2dycFtpXS5uYXBpX25kZXYpO1xuK1x0XHRcdFx0Z290byBmYWlsX2FsbG9jYXRlO1xuIFx0XHRcdH1cbitcbitcdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuIFx0XHR9XG4gXHRcdGF0aDEya19wY2lfZXh0X2dycF9kaXNhYmxlKGlycV9ncnApO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZmFpbF9yZXF1ZXN0OlxuLVx0LyogaSAtXHUwMDNlbmFwaV9uZGV2IHdhcyBwcm9wZXJseSBhbGxvY2F0ZWQuIEZyZWUgaXQgYWxzbyAqL1xuLVx0aSArPSAxO1xuIGZhaWxfYWxsb2NhdGU6XG4tXHRmb3IgKG4gPSAwOyBuIFx1MDAzYyBpOyBuKyspIHtcbi1cdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW25dO1xuLVx0XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4tXHR9XG4rXHRhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgaSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC02NzEsNiArNjc2LDggQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGF0aDEya19lcnIoYWIsIFwiZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxcblwiLFxuIFx0XHRcdFx0ICAgaXJxX2lkeCwgcmV0KTtcbitcbitcdFx0XHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXG5AQCAtNjgxLDggKzY4OCwxMCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIFx0fVxuIFxuIFx0cmV0ID0gYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhhYik7XG4tXHRpZiAocmV0KVxuK1x0aWYgKHJldCkge1xuK1x0XHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDY6MjYuNjQzNDM4MjE5WiIsIlNlcSI6NzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTg3MDU0NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGF0aDEyayBQQ0kgSVJRIEhhbmRsaW5nIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgd2UgaGFuZGxlIElSUXMgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24uIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSB0aGlzIGlzIGFsbCBhYm91dCByZWZhY3RvcmluZyBhbmQgc3RyZW5ndGhlbmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIElSUSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb27igJRzcGVjaWZpY2FsbHksIHRoZSBgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnFgLCBgYXRoMTJrX3BjaV9mcmVlX2NlX2lycWAsIGFuZCBgYXRoMTJrX3BjaV9mcmVlX2lycWAgZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaGVyZS5cblxuVGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIG9uIGNvcnJlY3RpbmcgcmVzb3VyY2UgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgaW4gdGhlIGVycm9yIHBhdGhzIG9mIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBhbmQgYGF0aDEya19wY2lfY29uZmlnX2lycWAuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IGlmIGFuIElSUSByZXF1ZXN0IGZhaWxzLCB3ZSBwcm9wZXJseSBjbGVhbiB1cCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCByZXNvdXJjZXPigJRJUlEgbGluZXMgYW5kIHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgZGV2aWNlc+KAlGJlZm9yZSBleGl0aW5nLiBJdCdzIGEgbWVtb3J5L3Jlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUsIHBsYWluIGFuZCBzaW1wbGUuIFdlJ3JlIG5vdCB0YWxraW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgS0FTQU4sIHN0YW5kYXJkIGxlYWsgZGV0ZWN0b3JzLCBvciBLbWVtbGVhayB3b3VsZCBjYXRjaCB3aXRob3V0IGFuIGlzc3VlLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuTG9va2luZyBjbG9zZXIsIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGF0aDEya19wY2lfZnJlZV9jZV9pcnFgIGFuZCB0aGUgYWRqdXN0bWVudCB0byBgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnFgIGNvbmZpcm0gdGhlIGludGVudCB0byBtYW5hZ2UgdGhlIGNsZWFudXAgb2YgQ0UgYW5kIGV4dGVybmFsIElSUXMgd2l0aCBtb3JlIHByZWNpc2lvbi4gU3BlY2lmaWNhbGx5LCBpbiBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AsIHRoZSByZXZpc2VkIGVycm9yIGhhbmRsaW5nIG1ldGljdWxvdXNseSBmcmVlcyBhbnkgYWxyZWFkeS1yZXF1ZXN0ZWQgSVJRcyB3aXRoaW4gYSBncm91cCB1cG9uIGZhaWx1cmUsIGRlbGV0ZXMgTkFQSSBpbnN0YW5jZXMsIGFuZCBmcmVlcyB0aGUgYXNzb2NpYXRlZCBuZXRkZXYuIFRoZW4gaXQgY2FsbHMgYGF0aDEya19wY2lfZnJlZV9leHRfaXJxYCB0byBmcmVlIHRoZSBwcmVpdm91c2x5IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgZ3JvdXBzLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgYnVnIHdoZXJlIGBhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdYCBtaWdodCBiZSBhc3NpZ25lZCBiZWZvcmUgdGhlIGByZXF1ZXN0X2lycWAgY2FsbCBzdWNjZWVkcywgb3Igd2hlcmUgdGhlIGNsZWFudXAgbG9naWMgd2Fzbid0IGNvcnJlY3QuXG5cbkluIGVzc2VuY2UsIHRoaXMgaXMgYSB0YXJnZXRlZCBmaXggZm9yIHRoZSBJUlEgY29uZmlndXJhdGlvbidzIGVycm9yIGhhbmRsaW5nLiBJdCdzIG5vdCBhIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZSBjaGFuZ2UsIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IHVzZXItc3BhY2UgaW50ZXJmYWNlcyBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdpdGggdGhpcyBpbiBtaW5kLCBhbmQgYWZ0ZXIgYSBjYXJlZnVsIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaW52b2x2ZSBLTVNBTiBmb3IgdGhpcy4gSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDUzLCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA2OjM2LjgzMDQ5NTUyN1oiLCJTZXEiOjc2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgYW5kIGluY29ycmVjdCBjbGVhbnVwIGxvZ2ljIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBvZiBJUlEgY29uZmlndXJhdGlvbiBpbiB0aGUgYXRoMTJrIGRyaXZlci4gSXQgcmVmYWN0b3JzIHRoZSBJUlEgZnJlZWluZyBmdW5jdGlvbnMgdG8gYWNjZXB0IHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBJUlFzL2dyb3VwcyBhbmQgZW5zdXJlcyB0aGF0IG9ubHkgYWxsb2NhdGVkIHJlc291cmNlcyBhcmUgZnJlZWQuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGludmFsaWQgZnJlZXMsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtzIGluIHRoZXNlIHBhdGhzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGFuZCBpbmNvcnJlY3QgY2xlYW51cCBsb2dpYyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgb2YgSVJRIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGF0aDEyayBkcml2ZXIuIEl0IHJlZmFjdG9ycyB0aGUgSVJRIGZyZWVpbmcgZnVuY3Rpb25zIHRvIGFjY2VwdCB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgSVJRcy9ncm91cHMgYW5kIGVuc3VyZXMgdGhhdCBvbmx5IGFsbG9jYXRlZCByZXNvdXJjZXMgYXJlIGZyZWVkLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpbnZhbGlkIGZyZWVzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG1lbW9yeSBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsZWFrcyBpbiB0aGVzZSBwYXRocy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9mk4m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-19 11:15:18 +0000 UTC FinishedAt: 2026-08-19 12:06:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5453bc3279e9f8578ac3e534d476240e40c879e1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_ATH", "ATH12K" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "5453bc3279e9f8578ac3e534d476240e40c879e1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WLAN", "WLAN_VENDOR_ATH", "ATH12K" ], "series_id": "d0b84d19-3cb6-42e1-a402-147373c7b6a1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath12k_pci_probe", "ath12k_pci_config_irq", "ath12k_pci_ext_irq_config" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dMQU4mIzM0OywKICAgICYjMzQ7V0xBTl9WRU5ET1JfQVRIJiMzNDssCiAgICAmIzM0O0FUSDEySyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDEya19wY2lfcHJvYmUmIzM0OywKICAgICYjMzQ7YXRoMTJrX3BjaV9jb25maWdfaXJxJiMzNDssCiAgICAmIzM0O2F0aDEya19wY2lfZXh0X2lycV9jb25maWcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBhbmQgaW5jb3JyZWN0IGNsZWFudXAgbG9naWMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGluIHRoZSBhdGgxMmsgZHJpdmVyLiBJdCByZWZhY3RvcnMgdGhlIElSUSBmcmVlaW5nIGZ1bmN0aW9ucyB0byBhY2NlcHQgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIElSUXMvZ3JvdXBzIGFuZCBlbnN1cmVzIHRoYXQgb25seSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFyZSBmcmVlZC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW52YWxpZCBmcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVha3MgaW4gdGhlc2UgcGF0aHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiAoYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCkgb2YgdGhlIGF0aDEyayBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHRoZSBzeXprYWxsZXIgUENJIGZ1enplciBpbmplY3RpbmcgYSB2aXJ0dWFsIGRldmljZSBhbmQgY2F1c2luZyBhbGxvY2F0aW9uIGZhaWx1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzQ5MDY1MTUyMzY0M2FhODZhYjhlNjgzOGM2M2ZlMTRlZmE5ZDMyM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDEyOjAxOjUzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXG5pbmRleCA2NDQxOTI3YjUzODIyLi5hZjBlODgyZmQwYjUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1xuQEAgLTMxMywxMSAmIzQzOzMxMywyNCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX3N3X3Jlc2V0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgcG93ZXJfb24pXG4gXHRhdGgxMmtfbWhpX3NldF9taGljdHJsX3Jlc2V0KGFiKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbiYjNDM7c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2NlX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgbnVtX2NlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IGksIGlycV9pZHg7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jZTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpcnFfaWR4ID0gQVRIMTJLX1BDSV9JUlFfQ0UwX09GRlNFVCAmIzQzOyBpO1xuJiM0MztcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgbnVtX2V4dF9pcnFfZ3JwKVxuIHtcbiBcdGludCBpLCBqO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2V4dF9pcnFfZ3JwOyBpJiM0MzsmIzQzOykge1xuIFx0XHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4gXG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaiYjNDM7JiM0MzspXG5AQCAtMzMwLDE2ICYjNDM7MzQzLDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4ge1xuLVx0aW50IGksIGlycV9pZHg7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHRpcnFfaWR4ID0gQVRIMTJLX1BDSV9JUlFfQ0UwX09GRlNFVCAmIzQzOyBpO1xuLVx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbi1cdH1cbi1cbi1cdGF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiKTtcbiYjNDM7XHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQpO1xuJiM0MztcdGF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiLCBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfY2VfaXJxX2VuYWJsZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MTYgY2VfaWQpXG5AQCAtNTk1LDggJiM0Mzs2MDAsNiBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBcdFx0XHRpcnEgPSBhdGgxMmtfcGNpX2dldF9tc2lfaXJxKGFiLVx1MDAzZWRldiwgdmVjdG9yKTtcbiBcbi1cdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuLVxuIFx0XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUENJLFxuIFx0XHRcdFx0ICAgXCYjMzQ7aXJxOiVkIGdyb3VwOiVkXFxuXCYjMzQ7LCBpcnEsIGkpO1xuIFxuQEAgLTYwNywyMiAmIzQzOzYxMCwyNCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgcmVxdWVzdCBpcnEgJWQ6ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICB2ZWN0b3IsIHJldCk7XG4tXHRcdFx0XHRnb3RvIGZhaWxfcmVxdWVzdDtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0Zm9yIChuID0gMDsgbiBcdTAwM2MgajsgbiYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tuXV0sIGlycV9ncnApO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXS5uYXBpKTtcbiYjNDM7XHRcdFx0XHRmcmVlX25ldGRldihhYi1cdTAwM2VleHRfaXJxX2dycFtpXS5uYXBpX25kZXYpO1xuJiM0MztcdFx0XHRcdGdvdG8gZmFpbF9hbGxvY2F0ZTtcbiBcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuIFx0XHR9XG4gXHRcdGF0aDEya19wY2lfZXh0X2dycF9kaXNhYmxlKGlycV9ncnApO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZmFpbF9yZXF1ZXN0OlxuLVx0LyogaSAtXHUwMDNlbmFwaV9uZGV2IHdhcyBwcm9wZXJseSBhbGxvY2F0ZWQuIEZyZWUgaXQgYWxzbyAqL1xuLVx0aSAmIzQzOz0gMTtcbiBmYWlsX2FsbG9jYXRlOlxuLVx0Zm9yIChuID0gMDsgbiBcdTAwM2MgaTsgbiYjNDM7JiM0MzspIHtcbi1cdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW25dO1xuLVx0XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4tXHR9XG4mIzQzO1x0YXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoYWIsIGkpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjcxLDYgJiM0Mzs2NzYsOCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxcblwmIzM0OyxcbiBcdFx0XHRcdCAgIGlycV9pZHgsIHJldCk7XG4mIzQzO1xuJiM0MztcdFx0XHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXG5AQCAtNjgxLDggJiM0Mzs2ODgsMTAgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdH1cbiBcbiBcdHJldCA9IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoYWIpO1xuLVx0aWYgKHJldClcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTiYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9BVEgmIzM0OywKICAgICYjMzQ7QVRIMTJLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTJrX3BjaV9wcm9iZSYjMzQ7LAogICAgJiMzNDthdGgxMmtfcGNpX2NvbmZpZ19pcnEmIzM0OywKICAgICYjMzQ7YXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gKGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2ApIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgaW5qZWN0aW5nIGEgdmlydHVhbCBkZXZpY2UgYW5kIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0OTA2NTE1MjM2NDNhYTg2YWI4ZTY4MzhjNjNmZTE0ZWZhOWQzMjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMjowMTo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jCmluZGV4IDY0NDE5MjdiNTM4MjIuLmFmMGU4ODJmZDBiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYwpAQCAtMzEzLDExICYjNDM7MzEzLDI0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfc3dfcmVzZXQoc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBwb3dlcl9vbikKIAlhdGgxMmtfbWhpX3NldF9taGljdHJsX3Jlc2V0KGFiKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fY2UpCiYjNDM7ewomIzQzOwlpbnQgaSwgaXJxX2lkeDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9jZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpcnFfaWR4ID0gQVRIMTJLX1BDSV9JUlFfQ0UwX09GRlNFVCAmIzQzOyBpOwomIzQzOwkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2lkeF0sICZhbXA7YWItJmd0O2NlLmNlX3BpcGVbaV0pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fZXh0X2lycV9ncnApCiB7CiAJaW50IGksIGo7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fZXh0X2lycV9ncnA7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBhdGgxMmtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKIAogCQlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspCkBAIC0zMzAsMTYgJiM0MzszNDMsOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiB7Ci0JaW50IGksIGlycV9pZHg7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgYWItJmd0O2h3X3BhcmFtcy0mZ3Q7Y2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCi0JCQljb250aW51ZTsKLQkJaXJxX2lkeCA9IEFUSDEyS19QQ0lfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTsKLQkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2lkeF0sICZhbXA7YWItJmd0O2NlLmNlX3BpcGVbaV0pOwotCX0KLQotCWF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiKTsKJiM0MzsJYXRoMTJrX3BjaV9mcmVlX2NlX2lycShhYiwgYWItJmd0O2h3X3BhcmFtcy0mZ3Q7Y2VfY291bnQpOwomIzQzOwlhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVgpOwogfQogCiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NlX2lycV9lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IGNlX2lkKQpAQCAtNTk1LDggJiM0Mzs2MDAsNiBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYikKIAogCQkJaXJxID0gYXRoMTJrX3BjaV9nZXRfbXNpX2lycShhYi0mZ3Q7ZGV2LCB2ZWN0b3IpOwogCi0JCQlhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSA9IGlycTsKLQogCQkJYXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19QQ0ksCiAJCQkJICAgJiMzNDtpcnE6JWQgZ3JvdXA6JWRcbiYjMzQ7LCBpcnEsIGkpOwogCkBAIC02MDcsMjIgJiM0Mzs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiAJCQlpZiAocmV0KSB7CiAJCQkJYXRoMTJrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdCBpcnEgJWQ6ICVkXG4mIzM0OywKIAkJCQkJICAgdmVjdG9yLCByZXQpOwotCQkJCWdvdG8gZmFpbF9yZXF1ZXN0OwomIzQzOwomIzQzOwkJCQlmb3IgKG4gPSAwOyBuICZsdDsgajsgbiYjNDM7JiM0MzspCiYjNDM7CQkJCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfZ3JwLSZndDtpcnFzW25dXSwgaXJxX2dycCk7CiYjNDM7CiYjNDM7CQkJCW5ldGlmX25hcGlfZGVsKCZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldLm5hcGkpOwomIzQzOwkJCQlmcmVlX25ldGRldihhYi0mZ3Q7ZXh0X2lycV9ncnBbaV0ubmFwaV9uZGV2KTsKJiM0MzsJCQkJZ290byBmYWlsX2FsbG9jYXRlOwogCQkJfQomIzQzOwomIzQzOwkJCWFiLSZndDtpcnFfbnVtW2lycV9pZHhdID0gaXJxOwogCQl9CiAJCWF0aDEya19wY2lfZXh0X2dycF9kaXNhYmxlKGlycV9ncnApOwogCX0KIAogCXJldHVybiAwOwogCi1mYWlsX3JlcXVlc3Q6Ci0JLyogaSAtJmd0O25hcGlfbmRldiB3YXMgcHJvcGVybHkgYWxsb2NhdGVkLiBGcmVlIGl0IGFsc28gKi8KLQlpICYjNDM7PSAxOwogZmFpbF9hbGxvY2F0ZToKLQlmb3IgKG4gPSAwOyBuICZsdDsgaTsgbiYjNDM7JiM0MzspIHsKLQkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW25dOwotCQlmcmVlX25ldGRldihpcnFfZ3JwLSZndDtuYXBpX25kZXYpOwotCX0KJiM0MzsJYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoYWIsIGkpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY3MSw2ICYjNDM7Njc2LDggQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYikKIAkJaWYgKHJldCkgewogCQkJYXRoMTJrX2VycihhYiwgJiMzNDtmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4mIzM0OywKIAkJCQkgICBpcnFfaWR4LCByZXQpOwomIzQzOwomIzQzOwkJCWF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGkpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCkBAIC02ODEsOCAmIzQzOzY4OCwxMCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCX0KIAogCXJldCA9IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoYWIpOwotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGFiLSZndDtod19wYXJhbXMtJmd0O2NlX2NvdW50KTsKIAkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIEFzc2Vzc21lbnQ6IEF0aDEyayBQQ0kgSVJRIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGZvciBgYXRoMTJrL3BjaS5jYCwgc3BlY2lmaWNhbGx5IHRvdWNoaW5nIElSUSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBpbiB0aGUgYXRoMTJrIFBDSSBkcml2ZXIuIFRoaXMgaXMgUXVhbGNvbW0gV2ktRmkgNyBoYXJkd2FyZSwgc28gZGVmaW5pdGVseSB2ZW5kb3Itc3BlY2lmaWMuIFRoZSBxdWVzdGlvbiBpczogd29ydGggZnV6emluZz8KClRoZSBwcm9tcHQmIzM5O3MgZXhjbHVzaW9uIGNyaXRlcmlhIHNwZWNpZmljYWxseSB0YXJnZXRzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBJcyBgYXRoMTJrYCBvbmUgb2YgdGhvc2U/IFllcywgaXQmIzM5O3MgdmVuZG9yLXNwZWNpZmljLCBhbmQgeWVzLCBpdCYjMzk7cyBhIFBDSSBXaS1GaSBkcml2ZXIsIHNvIGl0IG5lZWRzIHNwZWNpZmljIGhhcmR3YXJlLiBJdCYjMzk7cyBub3QgYSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgdGhvdWdoLgoKQ2FuIEkgZnV6eiBpdCBzb21laG93IHVzaW5nIGVtdWxhdGlvbj8gYG1hYzgwMjExX2h3c2ltYCBpcyBvdXQsIHRoYXQmIzM5O3Mgc29mdHdhcmUtYmFzZWQgYW5kIGRvZXNuJiMzOTt0IHRvdWNoIHRoaXMuIFBDSSBXaS1GaSBkcml2ZXJzIGFyZSBnZW5lcmFsbHkgYSBwYWluIHRvIGZ1enogdW5sZXNzIHRoZXJlIGlzIGRlZGljYXRlZCBRRU1VIG9yIHRoZXkgYXJlIFVTQi4KClRoZSBleGNsdXNpb24gY3JpdGVyaWEgbWFrZSBtZSBxdWVzdGlvbiBpdHMgZmVhc2liaWxpdHkgYmVjYXVzZSBhdGgxMmsgbmVlZHMgc3BlY2lmaWMgaGFyZHdhcmUuIFN5emthbGxlciBtaWdodCBoYXZlIHNvbWUgUENJIGZ1enppbmcsIGJ1dCBpdCYjMzk7cyBvZnRlbiBsaW1pdGVkLCBhbmQgdGhpcyBwYXRjaCBkZWFscyB3aXRoIGRldmljZSBwcm9iZS4gV2l0aG91dCB0aGUgcmlnaHQgaGFyZHdhcmUsIHRoZSBwcm9iZSB3b24mIzM5O3QgZXZlbiBoYXBwZW4sIG9yIGl0JiMzOTtsbCBlcnJvciBvdXQgZWFybHkuIEkgY2FuIGRvdWJsZS1jaGVjayB0aGUga2VybmVsIHNvdXJjZSwgYnV0IHJlYWxpc3RpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgdGhpcyBpcyBnb2luZyB0byBiZSBkaWZmaWN1bHQgdG8gZnV6ei4gQmFzZWQgb24gdGhlIGV4Y2x1c2lvbiBjcml0ZXJpYSBpdCBzZWVtcyBsaWtlIHRoaXMgaXMgbm90IHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM1MzExIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9Mj1jb25maWcgQVRIMTJLXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MzpcdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIE1BQzgwMjExIFx1MDAyNlx1MDAyNiBIQVNfRE1BIFx1MDAyNlx1MDAyNiBQQ0lcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MTU6XHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0JiMzOTtsbCBiZSBjYWxsZWQgYXRoMTJrLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnPTE3PWNvbmZpZyBBVEgxMktfQUhCXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MTg6XHRib29sIFwmIzM0O1F1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE5LVx0ZGVwZW5kcyBvbiBBVEgxMksgXHUwMDI2XHUwMDI2IFJFTU9URVBST0Ncbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9MjU9Y29uZmlnIEFUSDEyS19ERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjI2Olx0Ym9vbCBcJiMzNDthdGgxMmsgZGVidWdnaW5nXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjctXHRkZXBlbmRzIG9uIEFUSDEyS1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZz0zNT1jb25maWcgQVRIMTJLX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzozNjpcdGJvb2wgXCYjMzQ7UXVhbGNvbW0gYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM3LVx0ZGVwZW5kcyBvbiBBVEgxMksgXHUwMDI2XHUwMDI2IE1BQzgwMjExX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zOC1cdGhlbHBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzozOTpcdCAgRW5hYmxlIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00MC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9NDQ9Y29uZmlnIEFUSDEyS19UUkFDSU5HXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NDU6XHRib29sIFwmIzM0O2F0aDEyayB0cmFjaW5nIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00Ni1cdGRlcGVuZHMgb24gQVRIMTJLIFx1MDAyNlx1MDAyNiBFVkVOVF9UUkFDSU5HXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDctXHRoZWxwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NDg6XHQgIEVuYWJsZSBhdGgxMmsgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00OS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9NTM9Y29uZmlnIEFUSDEyS19DT1JFRFVNUFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjU0Olx0Ym9vbCBcJiMzNDthdGgxMmsgY29yZWR1bXBcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01NS1cdGRlcGVuZHMgb24gQVRIMTJLXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTU3LVx0aGVscFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjU4Olx0ICBFbmFibGUgYXRoMTJrIGNvcmVkdW1wIGNvbGxlY3Rpb25cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01OS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0FUSDEySykgJiM0Mzs9IGF0aDEyay5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjM6YXRoMTJrLXkgJiM0Mzs9IGNvcmUubyBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS00LVx0ICAgIGhhbC5vIFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS0yNC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU6MjU6YXRoMTJrLSQoQ09ORklHX0FUSDEyS19BSEIpICYjNDM7PSBhaGIub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS0yNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX0FUSDEySykgJiM0Mzs9IHdpZmk3L1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS0yOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU6Mjk6YXRoMTJrLSQoQ09ORklHX0FUSDEyS19ERUJVR0ZTKSAmIzQzOz0gZGVidWdmcy5vIGRlYnVnZnNfaHR0X3N0YXRzLm8gZGVidWdmc19zdGEub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozMDphdGgxMmstJChDT05GSUdfQUNQSSkgJiM0Mzs9IGFjcGkub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozMTphdGgxMmstJChDT05GSUdfQVRIMTJLX1RSQUNJTkcpICYjNDM7PSB0cmFjZS5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjMyOmF0aDEyay0kKENPTkZJR19QTSkgJiM0Mzs9IHdvdy5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjMzOmF0aDEyay0kKENPTkZJR19BVEgxMktfQ09SRURVTVApICYjNDM7PSBjb3JlZHVtcC5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjM0OmF0aDEyay0kKENPTkZJR19OTDgwMjExX1RFU1RNT0RFKSAmIzQzOz0gdGVzdG1vZGUub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozNTphdGgxMmstJChDT05GSUdfVEhFUk1BTCkgJiM0Mzs9IHRoZXJtYWwub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS0zNi1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjExOnN0YXRpYyBpbnQgYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBmdW5jKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE4LVx0aWYgKCFyb290X2hhbmRsZSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTk6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXCYjMzQ7aW52YWxpZCBhY3BpIGhhbmRsZXJcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjAtXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNi1cdGlmICghb2JqKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNzpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcJiMzNDthY3BpX2V2YWx1YXRlX2RzbSgpIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yOC1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDYtXHRcdFx0XHQgICBBVEgxMktfQUNQSV9CREZfQU5DSE9SX1NUUklOR19MRU4pKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0NzpcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtpbnZhbGlkIEFDUEkgRFNNIEJERiBzaXplOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ4LVx0XHRcdFx0XHQgICAgb2JqLVx1MDAzZXN0cmluZy5sZW5ndGgpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTYyLVx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCBcdTAwM2UgQVRIMTJLX0FDUElfRFNNX0ZVTkNfTUFYX0JJVE1BUF9TSVpFKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo2MzpcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtpbnZhbGlkIEFDUEkgRFNNIGZ1bmMgc2l6ZTogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy02NC1cdFx0XHRcdFx0ICAgIG9iai1cdTAwM2VidWZmZXIubGVuZ3RoKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy03NS1cdFx0XHRpZiAob2JqLVx1MDAzZWJ1ZmZlci5sZW5ndGggIT0gQVRIMTJLX0FDUElfRFNNX1RBU19DRkdfU0laRSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NzY6XHRcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7aW52YWxpZCBBQ1BJIERTTSBUQVMgY29uZmlnIHNpemU6ICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNzctXHRcdFx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtODctXHRcdFx0aWYgKG9iai1cdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9UQVNfREFUQV9TSVpFKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo4ODpcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtpbnZhbGlkIEFDUEkgRFNNIFRBUyBkYXRhIHNpemU6ICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtODktXHRcdFx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtOTktXHRcdFx0aWYgKG9iai1cdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9CSU9TX1NBUl9EQVRBX1NJWkUpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjEwMDpcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtpbnZhbGlkIEFDUEkgQklPUyBTQVIgZGF0YSBzaXplOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTEwMS1cdFx0XHRcdFx0ICAgIG9iai1cdTAwM2VidWZmZXIubGVuZ3RoKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMTEtXHRcdFx0aWYgKG9iai1cdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9HRU9fT0ZGU0VUX0RBVEFfU0laRSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTEyOlx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ludmFsaWQgQUNQSSBHRU8gT0ZGU0VUIGRhdGEgc2l6ZTogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMTMtXHRcdFx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTIzLVx0XHRcdGlmIChvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCAhPSBBVEgxMktfQUNQSV9EU01fQ0NBX0RBVEFfU0laRSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTI0Olx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ludmFsaWQgQUNQSSBEU00gQ0NBIGRhdGEgc2l6ZTogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMjUtXHRcdFx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTM1LVx0XHRcdGlmIChvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCAhPSBBVEgxMktfQUNQSV9EU01fQkFORF9FREdFX0RBVEFfU0laRSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTM2Olx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ludmFsaWQgQUNQSSBEU00gYmFuZCBlZGdlIGRhdGEgc2l6ZTogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMzctXHRcdFx0XHRcdCAgICBvYmotXHUwMDNlYnVmZmVyLmxlbmd0aCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTQ3LVx0fSBlbHNlIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjE0ODpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O0FDUEkgRFNNIG1ldGhvZCByZXR1cm5lZCBhbiB1bnN1cHBvcnRlZCBvYmplY3QgdHlwZTogJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNDktXHRcdFx0ICAgIG9iai1cdTAwM2V0eXBlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNjAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxNjE6c3RhdGljIGludCBhdGgxMmtfYWNwaV9zZXRfcG93ZXJfbGltaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE2Mi17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTY3LVx0ICAgIHRhc19zYXJfcG93ZXJfdGFibGVbMV0gIT0gQVRIMTJLX0FDUElfVEFTX0RBVEFfRU5BQkxFKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxNjg6XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtsYXRlc3QgQUNQSSBUQVMgZGF0YSBpcyBpbnZhbGlkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE2OS1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTcxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTcyOlx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfYmlvc19jbWQoYWIsIFdNSV9CSU9TX1BBUkFNX1RBU19EQVRBX1RZUEUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNzMtXHRcdFx0XHQgICAgICB0YXNfc2FyX3Bvd2VyX3RhYmxlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE3NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjE3NjpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBzZW5kIEFDUEkgVEFTIGRhdGEgdGFibGU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTc3LVx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE4Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjE4MzpzdGF0aWMgaW50IGF0aDEya19hY3BpX3NldF9iaW9zX3Nhcl9wb3dlcihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTg0LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xODgtXHQgICAgYWItXHUwMDNlYWNwaS5iaW9zX3Nhcl9kYXRhWzFdICE9IEFUSDEyS19BQ1BJX1BPV0VSX0xJTUlUX0VOQUJMRV9GTEFHKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxODk6XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtpbnZhbGlkIGxhdGVzdCBBQ1BJIEJJT1MgU0FSIGRhdGFcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTkwLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xOTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxOTM6XHRyZXQgPSBhdGgxMmtfd21pX3NldF9iaW9zX3Nhcl9jbWQoYWIsIGFiLVx1MDAzZWFjcGkuYmlvc19zYXJfZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xOTQtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxOTU6XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2V0IEFDUEkgQklPUyBTQVIgdGFibGU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTk2LVx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIwMjpzdGF0aWMgdm9pZCBhdGgxMmtfYWNwaV9kc21fbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjAzLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwNC1cdGludCByZXQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMDU6XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gZGF0YTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwNy1cdGlmIChldmVudCA9PSBBVEgxMktfQUNQSV9OT1RJRllfRVZFTlQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIwODpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O3Vua25vd24gYWNwaSBub3RpZnkgJXVcXG5cJiMzNDssIGV2ZW50KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwOS1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIxMi1cdGlmICghYWItXHUwMDNlYWNwaS5hY3BpX3Rhc19lbmFibGUpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIxMzpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcJiMzNDthY3BpX3Rhc19lbmFibGUgaXMgZmFsc2VcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjE0LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjE3Olx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19UQVNfREFUQSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMTgtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMTk6XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gdXBkYXRlIEFDUEkgVEFTIGRhdGEgdGFibGU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjIwLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjIyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjIzOlx0cmV0ID0gYXRoMTJrX2FjcGlfc2V0X3Bvd2VyX2xpbWl0KGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIyNC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIyNTpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBzZXQgQUNQSSBUQVMgcG93ZXIgbGltaXQgZGF0YTogJWRcJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMjYtXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMzI6XHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0JJT1NfU0FSKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIzMy1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIzNDpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byB1cGRhdGUgQklPUyBTQVI6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjM1LVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjM4Olx0cmV0ID0gYXRoMTJrX2FjcGlfc2V0X2Jpb3Nfc2FyX3Bvd2VyKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIzOS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI0MDpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBzZXQgQklPUyBTQVIgcG93ZXIgbGltaXQ6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjQxLVx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjQ1OnN0YXRpYyBpbnQgYXRoMTJrX2FjcGlfc2V0X2Jpb3Nfc2FyX3BhcmFtcyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjQ2LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNDgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNDk6XHRyZXQgPSBhdGgxMmtfd21pX3NldF9iaW9zX3Nhcl9jbWQoYWIsIGFiLVx1MDAzZWFjcGkuYmlvc19zYXJfZGF0YSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNTAtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNTE6XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2V0IEFDUEkgQklPUyBTQVIgdGFibGU6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjUyLVx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI1NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI1NTpcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3NfZ2VvX2NtZChhYiwgYWItXHUwMDNlYWNwaS5nZW9fb2Zmc2V0X2RhdGEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjU2LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjU3Olx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCBBQ1BJIEJJT1MgR0VPIHRhYmxlOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI1OC1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNjQ6c3RhdGljIGludCBhdGgxMmtfYWNwaV9zZXRfdGFzX3BhcmFtcyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjY1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNjctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNjg6XHRyZXQgPSBhdGgxMmtfd21pX3NldF9iaW9zX2NtZChhYiwgV01JX0JJT1NfUEFSQU1fVEFTX0NPTkZJR19UWVBFLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjY5LVx0XHRcdFx0ICAgICAgYWItXHUwMDNlYWNwaS50YXNfY2ZnLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI3MS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI3MjpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBzZW5kIEFDUEkgVEFTIGNvbmZpZyB0YWJsZSBwYXJhbWV0ZXI6ICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjczLVx0XHRcdCAgICByZXQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI3Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI3NzpcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3NfY21kKGFiLCBXTUlfQklPU19QQVJBTV9UQVNfREFUQV9UWVBFLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjc4LVx0XHRcdFx0ICAgICAgYWItXHUwMDNlYWNwaS50YXNfc2FyX3Bvd2VyX3RhYmxlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI4MC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI4MTpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBzZW5kIEFDUEkgVEFTIGRhdGEgdGFibGUgcGFyYW1ldGVyOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI4Mi1cdFx0XHQgICAgcmV0KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yODgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyODk6Ym9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV9yZmtpbGwoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI5MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjkzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mjk0OmJvb2wgYXRoMTJrX2FjcGlfZ2V0X2Rpc2FibGVfMTFiZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjk1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yOTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyOTk6dm9pZCBhdGgxMmtfYWNwaV9zZXRfZHNtX2Z1bmMoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMwMC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzA4LVx0aWYgKGFiLVx1MDAzZWFjcGkuYWNwaV90YXNfZW5hYmxlKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozMDk6XHRcdHJldCA9IGF0aDEya19hY3BpX3NldF90YXNfcGFyYW1zKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMxMC1cdFx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MzExOlx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2VuZCBBQ1BJIFRBUyBwYXJhbWV0ZXJzOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMxMi1cdFx0XHRyZXR1cm47XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzE2LVx0aWYgKGFiLVx1MDAzZWFjcGkuYWNwaV9iaW9zX3Nhcl9lbmFibGUpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjMxNzpcdFx0cmV0ID0gYXRoMTJrX2FjcGlfc2V0X2Jpb3Nfc2FyX3BhcmFtcyhhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMTgtXHRcdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjMxOTpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNlbmQgQUNQSSBCSU9TIFNBUjogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMjAtXHRcdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMyNS1cdFx0YnVmID0gYWItXHUwMDNlYWNwaS5jY2FfZGF0YSAmIzQzOyBBVEgxMktfQUNQSV9DQ0FfVEhSX09GRlNFVF9EQVRBX09GRlNFVDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjMyNjpcdFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfYmlvc19jbWQoYWIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMjctXHRcdFx0XHRcdCAgICAgIFdNSV9CSU9TX1BBUkFNX0NDQV9USFJFU0hPTERfVFlQRSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMzAtXHRcdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjMzMTpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNldCBBQ1BJIERTTSBDQ0EgdGhyZXNob2xkOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMzMi1cdFx0XHRcdCAgICByZXQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMzNy1cdGlmIChhYi1cdTAwM2VhY3BpLmFjcGlfYmFuZF9lZGdlX2VuYWJsZSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MzM4Olx0XHRyZXQgPSBhdGgxMmtfd21pX3NldF9iaW9zX2NtZChhYixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMzOS1cdFx0XHRcdFx0ICAgICAgV01JX0JJT1NfUEFSQU1fVFlQRV9CQU5ERURHRSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNDItXHRcdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM0MzpcdFx0XHRhdGgxMmtfd2FybihhYixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM0NC1cdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gc2V0IEFDUEkgRFNNIGJhbmQgZWRnZSBjaGFubmVsIHBvd2VyOiAlZFxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozNTE6aW50IGF0aDEya19hY3BpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNTIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM2OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM2OTpcdHJldCA9IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShhYiwgQVRIMTJLX0FDUElfRFNNX0ZVTkNfU1VQUE9SVF9GVU5DUyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzAtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozNzE6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBBQ1BJIERTTSBkYXRhOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM3Mi1cdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzUtXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfRElTQUJMRV9GTEFHKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mzc2Olx0XHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0RJU0FCTEVfRkxBRyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzctXHRcdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM3ODpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBBQ1BJIERJU0FCTEUgRkxBRzogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzktXHRcdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zOTEtXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfQkRGX0VYVCkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM5MjpcdFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19CREZfRVhUKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM5My1cdFx0aWYgKHJldCB8fCBhYi1cdTAwM2VhY3BpLmJkZl9zdHJpbmdbMF0gPT0gJiMzOTtcXDAmIzM5Oykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mzk0Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IEFDUEkgQkRGIEVYVDogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zOTUtXHRcdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MDEtXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfVEFTX0NGRykpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQwMjpcdFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19UQVNfQ0ZHKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQwMy1cdFx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDA0Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IEFDUEkgVEFTIGNvbmZpZyB0YWJsZTogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MDUtXHRcdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MDktXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfVEFTX0RBVEEpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MTA6XHRcdHJldCA9IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShhYiwgQVRIMTJLX0FDUElfRFNNX0ZVTkNfVEFTX0RBVEEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDExLVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MTI6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUNQSSBUQVMgZGF0YSB0YWJsZTogJWRcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MTMtXHRcdFx0cmV0dXJuIHJldDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MjItXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfQklPU19TQVIpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MjM6XHRcdHJldCA9IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShhYiwgQVRIMTJLX0FDUElfRFNNX0ZVTkNfQklPU19TQVIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDI0LVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MjU6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUNQSSBiaW9zIHNhciBkYXRhOiAlZFxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQyNi1cdFx0XHRyZXR1cm4gcmV0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQzMC1cdGlmIChBVEgxMktfQUNQSV9GVU5DX0JJVF9WQUxJRChhYi1cdTAwM2VhY3BpLCBBVEgxMktfQUNQSV9GVU5DX0JJVF9HRU9fT0ZGU0VUKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDMxOlx0XHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0dFT19PRkZTRVQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDMyLVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MzM6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUNQSSBnZW8gb2Zmc2V0IGRhdGE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDM0LVx0XHRcdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDQ0LVx0aWYgKEFUSDEyS19BQ1BJX0ZVTkNfQklUX1ZBTElEKGFiLVx1MDAzZWFjcGksIEFUSDEyS19BQ1BJX0ZVTkNfQklUX0NDQSkpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ0NTpcdFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19JTkRFWF9DQ0EpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDQ2LVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0NDc6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUNQSSBEU00gQ0NBIHRocmVzaG9sZCBjb25maWd1cmF0aW9uOiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ0OC1cdFx0XHRcdCAgICByZXQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ1OS1cdFx0XHRcdCAgICAgICBBVEgxMktfQUNQSV9GVU5DX0JJVF9CQU5EX0VER0VfQ0hBTl9QT1dFUikpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ2MDpcdFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19JTkRFWF9CQU5EX0VER0UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDYxLVx0XHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0NjI6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgQUNQSSBEU00gYmFuZCBlZGdlIGNoYW5uZWwgcG93ZXI6ICVkXFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDYzLVx0XHRcdFx0ICAgIHJldCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDczLVx0XHRcdFx0XHQgICAgIEFDUElfREVWSUNFX05PVElGWSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ3NDpcdFx0XHRcdFx0ICAgICBhdGgxMmtfYWNwaV9kc21fbm90aWZ5LCBhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NzUtXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ3NjpcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O2ZhaWxlZCB0byBpbnN0YWxsIERTTSBub3RpZnkgY2FsbGJhY2s6ICVkXFxuXCYjMzQ7LCBzdGF0dXMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDc3LVx0XHRyZXR1cm4gLUVJTztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00ODQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0ODU6aW50IGF0aDEya19hY3BpX2NoZWNrX2JkZl92YXJpYW50X25hbWUoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ4Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDkyLVx0aWYgKHN0cnNjcHkoYWItXHUwMDNlcW1pLnRhcmdldC5iZGZfZXh0LCBhYi1cdTAwM2VhY3BpLmJkZl9zdHJpbmcgJiM0MzsgNCwgbWF4X2xlbikgXHUwMDNjIDApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0OTM6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ5NC1cdFx0XHQgICBcJiMzNDthY3BpIGJkZiB2YXJpYW50IGxvbmdlciB0aGFuIHRoZSBidWZmZXIgKHZhcmlhbnQ6ICVzKVxcblwmIzM0Oyxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00OTktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo1MDA6dm9pZCBhdGgxMmtfYWNwaV9zdG9wKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy01MDEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTUwNi1cdFx0XHRcdCAgIEFDUElfREVWSUNFX05PVElGWSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjUwNzpcdFx0XHRcdCAgIGF0aDEya19hY3BpX2RzbV9ub3RpZnkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNTA4LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTc0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6NzU6aW50IGF0aDEya19hY3BpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6NzY6dm9pZCBhdGgxMmtfYWNwaV9zdG9wKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6Nzc6Ym9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV9yZmtpbGwoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo3ODpib29sIGF0aDEya19hY3BpX2dldF9kaXNhYmxlXzExYmUoc3RydWN0IGF0aDEya19iYXNlICphYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo3OTp2b2lkIGF0aDEya19hY3BpX3NldF9kc21fZnVuYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjgwOmludCBhdGgxMmtfYWNwaV9jaGVja19iZGZfdmFyaWFudF9uYW1lKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtODEtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtODMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo4NDpzdGF0aWMgaW5saW5lIGludCBhdGgxMmtfYWNwaV9zdGFydChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtODUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTg4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6ODk6c3RhdGljIGlubGluZSB2b2lkIGF0aDEya19hY3BpX3N0b3Aoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTkwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC05Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjkzOnN0YXRpYyBpbmxpbmUgYm9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV9yZmtpbGwoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTk0LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC05Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjk4OnN0YXRpYyBpbmxpbmUgYm9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV8xMWJlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC05OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtMTAyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6MTAzOnN0YXRpYyBpbmxpbmUgdm9pZCBhdGgxMmtfYWNwaV9zZXRfZHNtX2Z1bmMoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTEwNC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtMTA2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6MTA3OnN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19hY3BpX2NoZWNrX2JkZl92YXJpYW50X25hbWUoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTEwOC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjM6c3RhdGljIHN0cnVjdCBhdGgxMmtfYWhiX2RyaXZlciAqYXRoMTJrX2FoYl9mYW1pbHlfZHJpdmVyc1tBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVhdO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNDpzdGF0aWMgY29uc3QgY2hhciBhdGgxMmtfdXNlcnBkX2lycVtdWzldID0ge1wmIzM0O3NwYXduXCYjMzQ7LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNS1cdFx0XHRcdCAgICAgXCYjMzQ7cmVhZHlcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMS0gKiBPbmUgUTYgUm9vdFBEIChtYW5hZ2VkIGJ5IHNlcGFyYXRlIHJwcm9jIGRyaXZlcikgc3VwcG9ydHMgbXVsdGlwbGVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzI6ICogYXRoMTJrIFVzZXJQRHMuIEVhY2ggVXNlclBEIHJlcHJlc2VudHMgYSBXaUZpIHJhZGlvIGluc3RhbmNlLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMy0gKlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMzgtICogTG9ja2luZzpcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mzk6ICogIC0gYXRoMTJrX3Jwcm9jX2luZm9fbG9jazogUHJvdGVjdHMgZ19ycHJvY19pbmZvIGFsbG9jYXRpb24vZnJlZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy00MC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6NDE6c3RhdGljIHN0cnVjdCBhdGgxMmtfYWhiX3Jwcm9jX2luZm8gKmdfcnByb2NfaW5mbztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6NDI6c3RhdGljIERFRklORV9NVVRFWChhdGgxMmtfcnByb2NfaW5mb19sb2NrKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtNDMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDA9ZW51bSBleHRfaXJxX251bSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE0MDpzdGF0aWMgdTMyIGF0aDEya19haGJfcmVhZDMyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUzMiBvZmZzZXQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE0MS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNDYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE0NzpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX3dyaXRlMzIoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTMyIG9mZnNldCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTQ4LVx0XHRcdCAgICAgICB1MzIgdmFsdWUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE1NjpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX2NhbmNlbF93b3JrcXVldWUoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTU3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE2MC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VjZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTYxOlx0XHRzdHJ1Y3QgYXRoMTJrX2NlX3BpcGUgKmNlX3BpcGUgPSBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNjItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE2MzpcdFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE2NC1cdFx0XHRjb250aW51ZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE2OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTcwOnN0YXRpYyB2b2lkIGF0aDEya19haGJfZXh0X2dycF9kaXNhYmxlKHN0cnVjdCBhdGgxMmtfZXh0X2lycV9ncnAgKmlycV9ncnApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE3MS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE3ODpzdGF0aWMgdm9pZCBfX2F0aDEya19haGJfZXh0X2lycV9kaXNhYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE3OS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xODItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTgzOlx0XHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE4NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTg1Olx0XHRhdGgxMmtfYWhiX2V4dF9ncnBfZGlzYWJsZShpcnFfZ3JwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTg2LVx0XHRpZiAoaXJxX2dycC1cdTAwM2VuYXBpX2VuYWJsZWQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE5My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTk0OnN0YXRpYyB2b2lkIGF0aDEya19haGJfZXh0X2dycF9lbmFibGUoc3RydWN0IGF0aDEya19leHRfaXJxX2dycCAqaXJxX2dycClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTk1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIwMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjAyOnN0YXRpYyB2b2lkIGF0aDEya19haGJfc2V0Yml0MzIoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTggYml0LCB1MzIgb2Zmc2V0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMDMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjA1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMDY6XHR2YWwgPSBhdGgxMmtfYWhiX3JlYWQzMihhYiwgb2Zmc2V0KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjA3Olx0YXRoMTJrX2FoYl93cml0ZTMyKGFiLCBvZmZzZXQsIHZhbCB8IEJJVChiaXQpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjA4LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjA5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMTA6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9jbGVhcmJpdDMyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHU4IGJpdCwgdTMyIG9mZnNldClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjExLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIxMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjE0Olx0dmFsID0gYXRoMTJrX2FoYl9yZWFkMzIoYWIsIG9mZnNldCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjIxNTpcdGF0aDEya19haGJfd3JpdGUzMihhYiwgb2Zmc2V0LCB2YWwgXHUwMDI2IH5CSVQoYml0KSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIxNi19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIxNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjE4OnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxX2VuYWJsZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MTYgY2VfaWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIxOS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMjktXHRpZiAoY2VfYXR0ci1cdTAwM2VzcmNfbmVudHJpZXMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjIzMDpcdFx0YXRoMTJrX2FoYl9zZXRiaXQzMihhYiwgY2VfaWQsIGllMV9yZWdfYWRkcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjMyLVx0aWYgKGNlX2F0dHItXHUwMDNlZGVzdF9uZW50cmllcykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMzM6XHRcdGF0aDEya19haGJfc2V0Yml0MzIoYWIsIGNlX2lkLCBpZTJfcmVnX2FkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMzQ6XHRcdGF0aDEya19haGJfc2V0Yml0MzIoYWIsIGNlX2lkICYjNDM7IENFX0hPU1RfSUVfM19TSElGVCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjM1LVx0XHRcdFx0ICAgIGllM19yZWdfYWRkcik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjIzOTpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX2NlX2lycV9kaXNhYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUxNiBjZV9pZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjQwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI1MC1cdGlmIChjZV9hdHRyLVx1MDAzZXNyY19uZW50cmllcylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjUxOlx0XHRhdGgxMmtfYWhiX2NsZWFyYml0MzIoYWIsIGNlX2lkLCBpZTFfcmVnX2FkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNTItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI1My1cdGlmIChjZV9hdHRyLVx1MDAzZWRlc3RfbmVudHJpZXMpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjU0Olx0XHRhdGgxMmtfYWhiX2NsZWFyYml0MzIoYWIsIGNlX2lkLCBpZTJfcmVnX2FkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNTU6XHRcdGF0aDEya19haGJfY2xlYXJiaXQzMihhYiwgY2VfaWQgJiM0MzsgQ0VfSE9TVF9JRV8zX1NISUZULFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNTYtXHRcdFx0XHQgICAgICBpZTNfcmVnX2FkZHIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjU5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNjA6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9zeW5jX2NlX2lycXMoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjYxLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI2NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VjZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjY2Olx0XHRpZiAoYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjY3LVx0XHRcdGNvbnRpbnVlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjczLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNzQ6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9zeW5jX2V4dF9pcnFzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI3NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNzktXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjgwOlx0XHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI4MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mjg5OnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxc19lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjkwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VjZV9jb3VudDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mjk0Olx0XHRpZiAoYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjk1LVx0XHRcdGNvbnRpbnVlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyOTY6XHRcdGF0aDEya19haGJfY2VfaXJxX2VuYWJsZShhYiwgaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5Ny1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzAwOnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxc19kaXNhYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTMwMS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMDQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjMwNTpcdFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTMwNi1cdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzA3Olx0XHRhdGgxMmtfYWhiX2NlX2lycV9kaXNhYmxlKGFiLCBpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMzA4LVx0fVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMzEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMTE6c3RhdGljIGludCBhdGgxMmtfYWhiX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTMxMi17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjMxMzpcdGF0aDEya19haGJfY2VfaXJxc19lbmFibGUoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMTQ6XHRhdGgxMmtfY2VfcnhfcG9zdF9idWYoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMTUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMTgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjMxOTpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX2V4dF9pcnFfZW5hYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIxMgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDc1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIHRoZSBhdGgxMmsgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgYGF0aDEya2AgZHJpdmVyLiBJdCBhcHBlYXJzIHRvIG1vZGlmeSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY2AsIHdoaWNoIHRlbGxzIG1lIGl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIFBDSSBpbXBsZW1lbnRhdGlvbi4gVGhlIHByb21wdCYjMzk7cyBjcml0ZXJpYSBoYXZlIG1lIHRoaW5raW5nLgoKRmlyc3QsIGlzIHRoaXMgdmVuZG9yLXNwZWNpZmljIFBDSWUgY29kZSB0aGF0IHJlbGllcyBvbiBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVT8gWWVzLCBgYXRoMTJrYCBpcyBhIFF1YWxjb21tIFdpLUZpIDcgZHJpdmVyLCBzbyBpdCBkZWZpbml0ZWx5IG5lZWRzIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgKG9yIHBvdGVudGlhbGx5IEFIQiBmb3IgU29DcykuIGBtYWM4MDIxMV9od3NpbWAgaXNuJiMzOTt0IGdvaW5nIHRvIGhlbHAgaGVyZTsgdGhhdCYjMzk7cyBhIHNvZnR3YXJlIHNpbXVsYXRvciB0aGF0IGRvZXNuJiMzOTt0IGludGVyYWN0IHdpdGggYGF0aDEya2AuIFBDSSBXaS1GaSBkcml2ZXJzLCBpbiBnZW5lcmFsLCBhcmUgdG91Z2ggdG8gZnV6eiB1bmxlc3Mgd2UgaGF2ZSBhIHNwZWNpZmljIFFFTVUgc2V0dXAgb3IgaXQmIzM5O3MgYSBVU0IgZHJpdmVyIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkuCgpUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyBleGNsdWRpbmcgJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4mIzM0OyBOb3csIGBhdGgxMmtgIGlzIGEgKnZlbmRvci1zcGVjaWZpYyogUENJZSBXaS1GaSBkcml2ZXIsIHNvIGl0IHNvcnQgb2YgZml0cyB0aGUgZGVzY3JpcHRpb24uIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgaW50ZW50IGJlaGluZCB0aGUgcHJvbXB0IGVuY29tcGFzcyBkcml2ZXJzIGxpa2UgdGhpcz8gSXQgZG9lc24mIzM5O3QgZXhwbGljaXRseSBtZW50aW9uIFdpLUZpLgoKSSBuZWVkIHRvIGxvb2sgY2xvc2VyIGF0IHdoYXQmIzM5O3MgYmVpbmcgbW9kaWZpZWQuIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGlzIGJlaW5nIHRvdWNoZWQsIGFuZCB0aGF0JiMzOTtzIGNhbGxlZCBkdXJpbmcgZGV2aWNlIHByb2JlLiBXaXRob3V0IHRoZSBjb3JyZWN0IGhhcmR3YXJlLCB0aGUgcHJvYmUgZWl0aGVyIHdvbiYjMzk7dCBiZSBjYWxsZWQsIG9yIGl0IHdpbGwgZmFpbCBlYXJseS4gSWYgdGhlIHByb2JlIGZhaWxzLCB0aGF0IHdvdWxkIG1lYW4gdGhhdCB0aGlzIHBhdGggaXMgaW5hY2Nlc3NpYmxlIGluIGEgc3RhbmRhcmQgUUVNVSBzZXR1cCwgd2hpY2ggd291bGQgaW5kaWNhdGUgYFdvcnRoRnV6emluZz1mYWxzZWAuCgpIb3dldmVyLCBzeXprYWxsZXIgZG9lcyBoYXZlIGEgUENJIGZ1enplciwgd2hpY2ggaGFzIGdvdCBtZSB0aGlua2luZy4gSXQgaGFzIHRoZSBhYmlsaXR5IHRvIGVtdWxhdGUgUENJIGRldmljZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGNhbiBzdWNjZXNzZnVsbHkgZW11bGF0ZSB0aGUgcGFydHMgb2YgdGhlIGRldmljZSB0aGF0IHRoZSBgYXRoMTJrYCBkcml2ZXIgcmVxdWlyZXMuIElmIHRoZSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIHByb2JlIG9mIGF0aDEyaywgdGhlbiBpdCBtaWdodCBiZSByZWFjaGFibGUuIEkgbXVzdCBpbnZlc3RpZ2F0ZSBpZiBzeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBvciBzdXBwb3J0IGZvciBgYXRoMTJrYCB0byBzZWUgaWYgdGhpcyBpcyBwb3NzaWJsZS4gSWYgaXQgaXMsIHRoZW4gdGhlIHByb21wdCYjMzk7cyBleGNsdXNpb24gbWF5IG5vdCBhcHBseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEyayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O3N5cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDk2CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMjc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMqKgoKT2theSwgc28gdGhlIGdyZXBwZXIgdG9vbCBpcyB1c2VsZXNzIGZvciBkaWdnaW5nIGludG8gdGhlIGBzeXMvYCBkaXJlY3RvcnkgZm9yIHN5emxhbmcgZGVzY3JpcHRpb25zLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBxdWl0ZSBleHBsaWNpdCBhYm91dCB0aGF0LiBJdCYjMzk7cyBlc3NlbnRpYWxseSB0ZWxsaW5nIG1lLCAmIzM0O0RvbiYjMzk7dCBldmVuIGJvdGhlcjsgaXQgd29uJiMzOTt0IHdvcmsuJiMzNDsgQW5kIEkgaW1tZWRpYXRlbHkgc2VlIHRoZSBpc3N1ZTogSSBkb24mIzM5O3QgaGF2ZSB0aG9zZSBhbHRlcm5hdGl2ZSB0b29scywgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgLCBpbnN0YWxsZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4gVGhlIHN5c3RlbSBwcm9tcHQgcmVhbGx5IHNob3VsZCBoYXZlIG1lbnRpb25lZCB0aG9zZSB0b29scyBpZiBpdCYjMzk7cyBleHBlY3RpbmcgbWUgdG8gdXNlIHRoZW0gZm9yIHRoaXMgdGFzaywgc2luY2UgdGhlIGBnaXQgZ3JlcGAgZmxhZ3MgYXJlIGlycmVsZXZhbnQgaGVyZSEKClNvLCBJIG5lZWQgdG8gcGl2b3QuIEkgY2FuIHN0aWxsIHRyeSB0byB1bmRlcnN0YW5kIFBDSSBwcm9iZSByZWFjaGFiaWxpdHkgdGhvdWdoLgoKVGhlIGhpbnQgbGllcyBpbiB0aGVzZSBwYXRjaCBtb2RpZmljYXRpb25zOiBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBhbmQgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLiBMZXQgbWUgZGl2ZSBpbnRvIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBzcGVjaWZpY2FsbHksIGFzIHRoYXQgc2VlbXMgdGhlIG1vcmUgcmVsZXZhbnQgb2YgdGhlIHR3by4gSSYjMzk7bGwgY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz01MjM9c3RhdGljIGlycXJldHVybl90IGF0aDEya19wY2lfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTU0NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6NTQ1OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy01NDYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9NjQzPXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9jb25maWdfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy02ODktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjY5MDpcdHJldCA9IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy02OTEtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzODUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgdGhlIGF0aDEyayBQQ0kgSVJRIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYGF0aDEya19wY2lfY29uZmlnX2lycWAgaXMgZGVmaW5pdGVseSBwb3BwaW5nIHVwIGFzIGEgc3VzcGVjdC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBgYXRoMTJrX3BjaV9wcm9iZWA/JiMzNDsgVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgSVJRIGNvbmZpZ3VyYXRpb24sIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc3RhbmRhcmQgUENJIGluaXRpYWxpemF0aW9uIGZsb3cuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGNhbGwgZ3JhcGguIFRoZSBkcml2ZXLigJlzIGluaXRpYWxpemF0aW9uIGlzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIGNvbmZpZ3VyZSB0aGUgaW50ZXJydXB0cywgc28gdGhpcyBzaG91bGQgYmUgZWFzeSB0byBjb25maXJtLiBBIHF1aWNrIGNvZGUgZGl2ZSB0byB0cmFjZSB0aGUgY2FsbCBjaGFpbiBpcyBpbiBvcmRlciwgSSBzdXBwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX2NvbmZpZ19pcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9NjM0PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY0Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6NjQzOnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9jb25maWdfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY0NC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTQ4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2NDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE2NDM6XHRyZXQgPSBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjQ0LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkzNQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgU3l6a2FsbGVyIHRvIFRyaWdnZXIgYGF0aDEya19wY2lfY29uZmlnX2lycWAqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYGF0aDEya19wY2lfY29uZmlnX2lycWAgaXMgZGVmaW5pdGVseSBjYWxsZWQgZnJvbSB3aXRoaW4gYGF0aDEya19wY2lfcHJvYmVgLCB0aGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB3ZSBjYW4gbGV2ZXJhZ2Ugc3l6a2FsbGVyIHRvIGFjdHVhbGx5ICpnZXQqIGBhdGgxMmtfcGNpX3Byb2JlYCB0byBleGVjdXRlLiBNeSBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIHBvc3NpYmxlLiBTeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgaGVyZTsgaXQmIzM5O3MgY2FwYWJsZSBvZiBpbmplY3RpbmcgdmlydHVhbCBQQ0kgZGV2aWNlcy4gVGhlIHBpZWNlcyBzZWVtIHRvIGZpdCBpZiB3ZSBjYW4gbWFrZSB0aGUgUENJIGZ1enplciBpbmplY3QgYSBkZXZpY2UgdGhhdCBsb29rcyBlbm91Z2ggbGlrZSBhbiBhdGgxMmsgZGV2aWNlLCBhcyBpdCBzZWVtcyB0aGF0IHRoaXMgaXMgdGhlIG1lY2hhbmlzbSBieSB3aGljaCB0aGUgZGV2aWNlIGRyaXZlciBpcyBkZXRlY3RlZC4gSWYgdGhlIHZlbmRvciBhbmQgZGV2aWNlIElEIG1hdGNoZXMgd2hhdCB0aGUgZHJpdmVyIGV4cGVjdHMsIGBhdGgxMmtfcGNpX3Byb2JlYCBzaG91bGQgdHJpZ2dlci4gVGhlIG5leHQgbG9naWNhbCBzdGVwLCB0aGVyZWZvcmUsIGlzIHRvIHZlcmlmeSB0aGUgdmVuZG9yIGFuZCBkZXZpY2UgSURzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGF0aDEyayBkcml2ZXIgdG8gc2VlIGlmIHRoZXNlIG1hdGNoLCBhcyB0aGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIHRvIHRoZSBhcHByb2FjaCBiZWluZyBjb25zaWRlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfaWRfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzNTkKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkh1bnRpbmcgRG93biB0aGUgUENJIERldmljZSBJRCBpbiBhdGgxMmsqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIFBDSSBkZXZpY2UgSUQgaGFuZGxpbmcgZm9yIHRoZSBhdGgxMmsgd2lyZWxlc3MgZHJpdmVyLCBsaWtlbHkgZm9yIHNvbWUgc29ydCBvZiBkZWJ1Z2dpbmcgb3IgY29tcGF0aWJpbGl0eSBhbmFseXNpcy4gTXkgaW5zdGluY3Qgc2F5cyBpdCYjMzk7cyBnb2luZyB0byBiZSBpbiB0aGUgUENJLXNwZWNpZmljIGltcGxlbWVudGF0aW9uLCB3aGljaCB1c3VhbGx5IHJlc2lkZXMgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEya2AgdHJlZSwgYW5kIHNwZWNpZmljYWxseSwgdGhlIGBwY2kuY2AgZmlsZS4gVGhhdCYjMzk7cyBhIHByZXR0eSBzdGFuZGFyZCBuYW1pbmcgY29udmVudGlvbiAtICYjMzQ7cGNpLmMmIzM0OyBhbG1vc3QgYWx3YXlzIGNvbnRhaW5zIHRoZSBQQ0ktc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gYW5kIGRldmljZSBJRCB0YWJsZS4gVGhpcyBpc24mIzM5O3QgYSBzaG90IGluIHRoZSBkYXJrLCBidXQgYSB0YXJnZXRlZCBzZWFyY2ggYmFzZWQgb24gZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGtpbmRzIG9mIGRyaXZlcnMuIEtub3dpbmcgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGRyaXZlciBsYXlvdXRzIG1ha2VzIHRoaXMgYSBxdWljayBhbmQgZWZmaWNpZW50IHN0YXJ0aW5nIHBvaW50LiBOb3csIEkmIzM5O2xsIGp1c3Qgb3BlbiB0aGF0IGZpbGUgYW5kIHNlYXJjaCBmb3IgJiMzNDtwY2lcX2RldmljZVxfaWQmIzM0OyBhbmQgc2VlIHdoYXQgSSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfZGV2aWNlX2lkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MjY9c3RhdGljIGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTUyNzphdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1Mjgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTI5LVx0ZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfZmFtaWx5X2lkO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTMwOlx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTMxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTU0OD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1NDk6XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTUwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5NzgKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyB0aGUgYXRoMTJrIFBDSSBEcml2ZXIqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgYXRoMTJrYCBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgUENJIGltcGxlbWVudGF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgaXMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBsb29rIGZvciBob3cgdGhpcyBkcml2ZXIgaXMgKmlkZW50aWZpZWQqIGFuZCAqbG9hZGVkKiBieSB0aGUga2VybmVsLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHdpdGhpbiB0aGF0IGZpbGUgZm9yIHR3byBrZXkgdGhpbmdzOiBgTU9EVUxFX0RFVklDRV9UQUJMRWAsIHdoaWNoIGRlZmluZXMgdGhlIG1vZHVsZSYjMzk7cyBzdXBwb3J0ZWQgZGV2aWNlcywgYW5kIGBwY2lfZHJpdmVyYCwgd2hpY2ggaXMgdGhlIGNvcmUgc3RydWN0dXJlIGZvciByZWdpc3RlcmluZyB0aGUgZHJpdmVyIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0uIEZpbmRpbmcgdGhlc2Ugd2lsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBrZXJuZWwgcmVjb2duaXplcyBhbmQgYXR0YWNoZXMgdGhpcyBkcml2ZXIgdG8gdGhlIFBDSSBoYXJkd2FyZS4gVGhpcyBzaG91bGQgYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHdheSB0byB1bmRlcnN0YW5kIHRoZSBkZXZpY2UgbWF0Y2hpbmcgYW5kIGRyaXZlciBpbml0aWFsaXphdGlvbiBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzozOTpzdGF0aWMgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICphdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW0FUSDEyS19ERVZJQ0VfRkFNSUxZX01BWF07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTQwLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX21zaV9jb25maWcgbXNpX2NvbmZpZ19vbmVfbXNpID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgyOD1pbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4Mjk6XHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMwLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgzMTpcdHN0cnVjdCBwY2lfZHJpdmVyICpwY2lfZHJpdmVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0NzpcdHBjaV9kcml2ZXIgPSBcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXHUwMDNlZHJpdmVyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODQ4Olx0cGNpX2RyaXZlci1cdTAwM2VuYW1lID0gZHJpdmVyLVx1MDAzZW5hbWU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NDk6XHRwY2lfZHJpdmVyLVx1MDAzZWlkX3RhYmxlID0gZHJpdmVyLVx1MDAzZWlkX3RhYmxlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUwOlx0cGNpX2RyaXZlci1cdTAwM2Vwcm9iZSA9IGF0aDEya19wY2lfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTE6XHRwY2lfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19wY2lfcmVtb3ZlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUyOlx0cGNpX2RyaXZlci1cdTAwM2VzaHV0ZG93biA9IGF0aDEya19wY2lfc2h1dGRvd247XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTM6XHRwY2lfZHJpdmVyLVx1MDAzZWRyaXZlci5wbSA9IFx1MDAyNmF0aDEya19wY2lfcG1fb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODU0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODU1Olx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIocGNpX2RyaXZlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NTYtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk3MwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIERyaXZlciBSZWdpc3RyYXRpb24qKgoKT2theSwgc28gYGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyYC4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQmIzM5O3MgYmVpbmcgY2FsbGVkIGZyb20uIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRocm91Z2ggdGhlIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdy4gSXQmIzM5O3Mgbm90IGVub3VnaCB0byBrbm93ICp0aGF0KiBpdCYjMzk7cyByZWdpc3RlcmVkOyBJIG5lZWQgdG8ga25vdyAqaG93KiBhbmQgKndoZW4qLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGRyaXZlciYjMzk7cyBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgX19tYXliZV91bnVzZWQgYXRoMTJrX3BjaV9wbV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODI4OmludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgyOS1cdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICpkcml2ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODU2LX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg1NzpFWFBPUlRfU1lNQk9MKGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg1OC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oPTE3Nj12b2lkIGF0aDEya19wY2lfcG93ZXJfZG93bihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIGlzX3N1c3BlbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzc6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzgtXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE5Nz1pbnQgYXRoMTJrX3dpZmk3X3BjaV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0yMDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjIwMTpcdHJldCA9IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKEFUSDEyS19ERVZJQ0VfRkFNSUxZX1dJRkk3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0yMDItXHRcdFx0XHRcdCBcdTAwMjZhdGgxMmtfd2lmaTdfcGNpX2RyaXZlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NzM5CgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZHJpdmVyIGRldmVsb3BtZW50OgoKKipJbml0aWFsIERyaXZlciBSZWdpc3RyYXRpb24gJmFtcDsgSUQgVGFibGUgSW5zcGVjdGlvbioqCgpSaWdodCwgc28gYGF0aDEya193aWZpN19wY2lfaW5pdGAgaGFzIGp1c3QgcmVnaXN0ZXJlZCB0aGUgZGFtbiBkcml2ZXIuIEdvb2QsIHRoYXQmIzM5O3Mgc3RlcCBvbmUuIE5vdywgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB3aG9sZSBQQ0kgZGV2aWNlIG1hdGNoaW5nIHRoaW5nIGlzIHNldCB1cCwgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgYGlkX3RhYmxlYCBmb3IgdGhlIGBhdGgxMmtfd2lmaTdfcGNpX2RyaXZlcmAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIFBDSSBkZXZpY2UgSURzIGFyZSBzdXBwb3J0ZWQgYW5kIHNlZSBpZiBhbnl0aGluZyBsb29rcyBvdXQgb2YgcGxhY2UuIEl0JiMzOTtzIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXJkd2FyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgc3VwcG9zZWQgdG8gYmUgdGFsa2luZyB0bywgYW5kIGhvdyB0aGUgZHJpdmVyIGtub3dzIGl0JiMzOTtzIHRoZSByaWdodCBvbmUuIExldCYjMzk7cyBzZWUgd2hhdCBkZXZpY2VzIHRoaXMgY292ZXJzIGFuZCBpZiBhbnl0aGluZyBpcyBvYnZpb3VzbHkgbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3dpZmk3X3BjaV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX3BjaV9yZWdfYmFzZSBhdGgxMmtfd2lmaTdfcmVnX2Jhc2UgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjE4ODpzdGF0aWMgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyIGF0aDEya193aWZpN19wY2lfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xODktXHQubmFtZSA9IFwmIzM0O2F0aDEya193aWZpN19wY2lcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYz0xOTc9aW50IGF0aDEya193aWZpN19wY2lfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAxLVx0cmV0ID0gYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoQVRIMTJLX0RFVklDRV9GQU1JTFlfV0lGSTcsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjIwMjpcdFx0XHRcdFx0IFx1MDAyNmF0aDEya193aWZpN19wY2lfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAzLVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM3NAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBhdGgxMmsgUENJIElEIFRhYmxlKioKClJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3MgcmVjb2duaXppbmcgdGhlc2UgZGV2aWNlcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlciBmb3IgdGhlIGxhdGVzdCBXaS1GaSA3IHNpbGljb24uIExldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBgaWRfdGFibGVgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmNgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQg4oCTIHRoZSBQQ0kgSUQgdGFibGUgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hpY2ggc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zIGFuZCB2ZW5kb3JzIGFyZSBzdXBwb3J0ZWQgYW5kIGhvdyB0aGUgZHJpdmVyIGtub3dzIHRvIGJpbmQgdG8gdGhlbS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgc3RhbmRhcmQgUENJIGRldmljZSBJRHMsIHZlbmRvciBJRHMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGZsYWdzIG9yIHByb3BlcnRpZXMgdGhhdCBhcmUgY3J1Y2lhbCBmb3IgZW5hYmxpbmcgc3BlY2lmaWMgZmVhdHVyZXMgb3Igd29ya2Fyb3VuZHMgZm9yIGNlcnRhaW4gaGFyZHdhcmUgcmV2aXNpb25zLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXkmIzM5O3JlIHVzaW5nIGFueSBuZXcsIG1vcmUgcmVmaW5lZCBtYXRjaGluZyB0ZWNobmlxdWVzIGluIHRoaXMgZ2VuZXJhdGlvbi4gVGhpcyB0YWJsZSBpcyB0aGUgYmVkcm9jayBmb3IgZGV2aWNlIHJlY29nbml0aW9uLCBhbmQgZ2V0dGluZyBmYW1pbGlhciB3aXRoIGl0IHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyJiMzOTtzIGJlaGF2aW91ci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWRfdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGgxMmtfd2lmaTdfcGNpX2lkX3RhYmxlW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTM1LVx0eyBQQ0lfVkRFVklDRShRQ09NLCBRQ045Mjc0X0RFVklDRV9JRCkgfSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTQwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYzo0MTpNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRoMTJrX3dpZmk3X3BjaV9pZF90YWJsZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTQyLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTg4PXN0YXRpYyBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgYXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTE4OS1cdC5uYW1lID0gXCYjMzQ7YXRoMTJrX3dpZmk3X3BjaVwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MTkwOlx0LmlkX3RhYmxlID0gYXRoMTJrX3dpZmk3X3BjaV9pZF90YWJsZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMTkxLVx0Lm9wcy5wcm9iZSA9IGF0aDEya193aWZpN19wY2lfcHJvYmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MTE1CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjc1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgVGFyZ2V0KioKCkFscmlnaHQsIHNvIHN5emthbGxlciAqY2FuKiBpbmplY3QgYSBQQ0kgZGV2aWNlLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgdmVuZG9yIElEIFFDT00gYW5kIGRldmljZSBJRCBRQ045Mjc0X0RFVklDRV9JRC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEJ1dCB3YWl0Li4uIGRvZXMgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgcmVhbGx5IGFsbG93ICphcmJpdHJhcnkqIFBDSSBkZXZpY2UgaW5qZWN0aW9uPyBZZXMsIEkmIzM5O20gcHJldHR5IHN1cmUgaXQgaGFzIHRoYXQgYHN5el9wY2lfc2V0dXBgIHBzZXVkby1zeXNjYWxsIHRoYXQgZ2l2ZXMgdXMgc29tZSBjb250cm9sIG92ZXIgdmVuZG9yIGFuZCBkZXZpY2UgSURzLiBHb29kLgoKTm93LCB0aGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gZm9jdXMgb24gJiMzNDt2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyYjMzQ7IHRoYXQgcmVseSBvbiBwaHlzaWNhbCBQQ0llIGNhcmRzIHRoYXQgYXJlbiYjMzk7dCBlbXVsYXRlZCB3ZWxsIGluIHN0YW5kYXJkIFFFTVUuIElzIHRoZSBhdGgxMmsgZHJpdmVyLCB3aGljaCBpcyBmb3IgUXVhbGNvbW0gV2ktRmkgNyBkZXZpY2VzLCByZWFsbHkgaW4gdGhhdCBjYXRlZ29yeT8gSXQmIzM5O3MgYSBXaS1GaSBkcml2ZXIsIG5vdCBhIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVS4gSG1tLi4uCgpCdXQsIGhvbGQgb24sIHRoZSBjb3JlIHByaW5jaXBsZSBpcyB0aGUgc2FtZS4gVGhlIHJlYWwgcXVlc3Rpb24gaXM6IGRvZXMgdGhpcyBkcml2ZXIgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uIGFuZCBkbyBhbnl0aGluZyB1c2VmdWwgZHVyaW5nIGZ1enppbmc/IElmIGl0IGRvZXMsIHRoZW4gZnV6emluZyBpdCBpcyBwcm9iYWJseSBub3Qgd29ydGggdGhlIGVmZm9ydC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgbG9naWMgYXMgdGhlICYjMzQ7c3dpdGNoL1NtYXJ0TklDL0dQVSYjMzQ7IGRyaXZlcnMuCgpMZXQgbWUgdGhpbmvigKYgd2hhdCAqZXhhY3RseSogZG9lcyBgYXRoMTJrX3BjaV9wcm9iZWAgZG8/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgZnVuY3Rpb24mIzM5O3MgY29kZS4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gYXNzZXNzaW5nIGlmIHRoaXMgaXMgYSB2aWFibGUgZnV6emluZyB0YXJnZXQgb3Igbm90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1Mjc9YXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTU0Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTU0ODpzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NDktXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgyOD1pbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODQ5LVx0cGNpX2RyaXZlci1cdTAwM2VpZF90YWJsZSA9IGRyaXZlci1cdTAwM2VpZF90YWJsZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg1MDpcdHBjaV9kcml2ZXItXHUwMDNlcHJvYmUgPSBhdGgxMmtfcGNpX3Byb2JlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODUxLVx0cGNpX2RyaXZlci1cdTAwM2VyZW1vdmUgPSBhdGgxMmtfcGNpX3JlbW92ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcxMTAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYXRoMTJrX3BjaV9wcm9iZSBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgYXRoMTJrX3BjaV9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB0aGlzIHJvdXRpbmUgaW50ZXJhY3RzIGRpcmVjdGx5IHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIGFuZCwgY3J1Y2lhbGx5LCBpZiBpdCBjb250YWlucyBhbnkgZWFybHkgYmFpbG91dCBwYXRocyB0aGF0IGFyZSBpbmRpY2F0aXZlIG9mIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIGZhaWx1cmVzIG9yIGZ1bmRhbWVudGFsIHJlc291cmNlIGNvbmZsaWN0cy4gVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBoaWdoLWxldmVsIHNlbnNlIG9mIGl0cyBlcnJvciBoYW5kbGluZyBzdHJhdGVneSBhbmQgcG90ZW50aWFsbHkgaWRlbnRpZnkgaW5pdGlhbCBwb2ludHMgb2YgZmFpbHVyZSBkdXJpbmcgdGhlIFBDSSBkZXZpY2UgYnJpbmctdXAgcHJvY2Vzcy4gQW55IHF1aWNrIGRpc3F1YWxpZmljYXRpb24gYmFzZWQgb24gcmVnaXN0ZXIgYWNjZXNzIHdvdWxkIGJlIGV4dHJlbWVseSB1c2VmdWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NDgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NDg6XHRzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4xNTQ5Olx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuMTU1MDpcdHtcbjE1NTE6XHRcdGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkO1xuMTU1MjpcdFx0c3RydWN0IGF0aDEya19wY2kgKmFiX3BjaTtcbjE1NTM6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XG4xNTU0Olx0XHRpbnQgcmV0O1xuMTU1NTpcdFxuMTU1NjpcdFx0YWIgPSBhdGgxMmtfY29yZV9hbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCphYl9wY2kpLCBBVEgxMktfQlVTX1BDSSk7XG4xNTU3Olx0XHRpZiAoIWFiKSB7XG4xNTU4Olx0XHRcdGRldl9lcnIoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMmsgYmFzZVxcblwmIzM0Oyk7XG4xNTU5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMTU2MDpcdFx0fVxuMTU2MTpcdFxuMTU2MjpcdFx0YWItXHUwMDNlZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4xNTYzOlx0XHRhYl9wY2kgPSBhdGgxMmtfcGNpX3ByaXYoYWIpO1xuMTU2NDpcdFx0YWJfcGNpLVx1MDAzZWRldl9pZCA9IHBjaV9kZXYtXHUwMDNlZGV2aWNlO1xuMTU2NTpcdFx0YWJfcGNpLVx1MDAzZWFiID0gYWI7XG4xNTY2Olx0XHRhYl9wY2ktXHUwMDNlcGRldiA9IHBkZXY7XG4xNTY3Olx0XHRhYi1cdTAwM2VoaWYub3BzID0gXHUwMDI2YXRoMTJrX3BjaV9oaWZfb3BzO1xuMTU2ODpcdFx0YWItXHUwMDNlZndfbW9kZSA9IEFUSDEyS19RTUlfRklSTVdBUkVfTU9ERV9OT1JNQUw7XG4xNTY5Olx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWIpO1xuMTU3MDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YWJfcGNpLVx1MDAzZXdpbmRvd19sb2NrKTtcbjE1NzE6XHRcbjE1NzI6XHRcdHJldCA9IGF0aDEya19wY2lfY2xhaW0oYWJfcGNpLCBwZGV2KTtcbjE1NzM6XHRcdGlmIChyZXQpIHtcbjE1NzQ6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNsYWltIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xNTc1Olx0XHRcdGdvdG8gZXJyX2ZyZWVfY29yZTtcbjE1NzY6XHRcdH1cbjE1Nzc6XHRcbjE1Nzg6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXCYjMzQ7cGNpIHByb2JlICUwNHg6JTA0eCAlMDR4OiUwNHhcXG5cJiMzNDssXG4xNTc5Olx0XHRcdCAgIHBkZXYtXHUwMDNldmVuZG9yLCBwZGV2LVx1MDAzZWRldmljZSxcbjE1ODA6XHRcdFx0ICAgcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yLCBwZGV2LVx1MDAzZXN1YnN5c3RlbV9kZXZpY2UpO1xuMTU4MTpcdFxuMTU4MjpcdFx0YWItXHUwMDNlaWQudmVuZG9yID0gcGRldi1cdTAwM2V2ZW5kb3I7XG4xNTgzOlx0XHRhYi1cdTAwM2VpZC5kZXZpY2UgPSBwZGV2LVx1MDAzZWRldmljZTtcbjE1ODQ6XHRcdGFiLVx1MDAzZWlkLnN1YnN5c3RlbV92ZW5kb3IgPSBwZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3I7XG4xNTg1Olx0XHRhYi1cdTAwM2VpZC5zdWJzeXN0ZW1fZGV2aWNlID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xuMTU4NjpcdFxuMTU4NzpcdFx0ZGV2aWNlX2lkID0gYXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KHBjaV9kZXYpO1xuMTU4ODpcdFx0aWYgKGRldmljZV9pZCBcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xuMTU4OTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IGRldmljZSBmYW1pbHkgaWRcXG5cJiMzNDspO1xuMTU5MDpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTU5MTpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNTkyOlx0XHR9XG4xNTkzOlx0XG4xNTk0Olx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1BDSSwgXCYjMzQ7UENJIGRldmljZSBmYW1pbHkgaWQ6ICVkXFxuXCYjMzQ7LCBkZXZpY2VfaWQpO1xuMTU5NTpcdFxuMTU5NjpcdFx0YWJfcGNpLVx1MDAzZWRldmljZV9mYW1pbHlfb3BzID0gXHUwMDI2YXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVx1MDAzZW9wcztcbjE1OTc6XHRcdGFiX3BjaS1cdTAwM2VyZWdfYmFzZSA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cdTAwM2VyZWdfYmFzZTtcbjE1OTg6XHRcbjE1OTk6XHRcdC8qIENhbGwgZGV2aWNlIHNwZWNpZmljIHByb2JlLiBUaGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IGNhblxuMTYwMDpcdFx0ICogYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgb3BzIGluIGZ1dHVyZVxuMTYwMTpcdFx0ICogcHJvYmUgaXMgdmFsaWRhdGVkIGZvciBOVUxMIGR1cmluZyByZWdpc3RyYXRpb24uXG4xNjAyOlx0XHQgKi9cbjE2MDM6XHRcdHJldCA9IGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2Vwcm9iZShwZGV2LCBwY2lfZGV2KTtcbjE2MDQ6XHRcdGlmIChyZXQpIHtcbjE2MDU6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHByb2JlIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjA2Olx0XHRcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcbjE2MDc6XHRcdH1cbjE2MDg6XHRcbjE2MDk6XHRcdHJldCA9IGF0aDEya19wY2lfbXNpX2FsbG9jKGFiX3BjaSk7XG4xNjEwOlx0XHRpZiAocmV0KSB7XG4xNjExOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvYyBtc2k6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTYxMjpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNjEzOlx0XHR9XG4xNjE0Olx0XG4xNjE1Olx0XHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XG4xNjE2Olx0XHRpZiAocmV0KVxuMTYxNzpcdFx0XHRnb3RvIGVycl9wY2lfbXNpX2ZyZWU7XG4xNjE4Olx0XG4xNjE5Olx0XHRyZXQgPSBhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChhYl9wY2ksIGNwdW1hc2tfb2YoMCkpO1xuMTYyMDpcdFx0aWYgKHJldCkge1xuMTYyMTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2V0IGlycSBhZmZpbml0eSAlZFxcblwmIzM0OywgcmV0KTtcbjE2MjI6XHRcdFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xuMTYyMzpcdFx0fVxuMTYyNDpcdFxuMTYyNTpcdFx0cmV0ID0gYXRoMTJrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xuMTYyNjpcdFx0aWYgKHJldCkge1xuMTYyNzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgbWhpOiAlZFxcblwmIzM0OywgcmV0KTtcbjE2Mjg6XHRcdFx0Z290byBlcnJfaXJxX2FmZmluaXR5X2NsZWFudXA7XG4xNjI5Olx0XHR9XG4xNjMwOlx0XG4xNjMxOlx0XHRyZXQgPSBhdGgxMmtfaGFsX3NybmdfaW5pdChhYik7XG4xNjMyOlx0XHRpZiAocmV0KVxuMTYzMzpcdFx0XHRnb3RvIGVycl9taGlfdW5yZWdpc3RlcjtcbjE2MzQ6XHRcbjE2MzU6XHRcdHJldCA9IGF0aDEya19jZV9hbGxvY19waXBlcyhhYik7XG4xNjM2Olx0XHRpZiAocmV0KSB7XG4xNjM3Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBjZSBwaXBlczogJWRcXG5cJiMzNDssIHJldCk7XG4xNjM4Olx0XHRcdGdvdG8gZXJyX2hhbF9zcm5nX2RlaW5pdDtcbjE2Mzk6XHRcdH1cbjE2NDA6XHRcbjE2NDE6XHRcdGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcbjE2NDI6XHRcbjE2NDM6XHRcdHJldCA9IGF0aDEya19wY2lfY29uZmlnX2lycShhYik7XG4xNjQ0Olx0XHRpZiAocmV0KSB7XG4xNjQ1Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjb25maWcgaXJxOiAlZFxcblwmIzM0OywgcmV0KTtcbjE2NDY6XHRcdFx0Z290byBlcnJfY2VfZnJlZTtcbjE2NDc6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxMjEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAyMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiB0aGUgYXRoMTJrX3BjaV9wcm9iZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGF0aDEya19wY2lfcHJvYmVgLCBsaW5lIDE2NDMgc2hvd3MgYSBjYWxsIHRvIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgLiBCZWZvcmUgdGhhdCwgdGhlcmUmIzM5O3MgcXVpdGUgYSBjaGFpbiBvZiBpbml0aWFsaXphdGlvbnM6IGBhdGgxMmtfcGNpX2NsYWltYCwgdGhlbiBgYWJfcGNpLSZndDtkZXZpY2VfZmFtaWx5X29wcy0mZ3Q7cHJvYmVgLCBmb2xsb3dlZCBieSBgYXRoMTJrX3BjaV9tc2lfYWxsb2NgLCBgYXRoMTJrX2NvcmVfcHJlX2luaXRgLCBgYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnRgLCBgYXRoMTJrX21oaV9yZWdpc3RlcmAsIGBhdGgxMmtfaGFsX3NybmdfaW5pdGAsIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgLCBhbmQgZmluYWxseSBgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWdgLiBUaGF0JiMzOTtzIGEgbG90IG9mIHNldHVwIGJlZm9yZSBldmVuIGdldHRpbmcgdG8gSVJRIGNvbmZpZ3VyYXRpb24uCgpUaGUgYGF0aDEya19taGlfcmVnaXN0ZXJgIGNhbGwgc3RpY2tzIG91dC4gSSByZW1lbWJlciBNSEksIE1vZGVtIEhvc3QgSW50ZXJmYWNlLCBpcyBhIFF1YWxjb21tLXNwZWNpZmljIHByb3RvY29sLiBJIHJlY2FsbCBpdCYjMzk7cyB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIG1vZGVtIGluIHRoZXNlIHR5cGVzIG9mIGRldmljZXMuIFRoZSBxdWVzdGlvbiBub3cgaXM6IGRvZXMgdGhpcyBNSEkgcmVnaXN0cmF0aW9uICpyZXF1aXJlKiB0aGUgaGFyZHdhcmUgdG8gYmUgYWN0dWFsbHkgcHJlc2VudCBhbmQgcmVzcG9uZGluZyBiZWZvcmUgaXQgcmVnaXN0ZXJzPyBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBmdW5jdGlvbiBkZWZpbml0aW9uIHRvIGJlIHN1cmUuIEl0IGNvdWxkIGJlIGEgY3JpdGljYWwgZGVwZW5kZW5jeSBmb3Igc3Vic2VxdWVudCBpbml0aWFsaXphdGlvbiBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21oaV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0xODA9c3RhdGljIHZvaWQgYXRoMTJrX21oaV9vcF93cml0ZV9yZWcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0xODYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjE4NzppbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0xODgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg3OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDEya19taGlfcmVnaXN0ZXJgIHRoaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGFub3RoZXIgcmVnaXN0ZXIgZnVuY3Rpb24sIGxpa2VseSBkZWFsaW5nIHdpdGggaW5pdGlhbGl6YXRpb24gb3IgY29uZmlndXJhdGlvbiBvZiB0aGUgYXRoMTJrIGRyaXZlciwgcHJvYmFibHkgZm9yIHRoZSBNSEkgaW50ZXJmYWNlLiYjMzQ7IEl0JiMzOTtzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJlIGxvdy1sZXZlbCwgZmlkZGxpbmcgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlcnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBzdHVmZiBsaWtlIHJlZ2lzdGVyIG9mZnNldHMsIGJpdGZpZWxkcywgcG90ZW50aWFsbHkgc29tZSBtZW1vcnkgbWFwcGluZyBpZiBpdCYjMzk7cyBoYW5kbGluZyBhIGhhcmR3YXJlIHJlc291cmNlLiBJJiMzOTttIGd1ZXNzaW5nIGl0IHdpbGwgYmUgZWl0aGVyIGEgcmVhZCBvciB3cml0ZSByZWdpc3RlciB0aGF0IGNvbmZpZ3VyZXMgc29tZSBhc3BlY3Qgb2YgdGhlIE1ISSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBhbnkgY29tbWVudHMgb3Igc3Vycm91bmRpbmcgY29kZSB0byBmaWd1cmUgb3V0ICp3aGF0KiBzcGVjaWZpY2FsbHkgaXMgYmVpbmcgcmVnaXN0ZXJlZC4gSXMgaXQgYW4gaW50ZXJydXB0IG1hc2s/IEEgY2xvY2sgY29uZmlndXJhdGlvbj8gQSBETUEgc2V0dGluZz8gSXQmIzM5O3MgYWxsIGFib3V0IGNvbnRleHQgaGVyZS4gQWxyaWdodCwgbGV0JiMzOTtzIGdldCByZWFkaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODc6XHRpbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuIDE4ODpcdHtcbiAxODk6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBhYl9wY2ktXHUwMDNlYWI7XG4gMTkwOlx0XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsO1xuIDE5MTpcdFx0dW5zaWduZWQgaW50IGJvYXJkX2lkO1xuIDE5MjpcdFx0aW50IHJldDtcbiAxOTM6XHRcdGJvb2wgZHVhbG1hYyA9IGZhbHNlO1xuIDE5NDpcdFxuIDE5NTpcdFx0bWhpX2N0cmwgPSBtaGlfYWxsb2NfY29udHJvbGxlcigpO1xuIDE5NjpcdFx0aWYgKCFtaGlfY3RybClcbiAxOTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMTk4Olx0XG4gMTk5Olx0XHRhYl9wY2ktXHUwMDNlbWhpX3ByZV9jYiA9IE1ISV9DQl9JTlZBTElEO1xuIDIwMDpcdFx0YWJfcGNpLVx1MDAzZW1oaV9jdHJsID0gbWhpX2N0cmw7XG4gMjAxOlx0XHRtaGlfY3RybC1cdTAwM2VjbnRybF9kZXYgPSBhYi1cdTAwM2VkZXY7XG4gMjAyOlx0XHRtaGlfY3RybC1cdTAwM2VyZWdzID0gYWItXHUwMDNlbWVtO1xuIDIwMzpcdFx0bWhpX2N0cmwtXHUwMDNlcmVnX2xlbiA9IGFiLVx1MDAzZW1lbV9sZW47XG4gMjA0Olx0XHRtaGlfY3RybC1cdTAwM2VyZGRtX3NpemUgPSBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlcmRkbV9zaXplO1xuIDIwNTpcdFxuIDIwNjpcdFx0aWYgKGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VvdHBfYm9hcmRfaWRfcmVnaXN0ZXIpIHtcbiAyMDc6XHRcdFx0Ym9hcmRfaWQgPVxuIDIwODpcdFx0XHRcdGF0aDEya19wY2lfcmVhZDMyKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKTtcbiAyMDk6XHRcdFx0Ym9hcmRfaWQgPSB1MzJfZ2V0X2JpdHMoYm9hcmRfaWQsIE9UUF9CT0FSRF9JRF9NQVNLKTtcbiAyMTA6XHRcbiAyMTE6XHRcdFx0aWYgKCFib2FyZF9pZCB8fCAoYm9hcmRfaWQgPT0gT1RQX0lOVkFMSURfQk9BUkRfSUQpKSB7XG4gMjEyOlx0XHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULFxuIDIxMzpcdFx0XHRcdFx0ICAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgYm9hcmQgaWRcXG5cJiMzNDspO1xuIDIxNDpcdFx0XHR9IGVsc2UgaWYgKGJvYXJkX2lkIFx1MDAyNiBPVFBfVkFMSURfRFVBTE1BQ19CT0FSRF9JRF9NQVNLKSB7XG4gMjE1Olx0XHRcdFx0ZHVhbG1hYyA9IHRydWU7XG4gMjE2Olx0XHRcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULFxuIDIxNzpcdFx0XHRcdFx0ICAgXCYjMzQ7ZHVhbG1hYyBmdyBzZWxlY3RlZCBmb3IgYm9hcmQgaWQ6ICV4XFxuXCYjMzQ7LCBib2FyZF9pZCk7XG4gMjE4Olx0XHRcdH1cbiAyMTk6XHRcdH1cbiAyMjA6XHRcbiAyMjE6XHRcdGlmIChkdWFsbWFjKSB7XG4gMjIyOlx0XHRcdGlmIChhYi1cdTAwM2Vmdy5hbXNzX2R1YWxtYWNfZGF0YSBcdTAwMjZcdTAwMjYgYWItXHUwMDNlZncuYW1zc19kdWFsbWFjX2xlbiBcdTAwM2UgMCkge1xuIDIyMzpcdFx0XHRcdC8qIHVzZSBNSEkgZmlybXdhcmUgZmlsZSBmcm9tIGZpcm13YXJlLU4uYmluICovXG4gMjI0Olx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfZGF0YSA9IGFiLVx1MDAzZWZ3LmFtc3NfZHVhbG1hY19kYXRhO1xuIDIyNTpcdFx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X3N6ID0gYWItXHUwMDNlZncuYW1zc19kdWFsbWFjX2xlbjtcbiAyMjY6XHRcdFx0fSBlbHNlIHtcbiAyMjc6XHRcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZHVhbG1hYyBmaXJtd2FyZSBJRSBub3QgcHJlc2VudCBpbiBmaXJtd2FyZS1OLmJpblxcblwmIzM0Oyk7XG4gMjI4Olx0XHRcdFx0cmV0ID0gLUVOT0VOVDtcbiAyMjk6XHRcdFx0XHRnb3RvIGZyZWVfY29udHJvbGxlcjtcbiAyMzA6XHRcdFx0fVxuIDIzMTpcdFx0fSBlbHNlIHtcbiAyMzI6XHRcdFx0aWYgKGFiLVx1MDAzZWZ3LmFtc3NfZGF0YSBcdTAwMjZcdTAwMjYgYWItXHUwMDNlZncuYW1zc19sZW4gXHUwMDNlIDApIHtcbiAyMzM6XHRcdFx0XHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xuIDIzNDpcdFx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X2RhdGEgPSBhYi1cdTAwM2Vmdy5hbXNzX2RhdGE7XG4gMjM1Olx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfc3ogPSBhYi1cdTAwM2Vmdy5hbXNzX2xlbjtcbiAyMzY6XHRcdFx0fSBlbHNlIHtcbiAyMzc6XHRcdFx0XHQvKiB1c2UgdGhlIG9sZCBzZXBhcmF0ZSBtaGkuYmluIE1ISSBmaXJtd2FyZSBmaWxlICovXG4gMjM4Olx0XHRcdFx0YXRoMTJrX2NvcmVfY3JlYXRlX2Zpcm13YXJlX3BhdGgoYWIsIEFUSDEyS19BTVNTX0ZJTEUsXG4gMjM5Olx0XHRcdFx0XHRcdFx0XHQgYWJfcGNpLVx1MDAzZWFtc3NfcGF0aCxcbiAyNDA6XHRcdFx0XHRcdFx0XHRcdCBzaXplb2YoYWJfcGNpLVx1MDAzZWFtc3NfcGF0aCkpO1xuIDI0MTpcdFx0XHRcdG1oaV9jdHJsLVx1MDAzZWZ3X2ltYWdlID0gYWJfcGNpLVx1MDAzZWFtc3NfcGF0aDtcbiAyNDI6XHRcdFx0fVxuIDI0MzpcdFx0fVxuIDI0NDpcdFxuIDI0NTpcdFx0cmV0ID0gYXRoMTJrX21oaV9nZXRfbXNpKGFiX3BjaSk7XG4gMjQ2Olx0XHRpZiAocmV0KSB7XG4gMjQ3Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBnZXQgbXNpIGZvciBtaGlcXG5cJiMzNDspO1xuIDI0ODpcdFx0XHRnb3RvIGZyZWVfY29udHJvbGxlcjtcbiAyNDk6XHRcdH1cbiAyNTA6XHRcbiAyNTE6XHRcdGlmICghdGVzdF9iaXQoQVRIMTJLX1BDSV9GTEFHX01VTFRJX01TSV9WRUNUT1JTLCBcdTAwMjZhYl9wY2ktXHUwMDNlZmxhZ3MpKVxuIDI1MjpcdFx0XHRtaGlfY3RybC1cdTAwM2VpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfTk9CQUxBTkNJTkc7XG4gMjUzOlx0XG4gMjU0Olx0XHRtaGlfY3RybC1cdTAwM2Vpb3ZhX3N0YXJ0ID0gMDtcbiAyNTU6XHRcdG1oaV9jdHJsLVx1MDAzZWlvdmFfc3RvcCA9IGFiX3BjaS1cdTAwM2VkbWFfbWFzaztcbiAyNTY6XHRcdG1oaV9jdHJsLVx1MDAzZXNibF9zaXplID0gU1pfNTEySztcbiAyNTc6XHRcdG1oaV9jdHJsLVx1MDAzZXNlZ19sZW4gPSBTWl81MTJLO1xuIDI1ODpcdFx0bWhpX2N0cmwtXHUwMDNlZmJjX2Rvd25sb2FkID0gdHJ1ZTtcbiAyNTk6XHRcdG1oaV9jdHJsLVx1MDAzZXJ1bnRpbWVfZ2V0ID0gYXRoMTJrX21oaV9vcF9ydW50aW1lX2dldDtcbiAyNjA6XHRcdG1oaV9jdHJsLVx1MDAzZXJ1bnRpbWVfcHV0ID0gYXRoMTJrX21oaV9vcF9ydW50aW1lX3B1dDtcbiAyNjE6XHRcdG1oaV9jdHJsLVx1MDAzZXN0YXR1c19jYiA9IGF0aDEya19taGlfb3Bfc3RhdHVzX2NiO1xuIDI2MjpcdFx0bWhpX2N0cmwtXHUwMDNlcmVhZF9yZWcgPSBhdGgxMmtfbWhpX29wX3JlYWRfcmVnO1xuIDI2MzpcdFx0bWhpX2N0cmwtXHUwMDNld3JpdGVfcmVnID0gYXRoMTJrX21oaV9vcF93cml0ZV9yZWc7XG4gMjY0Olx0XG4gMjY1Olx0XHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZW1oaV9jb25maWcpO1xuIDI2NjpcdFx0aWYgKHJldCkge1xuIDI2NzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgdG8gbWhpIGJ1cywgZXJyID0gJWRcXG5cJiMzNDssIHJldCk7XG4gMjY4Olx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDI2OTpcdFx0fVxuIDI3MDpcdFxuIDI3MTpcdFx0cmV0dXJuIDA7XG4gMjcyOlx0XG4gMjczOlx0ZnJlZV9jb250cm9sbGVyOlxuIDI3NDpcdFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XG4gMjc1Olx0XHRhYl9wY2ktXHUwMDNlbWhpX2N0cmwgPSBOVUxMO1xuIDI3NjpcdFx0cmV0dXJuIHJldDtcbiAyNzc6XHR9XG4gMjc4Olx0XG4gMjc5Olx0dm9pZCBhdGgxMmtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbiAyODA6XHR7XG4gMjgxOlx0XHRzdHJ1Y3QgbWhpX2NvbnRyb2xsZXIgKm1oaV9jdHJsID0gYWJfcGNpLVx1MDAzZW1oaV9jdHJsO1xuIDI4MjpcdFxuIDI4MzpcdFx0bWhpX3VucmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCk7XG4gMjg0Olx0XHRrZnJlZShtaGlfY3RybC1cdTAwM2VpcnEpO1xuIDI4NTpcdFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XG4gMjg2Olx0XHRhYl9wY2ktXHUwMDNlbWhpX2N0cmwgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTk5OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIGF0aDEyayBEcml2ZXImIzM5O3MgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGlzIGBhdGgxMmtgIGRyaXZlciBhbmQgSSYjMzk7dmUgaGl0IGEga2V5IHBvaW50OiBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIFRoaXMgZnVuY3Rpb24sIEkgc2VlLCBjYWxscyBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyB0aGlzIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAgaGF2ZSBhIGhhcmQgZGVwZW5kZW5jeSBvbiBwaHlzaWNhbCBoYXJkd2FyZT8gSXQgKnNob3VsZG4mIzM5O3QqLCBpbiBwcmluY2lwbGUsIHNpbmNlIGl0cyBwcmltYXJ5IHJvbGUgaXMgYnVzIHJlZ2lzdHJhdGlvbi4gSXQmIzM5O3Mgc3VwcG9zZWQgdG8gYW5ub3VuY2UgdGhlIGNvbnRyb2xsZXIgdG8gdGhlIE1ISSBidXMgaW5mcmFzdHJ1Y3R1cmUuCgpCdXQgSSBuZWVkIHRvIGJlIHN1cmUuIFRoaW5raW5nIGZ1cnRoZXIsIEkgc2VlIHRoYXQgYGF0aDEya19wY2lfcHJvYmVgIOKAkyB0aGUgUENJIHByb2JlIGZ1bmN0aW9uIOKAkyBjYWxscyBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIFRoZW4sIGluIHdoYXQgYXBwZWFycyB0byBiZSBhIHR5cGljYWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGl0IGNhbGxzIGEgd2hvbGUgc2xldyBvZiBvdGhlciBmdW5jdGlvbnM6IGBhdGgxMmtfaGFsX3NybmdfaW5pdGAsIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgLCBgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWdgLCBhbmQgZmluYWxseSwgYGF0aDEya19wY2lfY29uZmlnX2lycWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBwYXRoIHdpbGwgd29yayBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiByZWFsIGhhcmR3YXJlLgoKVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBpcyB0aGVyZSBhbnl0aGluZyBpbiB0aGlzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRoYXQgd291bGQgcHJldmVudCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBmcm9tIHJ1bm5pbmcgaWYgaXQmIzM5O3MgcnVubmluZyBvbiBhIHN5c3RlbSB3aXRob3V0IHRoZSBhY3R1YWwgaGFyZHdhcmU/IEkgbmVlZCB0byBrbm93IHRoaXMsIGJlY2F1c2UgdGhhdCBmdW5jdGlvbiBsaWtlbHkgY29uZmlndXJlcyB0aGUgaW50ZXJydXB0IGhhbmRsaW5nLCBhbmQgSSBuZWVkIHRvIHRlc3QgdGhhdCBwb3J0aW9uIG9mIHRoZSBjb2RlLgoKVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgYGF0aDEya19oYWxfc3JuZ19pbml0YC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIG5leHQgc3RlcCB0byBmb2xsb3cgdG8gYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19oYWxfc3JuZ19pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5jPTcyNj1zdGF0aWMgdm9pZCBhdGgxMmtfaGFsX3VucmVnaXN0ZXJfc3JuZ19sb2NrX2tleXMoc3RydWN0IGF0aDEya19oYWwgKmhhbClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5jLTczMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmM6NzM0OmludCBhdGgxMmtfaGFsX3NybmdfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuYy03MzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc1OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24sIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgYXRoMTJrX2hhbF9zcm5nX2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYXRoMTJrX2hhbF9zcm5nX2luaXRgIGZ1bmN0aW9uLiBUaGUgbmFtZSBpdHNlbGYgaXMgZmFpcmx5IGRlc2NyaXB0aXZlLCBzdWdnZXN0aW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW5pdGlhbGl6YXRpb24gb2YgYSAmIzM0O3NlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciYjMzQ7IOKAkyBzcGVjaWZpY2FsbHksIHRoZSBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiB3aXRoaW4gdGhlIEF0aGVyb3MgMTJrIGNoaXBzZXQsIEkmIzM5O20gYXNzdW1pbmcuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IGNvbXBvbmVudHMgYXJlIGJlaW5nIGluaXRpYWxpemVkPyBXaGF0IGtpbmQgb2Ygc2VjdXJpdHkgbWVhc3VyZXMgYXJlIGltcGxlbWVudGVkLCBvciBiZWluZyBwcmVwYXJlZCBmb3I/IFdoYXQgY29udGV4dCBpcyBuZWVkZWQgZm9yIHRoaXMgaW5pdGlhbGl6YXRpb24gdG8gc3VjY2VlZD8gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzPyBBcmUgd2Ugc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgaXRzZWxmLCBjb25maWd1cmluZyByZWdpc3RlcnMsIG9yIHBlcmhhcHMgZXN0YWJsaXNoaW5nIGNvbW11bmljYXRpb24gY2hhbm5lbHMgZm9yIGVudHJvcHkgZ2F0aGVyaW5nPyBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOiByZWdpc3RlciBhY2Nlc3MsIHNlZWQgZ2VuZXJhdGlvbiwgbWF5YmUgaW50ZXJydXB0IHNldHVwIGZvciBldmVudCBoYW5kbGluZywgcGVyaGFwcyBldmVuIHRlc3RzIGZvciBiYXNpYyBmdW5jdGlvbmFsaXR5IHRvIGVuc3VyZSB0aGUgUk5HIGlzIHdvcmtpbmcgYXMgZGVzaWduZWQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2FyZWZ1bGx5IGZvciBlcnJvciBoYW5kbGluZy4gQSBwcm9wZXIgc2VjdXJlIFJORyBpcyAqY3JpdGljYWwqIHNvIHRoZSBkZXRhaWxzIG9uIHRoZSBlcnJvciBwYXRocyB3aWxsIGJlIGV4dHJlbWVseSB2YWx1YWJsZS4gVGhlIGZsb3cgaXRzZWxmIGlzIHNvbWV0aGluZyBJJiMzOTtsbCB3YW50IHRvIHRyYWNlLiBXaGF0IGlzIHRoZSBvcmRlciBvZiBldmVudHM/IFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZDsgdGhpcyBpcyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzM0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MzQ6XHRpbnQgYXRoMTJrX2hhbF9zcm5nX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA3MzU6XHR7XG4gNzM2Olx0XHRzdHJ1Y3QgYXRoMTJrX2hhbCAqaGFsID0gXHUwMDI2YWItXHUwMDNlaGFsO1xuIDczNzpcdFx0aW50IHJldDtcbiA3Mzg6XHRcbiA3Mzk6XHRcdHJldCA9IGhhbC1cdTAwM2VvcHMtXHUwMDNlY3JlYXRlX3NybmdfY29uZmlnKGhhbCk7XG4gNzQwOlx0XHRpZiAocmV0KVxuIDc0MTpcdFx0XHRnb3RvIGVycl9oYWw7XG4gNzQyOlx0XG4gNzQzOlx0XHRoYWwtXHUwMDNlZGV2ID0gYWItXHUwMDNlZGV2O1xuIDc0NDpcdFxuIDc0NTpcdFx0cmV0ID0gYXRoMTJrX2hhbF9hbGxvY19jb250X3JkcChoYWwpO1xuIDc0NjpcdFx0aWYgKHJldClcbiA3NDc6XHRcdFx0Z290byBlcnJfaGFsO1xuIDc0ODpcdFxuIDc0OTpcdFx0cmV0ID0gYXRoMTJrX2hhbF9hbGxvY19jb250X3dycChoYWwpO1xuIDc1MDpcdFx0aWYgKHJldClcbiA3NTE6XHRcdFx0Z290byBlcnJfZnJlZV9jb250X3JkcDtcbiA3NTI6XHRcbiA3NTM6XHRcdGF0aDEya19oYWxfcmVnaXN0ZXJfc3JuZ19sb2NrX2tleXMoaGFsKTtcbiA3NTQ6XHRcbiA3NTU6XHRcdHJldHVybiAwO1xuIDc1NjpcdFxuIDc1NzpcdGVycl9mcmVlX2NvbnRfcmRwOlxuIDc1ODpcdFx0YXRoMTJrX2hhbF9mcmVlX2NvbnRfcmRwKGhhbCk7XG4gNzU5Olx0XG4gNzYwOlx0ZXJyX2hhbDpcbiA3NjE6XHRcdHJldHVybiByZXQ7XG4gNzYyOlx0fVxuIDc2MzpcdFxuIDc2NDpcdHZvaWQgYXRoMTJrX2hhbF9zcm5nX2RlaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIDc2NTpcdHtcbiA3NjY6XHRcdHN0cnVjdCBhdGgxMmtfaGFsICpoYWwgPSBcdTAwMjZhYi1cdTAwM2VoYWw7XG4gNzY3Olx0XG4gNzY4Olx0XHRhdGgxMmtfaGFsX3VucmVnaXN0ZXJfc3JuZ19sb2NrX2tleXMoaGFsKTtcbiA3Njk6XHRcdGF0aDEya19oYWxfZnJlZV9jb250X3JkcChoYWwpO1xuIDc3MDpcdFx0YXRoMTJrX2hhbF9mcmVlX2NvbnRfd3JwKGhhbCk7XG4gNzcxOlx0XHRrZnJlZShoYWwtXHUwMDNlc3JuZ19jb25maWcpO1xuIDc3MjpcdFx0aGFsLVx1MDAzZXNybmdfY29uZmlnID0gTlVMTDtcbiA3NzM6XHR9XG4gNzc0Olx0XG4gNzc1Olx0dm9pZCBhdGgxMmtfaGFsX2R1bXBfc3JuZ19zdGF0cyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIDc3NjpcdHtcbiA3Nzc6XHRcdHN0cnVjdCBoYWxfc3JuZyAqc3JuZztcbiA3Nzg6XHRcdHN0cnVjdCBhdGgxMmtfZXh0X2lycV9ncnAgKmlycV9ncnA7XG4gNzc5Olx0XHRzdHJ1Y3QgYXRoMTJrX2NlX3BpcGUgKmNlX3BpcGU7XG4gNzgwOlx0XHRpbnQgaTtcbiA3ODE6XHRcbiA3ODI6XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O0xhc3QgaW50ZXJydXB0IHJlY2VpdmVkIGZvciBlYWNoIENFOlxcblwmIzM0Oyk7XG4gNzgzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzODU3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipNZW1vcnkgYW5kIExvY2tpbmc6IEEgUXVpY2sgQ2hlY2stSW4qKgoKUmlnaHQsIHNvIHRoaXMgcGllY2Ugb2YgY29kZSBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2luZyBsb2NrIGtleXMuIFByZXR0eSBzdHJhaWdodGZvcndhcmQgYXQgZmFjZSB2YWx1ZS4gTm8gY29tcGxleCBhbGdvcml0aG1zIG9yIGludHJpY2F0ZSBkYXRhIHN0cnVjdHVyZXMgaGVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNpbmcgb24gdGhlIGJhc2ljczogc2VjdXJpbmcgdGhlIG5lY2Vzc2FyeSBtZW1vcnkgcmVzb3VyY2VzIGFuZCBlbnN1cmluZyBjb25jdXJyZW50IGFjY2VzcyBpcyBwcm9wZXJseSBoYW5kbGVkLiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbG93LWxldmVsIGtlcm5lbCBvcGVyYXRpb25zLCBsaWtlbHkgd2l0aGluIGEgZHJpdmVyIGNvbnRleHQuCgpIb3dldmVyLCBJJiMzOTttIGFscmVhZHkgc3RhcnRpbmcgdG8gcHJvYmUgYSBiaXQgZGVlcGVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGF0aDEya19jZV9hbGxvY19waXBlc2AuIFdoeSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uPyBXaGF0IGltcGxpY2F0aW9ucyBkb2VzIHRoYXQgZnVuY3Rpb24gY2FsbCBoYXZlPyBEb2VzIGl0IGRlYWwgd2l0aCBhbnl0aGluZyByZWxhdGVkIHRvIHNwZWNpZmljIHJlc291cmNlcz8gSSB3YW50IHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHRoYXQgcGllY2Ugb2YgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgcGlwZSBhbGxvY2F0aW9uIHBsYXlzIGEgcm9sZSBpbiB0aGUgYnJvYWRlciBzeXN0ZW0gdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgYXJlYXMgcmVxdWlyaW5nIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgdGhpbmtpbmcsIHNvIEkmIzM5O2xsIHJldmlldyBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGJlZm9yZSBtb3Zpbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19jZV9hbGxvY19waXBlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NlLmM9NjczPXZvaWQgYXRoMTJrX2NlX2ZyZWVfcGlwZXMoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NlLmMtNzIxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jZS5jOjcyMjppbnQgYXRoMTJrX2NlX2FsbG9jX3BpcGVzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NlLmMtNzIzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMTkKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYGF0aDEya19jZV9hbGxvY19waXBlc2A6CgoqKkRlY29kaW5nIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gZGlzc2VjdCB0aGlzIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGBhdGgxMmtgIGRyaXZlciAobGlrZWx5IGRlYWxpbmcgd2l0aCBBdGhlcm9zL1F1YWxjb21tIHdpcmVsZXNzIGNoaXBzZXRzKSwgdGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gYWxsb2NhdGluZyBjb21tdW5pY2F0aW9uIHBpcGVzIG9yIGNoYW5uZWxzIHdpdGhpbiB0aGUgY2hpcCYjMzk7cyBoYXJkd2FyZSBjb250ZXh0LiBUaGUgJiMzNDtDRSYjMzQ7IHByb2JhYmx5IHN0YW5kcyBmb3IgJiMzNDtDb21wbGV0aW9uIEVuZ2luZSYjMzQ7IG9yICYjMzQ7Q29tbXVuaWNhdGlvbiBFbmdpbmUmIzM0OywgYSBjcnVjaWFsIGNvbXBvbmVudCBmb3IgRE1BIG9wZXJhdGlvbnMgYW5kIGludGVycnVwdCBoYW5kbGluZyB3aXRoaW4gdGhlIHdpcmVsZXNzIGNvbnRyb2xsZXIuCgpNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgaGFuZGxpbmcgdGhlIHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAgb2YgdGhlc2UgcGlwZXMsIHBlcmhhcHMgZm9yIGRpZmZlcmVudCB0cmFmZmljIGNsYXNzZXMgKFZvSVAsIHZpZGVvLCBiZXN0IGVmZm9ydCwgZXRjLikuIEl0JiMzOTtzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBvYnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSByZXNvdXJjZXMg4oCTIGRlc2NyaXB0b3JzLCBidWZmZXJzLCBpbnRlcnJ1cHQgdmVjdG9ycywgYW5kIHRoZSBsaWtlIOKAkyByZXF1aXJlZCBmb3IgdGhlc2UgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gSSYjMzk7ZCBleHBlY3QgdG8gc2VlIHNvbWUgZXJyb3IgY2hlY2tpbmcsIHJlc291cmNlIGFsbG9jYXRpb24gZnJvbSB0aGUgZGV2aWNlJiMzOTtzIGNvbnRleHQgKGxpa2VseSBhIGBzdHJ1Y3QgYXRoMTJrYCksIGFuZCBpbml0aWFsaXphdGlvbiBvZiByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgdG8gdHJhY2sgdGhlIHBpcGUgc3RhdGUuCgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBoaW50cyBhYm91dCB0aGUgcGlwZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJcyBpdCBzdGF0aWMsIGR5bmFtaWMsIG9yIGEgaHlicmlkIGFwcHJvYWNoPyBBcmUgdGhlcmUgbGltaXRzIG9uIHRoZSBudW1iZXIgb2YgcGlwZXMgdGhhdCBjYW4gYmUgYWxsb2NhdGVkPyBEb2VzIGl0IHRha2UgaW50byBhY2NvdW50IHBvd2VyIG1hbmFnZW1lbnQgY29uc2lkZXJhdGlvbnMgdG8gZWZmaWNpZW50bHkgbWFuYWdlIHRoZSByZXNvdXJjZXM/IFNwZWNpZmljYWxseSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gbG9vayBmb3IgYXJndW1lbnRzIHRoYXQgcmVwcmVzZW50IHRoaW5ncyBsaWtlOiBkZXZpY2UgY29udGV4dCwgcGlwZSBpZGVudGlmaWVyLCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKGUuZy4gcXVldWUgcHJpb3JpdHksIGJ1ZmZlciBzaXplcywgaW50ZXJydXB0IHNldHRpbmdzKSwgYW5kIHBlcmhhcHMgcG9pbnRlcnMgdG8gY2FsbGJhY2sgZnVuY3Rpb25zIG9yIGNvbXBsZXRpb24gaGFuZGxlcnMuCgpVbHRpbWF0ZWx5LCBJIGV4cGVjdCB0byBzZWUgdGhpcyBmdW5jdGlvbiBhcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBtYW5hZ2luZyB0aGUgZmxvdyBvZiBkYXRhIHRvIGFuZCBmcm9tIHRoZSB3aXJlbGVzcyBoYXJkd2FyZS4gVW5kZXJzdGFuZGluZyB0aGUgZGV0YWlscyBvZiBwaXBlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgaXMgZnVuZGFtZW50YWwgZm9yIGVmZmljaWVudCB3aXJlbGVzcyBvcGVyYXRpb24sIHRocm91Z2hwdXQsIGFuZCBRb1MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGRlcGVuZGVuY2llcyBvbiBvdGhlciBmdW5jdGlvbnMgd2l0aGluIHRoZSBgYXRoMTJrYCBkcml2ZXIgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcyMjpcdGludCBhdGgxMmtfY2VfYWxsb2NfcGlwZXMoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA3MjM6XHR7XG4gNzI0Olx0XHRzdHJ1Y3QgYXRoMTJrX2NlX3BpcGUgKnBpcGU7XG4gNzI1Olx0XHRpbnQgaTtcbiA3MjY6XHRcdGludCByZXQ7XG4gNzI3Olx0XHRjb25zdCBzdHJ1Y3QgY2VfYXR0ciAqYXR0cjtcbiA3Mjg6XHRcbiA3Mjk6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFiLVx1MDAzZWNlLmNlX2xvY2spO1xuIDczMDpcdFxuIDczMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZWNlX2NvdW50OyBpJiM0MzsmIzQzOykge1xuIDczMjpcdFx0XHRhdHRyID0gXHUwMDI2YWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZWhvc3RfY2VfY29uZmlnW2ldO1xuIDczMzpcdFx0XHRwaXBlID0gXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXTtcbiA3MzQ6XHRcdFx0cGlwZS1cdTAwM2VwaXBlX251bSA9IGk7XG4gNzM1Olx0XHRcdHBpcGUtXHUwMDNlYWIgPSBhYjtcbiA3MzY6XHRcdFx0cGlwZS1cdTAwM2VidWZfc3ogPSBhdHRyLVx1MDAzZXNyY19zel9tYXg7XG4gNzM3Olx0XG4gNzM4Olx0XHRcdHJldCA9IGF0aDEya19jZV9hbGxvY19waXBlKGFiLCBpKTtcbiA3Mzk6XHRcdFx0aWYgKHJldCkge1xuIDc0MDpcdFx0XHRcdC8qIEZyZWUgYW55IHBhcnRpYWwgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uICovXG4gNzQxOlx0XHRcdFx0YXRoMTJrX2NlX2ZyZWVfcGlwZXMoYWIpO1xuIDc0MjpcdFx0XHRcdHJldHVybiByZXQ7XG4gNzQzOlx0XHRcdH1cbiA3NDQ6XHRcdH1cbiA3NDU6XHRcbiA3NDY6XHRcdHJldHVybiAwO1xuIDc0NzpcdH1cbiA3NDg6XHRcbiA3NDk6XHRpbnQgYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBjZV9pZClcbiA3NTA6XHR7XG4gNzUxOlx0XHRpZiAoY2VfaWQgXHUwMDNlPSBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQpXG4gNzUyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDc1MzpcdFxuIDc1NDpcdFx0cmV0dXJuIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2Vob3N0X2NlX2NvbmZpZ1tjZV9pZF0uZmxhZ3M7XG4gNzU1Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTMxNAoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTWVtb3J5IEFsbG9jYXRpb24gQ29uY2VybnMgYW5kIGEgU3BlY2lmaWMgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGltbWVkaWF0ZSBjb250ZXh0IGhlcmUgaXMgc2ltcGxlOiB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIG1lbW9yeSBhbGxvY2F0aW9uIG9wZXJhdGlvbiwgcHJlc3VtYWJseSByZWxhdGVkIHRvIHdpcmVsZXNzIGRyaXZlciBpbml0aWFsaXphdGlvbi4gVGhhdCBmaXJzdCB0aG91Z2h0LCAmIzM0O0l0IGp1c3QgYWxsb2NhdGVzIG1lbW9yeSwmIzM0OyBmZWVscyBhbG1vc3QgZGlzbWlzc2l2ZSwgYnV0IHRoYXQgZG9lc24mIzM5O3QgbWVhbiBpdCBpc24mIzM5O3QgaW1wb3J0YW50LiBNZW1vcnkgYWxsb2NhdGlvbiBpcyBmdW5kYW1lbnRhbC4gV2UgbmVlZCB0byBiZSBzdXJlIGl0JiMzOTtzIGRvbmUgY29ycmVjdGx5LCBzYWZlbHksIGFuZCBlZmZpY2llbnRseS4gTm8gbGVha3MsIG5vIGZyYWdtZW50YXRpb24sIGFuZCBwcmVmZXJhYmx5LCBhbiBvcHRpbWl6ZWQgYXBwcm9hY2ggZm9yIG91ciBzcGVjaWZpYyBoYXJkd2FyZS4gV2Ugd291bGRuJiMzOTt0IHdhbnQgdG8gZ2V0IG91ciBzeXN0ZW1zIGludG8gYW4gdW5zdGFibGUgc3RhdGUgZnJvbSBhIG1lbW9yeSBpc3N1ZS4KCkJ1dCB0aGVuIG15IG1pbmQganVtcHMgdG8gYSBzcGVjaWZpYyBmdW5jdGlvbjogYGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnYC4gV2h5IGRvZXMgdGhhdCBjb21lIHRvIG1pbmQ/IE15IGluc3RpbmN0IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBsaWtlbHkgaGFzIGEgY3JpdGljYWwgcm9sZSB0byBwbGF5IGluIHRoZSBkcml2ZXImIzM5O3Mgb3BlcmF0aW9uLiBQZXJoYXBzIHRoYXQgZnVuY3Rpb24gY29udGFpbnMgb25lIG9mIG91ciBiaWdnZXN0IGJvdHRsZW5lY2tzLiBEb2VzIGl0IGludm9sdmUgc29tZSBjcml0aWNhbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgY29tbWFuZCBhbmQgZXZlbnQgZGF0YT8gTWF5YmUgdGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiBpbiB0aGF0IGZ1bmN0aW9uLCB0aGF0IHdlIGFyZSBtaXNzaW5nLiBEb2VzIGl0IHJlbGF0ZSB0byB0aGUgUU1JIGludGVyZmFjZSBhbmQgc29tZSBjcnVjaWFsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmU/IFRoaXMgc3BlY2lmaWMgZnVuY3Rpb24gaGFzIHByb2JhYmx5IGNvbWUgdG8gbWluZCBiZWNhdXNlIEkgcmVjYWxsIGhhdmluZyB0cm91YmxlIHdpdGggaXQgaW4gdGhlIHBhc3QuIEl0IG1heSBhbHNvIHByb3ZpZGUgc29tZSBtb3JlIGluc2lnaHQgaW50byB0aGUgcHJvYmxlbSBhdCBoYW5kLiBXZSBuZWVkIHRvIGxvb2sgZGVlcGVyIGludG8gd2hhdCBgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWdgIGlzIGRvaW5nIGFuZCBzZWUgaG93IGl0IGZpdHMgaW4gdG8gdGhlIHdpZGVyIHNjb3BlIG9mIHRoZSBzaXR1YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTY0Mz1zdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNjk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo2OTk6c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNzAwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1NDg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTY0MTpcdGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwMjMKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZ2AgZnVuY3Rpb24uIEkgc2VlIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBRTUkgY29uZmlndXJhdGlvbiBhbmQgbGlrZWx5IGVycm9yIGhhbmRsaW5nIGZvciB0aGUgUENJIGludGVyZmFjZS4gTXkgYXNzdW1wdGlvbiBpcyB0aGF0IHRoZSBDRSBwcm9iYWJseSByZWZlcnMgdG8gJiMzNDtDb21tYW5kIEVuZ2luZSYjMzQ7IG9yIHNvbWV0aGluZyBzaW1pbGFyIHdpdGhpbiB0aGUgUXVhbGNvbW0gY2hpcHNldCBiZWluZyB1c2VkIGhlcmUuIEdpdmVuIHRoYXQgSSBhbSB3ZWxsIHZlcnNlZCBpbiB0aGlzIGZpZWxkLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIGZhaXJseSBzdHJhaWdodGZvcndhcmQgY29kZSwgYWx0aG91Z2ggcG90ZW50aWFsbHkgZGVuc2Ugd2l0aCBzcGVjaWZpYyByZWdpc3RlciB3cml0ZXMgYW5kIGJpdCBtYW5pcHVsYXRpb24uIEl0JiMzOTtzIGtleSB0byBpZGVudGlmeSBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gV2hhdCBwb3dlciBzdGF0ZXMgZG9lcyBpdCBhc3N1bWUgdGhlIFBDSSBkZXZpY2UgaXMgaW4gYXQgdGhpcyBwb2ludD8gRG9lcyBpdCB1c2UgZGlyZWN0IHJlZ2lzdGVyIGFjY2VzcyBvciBkb2VzIGl0IGFic3RyYWN0IGFueSBvZiB0aGUgaGFyZHdhcmUgZGV0YWlscyB3aXRoIGFuIEFQST8gRG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIGNvbmZpZ3VyZSB0aGUgY29tbWFuZCBlbmdpbmUgZm9yIGEgc3BlY2lmaWMgZmlybXdhcmUgdmVyc2lvbiBvciBkZXZpY2UgcmV2aXNpb24/IFRoZXNlIGFyZSBpbXBvcnRhbnQgcXVlc3Rpb25zLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IGFueSBlcnJvciBoYW5kbGluZyAtIGFyZSB0aGVyZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBiZWluZyBjaGVja2VkLCBvciBkb2VzIGl0IHJlbHkgb24gZ2VuZXJpYyBlcnJvciBoYW5kbGluZyByb3V0aW5lcywgSSYjMzk7bGwgbmVlZCB0byB3YXRjaCBvdXQgZm9yIHRoYXQuIEkgaG9wZSBpdCYjMzk7cyB3ZWxsLWNvbW1lbnRlZCBiZWNhdXNlIGdvb2QgUU1JIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGFyZSBoYXJkIHRvIHdyaXRlIGluIGEgd2F5IHdoaWNoIGlzIHNpbXVsdGFuZW91c2x5IHBlcmZvcm1hbnQgYW5kIG1haW50YWluYWJsZS4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCBpbiwgZXNwZWNpYWxseSBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGNvbmZpZ3VyYXRpb24gb3IgZGV2aWNlLXNwZWNpZmljIHBhcmFtZXRlcnMuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgcGxheXMgb3V0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk5Olx0c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA3MDA6XHR7XG4gNzAxOlx0XHRzdHJ1Y3QgYXRoMTJrX3FtaV9jZV9jZmcgKmNmZyA9IFx1MDAyNmFiLVx1MDAzZXFtaS5jZV9jZmc7XG4gNzAyOlx0XG4gNzAzOlx0XHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcbiA3MDQ6XHRcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBhYl9wY2ktXHUwMDNlcGRldi1cdTAwM2VidXM7XG4gNzA1Olx0XG4gNzA2Olx0XHRjZmctXHUwMDNldGd0X2NlID0gYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZXRhcmdldF9jZV9jb25maWc7XG4gNzA3Olx0XHRjZmctXHUwMDNldGd0X2NlX2xlbiA9IGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2V0YXJnZXRfY2VfY291bnQ7XG4gNzA4Olx0XG4gNzA5Olx0XHRjZmctXHUwMDNlc3ZjX3RvX2NlX21hcCA9IGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VzdmNfdG9fY2VfbWFwO1xuIDcxMDpcdFx0Y2ZnLVx1MDAzZXN2Y190b19jZV9tYXBfbGVuID0gYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZXN2Y190b19jZV9tYXBfbGVuO1xuIDcxMTpcdFx0YWItXHUwMDNlcW1pLnNlcnZpY2VfaW5zX2lkID0gYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZXFtaV9zZXJ2aWNlX2luc19pZDtcbiA3MTI6XHRcbiA3MTM6XHRcdGlmIChhdGgxMmtfZndfZmVhdHVyZV9zdXBwb3J0ZWQoYWIsIEFUSDEyS19GV19GRUFUVVJFX01VTFRJX1FSVFJfSUQpKSB7XG4gNzE0Olx0XHRcdGFiX3BjaS1cdTAwM2VxbWlfaW5zdGFuY2UgPVxuIDcxNTpcdFx0XHRcdHUzMl9lbmNvZGVfYml0cyhwY2lfZG9tYWluX25yKGJ1cyksIERPTUFJTl9OVU1CRVJfTUFTSykgfFxuIDcxNjpcdFx0XHRcdHUzMl9lbmNvZGVfYml0cyhidXMtXHUwMDNlbnVtYmVyLCBCVVNfTlVNQkVSX01BU0spO1xuIDcxNzpcdFx0XHRhYi1cdTAwM2VxbWkuc2VydmljZV9pbnNfaWQgJiM0Mzs9IGFiX3BjaS1cdTAwM2VxbWlfaW5zdGFuY2U7XG4gNzE4Olx0XHR9XG4gNzE5Olx0fVxuIDcyMDpcdFxuIDcyMTpcdHN0YXRpYyB2b2lkIGF0aDEya19wY2lfY2VfaXJxc19lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA3MjI6XHR7XG4gNzIzOlx0XHRpbnQgaTtcbiA3MjQ6XHRcbiA3MjU6XHRcdHNldF9iaXQoQVRIMTJLX0ZMQUdfQ0VfSVJRX0VOQUJMRUQsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG4gNzI2Olx0XG4gNzI3Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4gNzI4Olx0XHRcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuIDcyOTpcdFx0XHRcdGNvbnRpbnVlO1xuIDczMDpcdFx0XHRhdGgxMmtfcGNpX2NlX2lycV9lbmFibGUoYWIsIGkpO1xuIDczMTpcdFx0fVxuIDczMjpcdH1cbiA3MzM6XHRcbiA3MzQ6XHRzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX21zaV9jb25maWcoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSwgYm9vbCBlbmFibGUpXG4gNzM1Olx0e1xuIDczNjpcdFx0c3RydWN0IHBjaV9kZXYgKmRldiA9IGFiX3BjaS1cdTAwM2VwZGV2O1xuIDczNzpcdFx0dTE2IGNvbnRyb2w7XG4gNzM4Olx0XG4gNzM5Olx0XHRwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGRldi1cdTAwM2Vtc2lfY2FwICYjNDM7IFBDSV9NU0lfRkxBR1MsIFx1MDAyNmNvbnRyb2wpO1xuIDc0MDpcdFxuIDc0MTpcdFx0aWYgKGVuYWJsZSlcbiA3NDI6XHRcdFx0Y29udHJvbCB8PSBQQ0lfTVNJX0ZMQUdTX0VOQUJMRTtcbiA3NDM6XHRcdGVsc2VcbiA3NDQ6XHRcdFx0Y29udHJvbCBcdTAwMjY9IH5QQ0lfTVNJX0ZMQUdTX0VOQUJMRTtcbiA3NDU6XHRcbiA3NDY6XHRcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGRldi1cdTAwM2Vtc2lfY2FwICYjNDM7IFBDSV9NU0lfRkxBR1MsIGNvbnRyb2wpO1xuIDc0NzpcdH1cbiA3NDg6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczMjEKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipBbmFseXppbmcgdGhlIGBhdGgxMmtfcGNpYCBEcml2ZXIgVnVsbmVyYWJpbGl0eSBSb3V0ZSoqCgpPa2F5LCBzbyB0aGUgcGF0aCB0byBleHBsb2l0IHRoZSBgYXRoMTJrX3BjaWAgZHJpdmVyIHZpYSBhbiBpbnRlcnJ1cHQgcmVxdWVzdCwgc3BlY2lmaWNhbGx5IHRoZSBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBmdW5jdGlvbiwgc2VlbXMgaGlnaGx5IHBsYXVzaWJsZSBpZiBTeXprYWxsZXIgY2FuIGluamVjdCBhIFBDSSBkZXZpY2Ugd2l0aCBhIHNwZWNpZmljIHZlbmRvciBhbmQgZGV2aWNlIElELiBUaGF0JiMzOTtzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGJlY29tZXMgd2hldGhlciB0aGUgcHJvYmUgZnVuY3Rpb24sIGBhdGgxMmtfcGNpX3Byb2JlYCwgcGVyZm9ybXMgYW55IGhhcmR3YXJlIHJlZ2lzdGVyIHJlYWRzIG9yIG90aGVyIGNoZWNrcyB0aGF0IHdvdWxkIGZhaWwgaWYgaXQmIzM5O3Mgbm90IGFjdHVhbGx5IGEgKnJlYWwqIGRldmljZS4gSWYgaXQmIzM5O3MgdG9vIGFnZ3Jlc3NpdmUgaW4gaXRzIHZhbGlkYXRpb24sIHdlIHdvbiYjMzk7dCBnZXQgZmFyLiBSaWdodCwgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMgSSBzaG91bGQgcHJvYmFibHkgaW52ZXN0aWdhdGUgYGF0aDEya19wY2lfY2xhaW1gLiBJdCYjMzk7bGwgYmUga2V5IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBkZXZpY2UgY2xhaW1pbmcgYW5kIHJlc291cmNlIGFsbG9jYXRpb24sIHNpbmNlIHRoYXQmIzM5O3MgYSBjb21tb24gcG9pbnQgb2YgZmFpbHVyZSBmb3IgdGhpcyBraW5kIG9mIGF0dGFjay4gSXQmIzM5O2xsIGFsc28gbGlrZWx5IGdpdmUgbWUgbW9yZSBjb250ZXh0IGZvciB3aGF0IGhhcHBlbnMgYmVmb3JlIGFuZCBwb3RlbnRpYWxseSBhZnRlciB0aGUgcHJvYmluZyBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX2NsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTgyMT1zdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX21zaV9kYXRhKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy04MzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjg0MDpzdGF0aWMgaW50IGF0aDEya19wY2lfY2xhaW0oc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTg0MS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTQ4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1NzI6XHRyZXQgPSBhdGgxMmtfcGNpX2NsYWltKGFiX3BjaSwgcGRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NzMtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MDEwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2Ygd2hhdCYjMzk7cyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgYGF0aDEya19wY2lfY2xhaW1gIGZ1bmN0aW9uLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipEaXZpbmcgaW50byBgYXRoMTJrX3BjaV9jbGFpbWAqKgoKQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBhdGgxMmtfcGNpX2NsYWltYC4gSW1tZWRpYXRlbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyAqZG9pbmcqIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhlIGF0aDEyayBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIFBDSS4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gYW5kIGNsYWltaW5nIG9mIHRoZSBQQ0kgZGV2aWNlLCB3aGljaCBhbGlnbnMgd2l0aCBzdGFuZGFyZCBQQ0kgZHJpdmVyIG9wZXJhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcmVzb3VyY2VzIGFyZSBiZWluZyBjaGVja2VkLCBhbnkgaW5pdGlhbGl6YXRpb24gc3RlcHMsIGFuZCB0aGUgZ2VuZXJhbCBmbG93IG9mIHdoYXQgdGhpcyBjbGFpbSBkb2VzIGFuZCBlbnN1cmVzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6IHJlc291cmNlIGFsbG9jYXRpb24sIGVycm9yIGhhbmRsaW5nLCBjaGVja3MgZm9yIGV4aXN0aW5nIGRldmljZSBjbGFpbXMgKGNydWNpYWwgdG8gYXZvaWQgY29uZmxpY3RzKSwgYW5kIHBvdGVudGlhbGx5IGFueSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gdGhhdCYjMzk7cyBwZXJmb3JtZWQgaGVyZSBiZWZvcmUgaGFuZGluZyBvZmYgdG8gdGhlIGNvcmUgZHJpdmVyLiBJIGV4cGVjdCBhIGNhcmVmdWwgZGFuY2UgdG8gZW5zdXJlIHRoZSBoYXJkd2FyZSBpcyBhY2Nlc3NpYmxlIGFuZCByZWFkeSB0byBnbyBiZWZvcmUgd2Ugc3RhcnQgYWN0dWFsbHkgdXNpbmcgaXQgZm9yIHdpcmVsZXNzIGNvbW11bmljYXRpb24uIExldCYjMzk7cyBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBob2xkIHRydWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0c3RhdGljIGludCBhdGgxMmtfcGNpX2NsYWltKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksIHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIDg0MTpcdHtcbiA4NDI6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBhYl9wY2ktXHUwMDNlYWI7XG4gODQzOlx0XHR1MTYgZGV2aWNlX2lkO1xuIDg0NDpcdFx0aW50IHJldCA9IDA7XG4gODQ1Olx0XG4gODQ2Olx0XHRwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfREVWSUNFX0lELCBcdTAwMjZkZXZpY2VfaWQpO1xuIDg0NzpcdFx0aWYgKGRldmljZV9pZCAhPSBhYl9wY2ktXHUwMDNlZGV2X2lkKSAge1xuIDg0ODpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtwY2kgZGV2aWNlIGlkIG1pc21hdGNoOiAweCV4IDB4JXhcXG5cJiMzNDssXG4gODQ5Olx0XHRcdFx0ICAgZGV2aWNlX2lkLCBhYl9wY2ktXHUwMDNlZGV2X2lkKTtcbiA4NTA6XHRcdFx0cmV0ID0gLUVJTztcbiA4NTE6XHRcdFx0Z290byBvdXQ7XG4gODUyOlx0XHR9XG4gODUzOlx0XG4gODU0Olx0XHRyZXQgPSBwY2lfYXNzaWduX3Jlc291cmNlKHBkZXYsIEFUSDEyS19QQ0lfQkFSX05VTSk7XG4gODU1Olx0XHRpZiAocmV0KSB7XG4gODU2Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhc3NpZ24gcGNpIHJlc291cmNlOiAlZFxcblwmIzM0OywgcmV0KTtcbiA4NTc6XHRcdFx0Z290byBvdXQ7XG4gODU4Olx0XHR9XG4gODU5Olx0XG4gODYwOlx0XHRyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTtcbiA4NjE6XHRcdGlmIChyZXQpIHtcbiA4NjI6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGVuYWJsZSBwY2kgZGV2aWNlOiAlZFxcblwmIzM0OywgcmV0KTtcbiA4NjM6XHRcdFx0Z290byBvdXQ7XG4gODY0Olx0XHR9XG4gODY1Olx0XG4gODY2Olx0XHRyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgQVRIMTJLX1BDSV9CQVJfTlVNLCBcJiMzNDthdGgxMmtfcGNpXCYjMzQ7KTtcbiA4Njc6XHRcdGlmIChyZXQpIHtcbiA4Njg6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHJlcXVlc3QgcGNpIHJlZ2lvbjogJWRcXG5cJiMzNDssIHJldCk7XG4gODY5Olx0XHRcdGdvdG8gZGlzYWJsZV9kZXZpY2U7XG4gODcwOlx0XHR9XG4gODcxOlx0XG4gODcyOlx0XHRhYl9wY2ktXHUwMDNlZG1hX21hc2sgPSBETUFfQklUX01BU0soQVRIMTJLX1BDSV9ETUFfTUFTSyk7XG4gODczOlx0XHRkbWFfc2V0X21hc2soXHUwMDI2cGRldi1cdTAwM2VkZXYsIGFiX3BjaS1cdTAwM2VkbWFfbWFzayk7XG4gODc0Olx0XHRkbWFfc2V0X2NvaGVyZW50X21hc2soXHUwMDI2cGRldi1cdTAwM2VkZXYsIERNQV9CSVRfTUFTSygzMikpO1xuIDg3NTpcdFxuIDg3NjpcdFx0cGNpX3NldF9tYXN0ZXIocGRldik7XG4gODc3Olx0XG4gODc4Olx0XHRhYi1cdTAwM2VtZW1fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCBBVEgxMktfUENJX0JBUl9OVU0pO1xuIDg3OTpcdFx0YWItXHUwMDNlbWVtID0gcGNpX2lvbWFwKHBkZXYsIEFUSDEyS19QQ0lfQkFSX05VTSwgMCk7XG4gODgwOlx0XHRpZiAoIWFiLVx1MDAzZW1lbSkge1xuIDg4MTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gbWFwIHBjaSBiYXIgJWRcXG5cJiMzNDssIEFUSDEyS19QQ0lfQkFSX05VTSk7XG4gODgyOlx0XHRcdHJldCA9IC1FSU87XG4gODgzOlx0XHRcdGdvdG8gcmVsZWFzZV9yZWdpb247XG4gODg0Olx0XHR9XG4gODg1Olx0XG4gODg2Olx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFwmIzM0O2Jvb3QgcGNpX21lbSAweCVwXFxuXCYjMzQ7LCBhYi1cdTAwM2VtZW0pO1xuIDg4NzpcdFx0cmV0dXJuIDA7XG4gODg4Olx0XG4gODg5Olx0cmVsZWFzZV9yZWdpb246XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjQyCgkJCQkJCQlvdXRwdXQ6IDUyCgkJCQkJCQl0aG91Z2h0czogNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUENJIFJlc291cmNlIEFsbG9jYXRpb24gYW5kIFByb2JlIEZ1bmN0aW9uIEV4YW1pbmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0JiMzOTtzIGJhc2ljYWxseSBkb2luZyB0aGUgdXN1YWwgUENJIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIG1hcHBpbmcg4oCTIG5vdGhpbmcgb3V0IG9mIHRoZSBvcmRpbmFyeSwgcmlnaHQ/IFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzIHdpdGhvdXQgYW55IHJlYWwgaXNzdWVzLiBCdXQsIGhhbmcgb24uLi4gbGV0JiMzOTtzIG5vdCBnZXQgYWhlYWQgb2Ygb3Vyc2VsdmVzLiBJIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gV2hhdCBhYm91dCB0aGUgYGFiX3BjaS0mZ3Q7ZGV2aWNlX2ZhbWlseV9vcHMtJmd0O3Byb2JlKHBkZXYsIHBjaV9kZXYpYCBjYWxsPyBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIGxvZ2ljIG1pZ2h0IGJlLgoKU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIG9mIHRoaXMgZm9yIFdpZmk3IGRldmljZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGRyaXZlciB3aGljaCBzaG91bGQgdXNlIHRoZSBgYXRoMTJrX3dpZmk3X3BjaV9wcm9iZWAgZnVuY3Rpb24uIEJldHRlciBjaGVjayB0aGF0IG9uZSBvdXQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIHVzdWFsbHkgaGlkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya193aWZpN19wY2lfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9ODE9dm9pZCBhdGgxMmtfd2lmaTdfcGNpX3JlYWRfaHdfdmVyc2lvbihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtOTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjkxOnN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtOTItXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTg4PXN0YXRpYyBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgYXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xOTAtXHQuaWRfdGFibGUgPSBhdGgxMmtfd2lmaTdfcGNpX2lkX3RhYmxlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYzoxOTE6XHQub3BzLnByb2JlID0gYXRoMTJrX3dpZmk3X3BjaV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMTkyLVx0LnJlZ19iYXNlID0gXHUwMDI2YXRoMTJrX3dpZmk3X3JlZ19iYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkyMgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlYC4KCioqQW5hbHl6aW5nIHRoZSBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlIEZ1bmN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlYCBmdW5jdGlvbiBub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGF0aDEyayBkcml2ZXIgZnJhbWV3b3JrLiBDbGVhcmx5LCBpdCYjMzk7cyB0aGUgUENJIHByb2JlIGZ1bmN0aW9uLCBzbyBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBzZXR1cCBvZiB0aGUgYXRoMTJrIGRyaXZlciB3aGVuIGEgY29tcGF0aWJsZSBXaUZpIDcgUENJIGRldmljZSBpcyBkZXRlY3RlZC4gSSBleHBlY3QgdG8gc2VlIHRoZSB0eXBpY2FsIFBDSSBkZXZpY2UgaWRlbnRpZmljYXRpb24gY2hlY2tzIOKAkyBsb29raW5nIGZvciBzcGVjaWZpYyBWZW5kb3IgSURzIGFuZCBEZXZpY2UgSURzLCBtYWtpbmcgc3VyZSB0aGUgaGFyZHdhcmUgaXMgYWN0dWFsbHkgd2hhdCB3ZSB0aGluayBpdCBpcy4KCk5leHQsIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlc291cmNlIGFsbG9jYXRpb24uIFRoaXMgZnVuY3Rpb24gbGlrZWx5IHN0YXJ0cyBieSByZXF1ZXN0aW5nIG5lY2Vzc2FyeSByZXNvdXJjZXMgZnJvbSB0aGUga2VybmVsOiBtZW1vcnkgcmVnaW9ucyBmb3IgdGhlIGRldmljZSYjMzk7cyByZWdpc3RlcnMsIGludGVycnVwdCBsaW5lcywgRE1BIGNoYW5uZWxzLCBhbmQgcG9zc2libHkgb3RoZXIgY3JpdGljYWwgcmVzb3VyY2VzLiBJ4oCZbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgaGVyZSwgZW5zdXJpbmcgdGhhdCBpdCBncmFjZWZ1bGx5IGhhbmRsZXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBmYWlsdXJlcy4gV2UgZG9uJiMzOTt0IHdhbnQgdGhlIGRyaXZlciB0byBjcmFzaCBiZWNhdXNlIGl0IGNvdWxkbiYjMzk7dCBncmFiIHRoZSByZXNvdXJjZXMgaXQgbmVlZHMuCgpJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IGFmdGVyIHJlc291cmNlIGFsbG9jYXRpb24sIHRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZS4gVGhpcyBpbmNsdWRlcyBzZXR0aW5nIHVwIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgZW5hYmxpbmcgdGhlIGRldmljZSwgYW5kIHBvdGVudGlhbGx5IHJlc2V0dGluZyBpdCBpbnRvIGEga25vd24gc3RhdGUuIEl0JiMzOTtzIGxpa2VseSB3ZSYjMzk7bGwgYmUgZGVhbGluZyB3aXRoIHZhcmlvdXMgUENJIGNhcGFiaWxpdGllcyB0b28sIGVzcGVjaWFsbHkgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50IGFuZCBkZXZpY2UgZmVhdHVyZXMgc3BlY2lmaWMgdG8gV2lGaSA3LiBUaGlzIGlzIHdoZXJlIHRob3NlIGNhcGFiaWxpdGllcyB3b3VsZCBiZSBkZXRlY3RlZCBhbmQgbWFuYWdlZC4KClRoZW4sIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjcnVjaWFsIHN0ZXAgb2YgY3JlYXRpbmcgdGhlIG1haW4gZGV2aWNlIHN0cnVjdHVyZSAobGlrZWx5IGFuIGBhdGgxMmtfYmFzZWAgc3RydWN0LCBvciBzb21ldGhpbmcgc2ltaWxhciwgdGhhdCBlbmNhcHN1bGF0ZXMgYWxsIHRoZSBkZXZpY2Utc3BlY2lmaWMgZGF0YSBhbmQgc3RhdGUpLiBXaXRoaW4gdGhhdCBkZXZpY2Ugc3RydWN0dXJlLCB0aGUgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIHBvcHVsYXRlIHRoZSBkYXRhLiBUaGlzIHdpbGwgaW5jbHVkZSBpZGVudGlmeWluZyB0aGUgZGV2aWNlIGFuZCBzZXR0aW5nIHVwIHRoZSBkaWZmZXJlbnQgcmVnaXN0ZXJzLiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgc2V0dGluZyB1cCB2YXJpb3VzIHN1Yi1kcml2ZXJzIG9yIG1vZHVsZXMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIFdpRmkgNyBoYXJkd2FyZS4KCkZpbmFsbHksIHRoZSBmdW5jdGlvbiB3aWxsIGFsbW9zdCBjZXJ0YWlubHkgcmVnaXN0ZXIgdGhlIGRldmljZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUgTGludXgga2VybmVsIChsaWtlbHkgdGhlIG1hYzgwMjExIHdpcmVsZXNzIHN0YWNrKS4gSXQmIzM5O2xsIG5lZWQgdG8gbGluayB0aGUgbmV3IGRldmljZSB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBzbyBpdOKAmXMgYXZhaWxhYmxlIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJdCB3aWxsIGxpa2VseSB0aGVuIGluaXRpYWxpemUgdGhlIHdpcmVsZXNzIGludGVyZmFjZSBhbmQgYWN0aXZhdGUgaXQsIG1ha2luZyBpdCByZWFkeSB0byBiZSB1c2VkLiBJIHdpbGwgbG9vayBjYXJlZnVsbHkgYXQgdGhlIHRlYXJkb3duIHByb2Nlc3MgZm9yIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCwgbWFraW5nIHN1cmUgYWxsIGFsbG9jYXRlZCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIHByb3Blcmx5IHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkIG9yIHRoZXJlJiMzOTtzIGFuIGVycm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDkxOlx0c3RhdGljIGludCBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuICA5MjpcdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcbiAgOTM6XHR7XG4gIDk0Olx0XHR1MzIgc29jX2h3X3ZlcnNpb25fbWFqb3IsIHNvY19od192ZXJzaW9uX21pbm9yO1xuICA5NTpcdFx0c3RydWN0IGF0aDEya19wY2kgKmFiX3BjaTtcbiAgOTY6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XG4gIDk3Olx0XHRpbnQgcmV0O1xuICA5ODpcdFxuICA5OTpcdFx0YWIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4gMTAwOlx0XHRpZiAoIWFiKVxuIDEwMTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMDI6XHRcbiAxMDM6XHRcdGFiX3BjaSA9IGF0aDEya19wY2lfcHJpdihhYik7XG4gMTA0Olx0XHRpZiAoIWFiX3BjaSlcbiAxMDU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMTA2Olx0XG4gMTA3Olx0XHRzd2l0Y2ggKHBjaV9kZXYtXHUwMDNlZGV2aWNlKSB7XG4gMTA4Olx0XHRjYXNlIFFDTjkyNzRfREVWSUNFX0lEOlxuIDEwOTpcdFx0XHRhYl9wY2ktXHUwMDNlbXNpX2NvbmZpZyA9IFx1MDAyNmF0aDEya193aWZpN19tc2lfY29uZmlnWzBdO1xuIDExMDpcdFx0XHRhYi1cdTAwM2VzdGF0aWNfd2luZG93X21hcCA9IHRydWU7XG4gMTExOlx0XHRcdGFiX3BjaS1cdTAwM2VwY2lfb3BzID0gXHUwMDI2YXRoMTJrX3dpZmk3X3BjaV9vcHNfcWNuOTI3NDtcbiAxMTI6XHRcdFx0LypcbiAxMTM6XHRcdFx0ICogaW5pdCB3aW5kb3cgcmVnIGFkZHIgYmVmb3JlIHJlYWRpbmcgaGFyZHdhcmUgdmVyc2lvblxuIDExNDpcdFx0XHQgKiBhcyBpdCB3aWxsIGJlIHVzZWQgdGhlcmVcbiAxMTU6XHRcdFx0ICovXG4gMTE2Olx0XHRcdGFiX3BjaS1cdTAwM2V3aW5kb3dfcmVnX2FkZHIgPSBXSU5ET1dfUkVHX0FERFJFU1M7XG4gMTE3Olx0XHRcdGF0aDEya193aWZpN19wY2lfcmVhZF9od192ZXJzaW9uKGFiLCBcdTAwMjZzb2NfaHdfdmVyc2lvbl9tYWpvcixcbiAxMTg6XHRcdFx0XHRcdFx0XHQgXHUwMDI2c29jX2h3X3ZlcnNpb25fbWlub3IpO1xuIDExOTpcdFx0XHRhYi1cdTAwM2V0YXJnZXRfbWVtX21vZGUgPSBhdGgxMmtfY29yZV9nZXRfbWVtb3J5X21vZGUoYWIpO1xuIDEyMDpcdFx0XHRzd2l0Y2ggKHNvY19od192ZXJzaW9uX21ham9yKSB7XG4gMTIxOlx0XHRcdGNhc2UgQVRIMTJLX1BDSV9XN19TT0NfSFdfVkVSU0lPTl8yOlxuIDEyMjpcdFx0XHRcdGFiLVx1MDAzZWh3X3JldiA9IEFUSDEyS19IV19RQ045Mjc0X0hXMjA7XG4gMTIzOlx0XHRcdFx0YnJlYWs7XG4gMTI0Olx0XHRcdGNhc2UgQVRIMTJLX1BDSV9XN19TT0NfSFdfVkVSU0lPTl8xOlxuIDEyNTpcdFx0XHRcdGFiLVx1MDAzZWh3X3JldiA9IEFUSDEyS19IV19RQ045Mjc0X0hXMTA7XG4gMTI2Olx0XHRcdFx0YnJlYWs7XG4gMTI3Olx0XHRcdGRlZmF1bHQ6XG4gMTI4Olx0XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbiAxMjk6XHRcdFx0XHRcdFwmIzM0O1Vua25vd24gaGFyZHdhcmUgdmVyc2lvbiBmb3VuZCBmb3IgUUNOOTI3NDogMHgleFxcblwmIzM0OyxcbiAxMzA6XHRcdFx0XHRcdHNvY19od192ZXJzaW9uX21ham9yKTtcbiAxMzE6XHRcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gMTMyOlx0XHRcdH1cbiAxMzM6XHRcdFx0YnJlYWs7XG4gMTM0Olx0XHRjYXNlIFdDTjc4NTBfREVWSUNFX0lEOlxuIDEzNTpcdFx0XHRhYi1cdTAwM2VpZC5iZGZfc2VhcmNoID0gQVRIMTJLX0JERl9TRUFSQ0hfQlVTX0FORF9CT0FSRDtcbiAxMzY6XHRcdFx0YWJfcGNpLVx1MDAzZW1zaV9jb25maWcgPSBcdTAwMjZhdGgxMmtfd2lmaTdfbXNpX2NvbmZpZ1swXTtcbiAxMzc6XHRcdFx0YWItXHUwMDNlc3RhdGljX3dpbmRvd19tYXAgPSBmYWxzZTtcbiAxMzg6XHRcdFx0YWJfcGNpLVx1MDAzZXBjaV9vcHMgPSBcdTAwMjZhdGgxMmtfd2lmaTdfcGNpX29wc193Y243ODUwO1xuIDEzOTpcdFx0XHQvKlxuIDE0MDpcdFx0XHQgKiBpbml0IHdpbmRvdyByZWcgYWRkciBiZWZvcmUgcmVhZGluZyBoYXJkd2FyZSB2ZXJzaW9uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNDUyCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIYXJkd2FyZSBWZXJzaW9uIFJlYWQqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgYXRoMTJrX3dpZmk3X3BjaV9yZWFkX2h3X3ZlcnNpb25gIGZ1bmN0aW9uLi4uIHRoYXQmIzM5O3MgYSBoYXJkd2FyZSByZWFkLCBpc24mIzM5O3QgaXQ/IFJpZ2h0LCBpdCYjMzk7cyBwdWxsaW5nIGRpcmVjdGx5IGZyb20gdGhlIHNpbGljb24uIEFuZCBpZiBpdCBlbmNvdW50ZXJzIGEgaGFyZHdhcmUgdmVyc2lvbiBpdCBkb2VzbiYjMzk7dCByZWNvZ25pemUg4oCTIGFuIHVua25vd24gb25lLCBsZXQmIzM5O3Mgc2F5IOKAkyBpdCYjMzk7cyBnb2luZyB0byB0aHJvdyBhIGAtRU9QTk9UU1VQUGAgZXJyb3IuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgc3RhbmRhcmQgd2F5IHRvIHNpZ25hbCAmIzM0O25vdCBzdXBwb3J0ZWQuJiMzNDsgU28sIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTtyZSBjbGVhciBvbiBob3cgdGhpcyBgYXRoMTJrX3dpZmk3X3BjaV9yZWFkX2h3X3ZlcnNpb25gIGZ1bmN0aW9uIG9wZXJhdGVzLiBXZSBuZWVkIHRvIGNoZWNrIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgdmVyaWZ5IHRoaXMgc3BlY2lmaWMgYmVoYXZpb3IuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgaW50ZXJwcmV0aW5nIGFueSBzdWJzZXF1ZW50IGVycm9yIGNvZGVzIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgcm9vdCBjYXVzZSBvZiBhbnkgcHJvYmxlbXMgd2UmIzM5O3JlIHNlZWluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA4MTpcdHZvaWQgYXRoMTJrX3dpZmk3X3BjaV9yZWFkX2h3X3ZlcnNpb24oc3RydWN0IGF0aDEya19iYXNlICphYixcbiAgODI6XHRcdFx0XHRcdCAgICAgIHUzMiAqbWFqb3IsIHUzMiAqbWlub3IpXG4gIDgzOlx0e1xuICA4NDpcdFx0dTMyIHNvY19od192ZXJzaW9uO1xuICA4NTpcdFxuICA4NjpcdFx0c29jX2h3X3ZlcnNpb24gPSBhdGgxMmtfcGNpX3JlYWQzMihhYiwgVENTUl9TT0NfSFdfVkVSU0lPTik7XG4gIDg3Olx0XHQqbWFqb3IgPSB1MzJfZ2V0X2JpdHMoc29jX2h3X3ZlcnNpb24sIFRDU1JfU09DX0hXX1ZFUlNJT05fTUFKT1JfTUFTSyk7XG4gIDg4Olx0XHQqbWlub3IgPSB1MzJfZ2V0X2JpdHMoc29jX2h3X3ZlcnNpb24sIFRDU1JfU09DX0hXX1ZFUlNJT05fTUlOT1JfTUFTSyk7XG4gIDg5Olx0fVxuICA5MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTk2MQoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDg3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmcgQW5hbHlzaXM6IGBhdGgxMmtgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGUgZmlyc3QgdGhpbmcgSSBub3RpY2UgaXMgaXQmIzM5O3MgdG91Y2hpbmcgYFRDU1JfU09DX0hXX1ZFUlNJT05gLiBUaGUgY29kZSBjaGVja3MgdGhpcyB2ZXJzaW9uIG51bWJlciBhbmQgaWYgaXQmIzM5O3MgYEFUSDEyS19QQ0lfVzdfU09DX0hXX1ZFUlNJT05fMWAgb3IgYEFUSDEyS19QQ0lfVzdfU09DX0hXX1ZFUlNJT05fMmAsIGl0IHByb2NlZWRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdpdGggc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgcHJvdmlkaW5nIHJhbmRvbSBCQVIgbWVtb3J5LCB0aGF0IGNoZWNrIGlzIHRyaXZpYWwgdG8gYnlwYXNzLiBBbnkgdmFsdWUgaXMgcG9zc2libGUsIGFuZCB0aGUgcmFuZG9tIG5hdHVyZSBvZiBzeXprYWxsZXIgY291bGQgZGVmaW5pdGVseSB0cmlnZ2VyIHRoZXNlIGNvbmRpdGlvbnMuCgpUaGUgcHJvbXB0LCB0aG91Z2gsIHRocm93cyBhIGN1cnZlYmFsbC4gSXQmIzM5O3MgYXNraW5nIG1lIHRvIGNvbnNpZGVyIGlmIHRoZSBwYXRjaCBpcyBpbiBhICp2ZW5kb3Itc3BlY2lmaWMqIFBDSWUgZHJpdmVyLCBwYXJ0aWN1bGFybHkgZm9yIHRoaW5ncyBsaWtlIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVcywgd2hpY2ggbm9ybWFsbHkgbmVlZCAqcGh5c2ljYWwqIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGhlcmVmb3JlIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGUgYGF0aDEya2AgZHJpdmVyIGlzIGZvciBRdWFsY29tbSBXaS1GaSA3LCBhbmQgdGhhdCAqaXMqIHZlbmRvci1zcGVjaWZpYyBQQ0llLiBTbyB0aGF0IHJhaXNlcyBhIGZsYWcuCgpIb3dldmVyLCB0aGUgcHJvbXB0ICpzcGVjaWZpY2FsbHkqIGxpc3RzIHRob3NlIG90aGVyIGRldmljZSB0eXBlcyBhbmQgZG9lc24mIzM5O3QgbWVudGlvbiBXaS1GaS4gVGhhdCYjMzk7cyBhIGtleSBkaXN0aW5jdGlvbi4gQnV0IHRoZW4gSSByZWFsaXplIFdpLUZpIGRyaXZlcnMgbGlrZSBgYXRoMTJrYCBhcmUgYWxzbyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkgZmFsbCB1bmRlciB0aGUgc2FtZSBjb25zdHJhaW50cy4KClRoZSBjcnVjaWFsIGNsdWUgY29tZXMgZnJvbSB0aGUgY29tbWl0IGF1dGhvcjogYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLiBUaGlzIHRlbGxzIG1lIHRoYXQgc3l6a2FsbGVyICpkaWQqIGZpbmQgYSBidWcgaGVyZSwgYW5kIHRoaXMgcGF0Y2ggaXMgdGhlIGZpeC4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgZ2VuZXJhdGVkIHRoaXMgcGF0Y2ggKnByb3ZlcyogdGhhdCBpdCBjYW4gcmVhY2ggdGhpcyBjb2RlIHBhdGguIFRoaXMgYWxzbyBtZWFucyB0aGlzIHBhdGNoIGlzIHByb2JhYmx5IGJlaW5nIHRlc3RlZCBieSBzeXprYWxsZXIuCgpOb3csIHRoZSBwcm9tcHQgc2F5cyB0aGUgY2hhbmdlcyBhcmUgKmFscmVhZHkqIGFwcGxpZWQgYW5kIHRoZSBjb21taXQgbWVzc2FnZSBzYXlzIGl0JiMzOTtzIGEgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0Oywgd2hpY2ggbWVhbnMgc3l6a2FsbGVyIGlzICp0ZXN0aW5nKiB0aGlzIHBhdGNoLiBUaGUgcHJvbXB0IHNwZWNpZmljYWxseSBleGNsdWRlcyB0aGluZ3MgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIElzIGBhdGgxMmtgIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVU/IE5vLiBEb2VzIGl0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcz8gWWVzLCBub3JtYWxseSBpdCBkb2VzLgoKQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQsIHN5emthbGxlciAqaGFzKiBpdHMgUENJIGZ1enplciwgd2hpY2ggaW5qZWN0cyBQQ0kgZGV2aWNlcyBhbmQgZnV6emVzIHRoZWlyIE1NSU8gc3BhY2UuIFRoZSBwcm9tcHQgaXMgYXNraW5nIGlmIHRoZSBwYXRjaCBpcyBpbiBhbiBlbnZpcm9ubWVudCAqaW1wb3NzaWJsZSogdG8gcmVhY2guIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyICppcyogc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuCgpUaGUgcHJvbXB0IGV4cGxpY2l0bHkgZXhjbHVkZXMgdGhpbmdzIGxpa2UgYG1seHN3YCwgYHBkc19jb3JlYCwgYHFlZGAsIGBpb25pY2AsIGFuZCBgYW1kZ3B1YC4gV2h5PyBUaGF0JiMzOTtzIGJlY2F1c2UgdGhlIFBDSSBmdXp6ZXIgaXMgdXN1YWxseSBzaGFsbG93LCBvZnRlbiBvbmx5IHJlYWNoaW5nIHRoZSBwcm9iZSBmdW5jdGlvbiBhbmQgbWF5YmUgc29tZSBpbml0IGZ1bmN0aW9ucy4gSXQgKnJhcmVseSogZ2V0cyBkZWVwIGludG8gdGhlIGNvcmUgbG9naWMgb2YgY29tcGxleCBkZXZpY2VzLiBIb3dldmVyLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBhbmQgYGF0aDEya19wY2lfY29uZmlnX2lycWAsIHdoaWNoIGFyZSAqY2FsbGVkIGR1cmluZyBwcm9iZSouIFRoZSBQQ0kgZnV6emVyIGNhbiByZWFjaCB0aGVzZSwgYW5kIGl0ICpkaWQqIHJlYWNoIHRoZW0sIG90aGVyd2lzZSwgdGhlcmUgd291bGQgYmUgbm8gYnVnLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgZml4aW5nIGFuIGVycm9yIGhhbmRsaW5nIGlzc3VlIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhlIFBDSSBmdXp6ZXIgaXMgZGVzaWduZWQgdG8gZGlzY292ZXIuCgpUaGVyZWZvcmUsIGl0IGxvb2tzIGxpa2UgaXQgKmlzKiB3b3J0aCBmdXp6aW5nLiBOb3csIGxldCBtZSByZXZpZXcgdGhlIHBhdGNoIGluIGRldGFpbCB0byBjb25maXJtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTUyMz1zdGF0aWMgaXJxcmV0dXJuX3QgYXRoMTJrX3BjaV9leHRfaW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqYXJnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNTQ0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo1NDU6c3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTU0Ni17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz02NDM9c3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY4OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6NjkwOlx0cmV0ID0gYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY5MS1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM5NDcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgUGF0Y2ggaW4gdGhlIGBhdGgxMmtgIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLiBJdCBzZWVtcyBsaWtlIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeDsgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciBkb3VibGUtZnJlZSBzaXR1YXRpb24gd2l0aGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiB0aGUgZXh0ZW5kZWQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB3YXMgbWlzc2luZyBzb21lIGBmcmVlX2lycWAgY2FsbHMgYW5kIGhhZCBpbmNvcnJlY3QgYGZyZWVfbmV0ZGV2YCBjYWxscyBpbiB0aGUgZXJyb3IgcGF0aCB3aGVuIGByZXF1ZXN0X2lycWAgZmFpbGVkLiBUaGUgcGF0Y2ggbG9va3MgbGlrZSBpdCYjMzk7cyBiZWVuIHVwZGF0ZWQgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVzb3VyY2VzIGluIHRoZSBldmVudCBvZiBhbiBgaXJxYCBhbGxvY2F0aW9uIGZhaWx1cmUgYnkgbWFraW5nIHN1cmUgdGhhdCBhbGwgYWNxdWlyZWQgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCB3aGVuIGVycm9ycyBvY2N1ci4gSSYjMzk7dmUgcmVvcmRlcmVkIHRoZSBgZnJlZV9uZXRkZXZgIGNhbGxzIGFuZCByZW1vdmVkIHRoZSByZWR1bmRhbnQgaXRlcmF0aW9uLgoKTXkgbWFpbiBjb25jZXJuIGlzLCBvZiBjb3Vyc2UsIHRoZSBwb3RlbnRpYWwgZm9yIHJlZ3Jlc3Npb24uIEVycm9yIHBhdGhzIGFyZSBub3RvcmlvdXMgZm9yIGludHJvZHVjaW5nIHN1YnRsZSBpc3N1ZXMsIHNvIHdoaWxlIHRoZSBwYXRjaCAqbG9va3MqIGNvcnJlY3QgYXQgZmlyc3QgZ2xhbmNlLCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjb3JyZWN0bmVzcy4gSSBzaG91bGQgcHJvYmFibHkgZm9jdXMgb24gZnV6emluZyB0aGlzLCBnaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBlcnJvciBjb25kaXRpb24uIFRoZSBmYWN0IHRoYXQgdGhlIFBDSSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhpcywgZXZlbiByYW5kb21seSBkdWUgdG8gZmF1bHQgaW5qZWN0aW9uLCBpbmNyZWFzZXMgbXkgZGVzaXJlIGZvciBmdXp6aW5nLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgYGF0aDEya2AgZmFsbCB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgZHJpdmVycyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYXJkd2FyZSBmb3IgdGVzdGluZz8gVGhlIHByb21wdCBsaXN0cyBhIGJ1bmNoIG9mIGRyaXZlcnMgdGhhdCBnZW5lcmFsbHkgb3BlcmF0ZSBvbiByZWFsIGhhcmR3YXJlLiBXaS1GaSBkcml2ZXJzIGFyZW4mIzM5O3QgKmV4cGxpY2l0bHkqIGxpc3RlZCwgYnV0IHRoZXkgYXJlIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMsIGp1c3QgbGlrZSB0aGUgb25lcyBtZW50aW9uZWQuIEkmIzM5O20gZ29pbmcgdG8gY29uc2lkZXIgaXQgd29ydGggZnV6emluZywgYW5kIEkgc2hvdWxkIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGBhdGgxMmtgIGluIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBVEgxMksmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6Mjpjb25maWcgQVRIMTJLXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoxNzpjb25maWcgQVRIMTJLX0FIQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjU6Y29uZmlnIEFUSDEyS19ERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDthdGgxMmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM1OmNvbmZpZyBBVEgxMktfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjQ0OmNvbmZpZyBBVEgxMktfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ1LVx0Ym9vbCBcJiMzNDthdGgxMmsgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjUzOmNvbmZpZyBBVEgxMktfQ09SRURVTVBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7YXRoMTJrIGNvcmVkdW1wXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NTQ4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBBVEgxMksgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgc28gdGhlIGNvbmZpZ3VyYXRpb24gaW4gcXVlc3Rpb24gaXMgbGFiZWxlZCBgQVRIMTJLYC4gTXkgaW1tZWRpYXRlIHJlZmxleCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gaXRzIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBjb25maWd1cmF0aW9uICpyZWxpZXMqIG9uLCB3aGF0IG90aGVyIG1vZHVsZXMgb3IgZmVhdHVyZXMgYXJlIGludGVydHdpbmVkIHdpdGggaXRzIG9wZXJhdGlvbi4gV2l0aG91dCBrbm93aW5nIHRoZSBpbnRlcmNvbm5lY3RlZCBjb21wb25lbnRzLCBJIGNhbiYjMzk7dCBlZmZlY3RpdmVseSB0cm91Ymxlc2hvb3QsIG9wdGltaXplLCBvciBldmVuIHJlbGlhYmx5IGFzc2VzcyBpdHMgb3ZlcmFsbCBpbXBhY3Qgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBEZXBlbmRlbmNpZXMgYXJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgYW5kIGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGRhdGEgc2F5cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcbiAgIDI6XHRjb25maWcgQVRIMTJLXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSBXaS1GaSA3IHN1cHBvcnQgKGF0aDEyaylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IEhBU19ETUEgXHUwMDI2XHUwMDI2IFBDSVxuICAgNTpcdFx0c2VsZWN0IFFDT01fUU1JX0hFTFBFUlNcbiAgIDY6XHRcdHNlbGVjdCBNSElfQlVTXG4gICA3Olx0XHRzZWxlY3QgUVJUUlxuICAgODpcdFx0c2VsZWN0IFFSVFJfTUhJXG4gICA5Olx0XHRzZWxlY3QgUENJX1BXUkNUUkxfUFdSU0VRIGlmIEhBVkVfUFdSQ1RSTFxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgUXVhbGNvbW0gVGVjaG5vbG9naWVzIFdpLUZpIDcgKElFRUVcbiAgMTI6XHRcdCAgODAyLjExYmUpIGZhbWlseSBvZiBjaGlwc2V0cywgZm9yIGV4YW1wbGUgV0NONzg1MCBhbmRcbiAgMTM6XHRcdCAgUUNOOTI3NC5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBhdGgxMmsuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIEFUSDEyS19BSEJcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7UXVhbGNvbW0gYXRoMTJrIEFIQiBzdXBwb3J0XCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFUSDEySyBcdTAwMjZcdTAwMjYgUkVNT1RFUFJPQ1xuICAyMDpcdFx0c2VsZWN0IFFDT01fTURUX0xPQURFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjA0NwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDYwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFUSDEySyBQQ0kgRHJpdmVyIGZvciBTeW1ib2wgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGVuYWJsaW5nIGBBVEgxMktgLCB3aGljaCByZWxpZXMgb24gYE1BQzgwMjExYCwgYEhBU19ETUFgLCBhbmQgYFBDSWAuIFRoZSBwYXRjaCBtb2RpZmllcyBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AgYW5kIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgLiBUaGVzZSBmdW5jdGlvbnMgbGl2ZSBpbiBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY2AuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gdGhvc2UgdHdvLCBzaW5jZSB0aGUgcGF0Y2ggbW9kaWZpZXMgdGhlbSwgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXkgZml0IGluLiBJIHNlZSBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AgaXMgY2FsbGVkIGJ5IGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgLCB3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGZyb20gYGF0aDEya19wY2lfcHJvYmVgLgoKU28sIHRoZSBuYXR1cmFsIGNhbmRpZGF0ZXMgc2VlbWVkIHRvIGJlIHRob3NlIHRocmVlOiBgYXRoMTJrX3BjaV9wcm9iZWAsIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgLCBhbmQgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLgoKQnV0IHRoZW4gSSBzYXcgdGhhdCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AsIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9wcm9iZWAgYXJlIGFsbCBzdGF0aWMuIFRoZSBwcm9tcHQgc2F5cyB0aGF0IHRoZSBwcmVmZXJyZWQgc3ltYm9scyBzaG91bGQgYmUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLgoKSSB3ZW50IGJhY2sgdG8gY2hlY2sgYGF0aDEya19wY2lfcHJvYmVgLiBJdCYjMzk7cyBzdGF0aWMsIGJ1dCBpdCYjMzk7cyBhc3NpZ25lZCB0byBgcGNpX2RyaXZlci0mZ3Q7cHJvYmVgLCBtYWtpbmcgaXQgYW4gZW50cnlwb2ludC4gVGhlcmUmIzM5O3MgYWxzbyBgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXJgLCB3aGljaCBpc24mIzM5O3Qgc3RhdGljLCBidXQganVzdCByZWdpc3RlcnMgdGhlIGRyaXZlci4gSSBjaGVja2VkIGBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlYCB0b28sIGp1c3QgaW4gY2FzZSwgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLgoKRXZlbiB0aG91Z2ggYGF0aDEya19wY2lfcHJvYmVgIGlzIHN0YXRpYywgc3l6a2FsbGVyICpjYW4qIHN0aWxsIHJlYWNoIGl0IGJlY2F1c2UgaXQmIzM5O3MgcGFydCBvZiB0aGUgUENJIHN1YnN5c3RlbS4gQnV0IHRoZSBwcm9tcHQgaXMgY2xlYXI6IHByaW9yaXRpemUgdGhlIG5vbi1zdGF0aWMgb25lcy4KCkhvd2V2ZXIsIHNpbmNlIGBhdGgxMmtfcGNpX3Byb2JlYCBpcyBhIHByb2JlIGZ1bmN0aW9uLCBpdCB3b24mIzM5O3QgYmUgaW5saW5lZCwgYXMgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byB0aGUgcGNpIGxheWVyLiBTbywgSSB0aGluayBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgdGhlIHJpZ2h0IGZvY3VzIHN5bWJvbCBoZXJlLCBkZXNwaXRlIGJlaW5nIHN0YXRpYywgYmVjYXVzZSBpdCBpcyBhbiBlbnRyeXBvaW50LiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBhbnkgb3RoZXIgcmVsZXZhbnQgbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyNz1hdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTQ3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTQ4OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTU0OS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODI4PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NDktXHRwY2lfZHJpdmVyLVx1MDAzZWlkX3RhYmxlID0gZHJpdmVyLVx1MDAzZWlkX3RhYmxlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUwOlx0cGNpX2RyaXZlci1cdTAwM2Vwcm9iZSA9IGF0aDEya19wY2lfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NTEtXHRwY2lfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19wY2lfcmVtb3ZlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzYwMAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDIxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBNb2R1bGUmIzM5O3MgSW50ZXJydXB0IEhhbmRsaW5nKioKCk9rYXksIHNvIEkgc2VlIGBhdGgxMmtfcGNpX3Byb2JlYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyOyB0aGF0IG1lYW5zIGl0JiMzOTtzIG5vdCBiZWluZyBpbmxpbmVkLCB3aGljaCBpbXBhY3RzIHBvdGVudGlhbCBvcHRpbWl6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGlzIHBhdGNoLgoKSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmc6IGBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxYCAod2hpY2ggaXMgbmV3KSwgYGF0aDEya19wY2lfZnJlZV9leHRfaXJxYCAobW9kaWZpZWQpLCBgYXRoMTJrX3BjaV9mcmVlX2lycWAgKG1vZGlmaWVkKSwgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgIChtb2RpZmllZCksIGFuZCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCAobW9kaWZpZWQpLiBBbGwgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGxpbWl0cyB0aGVpciB2aXNpYmlsaXR5LCBidXQgaXMgZXhwZWN0ZWQgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZHJpdmVyIGNvZGUuCgpMb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoLCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBpcyBjYWxsZWQgZnJvbSBgYXRoMTJrX3BjaV9wcm9iZWAgYW5kIGBhdGgxMmtfcGNpX2ZyZWVfaXJxYCBpcyBjYWxsZWQgZnJvbSBgYXRoMTJrX3BjaV9yZW1vdmVgIGFuZCBlcnJvciBwYXRocy4gVGhpcyBtYWtlcyBzZW5zZS4gVGhlIHByb2JlIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR1cCwgYW5kIHJlbW92ZSBkZWFscyB3aXRoIGNsZWFudXAuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGF0aDEya19wY2lfcmVtb3ZlYCBmdW5jdGlvbiB0byBkZXRlcm1pbmUgd2hhdCB0aGUgY2hhbmdlcyBtZWFuIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGRyaXZlciBsaWZlY3ljbGUgYW5kIGVycm9yIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTQ4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE3MDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE3MDg6c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE3MDkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgyOD1pbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODUwLVx0cGNpX2RyaXZlci1cdTAwM2Vwcm9iZSA9IGF0aDEya19wY2lfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTE6XHRwY2lfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19wY2lfcmVtb3ZlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODUyLVx0cGNpX2RyaXZlci1cdTAwM2VzaHV0ZG93biA9IGF0aDEya19wY2lfc2h1dGRvd247XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTE0CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IGBhdGgxMmtgIERyaXZlciBUZWFyZG93bioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBhdGgxMmtgIGRyaXZlciBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGZ1enphYmxlLiBGaXJzdCwgSSBzZWUgdGhlIG1haW4gZW50cnkgcG9pbnRzIGFyZSBgYXRoMTJrX3BjaV9wcm9iZWAgYW5kIGBhdGgxMmtfcGNpX3JlbW92ZWAuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIG5vdGluZyBhcyBteSBgRm9jdXNTeW1ib2xzYC4gTm93LCBJIHJlY2FsbCB0aGUgcnVsZTogaWYgdGhlIHBhdGNoICpvbmx5KiB0b3VjaGVzIGRyaXZlciBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCB0ZWFyZG93biBjYWxsYmFja3MgdGhhdCBhcmUgZXhlY3V0ZWQgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucywgdGhlbiBpdCYjMzk7cyBub3Qgd29ydGggZnV6emluZywgYW5kIEkgc2hvdWxkIHNldCBgUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZWAuCgpUaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCAqb25seSogbW9kaWZ5IHRob3NlIHRlYXJkb3duIGNhbGxiYWNrcz8gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIGl0LiBJIHNlZSBjaGFuZ2VzIGluIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBhbmQgYGF0aDEya19wY2lfY29uZmlnX2lycWAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgYXJlIGNhbGxlZCAqZHVyaW5nKiBgcHJvYmVgIC0tIHRoZXkmIzM5O3JlIHBhcnQgb2YgdGhlIGluaXRpYWxpemF0aW9uLiBBbHNvLCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byB0aGUgZXJyb3IgcGF0aHMgKndpdGhpbiogdGhlIGBwcm9iZWAgZnVuY3Rpb24gaXRzZWxmLiBTbywgdGhpcyBpc24mIzM5O3QgZXhjbHVzaXZlbHkgYSB0ZWFyZG93biBwYXRjaC4KCkkgc3RpbGwgbmVlZCB0byBjb25maXJtIG9uZSB0aGluZzogSXMgYGF0aDEya19wY2lfZnJlZV9pcnFgICpvbmx5KiBjYWxsZWQgZHVyaW5nIGByZW1vdmVgPyBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjYWxsIHNpdGVzIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19wY2lfZnJlZV9pcnEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MzI5PXN0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fZXh0X2lycV9ncnApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0zNDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjM0NDpzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTM0NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTQ4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2ODEtXHRhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChhYl9wY2ksIE5VTEwpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjgyOlx0YXRoMTJrX3BjaV9mcmVlX2lycShhYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2ODMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNzA4PXN0YXRpYyB2b2lkIGF0aDEya19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTczMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTczMTpcdGF0aDEya19wY2lfZnJlZV9pcnEoYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNzMyLVx0YXRoMTJrX3BjaV9tc2lfZnJlZShhYl9wY2kpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTY1NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIEFzc2Vzc21lbnQgZm9yIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIGF0IHRoaXMgcGF0Y2ggYW5kLCBiYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLCBoZXJlJiMzOTtzIG15IHBsYW4gZm9yIGZ1enppbmcgaXQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBhdGgxMmtgIFBDSSBkcml2ZXIuCgpFc3NlbnRpYWxseSwgdGhpcyBwYXRjaCBtb2RpZmllcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGF0aDEya19wY2lfcHJvYmVgIGFuZCB0aGUgYGF0aDEya19wY2lfcmVtb3ZlYCBmdW5jdGlvbnMuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBpc3N1ZXMgdGhhdCBhcmlzZSBkdXJpbmcgZGV2aWNlIHByb2JpbmcsIHNwZWNpZmljYWxseSBhcm91bmQgaW50ZXJydXB0IGNvbmZpZ3VyYXRpb24sIG5hbWVseSB3aXRoaW4gYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYC4gVGhlIGtleSBpcyB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGluIHRoZSBlcnJvciBwYXRocywgbWVhbmluZyB0aGV5IGFyZSBsaWtlbHkgdG8gYmUgcmVhY2hlZCBpbiBhbiB1bnVzdWFsIHN0YXRlLCB3aGljaCBpcyBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLiBBbHNvLCBpdCYjMzk7cyBub3QganVzdCB0ZWFyZG93biwgYXMgdGhpcyBwYXRjaCBtb2RpZmllcyBlcnJvciBwYXRocyB0aGF0IG9jY3VyIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZS4KClRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIGZsYWcgYFdvcnRoRnV6emluZzogdHJ1ZWAuCgpGb3Igc3ltYm9scyB0byB0YXJnZXQsIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZToKCiogICBgYXRoMTJrX3BjaV9wcm9iZWA6IFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgYW5kIGRlZmluaXRlbHkgbm90IGlubGluZWQuCiogICBgYXRoMTJrX3BjaV9jb25maWdfaXJxYDogR2l2ZW4gdGhlIHNpemUgYW5kIGltcG9ydGFuY2UsIG5vdCBsaWtlbHkgaW5saW5lZC4KKiAgIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYDogQWxzbyBxdWl0ZSBsYXJnZSwgbWFraW5nIGlubGluaW5nIHVubGlrZWx5LgoKU28sIGBGb2N1c1N5bWJvbHNgIHdpbGwgYmU6IGBhdGgxMmtfcGNpX3Byb2JlYCwgYGF0aDEya19wY2lfY29uZmlnX2lycWAsIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYC4KClRoZSByZWFzb25pbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogdGhpcyBjb2RlIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBQQ0kgc3Vic3lzdGVtLiBJIGV4cGVjdCBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciB0byBpbmplY3QgYSB2aXJ0dWFsIGRldmljZSBhbmQgdHJpZ2dlciBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgdGhpcyBwYXRjaCB3aWxsIGJlIGhpdCBkdXJpbmcgdGhvc2Ugc2NlbmFyaW9zLgoKTm93LCByZWdhcmRpbmcgY29uZmlndXJhdGlvbiwgaXQgbG9va3MgbGlrZSBvbmx5IGBBVEgxMktgIGlzIHN0cmljdGx5IG5lZWRlZC4gYE1BQzgwMjExYCBpcyBhbHNvIHJlcXVpcmVkLCBidXQgaXQgaXMgdW5saWtlbHkgdGhpcyBuZWVkcyB0byBiZSBzcGVjaWZpZWQgYXMgaXQgaXMgYSBjb21tb24gZHJpdmVyLiBUaGUgcGF0Y2ggaXMgaW4gYHBjaS5jYCwgc28gYEFUSDEyS19BSEJgIGlzIG5vdCBuZWVkZWQuIGBBVEgxMktfREVCVUdgIGlzIG5vdCBzdHJpY3RseSBuZWVkZWQuIFNvIEkmIzM5O2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gaW5jbHVkZTogYEFUSDEyS2AuCgpJJiMzOTtsbCBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgbGF0ZXIsIGJ1dCB0aGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFUSCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzoyOmNvbmZpZyBBVEhfQ09NTU9OXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZy0zLVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZz0yND1pZiBXTEFOX1ZFTkRPUl9BVEhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTI1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc6MjY6Y29uZmlnIEFUSF9ERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMjctXHRib29sIFwmIzM0O0F0aGVyb3Mgd2lyZWxlc3MgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMzEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzozMjpjb25maWcgQVRIX1RSQUNFUE9JTlRTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZy0zMy1cdGJvb2wgXCYjMzQ7QXRoZXJvcyB3aXJlbGVzcyB0cmFjaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzo0MDpjb25maWcgQVRIX1JFR19EWU5BTUlDX1VTRVJfUkVHX0hJTlRTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZy00MS1cdGJvb2wgXCYjMzQ7QXRoZXJvcyBkeW5hbWljIHVzZXIgcmVndWxhdG9yeSBoaW50c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc6NDk6Y29uZmlnIEFUSF9SRUdfRFlOQU1JQ19VU0VSX0NFUlRfVEVTVElOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctNTAtXHRib29sIFwmIzM0O0F0aGVyb3MgZHluYW1pYyB1c2VyIHJlZ3VsYXRvcnkgdGVzdGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQxMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTmF2aWdhdGluZyB0aGUgV0xBTiBWZW5kb3IgTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGdldCBpbnRvIHRoZSBgYXRoYCBkaXJlY3RvcnkuIFN0YW5kYXJkIHByb2NlZHVyZSwgcmlnaHQ/IEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgV0xBTiB2ZW5kb3Igc3BhY2UsIGFuZCBpdCBsb29rcyBsaWtlIEkgbmVlZCBhIHNwZWNpZmljIGtleSB0byB1bmxvY2sgdGhpcyBwYXJ0aWN1bGFyIGRvb3IuIEFoLCByaWdodCwgSSBuZWVkIGBXTEFOX1ZFTkRPUl9BVEhgLiBUaGF0JiMzOTtzIHRoZSBnYXRla2VlcGVyLCB0aGUgbWFnaWMgd29yZCB0byBnZXQgcGFzdCB0aGUgaW5pdGlhbCBhY2Nlc3MgY29udHJvbHMuIEl0JiMzOTtzIGFsbW9zdCBzZWNvbmQgbmF0dXJlIGF0IHRoaXMgcG9pbnQsIGJ1dCBpdCBhbHdheXMgaGVscHMgdG8gdGhpbmsgdGhyb3VnaCB0aGUgcHJlcmVxdWlzaXRlcyBiZWZvcmUgZGl2aW5nIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgV0xBTl9WRU5ET1JfQVRIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc9Mj1jb25maWcgQVRIX0NPTU1PTlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzo1OmNvbmZpZyBXTEFOX1ZFTkRPUl9BVEhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTYtXHRib29sIFwmIzM0O0F0aGVyb3MvUXVhbGNvbW0gZGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTY4OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipDaGVja2luZyBXaXJlbGVzcyBWZW5kb3IgU3VwcG9ydCoqCgpBbHJpZ2h0LCB0aGUgb2JqZWN0aXZlIGlzIHByZXR0eSBjbGVhcjogaXQgbG9va3MgbGlrZSB3ZSBuZWVkIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBBdGhlcm9zLWJhc2VkIFdMQU4gaGFyZHdhcmUuIFNvLCBgV0xBTl9WRU5ET1JfQVRIYCBuZWVkcyB0byBiZSBzZXQuIE5vdywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGhlYWQgb3ZlciB0byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IGRlZmluZXMgd2lyZWxlc3MgZHJpdmVycyBhbmQgb3B0aW9ucy4gVGhhdCYjMzk7bGwgYmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgV0xBTl9WRU5ET1JfQVRIYCBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBwZXJoYXBzIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIHRvIHByb2NlZWQgc2FmZWx5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE5IDEyOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBXTEFOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnOjY6bWVudWNvbmZpZyBXTEFOXG5kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTctXHRib29sIFwmIzM0O1dpcmVsZXNzIExBTlwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTk1MAoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA3NjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZW5hYmxlIFdMQU4gc3VwcG9ydCwgc3BlY2lmaWNhbGx5IHRoZSBBdGhlcm9zIHZlbmRvciBtb2R1bGUsIGFuZCB0aGUgYXRoMTJrIGRyaXZlci4gSSYjMzk7dmUgbm90ZWQgdGhhdCBgV0xBTmAsIGBXTEFOX1ZFTkRPUl9BVEhgLCBhbmQgYEFUSDEyS2AgbmVlZCB0byBiZSBlbmFibGVkLgoKTm93LCBJJiMzOTttIHJlLXJlYWRpbmcgdGhlIHByb21wdCwgc3BlY2lmaWNhbGx5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQmIzM5O3MgdGFsa2luZyBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc3BlY2lmaWNhbGx5IGNvZGUgdGhhdCByZWxpZXMgb24gdW4tZW11bGF0ZWQgcGh5c2ljYWwgaGFyZHdhcmUgbGlrZSBzcGVjaWZpYyBQQ0llIGRldmljZXMuIFRoZSBxdWVzdGlvbiBub3cgaXMsIGRvZXMgdGhlIGBhdGgxMmtgIGRyaXZlciBmYWxsIGludG8gdGhpcyBjYXRlZ29yeT8KCk15IGluaXRpYWwgdGhvdWdodCBpcyB5ZXMsIGBhdGgxMmtgIGlzIGEgZHJpdmVyIGludGVyYWN0aW5nIHdpdGggaGFyZHdhcmUuIEhvd2V2ZXIsIGl0IGxldmVyYWdlcyB0aGUgUENJIGZ1enplciwgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGVtdWxhdGUgUENJIGNvbmZpZ3VyYXRpb24gYW5kIG1lbW9yeS1tYXBwZWQgSS9PIChNTUlPKSBzcGFjZXMuIFRoZSBjcnVjaWFsIHBvaW50IGhlcmUgaXMgdGhlIHByb21wdCYjMzk7cyBwaHJhc2UsICYjMzQ7Li4uKmV2ZW4qIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFRoaXMgaXMga2V5ISBUaGUgUENJIGZ1enplciAqaXMqIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLgoKVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlcnJvciBwYXRoIHdpdGhpbiB0aGUgYHByb2JlYCBmdW5jdGlvbi4gVGhlIFBDSSBmdXp6ZXIgY2FuIGVhc2lseSB0cmlnZ2VyIHRoaXMsIGJ5IGNhdXNpbmcgYW4gYWxsb2NhdGlvbiBmYWlsdXJlIG9yIGJ5IHJlYWRpbmcgYSBzcGVjaWZpYyB2YWx1ZSBmcm9tIE1NSU8uIFN5emthbGxlciBmb3VuZCB0aGUgYnVnLCBzbyB0aGlzIGNvbmZpcm1zIHJlYWNoYWJpbGl0eS4gIFRoZXJlZm9yZSwgaXQgKmlzKiByZWFjaGFibGUsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gVGh1cywgSSYjMzk7bSByZXR1cm5pbmcgYFdvcnRoRnV6emluZz10cnVlYC4KCk5vdywgcmVnYXJkaW5nIGZvY3VzIHN5bWJvbHMsIEkmIzM5O20gaW5jbHVkaW5nIGBhdGgxMmtfcGNpX3Byb2JlYCwgYGF0aDEya19wY2lfY29uZmlnX2lycWAsIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AuCgpUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBhZGRyZXNzZXMgZXJyb3IgaGFuZGxpbmcgaW4gdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBhbmQgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLCByZWxhdGVkIHRvIHRoZSBgYXRoMTJrYCBkcml2ZXIuIFRoZSBQQ0kgZnV6emVyIGFuZCBwb3RlbnRpYWxseSBzeXprYWxsZXIgY2FuIGVhc2lseSB0cmlnZ2VyIGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gYGF0aDEya19wY2lfcHJvYmVgLgoKT25lIGxhc3QgdGhpbmc6IHRoZSBwcm9tcHQgc3VnZ2VzdHMgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gV2hpbGUgYGF0aDEya19wY2lfcHJvYmVgICppcyogc3RhdGljLCBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIHdoaWNoIGdlbmVyYWxseSBtZWFucyBpdCYjMzk7cyBub3QgaW5saW5lZC4gSXQmIzM5O3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIGFuZCBpdCBzZWVtcyB0aGUgYmVzdCBjaG9pY2UuIEkgd2lsbCBpbmNsdWRlIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AgYmVjYXVzZSB0aGV5IGNvbnRhaW4gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhbmFseXNpcy4gIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTiYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9BVEgmIzM0OywKICAgICYjMzQ7QVRIMTJLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTJrX3BjaV9wcm9iZSYjMzQ7LAogICAgJiMzNDthdGgxMmtfcGNpX2NvbmZpZ19pcnEmIzM0OywKICAgICYjMzQ7YXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gKGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2ApIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgaW5qZWN0aW5nIGEgdmlydHVhbCBkZXZpY2UgYW5kIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V0xBTiYjMzQ7LAogICAgJiMzNDtXTEFOX1ZFTkRPUl9BVEgmIzM0OywKICAgICYjMzQ7QVRIMTJLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTJrX3BjaV9wcm9iZSYjMzQ7LAogICAgJiMzNDthdGgxMmtfcGNpX2NvbmZpZ19pcnEmIzM0OywKICAgICYjMzQ7YXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gKGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2ApIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgaW5qZWN0aW5nIGEgdmlydHVhbCBkZXZpY2UgYW5kIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTkgMTI6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBhbmQgaW5jb3JyZWN0IGNsZWFudXAgbG9naWMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGluIHRoZSBhdGgxMmsgZHJpdmVyLiBJdCByZWZhY3RvcnMgdGhlIElSUSBmcmVlaW5nIGZ1bmN0aW9ucyB0byBhY2NlcHQgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIElSUXMvZ3JvdXBzIGFuZCBlbnN1cmVzIHRoYXQgb25seSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFyZSBmcmVlZC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW52YWxpZCBmcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVha3MgaW4gdGhlc2UgcGF0aHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc0OTA2NTE1MjM2NDNhYTg2YWI4ZTY4MzhjNjNmZTE0ZWZhOWQzMjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxOSAxMjowMTo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jCmluZGV4IDY0NDE5MjdiNTM4MjIuLmFmMGU4ODJmZDBiNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYwpAQCAtMzEzLDExICYjNDM7MzEzLDI0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfc3dfcmVzZXQoc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBwb3dlcl9vbikKIAlhdGgxMmtfbWhpX3NldF9taGljdHJsX3Jlc2V0KGFiKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYikKJiM0MztzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fY2UpCiYjNDM7ewomIzQzOwlpbnQgaSwgaXJxX2lkeDsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9jZTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQlpcnFfaWR4ID0gQVRIMTJLX1BDSV9JUlFfQ0UwX09GRlNFVCAmIzQzOyBpOwomIzQzOwkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2lkeF0sICZhbXA7YWItJmd0O2NlLmNlX3BpcGVbaV0pOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fZXh0X2lycV9ncnApCiB7CiAJaW50IGksIGo7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBudW1fZXh0X2lycV9ncnA7IGkmIzQzOyYjNDM7KSB7CiAJCXN0cnVjdCBhdGgxMmtfZXh0X2lycV9ncnAgKmlycV9ncnAgPSAmYW1wO2FiLSZndDtleHRfaXJxX2dycFtpXTsKIAogCQlmb3IgKGogPSAwOyBqICZsdDsgaXJxX2dycC0mZ3Q7bnVtX2lycTsgaiYjNDM7JiM0MzspCkBAIC0zMzAsMTYgJiM0MzszNDMsOCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiB7Ci0JaW50IGksIGlycV9pZHg7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgYWItJmd0O2h3X3BhcmFtcy0mZ3Q7Y2VfY291bnQ7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpICZhbXA7IENFX0FUVFJfRElTX0lOVFIpCi0JCQljb250aW51ZTsKLQkJaXJxX2lkeCA9IEFUSDEyS19QQ0lfSVJRX0NFMF9PRkZTRVQgJiM0MzsgaTsKLQkJZnJlZV9pcnEoYWItJmd0O2lycV9udW1baXJxX2lkeF0sICZhbXA7YWItJmd0O2NlLmNlX3BpcGVbaV0pOwotCX0KLQotCWF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiKTsKJiM0MzsJYXRoMTJrX3BjaV9mcmVlX2NlX2lycShhYiwgYWItJmd0O2h3X3BhcmFtcy0mZ3Q7Y2VfY291bnQpOwomIzQzOwlhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVgpOwogfQogCiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NlX2lycV9lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IGNlX2lkKQpAQCAtNTk1LDggJiM0Mzs2MDAsNiBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYikKIAogCQkJaXJxID0gYXRoMTJrX3BjaV9nZXRfbXNpX2lycShhYi0mZ3Q7ZGV2LCB2ZWN0b3IpOwogCi0JCQlhYi0mZ3Q7aXJxX251bVtpcnFfaWR4XSA9IGlycTsKLQogCQkJYXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19QQ0ksCiAJCQkJICAgJiMzNDtpcnE6JWQgZ3JvdXA6JWRcbiYjMzQ7LCBpcnEsIGkpOwogCkBAIC02MDcsMjIgJiM0Mzs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiAJCQlpZiAocmV0KSB7CiAJCQkJYXRoMTJrX2VycihhYiwgJiMzNDtmYWlsZWQgcmVxdWVzdCBpcnEgJWQ6ICVkXG4mIzM0OywKIAkJCQkJICAgdmVjdG9yLCByZXQpOwotCQkJCWdvdG8gZmFpbF9yZXF1ZXN0OwomIzQzOwomIzQzOwkJCQlmb3IgKG4gPSAwOyBuICZsdDsgajsgbiYjNDM7JiM0MzspCiYjNDM7CQkJCQlmcmVlX2lycShhYi0mZ3Q7aXJxX251bVtpcnFfZ3JwLSZndDtpcnFzW25dXSwgaXJxX2dycCk7CiYjNDM7CiYjNDM7CQkJCW5ldGlmX25hcGlfZGVsKCZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW2ldLm5hcGkpOwomIzQzOwkJCQlmcmVlX25ldGRldihhYi0mZ3Q7ZXh0X2lycV9ncnBbaV0ubmFwaV9uZGV2KTsKJiM0MzsJCQkJZ290byBmYWlsX2FsbG9jYXRlOwogCQkJfQomIzQzOwomIzQzOwkJCWFiLSZndDtpcnFfbnVtW2lycV9pZHhdID0gaXJxOwogCQl9CiAJCWF0aDEya19wY2lfZXh0X2dycF9kaXNhYmxlKGlycV9ncnApOwogCX0KIAogCXJldHVybiAwOwogCi1mYWlsX3JlcXVlc3Q6Ci0JLyogaSAtJmd0O25hcGlfbmRldiB3YXMgcHJvcGVybHkgYWxsb2NhdGVkLiBGcmVlIGl0IGFsc28gKi8KLQlpICYjNDM7PSAxOwogZmFpbF9hbGxvY2F0ZToKLQlmb3IgKG4gPSAwOyBuICZsdDsgaTsgbiYjNDM7JiM0MzspIHsKLQkJaXJxX2dycCA9ICZhbXA7YWItJmd0O2V4dF9pcnFfZ3JwW25dOwotCQlmcmVlX25ldGRldihpcnFfZ3JwLSZndDtuYXBpX25kZXYpOwotCX0KJiM0MzsJYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoYWIsIGkpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY3MSw2ICYjNDM7Njc2LDggQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYikKIAkJaWYgKHJldCkgewogCQkJYXRoMTJrX2VycihhYiwgJiMzNDtmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXG4mIzM0OywKIAkJCQkgICBpcnFfaWR4LCByZXQpOwomIzQzOwomIzQzOwkJCWF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGkpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCkBAIC02ODEsOCAmIzQzOzY4OCwxMCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCX0KIAogCXJldCA9IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoYWIpOwotCWlmIChyZXQpCiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGFiLSZndDtod19wYXJhbXMtJmd0O2NlX2NvdW50KTsKIAkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDUzCgkJCQkJCQlvdXRwdXQ6IDEzNgoJCQkJCQkJdGhvdWdodHM6IDQ1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBhdGgxMmsgUENJIElSUSBIYW5kbGluZyBGaXgqKgoKT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyB3ZSBoYW5kbGUgSVJRcyBkdXJpbmcgZGV2aWNlIGluaXRpYWxpemF0aW9uIGFuZCB0ZWFyZG93bi4gTXkgaW5pdGlhbCByZWFkIHRlbGxzIG1lIHRoaXMgaXMgYWxsIGFib3V0IHJlZmFjdG9yaW5nIGFuZCBzdHJlbmd0aGVuaW5nIHRoZSBlcnJvciBoYW5kbGluZyBhcm91bmQgSVJRIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbuKAlHNwZWNpZmljYWxseSwgdGhlIGBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycWAsIGBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxYCwgYW5kIGBhdGgxMmtfcGNpX2ZyZWVfaXJxYCBmdW5jdGlvbnMgYXJlIHRoZSBrZXkgcGxheWVycyBoZXJlLgoKVGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIG9uIGNvcnJlY3RpbmcgcmVzb3VyY2UgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgaW4gdGhlIGVycm9yIHBhdGhzIG9mIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBhbmQgYGF0aDEya19wY2lfY29uZmlnX2lycWAuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IGlmIGFuIElSUSByZXF1ZXN0IGZhaWxzLCB3ZSBwcm9wZXJseSBjbGVhbiB1cCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCByZXNvdXJjZXPigJRJUlEgbGluZXMgYW5kIHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgZGV2aWNlc+KAlGJlZm9yZSBleGl0aW5nLiBJdCYjMzk7cyBhIG1lbW9yeS9yZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlLCBwbGFpbiBhbmQgc2ltcGxlLiBXZSYjMzk7cmUgbm90IHRhbGtpbmcgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZC4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBLQVNBTiwgc3RhbmRhcmQgbGVhayBkZXRlY3RvcnMsIG9yIEttZW1sZWFrIHdvdWxkIGNhdGNoIHdpdGhvdXQgYW4gaXNzdWUuIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCkxvb2tpbmcgY2xvc2VyLCB0aGUgaW50cm9kdWN0aW9uIG9mIGBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxYCBhbmQgdGhlIGFkanVzdG1lbnQgdG8gYGF0aDEya19wY2lfZnJlZV9leHRfaXJxYCBjb25maXJtIHRoZSBpbnRlbnQgdG8gbWFuYWdlIHRoZSBjbGVhbnVwIG9mIENFIGFuZCBleHRlcm5hbCBJUlFzIHdpdGggbW9yZSBwcmVjaXNpb24uIFNwZWNpZmljYWxseSwgaW4gYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLCB0aGUgcmV2aXNlZCBlcnJvciBoYW5kbGluZyBtZXRpY3Vsb3VzbHkgZnJlZXMgYW55IGFscmVhZHktcmVxdWVzdGVkIElSUXMgd2l0aGluIGEgZ3JvdXAgdXBvbiBmYWlsdXJlLCBkZWxldGVzIE5BUEkgaW5zdGFuY2VzLCBhbmQgZnJlZXMgdGhlIGFzc29jaWF0ZWQgbmV0ZGV2LiBUaGVuIGl0IGNhbGxzIGBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycWAgdG8gZnJlZSB0aGUgcHJlaXZvdXNseSBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIGdyb3Vwcy4gVGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIGJ1ZyB3aGVyZSBgYWItJmd0O2lycV9udW1baXJxX2lkeF1gIG1pZ2h0IGJlIGFzc2lnbmVkIGJlZm9yZSB0aGUgYHJlcXVlc3RfaXJxYCBjYWxsIHN1Y2NlZWRzLCBvciB3aGVyZSB0aGUgY2xlYW51cCBsb2dpYyB3YXNuJiMzOTt0IGNvcnJlY3QuCgpJbiBlc3NlbmNlLCB0aGlzIGlzIGEgdGFyZ2V0ZWQgZml4IGZvciB0aGUgSVJRIGNvbmZpZ3VyYXRpb24mIzM5O3MgZXJyb3IgaGFuZGxpbmcuIEl0JiMzOTtzIG5vdCBhIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZSBjaGFuZ2UsIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IHVzZXItc3BhY2UgaW50ZXJmYWNlcyBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdpdGggdGhpcyBpbiBtaW5kLCBhbmQgYWZ0ZXIgYSBjYXJlZnVsIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB3ZSBkb24mIzM5O3QgbmVlZCB0byBpbnZvbHZlIEtNU0FOIGZvciB0aGlzLiBJJiMzOTtsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOSAxMjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBhbmQgaW5jb3JyZWN0IGNsZWFudXAgbG9naWMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGluIHRoZSBhdGgxMmsgZHJpdmVyLiBJdCByZWZhY3RvcnMgdGhlIElSUSBmcmVlaW5nIGZ1bmN0aW9ucyB0byBhY2NlcHQgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIElSUXMvZ3JvdXBzIGFuZCBlbnN1cmVzIHRoYXQgb25seSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFyZSBmcmVlZC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW52YWxpZCBmcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVha3MgaW4gdGhlc2UgcGF0aHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBhbmQgaW5jb3JyZWN0IGNsZWFudXAgbG9naWMgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIG9mIElSUSBjb25maWd1cmF0aW9uIGluIHRoZSBhdGgxMmsgZHJpdmVyLiBJdCByZWZhY3RvcnMgdGhlIElSUSBmcmVlaW5nIGZ1bmN0aW9ucyB0byBhY2NlcHQgdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIElSUXMvZ3JvdXBzIGFuZCBlbnN1cmVzIHRoYXQgb25seSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGFyZSBmcmVlZC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgaW52YWxpZCBmcmVlcywgdXNlLWFmdGVyLWZyZWVzLCBvciBtZW1vcnkgbGVha3MuIFRoZXJlIGFyZSBubyBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBhbnkgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBTdGFuZGFyZCB0b29scyBsaWtlIEtBU0FOIGFuZCBrbWVtbGVhayBhcmUgc3VmZmljaWVudCB0byBkZXRlY3QgbWVtb3J5IGNvcnJ1cHRpb24gb3IgbGVha3MgaW4gdGhlc2UgcGF0aHMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAxOjU1LjA5MDUzMDA4MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTczOTk5ODgxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXTEFOXCIsXG4gICAgXCJXTEFOX1ZFTkRPUl9BVEhcIixcbiAgICBcIkFUSDEyS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImF0aDEya19wY2lfcHJvYmVcIixcbiAgICBcImF0aDEya19wY2lfY29uZmlnX2lycVwiLFxuICAgIFwiYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgYW5kIGluY29ycmVjdCBjbGVhbnVwIGxvZ2ljIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBvZiBJUlEgY29uZmlndXJhdGlvbiBpbiB0aGUgYXRoMTJrIGRyaXZlci4gSXQgcmVmYWN0b3JzIHRoZSBJUlEgZnJlZWluZyBmdW5jdGlvbnMgdG8gYWNjZXB0IHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBJUlFzL2dyb3VwcyBhbmQgZW5zdXJlcyB0aGF0IG9ubHkgYWxsb2NhdGVkIHJlc291cmNlcyBhcmUgZnJlZWQuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGludmFsaWQgZnJlZXMsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtzIGluIHRoZXNlIHBhdGhzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiAoYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCkgb2YgdGhlIGF0aDEyayBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgdmlhIHRoZSBQQ0kgc3Vic3lzdGVtIGFuZCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IHRoZSBzeXprYWxsZXIgUENJIGZ1enplciBpbmplY3RpbmcgYSB2aXJ0dWFsIGRldmljZSBhbmQgY2F1c2luZyBhbGxvY2F0aW9uIGZhaWx1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMTo1NS4wOTA1MzU2MjFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQyNDM5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3NDkwNjUxNTIzNjQzYWE4NmFiOGU2ODM4YzYzZmUxNGVmYTlkMzIzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDE5IDEyOjAxOjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXFxuaW5kZXggNjQ0MTkyN2I1MzgyMi4uYWYwZTg4MmZkMGI1MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1xcbkBAIC0zMTMsMTEgKzMxMywyNCBAQCBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX3N3X3Jlc2V0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGJvb2wgcG93ZXJfb24pXFxuIFxcdGF0aDEya19taGlfc2V0X21oaWN0cmxfcmVzZXQoYWIpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbitzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fY2UpXFxuK3tcXG4rXFx0aW50IGksIGlycV9pZHg7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2NlOyBpKyspIHtcXG4rXFx0XFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdGlycV9pZHggPSBBVEgxMktfUENJX0lSUV9DRTBfT0ZGU0VUICsgaTtcXG4rXFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2lkeF0sIFxcdTAwMjZhYi1cXHUwMDNlY2UuY2VfcGlwZVtpXSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYiwgaW50IG51bV9leHRfaXJxX2dycClcXG4ge1xcbiBcXHRpbnQgaSwgajtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fZXh0X2lycV9ncnA7IGkrKykge1xcbiBcXHRcXHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG4gXFxuIFxcdFxcdGZvciAoaiA9IDA7IGogXFx1MDAzYyBpcnFfZ3JwLVxcdTAwM2VudW1faXJxOyBqKyspXFxuQEAgLTMzMCwxNiArMzQzLDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFxuIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4ge1xcbi1cXHRpbnQgaSwgaXJxX2lkeDtcXG4tXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VjZV9jb3VudDsgaSsrKSB7XFxuLVxcdFxcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFxcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlycV9pZHggPSBBVEgxMktfUENJX0lSUV9DRTBfT0ZGU0VUICsgaTtcXG4tXFx0XFx0ZnJlZV9pcnEoYWItXFx1MDAzZWlycV9udW1baXJxX2lkeF0sIFxcdTAwMjZhYi1cXHUwMDNlY2UuY2VfcGlwZVtpXSk7XFxuLVxcdH1cXG4tXFxuLVxcdGF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiKTtcXG4rXFx0YXRoMTJrX3BjaV9mcmVlX2NlX2lycShhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlY2VfY291bnQpO1xcbitcXHRhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVgpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NlX2lycV9lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IGNlX2lkKVxcbkBAIC01OTUsOCArNjAwLDYgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIFxcbiBcXHRcXHRcXHRpcnEgPSBhdGgxMmtfcGNpX2dldF9tc2lfaXJxKGFiLVxcdTAwM2VkZXYsIHZlY3Rvcik7XFxuIFxcbi1cXHRcXHRcXHRhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcXG4tXFxuIFxcdFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUENJLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiaXJxOiVkIGdyb3VwOiVkXFxcXG5cXFwiLCBpcnEsIGkpO1xcbiBcXG5AQCAtNjA3LDIyICs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIFxcdFxcdFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCByZXF1ZXN0IGlycSAlZDogJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHZlY3RvciwgcmV0KTtcXG4tXFx0XFx0XFx0XFx0Z290byBmYWlsX3JlcXVlc3Q7XFxuK1xcbitcXHRcXHRcXHRcXHRmb3IgKG4gPSAwOyBuIFxcdTAwM2MgajsgbisrKVxcbitcXHRcXHRcXHRcXHRcXHRmcmVlX2lycShhYi1cXHUwMDNlaXJxX251bVtpcnFfZ3JwLVxcdTAwM2VpcnFzW25dXSwgaXJxX2dycCk7XFxuK1xcbitcXHRcXHRcXHRcXHRuZXRpZl9uYXBpX2RlbChcXHUwMDI2YWItXFx1MDAzZWV4dF9pcnFfZ3JwW2ldLm5hcGkpO1xcbitcXHRcXHRcXHRcXHRmcmVlX25ldGRldihhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV0ubmFwaV9uZGV2KTtcXG4rXFx0XFx0XFx0XFx0Z290byBmYWlsX2FsbG9jYXRlO1xcbiBcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRhYi1cXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRhdGgxMmtfcGNpX2V4dF9ncnBfZGlzYWJsZShpcnFfZ3JwKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1mYWlsX3JlcXVlc3Q6XFxuLVxcdC8qIGkgLVxcdTAwM2VuYXBpX25kZXYgd2FzIHByb3Blcmx5IGFsbG9jYXRlZC4gRnJlZSBpdCBhbHNvICovXFxuLVxcdGkgKz0gMTtcXG4gZmFpbF9hbGxvY2F0ZTpcXG4tXFx0Zm9yIChuID0gMDsgbiBcXHUwMDNjIGk7IG4rKykge1xcbi1cXHRcXHRpcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtuXTtcXG4tXFx0XFx0ZnJlZV9uZXRkZXYoaXJxX2dycC1cXHUwMDNlbmFwaV9uZGV2KTtcXG4tXFx0fVxcbitcXHRhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgaSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTY3MSw2ICs2NzYsOCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbiBcXHRcXHRpZiAocmV0KSB7XFxuIFxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHQgICBpcnFfaWR4LCByZXQpO1xcbitcXG4rXFx0XFx0XFx0YXRoMTJrX3BjaV9mcmVlX2NlX2lycShhYiwgaSk7XFxuIFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTY4MSw4ICs2ODgsMTAgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFx0fVxcbiBcXG4gXFx0cmV0ID0gYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhhYik7XFxuLVxcdGlmIChyZXQpXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0YXRoMTJrX3BjaV9mcmVlX2NlX2lycShhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlY2VfY291bnQpO1xcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMTo1Ni40MTU3MjM2NDFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNzAyMjcyNTE4NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTlwiLFxuICAgIFwiV0xBTl9WRU5ET1JfQVRIXCIsXG4gICAgXCJBVEgxMktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdGgxMmtfcGNpX3Byb2JlXCIsXG4gICAgXCJhdGgxMmtfcGNpX2NvbmZpZ19pcnFcIixcbiAgICBcImF0aDEya19wY2lfZXh0X2lycV9jb25maWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gKGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2ApIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgaW5qZWN0aW5nIGEgdmlydHVhbCBkZXZpY2UgYW5kIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzQ5MDY1MTUyMzY0M2FhODZhYjhlNjgzOGM2M2ZlMTRlZmE5ZDMyM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDE5IDEyOjAxOjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcbmluZGV4IDY0NDE5MjdiNTM4MjIuLmFmMGU4ODJmZDBiNTEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXG5AQCAtMzEzLDExICszMTMsMjQgQEAgc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9zd19yZXNldChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIHBvd2VyX29uKVxuIFx0YXRoMTJrX21oaV9zZXRfbWhpY3RybF9yZXNldChhYik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4rc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2NlX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgbnVtX2NlKVxuK3tcbitcdGludCBpLCBpcnFfaWR4O1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2NlOyBpKyspIHtcbitcdFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4rXHRcdFx0Y29udGludWU7XG4rXG4rXHRcdGlycV9pZHggPSBBVEgxMktfUENJX0lSUV9DRTBfT0ZGU0VUICsgaTtcbitcdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIGludCBudW1fZXh0X2lycV9ncnApXG4ge1xuIFx0aW50IGksIGo7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZXh0X2lycV9ncnA7IGkrKykge1xuIFx0XHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV07XG4gXG4gXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGlycV9ncnAtXHUwMDNlbnVtX2lycTsgaisrKVxuQEAgLTMzMCwxNiArMzQzLDggQEAgc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4ge1xuLVx0aW50IGksIGlycV9pZHg7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQ7IGkrKykge1xuLVx0XHRpZiAoYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0aXJxX2lkeCA9IEFUSDEyS19QQ0lfSVJRX0NFMF9PRkZTRVQgKyBpO1xuLVx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdLCBcdTAwMjZhYi1cdTAwM2VjZS5jZV9waXBlW2ldKTtcbi1cdH1cbi1cbi1cdGF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiKTtcbitcdGF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VjZV9jb3VudCk7XG4rXHRhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVgpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NlX2lycV9lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IGNlX2lkKVxuQEAgLTU5NSw4ICs2MDAsNiBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcbiBcdFx0XHRpcnEgPSBhdGgxMmtfcGNpX2dldF9tc2lfaXJxKGFiLVx1MDAzZWRldiwgdmVjdG9yKTtcbiBcbi1cdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuLVxuIFx0XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUENJLFxuIFx0XHRcdFx0ICAgXCJpcnE6JWQgZ3JvdXA6JWRcXG5cIiwgaXJxLCBpKTtcbiBcbkBAIC02MDcsMjIgKzYxMCwyNCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfZXh0X2lycV9jb25maWcoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0XHRhdGgxMmtfZXJyKGFiLCBcImZhaWxlZCByZXF1ZXN0IGlycSAlZDogJWRcXG5cIixcbiBcdFx0XHRcdFx0ICAgdmVjdG9yLCByZXQpO1xuLVx0XHRcdFx0Z290byBmYWlsX3JlcXVlc3Q7XG4rXG4rXHRcdFx0XHRmb3IgKG4gPSAwOyBuIFx1MDAzYyBqOyBuKyspXG4rXHRcdFx0XHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2dycC1cdTAwM2VpcnFzW25dXSwgaXJxX2dycCk7XG4rXG4rXHRcdFx0XHRuZXRpZl9uYXBpX2RlbChcdTAwMjZhYi1cdTAwM2VleHRfaXJxX2dycFtpXS5uYXBpKTtcbitcdFx0XHRcdGZyZWVfbmV0ZGV2KGFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldLm5hcGlfbmRldik7XG4rXHRcdFx0XHRnb3RvIGZhaWxfYWxsb2NhdGU7XG4gXHRcdFx0fVxuK1xuK1x0XHRcdGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0gPSBpcnE7XG4gXHRcdH1cbiBcdFx0YXRoMTJrX3BjaV9leHRfZ3JwX2Rpc2FibGUoaXJxX2dycCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1mYWlsX3JlcXVlc3Q6XG4tXHQvKiBpIC1cdTAwM2VuYXBpX25kZXYgd2FzIHByb3Blcmx5IGFsbG9jYXRlZC4gRnJlZSBpdCBhbHNvICovXG4tXHRpICs9IDE7XG4gZmFpbF9hbGxvY2F0ZTpcbi1cdGZvciAobiA9IDA7IG4gXHUwMDNjIGk7IG4rKykge1xuLVx0XHRpcnFfZ3JwID0gXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbbl07XG4tXHRcdGZyZWVfbmV0ZGV2KGlycV9ncnAtXHUwMDNlbmFwaV9uZGV2KTtcbi1cdH1cbitcdGF0aDEya19wY2lfZnJlZV9leHRfaXJxKGFiLCBpKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTY3MSw2ICs2NzYsOCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIFx0XHRpZiAocmV0KSB7XG4gXHRcdFx0YXRoMTJrX2VycihhYiwgXCJmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWQ6ICVkXFxuXCIsXG4gXHRcdFx0XHQgICBpcnFfaWR4LCByZXQpO1xuK1xuK1x0XHRcdGF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGkpO1xuIFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbiBcbkBAIC02ODEsOCArNjg4LDEwIEBAIHN0YXRpYyBpbnQgYXRoMTJrX3BjaV9jb25maWdfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXHR9XG4gXG4gXHRyZXQgPSBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKGFiKTtcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0KSB7XG4rXHRcdGF0aDEya19wY2lfZnJlZV9jZV9pcnEoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VjZV9jb3VudCk7XG4gXHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMTo1Ni40MTU3MjQ2NDFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDg3NjIzMTYyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgQXNzZXNzbWVudDogQXRoMTJrIFBDSSBJUlEgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEkndmUgZ290IGEgcGF0Y2ggZm9yIGBhdGgxMmsvcGNpLmNgLCBzcGVjaWZpY2FsbHkgdG91Y2hpbmcgSVJRIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGluIHRoZSBhdGgxMmsgUENJIGRyaXZlci4gVGhpcyBpcyBRdWFsY29tbSBXaS1GaSA3IGhhcmR3YXJlLCBzbyBkZWZpbml0ZWx5IHZlbmRvci1zcGVjaWZpYy4gVGhlIHF1ZXN0aW9uIGlzOiB3b3J0aCBmdXp6aW5nP1xuXG5UaGUgcHJvbXB0J3MgZXhjbHVzaW9uIGNyaXRlcmlhIHNwZWNpZmljYWxseSB0YXJnZXRzIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIHRoYXQgKnJlcXVpcmUqIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBJcyBgYXRoMTJrYCBvbmUgb2YgdGhvc2U/IFllcywgaXQncyB2ZW5kb3Itc3BlY2lmaWMsIGFuZCB5ZXMsIGl0J3MgYSBQQ0kgV2ktRmkgZHJpdmVyLCBzbyBpdCBuZWVkcyBzcGVjaWZpYyBoYXJkd2FyZS4gSXQncyBub3QgYSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgdGhvdWdoLlxuXG5DYW4gSSBmdXp6IGl0IHNvbWVob3cgdXNpbmcgZW11bGF0aW9uPyBgbWFjODAyMTFfaHdzaW1gIGlzIG91dCwgdGhhdCdzIHNvZnR3YXJlLWJhc2VkIGFuZCBkb2Vzbid0IHRvdWNoIHRoaXMuIFBDSSBXaS1GaSBkcml2ZXJzIGFyZSBnZW5lcmFsbHkgYSBwYWluIHRvIGZ1enogdW5sZXNzIHRoZXJlIGlzIGRlZGljYXRlZCBRRU1VIG9yIHRoZXkgYXJlIFVTQi5cblxuVGhlIGV4Y2x1c2lvbiBjcml0ZXJpYSBtYWtlIG1lIHF1ZXN0aW9uIGl0cyBmZWFzaWJpbGl0eSBiZWNhdXNlIGF0aDEyayBuZWVkcyBzcGVjaWZpYyBoYXJkd2FyZS4gU3l6a2FsbGVyIG1pZ2h0IGhhdmUgc29tZSBQQ0kgZnV6emluZywgYnV0IGl0J3Mgb2Z0ZW4gbGltaXRlZCwgYW5kIHRoaXMgcGF0Y2ggZGVhbHMgd2l0aCBkZXZpY2UgcHJvYmUuIFdpdGhvdXQgdGhlIHJpZ2h0IGhhcmR3YXJlLCB0aGUgcHJvYmUgd29uJ3QgZXZlbiBoYXBwZW4sIG9yIGl0J2xsIGVycm9yIG91dCBlYXJseS4gSSBjYW4gZG91YmxlLWNoZWNrIHRoZSBrZXJuZWwgc291cmNlLCBidXQgcmVhbGlzdGljYWxseSwgSSdtIHRoaW5raW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgZGlmZmljdWx0IHRvIGZ1enouIEJhc2VkIG9uIHRoZSBleGNsdXNpb24gY3JpdGVyaWEgaXQgc2VlbXMgbGlrZSB0aGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDU2LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6MDcuMjkxOTYzMTc0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzkxNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDM1MzExIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9Mj1jb25maWcgQVRIMTJLXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM6XFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IEhBU19ETUEgXFx1MDAyNlxcdTAwMjYgUENJXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjE1OlxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDEyay5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnPTE3PWNvbmZpZyBBVEgxMktfQUhCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjE4OlxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTktXFx0ZGVwZW5kcyBvbiBBVEgxMksgXFx1MDAyNlxcdTAwMjYgUkVNT1RFUFJPQ1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnPTI1PWNvbmZpZyBBVEgxMktfREVCVUdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjY6XFx0Ym9vbCBcXFwiYXRoMTJrIGRlYnVnZ2luZ1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjctXFx0ZGVwZW5kcyBvbiBBVEgxMktcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZz0zNT1jb25maWcgQVRIMTJLX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MzY6XFx0Ym9vbCBcXFwiUXVhbGNvbW0gYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzctXFx0ZGVwZW5kcyBvbiBBVEgxMksgXFx1MDAyNlxcdTAwMjYgTUFDODAyMTFfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zOC1cXHRoZWxwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM5OlxcdCAgRW5hYmxlIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDAtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9NDQ9Y29uZmlnIEFUSDEyS19UUkFDSU5HXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjQ1OlxcdGJvb2wgXFxcImF0aDEyayB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ2LVxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IEVWRU5UX1RSQUNJTkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDctXFx0aGVscFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzo0ODpcXHQgIEVuYWJsZSBhdGgxMmsgdHJhY2luZyBpbmZyYXN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNDktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc9NTM9Y29uZmlnIEFUSDEyS19DT1JFRFVNUFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzo1NDpcXHRib29sIFxcXCJhdGgxMmsgY29yZWR1bXBcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTU1LVxcdGRlcGVuZHMgb24gQVRIMTJLXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTctXFx0aGVscFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzo1ODpcXHQgIEVuYWJsZSBhdGgxMmsgY29yZWR1bXAgY29sbGVjdGlvblxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjI6b2JqLSQoQ09ORklHX0FUSDEySykgKz0gYXRoMTJrLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjM6YXRoMTJrLXkgKz0gY29yZS5vIFxcXFxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlLTQtXFx0ICAgIGhhbC5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGUtMjQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZToyNTphdGgxMmstJChDT05GSUdfQVRIMTJLX0FIQikgKz0gYWhiLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlLTI2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU9Mjc9b2JqLSQoQ09ORklHX0FUSDEySykgKz0gd2lmaTcvXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZS0yOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL01ha2VmaWxlOjI5OmF0aDEyay0kKENPTkZJR19BVEgxMktfREVCVUdGUykgKz0gZGVidWdmcy5vIGRlYnVnZnNfaHR0X3N0YXRzLm8gZGVidWdmc19zdGEub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU6MzA6YXRoMTJrLSQoQ09ORklHX0FDUEkpICs9IGFjcGkub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU6MzE6YXRoMTJrLSQoQ09ORklHX0FUSDEyS19UUkFDSU5HKSArPSB0cmFjZS5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozMjphdGgxMmstJChDT05GSUdfUE0pICs9IHdvdy5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozMzphdGgxMmstJChDT05GSUdfQVRIMTJLX0NPUkVEVU1QKSArPSBjb3JlZHVtcC5vXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9NYWtlZmlsZTozNDphdGgxMmstJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGU6MzU6YXRoMTJrLSQoQ09ORklHX1RIRVJNQUwpICs9IHRoZXJtYWwub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvTWFrZWZpbGUtMzYtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxMTpzdGF0aWMgaW50IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgZnVuYylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMi17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xOC1cXHRpZiAoIXJvb3RfaGFuZGxlKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTk6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcXFwiaW52YWxpZCBhY3BpIGhhbmRsZXJcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwLVxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI2LVxcdGlmICghb2JqKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mjc6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcXFwiYWNwaV9ldmFsdWF0ZV9kc20oKSBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI4LVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDYtXFx0XFx0XFx0XFx0ICAgQVRIMTJLX0FDUElfQkRGX0FOQ0hPUl9TVFJJTkdfTEVOKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ3OlxcdFxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiaW52YWxpZCBBQ1BJIERTTSBCREYgc2l6ZTogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDgtXFx0XFx0XFx0XFx0XFx0ICAgIG9iai1cXHUwMDNlc3RyaW5nLmxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy02Mi1cXHRcXHRcXHQgICAgb2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoIFxcdTAwM2UgQVRIMTJLX0FDUElfRFNNX0ZVTkNfTUFYX0JJVE1BUF9TSVpFKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NjM6XFx0XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJpbnZhbGlkIEFDUEkgRFNNIGZ1bmMgc2l6ZTogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNjQtXFx0XFx0XFx0XFx0XFx0ICAgIG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy03NS1cXHRcXHRcXHRpZiAob2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9UQVNfQ0ZHX1NJWkUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo3NjpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImludmFsaWQgQUNQSSBEU00gVEFTIGNvbmZpZyBzaXplOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy03Ny1cXHRcXHRcXHRcXHRcXHQgICAgb2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTg3LVxcdFxcdFxcdGlmIChvYmotXFx1MDAzZWJ1ZmZlci5sZW5ndGggIT0gQVRIMTJLX0FDUElfRFNNX1RBU19EQVRBX1NJWkUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo4ODpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImludmFsaWQgQUNQSSBEU00gVEFTIGRhdGEgc2l6ZTogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtODktXFx0XFx0XFx0XFx0XFx0ICAgIG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy05OS1cXHRcXHRcXHRpZiAob2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9CSU9TX1NBUl9EQVRBX1NJWkUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxMDA6XFx0XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJpbnZhbGlkIEFDUEkgQklPUyBTQVIgZGF0YSBzaXplOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMDEtXFx0XFx0XFx0XFx0XFx0ICAgIG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMTEtXFx0XFx0XFx0aWYgKG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCAhPSBBVEgxMktfQUNQSV9EU01fR0VPX09GRlNFVF9EQVRBX1NJWkUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxMTI6XFx0XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJpbnZhbGlkIEFDUEkgR0VPIE9GRlNFVCBkYXRhIHNpemU6ICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTExMy1cXHRcXHRcXHRcXHRcXHQgICAgb2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTEyMy1cXHRcXHRcXHRpZiAob2JqLVxcdTAwM2VidWZmZXIubGVuZ3RoICE9IEFUSDEyS19BQ1BJX0RTTV9DQ0FfREFUQV9TSVpFKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTI0OlxcdFxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiaW52YWxpZCBBQ1BJIERTTSBDQ0EgZGF0YSBzaXplOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMjUtXFx0XFx0XFx0XFx0XFx0ICAgIG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xMzUtXFx0XFx0XFx0aWYgKG9iai1cXHUwMDNlYnVmZmVyLmxlbmd0aCAhPSBBVEgxMktfQUNQSV9EU01fQkFORF9FREdFX0RBVEFfU0laRSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjEzNjpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImludmFsaWQgQUNQSSBEU00gYmFuZCBlZGdlIGRhdGEgc2l6ZTogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTM3LVxcdFxcdFxcdFxcdFxcdCAgICBvYmotXFx1MDAzZWJ1ZmZlci5sZW5ndGgpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTQ3LVxcdH0gZWxzZSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTQ4OlxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiQUNQSSBEU00gbWV0aG9kIHJldHVybmVkIGFuIHVuc3VwcG9ydGVkIG9iamVjdCB0eXBlOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNDktXFx0XFx0XFx0ICAgIG9iai1cXHUwMDNldHlwZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNjAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTYxOnN0YXRpYyBpbnQgYXRoMTJrX2FjcGlfc2V0X3Bvd2VyX2xpbWl0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTYyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE2Ny1cXHQgICAgdGFzX3Nhcl9wb3dlcl90YWJsZVsxXSAhPSBBVEgxMktfQUNQSV9UQVNfREFUQV9FTkFCTEUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxNjg6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJsYXRlc3QgQUNQSSBUQVMgZGF0YSBpcyBpbnZhbGlkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNjktXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTcyOlxcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3NfY21kKGFiLCBXTUlfQklPU19QQVJBTV9UQVNfREFUQV9UWVBFLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE3My1cXHRcXHRcXHRcXHQgICAgICB0YXNfc2FyX3Bvd2VyX3RhYmxlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTc1LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxNzY6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gc2VuZCBBQ1BJIFRBUyBkYXRhIHRhYmxlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xNzctXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE4Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxODM6c3RhdGljIGludCBhdGgxMmtfYWNwaV9zZXRfYmlvc19zYXJfcG93ZXIoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xODQte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTg4LVxcdCAgICBhYi1cXHUwMDNlYWNwaS5iaW9zX3Nhcl9kYXRhWzFdICE9IEFUSDEyS19BQ1BJX1BPV0VSX0xJTUlUX0VOQUJMRV9GTEFHKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTg5OlxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiaW52YWxpZCBsYXRlc3QgQUNQSSBCSU9TIFNBUiBkYXRhXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xOTAtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0xOTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MTkzOlxcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3Nfc2FyX2NtZChhYiwgYWItXFx1MDAzZWFjcGkuYmlvc19zYXJfZGF0YSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMTk0LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoxOTU6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gc2V0IEFDUEkgQklPUyBTQVIgdGFibGU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTE5Ni1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjAxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIwMjpzdGF0aWMgdm9pZCBhdGgxMmtfYWNwaV9kc21fbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwMy17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjA0LVxcdGludCByZXQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjA1OlxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBkYXRhO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIwNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMDctXFx0aWYgKGV2ZW50ID09IEFUSDEyS19BQ1BJX05PVElGWV9FVkVOVCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIwODpcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInVua25vd24gYWNwaSBub3RpZnkgJXVcXFxcblxcXCIsIGV2ZW50KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMDktXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjEyLVxcdGlmICghYWItXFx1MDAzZWFjcGkuYWNwaV90YXNfZW5hYmxlKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjEzOlxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXFxcImFjcGlfdGFzX2VuYWJsZSBpcyBmYWxzZVxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjE0LVxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIxNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMTc6XFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19UQVNfREFUQSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjE4LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMTk6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gdXBkYXRlIEFDUEkgVEFTIGRhdGEgdGFibGU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIyMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMjItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjIzOlxcdHJldCA9IGF0aDEya19hY3BpX3NldF9wb3dlcl9saW1pdChhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjI0LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyMjU6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gc2V0IEFDUEkgVEFTIHBvd2VyIGxpbWl0IGRhdGE6ICVkXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMjYtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjMxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIzMjpcXHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0JJT1NfU0FSKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMzMtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjIzNDpcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byB1cGRhdGUgQklPUyBTQVI6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTIzNS1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yMzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjM4OlxcdHJldCA9IGF0aDEya19hY3BpX3NldF9iaW9zX3Nhcl9wb3dlcihhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjM5LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNDA6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gc2V0IEJJT1MgU0FSIHBvd2VyIGxpbWl0OiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNDEtXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI0NTpzdGF0aWMgaW50IGF0aDEya19hY3BpX3NldF9iaW9zX3Nhcl9wYXJhbXMoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNDYte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjQ4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI0OTpcXHRyZXQgPSBhdGgxMmtfd21pX3NldF9iaW9zX3Nhcl9jbWQoYWIsIGFiLVxcdTAwM2VhY3BpLmJpb3Nfc2FyX2RhdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI1MC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjUxOlxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHNldCBBQ1BJIEJJT1MgU0FSIHRhYmxlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNTItXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI1NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNTU6XFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfYmlvc19nZW9fY21kKGFiLCBhYi1cXHUwMDNlYWNwaS5nZW9fb2Zmc2V0X2RhdGEpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI1Ni1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjU3OlxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHNldCBBQ1BJIEJJT1MgR0VPIHRhYmxlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNTgtXFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI2My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNjQ6c3RhdGljIGludCBhdGgxMmtfYWNwaV9zZXRfdGFzX3BhcmFtcyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI2NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MjY4OlxcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3NfY21kKGFiLCBXTUlfQklPU19QQVJBTV9UQVNfQ09ORklHX1RZUEUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjY5LVxcdFxcdFxcdFxcdCAgICAgIGFiLVxcdTAwM2VhY3BpLnRhc19jZmcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yNzEtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI3MjpcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBzZW5kIEFDUEkgVEFTIGNvbmZpZyB0YWJsZSBwYXJhbWV0ZXI6ICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI3My1cXHRcXHRcXHQgICAgcmV0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI3Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyNzc6XFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfYmlvc19jbWQoYWIsIFdNSV9CSU9TX1BBUkFNX1RBU19EQVRBX1RZUEUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjc4LVxcdFxcdFxcdFxcdCAgICAgIGFiLVxcdTAwM2VhY3BpLnRhc19zYXJfcG93ZXJfdGFibGUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yODAtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjI4MTpcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBzZW5kIEFDUEkgVEFTIGRhdGEgdGFibGUgcGFyYW1ldGVyOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yODItXFx0XFx0XFx0ICAgIHJldCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0yODgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mjg5OmJvb2wgYXRoMTJrX2FjcGlfZ2V0X2Rpc2FibGVfcmZraWxsKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyOTQ6Ym9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV8xMWJlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMjk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTI5OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzoyOTk6dm9pZCBhdGgxMmtfYWNwaV9zZXRfZHNtX2Z1bmMoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzA4LVxcdGlmIChhYi1cXHUwMDNlYWNwaS5hY3BpX3Rhc19lbmFibGUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozMDk6XFx0XFx0cmV0ID0gYXRoMTJrX2FjcGlfc2V0X3Rhc19wYXJhbXMoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMxMC1cXHRcXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MzExOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHNlbmQgQUNQSSBUQVMgcGFyYW1ldGVyczogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzEyLVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMxNi1cXHRpZiAoYWItXFx1MDAzZWFjcGkuYWNwaV9iaW9zX3Nhcl9lbmFibGUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozMTc6XFx0XFx0cmV0ID0gYXRoMTJrX2FjcGlfc2V0X2Jpb3Nfc2FyX3BhcmFtcyhhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzE4LVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozMTk6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gc2VuZCBBQ1BJIEJJT1MgU0FSOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMjAtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzI1LVxcdFxcdGJ1ZiA9IGFiLVxcdTAwM2VhY3BpLmNjYV9kYXRhICsgQVRIMTJLX0FDUElfQ0NBX1RIUl9PRkZTRVRfREFUQV9PRkZTRVQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MzI2OlxcdFxcdHJldCA9IGF0aDEya193bWlfc2V0X2Jpb3NfY21kKGFiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTMyNy1cXHRcXHRcXHRcXHRcXHQgICAgICBXTUlfQklPU19QQVJBTV9DQ0FfVEhSRVNIT0xEX1RZUEUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zMzAtXFx0XFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjMzMTpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBzZXQgQUNQSSBEU00gQ0NBIHRocmVzaG9sZDogJWRcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzMyLVxcdFxcdFxcdFxcdCAgICByZXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzM3LVxcdGlmIChhYi1cXHUwMDNlYWNwaS5hY3BpX2JhbmRfZWRnZV9lbmFibGUpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozMzg6XFx0XFx0cmV0ID0gYXRoMTJrX3dtaV9zZXRfYmlvc19jbWQoYWIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzM5LVxcdFxcdFxcdFxcdFxcdCAgICAgIFdNSV9CSU9TX1BBUkFNX1RZUEVfQkFOREVER0UsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNDItXFx0XFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM0MzpcXHRcXHRcXHRhdGgxMmtfd2FybihhYixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNDQtXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gc2V0IEFDUEkgRFNNIGJhbmQgZWRnZSBjaGFubmVsIHBvd2VyOiAlZFxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM1MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozNTE6aW50IGF0aDEya19hY3BpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM2OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozNjk6XFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19TVVBQT1JUX0ZVTkNTKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzAtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM3MTpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFxcXCJmYWlsZWQgdG8gZ2V0IEFDUEkgRFNNIGRhdGE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM3Mi1cXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzc1LVxcdGlmIChBVEgxMktfQUNQSV9GVU5DX0JJVF9WQUxJRChhYi1cXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfRElTQUJMRV9GTEFHKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjM3NjpcXHRcXHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0RJU0FCTEVfRkxBRyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzc3LVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzozNzg6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gZ2V0IEFDUEkgRElTQUJMRSBGTEFHOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy0zNzktXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM5MS1cXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXFx1MDAzZWFjcGksIEFUSDEyS19BQ1BJX0ZVTkNfQklUX0JERl9FWFQpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6MzkyOlxcdFxcdHJldCA9IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShhYiwgQVRIMTJLX0FDUElfRFNNX0ZVTkNfQkRGX0VYVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtMzkzLVxcdFxcdGlmIChyZXQgfHwgYWItXFx1MDAzZWFjcGkuYmRmX3N0cmluZ1swXSA9PSAnXFxcXDAnKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6Mzk0OlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBBQ1BJIEJERiBFWFQ6ICVkXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTM5NS1cXHRcXHRcXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDAxLVxcdGlmIChBVEgxMktfQUNQSV9GVU5DX0JJVF9WQUxJRChhYi1cXHUwMDNlYWNwaSwgQVRIMTJLX0FDUElfRlVOQ19CSVRfVEFTX0NGRykpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MDI6XFx0XFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19UQVNfQ0ZHKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MDMtXFx0XFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQwNDpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBnZXQgQUNQSSBUQVMgY29uZmlnIHRhYmxlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MDUtXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQwOS1cXHRpZiAoQVRIMTJLX0FDUElfRlVOQ19CSVRfVkFMSUQoYWItXFx1MDAzZWFjcGksIEFUSDEyS19BQ1BJX0ZVTkNfQklUX1RBU19EQVRBKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQxMDpcXHRcXHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX1RBU19EQVRBKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MTEtXFx0XFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQxMjpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBnZXQgQUNQSSBUQVMgZGF0YSB0YWJsZTogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDEzLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MjItXFx0aWYgKEFUSDEyS19BQ1BJX0ZVTkNfQklUX1ZBTElEKGFiLVxcdTAwM2VhY3BpLCBBVEgxMktfQUNQSV9GVU5DX0JJVF9CSU9TX1NBUikpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MjM6XFx0XFx0cmV0ID0gYXRoMTJrX2FjcGlfZHNtX2dldF9kYXRhKGFiLCBBVEgxMktfQUNQSV9EU01fRlVOQ19CSU9TX1NBUik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDI0LVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0MjU6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gZ2V0IEFDUEkgYmlvcyBzYXIgZGF0YTogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDI2LVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00MzAtXFx0aWYgKEFUSDEyS19BQ1BJX0ZVTkNfQklUX1ZBTElEKGFiLVxcdTAwM2VhY3BpLCBBVEgxMktfQUNQSV9GVU5DX0JJVF9HRU9fT0ZGU0VUKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQzMTpcXHRcXHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0dFT19PRkZTRVQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQzMi1cXHRcXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDMzOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBBQ1BJIGdlbyBvZmZzZXQgZGF0YTogJWRcXFxcblxcXCIsIHJldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDM0LVxcdFxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NDQtXFx0aWYgKEFUSDEyS19BQ1BJX0ZVTkNfQklUX1ZBTElEKGFiLVxcdTAwM2VhY3BpLCBBVEgxMktfQUNQSV9GVU5DX0JJVF9DQ0EpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDQ1OlxcdFxcdHJldCA9IGF0aDEya19hY3BpX2RzbV9nZXRfZGF0YShhYiwgQVRIMTJLX0FDUElfRFNNX0ZVTkNfSU5ERVhfQ0NBKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NDYtXFx0XFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ0NzpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBnZXQgQUNQSSBEU00gQ0NBIHRocmVzaG9sZCBjb25maWd1cmF0aW9uOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NDgtXFx0XFx0XFx0XFx0ICAgIHJldCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NTktXFx0XFx0XFx0XFx0ICAgICAgIEFUSDEyS19BQ1BJX0ZVTkNfQklUX0JBTkRfRURHRV9DSEFOX1BPV0VSKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ2MDpcXHRcXHRyZXQgPSBhdGgxMmtfYWNwaV9kc21fZ2V0X2RhdGEoYWIsIEFUSDEyS19BQ1BJX0RTTV9GVU5DX0lOREVYX0JBTkRfRURHRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDYxLVxcdFxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0NjI6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gZ2V0IEFDUEkgRFNNIGJhbmQgZWRnZSBjaGFubmVsIHBvd2VyOiAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NjMtXFx0XFx0XFx0XFx0ICAgIHJldCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NzMtXFx0XFx0XFx0XFx0XFx0ICAgICBBQ1BJX0RFVklDRV9OT1RJRlksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDc0OlxcdFxcdFxcdFxcdFxcdCAgICAgYXRoMTJrX2FjcGlfZHNtX25vdGlmeSwgYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ3NS1cXHRpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo0NzY6XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gaW5zdGFsbCBEU00gbm90aWZ5IGNhbGxiYWNrOiAlZFxcXFxuXFxcIiwgc3RhdHVzKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00NzctXFx0XFx0cmV0dXJuIC1FSU87XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYy00ODQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NDg1OmludCBhdGgxMmtfYWNwaV9jaGVja19iZGZfdmFyaWFudF9uYW1lKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDg2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ5Mi1cXHRpZiAoc3Ryc2NweShhYi1cXHUwMDNlcW1pLnRhcmdldC5iZGZfZXh0LCBhYi1cXHUwMDNlYWNwaS5iZGZfc3RyaW5nICsgNCwgbWF4X2xlbikgXFx1MDAzYyAwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jOjQ5MzpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNDk0LVxcdFxcdFxcdCAgIFxcXCJhY3BpIGJkZiB2YXJpYW50IGxvbmdlciB0aGFuIHRoZSBidWZmZXIgKHZhcmlhbnQ6ICVzKVxcXFxuXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTQ5OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuYzo1MDA6dm9pZCBhdGgxMmtfYWNwaV9zdG9wKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmMtNTAxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTUwNi1cXHRcXHRcXHRcXHQgICBBQ1BJX0RFVklDRV9OT1RJRlksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmM6NTA3OlxcdFxcdFxcdFxcdCAgIGF0aDEya19hY3BpX2RzbV9ub3RpZnkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5jLTUwOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTc0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjc1OmludCBhdGgxMmtfYWNwaV9zdGFydChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo3Njp2b2lkIGF0aDEya19hY3BpX3N0b3Aoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6Nzc6Ym9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV9yZmtpbGwoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6Nzg6Ym9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV8xMWJlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjc5OnZvaWQgYXRoMTJrX2FjcGlfc2V0X2RzbV9mdW5jKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjgwOmludCBhdGgxMmtfYWNwaV9jaGVja19iZGZfdmFyaWFudF9uYW1lKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTgxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmgtODMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6ODQ6c3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2FjcGlfc3RhcnQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC04NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC04OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo4OTpzdGF0aWMgaW5saW5lIHZvaWQgYXRoMTJrX2FjcGlfc3RvcChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTkyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oOjkzOnN0YXRpYyBpbmxpbmUgYm9vbCBhdGgxMmtfYWNwaV9nZXRfZGlzYWJsZV9yZmtpbGwoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC05NC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC05Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDo5ODpzdGF0aWMgaW5saW5lIGJvb2wgYXRoMTJrX2FjcGlfZ2V0X2Rpc2FibGVfMTFiZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTEwMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaDoxMDM6c3RhdGljIGlubGluZSB2b2lkIGF0aDEya19hY3BpX3NldF9kc21fZnVuYyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWNwaS5oLTEwNC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC0xMDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9hY3BpLmg6MTA3OnN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19hY3BpX2NoZWNrX2JkZl92YXJpYW50X25hbWUoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FjcGkuaC0xMDgte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjIzOnN0YXRpYyBzdHJ1Y3QgYXRoMTJrX2FoYl9kcml2ZXIgKmF0aDEya19haGJfZmFtaWx5X2RyaXZlcnNbQVRIMTJLX0RFVklDRV9GQU1JTFlfTUFYXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI0OnN0YXRpYyBjb25zdCBjaGFyIGF0aDEya191c2VycGRfaXJxW11bOV0gPSB7XFxcInNwYXduXFxcIixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI1LVxcdFxcdFxcdFxcdCAgICAgXFxcInJlYWR5XFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMzEtICogT25lIFE2IFJvb3RQRCAobWFuYWdlZCBieSBzZXBhcmF0ZSBycHJvYyBkcml2ZXIpIHN1cHBvcnRzIG11bHRpcGxlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMjogKiBhdGgxMmsgVXNlclBEcy4gRWFjaCBVc2VyUEQgcmVwcmVzZW50cyBhIFdpRmkgcmFkaW8gaW5zdGFuY2UuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMy0gKlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zOC0gKiBMb2NraW5nOlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mzk6ICogIC0gYXRoMTJrX3Jwcm9jX2luZm9fbG9jazogUHJvdGVjdHMgZ19ycHJvY19pbmZvIGFsbG9jYXRpb24vZnJlZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtNDAtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzo0MTpzdGF0aWMgc3RydWN0IGF0aDEya19haGJfcnByb2NfaW5mbyAqZ19ycHJvY19pbmZvO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6NDI6c3RhdGljIERFRklORV9NVVRFWChhdGgxMmtfcnByb2NfaW5mb19sb2NrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTQzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYz0xMDA9ZW51bSBleHRfaXJxX251bSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTEzOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjE0MDpzdGF0aWMgdTMyIGF0aDEya19haGJfcmVhZDMyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUzMiBvZmZzZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNDEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxNDc6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl93cml0ZTMyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUzMiBvZmZzZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNDgtXFx0XFx0XFx0ICAgICAgIHUzMiB2YWx1ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTU1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTU2OnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2FuY2VsX3dvcmtxdWV1ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTU3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTYwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VjZV9jb3VudDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxNjE6XFx0XFx0c3RydWN0IGF0aDEya19jZV9waXBlICpjZV9waXBlID0gXFx1MDAyNmFiLVxcdTAwM2VjZS5jZV9waXBlW2ldO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTYyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTYzOlxcdFxcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFxcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTE2NC1cXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTY5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MTcwOnN0YXRpYyB2b2lkIGF0aDEya19haGJfZXh0X2dycF9kaXNhYmxlKHN0cnVjdCBhdGgxMmtfZXh0X2lycV9ncnAgKmlycV9ncnApXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNzEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xNzctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxNzg6c3RhdGljIHZvaWQgX19hdGgxMmtfYWhiX2V4dF9pcnFfZGlzYWJsZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTc5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTgyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBVEgxMktfRVhUX0lSUV9HUlBfTlVNX01BWDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxODM6XFx0XFx0c3RydWN0IGF0aDEya19leHRfaXJxX2dycCAqaXJxX2dycCA9IFxcdTAwMjZhYi1cXHUwMDNlZXh0X2lycV9ncnBbaV07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xODQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxODU6XFx0XFx0YXRoMTJrX2FoYl9leHRfZ3JwX2Rpc2FibGUoaXJxX2dycCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xODYtXFx0XFx0aWYgKGlycV9ncnAtXFx1MDAzZW5hcGlfZW5hYmxlZCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0xOTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoxOTQ6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9leHRfZ3JwX2VuYWJsZShzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMTk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjAxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjAyOnN0YXRpYyB2b2lkIGF0aDEya19haGJfc2V0Yml0MzIoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTggYml0LCB1MzIgb2Zmc2V0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjAzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjA1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjA2OlxcdHZhbCA9IGF0aDEya19haGJfcmVhZDMyKGFiLCBvZmZzZXQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjA3OlxcdGF0aDEya19haGJfd3JpdGUzMihhYiwgb2Zmc2V0LCB2YWwgfCBCSVQoYml0KSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMDgtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjA5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjEwOnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2xlYXJiaXQzMihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1OCBiaXQsIHUzMiBvZmZzZXQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMTEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMTQ6XFx0dmFsID0gYXRoMTJrX2FoYl9yZWFkMzIoYWIsIG9mZnNldCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMTU6XFx0YXRoMTJrX2FoYl93cml0ZTMyKGFiLCBvZmZzZXQsIHZhbCBcXHUwMDI2IH5CSVQoYml0KSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMTYtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjE3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjE4OnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxX2VuYWJsZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MTYgY2VfaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMjktXFx0aWYgKGNlX2F0dHItXFx1MDAzZXNyY19uZW50cmllcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjIzMDpcXHRcXHRhdGgxMmtfYWhiX3NldGJpdDMyKGFiLCBjZV9pZCwgaWUxX3JlZ19hZGRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTIzMi1cXHRpZiAoY2VfYXR0ci1cXHUwMDNlZGVzdF9uZW50cmllcykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjMzOlxcdFxcdGF0aDEya19haGJfc2V0Yml0MzIoYWIsIGNlX2lkLCBpZTJfcmVnX2FkZHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MjM0OlxcdFxcdGF0aDEya19haGJfc2V0Yml0MzIoYWIsIGNlX2lkICsgQ0VfSE9TVF9JRV8zX1NISUZULFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjM1LVxcdFxcdFxcdFxcdCAgICBpZTNfcmVnX2FkZHIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yMzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyMzk6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9jZV9pcnFfZGlzYWJsZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MTYgY2VfaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNTAtXFx0aWYgKGNlX2F0dHItXFx1MDAzZXNyY19uZW50cmllcylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI1MTpcXHRcXHRhdGgxMmtfYWhiX2NsZWFyYml0MzIoYWIsIGNlX2lkLCBpZTFfcmVnX2FkZHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjUyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjUzLVxcdGlmIChjZV9hdHRyLVxcdTAwM2VkZXN0X25lbnRyaWVzKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNTQ6XFx0XFx0YXRoMTJrX2FoYl9jbGVhcmJpdDMyKGFiLCBjZV9pZCwgaWUyX3JlZ19hZGRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI1NTpcXHRcXHRhdGgxMmtfYWhiX2NsZWFyYml0MzIoYWIsIGNlX2lkICsgQ0VfSE9TVF9JRV8zX1NISUZULFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjU2LVxcdFxcdFxcdFxcdCAgICAgIGllM19yZWdfYWRkcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI1OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI2MDpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX3N5bmNfY2VfaXJxcyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjY1LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VjZV9jb3VudDsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNjY6XFx0XFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjY3LVxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzoyNzQ6c3RhdGljIHZvaWQgYXRoMTJrX2FoYl9zeW5jX2V4dF9pcnFzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNzUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0yNzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFUSDEyS19FWFRfSVJRX0dSUF9OVU1fTUFYOyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI4MDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwID0gXFx1MDAyNmFiLVxcdTAwM2VleHRfaXJxX2dycFtpXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjg4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mjg5OnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxc19lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5MC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5My1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlY2VfY291bnQ7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6Mjk0OlxcdFxcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFxcdTAwMjYgQ0VfQVRUUl9ESVNfSU5UUilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTI5NS1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjI5NjpcXHRcXHRhdGgxMmtfYWhiX2NlX2lycV9lbmFibGUoYWIsIGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjk3LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmMtMjk5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzAwOnN0YXRpYyB2b2lkIGF0aDEya19haGJfY2VfaXJxc19kaXNhYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMDEte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMDQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZWNlX2NvdW50OyBpKyspIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjMwNTpcXHRcXHRpZiAoYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMDYtXFx0XFx0XFx0Y29udGludWU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMDc6XFx0XFx0YXRoMTJrX2FoYl9jZV9pcnFfZGlzYWJsZShhYiwgaSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMDgtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMTAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYzozMTE6c3RhdGljIGludCBhdGgxMmtfYWhiX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMTIte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzEzOlxcdGF0aDEya19haGJfY2VfaXJxc19lbmFibGUoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvYWhiLmM6MzE0OlxcdGF0aDEya19jZV9yeF9wb3N0X2J1ZihhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9haGIuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jLTMxOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2FoYi5jOjMxOTpzdGF0aWMgdm9pZCBhdGgxMmtfYWhiX2V4dF9pcnFfZW5hYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAyOjA3LjM1NjM1ODc0OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0MjMzNTQ1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciB0aGUgYXRoMTJrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgYXRoMTJrYCBkcml2ZXIuIEl0IGFwcGVhcnMgdG8gbW9kaWZ5IGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jYCwgd2hpY2ggdGVsbHMgbWUgaXQncyByZWxhdGVkIHRvIHRoZSBQQ0kgaW1wbGVtZW50YXRpb24uIFRoZSBwcm9tcHQncyBjcml0ZXJpYSBoYXZlIG1lIHRoaW5raW5nLlxuXG5GaXJzdCwgaXMgdGhpcyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBjb2RlIHRoYXQgcmVsaWVzIG9uIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VPyBZZXMsIGBhdGgxMmtgIGlzIGEgUXVhbGNvbW0gV2ktRmkgNyBkcml2ZXIsIHNvIGl0IGRlZmluaXRlbHkgbmVlZHMgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSAob3IgcG90ZW50aWFsbHkgQUhCIGZvciBTb0NzKS4gYG1hYzgwMjExX2h3c2ltYCBpc24ndCBnb2luZyB0byBoZWxwIGhlcmU7IHRoYXQncyBhIHNvZnR3YXJlIHNpbXVsYXRvciB0aGF0IGRvZXNuJ3QgaW50ZXJhY3Qgd2l0aCBgYXRoMTJrYC4gUENJIFdpLUZpIGRyaXZlcnMsIGluIGdlbmVyYWwsIGFyZSB0b3VnaCB0byBmdXp6IHVubGVzcyB3ZSBoYXZlIGEgc3BlY2lmaWMgUUVNVSBzZXR1cCBvciBpdCdzIGEgVVNCIGRyaXZlciB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LlxuXG5UaGUgcHJvbXB0IHNwZWNpZmljYWxseSBtZW50aW9ucyBleGNsdWRpbmcgXCJ2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy5cIiBOb3csIGBhdGgxMmtgIGlzIGEgKnZlbmRvci1zcGVjaWZpYyogUENJZSBXaS1GaSBkcml2ZXIsIHNvIGl0IHNvcnQgb2YgZml0cyB0aGUgZGVzY3JpcHRpb24uIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGUgaW50ZW50IGJlaGluZCB0aGUgcHJvbXB0IGVuY29tcGFzcyBkcml2ZXJzIGxpa2UgdGhpcz8gSXQgZG9lc24ndCBleHBsaWNpdGx5IG1lbnRpb24gV2ktRmkuXG5cbkkgbmVlZCB0byBsb29rIGNsb3NlciBhdCB3aGF0J3MgYmVpbmcgbW9kaWZpZWQuIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGlzIGJlaW5nIHRvdWNoZWQsIGFuZCB0aGF0J3MgY2FsbGVkIGR1cmluZyBkZXZpY2UgcHJvYmUuIFdpdGhvdXQgdGhlIGNvcnJlY3QgaGFyZHdhcmUsIHRoZSBwcm9iZSBlaXRoZXIgd29uJ3QgYmUgY2FsbGVkLCBvciBpdCB3aWxsIGZhaWwgZWFybHkuIElmIHRoZSBwcm9iZSBmYWlscywgdGhhdCB3b3VsZCBtZWFuIHRoYXQgdGhpcyBwYXRoIGlzIGluYWNjZXNzaWJsZSBpbiBhIHN0YW5kYXJkIFFFTVUgc2V0dXAsIHdoaWNoIHdvdWxkIGluZGljYXRlIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5Ib3dldmVyLCBzeXprYWxsZXIgZG9lcyBoYXZlIGEgUENJIGZ1enplciwgd2hpY2ggaGFzIGdvdCBtZSB0aGlua2luZy4gSXQgaGFzIHRoZSBhYmlsaXR5IHRvIGVtdWxhdGUgUENJIGRldmljZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGNhbiBzdWNjZXNzZnVsbHkgZW11bGF0ZSB0aGUgcGFydHMgb2YgdGhlIGRldmljZSB0aGF0IHRoZSBgYXRoMTJrYCBkcml2ZXIgcmVxdWlyZXMuIElmIHRoZSBmdXp6ZXIgY2FuIHRyaWdnZXIgdGhlIHByb2JlIG9mIGF0aDEyaywgdGhlbiBpdCBtaWdodCBiZSByZWFjaGFibGUuIEkgbXVzdCBpbnZlc3RpZ2F0ZSBpZiBzeXprYWxsZXIgaGFzIGRlc2NyaXB0aW9ucyBvciBzdXBwb3J0IGZvciBgYXRoMTJrYCB0byBzZWUgaWYgdGhpcyBpcyBwb3NzaWJsZS4gSWYgaXQgaXMsIHRoZW4gdGhlIHByb21wdCdzIGV4Y2x1c2lvbiBtYXkgbm90IGFwcGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIxMiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjoxNi43Nzk3MTYxNDNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxOTA2NjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJzeXMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjoxNi44Mjc5MTM4OTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDI1NzUzMzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgZ3JlcHBlciB0b29sIGlzIHVzZWxlc3MgZm9yIGRpZ2dpbmcgaW50byB0aGUgYHN5cy9gIGRpcmVjdG9yeSBmb3Igc3l6bGFuZyBkZXNjcmlwdGlvbnMuIFRoZSBkb2N1bWVudGF0aW9uIGlzIHF1aXRlIGV4cGxpY2l0IGFib3V0IHRoYXQuIEl0J3MgZXNzZW50aWFsbHkgdGVsbGluZyBtZSwgXCJEb24ndCBldmVuIGJvdGhlcjsgaXQgd29uJ3Qgd29yay5cIiBBbmQgSSBpbW1lZGlhdGVseSBzZWUgdGhlIGlzc3VlOiBJIGRvbid0IGhhdmUgdGhvc2UgYWx0ZXJuYXRpdmUgdG9vbHMsIGByZWFkLXN5ei1zcGVjYCBhbmQgYHN5ei1ncmVwcGVyYCwgaW5zdGFsbGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIFRoZSBzeXN0ZW0gcHJvbXB0IHJlYWxseSBzaG91bGQgaGF2ZSBtZW50aW9uZWQgdGhvc2UgdG9vbHMgaWYgaXQncyBleHBlY3RpbmcgbWUgdG8gdXNlIHRoZW0gZm9yIHRoaXMgdGFzaywgc2luY2UgdGhlIGBnaXQgZ3JlcGAgZmxhZ3MgYXJlIGlycmVsZXZhbnQgaGVyZSFcblxuU28sIEkgbmVlZCB0byBwaXZvdC4gSSBjYW4gc3RpbGwgdHJ5IHRvIHVuZGVyc3RhbmQgUENJIHByb2JlIHJlYWNoYWJpbGl0eSB0aG91Z2guXG5cblRoZSBoaW50IGxpZXMgaW4gdGhlc2UgcGF0Y2ggbW9kaWZpY2F0aW9uczogYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYC4gTGV0IG1lIGRpdmUgaW50byBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2Agc3BlY2lmaWNhbGx5LCBhcyB0aGF0IHNlZW1zIHRoZSBtb3JlIHJlbGV2YW50IG9mIHRoZSB0d28uIEknbGwgY2hlY2sgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDk2LCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAyOjI2LjI1MzY2OTc2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTkzNTQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz01MjM9c3RhdGljIGlycXJldHVybl90IGF0aDEya19wY2lfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNTQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6NTQ1OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNTQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9NjQzPXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9jb25maWdfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY4OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjY5MDpcXHRyZXQgPSBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY5MS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAyOjI2LjMwMzYxMDY5MloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgzNjcxNjAzMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYXRoMTJrIFBDSSBJUlEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGlzIGRlZmluaXRlbHkgcG9wcGluZyB1cCBhcyBhIHN1c3BlY3QuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldhaXQsIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGF0aDEya19wY2lfcHJvYmVgP1wiIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgSVJRIGNvbmZpZ3VyYXRpb24sIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBzdGFuZGFyZCBQQ0kgaW5pdGlhbGl6YXRpb24gZmxvdy4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgY2FsbCBncmFwaC4gVGhlIGRyaXZlcuKAmXMgaW5pdGlhbGl6YXRpb24gaXMgdGhlIG5hdHVyYWwgcGxhY2UgdG8gY29uZmlndXJlIHRoZSBpbnRlcnJ1cHRzLCBzbyB0aGlzIHNob3VsZCBiZSBlYXN5IHRvIGNvbmZpcm0uIEEgcXVpY2sgY29kZSBkaXZlIHRvIHRyYWNlIHRoZSBjYWxsIGNoYWluIGlzIGluIG9yZGVyLCBJIHN1cHBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzg1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6MzQuNjcwNzczODQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwMzg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX2NvbmZpZ19pcnFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTYzND1zdGF0aWMgaW50IGF0aDEya19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY0Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjY0MzpzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNjQ0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTU0OD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE2NDItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjQzOlxcdHJldCA9IGF0aDEya19wY2lfY29uZmlnX2lycShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjQ0LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6MzQuNzE5MTgzMTIzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NDk0NTAzNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgZm9yIFN5emthbGxlciB0byBUcmlnZ2VyIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBpcyBkZWZpbml0ZWx5IGNhbGxlZCBmcm9tIHdpdGhpbiBgYXRoMTJrX3BjaV9wcm9iZWAsIHRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiBsZXZlcmFnZSBzeXprYWxsZXIgdG8gYWN0dWFsbHkgKmdldCogYGF0aDEya19wY2lfcHJvYmVgIHRvIGV4ZWN1dGUuIE15IGh1bmNoIGlzIHRoYXQgaXQncyBwb3NzaWJsZS4gU3l6a2FsbGVyJ3MgUENJIGZ1enplciBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgaGVyZTsgaXQncyBjYXBhYmxlIG9mIGluamVjdGluZyB2aXJ0dWFsIFBDSSBkZXZpY2VzLiBUaGUgcGllY2VzIHNlZW0gdG8gZml0IGlmIHdlIGNhbiBtYWtlIHRoZSBQQ0kgZnV6emVyIGluamVjdCBhIGRldmljZSB0aGF0IGxvb2tzIGVub3VnaCBsaWtlIGFuIGF0aDEyayBkZXZpY2UsIGFzIGl0IHNlZW1zIHRoYXQgdGhpcyBpcyB0aGUgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoZSBkZXZpY2UgZHJpdmVyIGlzIGRldGVjdGVkLiBJZiB0aGUgdmVuZG9yIGFuZCBkZXZpY2UgSUQgbWF0Y2hlcyB3aGF0IHRoZSBkcml2ZXIgZXhwZWN0cywgYGF0aDEya19wY2lfcHJvYmVgIHNob3VsZCB0cmlnZ2VyLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIHRoZXJlZm9yZSwgaXMgdG8gdmVyaWZ5IHRoZSB2ZW5kb3IgYW5kIGRldmljZSBJRHMgdGhhdCBhcmUgdXNlZCBieSB0aGUgYXRoMTJrIGRyaXZlciB0byBzZWUgaWYgdGhlc2UgbWF0Y2gsIGFzIHRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgdG8gdGhlIGFwcHJvYWNoIGJlaW5nIGNvbnNpZGVyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTM1LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAyOjM5LjE2ODYzNjQwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NTM0OTMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19wY2lfaWRfdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6MzkuMjE1MTk0NjU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzkzMTQ0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipIdW50aW5nIERvd24gdGhlIFBDSSBEZXZpY2UgSUQgaW4gYXRoMTJrKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIHNwZWNpZmljIFBDSSBkZXZpY2UgSUQgaGFuZGxpbmcgZm9yIHRoZSBhdGgxMmsgd2lyZWxlc3MgZHJpdmVyLCBsaWtlbHkgZm9yIHNvbWUgc29ydCBvZiBkZWJ1Z2dpbmcgb3IgY29tcGF0aWJpbGl0eSBhbmFseXNpcy4gTXkgaW5zdGluY3Qgc2F5cyBpdCdzIGdvaW5nIHRvIGJlIGluIHRoZSBQQ0ktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24sIHdoaWNoIHVzdWFsbHkgcmVzaWRlcyB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrYCB0cmVlLCBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgYHBjaS5jYCBmaWxlLiBUaGF0J3MgYSBwcmV0dHkgc3RhbmRhcmQgbmFtaW5nIGNvbnZlbnRpb24gLSBcInBjaS5jXCIgYWxtb3N0IGFsd2F5cyBjb250YWlucyB0aGUgUENJLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGFuZCBkZXZpY2UgSUQgdGFibGUuIFRoaXMgaXNuJ3QgYSBzaG90IGluIHRoZSBkYXJrLCBidXQgYSB0YXJnZXRlZCBzZWFyY2ggYmFzZWQgb24gZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGtpbmRzIG9mIGRyaXZlcnMuIEtub3dpbmcgdGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIHRoZSBMaW51eCBrZXJuZWwgYW5kIGRyaXZlciBsYXlvdXRzIG1ha2VzIHRoaXMgYSBxdWljayBhbmQgZWZmaWNpZW50IHN0YXJ0aW5nIHBvaW50LiBOb3csIEknbGwganVzdCBvcGVuIHRoYXQgZmlsZSBhbmQgc2VhcmNoIGZvciBcInBjaVxcX2RldmljZVxcX2lkXCIgYW5kIHNlZSB3aGF0IEkgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIzNTksIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjo0My4yNTQ1MTMzMTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjA5NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kZXZpY2VfaWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1MjY9c3RhdGljIGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1Mjc6YXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUyOC17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTI5LVxcdGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2ZhbWlseV9pZDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1MzA6XFx0Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUzMS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTU0OD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTQ5OlxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjo0My4zMDY3MjgwMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQzMTczMjg3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGF0aDEyayBQQ0kgRHJpdmVyKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgYXRoMTJrYCBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgUENJIGltcGxlbWVudGF0aW9uLiBUaGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IHBva2luZyBhcm91bmQgaXMgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBsb29rIGZvciBob3cgdGhpcyBkcml2ZXIgaXMgKmlkZW50aWZpZWQqIGFuZCAqbG9hZGVkKiBieSB0aGUga2VybmVsLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggd2l0aGluIHRoYXQgZmlsZSBmb3IgdHdvIGtleSB0aGluZ3M6IGBNT0RVTEVfREVWSUNFX1RBQkxFYCwgd2hpY2ggZGVmaW5lcyB0aGUgbW9kdWxlJ3Mgc3VwcG9ydGVkIGRldmljZXMsIGFuZCBgcGNpX2RyaXZlcmAsIHdoaWNoIGlzIHRoZSBjb3JlIHN0cnVjdHVyZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIGRyaXZlciB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtLiBGaW5kaW5nIHRoZXNlIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUga2VybmVsIHJlY29nbml6ZXMgYW5kIGF0dGFjaGVzIHRoaXMgZHJpdmVyIHRvIHRoZSBQQ0kgaGFyZHdhcmUuIFRoaXMgc2hvdWxkIGJlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdG8gdW5kZXJzdGFuZCB0aGUgZGV2aWNlIG1hdGNoaW5nIGFuZCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NzgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjo0Ni43Mzg0NjM3MTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTg1NDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6Mzk6c3RhdGljIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVhdO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNDAtc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMmtfbXNpX2NvbmZpZyBtc2lfY29uZmlnX29uZV9tc2kgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE4Mjg9aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgyOTpcXHRcXHRcXHQgICAgICAgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICpkcml2ZXIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MzE6XFx0c3RydWN0IHBjaV9kcml2ZXIgKnBjaV9kcml2ZXI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODQ2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0NzpcXHRwY2lfZHJpdmVyID0gXFx1MDAyNmF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cXHUwMDNlZHJpdmVyO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0ODpcXHRwY2lfZHJpdmVyLVxcdTAwM2VuYW1lID0gZHJpdmVyLVxcdTAwM2VuYW1lO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTg0OTpcXHRwY2lfZHJpdmVyLVxcdTAwM2VpZF90YWJsZSA9IGRyaXZlci1cXHUwMDNlaWRfdGFibGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUwOlxcdHBjaV9kcml2ZXItXFx1MDAzZXByb2JlID0gYXRoMTJrX3BjaV9wcm9iZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTE6XFx0cGNpX2RyaXZlci1cXHUwMDNlcmVtb3ZlID0gYXRoMTJrX3BjaV9yZW1vdmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUyOlxcdHBjaV9kcml2ZXItXFx1MDAzZXNodXRkb3duID0gYXRoMTJrX3BjaV9zaHV0ZG93bjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTM6XFx0cGNpX2RyaXZlci1cXHUwMDNlZHJpdmVyLnBtID0gXFx1MDAyNmF0aDEya19wY2lfcG1fb3BzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg1NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTU6XFx0cmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIocGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODU2LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6NDYuNzg1MDUzODhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA5NzI5MTgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgRHJpdmVyIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIGBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcmAuLi4gdGhhdCdzIHRoZSBrZXkgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoYXQncyBiZWluZyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgdGhyb3VnaCB0aGUgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsaXphdGlvbiBmbG93LiBJdCdzIG5vdCBlbm91Z2ggdG8ga25vdyAqdGhhdCogaXQncyByZWdpc3RlcmVkOyBJIG5lZWQgdG8ga25vdyAqaG93KiBhbmQgKndoZW4qLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGRyaXZlcidzIGludGVncmF0aW9uIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzOTczLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDI6NTEuODgyMzQ4MjY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk1NjEwOTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTgyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgX19tYXliZV91bnVzZWQgYXRoMTJrX3BjaV9wbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODI4OmludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjktXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODU2LX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTc6RVhQT1JUX1NZTUJPTChhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODU4LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzY9dm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oOjE3NzppbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTk3PWludCBhdGgxMmtfd2lmaTdfcGNpX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MjAxOlxcdHJldCA9IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKEFUSDEyS19ERVZJQ0VfRkFNSUxZX1dJRkk3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAyLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMjo1My4xNzc5NjcyMjVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA2NzE1MzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZHJpdmVyIGRldmVsb3BtZW50OlxuXG4qKkluaXRpYWwgRHJpdmVyIFJlZ2lzdHJhdGlvbiBcdTAwMjYgSUQgVGFibGUgSW5zcGVjdGlvbioqXG5cblJpZ2h0LCBzbyBgYXRoMTJrX3dpZmk3X3BjaV9pbml0YCBoYXMganVzdCByZWdpc3RlcmVkIHRoZSBkYW1uIGRyaXZlci4gR29vZCwgdGhhdCdzIHN0ZXAgb25lLiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgd2hvbGUgUENJIGRldmljZSBtYXRjaGluZyB0aGluZyBpcyBzZXQgdXAsIEkgbmVlZCB0byBjaGVjayBvdXQgdGhlIGBpZF90YWJsZWAgZm9yIHRoZSBgYXRoMTJrX3dpZmk3X3BjaV9kcml2ZXJgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBQQ0kgZGV2aWNlIElEcyBhcmUgc3VwcG9ydGVkIGFuZCBzZWUgaWYgYW55dGhpbmcgbG9va3Mgb3V0IG9mIHBsYWNlLiBJdCdzIHRoZSBmaXJzdCBwbGFjZSB0byBsb29rIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXJkd2FyZSB3ZSdyZSBhY3R1YWxseSBzdXBwb3NlZCB0byBiZSB0YWxraW5nIHRvLCBhbmQgaG93IHRoZSBkcml2ZXIga25vd3MgaXQncyB0aGUgcmlnaHQgb25lLiBMZXQncyBzZWUgd2hhdCBkZXZpY2VzIHRoaXMgY292ZXJzIGFuZCBpZiBhbnl0aGluZyBpcyBvYnZpb3VzbHkgbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ3MzksIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMzowMS4yNDUxMjQ1MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExMjI5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3dpZmk3X3BjaV9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19wY2lfcmVnX2Jhc2UgYXRoMTJrX3dpZmk3X3JlZ19iYXNlID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYzoxODg6c3RhdGljIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciBhdGgxMmtfd2lmaTdfcGNpX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTE4OS1cXHQubmFtZSA9IFxcXCJhdGgxMmtfd2lmaTdfcGNpXFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTk3PWludCBhdGgxMmtfd2lmaTdfcGNpX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAxLVxcdHJldCA9IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKEFUSDEyS19ERVZJQ0VfRkFNSUxZX1dJRkk3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MjAyOlxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6MDEuMjk2MjU1MDA0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMDQyNzM4NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYXRoMTJrIFBDSSBJRCBUYWJsZSoqXG5cblJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyByZWNvZ25pemluZyB0aGVzZSBkZXZpY2VzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBhdGgxMmsgZHJpdmVyIGZvciB0aGUgbGF0ZXN0IFdpLUZpIDcgc2lsaWNvbi4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgYGlkX3RhYmxlYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jYCBmaWxlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQg4oCTIHRoZSBQQ0kgSUQgdGFibGUgd2lsbCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgd2hpY2ggc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb25zIGFuZCB2ZW5kb3JzIGFyZSBzdXBwb3J0ZWQgYW5kIGhvdyB0aGUgZHJpdmVyIGtub3dzIHRvIGJpbmQgdG8gdGhlbS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBzdGFuZGFyZCBQQ0kgZGV2aWNlIElEcywgdmVuZG9yIElEcywgYW5kIHBvdGVudGlhbGx5IHNvbWUgZmxhZ3Mgb3IgcHJvcGVydGllcyB0aGF0IGFyZSBjcnVjaWFsIGZvciBlbmFibGluZyBzcGVjaWZpYyBmZWF0dXJlcyBvciB3b3JrYXJvdW5kcyBmb3IgY2VydGFpbiBoYXJkd2FyZSByZXZpc2lvbnMuIEknbSBrZWVuIHRvIHNlZSBpZiB0aGV5J3JlIHVzaW5nIGFueSBuZXcsIG1vcmUgcmVmaW5lZCBtYXRjaGluZyB0ZWNobmlxdWVzIGluIHRoaXMgZ2VuZXJhdGlvbi4gVGhpcyB0YWJsZSBpcyB0aGUgYmVkcm9jayBmb3IgZGV2aWNlIHJlY29nbml0aW9uLCBhbmQgZ2V0dGluZyBmYW1pbGlhciB3aXRoIGl0IHdpbGwgcHJvdmlkZSBhIGNydWNpYWwgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyJ3MgYmVoYXZpb3VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTM3NCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjA2LjMwMDUzMjI3NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1NzkzOTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWRfdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTMzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDEya193aWZpN19wY2lfaWRfdGFibGVbXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTM1LVxcdHsgUENJX1ZERVZJQ0UoUUNPTSwgUUNOOTI3NF9ERVZJQ0VfSUQpIH0sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6NDE6TU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aDEya193aWZpN19wY2lfaWRfdGFibGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtNDItXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE4OD1zdGF0aWMgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyIGF0aDEya193aWZpN19wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMTg5LVxcdC5uYW1lID0gXFxcImF0aDEya193aWZpN19wY2lcXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MTkwOlxcdC5pZF90YWJsZSA9IGF0aDEya193aWZpN19wY2lfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xOTEtXFx0Lm9wcy5wcm9iZSA9IGF0aDEya193aWZpN19wY2lfcHJvYmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjA2LjM0NzExNzM2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA3NTAxNDQxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBGdXp6aW5nIFRhcmdldCoqXG5cbkFscmlnaHQsIHNvIHN5emthbGxlciAqY2FuKiBpbmplY3QgYSBQQ0kgZGV2aWNlLCBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgdmVuZG9yIElEIFFDT00gYW5kIGRldmljZSBJRCBRQ045Mjc0X0RFVklDRV9JRC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gQnV0IHdhaXQuLi4gZG9lcyBzeXprYWxsZXIncyBQQ0kgZnV6emVyIHJlYWxseSBhbGxvdyAqYXJiaXRyYXJ5KiBQQ0kgZGV2aWNlIGluamVjdGlvbj8gWWVzLCBJJ20gcHJldHR5IHN1cmUgaXQgaGFzIHRoYXQgYHN5el9wY2lfc2V0dXBgIHBzZXVkby1zeXNjYWxsIHRoYXQgZ2l2ZXMgdXMgc29tZSBjb250cm9sIG92ZXIgdmVuZG9yIGFuZCBkZXZpY2UgSURzLiBHb29kLlxuXG5Ob3csIHRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byBmb2N1cyBvbiBcInZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzXCIgdGhhdCByZWx5IG9uIHBoeXNpY2FsIFBDSWUgY2FyZHMgdGhhdCBhcmVuJ3QgZW11bGF0ZWQgd2VsbCBpbiBzdGFuZGFyZCBRRU1VLiBJcyB0aGUgYXRoMTJrIGRyaXZlciwgd2hpY2ggaXMgZm9yIFF1YWxjb21tIFdpLUZpIDcgZGV2aWNlcywgcmVhbGx5IGluIHRoYXQgY2F0ZWdvcnk/IEl0J3MgYSBXaS1GaSBkcml2ZXIsIG5vdCBhIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVS4gSG1tLi4uXG5cbkJ1dCwgaG9sZCBvbiwgdGhlIGNvcmUgcHJpbmNpcGxlIGlzIHRoZSBzYW1lLiBUaGUgcmVhbCBxdWVzdGlvbiBpczogZG9lcyB0aGlzIGRyaXZlciAqcmVxdWlyZSogcGh5c2ljYWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24gYW5kIGRvIGFueXRoaW5nIHVzZWZ1bCBkdXJpbmcgZnV6emluZz8gSWYgaXQgZG9lcywgdGhlbiBmdXp6aW5nIGl0IGlzIHByb2JhYmx5IG5vdCB3b3J0aCB0aGUgZWZmb3J0LiBJdCdzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGxvZ2ljIGFzIHRoZSBcInN3aXRjaC9TbWFydE5JQy9HUFVcIiBkcml2ZXJzLlxuXG5MZXQgbWUgdGhpbmvigKYgd2hhdCAqZXhhY3RseSogZG9lcyBgYXRoMTJrX3BjaV9wcm9iZWAgZG8/IEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoYXQgZnVuY3Rpb24ncyBjb2RlLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byBhc3Nlc3NpbmcgaWYgdGhpcyBpcyBhIHZpYWJsZSBmdXp6aW5nIHRhcmdldCBvciBub3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MTE1LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjE4LjQyMjEzNTE5M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzNjk3MjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3BjaV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyNz1hdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTQ4OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NDktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODI4PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0OS1cXHRwY2lfZHJpdmVyLVxcdTAwM2VpZF90YWJsZSA9IGRyaXZlci1cXHUwMDNlaWRfdGFibGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUwOlxcdHBjaV9kcml2ZXItXFx1MDAzZXByb2JlID0gYXRoMTJrX3BjaV9wcm9iZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NTEtXFx0cGNpX2RyaXZlci1cXHUwMDNlcmVtb3ZlID0gYXRoMTJrX3BjaV9yZW1vdmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjE4LjQ3MzUxMDkxN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzMyNzg5NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYXRoMTJrX3BjaV9wcm9iZSBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGF0aDEya19wY2lfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gaWYgdGhpcyByb3V0aW5lIGludGVyYWN0cyBkaXJlY3RseSB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycyBhbmQsIGNydWNpYWxseSwgaWYgaXQgY29udGFpbnMgYW55IGVhcmx5IGJhaWxvdXQgcGF0aHMgdGhhdCBhcmUgaW5kaWNhdGl2ZSBvZiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBvciBmdW5kYW1lbnRhbCByZXNvdXJjZSBjb25mbGljdHMuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgaGlnaC1sZXZlbCBzZW5zZSBvZiBpdHMgZXJyb3IgaGFuZGxpbmcgc3RyYXRlZ3kgYW5kIHBvdGVudGlhbGx5IGlkZW50aWZ5IGluaXRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgZHVyaW5nIHRoZSBQQ0kgZGV2aWNlIGJyaW5nLXVwIHByb2Nlc3MuIEFueSBxdWljayBkaXNxdWFsaWZpY2F0aW9uIGJhc2VkIG9uIHJlZ2lzdGVyIGFjY2VzcyB3b3VsZCBiZSBleHRyZW1lbHkgdXNlZnVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzExMCwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjIzLjIwNjMwMzAzNVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQwMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTQ4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU0ODpcXHRzdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuMTU0OTpcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuMTU1MDpcXHR7XFxuMTU1MTpcXHRcXHRlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZDtcXG4xNTUyOlxcdFxcdHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2k7XFxuMTU1MzpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiO1xcbjE1NTQ6XFx0XFx0aW50IHJldDtcXG4xNTU1OlxcdFxcbjE1NTY6XFx0XFx0YWIgPSBhdGgxMmtfY29yZV9hbGxvYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBzaXplb2YoKmFiX3BjaSksIEFUSDEyS19CVVNfUENJKTtcXG4xNTU3OlxcdFxcdGlmICghYWIpIHtcXG4xNTU4OlxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBhdGgxMmsgYmFzZVxcXFxuXFxcIik7XFxuMTU1OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4xNTYwOlxcdFxcdH1cXG4xNTYxOlxcdFxcbjE1NjI6XFx0XFx0YWItXFx1MDAzZWRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuMTU2MzpcXHRcXHRhYl9wY2kgPSBhdGgxMmtfcGNpX3ByaXYoYWIpO1xcbjE1NjQ6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZfaWQgPSBwY2lfZGV2LVxcdTAwM2VkZXZpY2U7XFxuMTU2NTpcXHRcXHRhYl9wY2ktXFx1MDAzZWFiID0gYWI7XFxuMTU2NjpcXHRcXHRhYl9wY2ktXFx1MDAzZXBkZXYgPSBwZGV2O1xcbjE1Njc6XFx0XFx0YWItXFx1MDAzZWhpZi5vcHMgPSBcXHUwMDI2YXRoMTJrX3BjaV9oaWZfb3BzO1xcbjE1Njg6XFx0XFx0YWItXFx1MDAzZWZ3X21vZGUgPSBBVEgxMktfUU1JX0ZJUk1XQVJFX01PREVfTk9STUFMO1xcbjE1Njk6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGFiKTtcXG4xNTcwOlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZhYl9wY2ktXFx1MDAzZXdpbmRvd19sb2NrKTtcXG4xNTcxOlxcdFxcbjE1NzI6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9jbGFpbShhYl9wY2ksIHBkZXYpO1xcbjE1NzM6XFx0XFx0aWYgKHJldCkge1xcbjE1NzQ6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBjbGFpbSBkZXZpY2U6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE1NzU6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9jb3JlO1xcbjE1NzY6XFx0XFx0fVxcbjE1Nzc6XFx0XFxuMTU3ODpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFxcXCJwY2kgcHJvYmUgJTA0eDolMDR4ICUwNHg6JTA0eFxcXFxuXFxcIixcXG4xNTc5OlxcdFxcdFxcdCAgIHBkZXYtXFx1MDAzZXZlbmRvciwgcGRldi1cXHUwMDNlZGV2aWNlLFxcbjE1ODA6XFx0XFx0XFx0ICAgcGRldi1cXHUwMDNlc3Vic3lzdGVtX3ZlbmRvciwgcGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZSk7XFxuMTU4MTpcXHRcXG4xNTgyOlxcdFxcdGFiLVxcdTAwM2VpZC52ZW5kb3IgPSBwZGV2LVxcdTAwM2V2ZW5kb3I7XFxuMTU4MzpcXHRcXHRhYi1cXHUwMDNlaWQuZGV2aWNlID0gcGRldi1cXHUwMDNlZGV2aWNlO1xcbjE1ODQ6XFx0XFx0YWItXFx1MDAzZWlkLnN1YnN5c3RlbV92ZW5kb3IgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xcbjE1ODU6XFx0XFx0YWItXFx1MDAzZWlkLnN1YnN5c3RlbV9kZXZpY2UgPSBwZGV2LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xcbjE1ODY6XFx0XFxuMTU4NzpcXHRcXHRkZXZpY2VfaWQgPSBhdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkocGNpX2Rldik7XFxuMTU4ODpcXHRcXHRpZiAoZGV2aWNlX2lkIFxcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xcbjE1ODk6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBnZXQgZGV2aWNlIGZhbWlseSBpZFxcXFxuXFxcIik7XFxuMTU5MDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjE1OTE6XFx0XFx0XFx0Z290byBlcnJfcGNpX2ZyZWVfcmVnaW9uO1xcbjE1OTI6XFx0XFx0fVxcbjE1OTM6XFx0XFxuMTU5NDpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1BDSSwgXFxcIlBDSSBkZXZpY2UgZmFtaWx5IGlkOiAlZFxcXFxuXFxcIiwgZGV2aWNlX2lkKTtcXG4xNTk1OlxcdFxcbjE1OTY6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcyA9IFxcdTAwMjZhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZW9wcztcXG4xNTk3OlxcdFxcdGFiX3BjaS1cXHUwMDNlcmVnX2Jhc2UgPSBhdGgxMmtfcGNpX2ZhbWlseV9kcml2ZXJzW2RldmljZV9pZF0tXFx1MDAzZXJlZ19iYXNlO1xcbjE1OTg6XFx0XFxuMTU5OTpcXHRcXHQvKiBDYWxsIGRldmljZSBzcGVjaWZpYyBwcm9iZS4gVGhpcyBpcyB0aGUgY2FsbGJhY2sgdGhhdCBjYW5cXG4xNjAwOlxcdFxcdCAqIGJlIHVzZWQgdG8gb3ZlcnJpZGUgYW55IG9wcyBpbiBmdXR1cmVcXG4xNjAxOlxcdFxcdCAqIHByb2JlIGlzIHZhbGlkYXRlZCBmb3IgTlVMTCBkdXJpbmcgcmVnaXN0cmF0aW9uLlxcbjE2MDI6XFx0XFx0ICovXFxuMTYwMzpcXHRcXHRyZXQgPSBhYl9wY2ktXFx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVxcdTAwM2Vwcm9iZShwZGV2LCBwY2lfZGV2KTtcXG4xNjA0OlxcdFxcdGlmIChyZXQpIHtcXG4xNjA1OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcHJvYmUgZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjA2OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xNjA3OlxcdFxcdH1cXG4xNjA4OlxcdFxcbjE2MDk6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9tc2lfYWxsb2MoYWJfcGNpKTtcXG4xNjEwOlxcdFxcdGlmIChyZXQpIHtcXG4xNjExOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2MgbXNpOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjEyOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xNjEzOlxcdFxcdH1cXG4xNjE0OlxcdFxcbjE2MTU6XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfcHJlX2luaXQoYWIpO1xcbjE2MTY6XFx0XFx0aWYgKHJldClcXG4xNjE3OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcXG4xNjE4OlxcdFxcbjE2MTk6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBjcHVtYXNrX29mKDApKTtcXG4xNjIwOlxcdFxcdGlmIChyZXQpIHtcXG4xNjIxOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gc2V0IGlycSBhZmZpbml0eSAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjIyOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9tc2lfZnJlZTtcXG4xNjIzOlxcdFxcdH1cXG4xNjI0OlxcdFxcbjE2MjU6XFx0XFx0cmV0ID0gYXRoMTJrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xcbjE2MjY6XFx0XFx0aWYgKHJldCkge1xcbjE2Mjc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBtaGk6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2Mjg6XFx0XFx0XFx0Z290byBlcnJfaXJxX2FmZmluaXR5X2NsZWFudXA7XFxuMTYyOTpcXHRcXHR9XFxuMTYzMDpcXHRcXG4xNjMxOlxcdFxcdHJldCA9IGF0aDEya19oYWxfc3JuZ19pbml0KGFiKTtcXG4xNjMyOlxcdFxcdGlmIChyZXQpXFxuMTYzMzpcXHRcXHRcXHRnb3RvIGVycl9taGlfdW5yZWdpc3RlcjtcXG4xNjM0OlxcdFxcbjE2MzU6XFx0XFx0cmV0ID0gYXRoMTJrX2NlX2FsbG9jX3BpcGVzKGFiKTtcXG4xNjM2OlxcdFxcdGlmIChyZXQpIHtcXG4xNjM3OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gYWxsb2NhdGUgY2UgcGlwZXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2Mzg6XFx0XFx0XFx0Z290byBlcnJfaGFsX3NybmdfZGVpbml0O1xcbjE2Mzk6XFx0XFx0fVxcbjE2NDA6XFx0XFxuMTY0MTpcXHRcXHRhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZyhhYik7XFxuMTY0MjpcXHRcXG4xNjQzOlxcdFxcdHJldCA9IGF0aDEya19wY2lfY29uZmlnX2lycShhYik7XFxuMTY0NDpcXHRcXHRpZiAocmV0KSB7XFxuMTY0NTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbmZpZyBpcnE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2NDY6XFx0XFx0XFx0Z290byBlcnJfY2VfZnJlZTtcXG4xNjQ3OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6MjMuMjA2NDI4Nzg1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTgxNzIwMjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gdGhlIGF0aDEya19wY2lfcHJvYmUgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgYXRoMTJrX3BjaV9wcm9iZWAsIGxpbmUgMTY0MyBzaG93cyBhIGNhbGwgdG8gYGF0aDEya19wY2lfY29uZmlnX2lycWAuIEJlZm9yZSB0aGF0LCB0aGVyZSdzIHF1aXRlIGEgY2hhaW4gb2YgaW5pdGlhbGl6YXRpb25zOiBgYXRoMTJrX3BjaV9jbGFpbWAsIHRoZW4gYGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2Vwcm9iZWAsIGZvbGxvd2VkIGJ5IGBhdGgxMmtfcGNpX21zaV9hbGxvY2AsIGBhdGgxMmtfY29yZV9wcmVfaW5pdGAsIGBhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludGAsIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCwgYGF0aDEya19oYWxfc3JuZ19pbml0YCwgYGF0aDEya19jZV9hbGxvY19waXBlc2AsIGFuZCBmaW5hbGx5IGBhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZ2AuIFRoYXQncyBhIGxvdCBvZiBzZXR1cCBiZWZvcmUgZXZlbiBnZXR0aW5nIHRvIElSUSBjb25maWd1cmF0aW9uLlxuXG5UaGUgYGF0aDEya19taGlfcmVnaXN0ZXJgIGNhbGwgc3RpY2tzIG91dC4gSSByZW1lbWJlciBNSEksIE1vZGVtIEhvc3QgSW50ZXJmYWNlLCBpcyBhIFF1YWxjb21tLXNwZWNpZmljIHByb3RvY29sLiBJIHJlY2FsbCBpdCdzIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUgbW9kZW0gaW4gdGhlc2UgdHlwZXMgb2YgZGV2aWNlcy4gVGhlIHF1ZXN0aW9uIG5vdyBpczogZG9lcyB0aGlzIE1ISSByZWdpc3RyYXRpb24gKnJlcXVpcmUqIHRoZSBoYXJkd2FyZSB0byBiZSBhY3R1YWxseSBwcmVzZW50IGFuZCByZXNwb25kaW5nIGJlZm9yZSBpdCByZWdpc3RlcnM/IEkgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgYGF0aDEya19taGlfcmVnaXN0ZXJgIGZ1bmN0aW9uIGRlZmluaXRpb24gdG8gYmUgc3VyZS4gSXQgY291bGQgYmUgYSBjcml0aWNhbCBkZXBlbmRlbmN5IGZvciBzdWJzZXF1ZW50IGluaXRpYWxpemF0aW9uIHN0ZXBzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTEyMSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjMzLjM4ODE1MTYyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MDk5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX21oaV9yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9MTgwPXN0YXRpYyB2b2lkIGF0aDEya19taGlfb3Bfd3JpdGVfcmVnKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0xODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzoxODc6aW50IGF0aDEya19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTE4OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjMzLjQzNjg3MjA4WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODgxMDYxMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCB0aGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBhbm90aGVyIHJlZ2lzdGVyIGZ1bmN0aW9uLCBsaWtlbHkgZGVhbGluZyB3aXRoIGluaXRpYWxpemF0aW9uIG9yIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGF0aDEyayBkcml2ZXIsIHByb2JhYmx5IGZvciB0aGUgTUhJIGludGVyZmFjZS5cIiBJdCdzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJlIGxvdy1sZXZlbCwgZmlkZGxpbmcgd2l0aCBoYXJkd2FyZS1zcGVjaWZpYyByZWdpc3RlcnMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHN0dWZmIGxpa2UgcmVnaXN0ZXIgb2Zmc2V0cywgYml0ZmllbGRzLCBwb3RlbnRpYWxseSBzb21lIG1lbW9yeSBtYXBwaW5nIGlmIGl0J3MgaGFuZGxpbmcgYSBoYXJkd2FyZSByZXNvdXJjZS4gSSdtIGd1ZXNzaW5nIGl0IHdpbGwgYmUgZWl0aGVyIGEgcmVhZCBvciB3cml0ZSByZWdpc3RlciB0aGF0IGNvbmZpZ3VyZXMgc29tZSBhc3BlY3Qgb2YgdGhlIE1ISSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlLiBJJ2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGFueSBjb21tZW50cyBvciBzdXJyb3VuZGluZyBjb2RlIHRvIGZpZ3VyZSBvdXQgKndoYXQqIHNwZWNpZmljYWxseSBpcyBiZWluZyByZWdpc3RlcmVkLiBJcyBpdCBhbiBpbnRlcnJ1cHQgbWFzaz8gQSBjbG9jayBjb25maWd1cmF0aW9uPyBBIERNQSBzZXR0aW5nPyBJdCdzIGFsbCBhYm91dCBjb250ZXh0IGhlcmUuIEFscmlnaHQsIGxldCdzIGdldCByZWFkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg3OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjM4LjAyNDk4MjEwOVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTc3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTg3OlxcdGludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXFxuIDE4ODpcXHR7XFxuIDE4OTpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gYWJfcGNpLVxcdTAwM2VhYjtcXG4gMTkwOlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmw7XFxuIDE5MTpcXHRcXHR1bnNpZ25lZCBpbnQgYm9hcmRfaWQ7XFxuIDE5MjpcXHRcXHRpbnQgcmV0O1xcbiAxOTM6XFx0XFx0Ym9vbCBkdWFsbWFjID0gZmFsc2U7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdG1oaV9jdHJsID0gbWhpX2FsbG9jX2NvbnRyb2xsZXIoKTtcXG4gMTk2OlxcdFxcdGlmICghbWhpX2N0cmwpXFxuIDE5NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XFxuIDIwMDpcXHRcXHRhYl9wY2ktXFx1MDAzZW1oaV9jdHJsID0gbWhpX2N0cmw7XFxuIDIwMTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlY250cmxfZGV2ID0gYWItXFx1MDAzZWRldjtcXG4gMjAyOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VyZWdzID0gYWItXFx1MDAzZW1lbTtcXG4gMjAzOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VyZWdfbGVuID0gYWItXFx1MDAzZW1lbV9sZW47XFxuIDIwNDpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmRkbV9zaXplID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlcmRkbV9zaXplO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKSB7XFxuIDIwNzpcXHRcXHRcXHRib2FyZF9pZCA9XFxuIDIwODpcXHRcXHRcXHRcXHRhdGgxMmtfcGNpX3JlYWQzMihhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKTtcXG4gMjA5OlxcdFxcdFxcdGJvYXJkX2lkID0gdTMyX2dldF9iaXRzKGJvYXJkX2lkLCBPVFBfQk9BUkRfSURfTUFTSyk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdFxcdGlmICghYm9hcmRfaWQgfHwgKGJvYXJkX2lkID09IE9UUF9JTlZBTElEX0JPQVJEX0lEKSkge1xcbiAyMTI6XFx0XFx0XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULFxcbiAyMTM6XFx0XFx0XFx0XFx0XFx0ICAgXFxcImZhaWxlZCB0byByZWFkIGJvYXJkIGlkXFxcXG5cXFwiKTtcXG4gMjE0OlxcdFxcdFxcdH0gZWxzZSBpZiAoYm9hcmRfaWQgXFx1MDAyNiBPVFBfVkFMSURfRFVBTE1BQ19CT0FSRF9JRF9NQVNLKSB7XFxuIDIxNTpcXHRcXHRcXHRcXHRkdWFsbWFjID0gdHJ1ZTtcXG4gMjE2OlxcdFxcdFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcXG4gMjE3OlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJkdWFsbWFjIGZ3IHNlbGVjdGVkIGZvciBib2FyZCBpZDogJXhcXFxcblxcXCIsIGJvYXJkX2lkKTtcXG4gMjE4OlxcdFxcdFxcdH1cXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0aWYgKGR1YWxtYWMpIHtcXG4gMjIyOlxcdFxcdFxcdGlmIChhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGEgXFx1MDAyNlxcdTAwMjYgYWItXFx1MDAzZWZ3LmFtc3NfZHVhbG1hY19sZW4gXFx1MDAzZSAwKSB7XFxuIDIyMzpcXHRcXHRcXHRcXHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xcbiAyMjQ6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2RhdGEgPSBhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGE7XFxuIDIyNTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfc3ogPSBhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2xlbjtcXG4gMjI2OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIyNzpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImR1YWxtYWMgZmlybXdhcmUgSUUgbm90IHByZXNlbnQgaW4gZmlybXdhcmUtTi5iaW5cXFxcblxcXCIpO1xcbiAyMjg6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMjI5OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xcbiAyMzA6XFx0XFx0XFx0fVxcbiAyMzE6XFx0XFx0fSBlbHNlIHtcXG4gMjMyOlxcdFxcdFxcdGlmIChhYi1cXHUwMDNlZncuYW1zc19kYXRhIFxcdTAwMjZcXHUwMDI2IGFiLVxcdTAwM2Vmdy5hbXNzX2xlbiBcXHUwMDNlIDApIHtcXG4gMjMzOlxcdFxcdFxcdFxcdC8qIHVzZSBNSEkgZmlybXdhcmUgZmlsZSBmcm9tIGZpcm13YXJlLU4uYmluICovXFxuIDIzNDpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfZGF0YSA9IGFiLVxcdTAwM2Vmdy5hbXNzX2RhdGE7XFxuIDIzNTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfc3ogPSBhYi1cXHUwMDNlZncuYW1zc19sZW47XFxuIDIzNjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMzc6XFx0XFx0XFx0XFx0LyogdXNlIHRoZSBvbGQgc2VwYXJhdGUgbWhpLmJpbiBNSEkgZmlybXdhcmUgZmlsZSAqL1xcbiAyMzg6XFx0XFx0XFx0XFx0YXRoMTJrX2NvcmVfY3JlYXRlX2Zpcm13YXJlX3BhdGgoYWIsIEFUSDEyS19BTVNTX0ZJTEUsXFxuIDIzOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYWJfcGNpLVxcdTAwM2VhbXNzX3BhdGgsXFxuIDI0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKGFiX3BjaS1cXHUwMDNlYW1zc19wYXRoKSk7XFxuIDI0MTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfaW1hZ2UgPSBhYl9wY2ktXFx1MDAzZWFtc3NfcGF0aDtcXG4gMjQyOlxcdFxcdFxcdH1cXG4gMjQzOlxcdFxcdH1cXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0cmV0ID0gYXRoMTJrX21oaV9nZXRfbXNpKGFiX3BjaSk7XFxuIDI0NjpcXHRcXHRpZiAocmV0KSB7XFxuIDI0NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBtc2kgZm9yIG1oaVxcXFxuXFxcIik7XFxuIDI0ODpcXHRcXHRcXHRnb3RvIGZyZWVfY29udHJvbGxlcjtcXG4gMjQ5OlxcdFxcdH1cXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0aWYgKCF0ZXN0X2JpdChBVEgxMktfUENJX0ZMQUdfTVVMVElfTVNJX1ZFQ1RPUlMsIFxcdTAwMjZhYl9wY2ktXFx1MDAzZWZsYWdzKSlcXG4gMjUyOlxcdFxcdFxcdG1oaV9jdHJsLVxcdTAwM2VpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfTk9CQUxBTkNJTkc7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2Vpb3ZhX3N0YXJ0ID0gMDtcXG4gMjU1OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2Vpb3ZhX3N0b3AgPSBhYl9wY2ktXFx1MDAzZWRtYV9tYXNrO1xcbiAyNTY6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXNibF9zaXplID0gU1pfNTEySztcXG4gMjU3OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VzZWdfbGVuID0gU1pfNTEySztcXG4gMjU4OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VmYmNfZG93bmxvYWQgPSB0cnVlO1xcbiAyNTk6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJ1bnRpbWVfZ2V0ID0gYXRoMTJrX21oaV9vcF9ydW50aW1lX2dldDtcXG4gMjYwOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VydW50aW1lX3B1dCA9IGF0aDEya19taGlfb3BfcnVudGltZV9wdXQ7XFxuIDI2MTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlc3RhdHVzX2NiID0gYXRoMTJrX21oaV9vcF9zdGF0dXNfY2I7XFxuIDI2MjpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVhZF9yZWcgPSBhdGgxMmtfbWhpX29wX3JlYWRfcmVnO1xcbiAyNjM6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXdyaXRlX3JlZyA9IGF0aDEya19taGlfb3Bfd3JpdGVfcmVnO1xcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlbWhpX2NvbmZpZyk7XFxuIDI2NjpcXHRcXHRpZiAocmV0KSB7XFxuIDI2NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHRvIG1oaSBidXMsIGVyciA9ICVkXFxcXG5cXFwiLCByZXQpO1xcbiAyNjg6XFx0XFx0XFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XFxuIDI2OTpcXHRcXHR9XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdHJldHVybiAwO1xcbiAyNzI6XFx0XFxuIDI3MzpcXHRmcmVlX2NvbnRyb2xsZXI6XFxuIDI3NDpcXHRcXHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcXG4gMjc1OlxcdFxcdGFiX3BjaS1cXHUwMDNlbWhpX2N0cmwgPSBOVUxMO1xcbiAyNzY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjc3OlxcdH1cXG4gMjc4OlxcdFxcbiAyNzk6XFx0dm9pZCBhdGgxMmtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG4gMjgwOlxcdHtcXG4gMjgxOlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmwgPSBhYl9wY2ktXFx1MDAzZW1oaV9jdHJsO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRtaGlfdW5yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsKTtcXG4gMjg0OlxcdFxcdGtmcmVlKG1oaV9jdHJsLVxcdTAwM2VpcnEpO1xcbiAyODU6XFx0XFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XFxuIDI4NjpcXHRcXHRhYl9wY2ktXFx1MDAzZW1oaV9jdHJsID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6MzguMDI1MTAxMzI5WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MzkxMDQ0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBhdGgxMmsgRHJpdmVyJ3MgUmVnaXN0cmF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBgYXRoMTJrYCBkcml2ZXIgYW5kIEkndmUgaGl0IGEga2V5IHBvaW50OiBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIFRoaXMgZnVuY3Rpb24sIEkgc2VlLCBjYWxscyBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgZG9lcyB0aGlzIGBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcmAgaGF2ZSBhIGhhcmQgZGVwZW5kZW5jeSBvbiBwaHlzaWNhbCBoYXJkd2FyZT8gSXQgKnNob3VsZG4ndCosIGluIHByaW5jaXBsZSwgc2luY2UgaXRzIHByaW1hcnkgcm9sZSBpcyBidXMgcmVnaXN0cmF0aW9uLiBJdCdzIHN1cHBvc2VkIHRvIGFubm91bmNlIHRoZSBjb250cm9sbGVyIHRvIHRoZSBNSEkgYnVzIGluZnJhc3RydWN0dXJlLlxuXG5CdXQgSSBuZWVkIHRvIGJlIHN1cmUuIFRoaW5raW5nIGZ1cnRoZXIsIEkgc2VlIHRoYXQgYGF0aDEya19wY2lfcHJvYmVgIOKAkyB0aGUgUENJIHByb2JlIGZ1bmN0aW9uIOKAkyBjYWxscyBgYXRoMTJrX21oaV9yZWdpc3RlcmAuIFRoZW4sIGluIHdoYXQgYXBwZWFycyB0byBiZSBhIHR5cGljYWwgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGl0IGNhbGxzIGEgd2hvbGUgc2xldyBvZiBvdGhlciBmdW5jdGlvbnM6IGBhdGgxMmtfaGFsX3NybmdfaW5pdGAsIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgLCBgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWdgLCBhbmQgZmluYWxseSwgYGF0aDEya19wY2lfY29uZmlnX2lycWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBwYXRoIHdpbGwgd29yayBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiByZWFsIGhhcmR3YXJlLlxuXG5UaGUgcXVlc3Rpb24gbm93IGJlY29tZXM6IGlzIHRoZXJlIGFueXRoaW5nIGluIHRoaXMgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdGhhdCB3b3VsZCBwcmV2ZW50IGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGZyb20gcnVubmluZyBpZiBpdCdzIHJ1bm5pbmcgb24gYSBzeXN0ZW0gd2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlPyBJIG5lZWQgdG8ga25vdyB0aGlzLCBiZWNhdXNlIHRoYXQgZnVuY3Rpb24gbGlrZWx5IGNvbmZpZ3VyZXMgdGhlIGludGVycnVwdCBoYW5kbGluZywgYW5kIEkgbmVlZCB0byB0ZXN0IHRoYXQgcG9ydGlvbiBvZiB0aGUgY29kZS5cblxuVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gY2hlY2sgYGF0aDEya19oYWxfc3JuZ19pbml0YC4gVGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIG5leHQgc3RlcCB0byBmb2xsb3cgdG8gYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxOTk5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6NDMuODY0MjEwMDIyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjA2NjkyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfaGFsX3NybmdfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hhbC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmM9NzI2PXN0YXRpYyB2b2lkIGF0aDEya19oYWxfdW5yZWdpc3Rlcl9zcm5nX2xvY2tfa2V5cyhzdHJ1Y3QgYXRoMTJrX2hhbCAqaGFsKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuYy03MzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuYzo3MzQ6aW50IGF0aDEya19oYWxfc3JuZ19pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oYWwuYy03MzUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowMzo0My45MjAyODA4NDZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0NDA5MjQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyBvbiwgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGF0aDEya19oYWxfc3JuZ19pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfaGFsX3NybmdfaW5pdGAgZnVuY3Rpb24uIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgZGVzY3JpcHRpdmUsIHN1Z2dlc3Rpbmcgd2UncmUgZGVhbGluZyB3aXRoIGluaXRpYWxpemF0aW9uIG9mIGEgXCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcIiDigJMgc3BlY2lmaWNhbGx5LCB0aGUgaGFyZHdhcmUgaW1wbGVtZW50YXRpb24gd2l0aGluIHRoZSBBdGhlcm9zIDEyayBjaGlwc2V0LCBJJ20gYXNzdW1pbmcuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IGNvbXBvbmVudHMgYXJlIGJlaW5nIGluaXRpYWxpemVkPyBXaGF0IGtpbmQgb2Ygc2VjdXJpdHkgbWVhc3VyZXMgYXJlIGltcGxlbWVudGVkLCBvciBiZWluZyBwcmVwYXJlZCBmb3I/IFdoYXQgY29udGV4dCBpcyBuZWVkZWQgZm9yIHRoaXMgaW5pdGlhbGl6YXRpb24gdG8gc3VjY2VlZD8gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzPyBBcmUgd2Ugc2V0dGluZyB1cCB0aGUgaGFyZHdhcmUgaXRzZWxmLCBjb25maWd1cmluZyByZWdpc3RlcnMsIG9yIHBlcmhhcHMgZXN0YWJsaXNoaW5nIGNvbW11bmljYXRpb24gY2hhbm5lbHMgZm9yIGVudHJvcHkgZ2F0aGVyaW5nPyBJ4oCZbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlOiByZWdpc3RlciBhY2Nlc3MsIHNlZWQgZ2VuZXJhdGlvbiwgbWF5YmUgaW50ZXJydXB0IHNldHVwIGZvciBldmVudCBoYW5kbGluZywgcGVyaGFwcyBldmVuIHRlc3RzIGZvciBiYXNpYyBmdW5jdGlvbmFsaXR5IHRvIGVuc3VyZSB0aGUgUk5HIGlzIHdvcmtpbmcgYXMgZGVzaWduZWQuIEknbGwgYmUgbG9va2luZyBjYXJlZnVsbHkgZm9yIGVycm9yIGhhbmRsaW5nLiBBIHByb3BlciBzZWN1cmUgUk5HIGlzICpjcml0aWNhbCogc28gdGhlIGRldGFpbHMgb24gdGhlIGVycm9yIHBhdGhzIHdpbGwgYmUgZXh0cmVtZWx5IHZhbHVhYmxlLiBUaGUgZmxvdyBpdHNlbGYgaXMgc29tZXRoaW5nIEknbGwgd2FudCB0byB0cmFjZS4gV2hhdCBpcyB0aGUgb3JkZXIgb2YgZXZlbnRzPyBUaGlzIGlzIGdvaW5nIHRvIGJlIGdvb2Q7IHRoaXMgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN0dWZmIGhhcHBlbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNzU5LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6NDcuODY0Mzc1OTA1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGFsLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzM0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzM0OlxcdGludCBhdGgxMmtfaGFsX3NybmdfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbiA3MzU6XFx0e1xcbiA3MzY6XFx0XFx0c3RydWN0IGF0aDEya19oYWwgKmhhbCA9IFxcdTAwMjZhYi1cXHUwMDNlaGFsO1xcbiA3Mzc6XFx0XFx0aW50IHJldDtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0cmV0ID0gaGFsLVxcdTAwM2VvcHMtXFx1MDAzZWNyZWF0ZV9zcm5nX2NvbmZpZyhoYWwpO1xcbiA3NDA6XFx0XFx0aWYgKHJldClcXG4gNzQxOlxcdFxcdFxcdGdvdG8gZXJyX2hhbDtcXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0aGFsLVxcdTAwM2VkZXYgPSBhYi1cXHUwMDNlZGV2O1xcbiA3NDQ6XFx0XFxuIDc0NTpcXHRcXHRyZXQgPSBhdGgxMmtfaGFsX2FsbG9jX2NvbnRfcmRwKGhhbCk7XFxuIDc0NjpcXHRcXHRpZiAocmV0KVxcbiA3NDc6XFx0XFx0XFx0Z290byBlcnJfaGFsO1xcbiA3NDg6XFx0XFxuIDc0OTpcXHRcXHRyZXQgPSBhdGgxMmtfaGFsX2FsbG9jX2NvbnRfd3JwKGhhbCk7XFxuIDc1MDpcXHRcXHRpZiAocmV0KVxcbiA3NTE6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9jb250X3JkcDtcXG4gNzUyOlxcdFxcbiA3NTM6XFx0XFx0YXRoMTJrX2hhbF9yZWdpc3Rlcl9zcm5nX2xvY2tfa2V5cyhoYWwpO1xcbiA3NTQ6XFx0XFxuIDc1NTpcXHRcXHRyZXR1cm4gMDtcXG4gNzU2OlxcdFxcbiA3NTc6XFx0ZXJyX2ZyZWVfY29udF9yZHA6XFxuIDc1ODpcXHRcXHRhdGgxMmtfaGFsX2ZyZWVfY29udF9yZHAoaGFsKTtcXG4gNzU5OlxcdFxcbiA3NjA6XFx0ZXJyX2hhbDpcXG4gNzYxOlxcdFxcdHJldHVybiByZXQ7XFxuIDc2MjpcXHR9XFxuIDc2MzpcXHRcXG4gNzY0OlxcdHZvaWQgYXRoMTJrX2hhbF9zcm5nX2RlaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbiA3NjU6XFx0e1xcbiA3NjY6XFx0XFx0c3RydWN0IGF0aDEya19oYWwgKmhhbCA9IFxcdTAwMjZhYi1cXHUwMDNlaGFsO1xcbiA3Njc6XFx0XFxuIDc2ODpcXHRcXHRhdGgxMmtfaGFsX3VucmVnaXN0ZXJfc3JuZ19sb2NrX2tleXMoaGFsKTtcXG4gNzY5OlxcdFxcdGF0aDEya19oYWxfZnJlZV9jb250X3JkcChoYWwpO1xcbiA3NzA6XFx0XFx0YXRoMTJrX2hhbF9mcmVlX2NvbnRfd3JwKGhhbCk7XFxuIDc3MTpcXHRcXHRrZnJlZShoYWwtXFx1MDAzZXNybmdfY29uZmlnKTtcXG4gNzcyOlxcdFxcdGhhbC1cXHUwMDNlc3JuZ19jb25maWcgPSBOVUxMO1xcbiA3NzM6XFx0fVxcbiA3NzQ6XFx0XFxuIDc3NTpcXHR2b2lkIGF0aDEya19oYWxfZHVtcF9zcm5nX3N0YXRzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDc3NjpcXHR7XFxuIDc3NzpcXHRcXHRzdHJ1Y3QgaGFsX3NybmcgKnNybmc7XFxuIDc3ODpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2V4dF9pcnFfZ3JwICppcnFfZ3JwO1xcbiA3Nzk6XFx0XFx0c3RydWN0IGF0aDEya19jZV9waXBlICpjZV9waXBlO1xcbiA3ODA6XFx0XFx0aW50IGk7XFxuIDc4MTpcXHRcXG4gNzgyOlxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJMYXN0IGludGVycnVwdCByZWNlaXZlZCBmb3IgZWFjaCBDRTpcXFxcblxcXCIpO1xcbiA3ODM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZWNlX2NvdW50OyBpKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDM6NDcuODY0NDc1MzE1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjY4MzgyMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTWVtb3J5IGFuZCBMb2NraW5nOiBBIFF1aWNrIENoZWNrLUluKipcblxuUmlnaHQsIHNvIHRoaXMgcGllY2Ugb2YgY29kZSBpcyBmdW5kYW1lbnRhbGx5IGFib3V0IG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2luZyBsb2NrIGtleXMuIFByZXR0eSBzdHJhaWdodGZvcndhcmQgYXQgZmFjZSB2YWx1ZS4gTm8gY29tcGxleCBhbGdvcml0aG1zIG9yIGludHJpY2F0ZSBkYXRhIHN0cnVjdHVyZXMgaGVyZS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgaXQncyBmb2N1c2luZyBvbiB0aGUgYmFzaWNzOiBzZWN1cmluZyB0aGUgbmVjZXNzYXJ5IG1lbW9yeSByZXNvdXJjZXMgYW5kIGVuc3VyaW5nIGNvbmN1cnJlbnQgYWNjZXNzIGlzIHByb3Blcmx5IGhhbmRsZWQuIEknbSBhc3N1bWluZyB3ZSdyZSBkZWFsaW5nIHdpdGggbG93LWxldmVsIGtlcm5lbCBvcGVyYXRpb25zLCBsaWtlbHkgd2l0aGluIGEgZHJpdmVyIGNvbnRleHQuXG5cbkhvd2V2ZXIsIEknbSBhbHJlYWR5IHN0YXJ0aW5nIHRvIHByb2JlIGEgYml0IGRlZXBlci4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgYGF0aDEya19jZV9hbGxvY19waXBlc2AuIFdoeSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uPyBXaGF0IGltcGxpY2F0aW9ucyBkb2VzIHRoYXQgZnVuY3Rpb24gY2FsbCBoYXZlPyBEb2VzIGl0IGRlYWwgd2l0aCBhbnl0aGluZyByZWxhdGVkIHRvIHNwZWNpZmljIHJlc291cmNlcz8gSSB3YW50IHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBudWFuY2VzIG9mIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHRoYXQgcGllY2Ugb2YgY29kZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgcGlwZSBhbGxvY2F0aW9uIHBsYXlzIGEgcm9sZSBpbiB0aGUgYnJvYWRlciBzeXN0ZW0gdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgb3IgYXJlYXMgcmVxdWlyaW5nIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBiZSBtb3JlIHByZWNpc2UgaW4gbXkgdGhpbmtpbmcsIHNvIEknbGwgcmV2aWV3IGFueSByZWxhdGVkIGRvY3VtZW50YXRpb24gYmVmb3JlIG1vdmluZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM4NTcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjUxLjc5MTMxNjEyM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgyMTU4ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX2NlX2FsbG9jX3BpcGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NlLmM9NjczPXZvaWQgYXRoMTJrX2NlX2ZyZWVfcGlwZXMoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY2UuYy03MjEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jZS5jOjcyMjppbnQgYXRoMTJrX2NlX2FsbG9jX3BpcGVzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jZS5jLTcyMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjAzOjUxLjgzOTUzNjAyN1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzQ0NjkwODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gYGF0aDEya19jZV9hbGxvY19waXBlc2A6XG5cbioqRGVjb2RpbmcgYGF0aDEya19jZV9hbGxvY19waXBlc2AqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gZGlzc2VjdCB0aGlzIGBhdGgxMmtfY2VfYWxsb2NfcGlwZXNgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGBhdGgxMmtgIGRyaXZlciAobGlrZWx5IGRlYWxpbmcgd2l0aCBBdGhlcm9zL1F1YWxjb21tIHdpcmVsZXNzIGNoaXBzZXRzKSwgdGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gYWxsb2NhdGluZyBjb21tdW5pY2F0aW9uIHBpcGVzIG9yIGNoYW5uZWxzIHdpdGhpbiB0aGUgY2hpcCdzIGhhcmR3YXJlIGNvbnRleHQuIFRoZSBcIkNFXCIgcHJvYmFibHkgc3RhbmRzIGZvciBcIkNvbXBsZXRpb24gRW5naW5lXCIgb3IgXCJDb21tdW5pY2F0aW9uIEVuZ2luZVwiLCBhIGNydWNpYWwgY29tcG9uZW50IGZvciBETUEgb3BlcmF0aW9ucyBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIHdpdGhpbiB0aGUgd2lyZWxlc3MgY29udHJvbGxlci5cblxuTXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGhhbmRsaW5nIHRoZSByZWdpc3RyYXRpb24gYW5kIHNldHVwIG9mIHRoZXNlIHBpcGVzLCBwZXJoYXBzIGZvciBkaWZmZXJlbnQgdHJhZmZpYyBjbGFzc2VzIChWb0lQLCB2aWRlbywgYmVzdCBlZmZvcnQsIGV0Yy4pLiBJdCdzIHByb2JhYmx5IHJlc3BvbnNpYmxlIGZvciBvYnRhaW5pbmcgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSByZXNvdXJjZXMg4oCTIGRlc2NyaXB0b3JzLCBidWZmZXJzLCBpbnRlcnJ1cHQgdmVjdG9ycywgYW5kIHRoZSBsaWtlIOKAkyByZXF1aXJlZCBmb3IgdGhlc2UgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gSSdkIGV4cGVjdCB0byBzZWUgc29tZSBlcnJvciBjaGVja2luZywgcmVzb3VyY2UgYWxsb2NhdGlvbiBmcm9tIHRoZSBkZXZpY2UncyBjb250ZXh0IChsaWtlbHkgYSBgc3RydWN0IGF0aDEya2ApLCBhbmQgaW5pdGlhbGl6YXRpb24gb2YgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHRoZSBwaXBlIHN0YXRlLlxuXG5JJ2xsIGJlIGxvb2tpbmcgZm9yIGhpbnRzIGFib3V0IHRoZSBwaXBlIGFsbG9jYXRpb24gc3RyYXRlZ3kuIElzIGl0IHN0YXRpYywgZHluYW1pYywgb3IgYSBoeWJyaWQgYXBwcm9hY2g/IEFyZSB0aGVyZSBsaW1pdHMgb24gdGhlIG51bWJlciBvZiBwaXBlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQ/IERvZXMgaXQgdGFrZSBpbnRvIGFjY291bnQgcG93ZXIgbWFuYWdlbWVudCBjb25zaWRlcmF0aW9ucyB0byBlZmZpY2llbnRseSBtYW5hZ2UgdGhlIHJlc291cmNlcz8gU3BlY2lmaWNhbGx5LCBJJ20gZXhwZWN0aW5nIHRvIGxvb2sgZm9yIGFyZ3VtZW50cyB0aGF0IHJlcHJlc2VudCB0aGluZ3MgbGlrZTogZGV2aWNlIGNvbnRleHQsIHBpcGUgaWRlbnRpZmllciwgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIChlLmcuIHF1ZXVlIHByaW9yaXR5LCBidWZmZXIgc2l6ZXMsIGludGVycnVwdCBzZXR0aW5ncyksIGFuZCBwZXJoYXBzIHBvaW50ZXJzIHRvIGNhbGxiYWNrIGZ1bmN0aW9ucyBvciBjb21wbGV0aW9uIGhhbmRsZXJzLlxuXG5VbHRpbWF0ZWx5LCBJIGV4cGVjdCB0byBzZWUgdGhpcyBmdW5jdGlvbiBhcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBtYW5hZ2luZyB0aGUgZmxvdyBvZiBkYXRhIHRvIGFuZCBmcm9tIHRoZSB3aXJlbGVzcyBoYXJkd2FyZS4gVW5kZXJzdGFuZGluZyB0aGUgZGV0YWlscyBvZiBwaXBlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgaXMgZnVuZGFtZW50YWwgZm9yIGVmZmljaWVudCB3aXJlbGVzcyBvcGVyYXRpb24sIHRocm91Z2hwdXQsIGFuZCBRb1MuIEknbGwgYmUgbG9va2luZyBmb3IgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBhdGgxMmtgIGRyaXZlciBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMxOSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA0OjAxLjE4NDIzMDgwNloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEwNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyMjpcXHRpbnQgYXRoMTJrX2NlX2FsbG9jX3BpcGVzKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDcyMzpcXHR7XFxuIDcyNDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2NlX3BpcGUgKnBpcGU7XFxuIDcyNTpcXHRcXHRpbnQgaTtcXG4gNzI2OlxcdFxcdGludCByZXQ7XFxuIDcyNzpcXHRcXHRjb25zdCBzdHJ1Y3QgY2VfYXR0ciAqYXR0cjtcXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmFiLVxcdTAwM2VjZS5jZV9sb2NrKTtcXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZWNlX2NvdW50OyBpKyspIHtcXG4gNzMyOlxcdFxcdFxcdGF0dHIgPSBcXHUwMDI2YWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlaG9zdF9jZV9jb25maWdbaV07XFxuIDczMzpcXHRcXHRcXHRwaXBlID0gXFx1MDAyNmFiLVxcdTAwM2VjZS5jZV9waXBlW2ldO1xcbiA3MzQ6XFx0XFx0XFx0cGlwZS1cXHUwMDNlcGlwZV9udW0gPSBpO1xcbiA3MzU6XFx0XFx0XFx0cGlwZS1cXHUwMDNlYWIgPSBhYjtcXG4gNzM2OlxcdFxcdFxcdHBpcGUtXFx1MDAzZWJ1Zl9zeiA9IGF0dHItXFx1MDAzZXNyY19zel9tYXg7XFxuIDczNzpcXHRcXG4gNzM4OlxcdFxcdFxcdHJldCA9IGF0aDEya19jZV9hbGxvY19waXBlKGFiLCBpKTtcXG4gNzM5OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gNzQwOlxcdFxcdFxcdFxcdC8qIEZyZWUgYW55IHBhcnRpYWwgc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uICovXFxuIDc0MTpcXHRcXHRcXHRcXHRhdGgxMmtfY2VfZnJlZV9waXBlcyhhYik7XFxuIDc0MjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA3NDM6XFx0XFx0XFx0fVxcbiA3NDQ6XFx0XFx0fVxcbiA3NDU6XFx0XFxuIDc0NjpcXHRcXHRyZXR1cm4gMDtcXG4gNzQ3OlxcdH1cXG4gNzQ4OlxcdFxcbiA3NDk6XFx0aW50IGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgY2VfaWQpXFxuIDc1MDpcXHR7XFxuIDc1MTpcXHRcXHRpZiAoY2VfaWQgXFx1MDAzZT0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlY2VfY291bnQpXFxuIDc1MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNzUzOlxcdFxcbiA3NTQ6XFx0XFx0cmV0dXJuIGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZWhvc3RfY2VfY29uZmlnW2NlX2lkXS5mbGFncztcXG4gNzU1OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MDEuMTg0MzMzMzQ2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzQ3MzM3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTWVtb3J5IEFsbG9jYXRpb24gQ29uY2VybnMgYW5kIGEgU3BlY2lmaWMgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGNvbnRleHQgaGVyZSBpcyBzaW1wbGU6IHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBtZW1vcnkgYWxsb2NhdGlvbiBvcGVyYXRpb24sIHByZXN1bWFibHkgcmVsYXRlZCB0byB3aXJlbGVzcyBkcml2ZXIgaW5pdGlhbGl6YXRpb24uIFRoYXQgZmlyc3QgdGhvdWdodCwgXCJJdCBqdXN0IGFsbG9jYXRlcyBtZW1vcnksXCIgZmVlbHMgYWxtb3N0IGRpc21pc3NpdmUsIGJ1dCB0aGF0IGRvZXNuJ3QgbWVhbiBpdCBpc24ndCBpbXBvcnRhbnQuIE1lbW9yeSBhbGxvY2F0aW9uIGlzIGZ1bmRhbWVudGFsLiBXZSBuZWVkIHRvIGJlIHN1cmUgaXQncyBkb25lIGNvcnJlY3RseSwgc2FmZWx5LCBhbmQgZWZmaWNpZW50bHkuIE5vIGxlYWtzLCBubyBmcmFnbWVudGF0aW9uLCBhbmQgcHJlZmVyYWJseSwgYW4gb3B0aW1pemVkIGFwcHJvYWNoIGZvciBvdXIgc3BlY2lmaWMgaGFyZHdhcmUuIFdlIHdvdWxkbid0IHdhbnQgdG8gZ2V0IG91ciBzeXN0ZW1zIGludG8gYW4gdW5zdGFibGUgc3RhdGUgZnJvbSBhIG1lbW9yeSBpc3N1ZS5cblxuQnV0IHRoZW4gbXkgbWluZCBqdW1wcyB0byBhIHNwZWNpZmljIGZ1bmN0aW9uOiBgYXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWdgLiBXaHkgZG9lcyB0aGF0IGNvbWUgdG8gbWluZD8gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYXMgYSBjcml0aWNhbCByb2xlIHRvIHBsYXkgaW4gdGhlIGRyaXZlcidzIG9wZXJhdGlvbi4gUGVyaGFwcyB0aGF0IGZ1bmN0aW9uIGNvbnRhaW5zIG9uZSBvZiBvdXIgYmlnZ2VzdCBib3R0bGVuZWNrcy4gRG9lcyBpdCBpbnZvbHZlIHNvbWUgY3JpdGljYWwgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGNvbW1hbmQgYW5kIGV2ZW50IGRhdGE/IE1heWJlIHRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gaW4gdGhhdCBmdW5jdGlvbiwgdGhhdCB3ZSBhcmUgbWlzc2luZy4gRG9lcyBpdCByZWxhdGUgdG8gdGhlIFFNSSBpbnRlcmZhY2UgYW5kIHNvbWUgY3J1Y2lhbCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZpcm13YXJlPyBUaGlzIHNwZWNpZmljIGZ1bmN0aW9uIGhhcyBwcm9iYWJseSBjb21lIHRvIG1pbmQgYmVjYXVzZSBJIHJlY2FsbCBoYXZpbmcgdHJvdWJsZSB3aXRoIGl0IGluIHRoZSBwYXN0LiBJdCBtYXkgYWxzbyBwcm92aWRlIHNvbWUgbW9yZSBpbnNpZ2h0IGludG8gdGhlIHByb2JsZW0gYXQgaGFuZC4gV2UgbmVlZCB0byBsb29rIGRlZXBlciBpbnRvIHdoYXQgYGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnYCBpcyBkb2luZyBhbmQgc2VlIGhvdyBpdCBmaXRzIGluIHRvIHRoZSB3aWRlciBzY29wZSBvZiB0aGUgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTMxNCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MDUuNjU5MDcwNzE0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI1OTg5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz02NDM9c3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNjk4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6Njk5OnN0YXRpYyB2b2lkIGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy03MDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTQ4PXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE2NDE6XFx0YXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWcoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY0Mi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MDYuOTg1MDY1ODY0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NjMyNDIyMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfcGNpX2luaXRfcW1pX2NlX2NvbmZpZ2AgZnVuY3Rpb24uIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIFFNSSBjb25maWd1cmF0aW9uIGFuZCBsaWtlbHkgZXJyb3IgaGFuZGxpbmcgZm9yIHRoZSBQQ0kgaW50ZXJmYWNlLiBNeSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhlIENFIHByb2JhYmx5IHJlZmVycyB0byBcIkNvbW1hbmQgRW5naW5lXCIgb3Igc29tZXRoaW5nIHNpbWlsYXIgd2l0aGluIHRoZSBRdWFsY29tbSBjaGlwc2V0IGJlaW5nIHVzZWQgaGVyZS4gR2l2ZW4gdGhhdCBJIGFtIHdlbGwgdmVyc2VkIGluIHRoaXMgZmllbGQsIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGNvZGUsIGFsdGhvdWdoIHBvdGVudGlhbGx5IGRlbnNlIHdpdGggc3BlY2lmaWMgcmVnaXN0ZXIgd3JpdGVzIGFuZCBiaXQgbWFuaXB1bGF0aW9uLiBJdCdzIGtleSB0byBpZGVudGlmeSBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBpbnRlcmFjdHMgd2l0aCBvdGhlciBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4gV2hhdCBwb3dlciBzdGF0ZXMgZG9lcyBpdCBhc3N1bWUgdGhlIFBDSSBkZXZpY2UgaXMgaW4gYXQgdGhpcyBwb2ludD8gRG9lcyBpdCB1c2UgZGlyZWN0IHJlZ2lzdGVyIGFjY2VzcyBvciBkb2VzIGl0IGFic3RyYWN0IGFueSBvZiB0aGUgaGFyZHdhcmUgZGV0YWlscyB3aXRoIGFuIEFQST8gRG9lcyB0aGlzIGluaXRpYWxpemF0aW9uIGNvbmZpZ3VyZSB0aGUgY29tbWFuZCBlbmdpbmUgZm9yIGEgc3BlY2lmaWMgZmlybXdhcmUgdmVyc2lvbiBvciBkZXZpY2UgcmV2aXNpb24/IFRoZXNlIGFyZSBpbXBvcnRhbnQgcXVlc3Rpb25zLiBJIHdhbnQgdG8gbG9vayBjbG9zZWx5IGF0IGFueSBlcnJvciBoYW5kbGluZyAtIGFyZSB0aGVyZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBiZWluZyBjaGVja2VkLCBvciBkb2VzIGl0IHJlbHkgb24gZ2VuZXJpYyBlcnJvciBoYW5kbGluZyByb3V0aW5lcywgSSdsbCBuZWVkIHRvIHdhdGNoIG91dCBmb3IgdGhhdC4gSSBob3BlIGl0J3Mgd2VsbC1jb21tZW50ZWQgYmVjYXVzZSBnb29kIFFNSSBpbml0aWFsaXphdGlvbiByb3V0aW5lcyBhcmUgaGFyZCB0byB3cml0ZSBpbiBhIHdheSB3aGljaCBpcyBzaW11bHRhbmVvdXNseSBwZXJmb3JtYW50IGFuZCBtYWludGFpbmFibGUuIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCBpbiwgZXNwZWNpYWxseSBhbnl0aGluZyB0aGF0IG1pZ2h0IGJlIGNvbmZpZ3VyYXRpb24gb3IgZGV2aWNlLXNwZWNpZmljIHBhcmFtZXRlcnMuIExldCdzIHNlZSBob3cgdGhpcyBwbGF5cyBvdXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYwMjMsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNDoxMy41NDgzMTEyNzJaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjk5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjk5OlxcdHN0YXRpYyB2b2lkIGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDcwMDpcXHR7XFxuIDcwMTpcXHRcXHRzdHJ1Y3QgYXRoMTJrX3FtaV9jZV9jZmcgKmNmZyA9IFxcdTAwMjZhYi1cXHUwMDNlcW1pLmNlX2NmZztcXG4gNzAyOlxcdFxcbiA3MDM6XFx0XFx0c3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSA9IGF0aDEya19wY2lfcHJpdihhYik7XFxuIDcwNDpcXHRcXHRzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gYWJfcGNpLVxcdTAwM2VwZGV2LVxcdTAwM2VidXM7XFxuIDcwNTpcXHRcXG4gNzA2OlxcdFxcdGNmZy1cXHUwMDNldGd0X2NlID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNldGFyZ2V0X2NlX2NvbmZpZztcXG4gNzA3OlxcdFxcdGNmZy1cXHUwMDNldGd0X2NlX2xlbiA9IGFiLVxcdTAwM2Vod19wYXJhbXMtXFx1MDAzZXRhcmdldF9jZV9jb3VudDtcXG4gNzA4OlxcdFxcbiA3MDk6XFx0XFx0Y2ZnLVxcdTAwM2VzdmNfdG9fY2VfbWFwID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlc3ZjX3RvX2NlX21hcDtcXG4gNzEwOlxcdFxcdGNmZy1cXHUwMDNlc3ZjX3RvX2NlX21hcF9sZW4gPSBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VzdmNfdG9fY2VfbWFwX2xlbjtcXG4gNzExOlxcdFxcdGFiLVxcdTAwM2VxbWkuc2VydmljZV9pbnNfaWQgPSBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VxbWlfc2VydmljZV9pbnNfaWQ7XFxuIDcxMjpcXHRcXG4gNzEzOlxcdFxcdGlmIChhdGgxMmtfZndfZmVhdHVyZV9zdXBwb3J0ZWQoYWIsIEFUSDEyS19GV19GRUFUVVJFX01VTFRJX1FSVFJfSUQpKSB7XFxuIDcxNDpcXHRcXHRcXHRhYl9wY2ktXFx1MDAzZXFtaV9pbnN0YW5jZSA9XFxuIDcxNTpcXHRcXHRcXHRcXHR1MzJfZW5jb2RlX2JpdHMocGNpX2RvbWFpbl9ucihidXMpLCBET01BSU5fTlVNQkVSX01BU0spIHxcXG4gNzE2OlxcdFxcdFxcdFxcdHUzMl9lbmNvZGVfYml0cyhidXMtXFx1MDAzZW51bWJlciwgQlVTX05VTUJFUl9NQVNLKTtcXG4gNzE3OlxcdFxcdFxcdGFiLVxcdTAwM2VxbWkuc2VydmljZV9pbnNfaWQgKz0gYWJfcGNpLVxcdTAwM2VxbWlfaW5zdGFuY2U7XFxuIDcxODpcXHRcXHR9XFxuIDcxOTpcXHR9XFxuIDcyMDpcXHRcXG4gNzIxOlxcdHN0YXRpYyB2b2lkIGF0aDEya19wY2lfY2VfaXJxc19lbmFibGUoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gNzIyOlxcdHtcXG4gNzIzOlxcdFxcdGludCBpO1xcbiA3MjQ6XFx0XFxuIDcyNTpcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX0NFX0lSUV9FTkFCTEVELCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuIDcyNjpcXHRcXG4gNzI3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBhYi1cXHUwMDNlaHdfcGFyYW1zLVxcdTAwM2VjZV9jb3VudDsgaSsrKSB7XFxuIDcyODpcXHRcXHRcXHRpZiAoYXRoMTJrX2NlX2dldF9hdHRyX2ZsYWdzKGFiLCBpKSBcXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXFxuIDcyOTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNzMwOlxcdFxcdFxcdGF0aDEya19wY2lfY2VfaXJxX2VuYWJsZShhYiwgaSk7XFxuIDczMTpcXHRcXHR9XFxuIDczMjpcXHR9XFxuIDczMzpcXHRcXG4gNzM0OlxcdHN0YXRpYyB2b2lkIGF0aDEya19wY2lfbXNpX2NvbmZpZyhzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLCBib29sIGVuYWJsZSlcXG4gNzM1OlxcdHtcXG4gNzM2OlxcdFxcdHN0cnVjdCBwY2lfZGV2ICpkZXYgPSBhYl9wY2ktXFx1MDAzZXBkZXY7XFxuIDczNzpcXHRcXHR1MTYgY29udHJvbDtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0cGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBkZXYtXFx1MDAzZW1zaV9jYXAgKyBQQ0lfTVNJX0ZMQUdTLCBcXHUwMDI2Y29udHJvbCk7XFxuIDc0MDpcXHRcXG4gNzQxOlxcdFxcdGlmIChlbmFibGUpXFxuIDc0MjpcXHRcXHRcXHRjb250cm9sIHw9IFBDSV9NU0lfRkxBR1NfRU5BQkxFO1xcbiA3NDM6XFx0XFx0ZWxzZVxcbiA3NDQ6XFx0XFx0XFx0Y29udHJvbCBcXHUwMDI2PSB+UENJX01TSV9GTEFHU19FTkFCTEU7XFxuIDc0NTpcXHRcXG4gNzQ2OlxcdFxcdHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIGRldi1cXHUwMDNlbXNpX2NhcCArIFBDSV9NU0lfRkxBR1MsIGNvbnRyb2wpO1xcbiA3NDc6XFx0fVxcbiA3NDg6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA0OjEzLjU0ODQzMjM2MVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTU5MTQyNjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkFuYWx5emluZyB0aGUgYGF0aDEya19wY2lgIERyaXZlciBWdWxuZXJhYmlsaXR5IFJvdXRlKipcblxuT2theSwgc28gdGhlIHBhdGggdG8gZXhwbG9pdCB0aGUgYGF0aDEya19wY2lgIGRyaXZlciB2aWEgYW4gaW50ZXJydXB0IHJlcXVlc3QsIHNwZWNpZmljYWxseSB0aGUgYGF0aDEya19wY2lfY29uZmlnX2lycWAgZnVuY3Rpb24sIHNlZW1zIGhpZ2hseSBwbGF1c2libGUgaWYgU3l6a2FsbGVyIGNhbiBpbmplY3QgYSBQQ0kgZGV2aWNlIHdpdGggYSBzcGVjaWZpYyB2ZW5kb3IgYW5kIGRldmljZSBJRC4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGJlY29tZXMgd2hldGhlciB0aGUgcHJvYmUgZnVuY3Rpb24sIGBhdGgxMmtfcGNpX3Byb2JlYCwgcGVyZm9ybXMgYW55IGhhcmR3YXJlIHJlZ2lzdGVyIHJlYWRzIG9yIG90aGVyIGNoZWNrcyB0aGF0IHdvdWxkIGZhaWwgaWYgaXQncyBub3QgYWN0dWFsbHkgYSAqcmVhbCogZGV2aWNlLiBJZiBpdCdzIHRvbyBhZ2dyZXNzaXZlIGluIGl0cyB2YWxpZGF0aW9uLCB3ZSB3b24ndCBnZXQgZmFyLiBSaWdodCwgYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMgSSBzaG91bGQgcHJvYmFibHkgaW52ZXN0aWdhdGUgYGF0aDEya19wY2lfY2xhaW1gLiBJdCdsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBoYW5kbGVzIGRldmljZSBjbGFpbWluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbiwgc2luY2UgdGhhdCdzIGEgY29tbW9uIHBvaW50IG9mIGZhaWx1cmUgZm9yIHRoaXMga2luZCBvZiBhdHRhY2suIEl0J2xsIGFsc28gbGlrZWx5IGdpdmUgbWUgbW9yZSBjb250ZXh0IGZvciB3aGF0IGhhcHBlbnMgYmVmb3JlIGFuZCBwb3RlbnRpYWxseSBhZnRlciB0aGUgcHJvYmluZyBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMyMSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MjEuNTA3NTc3MzY0WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTg1Nzk4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX2NsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz04MjE9c3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19tc2lfZGF0YShzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy04MzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzo4NDA6c3RhdGljIGludCBhdGgxMmtfcGNpX2NsYWltKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksIHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtODQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTU0OD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTcyOlxcdHJldCA9IGF0aDEya19wY2lfY2xhaW0oYWJfcGNpLCBwZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NzMtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNDoyMS41NTk0NDIzNjdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0MTc0NTg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHdoYXQncyBnb2luZyB0aHJvdWdoIG15IG1pbmQgYXMgSSBhcHByb2FjaCB0aGUgYGF0aDEya19wY2lfY2xhaW1gIGZ1bmN0aW9uLCBzdW1tYXJpemVkIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIEknbSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gYGF0aDEya19wY2lfY2xhaW1gKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBhdGgxMmtfcGNpX2NsYWltYC4gSW1tZWRpYXRlbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyAqZG9pbmcqIGluIHRoZSBncmFuZCBzY2hlbWUgb2YgdGhlIGF0aDEyayBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIFBDSS4gTXkgaW1tZWRpYXRlIGh1bmNoIGlzIHRoYXQgaXQncyByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgY2xhaW1pbmcgb2YgdGhlIFBDSSBkZXZpY2UsIHdoaWNoIGFsaWducyB3aXRoIHN0YW5kYXJkIFBDSSBkcml2ZXIgb3BlcmF0aW9uLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHJlc291cmNlcyBhcmUgYmVpbmcgY2hlY2tlZCwgYW55IGluaXRpYWxpemF0aW9uIHN0ZXBzLCBhbmQgdGhlIGdlbmVyYWwgZmxvdyBvZiB3aGF0IHRoaXMgY2xhaW0gZG9lcyBhbmQgZW5zdXJlcy5cblxuSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTogcmVzb3VyY2UgYWxsb2NhdGlvbiwgZXJyb3IgaGFuZGxpbmcsIGNoZWNrcyBmb3IgZXhpc3RpbmcgZGV2aWNlIGNsYWltcyAoY3J1Y2lhbCB0byBhdm9pZCBjb25mbGljdHMpLCBhbmQgcG90ZW50aWFsbHkgYW55IGRldmljZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiB0aGF0J3MgcGVyZm9ybWVkIGhlcmUgYmVmb3JlIGhhbmRpbmcgb2ZmIHRvIHRoZSBjb3JlIGRyaXZlci4gSSBleHBlY3QgYSBjYXJlZnVsIGRhbmNlIHRvIGVuc3VyZSB0aGUgaGFyZHdhcmUgaXMgYWNjZXNzaWJsZSBhbmQgcmVhZHkgdG8gZ28gYmVmb3JlIHdlIHN0YXJ0IGFjdHVhbGx5IHVzaW5nIGl0IGZvciB3aXJlbGVzcyBjb21tdW5pY2F0aW9uLiBMZXQncyBzZWUgaWYgbXkgaW5pdGlhbCBhc3N1bXB0aW9ucyBob2xkIHRydWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MDEwLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MjUuNTAxMTkxNTg2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDg0MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDg0MDpcXHRzdGF0aWMgaW50IGF0aDEya19wY2lfY2xhaW0oc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSwgc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIDg0MTpcXHR7XFxuIDg0MjpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gYWJfcGNpLVxcdTAwM2VhYjtcXG4gODQzOlxcdFxcdHUxNiBkZXZpY2VfaWQ7XFxuIDg0NDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4gODQ1OlxcdFxcbiA4NDY6XFx0XFx0cGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0RFVklDRV9JRCwgXFx1MDAyNmRldmljZV9pZCk7XFxuIDg0NzpcXHRcXHRpZiAoZGV2aWNlX2lkICE9IGFiX3BjaS1cXHUwMDNlZGV2X2lkKSAge1xcbiA4NDg6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcInBjaSBkZXZpY2UgaWQgbWlzbWF0Y2g6IDB4JXggMHgleFxcXFxuXFxcIixcXG4gODQ5OlxcdFxcdFxcdFxcdCAgIGRldmljZV9pZCwgYWJfcGNpLVxcdTAwM2VkZXZfaWQpO1xcbiA4NTA6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gODUxOlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA4NTI6XFx0XFx0fVxcbiA4NTM6XFx0XFxuIDg1NDpcXHRcXHRyZXQgPSBwY2lfYXNzaWduX3Jlc291cmNlKHBkZXYsIEFUSDEyS19QQ0lfQkFSX05VTSk7XFxuIDg1NTpcXHRcXHRpZiAocmV0KSB7XFxuIDg1NjpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFzc2lnbiBwY2kgcmVzb3VyY2U6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiA4NTc6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDg1ODpcXHRcXHR9XFxuIDg1OTpcXHRcXG4gODYwOlxcdFxcdHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbiA4NjE6XFx0XFx0aWYgKHJldCkge1xcbiA4NjI6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBlbmFibGUgcGNpIGRldmljZTogJWRcXFxcblxcXCIsIHJldCk7XFxuIDg2MzpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODY0OlxcdFxcdH1cXG4gODY1OlxcdFxcbiA4NjY6XFx0XFx0cmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIEFUSDEyS19QQ0lfQkFSX05VTSwgXFxcImF0aDEya19wY2lcXFwiKTtcXG4gODY3OlxcdFxcdGlmIChyZXQpIHtcXG4gODY4OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVxdWVzdCBwY2kgcmVnaW9uOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gODY5OlxcdFxcdFxcdGdvdG8gZGlzYWJsZV9kZXZpY2U7XFxuIDg3MDpcXHRcXHR9XFxuIDg3MTpcXHRcXG4gODcyOlxcdFxcdGFiX3BjaS1cXHUwMDNlZG1hX21hc2sgPSBETUFfQklUX01BU0soQVRIMTJLX1BDSV9ETUFfTUFTSyk7XFxuIDg3MzpcXHRcXHRkbWFfc2V0X21hc2soXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgYWJfcGNpLVxcdTAwM2VkbWFfbWFzayk7XFxuIDg3NDpcXHRcXHRkbWFfc2V0X2NvaGVyZW50X21hc2soXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7XFxuIDg3NTpcXHRcXG4gODc2OlxcdFxcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xcbiA4Nzc6XFx0XFxuIDg3ODpcXHRcXHRhYi1cXHUwMDNlbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgQVRIMTJLX1BDSV9CQVJfTlVNKTtcXG4gODc5OlxcdFxcdGFiLVxcdTAwM2VtZW0gPSBwY2lfaW9tYXAocGRldiwgQVRIMTJLX1BDSV9CQVJfTlVNLCAwKTtcXG4gODgwOlxcdFxcdGlmICghYWItXFx1MDAzZW1lbSkge1xcbiA4ODE6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBtYXAgcGNpIGJhciAlZFxcXFxuXFxcIiwgQVRIMTJLX1BDSV9CQVJfTlVNKTtcXG4gODgyOlxcdFxcdFxcdHJldCA9IC1FSU87XFxuIDg4MzpcXHRcXHRcXHRnb3RvIHJlbGVhc2VfcmVnaW9uO1xcbiA4ODQ6XFx0XFx0fVxcbiA4ODU6XFx0XFxuIDg4NjpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsIFxcXCJib290IHBjaV9tZW0gMHglcFxcXFxuXFxcIiwgYWItXFx1MDAzZW1lbSk7XFxuIDg4NzpcXHRcXHRyZXR1cm4gMDtcXG4gODg4OlxcdFxcbiA4ODk6XFx0cmVsZWFzZV9yZWdpb246XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA0OjI1LjUwMTMwOTkyNloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTE1MjIxNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBDSSBSZXNvdXJjZSBBbGxvY2F0aW9uIGFuZCBQcm9iZSBGdW5jdGlvbiBFeGFtaW5hdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQncyBiYXNpY2FsbHkgZG9pbmcgdGhlIHVzdWFsIFBDSSByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBtYXBwaW5nIOKAkyBub3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnksIHJpZ2h0PyBTeXprYWxsZXIncyBQQ0kgZnV6emVyIHNob3VsZCBiZSBhYmxlIHRvIGhhbmRsZSB0aGlzIHdpdGhvdXQgYW55IHJlYWwgaXNzdWVzLiBCdXQsIGhhbmcgb24uLi4gbGV0J3Mgbm90IGdldCBhaGVhZCBvZiBvdXJzZWx2ZXMuIEkgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLiBXaGF0IGFib3V0IHRoZSBgYWJfcGNpLVx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVx1MDAzZXByb2JlKHBkZXYsIHBjaV9kZXYpYCBjYWxsPyBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgbWlnaHQgYmUuXG5cblNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIG9mIHRoaXMgZm9yIFdpZmk3IGRldmljZXMgYW5kIHRoZSBhc3NvY2lhdGVkIGRyaXZlciB3aGljaCBzaG91bGQgdXNlIHRoZSBgYXRoMTJrX3dpZmk3X3BjaV9wcm9iZWAgZnVuY3Rpb24uIEJldHRlciBjaGVjayB0aGF0IG9uZSBvdXQuIFRoYXQncyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgdXN1YWxseSBoaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyNDIsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA0OjMxLjYxNjUzNDUzN1oiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk3MjgwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3dpZmk3X3BjaV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9ODE9dm9pZCBhdGgxMmtfd2lmaTdfcGNpX3JlYWRfaHdfdmVyc2lvbihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy05MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjkxOnN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTkyLVxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE4OD1zdGF0aWMgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyIGF0aDEya193aWZpN19wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0xOTAtXFx0LmlkX3RhYmxlID0gYXRoMTJrX3dpZmk3X3BjaV9pZF90YWJsZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjE5MTpcXHQub3BzLnByb2JlID0gYXRoMTJrX3dpZmk3X3BjaV9wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jLTE5Mi1cXHQucmVnX2Jhc2UgPSBcXHUwMDI2YXRoMTJrX3dpZmk3X3JlZ19iYXNlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNDozMS42NjYyNjgyNjFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc3MzU0OTM1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIGBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlYC5cblxuKipBbmFseXppbmcgdGhlIGF0aDEya193aWZpN19wY2lfcHJvYmUgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gbG9va2luZyBhdCB0aGlzIGBhdGgxMmtfd2lmaTdfcGNpX3Byb2JlYCBmdW5jdGlvbiBub3cuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIGF0aDEyayBkcml2ZXIgZnJhbWV3b3JrLiBDbGVhcmx5LCBpdCdzIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24sIHNvIGl0J3MgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBhbmQgc2V0dXAgb2YgdGhlIGF0aDEyayBkcml2ZXIgd2hlbiBhIGNvbXBhdGlibGUgV2lGaSA3IFBDSSBkZXZpY2UgaXMgZGV0ZWN0ZWQuIEkgZXhwZWN0IHRvIHNlZSB0aGUgdHlwaWNhbCBQQ0kgZGV2aWNlIGlkZW50aWZpY2F0aW9uIGNoZWNrcyDigJMgbG9va2luZyBmb3Igc3BlY2lmaWMgVmVuZG9yIElEcyBhbmQgRGV2aWNlIElEcywgbWFraW5nIHN1cmUgdGhlIGhhcmR3YXJlIGlzIGFjdHVhbGx5IHdoYXQgd2UgdGhpbmsgaXQgaXMuXG5cbk5leHQsIEknbGwgYmUgbG9va2luZyBmb3IgcmVzb3VyY2UgYWxsb2NhdGlvbi4gVGhpcyBmdW5jdGlvbiBsaWtlbHkgc3RhcnRzIGJ5IHJlcXVlc3RpbmcgbmVjZXNzYXJ5IHJlc291cmNlcyBmcm9tIHRoZSBrZXJuZWw6IG1lbW9yeSByZWdpb25zIGZvciB0aGUgZGV2aWNlJ3MgcmVnaXN0ZXJzLCBpbnRlcnJ1cHQgbGluZXMsIERNQSBjaGFubmVscywgYW5kIHBvc3NpYmx5IG90aGVyIGNyaXRpY2FsIHJlc291cmNlcy4gSeKAmWxsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIGhlcmUsIGVuc3VyaW5nIHRoYXQgaXQgZ3JhY2VmdWxseSBoYW5kbGVzIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbHVyZXMuIFdlIGRvbid0IHdhbnQgdGhlIGRyaXZlciB0byBjcmFzaCBiZWNhdXNlIGl0IGNvdWxkbid0IGdyYWIgdGhlIHJlc291cmNlcyBpdCBuZWVkcy5cblxuSSdtIGFudGljaXBhdGluZyB0aGF0IGFmdGVyIHJlc291cmNlIGFsbG9jYXRpb24sIHRoaXMgZnVuY3Rpb24gd2lsbCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZS4gVGhpcyBpbmNsdWRlcyBzZXR0aW5nIHVwIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgZW5hYmxpbmcgdGhlIGRldmljZSwgYW5kIHBvdGVudGlhbGx5IHJlc2V0dGluZyBpdCBpbnRvIGEga25vd24gc3RhdGUuIEl0J3MgbGlrZWx5IHdlJ2xsIGJlIGRlYWxpbmcgd2l0aCB2YXJpb3VzIFBDSSBjYXBhYmlsaXRpZXMgdG9vLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQgZGV2aWNlIGZlYXR1cmVzIHNwZWNpZmljIHRvIFdpRmkgNy4gVGhpcyBpcyB3aGVyZSB0aG9zZSBjYXBhYmlsaXRpZXMgd291bGQgYmUgZGV0ZWN0ZWQgYW5kIG1hbmFnZWQuXG5cblRoZW4sIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGNydWNpYWwgc3RlcCBvZiBjcmVhdGluZyB0aGUgbWFpbiBkZXZpY2Ugc3RydWN0dXJlIChsaWtlbHkgYW4gYGF0aDEya19iYXNlYCBzdHJ1Y3QsIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB0aGF0IGVuY2Fwc3VsYXRlcyBhbGwgdGhlIGRldmljZS1zcGVjaWZpYyBkYXRhIGFuZCBzdGF0ZSkuIFdpdGhpbiB0aGF0IGRldmljZSBzdHJ1Y3R1cmUsIHRoZSBmdW5jdGlvbiB3aWxsIG5lZWQgdG8gcG9wdWxhdGUgdGhlIGRhdGEuIFRoaXMgd2lsbCBpbmNsdWRlIGlkZW50aWZ5aW5nIHRoZSBkZXZpY2UgYW5kIHNldHRpbmcgdXAgdGhlIGRpZmZlcmVudCByZWdpc3RlcnMuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBzZXR0aW5nIHVwIHZhcmlvdXMgc3ViLWRyaXZlcnMgb3IgbW9kdWxlcyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgV2lGaSA3IGhhcmR3YXJlLlxuXG5GaW5hbGx5LCB0aGUgZnVuY3Rpb24gd2lsbCBhbG1vc3QgY2VydGFpbmx5IHJlZ2lzdGVyIHRoZSBkZXZpY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgc3Vic3lzdGVtcyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCAobGlrZWx5IHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBzdGFjaykuIEl0J2xsIG5lZWQgdG8gbGluayB0aGUgbmV3IGRldmljZSB0byB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBzbyBpdOKAmXMgYXZhaWxhYmxlIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBJdCB3aWxsIGxpa2VseSB0aGVuIGluaXRpYWxpemUgdGhlIHdpcmVsZXNzIGludGVyZmFjZSBhbmQgYWN0aXZhdGUgaXQsIG1ha2luZyBpdCByZWFkeSB0byBiZSB1c2VkLiBJIHdpbGwgbG9vayBjYXJlZnVsbHkgYXQgdGhlIHRlYXJkb3duIHByb2Nlc3MgZm9yIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCwgbWFraW5nIHN1cmUgYWxsIGFsbG9jYXRlZCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIHByb3Blcmx5IHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkIG9yIHRoZXJlJ3MgYW4gZXJyb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTIyLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MzYuNDM5ODIxMDQyWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDkxOlxcdHN0YXRpYyBpbnQgYXRoMTJrX3dpZmk3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4gIDkyOlxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuICA5MzpcXHR7XFxuICA5NDpcXHRcXHR1MzIgc29jX2h3X3ZlcnNpb25fbWFqb3IsIHNvY19od192ZXJzaW9uX21pbm9yO1xcbiAgOTU6XFx0XFx0c3RydWN0IGF0aDEya19wY2kgKmFiX3BjaTtcXG4gIDk2OlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XFxuICA5NzpcXHRcXHRpbnQgcmV0O1xcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRhYiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcXG4gMTAwOlxcdFxcdGlmICghYWIpXFxuIDEwMTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0YWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcXG4gMTA0OlxcdFxcdGlmICghYWJfcGNpKVxcbiAxMDU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDEwNjpcXHRcXG4gMTA3OlxcdFxcdHN3aXRjaCAocGNpX2Rldi1cXHUwMDNlZGV2aWNlKSB7XFxuIDEwODpcXHRcXHRjYXNlIFFDTjkyNzRfREVWSUNFX0lEOlxcbiAxMDk6XFx0XFx0XFx0YWJfcGNpLVxcdTAwM2Vtc2lfY29uZmlnID0gXFx1MDAyNmF0aDEya193aWZpN19tc2lfY29uZmlnWzBdO1xcbiAxMTA6XFx0XFx0XFx0YWItXFx1MDAzZXN0YXRpY193aW5kb3dfbWFwID0gdHJ1ZTtcXG4gMTExOlxcdFxcdFxcdGFiX3BjaS1cXHUwMDNlcGNpX29wcyA9IFxcdTAwMjZhdGgxMmtfd2lmaTdfcGNpX29wc19xY245Mjc0O1xcbiAxMTI6XFx0XFx0XFx0LypcXG4gMTEzOlxcdFxcdFxcdCAqIGluaXQgd2luZG93IHJlZyBhZGRyIGJlZm9yZSByZWFkaW5nIGhhcmR3YXJlIHZlcnNpb25cXG4gMTE0OlxcdFxcdFxcdCAqIGFzIGl0IHdpbGwgYmUgdXNlZCB0aGVyZVxcbiAxMTU6XFx0XFx0XFx0ICovXFxuIDExNjpcXHRcXHRcXHRhYl9wY2ktXFx1MDAzZXdpbmRvd19yZWdfYWRkciA9IFdJTkRPV19SRUdfQUREUkVTUztcXG4gMTE3OlxcdFxcdFxcdGF0aDEya193aWZpN19wY2lfcmVhZF9od192ZXJzaW9uKGFiLCBcXHUwMDI2c29jX2h3X3ZlcnNpb25fbWFqb3IsXFxuIDExODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnNvY19od192ZXJzaW9uX21pbm9yKTtcXG4gMTE5OlxcdFxcdFxcdGFiLVxcdTAwM2V0YXJnZXRfbWVtX21vZGUgPSBhdGgxMmtfY29yZV9nZXRfbWVtb3J5X21vZGUoYWIpO1xcbiAxMjA6XFx0XFx0XFx0c3dpdGNoIChzb2NfaHdfdmVyc2lvbl9tYWpvcikge1xcbiAxMjE6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUENJX1c3X1NPQ19IV19WRVJTSU9OXzI6XFxuIDEyMjpcXHRcXHRcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gQVRIMTJLX0hXX1FDTjkyNzRfSFcyMDtcXG4gMTIzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMjQ6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUENJX1c3X1NPQ19IV19WRVJTSU9OXzE6XFxuIDEyNTpcXHRcXHRcXHRcXHRhYi1cXHUwMDNlaHdfcmV2ID0gQVRIMTJLX0hXX1FDTjkyNzRfSFcxMDtcXG4gMTI2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxMjc6XFx0XFx0XFx0ZGVmYXVsdDpcXG4gMTI4OlxcdFxcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gMTI5OlxcdFxcdFxcdFxcdFxcdFxcXCJVbmtub3duIGhhcmR3YXJlIHZlcnNpb24gZm91bmQgZm9yIFFDTjkyNzQ6IDB4JXhcXFxcblxcXCIsXFxuIDEzMDpcXHRcXHRcXHRcXHRcXHRzb2NfaHdfdmVyc2lvbl9tYWpvcik7XFxuIDEzMTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIDEzMjpcXHRcXHRcXHR9XFxuIDEzMzpcXHRcXHRcXHRicmVhaztcXG4gMTM0OlxcdFxcdGNhc2UgV0NONzg1MF9ERVZJQ0VfSUQ6XFxuIDEzNTpcXHRcXHRcXHRhYi1cXHUwMDNlaWQuYmRmX3NlYXJjaCA9IEFUSDEyS19CREZfU0VBUkNIX0JVU19BTkRfQk9BUkQ7XFxuIDEzNjpcXHRcXHRcXHRhYl9wY2ktXFx1MDAzZW1zaV9jb25maWcgPSBcXHUwMDI2YXRoMTJrX3dpZmk3X21zaV9jb25maWdbMF07XFxuIDEzNzpcXHRcXHRcXHRhYi1cXHUwMDNlc3RhdGljX3dpbmRvd19tYXAgPSBmYWxzZTtcXG4gMTM4OlxcdFxcdFxcdGFiX3BjaS1cXHUwMDNlcGNpX29wcyA9IFxcdTAwMjZhdGgxMmtfd2lmaTdfcGNpX29wc193Y243ODUwO1xcbiAxMzk6XFx0XFx0XFx0LypcXG4gMTQwOlxcdFxcdFxcdCAqIGluaXQgd2luZG93IHJlZyBhZGRyIGJlZm9yZSByZWFkaW5nIGhhcmR3YXJlIHZlcnNpb25cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDQ6MzYuNDM5OTI0ODIyWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDQwMDAwMzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgVmVyc2lvbiBSZWFkKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gVGhpcyBgYXRoMTJrX3dpZmk3X3BjaV9yZWFkX2h3X3ZlcnNpb25gIGZ1bmN0aW9uLi4uIHRoYXQncyBhIGhhcmR3YXJlIHJlYWQsIGlzbid0IGl0PyBSaWdodCwgaXQncyBwdWxsaW5nIGRpcmVjdGx5IGZyb20gdGhlIHNpbGljb24uIEFuZCBpZiBpdCBlbmNvdW50ZXJzIGEgaGFyZHdhcmUgdmVyc2lvbiBpdCBkb2Vzbid0IHJlY29nbml6ZSDigJMgYW4gdW5rbm93biBvbmUsIGxldCdzIHNheSDigJMgaXQncyBnb2luZyB0byB0aHJvdyBhIGAtRU9QTk9UU1VQUGAgZXJyb3IuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgc3RhbmRhcmQgd2F5IHRvIHNpZ25hbCBcIm5vdCBzdXBwb3J0ZWQuXCIgU28sIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UncmUgY2xlYXIgb24gaG93IHRoaXMgYGF0aDEya193aWZpN19wY2lfcmVhZF9od192ZXJzaW9uYCBmdW5jdGlvbiBvcGVyYXRlcy4gV2UgbmVlZCB0byBjaGVjayBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHZlcmlmeSB0aGlzIHNwZWNpZmljIGJlaGF2aW9yLiBUaGlzIGlzIGNydWNpYWwgZm9yIGludGVycHJldGluZyBhbnkgc3Vic2VxdWVudCBlcnJvciBjb2RlcyBhbmQgdW5kZXJzdGFuZGluZyB0aGUgcG90ZW50aWFsIHJvb3QgY2F1c2Ugb2YgYW55IHByb2JsZW1zIHdlJ3JlIHNlZWluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0NTIsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA0OjQ4LjQ3OTkyODQyNFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MTpcXHR2b2lkIGF0aDEya193aWZpN19wY2lfcmVhZF9od192ZXJzaW9uKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsXFxuICA4MjpcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgKm1ham9yLCB1MzIgKm1pbm9yKVxcbiAgODM6XFx0e1xcbiAgODQ6XFx0XFx0dTMyIHNvY19od192ZXJzaW9uO1xcbiAgODU6XFx0XFxuICA4NjpcXHRcXHRzb2NfaHdfdmVyc2lvbiA9IGF0aDEya19wY2lfcmVhZDMyKGFiLCBUQ1NSX1NPQ19IV19WRVJTSU9OKTtcXG4gIDg3OlxcdFxcdCptYWpvciA9IHUzMl9nZXRfYml0cyhzb2NfaHdfdmVyc2lvbiwgVENTUl9TT0NfSFdfVkVSU0lPTl9NQUpPUl9NQVNLKTtcXG4gIDg4OlxcdFxcdCptaW5vciA9IHUzMl9nZXRfYml0cyhzb2NfaHdfdmVyc2lvbiwgVENTUl9TT0NfSFdfVkVSU0lPTl9NSU5PUl9NQVNLKTtcXG4gIDg5OlxcdH1cXG4gIDkwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNDo0OC40ODAwNjA4ODRaIiwiU2VxIjo1MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1NTc5NDc2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nIEFuYWx5c2lzOiBgYXRoMTJrYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyBJIG5vdGljZSBpcyBpdCdzIHRvdWNoaW5nIGBUQ1NSX1NPQ19IV19WRVJTSU9OYC4gVGhlIGNvZGUgY2hlY2tzIHRoaXMgdmVyc2lvbiBudW1iZXIgYW5kIGlmIGl0J3MgYEFUSDEyS19QQ0lfVzdfU09DX0hXX1ZFUlNJT05fMWAgb3IgYEFUSDEyS19QQ0lfVzdfU09DX0hXX1ZFUlNJT05fMmAsIGl0IHByb2NlZWRzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHdpdGggc3l6a2FsbGVyJ3MgUENJIGZ1enplciBwcm92aWRpbmcgcmFuZG9tIEJBUiBtZW1vcnksIHRoYXQgY2hlY2sgaXMgdHJpdmlhbCB0byBieXBhc3MuIEFueSB2YWx1ZSBpcyBwb3NzaWJsZSwgYW5kIHRoZSByYW5kb20gbmF0dXJlIG9mIHN5emthbGxlciBjb3VsZCBkZWZpbml0ZWx5IHRyaWdnZXIgdGhlc2UgY29uZGl0aW9ucy5cblxuVGhlIHByb21wdCwgdGhvdWdoLCB0aHJvd3MgYSBjdXJ2ZWJhbGwuIEl0J3MgYXNraW5nIG1lIHRvIGNvbnNpZGVyIGlmIHRoZSBwYXRjaCBpcyBpbiBhICp2ZW5kb3Itc3BlY2lmaWMqIFBDSWUgZHJpdmVyLCBwYXJ0aWN1bGFybHkgZm9yIHRoaW5ncyBsaWtlIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVcywgd2hpY2ggbm9ybWFsbHkgbmVlZCAqcGh5c2ljYWwqIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLCBhbmQgdGhlcmVmb3JlIG5vdCB3b3J0aCBmdXp6aW5nLiBUaGUgYGF0aDEya2AgZHJpdmVyIGlzIGZvciBRdWFsY29tbSBXaS1GaSA3LCBhbmQgdGhhdCAqaXMqIHZlbmRvci1zcGVjaWZpYyBQQ0llLiBTbyB0aGF0IHJhaXNlcyBhIGZsYWcuXG5cbkhvd2V2ZXIsIHRoZSBwcm9tcHQgKnNwZWNpZmljYWxseSogbGlzdHMgdGhvc2Ugb3RoZXIgZGV2aWNlIHR5cGVzIGFuZCBkb2Vzbid0IG1lbnRpb24gV2ktRmkuIFRoYXQncyBhIGtleSBkaXN0aW5jdGlvbi4gQnV0IHRoZW4gSSByZWFsaXplIFdpLUZpIGRyaXZlcnMgbGlrZSBgYXRoMTJrYCBhcmUgYWxzbyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIGFuZCB0aGVyZWZvcmUgcHJvYmFibHkgZmFsbCB1bmRlciB0aGUgc2FtZSBjb25zdHJhaW50cy5cblxuVGhlIGNydWNpYWwgY2x1ZSBjb21lcyBmcm9tIHRoZSBjb21taXQgYXV0aG9yOiBgc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VgLiBUaGlzIHRlbGxzIG1lIHRoYXQgc3l6a2FsbGVyICpkaWQqIGZpbmQgYSBidWcgaGVyZSwgYW5kIHRoaXMgcGF0Y2ggaXMgdGhlIGZpeC4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgZ2VuZXJhdGVkIHRoaXMgcGF0Y2ggKnByb3ZlcyogdGhhdCBpdCBjYW4gcmVhY2ggdGhpcyBjb2RlIHBhdGguIFRoaXMgYWxzbyBtZWFucyB0aGlzIHBhdGNoIGlzIHByb2JhYmx5IGJlaW5nIHRlc3RlZCBieSBzeXprYWxsZXIuXG5cbk5vdywgdGhlIHByb21wdCBzYXlzIHRoZSBjaGFuZ2VzIGFyZSAqYWxyZWFkeSogYXBwbGllZCBhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIHNheXMgaXQncyBhIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XCIsIHdoaWNoIG1lYW5zIHN5emthbGxlciBpcyAqdGVzdGluZyogdGhpcyBwYXRjaC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgZXhjbHVkZXMgdGhpbmdzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJcyBgYXRoMTJrYCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VPyBOby4gRG9lcyBpdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHM/IFllcywgbm9ybWFsbHkgaXQgZG9lcy5cblxuQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3JpdGljYWwgcG9pbnQsIHN5emthbGxlciAqaGFzKiBpdHMgUENJIGZ1enplciwgd2hpY2ggaW5qZWN0cyBQQ0kgZGV2aWNlcyBhbmQgZnV6emVzIHRoZWlyIE1NSU8gc3BhY2UuIFRoZSBwcm9tcHQgaXMgYXNraW5nIGlmIHRoZSBwYXRjaCBpcyBpbiBhbiBlbnZpcm9ubWVudCAqaW1wb3NzaWJsZSogdG8gcmVhY2guIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgKmlzKiBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS5cblxuVGhlIHByb21wdCBleHBsaWNpdGx5IGV4Y2x1ZGVzIHRoaW5ncyBsaWtlIGBtbHhzd2AsIGBwZHNfY29yZWAsIGBxZWRgLCBgaW9uaWNgLCBhbmQgYGFtZGdwdWAuIFdoeT8gVGhhdCdzIGJlY2F1c2UgdGhlIFBDSSBmdXp6ZXIgaXMgdXN1YWxseSBzaGFsbG93LCBvZnRlbiBvbmx5IHJlYWNoaW5nIHRoZSBwcm9iZSBmdW5jdGlvbiBhbmQgbWF5YmUgc29tZSBpbml0IGZ1bmN0aW9ucy4gSXQgKnJhcmVseSogZ2V0cyBkZWVwIGludG8gdGhlIGNvcmUgbG9naWMgb2YgY29tcGxleCBkZXZpY2VzLiBIb3dldmVyLCB0aGlzIHBhdGNoIG1vZGlmaWVzIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBhbmQgYGF0aDEya19wY2lfY29uZmlnX2lycWAsIHdoaWNoIGFyZSAqY2FsbGVkIGR1cmluZyBwcm9iZSouIFRoZSBQQ0kgZnV6emVyIGNhbiByZWFjaCB0aGVzZSwgYW5kIGl0ICpkaWQqIHJlYWNoIHRoZW0sIG90aGVyd2lzZSwgdGhlcmUgd291bGQgYmUgbm8gYnVnLiBUaGUgcGF0Y2ggaXMgcHJvYmFibHkgZml4aW5nIGFuIGVycm9yIGhhbmRsaW5nIGlzc3VlIHdpdGhpbiB0aGUgcHJvYmUgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhlIFBDSSBmdXp6ZXIgaXMgZGVzaWduZWQgdG8gZGlzY292ZXIuXG5cblRoZXJlZm9yZSwgaXQgbG9va3MgbGlrZSBpdCAqaXMqIHdvcnRoIGZ1enppbmcuIE5vdywgbGV0IG1lIHJldmlldyB0aGUgcGF0Y2ggaW4gZGV0YWlsIHRvIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTYxLCJPdXRwdXRUb2tlbnMiOjUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODc5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDU6MDIuMDM4MDExNTA4WiIsIlNlcSI6NTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzg0NjgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz01MjM9c3RhdGljIGlycXJldHVybl90IGF0aDEya19wY2lfZXh0X2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNTQ0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6NTQ1OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtNTQ2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9NjQzPXN0YXRpYyBpbnQgYXRoMTJrX3BjaV9jb25maWdfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY4OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjY5MDpcXHRyZXQgPSBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTY5MS1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA1OjAyLjA5NTg2NTE3M1oiLCJTZXEiOjU1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTYzNDk1ODM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIFBhdGNoIGluIHRoZSBgYXRoMTJrYCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AuIEl0IHNlZW1zIGxpa2UgYSByZWxhdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBidWcgZml4OyBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgZG91YmxlLWZyZWUgc2l0dWF0aW9uIHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIGV4dGVuZGVkIGludGVycnVwdCBjb25maWd1cmF0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgd2FzIG1pc3Npbmcgc29tZSBgZnJlZV9pcnFgIGNhbGxzIGFuZCBoYWQgaW5jb3JyZWN0IGBmcmVlX25ldGRldmAgY2FsbHMgaW4gdGhlIGVycm9yIHBhdGggd2hlbiBgcmVxdWVzdF9pcnFgIGZhaWxlZC4gVGhlIHBhdGNoIGxvb2tzIGxpa2UgaXQncyBiZWVuIHVwZGF0ZWQgdG8gcHJvcGVybHkgY2xlYW4gdXAgcmVzb3VyY2VzIGluIHRoZSBldmVudCBvZiBhbiBgaXJxYCBhbGxvY2F0aW9uIGZhaWx1cmUgYnkgbWFraW5nIHN1cmUgdGhhdCBhbGwgYWNxdWlyZWQgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCB3aGVuIGVycm9ycyBvY2N1ci4gSSd2ZSByZW9yZGVyZWQgdGhlIGBmcmVlX25ldGRldmAgY2FsbHMgYW5kIHJlbW92ZWQgdGhlIHJlZHVuZGFudCBpdGVyYXRpb24uXG5cbk15IG1haW4gY29uY2VybiBpcywgb2YgY291cnNlLCB0aGUgcG90ZW50aWFsIGZvciByZWdyZXNzaW9uLiBFcnJvciBwYXRocyBhcmUgbm90b3Jpb3VzIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgaXNzdWVzLCBzbyB3aGlsZSB0aGUgcGF0Y2ggKmxvb2tzKiBjb3JyZWN0IGF0IGZpcnN0IGdsYW5jZSwgSSBuZWVkIHRvIHZlcmlmeSBpdHMgY29ycmVjdG5lc3MuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG9uIGZ1enppbmcgdGhpcywgZ2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZXJyb3IgY29uZGl0aW9uLiBUaGUgZmFjdCB0aGF0IHRoZSBQQ0kgZnV6emVyIGNhbiB0cmlnZ2VyIHRoaXMsIGV2ZW4gcmFuZG9tbHkgZHVlIHRvIGZhdWx0IGluamVjdGlvbiwgaW5jcmVhc2VzIG15IGRlc2lyZSBmb3IgZnV6emluZy5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGRvZXMgYGF0aDEya2AgZmFsbCB1bmRlciB0aGUgY2F0ZWdvcnkgb2YgZHJpdmVycyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBoYXJkd2FyZSBmb3IgdGVzdGluZz8gVGhlIHByb21wdCBsaXN0cyBhIGJ1bmNoIG9mIGRyaXZlcnMgdGhhdCBnZW5lcmFsbHkgb3BlcmF0ZSBvbiByZWFsIGhhcmR3YXJlLiBXaS1GaSBkcml2ZXJzIGFyZW4ndCAqZXhwbGljaXRseSogbGlzdGVkLCBidXQgdGhleSBhcmUgdmVuZG9yLXNwZWNpZmljIFBDSWUgZHJpdmVycywganVzdCBsaWtlIHRoZSBvbmVzIG1lbnRpb25lZC4gSSdtIGdvaW5nIHRvIGNvbnNpZGVyIGl0IHdvcnRoIGZ1enppbmcsIGFuZCBJIHNob3VsZCBtYWtlIHN1cmUgdG8gaW5jbHVkZSBgYXRoMTJrYCBpbiB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mzk0NywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNToxMS42NTkzNjM3MDdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDkyNjQxMTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFUSDEyS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjI6Y29uZmlnIEFUSDEyS1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBXaS1GaSA3IHN1cHBvcnQgKGF0aDEyaylcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjE3OmNvbmZpZyBBVEgxMktfQUhCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0yNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjU6Y29uZmlnIEFUSDEyS19ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJhdGgxMmsgZGVidWdnaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzozNTpjb25maWcgQVRIMTJLX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiUXVhbGNvbW0gYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NDQ6Y29uZmlnIEFUSDEyS19UUkFDSU5HXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ1LVxcdGJvb2wgXFxcImF0aDEyayB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjUzOmNvbmZpZyBBVEgxMktfQ09SRURVTVBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTQtXFx0Ym9vbCBcXFwiYXRoMTJrIGNvcmVkdW1wXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNToxMi45MDg2MzYyMjFaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5NDQ1MjgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBBVEgxMksgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgY29uZmlndXJhdGlvbiBpbiBxdWVzdGlvbiBpcyBsYWJlbGVkIGBBVEgxMktgLiBNeSBpbW1lZGlhdGUgcmVmbGV4IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBpdHMgZGVwZW5kZW5jaWVzLiBJdCdzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgY29uZmlndXJhdGlvbiAqcmVsaWVzKiBvbiwgd2hhdCBvdGhlciBtb2R1bGVzIG9yIGZlYXR1cmVzIGFyZSBpbnRlcnR3aW5lZCB3aXRoIGl0cyBvcGVyYXRpb24uIFdpdGhvdXQga25vd2luZyB0aGUgaW50ZXJjb25uZWN0ZWQgY29tcG9uZW50cywgSSBjYW4ndCBlZmZlY3RpdmVseSB0cm91Ymxlc2hvb3QsIG9wdGltaXplLCBvciBldmVuIHJlbGlhYmx5IGFzc2VzcyBpdHMgb3ZlcmFsbCBpbXBhY3Qgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBEZXBlbmRlbmNpZXMgYXJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgYW5kIGZ1bmN0aW9uLiBMZXQncyBzZWUgd2hhdCB0aGUgZGF0YSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTU0OCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA1OjE2LjQwMzA5MTY0NloiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcXG4gICAyOlxcdGNvbmZpZyBBVEgxMktcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBXaS1GaSA3IHN1cHBvcnQgKGF0aDEyaylcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIE1BQzgwMjExIFxcdTAwMjZcXHUwMDI2IEhBU19ETUEgXFx1MDAyNlxcdTAwMjYgUENJXFxuICAgNTpcXHRcXHRzZWxlY3QgUUNPTV9RTUlfSEVMUEVSU1xcbiAgIDY6XFx0XFx0c2VsZWN0IE1ISV9CVVNcXG4gICA3OlxcdFxcdHNlbGVjdCBRUlRSXFxuICAgODpcXHRcXHRzZWxlY3QgUVJUUl9NSElcXG4gICA5OlxcdFxcdHNlbGVjdCBQQ0lfUFdSQ1RSTF9QV1JTRVEgaWYgSEFWRV9QV1JDVFJMXFxuICAxMDpcXHRcXHRoZWxwXFxuICAxMTpcXHRcXHQgIEVuYWJsZSBzdXBwb3J0IGZvciBRdWFsY29tbSBUZWNobm9sb2dpZXMgV2ktRmkgNyAoSUVFRVxcbiAgMTI6XFx0XFx0ICA4MDIuMTFiZSkgZmFtaWx5IG9mIGNoaXBzZXRzLCBmb3IgZXhhbXBsZSBXQ043ODUwIGFuZFxcbiAgMTM6XFx0XFx0ICBRQ045Mjc0LlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBhdGgxMmsuXFxuICAxNjpcXHRcXG4gIDE3OlxcdGNvbmZpZyBBVEgxMktfQUhCXFxuICAxODpcXHRcXHRib29sIFxcXCJRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcXFwiXFxuICAxOTpcXHRcXHRkZXBlbmRzIG9uIEFUSDEySyBcXHUwMDI2XFx1MDAyNiBSRU1PVEVQUk9DXFxuICAyMDpcXHRcXHRzZWxlY3QgUUNPTV9NRFRfTE9BREVSXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA1OjE2LjQwMzE2NDUyNloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTkxODM5MzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFUSDEySyBQQ0kgRHJpdmVyIGZvciBTeW1ib2wgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBlbmFibGluZyBgQVRIMTJLYCwgd2hpY2ggcmVsaWVzIG9uIGBNQUM4MDIxMWAsIGBIQVNfRE1BYCwgYW5kIGBQQ0lgLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgIGFuZCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYC4gVGhlc2UgZnVuY3Rpb25zIGxpdmUgaW4gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIHRob3NlIHR3bywgc2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIHRoZW0sIGFuZCBmaWd1cmUgb3V0IGhvdyB0aGV5IGZpdCBpbi4gSSBzZWUgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgIGlzIGNhbGxlZCBieSBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCwgd2hpY2ggaXRzZWxmIGlzIGNhbGxlZCBmcm9tIGBhdGgxMmtfcGNpX3Byb2JlYC5cblxuU28sIHRoZSBuYXR1cmFsIGNhbmRpZGF0ZXMgc2VlbWVkIHRvIGJlIHRob3NlIHRocmVlOiBgYXRoMTJrX3BjaV9wcm9iZWAsIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgLCBhbmQgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLlxuXG5CdXQgdGhlbiBJIHNhdyB0aGF0IGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCwgYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX3Byb2JlYCBhcmUgYWxsIHN0YXRpYy4gVGhlIHByb21wdCBzYXlzIHRoYXQgdGhlIHByZWZlcnJlZCBzeW1ib2xzIHNob3VsZCBiZSBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuXG5cbkkgd2VudCBiYWNrIHRvIGNoZWNrIGBhdGgxMmtfcGNpX3Byb2JlYC4gSXQncyBzdGF0aWMsIGJ1dCBpdCdzIGFzc2lnbmVkIHRvIGBwY2lfZHJpdmVyLVx1MDAzZXByb2JlYCwgbWFraW5nIGl0IGFuIGVudHJ5cG9pbnQuIFRoZXJlJ3MgYWxzbyBgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXJgLCB3aGljaCBpc24ndCBzdGF0aWMsIGJ1dCBqdXN0IHJlZ2lzdGVycyB0aGUgZHJpdmVyLiBJIGNoZWNrZWQgYGF0aDEya193aWZpN19wY2lfcHJvYmVgIHRvbywganVzdCBpbiBjYXNlLCBidXQgdGhhdCdzIHN0YXRpYy5cblxuRXZlbiB0aG91Z2ggYGF0aDEya19wY2lfcHJvYmVgIGlzIHN0YXRpYywgc3l6a2FsbGVyICpjYW4qIHN0aWxsIHJlYWNoIGl0IGJlY2F1c2UgaXQncyBwYXJ0IG9mIHRoZSBQQ0kgc3Vic3lzdGVtLiBCdXQgdGhlIHByb21wdCBpcyBjbGVhcjogcHJpb3JpdGl6ZSB0aGUgbm9uLXN0YXRpYyBvbmVzLlxuXG5Ib3dldmVyLCBzaW5jZSBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgYSBwcm9iZSBmdW5jdGlvbiwgaXQgd29uJ3QgYmUgaW5saW5lZCwgYXMgaXQncyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyIHRvIHRoZSBwY2kgbGF5ZXIuIFNvLCBJIHRoaW5rIGBhdGgxMmtfcGNpX3Byb2JlYCBpcyB0aGUgcmlnaHQgZm9jdXMgc3ltYm9sIGhlcmUsIGRlc3BpdGUgYmVpbmcgc3RhdGljLCBiZWNhdXNlIGl0IGlzIGFuIGVudHJ5cG9pbnQuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIEkgZGlkbid0IG1pc3MgYW55IG90aGVyIHJlbGV2YW50IG5vbi1zdGF0aWMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjA0NywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA1OjQ2LjMyMTU2NDcyMVoiLCJTZXEiOjYwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ1NTM5NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3BjaV9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUyNz1hdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTQ4OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE1NDktXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODI4PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTg0OS1cXHRwY2lfZHJpdmVyLVxcdTAwM2VpZF90YWJsZSA9IGRyaXZlci1cXHUwMDNlaWRfdGFibGU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODUwOlxcdHBjaV9kcml2ZXItXFx1MDAzZXByb2JlID0gYXRoMTJrX3BjaV9wcm9iZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4NTEtXFx0cGNpX2RyaXZlci1cXHUwMDNlcmVtb3ZlID0gYXRoMTJrX3BjaV9yZW1vdmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA1OjQ2LjM3NjEyNDI3NVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzM5ODgxMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIE1vZHVsZSdzIEludGVycnVwdCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEkgc2VlIGBhdGgxMmtfcGNpX3Byb2JlYCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBwb2ludGVyOyB0aGF0IG1lYW5zIGl0J3Mgbm90IGJlaW5nIGlubGluZWQsIHdoaWNoIGltcGFjdHMgcG90ZW50aWFsIG9wdGltaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoaXMgcGF0Y2guXG5cbkknbSBzZWVpbmcgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBpbnRlcnJ1cHQgaGFuZGxpbmc6IGBhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxYCAod2hpY2ggaXMgbmV3KSwgYGF0aDEya19wY2lfZnJlZV9leHRfaXJxYCAobW9kaWZpZWQpLCBgYXRoMTJrX3BjaV9mcmVlX2lycWAgKG1vZGlmaWVkKSwgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgIChtb2RpZmllZCksIGFuZCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCAobW9kaWZpZWQpLiBBbGwgdGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMsIHdoaWNoIGxpbWl0cyB0aGVpciB2aXNpYmlsaXR5LCBidXQgaXMgZXhwZWN0ZWQgZm9yIHRoaXMga2luZCBvZiBsb3ctbGV2ZWwgZHJpdmVyIGNvZGUuXG5cbkxvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGlzIGNhbGxlZCBmcm9tIGBhdGgxMmtfcGNpX3Byb2JlYCBhbmQgYGF0aDEya19wY2lfZnJlZV9pcnFgIGlzIGNhbGxlZCBmcm9tIGBhdGgxMmtfcGNpX3JlbW92ZWAgYW5kIGVycm9yIHBhdGhzLiBUaGlzIG1ha2VzIHNlbnNlLiBUaGUgcHJvYmUgaXMgcmVzcG9uc2libGUgZm9yIHNldHVwLCBhbmQgcmVtb3ZlIGRlYWxzIHdpdGggY2xlYW51cC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBhdGgxMmtfcGNpX3JlbW92ZWAgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNoYW5nZXMgbWVhbiBpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBkcml2ZXIgbGlmZWN5Y2xlIGFuZCBlcnJvciBoYW5kbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2MDAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDU6NTEuMTE2MDA5MzU0WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzc4NTMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTU0OD1zdGF0aWMgaW50IGF0aDEya19wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE3MDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNzA4OnN0YXRpYyB2b2lkIGF0aDEya19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTcwOS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE4Mjg9aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODUwLVxcdHBjaV9kcml2ZXItXFx1MDAzZXByb2JlID0gYXRoMTJrX3BjaV9wcm9iZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4NTE6XFx0cGNpX2RyaXZlci1cXHUwMDNlcmVtb3ZlID0gYXRoMTJrX3BjaV9yZW1vdmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODUyLVxcdHBjaV9kcml2ZXItXFx1MDAzZXNodXRkb3duID0gYXRoMTJrX3BjaV9zaHV0ZG93bjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDU6NTEuMTYzNzk5ODU4WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwOTk4NDIyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogYGF0aDEya2AgRHJpdmVyIFRlYXJkb3duKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBhdGgxMmtgIGRyaXZlciBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgZnV6emFibGUuIEZpcnN0LCBJIHNlZSB0aGUgbWFpbiBlbnRyeSBwb2ludHMgYXJlIGBhdGgxMmtfcGNpX3Byb2JlYCBhbmQgYGF0aDEya19wY2lfcmVtb3ZlYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgd29ydGggbm90aW5nIGFzIG15IGBGb2N1c1N5bWJvbHNgLiBOb3csIEkgcmVjYWxsIHRoZSBydWxlOiBpZiB0aGUgcGF0Y2ggKm9ubHkqIHRvdWNoZXMgZHJpdmVyIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IGFyZSBleGVjdXRlZCBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLCB0aGVuIGl0J3Mgbm90IHdvcnRoIGZ1enppbmcsIGFuZCBJIHNob3VsZCBzZXQgYFJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5UaGUgcXVlc3Rpb24gaXMsIGRvZXMgdGhpcyBwYXRjaCAqb25seSogbW9kaWZ5IHRob3NlIHRlYXJkb3duIGNhbGxiYWNrcz8gSXQgZG9lc24ndCBsb29rIGxpa2UgaXQuIEkgc2VlIGNoYW5nZXMgaW4gYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgIGFuZCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCwgd2hpY2gsIGFzIEkgcmVjYWxsLCBhcmUgY2FsbGVkICpkdXJpbmcqIGBwcm9iZWAgLS0gdGhleSdyZSBwYXJ0IG9mIHRoZSBpbml0aWFsaXphdGlvbi4gQWxzbywgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGVycm9yIHBhdGhzICp3aXRoaW4qIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIGl0c2VsZi4gU28sIHRoaXMgaXNuJ3QgZXhjbHVzaXZlbHkgYSB0ZWFyZG93biBwYXRjaC5cblxuSSBzdGlsbCBuZWVkIHRvIGNvbmZpcm0gb25lIHRoaW5nOiBJcyBgYXRoMTJrX3BjaV9mcmVlX2lycWAgKm9ubHkqIGNhbGxlZCBkdXJpbmcgYHJlbW92ZWA/IEkgbmVlZCB0byB2ZXJpZnkgaXRzIGNhbGwgc2l0ZXMgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1MTQsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDU6NTcuMjYzNjQ2NDI2WiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzMwNDE4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX2ZyZWVfaXJxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0zMjk9c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYiwgaW50IG51bV9leHRfaXJxX2dycClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMzQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MzQ0OnN0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTM0NS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE1NDg9c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNjgxLVxcdGF0aDEya19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KGFiX3BjaSwgTlVMTCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNjgyOlxcdGF0aDEya19wY2lfZnJlZV9pcnEoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTY4My1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTcwOD1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTczMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE3MzE6XFx0YXRoMTJrX3BjaV9mcmVlX2lycShhYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNzMyLVxcdGF0aDEya19wY2lfbXNpX2ZyZWUoYWJfcGNpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDU6NTcuMzEwOTU1MDlaIiwiU2VxIjo2NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1OTE5NTk4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBBc3Nlc3NtZW50IGZvciB0aGlzIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIHRoZSBjb2RlIGNoYW5nZXMsIGhlcmUncyBteSBwbGFuIGZvciBmdXp6aW5nIGl0LiBJJ20gZm9jdXNpbmcgb24gdGhlIGBhdGgxMmtgIFBDSSBkcml2ZXIuXG5cbkVzc2VudGlhbGx5LCB0aGlzIHBhdGNoIG1vZGlmaWVzIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgYXRoMTJrX3BjaV9wcm9iZWAgYW5kIHRoZSBgYXRoMTJrX3BjaV9yZW1vdmVgIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgaXNzdWVzIHRoYXQgYXJpc2UgZHVyaW5nIGRldmljZSBwcm9iaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGludGVycnVwdCBjb25maWd1cmF0aW9uLCBuYW1lbHkgd2l0aGluIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AuIFRoZSBrZXkgaXMgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCBpbiB0aGUgZXJyb3IgcGF0aHMsIG1lYW5pbmcgdGhleSBhcmUgbGlrZWx5IHRvIGJlIHJlYWNoZWQgaW4gYW4gdW51c3VhbCBzdGF0ZSwgd2hpY2ggaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4gQWxzbywgaXQncyBub3QganVzdCB0ZWFyZG93biwgYXMgdGhpcyBwYXRjaCBtb2RpZmllcyBlcnJvciBwYXRocyB0aGF0IG9jY3VyIGR1cmluZyB0aGUgaW5pdGlhbCBwcm9iZS5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy4gSSdsbCBmbGFnIGBXb3J0aEZ1enppbmc6IHRydWVgLlxuXG5Gb3Igc3ltYm9scyB0byB0YXJnZXQsIEknbSBnb2luZyB0byBpbmNsdWRlOlxuXG4qICAgYGF0aDEya19wY2lfcHJvYmVgOiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGFuZCBkZWZpbml0ZWx5IG5vdCBpbmxpbmVkLlxuKiAgIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgOiBHaXZlbiB0aGUgc2l6ZSBhbmQgaW1wb3J0YW5jZSwgbm90IGxpa2VseSBpbmxpbmVkLlxuKiAgIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYDogQWxzbyBxdWl0ZSBsYXJnZSwgbWFraW5nIGlubGluaW5nIHVubGlrZWx5LlxuXG5TbywgYEZvY3VzU3ltYm9sc2Agd2lsbCBiZTogYGF0aDEya19wY2lfcHJvYmVgLCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCwgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgLlxuXG5UaGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoaXMgY29kZSBpcyBkaXJlY3RseSByZWFjaGFibGUgdGhyb3VnaCB0aGUgUENJIHN1YnN5c3RlbS4gSSBleHBlY3Qgc3l6a2FsbGVyJ3MgUENJIGZ1enplciB0byBpbmplY3QgYSB2aXJ0dWFsIGRldmljZSBhbmQgdHJpZ2dlciBhbGxvY2F0aW9uIGZhaWx1cmVzLCBhbmQgdGhpcyBwYXRjaCB3aWxsIGJlIGhpdCBkdXJpbmcgdGhvc2Ugc2NlbmFyaW9zLlxuXG5Ob3csIHJlZ2FyZGluZyBjb25maWd1cmF0aW9uLCBpdCBsb29rcyBsaWtlIG9ubHkgYEFUSDEyS2AgaXMgc3RyaWN0bHkgbmVlZGVkLiBgTUFDODAyMTFgIGlzIGFsc28gcmVxdWlyZWQsIGJ1dCBpdCBpcyB1bmxpa2VseSB0aGlzIG5lZWRzIHRvIGJlIHNwZWNpZmllZCBhcyBpdCBpcyBhIGNvbW1vbiBkcml2ZXIuIFRoZSBwYXRjaCBpcyBpbiBgcGNpLmNgLCBzbyBgQVRIMTJLX0FIQmAgaXMgbm90IG5lZWRlZC4gYEFUSDEyS19ERUJVR2AgaXMgbm90IHN0cmljdGx5IG5lZWRlZC4gU28gSSdsbCBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGluY2x1ZGU6IGBBVEgxMktgLlxuXG5JJ2xsIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBsYXRlciwgYnV0IHRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTY1NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNjowNy45MDI5MTc2ODdaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDM3Njg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzoyOmNvbmZpZyBBVEhfQ09NTU9OXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc9MjQ9aWYgV0xBTl9WRU5ET1JfQVRIXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMjUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc6MjY6Y29uZmlnIEFUSF9ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIkF0aGVyb3Mgd2lyZWxlc3MgZGVidWdnaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctMzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc6MzI6Y29uZmlnIEFUSF9UUkFDRVBPSU5UU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTMzLVxcdGJvb2wgXFxcIkF0aGVyb3Mgd2lyZWxlc3MgdHJhY2luZ1xcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTM5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnOjQwOmNvbmZpZyBBVEhfUkVHX0RZTkFNSUNfVVNFUl9SRUdfSElOVFNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZy00MS1cXHRib29sIFxcXCJBdGhlcm9zIGR5bmFtaWMgdXNlciByZWd1bGF0b3J5IGhpbnRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctNDgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc6NDk6Y29uZmlnIEFUSF9SRUdfRFlOQU1JQ19VU0VSX0NFUlRfVEVTVElOR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkF0aGVyb3MgZHluYW1pYyB1c2VyIHJlZ3VsYXRvcnkgdGVzdGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDY6MDcuOTYyOTU4MzUxWiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODM4ODg0NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmF2aWdhdGluZyB0aGUgV0xBTiBWZW5kb3IgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBnZXQgaW50byB0aGUgYGF0aGAgZGlyZWN0b3J5LiBTdGFuZGFyZCBwcm9jZWR1cmUsIHJpZ2h0PyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgV0xBTiB2ZW5kb3Igc3BhY2UsIGFuZCBpdCBsb29rcyBsaWtlIEkgbmVlZCBhIHNwZWNpZmljIGtleSB0byB1bmxvY2sgdGhpcyBwYXJ0aWN1bGFyIGRvb3IuIEFoLCByaWdodCwgSSBuZWVkIGBXTEFOX1ZFTkRPUl9BVEhgLiBUaGF0J3MgdGhlIGdhdGVrZWVwZXIsIHRoZSBtYWdpYyB3b3JkIHRvIGdldCBwYXN0IHRoZSBpbml0aWFsIGFjY2VzcyBjb250cm9scy4gSXQncyBhbG1vc3Qgc2Vjb25kIG5hdHVyZSBhdCB0aGlzIHBvaW50LCBidXQgaXQgYWx3YXlzIGhlbHBzIHRvIHRoaW5rIHRocm91Z2ggdGhlIHByZXJlcXVpc2l0ZXMgYmVmb3JlIGRpdmluZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0MTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNjoxMS4wNDY4NDk3OTRaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDQ3MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBXTEFOX1ZFTkRPUl9BVEhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWc9Mj1jb25maWcgQVRIX0NPTU1PTlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL0tjb25maWctNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZzo1OmNvbmZpZyBXTEFOX1ZFTkRPUl9BVEhcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvS2NvbmZpZy02LVxcdGJvb2wgXFxcIkF0aGVyb3MvUXVhbGNvbW0gZGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDY6MTEuMDk0MzA0MDc4WiIsIlNlcSI6NjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMzE5NTg1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkNoZWNraW5nIFdpcmVsZXNzIFZlbmRvciBTdXBwb3J0KipcblxuQWxyaWdodCwgdGhlIG9iamVjdGl2ZSBpcyBwcmV0dHkgY2xlYXI6IGl0IGxvb2tzIGxpa2Ugd2UgbmVlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgQXRoZXJvcy1iYXNlZCBXTEFOIGhhcmR3YXJlLiBTbywgYFdMQU5fVkVORE9SX0FUSGAgbmVlZHMgdG8gYmUgc2V0LiBOb3csIHRoZSBsb2dpY2FsIG5leHQgc3RlcCBpcyB0byBoZWFkIG92ZXIgdG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBkZWZpbmVzIHdpcmVsZXNzIGRyaXZlcnMgYW5kIG9wdGlvbnMuIFRoYXQnbGwgYmUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWdgLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgV0xBTl9WRU5ET1JfQVRIYCBpcyBkZWZpbmVkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBwZXJoYXBzIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIG9yIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zIHRvIHByb2NlZWQgc2FmZWx5LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE2ODgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOVQxMjowNjoxNC4yMjYyNjQ4MTNaIiwiU2VxIjo3MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTU5NjY5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFdMQU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnLTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZzo2Om1lbnVjb25maWcgV0xBTlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWctNy1cXHRib29sIFxcXCJXaXJlbGVzcyBMQU5cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA2OjE1LjQ4MjI0MTE4N1oiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTA4NDc0MjQ2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gZW5hYmxlIFdMQU4gc3VwcG9ydCwgc3BlY2lmaWNhbGx5IHRoZSBBdGhlcm9zIHZlbmRvciBtb2R1bGUsIGFuZCB0aGUgYXRoMTJrIGRyaXZlci4gSSd2ZSBub3RlZCB0aGF0IGBXTEFOYCwgYFdMQU5fVkVORE9SX0FUSGAsIGFuZCBgQVRIMTJLYCBuZWVkIHRvIGJlIGVuYWJsZWQuXG5cbk5vdywgSSdtIHJlLXJlYWRpbmcgdGhlIHByb21wdCwgc3BlY2lmaWNhbGx5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gSXQncyB0YWxraW5nIGFib3V0IHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBzcGVjaWZpY2FsbHkgY29kZSB0aGF0IHJlbGllcyBvbiB1bi1lbXVsYXRlZCBwaHlzaWNhbCBoYXJkd2FyZSBsaWtlIHNwZWNpZmljIFBDSWUgZGV2aWNlcy4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgZG9lcyB0aGUgYGF0aDEya2AgZHJpdmVyIGZhbGwgaW50byB0aGlzIGNhdGVnb3J5P1xuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgeWVzLCBgYXRoMTJrYCBpcyBhIGRyaXZlciBpbnRlcmFjdGluZyB3aXRoIGhhcmR3YXJlLiBIb3dldmVyLCBpdCBsZXZlcmFnZXMgdGhlIFBDSSBmdXp6ZXIsIHdoaWNoIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBlbXVsYXRlIFBDSSBjb25maWd1cmF0aW9uIGFuZCBtZW1vcnktbWFwcGVkIEkvTyAoTU1JTykgc3BhY2VzLiBUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoZSBwcm9tcHQncyBwaHJhc2UsIFwiLi4uKmV2ZW4qIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFRoaXMgaXMga2V5ISBUaGUgUENJIGZ1enplciAqaXMqIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLlxuXG5UaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVycm9yIHBhdGggd2l0aGluIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLiBUaGUgUENJIGZ1enplciBjYW4gZWFzaWx5IHRyaWdnZXIgdGhpcywgYnkgY2F1c2luZyBhbiBhbGxvY2F0aW9uIGZhaWx1cmUgb3IgYnkgcmVhZGluZyBhIHNwZWNpZmljIHZhbHVlIGZyb20gTU1JTy4gU3l6a2FsbGVyIGZvdW5kIHRoZSBidWcsIHNvIHRoaXMgY29uZmlybXMgcmVhY2hhYmlsaXR5LiAgVGhlcmVmb3JlLCBpdCAqaXMqIHJlYWNoYWJsZSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBUaHVzLCBJJ20gcmV0dXJuaW5nIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cbk5vdywgcmVnYXJkaW5nIGZvY3VzIHN5bWJvbHMsIEknbSBpbmNsdWRpbmcgYGF0aDEya19wY2lfcHJvYmVgLCBgYXRoMTJrX3BjaV9jb25maWdfaXJxYCwgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYC5cblxuVGhlIHJlYXNvbmluZyBpcyB0aGF0IHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGVycm9yIGhhbmRsaW5nIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gYGF0aDEya19wY2lfY29uZmlnX2lycWAgYW5kIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCwgcmVsYXRlZCB0byB0aGUgYGF0aDEya2AgZHJpdmVyLiBUaGUgUENJIGZ1enplciBhbmQgcG90ZW50aWFsbHkgc3l6a2FsbGVyIGNhbiBlYXNpbHkgdHJpZ2dlciBhbGxvY2F0aW9uIGZhaWx1cmVzIGluIGBhdGgxMmtfcGNpX3Byb2JlYC5cblxuT25lIGxhc3QgdGhpbmc6IHRoZSBwcm9tcHQgc3VnZ2VzdHMgcHJpb3JpdGl6aW5nIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gV2hpbGUgYGF0aDEya19wY2lfcHJvYmVgICppcyogc3RhdGljLCBpdCdzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIGl0J3Mgbm90IGlubGluZWQuIEl0J3MgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQsIGFuZCBpdCBzZWVtcyB0aGUgYmVzdCBjaG9pY2UuIEkgd2lsbCBpbmNsdWRlIGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AgYmVjYXVzZSB0aGV5IGNvbnRhaW4gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMuICBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTk1MCwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDY6MjYuNTY2OTg3MTAzWiIsIlNlcSI6NzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5ODU2NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldMQU5cIixcbiAgICBcIldMQU5fVkVORE9SX0FUSFwiLFxuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTJrX3BjaV9wcm9iZVwiLFxuICAgIFwiYXRoMTJrX3BjaV9jb25maWdfaXJxXCIsXG4gICAgXCJhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiB0aGUgUENJIHByb2JlIGZ1bmN0aW9uIChgYXRoMTJrX3BjaV9jb25maWdfaXJxYCBhbmQgYGF0aDEya19wY2lfZXh0X2lycV9jb25maWdgKSBvZiB0aGUgYXRoMTJrIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgdGhlIFBDSSBzdWJzeXN0ZW0gYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIGluamVjdGluZyBhIHZpcnR1YWwgZGV2aWNlIGFuZCBjYXVzaW5nIGFsbG9jYXRpb24gZmFpbHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiV0xBTlwiLFxuICAgIFwiV0xBTl9WRU5ET1JfQVRIXCIsXG4gICAgXCJBVEgxMktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdGgxMmtfcGNpX3Byb2JlXCIsXG4gICAgXCJhdGgxMmtfcGNpX2NvbmZpZ19pcnFcIixcbiAgICBcImF0aDEya19wY2lfZXh0X2lycV9jb25maWdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24gKGBhdGgxMmtfcGNpX2NvbmZpZ19pcnFgIGFuZCBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2ApIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSB0aGUgUENJIHN1YnN5c3RlbSBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgaW5qZWN0aW5nIGEgdmlydHVhbCBkZXZpY2UgYW5kIGNhdXNpbmcgYWxsb2NhdGlvbiBmYWlsdXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDY6MjYuNjQyOTc5MDA5WiIsIlNlcSI6NzMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE4NzUzNzYzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA2OjI2LjY0MzQzNzQ1OVoiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDE4NzA3NTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgYW5kIGluY29ycmVjdCBjbGVhbnVwIGxvZ2ljIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBvZiBJUlEgY29uZmlndXJhdGlvbiBpbiB0aGUgYXRoMTJrIGRyaXZlci4gSXQgcmVmYWN0b3JzIHRoZSBJUlEgZnJlZWluZyBmdW5jdGlvbnMgdG8gYWNjZXB0IHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBJUlFzL2dyb3VwcyBhbmQgZW5zdXJlcyB0aGF0IG9ubHkgYWxsb2NhdGVkIHJlc291cmNlcyBhcmUgZnJlZWQuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGludmFsaWQgZnJlZXMsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtzIGluIHRoZXNlIHBhdGhzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc0OTA2NTE1MjM2NDNhYTg2YWI4ZTY4MzhjNjNmZTE0ZWZhOWQzMjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxOSAxMjowMTo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXG5pbmRleCA2NDQxOTI3YjUzODIyLi5hZjBlODgyZmQwYjUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY1xuQEAgLTMxMywxMSArMzEzLDI0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfc3dfcmVzZXQoc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBwb3dlcl9vbilcbiBcdGF0aDEya19taGlfc2V0X21oaWN0cmxfcmVzZXQoYWIpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuK3N0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9jZV9pcnEoc3RydWN0IGF0aDEya19iYXNlICphYiwgaW50IG51bV9jZSlcbit7XG4rXHRpbnQgaSwgaXJxX2lkeDtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9jZTsgaSsrKSB7XG4rXHRcdGlmIChhdGgxMmtfY2VfZ2V0X2F0dHJfZmxhZ3MoYWIsIGkpIFx1MDAyNiBDRV9BVFRSX0RJU19JTlRSKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpcnFfaWR4ID0gQVRIMTJLX1BDSV9JUlFfQ0UwX09GRlNFVCArIGk7XG4rXHRcdGZyZWVfaXJxKGFiLVx1MDAzZWlycV9udW1baXJxX2lkeF0sIFx1MDAyNmFiLVx1MDAzZWNlLmNlX3BpcGVbaV0pO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBpbnQgbnVtX2V4dF9pcnFfZ3JwKVxuIHtcbiBcdGludCBpLCBqO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVRIMTJLX0VYVF9JUlFfR1JQX05VTV9NQVg7IGkrKykge1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2V4dF9pcnFfZ3JwOyBpKyspIHtcbiBcdFx0c3RydWN0IGF0aDEya19leHRfaXJxX2dycCAqaXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW2ldO1xuIFxuIFx0XHRmb3IgKGogPSAwOyBqIFx1MDAzYyBpcnFfZ3JwLVx1MDAzZW51bV9pcnE7IGorKylcbkBAIC0zMzAsMTYgKzM0Myw4IEBAIHN0YXRpYyB2b2lkIGF0aDEya19wY2lfZnJlZV9leHRfaXJxKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXG4gc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9mcmVlX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIHtcbi1cdGludCBpLCBpcnFfaWR4O1xuLVxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZWNlX2NvdW50OyBpKyspIHtcbi1cdFx0aWYgKGF0aDEya19jZV9nZXRfYXR0cl9mbGFncyhhYiwgaSkgXHUwMDI2IENFX0FUVFJfRElTX0lOVFIpXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlycV9pZHggPSBBVEgxMktfUENJX0lSUV9DRTBfT0ZGU0VUICsgaTtcbi1cdFx0ZnJlZV9pcnEoYWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSwgXHUwMDI2YWItXHUwMDNlY2UuY2VfcGlwZVtpXSk7XG4tXHR9XG4tXG4tXHRhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYik7XG4rXHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQpO1xuK1x0YXRoMTJrX3BjaV9mcmVlX2V4dF9pcnEoYWIsIEFUSDEyS19FWFRfSVJRX0dSUF9OVU1fTUFYKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYXRoMTJrX3BjaV9jZV9pcnFfZW5hYmxlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUxNiBjZV9pZClcbkBAIC01OTUsOCArNjAwLDYgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXG4gXHRcdFx0aXJxID0gYXRoMTJrX3BjaV9nZXRfbXNpX2lycShhYi1cdTAwM2VkZXYsIHZlY3Rvcik7XG4gXG4tXHRcdFx0YWItXHUwMDNlaXJxX251bVtpcnFfaWR4XSA9IGlycTtcbi1cbiBcdFx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1BDSSxcbiBcdFx0XHRcdCAgIFwiaXJxOiVkIGdyb3VwOiVkXFxuXCIsIGlycSwgaSk7XG4gXG5AQCAtNjA3LDIyICs2MTAsMjQgQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXHRcdFx0aWYgKHJldCkge1xuIFx0XHRcdFx0YXRoMTJrX2VycihhYiwgXCJmYWlsZWQgcmVxdWVzdCBpcnEgJWQ6ICVkXFxuXCIsXG4gXHRcdFx0XHRcdCAgIHZlY3RvciwgcmV0KTtcbi1cdFx0XHRcdGdvdG8gZmFpbF9yZXF1ZXN0O1xuK1xuK1x0XHRcdFx0Zm9yIChuID0gMDsgbiBcdTAwM2MgajsgbisrKVxuK1x0XHRcdFx0XHRmcmVlX2lycShhYi1cdTAwM2VpcnFfbnVtW2lycV9ncnAtXHUwMDNlaXJxc1tuXV0sIGlycV9ncnApO1xuK1xuK1x0XHRcdFx0bmV0aWZfbmFwaV9kZWwoXHUwMDI2YWItXHUwMDNlZXh0X2lycV9ncnBbaV0ubmFwaSk7XG4rXHRcdFx0XHRmcmVlX25ldGRldihhYi1cdTAwM2VleHRfaXJxX2dycFtpXS5uYXBpX25kZXYpO1xuK1x0XHRcdFx0Z290byBmYWlsX2FsbG9jYXRlO1xuIFx0XHRcdH1cbitcbitcdFx0XHRhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdID0gaXJxO1xuIFx0XHR9XG4gXHRcdGF0aDEya19wY2lfZXh0X2dycF9kaXNhYmxlKGlycV9ncnApO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG4gXG4tZmFpbF9yZXF1ZXN0OlxuLVx0LyogaSAtXHUwMDNlbmFwaV9uZGV2IHdhcyBwcm9wZXJseSBhbGxvY2F0ZWQuIEZyZWUgaXQgYWxzbyAqL1xuLVx0aSArPSAxO1xuIGZhaWxfYWxsb2NhdGU6XG4tXHRmb3IgKG4gPSAwOyBuIFx1MDAzYyBpOyBuKyspIHtcbi1cdFx0aXJxX2dycCA9IFx1MDAyNmFiLVx1MDAzZWV4dF9pcnFfZ3JwW25dO1xuLVx0XHRmcmVlX25ldGRldihpcnFfZ3JwLVx1MDAzZW5hcGlfbmRldik7XG4tXHR9XG4rXHRhdGgxMmtfcGNpX2ZyZWVfZXh0X2lycShhYiwgaSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC02NzEsNiArNjc2LDggQEAgc3RhdGljIGludCBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoc3RydWN0IGF0aDEya19iYXNlICphYilcbiBcdFx0aWYgKHJldCkge1xuIFx0XHRcdGF0aDEya19lcnIoYWIsIFwiZmFpbGVkIHRvIHJlcXVlc3QgaXJxICVkOiAlZFxcblwiLFxuIFx0XHRcdFx0ICAgaXJxX2lkeCwgcmV0KTtcbitcbitcdFx0XHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBpKTtcbiBcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4gXG5AQCAtNjgxLDggKzY4OCwxMCBAQCBzdGF0aWMgaW50IGF0aDEya19wY2lfY29uZmlnX2lycShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuIFx0fVxuIFxuIFx0cmV0ID0gYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZyhhYik7XG4tXHRpZiAocmV0KVxuK1x0aWYgKHJldCkge1xuK1x0XHRhdGgxMmtfcGNpX2ZyZWVfY2VfaXJxKGFiLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlY2VfY291bnQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTlUMTI6MDY6MjYuNjQzNDM4MjE5WiIsIlNlcSI6NzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTg3MDU0NzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIGF0aDEyayBQQ0kgSVJRIEhhbmRsaW5nIEZpeCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgd2UgaGFuZGxlIElSUXMgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgdGVhcmRvd24uIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSB0aGlzIGlzIGFsbCBhYm91dCByZWZhY3RvcmluZyBhbmQgc3RyZW5ndGhlbmluZyB0aGUgZXJyb3IgaGFuZGxpbmcgYXJvdW5kIElSUSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb27igJRzcGVjaWZpY2FsbHksIHRoZSBgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnFgLCBgYXRoMTJrX3BjaV9mcmVlX2NlX2lycWAsIGFuZCBgYXRoMTJrX3BjaV9mcmVlX2lycWAgZnVuY3Rpb25zIGFyZSB0aGUga2V5IHBsYXllcnMgaGVyZS5cblxuVGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIG9uIGNvcnJlY3RpbmcgcmVzb3VyY2UgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MgaW4gdGhlIGVycm9yIHBhdGhzIG9mIGBhdGgxMmtfcGNpX2V4dF9pcnFfY29uZmlnYCBhbmQgYGF0aDEya19wY2lfY29uZmlnX2lycWAuIFRoZSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IGlmIGFuIElSUSByZXF1ZXN0IGZhaWxzLCB3ZSBwcm9wZXJseSBjbGVhbiB1cCBhbnkgcGFydGlhbGx5IGFsbG9jYXRlZCByZXNvdXJjZXPigJRJUlEgbGluZXMgYW5kIHRoZSBhc3NvY2lhdGVkIG5ldHdvcmsgZGV2aWNlc+KAlGJlZm9yZSBleGl0aW5nLiBJdCdzIGEgbWVtb3J5L3Jlc291cmNlIG1hbmFnZW1lbnQgaXNzdWUsIHBsYWluIGFuZCBzaW1wbGUuIFdlJ3JlIG5vdCB0YWxraW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQuIFRoaXMgaXMgc29tZXRoaW5nIHRoYXQgS0FTQU4sIHN0YW5kYXJkIGxlYWsgZGV0ZWN0b3JzLCBvciBLbWVtbGVhayB3b3VsZCBjYXRjaCB3aXRob3V0IGFuIGlzc3VlLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuTG9va2luZyBjbG9zZXIsIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGF0aDEya19wY2lfZnJlZV9jZV9pcnFgIGFuZCB0aGUgYWRqdXN0bWVudCB0byBgYXRoMTJrX3BjaV9mcmVlX2V4dF9pcnFgIGNvbmZpcm0gdGhlIGludGVudCB0byBtYW5hZ2UgdGhlIGNsZWFudXAgb2YgQ0UgYW5kIGV4dGVybmFsIElSUXMgd2l0aCBtb3JlIHByZWNpc2lvbi4gU3BlY2lmaWNhbGx5LCBpbiBgYXRoMTJrX3BjaV9leHRfaXJxX2NvbmZpZ2AsIHRoZSByZXZpc2VkIGVycm9yIGhhbmRsaW5nIG1ldGljdWxvdXNseSBmcmVlcyBhbnkgYWxyZWFkeS1yZXF1ZXN0ZWQgSVJRcyB3aXRoaW4gYSBncm91cCB1cG9uIGZhaWx1cmUsIGRlbGV0ZXMgTkFQSSBpbnN0YW5jZXMsIGFuZCBmcmVlcyB0aGUgYXNzb2NpYXRlZCBuZXRkZXYuIFRoZW4gaXQgY2FsbHMgYGF0aDEya19wY2lfZnJlZV9leHRfaXJxYCB0byBmcmVlIHRoZSBwcmVpdm91c2x5IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgZ3JvdXBzLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgYnVnIHdoZXJlIGBhYi1cdTAwM2VpcnFfbnVtW2lycV9pZHhdYCBtaWdodCBiZSBhc3NpZ25lZCBiZWZvcmUgdGhlIGByZXF1ZXN0X2lycWAgY2FsbCBzdWNjZWVkcywgb3Igd2hlcmUgdGhlIGNsZWFudXAgbG9naWMgd2Fzbid0IGNvcnJlY3QuXG5cbkluIGVzc2VuY2UsIHRoaXMgaXMgYSB0YXJnZXRlZCBmaXggZm9yIHRoZSBJUlEgY29uZmlndXJhdGlvbidzIGVycm9yIGhhbmRsaW5nLiBJdCdzIG5vdCBhIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyZSBjaGFuZ2UsIG5vciBkb2VzIGl0IGludHJvZHVjZSBhbnkgbmV3IHVzZXItc3BhY2UgaW50ZXJmYWNlcyBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdpdGggdGhpcyBpbiBtaW5kLCBhbmQgYWZ0ZXIgYSBjYXJlZnVsIHJldmlldywgSSdtIGNvbmZpZGVudCB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaW52b2x2ZSBLTVNBTiBmb3IgdGhpcy4gSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDUzLCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE5VDEyOjA2OjM2LjgzMDQ5NTUyN1oiLCJTZXEiOjc2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgYW5kIGluY29ycmVjdCBjbGVhbnVwIGxvZ2ljIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocyBvZiBJUlEgY29uZmlndXJhdGlvbiBpbiB0aGUgYXRoMTJrIGRyaXZlci4gSXQgcmVmYWN0b3JzIHRoZSBJUlEgZnJlZWluZyBmdW5jdGlvbnMgdG8gYWNjZXB0IHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBJUlFzL2dyb3VwcyBhbmQgZW5zdXJlcyB0aGF0IG9ubHkgYWxsb2NhdGVkIHJlc291cmNlcyBhcmUgZnJlZWQuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIGludmFsaWQgZnJlZXMsIHVzZS1hZnRlci1mcmVlcywgb3IgbWVtb3J5IGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgYW55IHVzZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gU3RhbmRhcmQgdG9vbHMgbGlrZSBLQVNBTiBhbmQga21lbWxlYWsgYXJlIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IG1lbW9yeSBjb3JydXB0aW9uIG9yIGxlYWtzIGluIHRoZXNlIHBhdGhzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGFuZCBpbmNvcnJlY3QgY2xlYW51cCBsb2dpYyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMgb2YgSVJRIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGF0aDEyayBkcml2ZXIuIEl0IHJlZmFjdG9ycyB0aGUgSVJRIGZyZWVpbmcgZnVuY3Rpb25zIHRvIGFjY2VwdCB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgSVJRcy9ncm91cHMgYW5kIGVuc3VyZXMgdGhhdCBvbmx5IGFsbG9jYXRlZCByZXNvdXJjZXMgYXJlIGZyZWVkLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBpbnZhbGlkIGZyZWVzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIG1lbW9yeSBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGFueSB1c2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFN0YW5kYXJkIHRvb2xzIGxpa2UgS0FTQU4gYW5kIGttZW1sZWFrIGFyZSBzdWZmaWNpZW50IHRvIGRldGVjdCBtZW1vcnkgY29ycnVwdGlvbiBvciBsZWFrcyBpbiB0aGVzZSBwYXRocy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9mk4m[1] Phase: Succeeded StartedAt: 2026-08-19 12:06:48 +0000 UTC FinishedAt: 2026-08-19 12:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-19 12:06:48 +0000 UTC FinishedAt: 2026-08-19 12:06:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2] Phase: Succeeded StartedAt: 2026-08-19 12:06:48 +0000 UTC FinishedAt: 2026-08-19 13:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-19 12:06:48 +0000 UTC FinishedAt: 2026-08-19 13:46:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-19 12:06:48 +0000 UTC FinishedAt: 2026-08-19 12:06:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-19 12:06:48 +0000 UTC FinishedAt: 2026-08-19 12:06:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow9mk4m/series-workflow9mk4m-convert-artifact-3278722716/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-19 12:06:58 +0000 UTC FinishedAt: 2026-08-19 12:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-19 12:06:58 +0000 UTC FinishedAt: 2026-08-19 12:24:22 +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:*626da12b-345c-4f9e-9b49-9e5bb20eaf4c,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-workflow9mk4m/series-workflow9mk4m-convert-artifact-3278722716/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": "5341ea36-d197-482e-b2e3-5ad20bdc4e67", "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-workflow9mk4m/series-workflow9mk4m-build-action-1108868298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-19 12:06:58 +0000 UTC FinishedAt: 2026-08-19 12:24:12 +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:*626da12b-345c-4f9e-9b49-9e5bb20eaf4c,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-workflow9mk4m/series-workflow9mk4m-convert-artifact-3278722716/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": "5341ea36-d197-482e-b2e3-5ad20bdc4e67", "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-workflow9mk4m/series-workflow9mk4m-build-action-1108868298/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-19 12:24:22 +0000 UTC FinishedAt: 2026-08-19 12:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-19 12:24:22 +0000 UTC FinishedAt: 2026-08-19 12:24:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-19 12:24:22 +0000 UTC FinishedAt: 2026-08-19 12:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-19 12:24:22 +0000 UTC FinishedAt: 2026-08-19 12:24:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow9mk4m/series-workflow9mk4m-convert-artifact-1400598235/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-19 12:24:32 +0000 UTC FinishedAt: 2026-08-19 12:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-19 12:24:32 +0000 UTC FinishedAt: 2026-08-19 12:26:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5341ea36-d197-482e-b2e3-5ad20bdc4e67,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-workflow9mk4m/series-workflow9mk4m-build-action-1108868298/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-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-19 12:26:40 +0000 UTC FinishedAt: 2026-08-19 12:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-19 12:26:40 +0000 UTC FinishedAt: 2026-08-19 12:26:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-19 12:26:40 +0000 UTC FinishedAt: 2026-08-19 12:46:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-19 12:26:40 +0000 UTC FinishedAt: 2026-08-19 12:46:58 +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:*626da12b-345c-4f9e-9b49-9e5bb20eaf4c,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-workflow9mk4m/series-workflow9mk4m-convert-artifact-1400598235/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": "4fa3f52b-8112-4a3b-a555-e37b4477dc4d", "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-workflow9mk4m/series-workflow9mk4m-build-action-1437537663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-19 12:26:40 +0000 UTC FinishedAt: 2026-08-19 12:46:48 +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:*626da12b-345c-4f9e-9b49-9e5bb20eaf4c,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-workflow9mk4m/series-workflow9mk4m-convert-artifact-1400598235/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": "4fa3f52b-8112-4a3b-a555-e37b4477dc4d", "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-workflow9mk4m/series-workflow9mk4m-build-action-1437537663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-19 12:46:58 +0000 UTC FinishedAt: 2026-08-19 12:46:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-19 12:46:58 +0000 UTC FinishedAt: 2026-08-19 12:46:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-19 12:46:58 +0000 UTC FinishedAt: 2026-08-19 12:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-19 12:46:58 +0000 UTC FinishedAt: 2026-08-19 12:48:58 +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:*4fa3f52b-8112-4a3b-a555-e37b4477dc4d,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-workflow9mk4m/series-workflow9mk4m-build-action-1437537663/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-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-19 12:49:08 +0000 UTC FinishedAt: 2026-08-19 13:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-19 12:49:08 +0000 UTC FinishedAt: 2026-08-19 13:46:28 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"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:*5341ea36-d197-482e-b2e3-5ad20bdc4e67,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4fa3f52b-8112-4a3b-a555-e37b4477dc4d,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-workflow9mk4m/series-workflow9mk4m-build-action-1108868298/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-workflow9mk4m/series-workflow9mk4m-build-action-1437537663/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-19 12:49:08 +0000 UTC FinishedAt: 2026-08-19 12:49:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-19 12:49:08 +0000 UTC FinishedAt: 2026-08-19 12:49:24 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"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-workflow9mk4m/series-workflow9mk4m-convert-artifact-149116628/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-19 12:49:08 +0000 UTC FinishedAt: 2026-08-19 12:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-19 12:49:08 +0000 UTC FinishedAt: 2026-08-19 12:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-19 12:49:08 +0000 UTC FinishedAt: 2026-08-19 12:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-19 12:49:31 +0000 UTC FinishedAt: 2026-08-19 13:46:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9mk4m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_pci_probe","ath12k_pci_config_irq","ath12k_pci_ext_irq_config"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5453bc3279e9f8578ac3e534d476240e40c879e1","config_name":"upstream-apparmor-kasan.config","enable_configs":["WLAN","WLAN_VENDOR_ATH","ATH12K"],"series_id":"d0b84d19-3cb6-42e1-a402-147373c7b6a1","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-19 12:49:31 +0000 UTC FinishedAt: 2026-08-19 13:46:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5341ea36-d197-482e-b2e3-5ad20bdc4e67,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4fa3f52b-8112-4a3b-a555-e37b4477dc4d,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-workflow9mk4m/series-workflow9mk4m-build-action-1108868298/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-workflow9mk4m/series-workflow9mk4m-build-action-1437537663/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-workflow9mk4m/series-workflow9mk4m-convert-artifact-149116628/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,}