Name: series-workflowfs7j2 Phase: Succeeded StartedAt: 2026-06-26 08:53:58 +0000 UTC FinishedAt: 2026-06-26 11:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[0] Phase: Succeeded StartedAt: 2026-06-26 08:53:58 +0000 UTC FinishedAt: 2026-06-26 09:21:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 08:53:58 +0000 UTC FinishedAt: 2026-06-26 09:21:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4edcdefd4083ae04b1a5656f4be6cd83ae919ef4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH12K" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4edcdefd4083ae04b1a5656f4be6cd83ae919ef4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH12K" ], "series_id": "0de4794d-03a3-49e2-ae06-824fe2d0e9ed" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath12k_qmi_host_cap_send", "ath12k_qmi_phy_cap_send" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDEySyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDEya19xbWlfaG9zdF9jYXBfc2VuZCYjMzQ7LAogICAgJiMzNDthdGgxMmtfcW1pX3BoeV9jYXBfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR5bmFtaWMgRERSIGFuZCBtZW1vcnkgc3VwcG9ydCBpbiB0aGUgYXRoMTJrIGRyaXZlciYjMzk7cyBRTUkgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBmaXJtd2FyZS4gSXQgbW9kaWZpZXMgdGhlIFFNSSBtZXNzYWdlIGVuY29kaW5nL2RlY29kaW5nIGFycmF5cyBhbmQgdGhlIGZ1bmN0aW9ucyBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBhbmQgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCB0byBzZXQgYW5kIHJlYWQgdGhlc2UgbmV3IGZpZWxkcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZHVyaW5nIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gd2hlbiBhIFFNSSBzZXJ2ZXIgKGZpcm13YXJlKSBhcnJpdmVzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhpcyBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRvIHByb2JlIHRoZSBhdGgxMmsgZHJpdmVyIGFuZCBlbXVsYXRpbmcgdGhlIFFNSSBmaXJtd2FyZSBzZXJ2aWNlIHZpYSBBRl9RSVBDUlRSIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZTcyYjRmNWZiODY5NGE4Nzk1ZGM3YjcwZjdkNzY0MDU4MDIwZjhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDk6MTY6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbmluZGV4IGZkNzYyYjVkN2JiNTk3Li5lMTVhMGMwMTIwZDNhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbkBAIC01MDYsNiAmIzQzOzUwNiwyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9lbGVtX2luZm8gcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMV9laVtdID0ge1xuIFx0XHQub2Zmc2V0XHRcdD0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDEsXG4gXHRcdFx0XHRcdCAgIGZlYXR1cmVfbGlzdCksXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5kYXRhX3R5cGVcdD0gUU1JX09QVF9GTEFHLFxuJiM0MztcdFx0LmVsZW1fbGVuXHQ9IDEsXG4mIzQzO1x0XHQuZWxlbV9zaXplXHQ9IHNpemVvZih1OCksXG4mIzQzO1x0XHQuYXJyYXlfdHlwZVx0PSBOT19BUlJBWSxcbiYjNDM7XHRcdC50bHZfdHlwZVx0PSAweDMzLFxuJiM0MztcdFx0Lm9mZnNldFx0XHQ9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxLFxuJiM0MztcdFx0XHRcdFx0ICAgZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCksXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGF0YV90eXBlXHQ9IFFNSV9VTlNJR05FRF8xX0JZVEUsXG4mIzQzO1x0XHQuZWxlbV9sZW5cdD0gMSxcbiYjNDM7XHRcdC5lbGVtX3NpemVcdD0gc2l6ZW9mKHU4KSxcbiYjNDM7XHRcdC5hcnJheV90eXBlXHQ9IE5PX0FSUkFZLFxuJiM0MztcdFx0LnRsdl90eXBlXHQ9IDB4MzMsXG4mIzQzO1x0XHQub2Zmc2V0XHRcdD0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDEsXG4mIzQzO1x0XHRcdFx0XHQgICBkeW5hbWljX21lbV9zdXBwb3J0KSxcbiYjNDM7XHR9LFxuIFx0e1xuIFx0XHQuZGF0YV90eXBlXHQ9IFFNSV9FT1RJLFxuIFx0XHQuYXJyYXlfdHlwZVx0PSBOT19BUlJBWSxcbkBAIC02MDIsNiAmIzQzOzYyMCwyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9lbGVtX2luZm8gcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMV9laVtdID0ge1xuIFx0XHQub2Zmc2V0ICAgICAgICAgPSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSxcbiBcdFx0XHRcdFx0ICAgc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQpLFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGF0YV90eXBlXHQ9IFFNSV9PUFRfRkxBRyxcbiYjNDM7XHRcdC5lbGVtX2xlblx0PSAxLFxuJiM0MztcdFx0LmVsZW1fc2l6ZVx0PSBzaXplb2YodTgpLFxuJiM0MztcdFx0LmFycmF5X3R5cGVcdD0gTk9fQVJSQVksXG4mIzQzO1x0XHQudGx2X3R5cGVcdD0gMHgxNyxcbiYjNDM7XHRcdC5vZmZzZXRcdFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSxcbiYjNDM7XHRcdFx0XHRcdCAgIGR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWQpLFxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmRhdGFfdHlwZVx0PSBRTUlfVU5TSUdORURfMV9CWVRFLFxuJiM0MztcdFx0LmVsZW1fbGVuXHQ9IDEsXG4mIzQzO1x0XHQuZWxlbV9zaXplXHQ9IHNpemVvZih1OCksXG4mIzQzO1x0XHQuYXJyYXlfdHlwZVx0PSBOT19BUlJBWSxcbiYjNDM7XHRcdC50bHZfdHlwZVx0PSAweDE3LFxuJiM0MztcdFx0Lm9mZnNldFx0XHQ9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxLFxuJiM0MztcdFx0XHRcdFx0ICAgZHluYW1pY19kZHJfc3VwcG9ydCksXG4mIzQzO1x0fSxcbiBcdHtcbiBcdFx0LmRhdGFfdHlwZVx0PSBRTUlfRU9USSxcbiBcdFx0LmFycmF5X3R5cGVcdD0gTk9fQVJSQVksXG5AQCAtMjI0OCw2ICYjNDM7MjI4NCwxMSBAQCBpbnQgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRpZiAoYWItXHUwMDNlcW1pLmR5bmFtaWNfZGRyX3N1cHBvcnQpIHtcbiYjNDM7XHRcdHJlcS5keW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkID0gMTtcbiYjNDM7XHRcdHJlcS5keW5hbWljX21lbV9zdXBwb3J0ID0gMTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0ID0gcW1pX3R4bl9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIFx1MDAyNnR4bixcbiBcdFx0XHQgICBxbWlfd2xhbmZ3X2hvc3RfY2FwX3Jlc3BfbXNnX3YwMV9laSwgXHUwMDI2cmVzcCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuQEAgLTIzMTksMTEgJiM0MzsyMzYwLDE0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXG4gXHRhYi1cdTAwM2VxbWkubnVtX3JhZGlvcyA9IHJlc3AubnVtX3BoeTtcbiBcbiYjNDM7XHRpZiAocmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKVxuJiM0MztcdFx0YWItXHUwMDNlcW1pLmR5bmFtaWNfZGRyX3N1cHBvcnQgPSByZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnQ7XG4mIzQzO1xuIFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19RTUksXG4tXHRcdCAgIFwmIzM0O3BoeSBjYXBhYmlsaXR5IHJlc3AgdmFsaWQgJWQgc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgJWQgdmFsaWQgJWQgbnVtX3BoeSAlZCB2YWxpZCAlZCBib2FyZF9pZCAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0O3BoeSBjYXBhYmlsaXR5IHJlc3AgdmFsaWQgJWQgc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgJWQgdmFsaWQgJWQgbnVtX3BoeSAlZCB2YWxpZCAlZCBib2FyZF9pZCAlZCBkeW5hbWljX2Rkcl92YWxpZCAldSBkeW5hbWljX2Rkcl9zdXBwb3J0ICV1XFxuXCYjMzQ7LFxuIFx0XHQgICByZXNwLnNpbmdsZV9jaGlwX21sb19zdXBwb3J0X3ZhbGlkLCByZXNwLnNpbmdsZV9jaGlwX21sb19zdXBwb3J0LFxuLVx0XHQgICByZXNwLm51bV9waHlfdmFsaWQsIHJlc3AubnVtX3BoeSxcbi1cdFx0ICAgcmVzcC5ib2FyZF9pZF92YWxpZCwgcmVzcC5ib2FyZF9pZCk7XG4mIzQzO1x0XHQgICByZXNwLm51bV9waHlfdmFsaWQsIHJlc3AubnVtX3BoeSwgcmVzcC5ib2FyZF9pZF92YWxpZCwgcmVzcC5ib2FyZF9pZCxcbiYjNDM7XHRcdCAgIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCwgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0KTtcbiBcbiBcdHJldHVybjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaFxuaW5kZXggMmE2M2UyMTRlYjQyYzUuLjliZGIyOTBlMmNjZTkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaFxuQEAgLTE1Niw5ICYjNDM7MTU2LDEwIEBAIHN0cnVjdCBhdGgxMmtfcW1pIHtcbiBcdHN0cnVjdCBtM19tZW1fcmVnaW9uIGF1eF91Y19tZW07XG4gXHR1bnNpZ25lZCBpbnQgc2VydmljZV9pbnNfaWQ7XG4gXHRzdHJ1Y3QgZGV2X21lbV9pbmZvIGRldl9tZW1bQVRIMTJLX1FNSV9XTEZXX01BWF9ERVZfTUVNX05VTV9WMDFdO1xuJiM0MztcdHU4IGR5bmFtaWNfZGRyX3N1cHBvcnQ7XG4gfTtcbiBcbi0jZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTlx0XHQyNjFcbiYjNDM7I2RlZmluZSBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9NU0dfVjAxX01BWF9MRU5cdFx0MjY1XG4gI2RlZmluZSBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9WMDFcdFx0XHQweDAwMzRcbiAjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVTUF9NU0dfVjAxX01BWF9MRU5cdDdcbiAjZGVmaW5lIFFNSV9XTEZXX0hPU1RfQ0FQX1JFU1BfVjAxXHRcdFx0MHgwMDM0XG5AQCAtMjU4LDcgJiM0MzsyNTksOCBAQCBzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMSB7XG4gXHRzdHJ1Y3Qgd2xmd19ob3N0X21sb19jaGlwX2luZm9fc192MDEgbWxvX2NoaXBfaW5mb1tRTUlfV0xGV19NQVhfTlVNX01MT19DSElQU19WMDFdO1xuIFx0dTggZmVhdHVyZV9saXN0X3ZhbGlkO1xuIFx0dTY0IGZlYXR1cmVfbGlzdDtcbi1cbiYjNDM7XHR1OCBkeW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkO1xuJiM0MztcdHU4IGR5bmFtaWNfbWVtX3N1cHBvcnQ7XG4gfTtcbiBcbiBzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXNwX21zZ192MDEge1xuQEAgLTI4MSw2ICYjNDM7MjgzLDggQEAgc3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEge1xuIFx0dTMyIGJvYXJkX2lkO1xuIFx0dTggc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQ7XG4gXHR1OCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydDtcbiYjNDM7XHR1OCBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkO1xuJiM0MztcdHU4IGR5bmFtaWNfZGRyX3N1cHBvcnQ7XG4gfTtcbiBcbiAjZGVmaW5lIFFNSV9XTEFORldfSU5EX1JFR0lTVEVSX1JFUV9NU0dfVjAxX01BWF9MRU5cdFx0NTRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVEgxMksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmQmIzM0OywKICAgICYjMzQ7YXRoMTJrX3FtaV9waHlfY2FwX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkeW5hbWljIEREUiBhbmQgbWVtb3J5IHN1cHBvcnQgaW4gdGhlIGF0aDEyayBkcml2ZXImIzM5O3MgUU1JIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUuIEl0IG1vZGlmaWVzIHRoZSBRTUkgbWVzc2FnZSBlbmNvZGluZy9kZWNvZGluZyBhcnJheXMgYW5kIHRoZSBmdW5jdGlvbnMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgdG8gc2V0IGFuZCByZWFkIHRoZXNlIG5ldyBmaWVsZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHdoZW4gYSBRTUkgc2VydmVyIChmaXJtd2FyZSkgYXJyaXZlcy4gU3l6a2FsbGVyIGNhbiB0cmlnZ2VyIHRoaXMgYnkgZW11bGF0aW5nIGEgUENJIGRldmljZSB0byBwcm9iZSB0aGUgYXRoMTJrIGRyaXZlciBhbmQgZW11bGF0aW5nIHRoZSBRTUkgZmlybXdhcmUgc2VydmljZSB2aWEgQUZfUUlQQ1JUUiBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZTcyYjRmNWZiODY5NGE4Nzk1ZGM3YjcwZjdkNzY0MDU4MDIwZjhiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMDk6MTY6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYwppbmRleCBmZDc2MmI1ZDdiYjU5Ny4uZTE1YTBjMDEyMGQzYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYwpAQCAtNTA2LDYgJiM0Mzs1MDYsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfZWxlbV9pbmZvIHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDFfZWlbXSA9IHsKIAkJLm9mZnNldAkJPSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMSwKIAkJCQkJICAgZmVhdHVyZV9saXN0KSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGF0YV90eXBlCT0gUU1JX09QVF9GTEFHLAomIzQzOwkJLmVsZW1fbGVuCT0gMSwKJiM0MzsJCS5lbGVtX3NpemUJPSBzaXplb2YodTgpLAomIzQzOwkJLmFycmF5X3R5cGUJPSBOT19BUlJBWSwKJiM0MzsJCS50bHZfdHlwZQk9IDB4MzMsCiYjNDM7CQkub2Zmc2V0CQk9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxLAomIzQzOwkJCQkJICAgZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCksCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5kYXRhX3R5cGUJPSBRTUlfVU5TSUdORURfMV9CWVRFLAomIzQzOwkJLmVsZW1fbGVuCT0gMSwKJiM0MzsJCS5lbGVtX3NpemUJPSBzaXplb2YodTgpLAomIzQzOwkJLmFycmF5X3R5cGUJPSBOT19BUlJBWSwKJiM0MzsJCS50bHZfdHlwZQk9IDB4MzMsCiYjNDM7CQkub2Zmc2V0CQk9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxLAomIzQzOwkJCQkJICAgZHluYW1pY19tZW1fc3VwcG9ydCksCiYjNDM7CX0sCiAJewogCQkuZGF0YV90eXBlCT0gUU1JX0VPVEksCiAJCS5hcnJheV90eXBlCT0gTk9fQVJSQVksCkBAIC02MDIsNiAmIzQzOzYyMCwyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9lbGVtX2luZm8gcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMV9laVtdID0gewogCQkub2Zmc2V0ICAgICAgICAgPSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSwKIAkJCQkJICAgc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQpLAogCX0sCiYjNDM7CXsKJiM0MzsJCS5kYXRhX3R5cGUJPSBRTUlfT1BUX0ZMQUcsCiYjNDM7CQkuZWxlbV9sZW4JPSAxLAomIzQzOwkJLmVsZW1fc2l6ZQk9IHNpemVvZih1OCksCiYjNDM7CQkuYXJyYXlfdHlwZQk9IE5PX0FSUkFZLAomIzQzOwkJLnRsdl90eXBlCT0gMHgxNywKJiM0MzsJCS5vZmZzZXQJCT0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEsCiYjNDM7CQkJCQkgICBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKSwKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLmRhdGFfdHlwZQk9IFFNSV9VTlNJR05FRF8xX0JZVEUsCiYjNDM7CQkuZWxlbV9sZW4JPSAxLAomIzQzOwkJLmVsZW1fc2l6ZQk9IHNpemVvZih1OCksCiYjNDM7CQkuYXJyYXlfdHlwZQk9IE5PX0FSUkFZLAomIzQzOwkJLnRsdl90eXBlCT0gMHgxNywKJiM0MzsJCS5vZmZzZXQJCT0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEsCiYjNDM7CQkJCQkgICBkeW5hbWljX2Rkcl9zdXBwb3J0KSwKJiM0MzsJfSwKIAl7CiAJCS5kYXRhX3R5cGUJPSBRTUlfRU9USSwKIAkJLmFycmF5X3R5cGUJPSBOT19BUlJBWSwKQEAgLTIyNDgsNiAmIzQzOzIyODQsMTEgQEAgaW50IGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAoYWItJmd0O3FtaS5keW5hbWljX2Rkcl9zdXBwb3J0KSB7CiYjNDM7CQlyZXEuZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCA9IDE7CiYjNDM7CQlyZXEuZHluYW1pY19tZW1fc3VwcG9ydCA9IDE7CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBxbWlfdHhuX2luaXQoJmFtcDthYi0mZ3Q7cW1pLmhhbmRsZSwgJmFtcDt0eG4sCiAJCQkgICBxbWlfd2xhbmZ3X2hvc3RfY2FwX3Jlc3BfbXNnX3YwMV9laSwgJmFtcDtyZXNwKTsKIAlpZiAocmV0ICZsdDsgMCkKQEAgLTIzMTksMTEgJiM0MzsyMzYwLDE0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiAKIAlhYi0mZ3Q7cW1pLm51bV9yYWRpb3MgPSByZXNwLm51bV9waHk7CiAKJiM0MzsJaWYgKHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCkKJiM0MzsJCWFiLSZndDtxbWkuZHluYW1pY19kZHJfc3VwcG9ydCA9IHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydDsKJiM0MzsKIAlhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSwKLQkJICAgJiMzNDtwaHkgY2FwYWJpbGl0eSByZXNwIHZhbGlkICVkIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0ICVkIHZhbGlkICVkIG51bV9waHkgJWQgdmFsaWQgJWQgYm9hcmRfaWQgJWRcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDtwaHkgY2FwYWJpbGl0eSByZXNwIHZhbGlkICVkIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0ICVkIHZhbGlkICVkIG51bV9waHkgJWQgdmFsaWQgJWQgYm9hcmRfaWQgJWQgZHluYW1pY19kZHJfdmFsaWQgJXUgZHluYW1pY19kZHJfc3VwcG9ydCAldVxuJiMzNDssCiAJCSAgIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQsIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQsCi0JCSAgIHJlc3AubnVtX3BoeV92YWxpZCwgcmVzcC5udW1fcGh5LAotCQkgICByZXNwLmJvYXJkX2lkX3ZhbGlkLCByZXNwLmJvYXJkX2lkKTsKJiM0MzsJCSAgIHJlc3AubnVtX3BoeV92YWxpZCwgcmVzcC5udW1fcGh5LCByZXNwLmJvYXJkX2lkX3ZhbGlkLCByZXNwLmJvYXJkX2lkLAomIzQzOwkJICAgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkLCByZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnQpOwogCiAJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaAppbmRleCAyYTYzZTIxNGViNDJjNS4uOWJkYjI5MGUyY2NlOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaApAQCAtMTU2LDkgJiM0MzsxNTYsMTAgQEAgc3RydWN0IGF0aDEya19xbWkgewogCXN0cnVjdCBtM19tZW1fcmVnaW9uIGF1eF91Y19tZW07CiAJdW5zaWduZWQgaW50IHNlcnZpY2VfaW5zX2lkOwogCXN0cnVjdCBkZXZfbWVtX2luZm8gZGV2X21lbVtBVEgxMktfUU1JX1dMRldfTUFYX0RFVl9NRU1fTlVNX1YwMV07CiYjNDM7CXU4IGR5bmFtaWNfZGRyX3N1cHBvcnQ7CiB9OwogCi0jZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTgkJMjYxCiYjNDM7I2RlZmluZSBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9NU0dfVjAxX01BWF9MRU4JCTI2NQogI2RlZmluZSBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9WMDEJCQkweDAwMzQKICNkZWZpbmUgUU1JX1dMQU5GV19IT1NUX0NBUF9SRVNQX01TR19WMDFfTUFYX0xFTgk3CiAjZGVmaW5lIFFNSV9XTEZXX0hPU1RfQ0FQX1JFU1BfVjAxCQkJMHgwMDM0CkBAIC0yNTgsNyAmIzQzOzI1OSw4IEBAIHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxIHsKIAlzdHJ1Y3Qgd2xmd19ob3N0X21sb19jaGlwX2luZm9fc192MDEgbWxvX2NoaXBfaW5mb1tRTUlfV0xGV19NQVhfTlVNX01MT19DSElQU19WMDFdOwogCXU4IGZlYXR1cmVfbGlzdF92YWxpZDsKIAl1NjQgZmVhdHVyZV9saXN0OwotCiYjNDM7CXU4IGR5bmFtaWNfbWVtX3N1cHBvcnRfdmFsaWQ7CiYjNDM7CXU4IGR5bmFtaWNfbWVtX3N1cHBvcnQ7CiB9OwogCiBzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXNwX21zZ192MDEgewpAQCAtMjgxLDYgJiM0MzsyODMsOCBAQCBzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSB7CiAJdTMyIGJvYXJkX2lkOwogCXU4IHNpbmdsZV9jaGlwX21sb19zdXBwb3J0X3ZhbGlkOwogCXU4IHNpbmdsZV9jaGlwX21sb19zdXBwb3J0OwomIzQzOwl1OCBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkOwomIzQzOwl1OCBkeW5hbWljX2Rkcl9zdXBwb3J0OwogfTsKIAogI2RlZmluZSBRTUlfV0xBTkZXX0lORF9SRUdJU1RFUl9SRVFfTVNHX1YwMV9NQVhfTEVOCQk1NAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYwCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIEF0aDEyayBRTUkgUGF0Y2ggaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBgZHluYW1pY19kZHJfc3VwcG9ydGAgYW5kIGBkeW5hbWljX21lbV9zdXBwb3J0YCB0byB0aGUgUU1JIG1lc3NhZ2VzIGluIGBhdGgxMmtgLiBUaGlzIGlzIGZvciBRdWFsY29tbSYjMzk7cyBXaS1GaSA3IGRldmljZXMsIGFuZCBpdCBtb2RpZmllcyBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBhbmQgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGhvdyByZWFjaGFibGUgaXMgdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoZSBgYXRoMTJrYCBkcml2ZXIgdXN1YWxseSBkZXBlbmRzIG9uIHNwZWNpZmljIGhhcmR3YXJlLCBsaWtlIFBDSWUgb3IgQUhCIGRldmljZXMuCgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBgbWFjODAyMTFfaHdzaW1gIGNvdmVycyB0aGlzLCBidXQgbm8sIHRoYXQmIzM5O3MgYSBtYWM4MDIxMSAqc2ltdWxhdG9yKiwgbm90IGEgZnVsbCBgYXRoMTJrYCBoYXJkd2FyZSBtb2RlbC4gU28sIGNhbiB3ZSBmdXp6IHRoaXMgdmlhIGEgdmlydHVhbCBidXMgb3IgZGlyZWN0bHkgdGhyb3VnaCBRTUk/IFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IFFNSSwgdGhlIFF1YWxjb21tIE1TTSBJbnRlcmZhY2UsIHdoaWNoIHR5cGljYWxseSB1c2VzIElQQyByb3V0ZXIgKEFGX1FJUENSVFIpIG9yIHNpbWlsYXIuIEluIHRoZSBgYXRoMTJrYCBjb250ZXh0LCB0aGlzIGlzIGhvdyB3ZSB0YWxrIHRvIHRoZSBmaXJtd2FyZSAqb24qIHRoZSBXaS1GaSBjaGlwLgoKVGhlIG5leHQgcXVlc3Rpb24gaXMsIGNhbiB3ZSBldmVuIHByb2JlIGBhdGgxMmtgIHdpdGhvdXQgdGhlIGhhcmR3YXJlIHByZXNlbnQ/IFBDSSBkcml2ZXJzIG9mdGVuIHJlcXVpcmUgYSB2aXJ0dWFsIFBDSSBkZXZpY2UuIFN5emthbGxlciAqY2FuKiBkbyBQQ0kgZnV6emluZywgbWF5YmUgd2l0aCBgdmhjaWAgb3Igc2ltaWxhciwgb3IgcG90ZW50aWFsbHkgd2l0aCB0aG9zZSBgc3l6X3BjaV8uLi5gIHBzZXVkby1zeXNjYWxscyBidXQgaXRzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcyBhcmUgbGltaXRlZCB3aXRob3V0IGEgbW9jay11cC4gQnV0IHNpbmNlIHRoaXMgaXMgUU1JLCBhbmQgUU1JIG1lc3NhZ2VzIGFyZSAqc2VudCogdG8gdGhlIGZpcm13YXJlLCB3aGljaCBpc24mIzM5O3QgdGhlcmUgd2l0aG91dCB0aGUgaGFyZHdhcmUsIHRob3NlIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGFuZCBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIGZ1bmN0aW9ucyBtaWdodCBub3QgYmUgZXZlbiBiZSByZWFjaGFibGUuIEkgc2hvdWxkIGNoZWNrIHRoZSBgYXRoMTJrYCBpbml0aWFsaXphdGlvbiBwYXRoIGFuZCBzZWUgaG93IHRoZSBkcml2ZXIgc3RhcnRzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19xbWlfaG9zdF9jYXBfc2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9MjIzNT1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjIyMzY6aW50IGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0yMjM3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM5OTQ9c3RhdGljIGludCBhdGgxMmtfcW1pX2V2ZW50X2hvc3RfY2FwKHN0cnVjdCBhdGgxMmtfcW1pICpxbWkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTk5Olx0cmV0ID0gYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDAwMC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIHRoZSBjb250ZXh0IG9mIHNvbWVvbmUgZXhwZXJpZW5jZWQgaW4gdGhlaXIgZmllbGQ6CgoqKkRlY29kaW5nIFRoaXMgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcGAuIFRoYXQgZnVuY3Rpb24gbmFtZSYjMzk7cyByaW5naW5nIGEgYmVsbCDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSB0aWVkIHRvIHRoZSBBdGhlcm9zIChvciBhdCBsZWFzdCwgdGhlIG9sZGVyIGF0aDEyaykgd2lyZWxlc3MgZHJpdmVyIGFuZCwgc3BlY2lmaWNhbGx5LCBRTUkgZXZlbnRzLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEkmIzM5O2QgYmV0IHRoaXMgZnVuY3Rpb24mIzM5O3Mgam9iIGlzIHRvIGhhbmRsZSBvciBpbnRlcnByZXQgc29tZSBraW5kIG9mIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gYmVpbmcgcmVwb3J0ZWQgYmFjayBmcm9tIHRoZSBRTUkgc2lkZSBvZiB0aGluZ3MuCgpUaGUgY3JpdGljYWwgcGllY2UgaGVyZSwgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgaXMgdGhhdCBJIGtub3cgdGhpcyBpcyBtb3N0IGxpa2VseSBjYWxsZWQgd2l0aGluIGEgd29ya3F1ZXVlIGNvbnRleHQuIGBxbWlfZXZlbnRgIGlzIGEgZGVhZCBnaXZlYXdheS4gVGhhdCBtZWFucyB3aGF0ZXZlciBgYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcGAgaXMgZG9pbmcgaGFzIGJlZW4gKnF1ZXVlZCogdG8gcnVuIGxhdGVyLiBUaGlzIGlzIGtleSBiZWNhdXNlIGl0IG1lYW5zIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhpbmdzIGxpa2UgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgdmVyeSBjYXJlZnVsbHkuIFdlJiMzOTtyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIGV2ZW50IHByb2Nlc3NpbmcsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSBoYXJkd2FyZS4gVW5kZXJzdGFuZGluZyB0aGUgd29ya3F1ZXVlJiMzOTtzIGNoYXJhY3RlcmlzdGljcyBpcyBhYnNvbHV0ZWx5IHZpdGFsIGZvciBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gQW55IG5vbi1hdG9taWMgb3BlcmF0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlIHNvbWV0aGluZyB0byBzY3J1dGluaXplIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzk4OT1zdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9vcHMgYXRoMTJrX3FtaV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTkzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTk0OnN0YXRpYyBpbnQgYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcChzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTk1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTQwMDk9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDY1LVx0XHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfSE9TVF9DQVA6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjQwNjY6XHRcdFx0cmV0ID0gYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcChxbWkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDY3LVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU1OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFNwZWNpZmljIEZ1bmN0aW9uIENhbGwqKgoKU28sIHRoZSBxdWVzdGlvbiB0aGF0JiMzOTtzIHBpcXVlZCBteSBpbnRlcmVzdCByaWdodCBub3cgaXMsICYjMzQ7V2hhdCBhYm91dCBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgPyYjMzQ7IEkgc2VlIHRoYXQgZnVuY3Rpb24gY2FsbCBhbmQgaW1tZWRpYXRlbHkgc3RhcnQgdG8gdGhpbmsgYWJvdXQgdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCYjMzk7cyBpdCBkb2luZz8gSXMgaXQgYSBrZXkgcGFydCBvZiB0aGUgUU1JIChRdWFsY29tbSBNU00gSW50ZXJmYWNlKSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGF0aDEyayBkcml2ZXIsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBQSFkgY2FwYWJpbGl0aWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIElzIGl0IHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIFBIWSBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIHRvIHRoZSBtb2RlbT8gSWYgc28sIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgcHJvdG9jb2w/IElzIHRoaXMgYSBjcml0aWNhbCBwaWVjZSBmb3IgbmVnb3RpYXRpb24sIHNldHVwLCBvciBqdXN0IHJlcG9ydGluZz8KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgaWYgdGhpcyBmdW5jdGlvbiBoYXMgaXNzdWVzLiBEb2VzIGEgcHJvYmxlbSBoZXJlIGxlYWQgdG8gY29ubmVjdGlvbiBwcm9ibGVtcywgdGhyb3VnaHB1dCBsaW1pdGF0aW9ucywgb3IgZXZlbiBkZXZpY2UgaW5zdGFiaWxpdHk/IEFyZSB0aGVyZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBvciByZXR1cm4gdmFsdWVzIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGluIGFueSBkZWJ1Z2dpbmcgbG9ncz8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIGNhbGwgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGludm9rZWQsIGFuZCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciBpdC4gRGlnZ2luZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgbGlrZWx5IGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgcHJvYmxlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3FtaV9waHlfY2FwX3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTIyMzY9aW50IGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMjMyMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MjMyMjpzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0yMzIzLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM3NTg9aW50IGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZShzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzc2My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6Mzc2NDpcdGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzc2NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYXRoMTJrIFFNSSBTZXJ2ZXIgQXJyaXZhbCoqCgpPa2F5LCBzbyBgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlYCBnZXRzIHRyaWdnZXJlZCB3aGVuIHRoZSBRTUkgc2VydmVyIHNob3dzIHVwLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBpbXBvcnRhbnQgdGhpbmcgaXMsIHRoaXMgd2hvbGUgcHJvY2VzcyBoaW5nZXMgb24gdGhlIGBhdGgxMmtgIGRyaXZlciBiZWluZyBwcm9wZXJseSBwcm9iZWQgZmlyc3QuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IGNhbiBJIGFjdHVhbGx5IHByb2JlIGBhdGgxMmtgIHdpdGhvdXQgaGF2aW5nIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50PyBUaGF0IHdvdWxkIGJlIGluY3JlZGlibHkgdXNlZnVsIGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudCwgd2l0aG91dCBiZWluZyB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGZpbmQgb3V0LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgLCB0aGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEFuZCBvZiBjb3Vyc2UsIGBtYWMuY2AgYW5kIG90aGVyIHJlbGV2YW50IGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IGFyZSBhbHNvIGxpa2VseSB0byBob2xkIHNvbWUgY2x1ZXMuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIHByb2JpbmcgcmVxdWlyZW1lbnRzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYz01NT1zdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM6NjQ6bW9kdWxlX2luaXQoYXRoMTJrX3dpZmk3X2luaXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNjUtbW9kdWxlX2V4aXQoYXRoMTJrX3dpZmk3X2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjcxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYXRoMTJrYCBNb2R1bGUqKgoKT2theSwgc28gYGF0aDEya2AgaXMgYSBtb2R1bGUsIHJpZ2h0PyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGtub3cgd2hhdCBidXNlcyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRvIHByb3Blcmx5IGRpYWdub3NlIGFueSBpc3N1ZXMgb3Igb3B0aW1pemUgaXRzIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYnVzZXMgaXMgdGhpcyBtb2R1bGUgYWN0dWFsbHkgdXNpbmc/IFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBzeXN0ZW0mIzM5O3MgaW50ZWdyYXRpb24gYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBpcyB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBuZWVkcyBhbnN3ZXJpbmcuIEtub3dpbmcgaG93IGl0JiMzOTtzIGNvbm5lY3RlZCBoZWxwcyBpbiBkZXRlcm1pbmluZyB0aGUgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBBcmNoaXRlY3R1cmUqKgoKQWxyaWdodCwgZ2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gZWl0aGVyIGBwY2kuY2Agb3IgYGFoYi5jYC4gVGhlIHByb2JsZW0gbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBwZXJpcGhlcmFsIGNvbW11bmljYXRpb24uIFRoaXMgcG9pbnRzIG1lIGRpcmVjdGx5IHRvIHRob3NlIGZpbGVzLiBFaXRoZXIgdGhlIFBDSSBidXMgaXMgaW52b2x2ZWQsIG9yIGl0JiMzOTtzIGNvbm5lY3RlZCB0byB0aGUgQUhCIGJ1cy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHdoaWNoZXZlciBsb29rcyBsaWtlIHRoZSBtb3JlIGxpa2VseSBzdXNwZWN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNpdHVhdGlvbiDigJMgbWF5YmUgSSByZW1lbWJlciBzb21ldGhpbmcgc3BlY2lmaWMgYWJvdXQgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEkmIzM5O2xsIHF1aWNrbHkgZWxpbWluYXRlIG9uZSBvciB0aGUgb3RoZXIuIFRoaXMgaXMgYWJvdXQgZWZmaWNpZW50bHkgcGlucG9pbnRpbmcgdGhlIGVudHJ5IHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBObyBuZWVkIHRvIHdhc3RlIHRpbWU7IGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthY3BpLmMmIzM0OywKICAgICYjMzQ7YWNwaS5oJiMzNDssCiAgICAmIzM0O2FoYi5jJiMzNDssCiAgICAmIzM0O2FoYi5oJiMzNDssCiAgICAmIzM0O2NlLmMmIzM0OywKICAgICYjMzQ7Y2UuaCYjMzQ7LAogICAgJiMzNDtjbW5fZGVmcy5oJiMzNDssCiAgICAmIzM0O2NvcmUuYyYjMzQ7LAogICAgJiMzNDtjb3JlLmgmIzM0OywKICAgICYjMzQ7Y29yZWR1bXAuYyYjMzQ7LAogICAgJiMzNDtjb3JlZHVtcC5oJiMzNDssCiAgICAmIzM0O2RicmluZy5jJiMzNDssCiAgICAmIzM0O2RicmluZy5oJiMzNDssCiAgICAmIzM0O2RlYnVnLmMmIzM0OywKICAgICYjMzQ7ZGVidWcuaCYjMzQ7LAogICAgJiMzNDtkZWJ1Z2ZzLmMmIzM0OywKICAgICYjMzQ7ZGVidWdmcy5oJiMzNDssCiAgICAmIzM0O2RlYnVnZnNfaHR0X3N0YXRzLmMmIzM0OywKICAgICYjMzQ7ZGVidWdmc19odHRfc3RhdHMuaCYjMzQ7LAogICAgJiMzNDtkZWJ1Z2ZzX3N0YS5jJiMzNDssCiAgICAmIzM0O2RlYnVnZnNfc3RhLmgmIzM0OywKICAgICYjMzQ7ZHAuYyYjMzQ7LAogICAgJiMzNDtkcC5oJiMzNDssCiAgICAmIzM0O2RwX2Ntbi5oJiMzNDssCiAgICAmIzM0O2RwX2h0dC5jJiMzNDssCiAgICAmIzM0O2RwX2h0dC5oJiMzNDssCiAgICAmIzM0O2RwX21vbi5jJiMzNDssCiAgICAmIzM0O2RwX21vbi5oJiMzNDssCiAgICAmIzM0O2RwX3BlZXIuYyYjMzQ7LAogICAgJiMzNDtkcF9wZWVyLmgmIzM0OywKICAgICYjMzQ7ZHBfcnguYyYjMzQ7LAogICAgJiMzNDtkcF9yeC5oJiMzNDssCiAgICAmIzM0O2RwX3R4LmMmIzM0OywKICAgICYjMzQ7ZHBfdHguaCYjMzQ7LAogICAgJiMzNDtmdy5jJiMzNDssCiAgICAmIzM0O2Z3LmgmIzM0OywKICAgICYjMzQ7aGFsLmMmIzM0OywKICAgICYjMzQ7aGFsLmgmIzM0OywKICAgICYjMzQ7aGlmLmgmIzM0OywKICAgICYjMzQ7aHRjLmMmIzM0OywKICAgICYjMzQ7aHRjLmgmIzM0OywKICAgICYjMzQ7aHcuaCYjMzQ7LAogICAgJiMzNDttYWMuYyYjMzQ7LAogICAgJiMzNDttYWMuaCYjMzQ7LAogICAgJiMzNDttaGkuYyYjMzQ7LAogICAgJiMzNDttaGkuaCYjMzQ7LAogICAgJiMzNDtwMnAuYyYjMzQ7LAogICAgJiMzNDtwMnAuaCYjMzQ7LAogICAgJiMzNDtwY2kuYyYjMzQ7LAogICAgJiMzNDtwY2kuaCYjMzQ7LAogICAgJiMzNDtwZWVyLmMmIzM0OywKICAgICYjMzQ7cGVlci5oJiMzNDssCiAgICAmIzM0O3FtaS5jJiMzNDssCiAgICAmIzM0O3FtaS5oJiMzNDssCiAgICAmIzM0O3JlZy5jJiMzNDssCiAgICAmIzM0O3JlZy5oJiMzNDssCiAgICAmIzM0O3Rlc3Rtb2RlLmMmIzM0OywKICAgICYjMzQ7dGVzdG1vZGUuaCYjMzQ7LAogICAgJiMzNDt0aGVybWFsLmMmIzM0OywKICAgICYjMzQ7dGhlcm1hbC5oJiMzNDssCiAgICAmIzM0O3RyYWNlLmMmIzM0OywKICAgICYjMzQ7dHJhY2UuaCYjMzQ7LAogICAgJiMzNDt3bWkuYyYjMzQ7LAogICAgJiMzNDt3bWkuaCYjMzQ7LAogICAgJiMzNDt3b3cuYyYjMzQ7LAogICAgJiMzNDt3b3cuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDt3aWZpNyYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzIKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUENJIERyaXZlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBQQ0kgZHJpdmVyIGdldHMgaW5pdGlhbGl6ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBjb3JlIFBDSSBkcml2ZXIgY29kZSwgcHJvYmFibHkgYHBjaS5jYC4gSSBuZWVkIHRvIGxvb2sgZm9yIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBob29rcy4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgYG1vZHVsZV9pbml0YCwgb3IgYW55dGhpbmcgc2ltaWxhciB0aGF0IGhhbmRsZXMgZHJpdmVyIHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgYW5kIGl0JiMzOTtsbCBnaXZlIG1lIGEgcm9hZG1hcCBvZiBob3cgdGhlIGRyaXZlciBpcyBicm91Z2h0IHRvIGxpZmUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgUENJIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXR8bW9kdWxlX3BjaV9kcml2ZXJ8cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBfX21heWJlX3VudXNlZCBhdGgxMmtfcGNpX3BtX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MDQ6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODA1LVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MzE6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihwY2lfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgzMi19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MzM6RVhQT1JUX1NZTUJPTChhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXJgIEZ1bmN0aW9uKioKClJpZ2h0LCBgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXJgIGlzIGV4cG9ydGVkLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtJbnRlcmVzdGluZy4gTGV0JiMzOTtzIHNlZSB3aG8mIzM5O3MgYWN0dWFsbHkgbWFraW5nIHVzZSBvZiB0aGlzLiYjMzQ7IFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgaW1wbGllcyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUgaXQmIzM5O3MgZGVmaW5lZCBpbi4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgdGhlIG1vZHVsZSYjMzk7cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBoYW5kbGluZyB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBQQ0kgZHJpdmVyIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uLCBhcmUgd2UgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgZGV2aWNlIElELCBhcmUgdGhlcmUgYW55IHF1aXJrcyBpbiBwbGF5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTc5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgX19tYXliZV91bnVzZWQgYXRoMTJrX3BjaV9wbV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODAzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODA0OmludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgwNS1cdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICpkcml2ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMyLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgzMzpFWFBPUlRfU1lNQk9MKGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgzNC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oPTE3Nj12b2lkIGF0aDEya19wY2lfcG93ZXJfZG93bihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIGlzX3N1c3BlbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzc6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzgtXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE5Nz1pbnQgYXRoMTJrX3dpZmk3X3BjaV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0yMDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjIwMTpcdHJldCA9IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKEFUSDEyS19ERVZJQ0VfRkFNSUxZX1dJRkk3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0yMDItXHRcdFx0XHRcdCBcdTAwMjZhdGgxMmtfd2lmaTdfcGNpX2RyaXZlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgYGF0aDEya2AgRHJpdmVyKioKCk9rYXksIHNvIGBhdGgxMmtgIGlzIGEgUENJIGRyaXZlciwgYW5kIGFsc28gYW4gQUhCIGRyaXZlciwgcmlnaHQ/IE15IGluaXRpYWwgdGhvdWdodCBpczogQ2FuIHN5emthbGxlciBldmVuIHRvdWNoIFBDSSBkZXZpY2VzPyBJIGtub3cgaXQgaGFzIHNvbWUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLCB0aGluZ3MgbGlrZSBgc3l6X3BjaV8uLi5gIHBzZXVkby1zeXNjYWxscyBhbmQgdGhlIGB2aGNpYCBpbnRlcmZhY2UgaWYgaXQmIzM5O3MgVVNCLCBidXQgZm9yIFBDSSBzcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGBzeXpfcGNpX2RldmljZV9hZGRgIGFuZCBzdWNoLiBIb3dldmVyLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBzZWVtcyBRTUkgbWVzc2FnZXMgYXJlIGdvaW5nIGJhY2sgYW5kIGZvcnRoIHdpdGggZmlybXdhcmUuCgpUaGUgYmlnIHF1ZXN0aW9uIG5vdyBpczogRG9lcyBzeXprYWxsZXIgZG8gYW55dGhpbmcgd2l0aCBRTUkgbWVzc2FnZXM/IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIHN5emthbGxlciBoYXMgYW55IFFNSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4KCkFoLCB3YWl0LiBUaGUgcHJvbXB0IHNwZWNpZmllcyB0aGlzOiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IE9rYXksIEkmIzM5O20gdGhpbmtpbmcsIGlmIHRoaXMgKmRvZXMqIG1vZGlmeSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIG15IHRhc2sgaXMgdG8gdmVyaWZ5IGNvZGUgZXhlY3V0aW9uIHVzaW5nIG15IHByZWZlcnJlZCBjb2RlIHNlYXJjaCB0b29scywgYW5kIHRoZW4gZGVjaWRlIG9uIFdvcnRoRnV6emluZz10cnVlLgoKSG9sZCBvbiwgYGF0aDEya2AgaXMgYSAqZHJpdmVyKiBmb3IgKnNwZWNpZmljKiBoYXJkd2FyZS4gRG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgZnV6eiB0aGUgYGF0aDEya2AgZHJpdmVyIGl0c2VsZj8gSSBrbm93IHN5emthbGxlciBjYW4gZnV6eiBQQ0kgZGV2aWNlcywgYmFzaWNhbGx5IGJ5IGVtdWxhdGluZyB0aGVtLCB3aXRoIHRoaW5ncyBsaWtlIGBzeXpfcGNpXy4uLmAsIGJ1dCB0aGUgdHJpY2t5IHBhcnQgaXMgdGhhdCBgYXRoMTJrYCByZXF1aXJlcyBmaXJtd2FyZSB0byBiZSBsb2FkZWQgYW5kLCB0aGVuIGl0IGNvbW11bmljYXRlcyB3aXRoIHRoZSBmaXJtd2FyZSB1c2luZyBRTUksIHdoaWNoIGlzIG5vdCBhcyBzaW1wbGUgYXMgZnV6emluZyBhIHJlZ3VsYXIgUENJIGRldmljZS4KCklmIHRoZSBmaXJtd2FyZSBpc24mIzM5O3QgdGhlcmUsIHRoZSBkcml2ZXIgd29uJiMzOTt0IGV2ZW4gKnByb2JlKiBzdWNjZXNzZnVsbHkuIFNvLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBwcm9iZSB3b3Jrcywgd2hlcmUgaXMgdGhlIGluaXRpYWwgcG9pbnQ/IE9rYXksIGxldCYjMzk7cyBsb29rIGF0IGBhdGgxMmtfcGNpX3Byb2JlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3BjaV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUwMz1hdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTI0OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUyNS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODA0PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjUtXHRwY2lfZHJpdmVyLVx1MDAzZWlkX3RhYmxlID0gZHJpdmVyLVx1MDAzZWlkX3RhYmxlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODI2Olx0cGNpX2RyaXZlci1cdTAwM2Vwcm9iZSA9IGF0aDEya19wY2lfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjctXHRwY2lfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19wY2lfcmVtb3ZlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3NQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgYXRoMTJrX3BjaV9wcm9iZWA6CgoqKkFuYWx5emluZyBgYXRoMTJrX3BjaV9wcm9iZWAqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGF0aDEya19wY2lfcHJvYmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIHdoYXQgdGhlIGJyb2FkZXIgY29udGV4dCBpcy4gUmlnaHQsIHRoaXMgaXMgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGF0aDEyayBkcml2ZXIuIFRoYXQgbWVhbnMgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIHRyaWVzIHRvIGRldGVjdCBhbmQgaW5pdGlhbGl6ZSBhbiBhdGgxMmstYmFzZWQgV2ktRmkgZGV2aWNlIGNvbm5lY3RlZCB2aWEgUENJLiBUaGF0IGltbWVkaWF0ZWx5IGhpZ2hsaWdodHMgYSBmZXcga2V5IGFyZWFzIEkgbmVlZCB0byBmb2N1cyBvbjogZGV2aWNlIGRldGVjdGlvbiBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBkcml2ZXImIzM5O3MgaW5pdGlhbCBjb250YWN0IHdpdGggdGhlIGhhcmR3YXJlLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBhcmd1bWVudHMuIEkmIzM5O20gYXNzdW1pbmcgaXQgcmVjZWl2ZXMgYSBgcGNpX2RldmAgcG9pbnRlci4gT2theSwgc28gdGhhdCBzaG91bGQgY29udGFpbiB0aGUgUENJIGRldmljZSBzdHJ1Y3R1cmUgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWMgUENJIGRldmljZSBiZWluZyBwcm9iZWQuIFRoZW4gdGhlIGZ1bmN0aW9uIGhhcyB0byBiZWdpbiBieSBjaGVja2luZyB0aGUgZGV2aWNlIElEIGFnYWluc3QgYSBsaXN0IG9mIHN1cHBvcnRlZCBkZXZpY2VzLCBwcm9iYWJseSBpbiBhIGBwY2lfZGV2aWNlX2lkYCB0YWJsZS4gSSB3YW50IHRvIGNoZWNrIGhvdyByb2J1c3QgdGhhdCBJRCBjaGVjayBpcy4gRG9lcyBpdCBoYXZlIG11bHRpcGxlIGlkZW50aWZpZXJzLCBvciBqdXN0IG9uZT8gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgbWF0Y2hpbmcgcHJvY2VzcyBpcyBjcml0aWNhbCB0byBhdm9pZGluZyBjb2xsaXNpb25zIHdpdGggb3RoZXIgZHJpdmVycy4KClRoZW4sIHRoZXJlIG11c3QgYmUgYSBzZXJpZXMgb2YgaW5pdGlhbGl6YXRpb24gc3RlcHMuIEkmIzM5O20gbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbjoKCiogICAqKk1hcHMgdGhlIFBDSSBCQVJzIChCYXNlIEFkZHJlc3MgUmVnaXN0ZXJzKS4qKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgYWNjZXNzaW5nIHRoZSBkZXZpY2UmIzM5O3MgcmVnaXN0ZXJzIGluIG1lbW9yeSBzcGFjZS4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZSBtYXBwaW5nIHByb2Nlc3MuIERvZXMgaXQgdW5tYXAgdGhlbSBvbiBlcnJvcj8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBzcGVjaWFsIGhhbmRsaW5nIG9mIGRpZmZlcmVudCBCQVIgdHlwZXMgKGUuZy4sIG1lbW9yeSB2cy4gSU8pLiBBcmUgdGhlcmUgYW55IHF1aXJrcyBuZWVkZWQgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmU/CiogICAqKlJlcXVlc3RzIERNQSByZXNvdXJjZXMuKiogQW55IG1vZGVybiB3aXJlbGVzcyBkcml2ZXIgbmVlZHMgRE1BLiBJJiMzOTtkIG5lZWQgdG8gZXhhbWluZSBob3cgdGhlIG1lbW9yeSByZWdpb25zIGFyZSBzZXQgdXAgYW5kIGhvdyB0aGUgRE1BIGNvbmZpZ3VyYXRpb24gaXMgbWFuYWdlZC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBhbGlnbm1lbnQgY29uc3RyYWludHMgb3IgYnVmZmVyIHNpemUgbGltaXRhdGlvbnM/IEFueSBwb3RlbnRpYWwgZm9yIERNQSBidWZmZXIgb3ZlcmZsb3dzPwoqICAgKipHZXRzIHRoZSBwbGF0Zm9ybSBkYXRhLioqIFdoYXQgc3RydWN0dXJlcyBhcmUgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZGV2aWNlIGluIHNvZnR3YXJlLCBhbmQgaG93IGlzIGl0IHBvcHVsYXRlZCAobGlrZSB0aGUgYXNzb2NpYXRlZCBmaXJtd2FyZSBmaWxlLCBmb3IgZXhhbXBsZSk/CiogICAqKlJlZ2lzdGVycyB0aGUgZGV2aWNlLioqIEZpbmFsbHksIGl0IGxpa2VseSByZWdpc3RlcnMgdGhlIG5ld2x5IGRpc2NvdmVyZWQgV2ktRmkgZGV2aWNlIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBJIHdhbnQgdG8gc2VlIHdoZXJlIGl0IGhvb2tzIGludG8gdGhlIGNvcmUgbmV0d29yayBpbnRlcmZhY2VzLgoKQmV5b25kIHRoZSBiYXNpYyBwcm9iZSBzZXF1ZW5jZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGVycm9yIGhhbmRsaW5nLCBvZiBjb3Vyc2UuIEkmIzM5O2QgbG9vayBmb3IgaG93IHRoZSBkcml2ZXIgZ3JhY2VmdWxseSBoYW5kbGVzIGZhaWx1cmVzIGF0IHZhcmlvdXMgc3RhZ2VzIOKAkyBpbnZhbGlkIFBDSSBjb25maWd1cmF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uIGVycm9ycywgZmlybXdhcmUgbG9hZGluZyBmYWlsdXJlcywgZXRjLiBJdCYjMzk7cyBhbHNvIHdvcnRoIGNoZWNraW5nIGhvdyBpdCBjbGVhbnMgdXAgcmVzb3VyY2VzIGlmIGFueSBzdGVwIGZhaWxzOyBlc3BlY2lhbGx5IGluIGEgcHJvYmUgZnVuY3Rpb24sIHlvdSB3YW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBvciBsZWF2aW5nIHRoZSBzeXN0ZW0gaW4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RhdGUuCgpJIGFsc28gd2FudCB0byBsb29rIGZvciB3aGF0IHRoaXMgZnVuY3Rpb24gbGVhdmVzIHRvIG90aGVyIGZ1bmN0aW9ucyB0byBpbml0aWFsaXplLiBJdCB3aWxsIHByb2JhYmx5IGhhdmUgdG8gbGF1bmNoIGEgZmlybXdhcmUgZG93bmxvYWQgYW5kIGhhbmRsZSB0aGUgcG93ZXIgb24gc2VxdWVuY2UgZm9yIHRoZSBXaS1GaSBjYXJkLiBJIGhhdmUgdG8gbG9vayBmb3IgYW55IGNsdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTI0Olx0c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuMTUyNTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcbjE1MjY6XHR7XG4xNTI3Olx0XHRlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZDtcbjE1Mjg6XHRcdHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2k7XG4xNTI5Olx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiO1xuMTUzMDpcdFx0aW50IHJldDtcbjE1MzE6XHRcbjE1MzI6XHRcdGFiID0gYXRoMTJrX2NvcmVfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqYWJfcGNpKSwgQVRIMTJLX0JVU19QQ0kpO1xuMTUzMzpcdFx0aWYgKCFhYikge1xuMTUzNDpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgYXRoMTJrIGJhc2VcXG5cJiMzNDspO1xuMTUzNTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE1MzY6XHRcdH1cbjE1Mzc6XHRcbjE1Mzg6XHRcdGFiLVx1MDAzZWRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuMTUzOTpcdFx0YWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcbjE1NDA6XHRcdGFiX3BjaS1cdTAwM2VkZXZfaWQgPSBwY2lfZGV2LVx1MDAzZWRldmljZTtcbjE1NDE6XHRcdGFiX3BjaS1cdTAwM2VhYiA9IGFiO1xuMTU0MjpcdFx0YWJfcGNpLVx1MDAzZXBkZXYgPSBwZGV2O1xuMTU0MzpcdFx0YWItXHUwMDNlaGlmLm9wcyA9IFx1MDAyNmF0aDEya19wY2lfaGlmX29wcztcbjE1NDQ6XHRcdGFiLVx1MDAzZWZ3X21vZGUgPSBBVEgxMktfRklSTVdBUkVfTU9ERV9OT1JNQUw7XG4xNTQ1Olx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWIpO1xuMTU0NjpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YWJfcGNpLVx1MDAzZXdpbmRvd19sb2NrKTtcbjE1NDc6XHRcbjE1NDg6XHRcdHJldCA9IGF0aDEya19wY2lfY2xhaW0oYWJfcGNpLCBwZGV2KTtcbjE1NDk6XHRcdGlmIChyZXQpIHtcbjE1NTA6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNsYWltIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xNTUxOlx0XHRcdGdvdG8gZXJyX2ZyZWVfY29yZTtcbjE1NTI6XHRcdH1cbjE1NTM6XHRcbjE1NTQ6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXCYjMzQ7cGNpIHByb2JlICUwNHg6JTA0eCAlMDR4OiUwNHhcXG5cJiMzNDssXG4xNTU1Olx0XHRcdCAgIHBkZXYtXHUwMDNldmVuZG9yLCBwZGV2LVx1MDAzZWRldmljZSxcbjE1NTY6XHRcdFx0ICAgcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yLCBwZGV2LVx1MDAzZXN1YnN5c3RlbV9kZXZpY2UpO1xuMTU1NzpcdFxuMTU1ODpcdFx0YWItXHUwMDNlaWQudmVuZG9yID0gcGRldi1cdTAwM2V2ZW5kb3I7XG4xNTU5Olx0XHRhYi1cdTAwM2VpZC5kZXZpY2UgPSBwZGV2LVx1MDAzZWRldmljZTtcbjE1NjA6XHRcdGFiLVx1MDAzZWlkLnN1YnN5c3RlbV92ZW5kb3IgPSBwZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3I7XG4xNTYxOlx0XHRhYi1cdTAwM2VpZC5zdWJzeXN0ZW1fZGV2aWNlID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xuMTU2MjpcdFxuMTU2MzpcdFx0ZGV2aWNlX2lkID0gYXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KHBjaV9kZXYpO1xuMTU2NDpcdFx0aWYgKGRldmljZV9pZCBcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xuMTU2NTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IGRldmljZSBmYW1pbHkgaWRcXG5cJiMzNDspO1xuMTU2NjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTU2NzpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNTY4Olx0XHR9XG4xNTY5Olx0XG4xNTcwOlx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1BDSSwgXCYjMzQ7UENJIGRldmljZSBmYW1pbHkgaWQ6ICVkXFxuXCYjMzQ7LCBkZXZpY2VfaWQpO1xuMTU3MTpcdFxuMTU3MjpcdFx0YWJfcGNpLVx1MDAzZWRldmljZV9mYW1pbHlfb3BzID0gXHUwMDI2YXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVx1MDAzZW9wcztcbjE1NzM6XHRcdGFiX3BjaS1cdTAwM2VyZWdfYmFzZSA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cdTAwM2VyZWdfYmFzZTtcbjE1NzQ6XHRcbjE1NzU6XHRcdC8qIENhbGwgZGV2aWNlIHNwZWNpZmljIHByb2JlLiBUaGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IGNhblxuMTU3NjpcdFx0ICogYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgb3BzIGluIGZ1dHVyZVxuMTU3NzpcdFx0ICogcHJvYmUgaXMgdmFsaWRhdGVkIGZvciBOVUxMIGR1cmluZyByZWdpc3RyYXRpb24uXG4xNTc4Olx0XHQgKi9cbjE1Nzk6XHRcdHJldCA9IGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2Vwcm9iZShwZGV2LCBwY2lfZGV2KTtcbjE1ODA6XHRcdGlmIChyZXQpIHtcbjE1ODE6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHByb2JlIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xNTgyOlx0XHRcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcbjE1ODM6XHRcdH1cbjE1ODQ6XHRcbjE1ODU6XHRcdHJldCA9IGF0aDEya19wY2lfbXNpX2FsbG9jKGFiX3BjaSk7XG4xNTg2Olx0XHRpZiAocmV0KSB7XG4xNTg3Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvYyBtc2k6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU4ODpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNTg5Olx0XHR9XG4xNTkwOlx0XG4xNTkxOlx0XHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XG4xNTkyOlx0XHRpZiAocmV0KVxuMTU5MzpcdFx0XHRnb3RvIGVycl9wY2lfbXNpX2ZyZWU7XG4xNTk0Olx0XG4xNTk1Olx0XHRyZXQgPSBhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChhYl9wY2ksIGNwdW1hc2tfb2YoMCkpO1xuMTU5NjpcdFx0aWYgKHJldCkge1xuMTU5NzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2V0IGlycSBhZmZpbml0eSAlZFxcblwmIzM0OywgcmV0KTtcbjE1OTg6XHRcdFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xuMTU5OTpcdFx0fVxuMTYwMDpcdFxuMTYwMTpcdFx0cmV0ID0gYXRoMTJrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xuMTYwMjpcdFx0aWYgKHJldCkge1xuMTYwMzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgbWhpOiAlZFxcblwmIzM0OywgcmV0KTtcbjE2MDQ6XHRcdFx0Z290byBlcnJfaXJxX2FmZmluaXR5X2NsZWFudXA7XG4xNjA1Olx0XHR9XG4xNjA2Olx0XG4xNjA3Olx0XHRyZXQgPSBhdGgxMmtfaGFsX3NybmdfaW5pdChhYik7XG4xNjA4Olx0XHRpZiAocmV0KVxuMTYwOTpcdFx0XHRnb3RvIGVycl9taGlfdW5yZWdpc3RlcjtcbjE2MTA6XHRcbjE2MTE6XHRcdHJldCA9IGF0aDEya19jZV9hbGxvY19waXBlcyhhYik7XG4xNjEyOlx0XHRpZiAocmV0KSB7XG4xNjEzOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBjZSBwaXBlczogJWRcXG5cJiMzNDssIHJldCk7XG4xNjE0Olx0XHRcdGdvdG8gZXJyX2hhbF9zcm5nX2RlaW5pdDtcbjE2MTU6XHRcdH1cbjE2MTY6XHRcbjE2MTc6XHRcdGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcbjE2MTg6XHRcbjE2MTk6XHRcdHJldCA9IGF0aDEya19wY2lfY29uZmlnX2lycShhYik7XG4xNjIwOlx0XHRpZiAocmV0KSB7XG4xNjIxOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjb25maWcgaXJxOiAlZFxcblwmIzM0OywgcmV0KTtcbjE2MjI6XHRcdFx0Z290byBlcnJfY2VfZnJlZTtcbjE2MjM6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzYKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBhdGgxMmtfcGNpX3Byb2JlYCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBzZXR1cCBpcyBwcmV0dHkgc3RhbmRhcmQuIFdlJiMzOTt2ZSBnb3QgYGF0aDEya19taGlfcmVnaXN0ZXJgIGhhcHBlbmluZyBmaXJzdCwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBoYW5kbGVzIHRoZSBNb2JpbGUgSG9zdCBJbnRlcmZhY2UgcmVnaXN0cmF0aW9uLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBncm91bmR3b3JrIGZvciB0aGlzIGtpbmQgb2YgUENJIGRldmljZS4gVGhlbiBpdCBhbGxvY2F0ZXMgQ0UgKENvbXBsZXRpb24gRW5naW5lKSBwaXBlcy4gR29vZCwgd2UgbmVlZCB0aG9zZSBmb3IgZGF0YSB0cmFuc2Zlci4gQWZ0ZXIgdGhhdCwgY29uZmlndXJpbmcgdGhlIGludGVycnVwdHMuIENhbiYjMzk7dCBmb3JnZXQgdGhvc2UhIFRoZSByZWFsIG1lYXQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgbGlrZWx5IGJlIHRoZSBjYWxsIHRvIGBhdGgxMmtfY29yZV9pbml0YCBsYXRlciBvbiDigJMgSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZXBlciBjb25maWd1cmF0aW9uIGFuZCBicmluZ3VwIG9jY3VyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNoaXAgbm93ISBMZXQmIzM5O3MgZ2V0IHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhpcyBgYXRoMTJrX3BjaV9wcm9iZWAgY29kZS4gSSYjMzk7bSBrZWVuIHRvIHNlZSB0aGUgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYyNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYyNDpcdFxuMTYyNTpcdFx0Lyoga2VybmVsIG1heSBhbGxvY2F0ZSBhIGR1bW15IHZlY3RvciBiZWZvcmUgcmVxdWVzdF9pcnEgYW5kXG4xNjI2Olx0XHQgKiB0aGVuIGFsbG9jYXRlIGEgcmVhbCB2ZWN0b3Igd2hlbiByZXF1ZXN0X2lycSBpcyBjYWxsZWQuXG4xNjI3Olx0XHQgKiBTbyBnZXQgbXNpX2RhdGEgaGVyZSBhZ2FpbiB0byBhdm9pZCBzcHVyaW91cyBpbnRlcnJ1cHRcbjE2Mjg6XHRcdCAqIGFzIG1zaV9kYXRhIHdpbGwgY29uZmlndXJlZCB0byBzcm5ncy5cbjE2Mjk6XHRcdCAqL1xuMTYzMDpcdFx0cmV0ID0gYXRoMTJrX3BjaV9jb25maWdfbXNpX2RhdGEoYWJfcGNpKTtcbjE2MzE6XHRcdGlmIChyZXQpIHtcbjE2MzI6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZyBtc2lfZGF0YTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjMzOlx0XHRcdGdvdG8gZXJyX2ZyZWVfaXJxO1xuMTYzNDpcdFx0fVxuMTYzNTpcdFxuMTYzNjpcdFx0LyogSW52b2tlIGFyY2hfaW5pdCBoZXJlIHNvIHRoYXQgYXJjaC1zcGVjaWZpYyBpbml0IG9wZXJhdGlvbnNcbjE2Mzc6XHRcdCAqIGNhbiB1dGlsaXplIGFscmVhZHkgaW5pdGlhbGl6ZWQgYWIgZmllbGRzLCBzdWNoIGFzIEhBTCBTUk5Hcy5cbjE2Mzg6XHRcdCAqL1xuMTYzOTpcdFx0cmV0ID0gYWJfcGNpLVx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVx1MDAzZWFyY2hfaW5pdChhYik7XG4xNjQwOlx0XHRpZiAocmV0KSB7XG4xNjQxOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O1BDSSBhcmNoX2luaXQgZmFpbGVkICVkXFxuXCYjMzQ7LCByZXQpO1xuMTY0MjpcdFx0XHRnb3RvIGVycl9mcmVlX2lycTtcbjE2NDM6XHRcdH1cbjE2NDQ6XHRcbjE2NDU6XHRcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xuMTY0NjpcdFx0aWYgKHJldCkge1xuMTY0NzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gaW5pdCBjb3JlOiAlZFxcblwmIzM0OywgcmV0KTtcbjE2NDg6XHRcdFx0Z290byBlcnJfZGVpbml0X2FyY2g7XG4xNjQ5Olx0XHR9XG4xNjUwOlx0XHRyZXR1cm4gMDtcbjE2NTE6XHRcbjE2NTI6XHRlcnJfZGVpbml0X2FyY2g6XG4xNjUzOlx0XHRhYl9wY2ktXHUwMDNlZGV2aWNlX2ZhbWlseV9vcHMtXHUwMDNlYXJjaF9kZWluaXQoYWIpO1xuMTY1NDpcdFxuMTY1NTpcdGVycl9mcmVlX2lycTpcbjE2NTY6XHRcdC8qIF9fZnJlZV9pcnEoKSBleHBlY3RzIHRoZSBjYWxsZXIgdG8gaGF2ZSBjbGVhcmVkIHRoZSBhZmZpbml0eSBoaW50ICovXG4xNjU3Olx0XHRhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChhYl9wY2ksIE5VTEwpO1xuMTY1ODpcdFx0YXRoMTJrX3BjaV9mcmVlX2lycShhYik7XG4xNjU5Olx0XG4xNjYwOlx0ZXJyX2NlX2ZyZWU6XG4xNjYxOlx0XHRhdGgxMmtfY2VfZnJlZV9waXBlcyhhYik7XG4xNjYyOlx0XG4xNjYzOlx0ZXJyX2hhbF9zcm5nX2RlaW5pdDpcbjE2NjQ6XHRcdGF0aDEya19oYWxfc3JuZ19kZWluaXQoYWIpO1xuMTY2NTpcdFxuMTY2NjpcdGVycl9taGlfdW5yZWdpc3RlcjpcbjE2Njc6XHRcdGF0aDEya19taGlfdW5yZWdpc3RlcihhYl9wY2kpO1xuMTY2ODpcdFxuMTY2OTpcdGVycl9pcnFfYWZmaW5pdHlfY2xlYW51cDpcbjE2NzA6XHRcdGF0aDEya19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KGFiX3BjaSwgTlVMTCk7XG4xNjcxOlx0XG4xNjcyOlx0ZXJyX3BjaV9tc2lfZnJlZTpcbjE2NzM6XHRcdGF0aDEya19wY2lfbXNpX2ZyZWUoYWJfcGNpKTtcbjE2NzQ6XHRcbjE2NzU6XHRlcnJfcGNpX2ZyZWVfcmVnaW9uOlxuMTY3NjpcdFx0YXRoMTJrX3BjaV9mcmVlX3JlZ2lvbihhYl9wY2kpO1xuMTY3NzpcdFxuMTY3ODpcdGVycl9mcmVlX2NvcmU6XG4xNjc5Olx0XHRhdGgxMmtfY29yZV9mcmVlKGFiKTtcbjE2ODA6XHRcbjE2ODE6XHRcdHJldHVybiByZXQ7XG4xNjgyOlx0fVxuMTY4MzpcdFxuMTY4NDpcdHN0YXRpYyB2b2lkIGF0aDEya19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuMTY4NTpcdHtcbjE2ODY6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4xNjg3Olx0XHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcbjE2ODg6XHRcbjE2ODk6XHRcdGF0aDEya19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KGFiX3BjaSwgTlVMTCk7XG4xNjkwOlx0XG4xNjkxOlx0XHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncykpIHtcbjE2OTI6XHRcdFx0YXRoMTJrX3BjaV9wb3dlcl9kb3duKGFiLCBmYWxzZSk7XG4xNjkzOlx0XHRcdGdvdG8gcW1pX2ZhaWw7XG4xNjk0Olx0XHR9XG4xNjk1Olx0XG4xNjk2Olx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1VOUkVHSVNURVJJTkcsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG4xNjk3Olx0XG4xNjk4Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmFiLVx1MDAzZXJlc2V0X3dvcmspO1xuMTY5OTpcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZhYi1cdTAwM2VkdW1wX3dvcmspO1xuMTcwMDpcdFx0YXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChhYi1cdTAwM2VhZyk7XG4xNzAxOlx0XG4xNzAyOlx0cW1pX2ZhaWw6XG4xNzAzOlx0XHRhdGgxMmtfY29yZV9kZWluaXQoYWIpO1xuMTcwNDpcdFx0YXRoMTJrX2Z3X3VubWFwKGFiKTtcbjE3MDU6XHRcdGF0aDEya19taGlfdW5yZWdpc3RlcihhYl9wY2kpO1xuMTcwNjpcdFxuMTcwNzpcdFx0YXRoMTJrX3BjaV9mcmVlX2lycShhYik7XG4xNzA4Olx0XHRhdGgxMmtfcGNpX21zaV9mcmVlKGFiX3BjaSk7XG4xNzA5Olx0XHRhdGgxMmtfcGNpX2ZyZWVfcmVnaW9uKGFiX3BjaSk7XG4xNzEwOlx0XG4xNzExOlx0XHRhdGgxMmtfaGFsX3NybmdfZGVpbml0KGFiKTtcbjE3MTI6XHRcdGF0aDEya19jZV9mcmVlX3BpcGVzKGFiKTtcbjE3MTM6XHRcbjE3MTQ6XHRcdGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2VhcmNoX2RlaW5pdChhYik7XG4xNzE1Olx0XG4xNzE2Olx0XHRhdGgxMmtfY29yZV9mcmVlKGFiKTtcbjE3MTc6XHR9XG4xNzE4Olx0XG4xNzE5Olx0c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9od19ncm91cF9wb3dlcl9kb3duKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuMTcyMDpcdHtcbjE3MjE6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XG4xNzIyOlx0XHRpbnQgaTtcbjE3MjM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW5pdGlhbCB0aG91Z2h0cywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGZ1bmN0aW9uIGNhbGw6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhdGgxMmtfY29yZV9pbml0KioKCk9rYXksIGBhdGgxMmtfY29yZV9pbml0YC4gTGV0JiMzOTtzIGRpdmUgaW4uIEkgc2VlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHRoaXMgYXRoMTJrIGRyaXZlci4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgb3ZlcmFsbCBnb2FsIG9mIHRoaXMgaW5pdGlhbGl6YXRpb24/IElzIGl0IHNldHRpbmcgdXAgaGFyZHdhcmUgcmVzb3VyY2VzLCByZWdpc3RlcmluZyB3aXRoIHRoZSBrZXJuZWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmUgZmlyc3QuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGZvciBhbnkgaGlnaC1sZXZlbCBjb21tZW50cyBvciBmdW5jdGlvbiBjYWxsIHRyYWNlcyB0byBlc3RhYmxpc2ggdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbWVudGFsbHkgbm90ZSBhbnkga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgaW4gb3IgaW5pdGlhbGl6ZWQsIGFzIHRob3NlIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZHJpdmVyJiMzOTtzIGludGVybmFsIHN0YXRlLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgb2Z0ZW4gaGFuZGxlIHJlc291cmNlIGFsbG9jYXRpb24sIHNvIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgdGhhdC4gSSB3aWxsIHRoZW4gZXhhbWluZSB0aGUgY29yZSB0YXNrcyB0aGlzIGZ1bmN0aW9uIGFjY29tcGxpc2hlcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGF0aDEya19jb3JlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0yMTg4PXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc2V0X21sb19jYXBhYmxlKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTIyMjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoyMjI5OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0yMjMwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaD0xMjY0PWludCBhdGgxMmtfY29yZV9wcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oOjEyNjU6aW50IGF0aDEya19jb3JlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphdGgxMmspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtMTI2Ni12b2lkIGF0aDEya19jb3JlX2RlaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDg3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYXRoMTJrX2NvcmVfaW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBzdGFuZGFyZCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc3RlcHMsIGJ1dCBJIHdhbnQgdG8gbG9vayBmb3IgYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlIGF0aDEyayBjaGlwIG9yIGFueSBub3ZlbCBhcHByb2FjaGVzIGl0IHRha2VzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHJlZ2lzdGVyIGFjY2VzcyBwYXR0ZXJucywgbWVtb3J5IGFsbG9jYXRpb24sIGhhcmR3YXJlIHNldHVwIHNlcXVlbmNlcywgYW5kIGFueSBwb3RlbnRpYWwgcG93ZXIgbWFuYWdlbWVudCBvciBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiB0aGF0JiMzOTtzIGRvbmUgYXQgdGhpcyBzdGFnZS4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNldCB1cCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4gQXJlIHRoZXJlIGFueSBlYXJseSBlcnJvciBjaGVja3Mgb3IgZGVidWcgcHJpbnRzIHRoYXQgZ2l2ZSBjbHVlcyBhYm91dCBjb21tb24gc3RhcnR1cCBwcm9ibGVtcz8gQW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBhcmUga2V5IHRvIHVuZGVyc3RhbmQgYXQgdGhpcyBzdGFnZSBhcyB0aGV5IGNhbiBzaWduaWZpY2FudGx5IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGxhdGVyIG9uLiBJJiMzOTttIGFsc28gaG9waW5nIHRvIHNwb3QgYW55IHBvdGVudGlhbCBwb2ludHMgZm9yIGN1c3RvbWl6YXRpb24gb3IgY29uZmlndXJhdGlvbiBpZiBpdCYjMzk7cyBhcHBsaWNhYmxlIHRvIG15IHByb2plY3QuIEZpbmFsbHksIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggYW55IGZpcm13YXJlIGxvYWRpbmcgb3IgZGV2aWNlIHByb2JlIHJvdXRpbmVzLCBhcyB0aGF0JiMzOTtzIG9mdGVuIGEgY3JpdGljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMjksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMjk6XHRpbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuMjIzMDpcdHtcbjIyMzE6XHRcdHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnO1xuMjIzMjpcdFx0aW50IHJldDtcbjIyMzM6XHRcbjIyMzQ6XHRcdHJldCA9IGF0aDEya19jb3JlX3BhbmljX25vdGlmaWVyX3JlZ2lzdGVyKGFiKTtcbjIyMzU6XHRcdGlmIChyZXQpXG4yMjM2Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgcGFuaWMgaGFuZGxlcjogJWRcXG5cJiMzNDssIHJldCk7XG4yMjM3Olx0XG4yMjM4Olx0XHRtdXRleF9sb2NrKFx1MDAyNmF0aDEya19od19ncm91cF9tdXRleCk7XG4yMjM5Olx0XG4yMjQwOlx0XHRhZyA9IGF0aDEya19jb3JlX2h3X2dyb3VwX2Fzc2lnbihhYik7XG4yMjQxOlx0XHRpZiAoIWFnKSB7XG4yMjQyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xuMjI0MzpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7dW5hYmxlIHRvIGdldCBodyBncm91cFxcblwmIzM0Oyk7XG4yMjQ0Olx0XHRcdHJldCA9IC1FTk9ERVY7XG4yMjQ1Olx0XHRcdGdvdG8gZXJyX3VucmVnaXN0ZXJfbm90aWZpZXI7XG4yMjQ2Olx0XHR9XG4yMjQ3Olx0XG4yMjQ4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2YXRoMTJrX2h3X2dyb3VwX211dGV4KTtcbjIyNDk6XHRcbjIyNTA6XHRcdG11dGV4X2xvY2soXHUwMDI2YWctXHUwMDNlbXV0ZXgpO1xuMjI1MTpcdFxuMjI1MjpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcJiMzNDtudW0gZGV2aWNlcyAlZCBudW0gcHJvYmVkICVkXFxuXCYjMzQ7LFxuMjI1MzpcdFx0XHQgICBhZy1cdTAwM2VudW1fZGV2aWNlcywgYWctXHUwMDNlbnVtX3Byb2JlZCk7XG4yMjU0Olx0XG4yMjU1Olx0XHRpZiAoYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlX3JlYWR5KGFnKSkge1xuMjI1NjpcdFx0XHRyZXQgPSBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGUoYWcpO1xuMjI1NzpcdFx0XHRpZiAocmV0KSB7XG4yMjU4Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFnLVx1MDAzZW11dGV4KTtcbjIyNTk6XHRcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7dW5hYmxlIHRvIGNyZWF0ZSBodyBncm91cFxcblwmIzM0Oyk7XG4yMjYwOlx0XHRcdFx0Z290byBlcnJfdW5hc3NpZ25faHdfZ3JvdXA7XG4yMjYxOlx0XHRcdH1cbjIyNjI6XHRcdH1cbjIyNjM6XHRcbjIyNjQ6XHRcdG11dGV4X3VubG9jayhcdTAwMjZhZy1cdTAwM2VtdXRleCk7XG4yMjY1Olx0XG4yMjY2Olx0XHRyZXR1cm4gMDtcbjIyNjc6XHRcbjIyNjg6XHRlcnJfdW5hc3NpZ25faHdfZ3JvdXA6XG4yMjY5Olx0XHRhdGgxMmtfY29yZV9od19ncm91cF91bmFzc2lnbihhYik7XG4yMjcwOlx0ZXJyX3VucmVnaXN0ZXJfbm90aWZpZXI6XG4yMjcxOlx0XHRhdGgxMmtfY29yZV9wYW5pY19ub3RpZmllcl91bnJlZ2lzdGVyKGFiKTtcbjIyNzI6XHRcbjIyNzM6XHRcdHJldHVybiByZXQ7XG4yMjc0Olx0fVxuMjI3NTpcdFxuMjI3NjpcdHZvaWQgYXRoMTJrX2NvcmVfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4yMjc3Olx0e1xuMjI3ODpcdFx0YXRoMTJrX2NvcmVfaHdfZ3JvdXBfZGVzdHJveShhYi1cdTAwM2VhZyk7XG4yMjc5Olx0XHRhdGgxMmtfY29yZV9od19ncm91cF91bmFzc2lnbihhYik7XG4yMjgwOlx0XHRhdGgxMmtfY29yZV9wYW5pY19ub3RpZmllcl91bnJlZ2lzdGVyKGFiKTtcbjIyODE6XHR9XG4yMjgyOlx0XG4yMjgzOlx0dm9pZCBhdGgxMmtfY29yZV9mcmVlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4yMjg0Olx0e1xuMjI4NTpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2YWItXHUwMDNlcnhfcmVwbGVuaXNoX3JldHJ5KTtcbjIyODY6XHRcdGF0aDEya193bWlfZnJlZSgpO1xuMjI4NzpcdFx0ZGVzdHJveV93b3JrcXVldWUoYWItXHUwMDNld29ya3F1ZXVlX2F1eCk7XG4yMjg4Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShhYi1cdTAwM2V3b3JrcXVldWUpO1xuMjI4OTpcdFx0a2ZyZWUoYWIpO1xuMjI5MDpcdH1cbjIyOTE6XHRcbjIyOTI6XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEya19jb3JlX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHByaXZfc2l6ZSxcbjIyOTM6XHRcdFx0XHRcdCAgICAgIGVudW0gYXRoMTJrX2J1cyBidXMpXG4yMjk0Olx0e1xuMjI5NTpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcbjIyOTY6XHRcbjIyOTc6XHRcdGFiID0ga3phbGxvYyhzaXplb2YoKmFiKSAmIzQzOyBwcml2X3NpemUsIEdGUF9LRVJORUwpO1xuMjI5ODpcdFx0aWYgKCFhYilcbjIyOTk6XHRcdFx0cmV0dXJuIE5VTEw7XG4yMzAwOlx0XG4yMzAxOlx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2YWItXHUwMDNlZHJpdmVyX3JlY292ZXJ5KTtcbjIzMDI6XHRcbjIzMDM6XHRcdGFiLVx1MDAzZXdvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFwmIzM0O2F0aDEya193cVwmIzM0Oyk7XG4yMzA0Olx0XHRpZiAoIWFiLVx1MDAzZXdvcmtxdWV1ZSlcbjIzMDU6XHRcdFx0Z290byBlcnJfc2NfZnJlZTtcbjIzMDY6XHRcbjIzMDc6XHRcdGFiLVx1MDAzZXdvcmtxdWV1ZV9hdXggPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcJiMzNDthdGgxMmtfYXV4X3dxXCYjMzQ7KTtcbjIzMDg6XHRcdGlmICghYWItXHUwMDNld29ya3F1ZXVlX2F1eClcbjIzMDk6XHRcdFx0Z290byBlcnJfZnJlZV93cTtcbjIzMTA6XHRcbjIzMTE6XHRcdGlmIChhdGgxMmtfd21pX2FsbG9jKCkgXHUwMDNjIDApXG4yMzEyOlx0XHRcdGdvdG8gZXJyX2ZyZWVfd3FfYXV4O1xuMjMxMzpcdFxuMjMxNDpcdFx0bXV0ZXhfaW5pdChcdTAwMjZhYi1cdTAwM2Vjb3JlX2xvY2spO1xuMjMxNTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YWItXHUwMDNlYmFzZV9sb2NrKTtcbjIzMTY6XHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZhYi1cdTAwM2VyZXNldF9jb21wbGV0ZSk7XG4yMzE3Olx0XG4yMzE4Olx0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFiLVx1MDAzZXBlZXJfbWFwcGluZ193cSk7XG4yMzE5Olx0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFiLVx1MDAzZXdtaV9hYi50eF9jcmVkaXRzX3dxKTtcbjIzMjA6XHRcdElOSVRfV09SSyhcdTAwMjZhYi1cdTAwM2VyZXN0YXJ0X3dvcmssIGF0aDEya19jb3JlX3Jlc3RhcnQpO1xuMjMyMTpcdFx0SU5JVF9XT1JLKFx1MDAyNmFiLVx1MDAzZXJlc2V0X3dvcmssIGF0aDEya19jb3JlX3Jlc2V0KTtcbjIzMjI6XHRcdElOSVRfV09SSyhcdTAwMjZhYi1cdTAwM2VyZmtpbGxfd29yaywgYXRoMTJrX3Jma2lsbF93b3JrKTtcbjIzMjM6XHRcdElOSVRfV09SSyhcdTAwMjZhYi1cdTAwM2VkdW1wX3dvcmssIGF0aDEya19jb3JlZHVtcF91cGxvYWQpO1xuMjMyNDpcdFx0SU5JVF9XT1JLKFx1MDAyNmFiLVx1MDAzZXVwZGF0ZV8xMWRfd29yaywgYXRoMTJrX3VwZGF0ZV8xMWQpO1xuMjMyNTpcdFxuMjMyNjpcdFx0dGltZXJfc2V0dXAoXHUwMDI2YWItXHUwMDNlcnhfcmVwbGVuaXNoX3JldHJ5LCBhdGgxMmtfY2VfcnhfcmVwbGVuaXNoX3JldHJ5LCAwKTtcbjIzMjc6XHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZhYi1cdTAwM2VodGNfc3VzcGVuZCk7XG4yMzI4Olx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2YWItXHUwMDNlcmVzdGFydF9jb21wbGV0ZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBhdGgxMmsgSGFyZHdhcmUgR3JvdXAgQ3JlYXRpb24qKgoKT2theSwgc28gYGF0aDEya19jb3JlX2h3X2dyb3VwX2NyZWF0ZWAganVzdCBnb3QgY2FsbGVkLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGlzIHJlbGF0ZWQgdG8gaW5pdGlhbGl6aW5nIG9yIGNvbmZpZ3VyaW5nIHNvbWUgaGFyZHdhcmUgcmVzb3VyY2UgZ3JvdXBpbmcgd2l0aGluIHRoZSBhdGgxMmsgZHJpdmVyLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgbXVsdGktY29yZSBhcmNoaXRlY3R1cmUgb2YgdGhlc2UgbmV3ZXIgUXVhbGNvbW0gY2hpcHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSAtIGRvZXMgdGhpcyBpbnZvbHZlIHJlc291cmNlIGFsbG9jYXRpb24sIGNsb2NrIGdhdGluZywgaW50ZXJydXB0IGJpbmRpbmcsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgYWJzdHJhY3QgbGlrZSBkZWZpbmluZyBmdW5jdGlvbmFsIGRvbWFpbnMgd2l0aGluIHRoZSBoYXJkd2FyZT8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGhhcmR3YXJlIHJlZ2lzdGVycyBpdCYjMzk7cyBtYW5pcHVsYXRpbmcuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGFsbG9jYXRpbmcgbWVtb3J5IHJlZ2lvbnMgZm9yIERNQSwgcmVnaXN0ZXJpbmcgaW50ZXJydXB0IGhhbmRsZXJzLCBvciBwZXJoYXBzIGNvbmZpZ3VyaW5nIHNvbWUga2luZCBvZiBhcmJpdHJhdGlvbiBsb2dpYyBiZXR3ZWVuIGNvcmVzPyBXaGF0IEkgcmVhbGx5IHdhbnQgdG8gZGV0ZXJtaW5lIGlzIGhvdyB0aGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdGhlIGRyaXZlciB0byBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgaG93IGl0IGVuc3VyZXMgZWZmaWNpZW50IGFuZCBpc29sYXRlZCBhY2Nlc3MuIEhvcGVmdWxseSwgdGhlIGNvZGUgY29tbWVudHMgYXJlIGdvb2QsIGJ1dCBJJiMzOTtsbCBiZSBwcmVwYXJlZCB0byBmb2xsb3cgdGhlIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGFzIHdlbGw7IGFueSBmYWlsdXJlcyBoZXJlIGNvdWxkIGJlIGEgc2hvdy1zdG9wcGVyIGZvciB0aGUgd2hvbGUgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MjExNj12b2lkIGF0aDEya19jb3JlX2h3X2dyb3VwX2NsZWFudXAoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjE0Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjIxNDg6c3RhdGljIGludCBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGUoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0yMTQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MDIKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgY3JlYXRpb24gb2YgaGFyZHdhcmUgcmVzb3VyY2UgZ3JvdXBzLCBwcm9iYWJseSBzcGVjaWZpYyB0byB0aGUgYXRoMTJrJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGFsbG9jYXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzLCBwZXJoYXBzIGluaXRpYWxpemF0aW9uIG9mIHNvbWUgaGFyZHdhcmUgcmVnaXN0ZXJzLCBhbmQgbGlrZWx5IHNvbWUgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGdyb3VwcyBhcmUgdXNlZC4gV2hhdCBhcmUgdGhlIGtleSBjb21wb25lbnRzIHdpdGhpbiBpdD8gQXJlIHRoZXkgcmVsYXRlZCB0byBETUEsIGludGVycnVwdCBtYW5hZ2VtZW50LCBvciByYWRpbyByZXNvdXJjZXM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gcmVsYXRlZCBzdHJ1Y3R1cmVzIHN1Y2ggYXMgKmF0aDEya19odyogKGlmIHRoaXMgaXMgcmVsZXZhbnQgZm9yIGhvdyB0aGlzIGRyaXZlciBpcyBzdHJ1Y3R1cmVkKSwgKmF0aDEya19ncm91cCosIG9yIGFueXRoaW5nIHRoYXQgbWlnaHQgcmVwcmVzZW50IGEgcGh5c2ljYWwgb3IgbG9naWNhbCBlbnRpdHkgd2l0aGluIHRoZSBoYXJkd2FyZS4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3IgbG9ja2luZyBtZWNoYW5pc21zLCBpZiB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBhIG11bHRpLXRocmVhZGVkIGNvbnRleHQsIGFuZCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0IGlzIGFsbG9jYXRpbmcgc29tZSBuZXcgcmVzb3VyY2VzLCBhbmQvIG9yLCBob3cgdGhlc2UgYXJlIGZyZWVkIHdoZW4gbmVjZXNzYXJ5LiBGaW5hbGx5LCBJIHdpbGwgYmUgc2Nhbm5pbmcgZm9yIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCB3b3JrZmxvdyBhbmQgaG93IGl0IGltcGFjdHMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTQ4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTQ4Olx0c3RhdGljIGludCBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGUoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXG4yMTQ5Olx0e1xuMjE1MDpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcbjIxNTE6XHRcdGludCBpLCByZXQ7XG4yMTUyOlx0XG4yMTUzOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmFnLVx1MDAzZW11dGV4KTtcbjIxNTQ6XHRcbjIxNTU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFnLVx1MDAzZW51bV9kZXZpY2VzOyBpJiM0MzsmIzQzOykge1xuMjE1NjpcdFx0XHRhYiA9IGFnLVx1MDAzZWFiW2ldO1xuMjE1NzpcdFx0XHRpZiAoIWFiKVxuMjE1ODpcdFx0XHRcdGNvbnRpbnVlO1xuMjE1OTpcdFxuMjE2MDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmFiLVx1MDAzZWNvcmVfbG9jayk7XG4yMTYxOlx0XG4yMTYyOlx0XHRcdHJldCA9IGF0aDEya19jb3JlX3NvY19jcmVhdGUoYWIpO1xuMjE2MzpcdFx0XHRpZiAocmV0KSB7XG4yMTY0Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFiLVx1MDAzZWNvcmVfbG9jayk7XG4yMTY1Olx0XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBzb2MgJWQgY29yZTogJWRcXG5cJiMzNDssIGksIHJldCk7XG4yMTY2Olx0XHRcdFx0Z290byBkZXN0cm95O1xuMjE2NzpcdFx0XHR9XG4yMTY4Olx0XG4yMTY5Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhYi1cdTAwM2Vjb3JlX2xvY2spO1xuMjE3MDpcdFx0fVxuMjE3MTpcdFxuMjE3MjpcdFx0cmV0dXJuIDA7XG4yMTczOlx0XG4yMTc0Olx0ZGVzdHJveTpcbjIxNzU6XHRcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4yMTc2Olx0XHRcdGFiID0gYWctXHUwMDNlYWJbaV07XG4yMTc3Olx0XHRcdGlmICghYWIpXG4yMTc4Olx0XHRcdFx0Y29udGludWU7XG4yMTc5Olx0XG4yMTgwOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2YWItXHUwMDNlY29yZV9sb2NrKTtcbjIxODE6XHRcdFx0YXRoMTJrX2NvcmVfc29jX2Rlc3Ryb3koYWIpO1xuMjE4MjpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2YWItXHUwMDNlY29yZV9sb2NrKTtcbjIxODM6XHRcdH1cbjIxODQ6XHRcbjIxODU6XHRcdHJldHVybiByZXQ7XG4yMTg2Olx0fVxuMjE4NzpcdFxuMjE4ODpcdHZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc2V0X21sb19jYXBhYmxlKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuMjE4OTpcdHtcbjIxOTA6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XG4yMTkxOlx0XHRpbnQgaTtcbjIxOTI6XHRcbjIxOTM6XHRcdGlmIChhdGgxMmtfZnRtX21vZGUpXG4yMTk0Olx0XHRcdHJldHVybjtcbjIxOTU6XHRcbjIxOTY6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YWctXHUwMDNlbXV0ZXgpO1xuMjE5NzpcdFxuMjE5ODpcdFx0aWYgKGFnLVx1MDAzZW51bV9kZXZpY2VzID09IDEpIHtcbjIxOTk6XHRcdFx0YWIgPSBhZy1cdTAwM2VhYlswXTtcbjIyMDA6XHRcdFx0LyogUUNOOTI3NCBmaXJtd2FyZSB1c2VzIGZpcm13YXJlIElFIGZvciBNTE8gYWR2ZXJ0aXNlbWVudCAqL1xuMjIwMTpcdFx0XHRpZiAoYWItXHUwMDNlZncuZndfZmVhdHVyZXNfdmFsaWQpIHtcbjIyMDI6XHRcdFx0XHRhZy1cdTAwM2VtbG9fY2FwYWJsZSA9XG4yMjAzOlx0XHRcdFx0XHRhdGgxMmtfZndfZmVhdHVyZV9zdXBwb3J0ZWQoYWIsIEFUSDEyS19GV19GRUFUVVJFX01MTyk7XG4yMjA0Olx0XHRcdFx0cmV0dXJuO1xuMjIwNTpcdFx0XHR9XG4yMjA2Olx0XG4yMjA3Olx0XHRcdC8qIHdoaWxlIFdDTjc4NTAgZmlybXdhcmUgdXNlcyBRTUkgc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgYml0ICovXG4yMjA4Olx0XHRcdGFnLVx1MDAzZW1sb19jYXBhYmxlID0gYWItXHUwMDNlc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQ7XG4yMjA5Olx0XHRcdHJldHVybjtcbjIyMTA6XHRcdH1cbjIyMTE6XHRcbjIyMTI6XHRcdGFnLVx1MDAzZW1sb19jYXBhYmxlID0gdHJ1ZTtcbjIyMTM6XHRcbjIyMTQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFnLVx1MDAzZW51bV9kZXZpY2VzOyBpJiM0MzsmIzQzOykge1xuMjIxNTpcdFx0XHRhYiA9IGFnLVx1MDAzZWFiW2ldO1xuMjIxNjpcdFx0XHRpZiAoIWFiKVxuMjIxNzpcdFx0XHRcdGNvbnRpbnVlO1xuMjIxODpcdFxuMjIxOTpcdFx0XHQvKiBldmVuIGlmIDEgZGV2aWNlJiMzOTtzIGZpcm13YXJlIGZlYXR1cmUgaW5kaWNhdGVzIE1MT1xuMjIyMDpcdFx0XHQgKiB1bnN1cHBvcnRlZCwgbWFrZSBNTE8gdW5zdXBwb3J0ZWQgZm9yIHRoZSB3aG9sZSBncm91cFxuMjIyMTpcdFx0XHQgKi9cbjIyMjI6XHRcdFx0aWYgKCFhdGgxMmtfZndfZmVhdHVyZV9zdXBwb3J0ZWQoYWIsIEFUSDEyS19GV19GRUFUVVJFX01MTykpIHtcbjIyMjM6XHRcdFx0XHRhZy1cdTAwM2VtbG9fY2FwYWJsZSA9IGZhbHNlO1xuMjIyNDpcdFx0XHRcdHJldHVybjtcbjIyMjU6XHRcdFx0fVxuMjIyNjpcdFx0fVxuMjIyNzpcdH1cbjIyMjg6XHRcbjIyMjk6XHRpbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuMjIzMDpcdHtcbjIyMzE6XHRcdHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnO1xuMjIzMjpcdFx0aW50IHJldDtcbjIyMzM6XHRcbjIyMzQ6XHRcdHJldCA9IGF0aDEya19jb3JlX3BhbmljX25vdGlmaWVyX3JlZ2lzdGVyKGFiKTtcbjIyMzU6XHRcdGlmIChyZXQpXG4yMjM2Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgcGFuaWMgaGFuZGxlcjogJWRcXG5cJiMzNDssIHJldCk7XG4yMjM3Olx0XG4yMjM4Olx0XHRtdXRleF9sb2NrKFx1MDAyNmF0aDEya19od19ncm91cF9tdXRleCk7XG4yMjM5Olx0XG4yMjQwOlx0XHRhZyA9IGF0aDEya19jb3JlX2h3X2dyb3VwX2Fzc2lnbihhYik7XG4yMjQxOlx0XHRpZiAoIWFnKSB7XG4yMjQyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xuMjI0MzpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7dW5hYmxlIHRvIGdldCBodyBncm91cFxcblwmIzM0Oyk7XG4yMjQ0Olx0XHRcdHJldCA9IC1FTk9ERVY7XG4yMjQ1Olx0XHRcdGdvdG8gZXJyX3VucmVnaXN0ZXJfbm90aWZpZXI7XG4yMjQ2Olx0XHR9XG4yMjQ3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjQzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGF0aDEya19jb3JlX3NvY19jcmVhdGUgRnVuY3Rpb24qKgoKT2theSwgc28gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIGJlaW5nIGludm9rZWQuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBjaGVjayB3aGF0JiMzOTtzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyByb2xlIGluIHRoZSBicm9hZGVyIGBhdGgxMmtgIGZyYW1ld29yay4gUHJlc3VtYWJseSwgYmFzZWQgb24gdGhlIG5hbWUsIGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBjcmVhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBzb21lIGtpbmQgb2YgU3lzdGVtLW9uLUNoaXAgKFNvQykgcmVsYXRlZCBjb21wb25lbnQgb3Igc3RydWN0dXJlIGZvciB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gcmFwaWRseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBoYXJkd2FyZSBicmluZ3VwIGFuZCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3MgZGVsdmUgaW50byBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHNlZSB3aGF0IGtleSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgbWFuaXB1bGF0aW5nIGFuZCB3aGljaCBvdGhlciBrZXkgZnVuY3Rpb25zIGl04oCZcyBjYWxsaW5nIHRvIGZvcm0gdGhlIFNvQy4gSSBhbHNvIHdhbnQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBzcGVjaWZpYyBoYXJkd2FyZSByZXNvdXJjZXMsIG9yIGlmIGl0IGlzIHJlc3BvbnNpYmxlIGZvciBtZXJlbHkgY29vcmRpbmF0aW5nIG90aGVyIGZ1bmN0aW9ucyB0byBhY2hpZXZlIHRoaXMuIFVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBjcnVjaWFsIHN0ZXAgaW4gdGhlIGRyaXZlciYjMzk7cyBwb3dlciBtYW5hZ2VtZW50IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBjbG9jayBzZXR0aW5ncywgaW50ZXJydXB0IGhhbmRsZXJzLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTgwND1pbnQgYXRoMTJrX2NvcmVfY2hlY2tfc21iaW9zKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6ODE1OnN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MTkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAuIEkga25vdyB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBjb3JlIFNPQyAoU3lzdGVtLW9uLUNoaXApIGFzcGVjdHMgb2YgdGhlIGF0aDEyayBkcml2ZXIsIGxpa2VseSBkdXJpbmcgZGV2aWNlIHByb2JlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IHNldHMgdXAgdGhlIGhhcmR3YXJlIHJlc291cmNlcywgYWxsb2NhdGVzIG1lbW9yeSwgYW5kIGVzdGFibGlzaGVzIHRoZSBiYXNpYyBjb25uZWN0aXZpdHkgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4KCkkmIzM5O20gbG9va2luZyBmb3IgdGhlIGFsbG9jYXRpb24gb2YgYW55IGNvbnRyb2wgc3RydWN0dXJlcywgY29uZmlndXJhdGlvbiBvZiByZWdpc3RlcnMsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYW55IGludGVybmFsIHN0YXRlIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgY3JpdGljYWwgZm9yIGxhdGVyIG9wZXJhdGlvbnMsIGxpa2UgaGFuZGxpbmcgZGF0YSB0cmFmZmljIGFuZCBwb3dlciBtYW5hZ2VtZW50LiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbjsgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZhaWx1cmUgY2FzZXMgYW5kIHdoYXQgcmVjb3ZlcnkgbWVjaGFuaXNtcywgaWYgYW55LCBhcmUgaW1wbGVtZW50ZWQuIEkga25vdyBhIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24gaGVyZSBpcyBwYXJhbW91bnQgZm9yIHRoZSBlbnRpcmUgZHJpdmVyIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyB0aGUgYmVkcm9jay4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBoYXJkd2FyZSByZXNldCwgb3IgY2FsaWJyYXRpb24gYW5kIGluaXRpYWwgY29uZmlndXJhdGlvbi4gRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHRoZSBwb3dlciBkb21haW4gY29uZmlndXJhdGlvbnMgYW5kIGNsb2NrIGluaXRpYWxpemF0aW9uIOKAkyB0aGlzIGlzIGEgY3JpdGljYWwgYXNwZWN0IGZvciB0aGUgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIHRoZSBTT0MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTU6XHRzdGF0aWMgaW50IGF0aDEya19jb3JlX3NvY19jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA4MTY6XHR7XG4gODE3Olx0XHRpbnQgcmV0O1xuIDgxODpcdFxuIDgxOTpcdFx0aWYgKGF0aDEya19mdG1fbW9kZSkge1xuIDgyMDpcdFx0XHRhYi1cdTAwM2Vmd19tb2RlID0gQVRIMTJLX0ZJUk1XQVJFX01PREVfRlRNO1xuIDgyMTpcdFx0XHRhdGgxMmtfaW5mbyhhYiwgXCYjMzQ7Qm9vdGluZyBpbiBmdG0gbW9kZVxcblwmIzM0Oyk7XG4gODIyOlx0XHR9XG4gODIzOlx0XG4gODI0Olx0XHRyZXQgPSBhdGgxMmtfcW1pX2luaXRfc2VydmljZShhYik7XG4gODI1Olx0XHRpZiAocmV0KSB7XG4gODI2Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIHFtaSA6JWRcXG5cJiMzNDssIHJldCk7XG4gODI3Olx0XHRcdHJldHVybiByZXQ7XG4gODI4Olx0XHR9XG4gODI5Olx0XG4gODMwOlx0XHRhdGgxMmtfZGVidWdmc19zb2NfY3JlYXRlKGFiKTtcbiA4MzE6XHRcbiA4MzI6XHRcdHJldCA9IGF0aDEya19oaWZfcG93ZXJfdXAoYWIpO1xuIDgzMzpcdFx0aWYgKHJldCkge1xuIDgzNDpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcG93ZXIgdXAgOiVkXFxuXCYjMzQ7LCByZXQpO1xuIDgzNTpcdFx0XHRnb3RvIGVycl9xbWlfZGVpbml0O1xuIDgzNjpcdFx0fVxuIDgzNzpcdFxuIDgzODpcdFx0cmV0dXJuIDA7XG4gODM5Olx0XG4gODQwOlx0ZXJyX3FtaV9kZWluaXQ6XG4gODQxOlx0XHRhdGgxMmtfZGVidWdmc19zb2NfZGVzdHJveShhYik7XG4gODQyOlx0XHRhdGgxMmtfcW1pX2RlaW5pdF9zZXJ2aWNlKGFiKTtcbiA4NDM6XHRcdHJldHVybiByZXQ7XG4gODQ0Olx0fVxuIDg0NTpcdFxuIDg0NjpcdHN0YXRpYyB2b2lkIGF0aDEya19jb3JlX3NvY19kZXN0cm95KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gODQ3Olx0e1xuIDg0ODpcdFx0YXRoMTJrX2hpZl9wb3dlcl9kb3duKGFiLCBmYWxzZSk7XG4gODQ5Olx0XHRhdGgxMmtfcmVnX2ZyZWUoYWIpO1xuIDg1MDpcdFx0YXRoMTJrX2RlYnVnZnNfc29jX2Rlc3Ryb3koYWIpO1xuIDg1MTpcdFx0YXRoMTJrX3FtaV9kZWluaXRfc2VydmljZShhYik7XG4gODUyOlx0fVxuIDg1MzpcdFxuIDg1NDpcdHN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfcGRldl9jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA4NTU6XHR7XG4gODU2Olx0XHRpbnQgcmV0O1xuIDg1NzpcdFxuIDg1ODpcdFx0cmV0ID0gYXRoMTJrX2RwX3BkZXZfYWxsb2MoYWIpO1xuIDg1OTpcdFx0aWYgKHJldCkge1xuIDg2MDpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYXR0YWNoIERQIHBkZXY6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDg2MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDg2MjpcdFx0fVxuIDg2MzpcdFxuIDg2NDpcdFx0cmV0ID0gYXRoMTJrX3RoZXJtYWxfcmVnaXN0ZXIoYWIpO1xuIDg2NTpcdFx0aWYgKHJldCkge1xuIDg2NjpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtjb3VsZCBub3QgcmVnaXN0ZXIgdGhlcm1hbCBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDg2NzpcdFx0XHRnb3RvIGVycl9kcF9wZGV2X2ZyZWU7XG4gODY4Olx0XHR9XG4gODY5Olx0XG4gODcwOlx0XHRhdGgxMmtfZGVidWdmc19wZGV2X2NyZWF0ZShhYik7XG4gODcxOlx0XG4gODcyOlx0XHRyZXR1cm4gMDtcbiA4NzM6XHRcbiA4NzQ6XHRlcnJfZHBfcGRldl9mcmVlOlxuIDg3NTpcdFx0YXRoMTJrX2RwX3BkZXZfZnJlZShhYik7XG4gODc2Olx0XHRyZXR1cm4gcmV0O1xuIDg3NzpcdH1cbiA4Nzg6XHRcbiA4Nzk6XHRzdGF0aWMgdm9pZCBhdGgxMmtfY29yZV9wZGV2X2Rlc3Ryb3koc3RydWN0IGF0aDEya19iYXNlICphYilcbiA4ODA6XHR7XG4gODgxOlx0XHRhdGgxMmtfdGhlcm1hbF91bnJlZ2lzdGVyKGFiKTtcbiA4ODI6XHRcdGF0aDEya19kcF9wZGV2X2ZyZWUoYWIpO1xuIDg4MzpcdH1cbiA4ODQ6XHRcbiA4ODU6XHRzdGF0aWMgaW50IGF0aDEya19jb3JlX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gODg2Olx0e1xuIDg4NzpcdFx0aW50IHJldDtcbiA4ODg6XHRcbiA4ODk6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YWItXHUwMDNlY29yZV9sb2NrKTtcbiA4OTA6XHRcbiA4OTE6XHRcdHJldCA9IGF0aDEya193bWlfYXR0YWNoKGFiKTtcbiA4OTI6XHRcdGlmIChyZXQpIHtcbiA4OTM6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGF0dGFjaCB3bWk6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDg5NDpcdFx0XHRyZXR1cm4gcmV0O1xuIDg5NTpcdFx0fVxuIDg5NjpcdFxuIDg5NzpcdFx0cmV0ID0gYXRoMTJrX2h0Y19pbml0KGFiKTtcbiA4OTg6XHRcdGlmIChyZXQpIHtcbiA4OTk6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXQgaHRjOiAlZFxcblwmIzM0OywgcmV0KTtcbiA5MDA6XHRcdFx0Z290byBlcnJfd21pX2RldGFjaDtcbiA5MDE6XHRcdH1cbiA5MDI6XHRcbiA5MDM6XHRcdHJldCA9IGF0aDEya19oaWZfc3RhcnQoYWIpO1xuIDkwNDpcdFx0aWYgKHJldCkge1xuIDkwNTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gc3RhcnQgSElGOiAlZFxcblwmIzM0OywgcmV0KTtcbiA5MDY6XHRcdFx0Z290byBlcnJfd21pX2RldGFjaDtcbiA5MDc6XHRcdH1cbiA5MDg6XHRcbiA5MDk6XHRcdHJldCA9IGF0aDEya19odGNfd2FpdF90YXJnZXQoXHUwMDI2YWItXHUwMDNlaHRjKTtcbiA5MTA6XHRcdGlmIChyZXQpIHtcbiA5MTE6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbm5lY3QgdG8gSFRDOiAlZFxcblwmIzM0OywgcmV0KTtcbiA5MTI6XHRcdFx0Z290byBlcnJfaGlmX3N0b3A7XG4gOTEzOlx0XHR9XG4gOTE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTIwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBhdGgxMmtfcW1pX2luaXRfc2VydmljZSoqCgpPa2F5LCBzbyBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgIGlzIGJlaW5nIGNhbGxlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhpcyBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIFFNSSAoUXVhbGNvbW0gTVNNIEludGVyZmFjZSkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBhdGgxMmsgZHJpdmVyLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgZ3JvdW5kd29yayBpcyBsYWlkIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGZpcm13YXJlLCBsaWtlbHkgc2V0dGluZyB1cCBRTUkgY29ubmVjdGlvbnMgb3IgYmluZGluZ3MsIGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGV4Y2hhbmdlIHdpdGggdGhlIG1vZGVtLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIHRoZSBuZWNlc3NhcnkgZGV2aWNlIGZpbGVzLCBlbmRwb2ludHMsIG9yIHdoYXRldmVyIGludGVyZmFjZSB0aGUgZHJpdmVyIGlzIHVzaW5nIHRvIGludGVyZmFjZSB3aXRoIHRoZSBRdWFsY29tbSBtb2RlbSBvdmVyIHRoZSBRTUkgcHJvdG9jb2wuIEkmIzM5O20ga2VlbiB0byBsb29rIGZvciBhbnkgZXJyb3IgaGFuZGxpbmcgdG8gc2VlIGhvdyByb2J1c3QgdGhpcyBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzLiBJIGhvcGUgdGhlIGRvY3VtZW50YXRpb24gaXMgd2VsbCB3cml0dGVuLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHJlZ2lzdGVyIG9wZXJhdGlvbnMgbmV4dC4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYmVpbmcga2lja2VkIG9mZiBhdCB0aGlzIHN0YWdlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz00MDA5PXN0YXRpYyB2b2lkIGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDA4MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6NDA4MjppbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDA4My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaD02NDg9dm9pZCBhdGgxMmtfcW1pX2RlaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaDo2NDk6aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaC02NTAtdm9pZCBhdGgxMmtfcW1pX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTA4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUgd2UgZ28uLi4KCioqRGl2aW5nIGludG8gYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIGZ1bmN0aW9uLCBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgLiBGcm9tIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpbml0aWFsaXppbmcgYSBRTUkgc2VydmljZSB3aXRoaW4gdGhlIGF0aDEyayBkcml2ZXIsIGxpa2VseSByZWxhdGVkIHRvIFF1YWxjb21tJiMzOTtzIG1lc3NhZ2luZyBpbnRlcmZhY2UuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZpcm13YXJlIG92ZXIgYSBRTUkgbGluaywgcGVyaGFwcyBmb3IgZGF0YSB0cmFuc2ZlciwgY29udHJvbCwgb3IgY29uZmlndXJhdGlvbiBvZiB0aGUgd2lyZWxlc3MgaGFyZHdhcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byByZWdpc3RlciBvciBlbmFibGUgYSBRTUkgc2VydmljZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugc2VydmljZSBpZGVudGlmaWVycyAoU0lEcyksIGhhbmRsZXIgZnVuY3Rpb25zLCBhbmQgYW55IGFzc29jaWF0ZWQgY29udGV4dCBvciBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBRTUkgaW50ZXJhY3Rpb24uIEhvcGVmdWxseSB0aGVyZSBhcmUgZXJyb3IgY2hlY2tzIC0gYWx3YXlzIGEgbXVzdCB3aXRoIHRoZXNlIGxvdy1sZXZlbCBkcml2ZXJzLiBBIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBtaWdodCBiZSBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGRlcGVuZCBvbiB0aGlzIHNlcnZpY2UgYmVpbmcgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgZW5zdXJpbmcgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBhbGxvY2F0ZWQsIGluaXRpYWxpemVkIGFuZCBkZS1hbGxvY2F0ZWQuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlc2UgZHJpdmVycywgSSB3aWxsIGJlIGxvb2tpbmcgb3V0IGZvciBhbnkgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB3aGVuIG11bHRpcGxlIFFNSSBtZXNzYWdlcyBhcnJpdmUgb3IgYXJlIHRyYW5zbWl0dGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MDgyOlx0aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG40MDgzOlx0e1xuNDA4NDpcdFx0aW50IHJldDtcbjQwODU6XHRcbjQwODY6XHRcdG1lbXNldChcdTAwMjZhYi1cdTAwM2VxbWkudGFyZ2V0LCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9pbmZvKSk7XG40MDg3Olx0XHRtZW1zZXQoXHUwMDI2YWItXHUwMDNlcW1pLnRhcmdldF9tZW0sIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X21lbV9jaHVuaykpO1xuNDA4ODpcdFx0YWItXHUwMDNlcW1pLmFiID0gYWI7XG40MDg5Olx0XG40MDkwOlx0XHRhYi1cdTAwM2VxbWkudGFyZ2V0X21lbV9tb2RlID0gYWItXHUwMDNldGFyZ2V0X21lbV9tb2RlO1xuNDA5MTpcdFx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIEFUSDEyS19RTUlfUkVTUF9MRU5fTUFYLFxuNDA5MjpcdFx0XHRcdCAgICAgIFx1MDAyNmF0aDEya19xbWlfb3BzLCBhdGgxMmtfcW1pX21zZ19oYW5kbGVycyk7XG40MDkzOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG40MDk0Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSBxbWkgaGFuZGxlXFxuXCYjMzQ7KTtcbjQwOTU6XHRcdFx0cmV0dXJuIHJldDtcbjQwOTY6XHRcdH1cbjQwOTc6XHRcbjQwOTg6XHRcdGFiLVx1MDAzZXFtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwmIzM0O2F0aDEya19xbWlfZHJpdmVyX2V2ZW50XCYjMzQ7LCAwKTtcbjQwOTk6XHRcdGlmICghYWItXHUwMDNlcW1pLmV2ZW50X3dxKSB7XG40MTAwOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXG5cJiMzNDspO1xuNDEwMTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjQxMDI6XHRcdH1cbjQxMDM6XHRcbjQxMDQ6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFiLVx1MDAzZXFtaS5ldmVudF9saXN0KTtcbjQxMDU6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5ldmVudF9sb2NrKTtcbjQxMDY6XHRcdElOSVRfV09SSyhcdTAwMjZhYi1cdTAwM2VxbWkuZXZlbnRfd29yaywgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29yayk7XG40MTA3Olx0XG40MTA4Olx0XHRyZXQgPSBxbWlfYWRkX2xvb2t1cChcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlLCBRTUlfU0VSVklDRV9JRF9XTEZXLFxuNDEwOTpcdFx0XHRcdCAgICAgQVRIMTJLX1FNSV9XTEZXX1NFUlZJQ0VfVkVSU19WMDEsXG40MTEwOlx0XHRcdFx0ICAgICBhYi1cdTAwM2VxbWkuc2VydmljZV9pbnNfaWQpO1xuNDExMTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuNDExMjpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGFkZCBxbWkgbG9va3VwXFxuXCYjMzQ7KTtcbjQxMTM6XHRcdFx0ZGVzdHJveV93b3JrcXVldWUoYWItXHUwMDNlcW1pLmV2ZW50X3dxKTtcbjQxMTQ6XHRcdFx0cmV0dXJuIHJldDtcbjQxMTU6XHRcdH1cbjQxMTY6XHRcbjQxMTc6XHRcdHJldHVybiByZXQ7XG40MTE4Olx0fVxuNDExOTpcdFxuNDEyMDpcdHZvaWQgYXRoMTJrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuNDEyMTpcdHtcbjQxMjI6XHRcdGlmICghYWItXHUwMDNlcW1pLmFiKVxuNDEyMzpcdFx0XHRyZXR1cm47XG40MTI0Olx0XG40MTI1Olx0XHRxbWlfaGFuZGxlX3JlbGVhc2UoXHUwMDI2YWItXHUwMDNlcW1pLmhhbmRsZSk7XG40MTI2Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmFiLVx1MDAzZXFtaS5ldmVudF93b3JrKTtcbjQxMjc6XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGFiLVx1MDAzZXFtaS5ldmVudF93cSk7XG40MTI4Olx0XHRhdGgxMmtfcW1pX2F1eF91Y19mcmVlKGFiKTtcbjQxMjk6XHRcdGF0aDEya19xbWlfbTNfZnJlZShhYik7XG40MTMwOlx0XHRhdGgxMmtfcW1pX2ZyZWVfdGFyZ2V0X21lbV9jaHVuayhhYik7XG40MTMxOlx0XHRhYi1cdTAwM2VxbWkuYWIgPSBOVUxMO1xuNDEzMjpcdH1cbjQxMzM6XHRcbjQxMzQ6XHR2b2lkIGF0aDEya19xbWlfZnJlZV9yZXNvdXJjZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuNDEzNTpcdHtcbjQxMzY6XHRcdGF0aDEya19xbWlfZnJlZV90YXJnZXRfbWVtX2NodW5rKGFiKTtcbjQxMzc6XHRcdGF0aDEya19xbWlfYXV4X3VjX2ZyZWUoYWIpO1xuNDEzODpcdFx0YXRoMTJrX3FtaV9tM19mcmVlKGFiKTtcbjQxMzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDc0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBwcm9jZXNzLCB0aGlua2luZyBpdCB0aHJvdWdoIGZyb20gYSB0ZWNobmljYWwgcGVyc3BlY3RpdmUuCgoqKkNvbm5lY3RpbmcgdG8gdGhlIFFNSSBTZXJ2aWNlKioKCkFscmlnaHQsIHNvIGBxbWlfYWRkX2xvb2t1cGAgaXMgY2FsbGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoaXMgaXMgdGhlIGluaXRpYWwgc3RlcDogaXQmIzM5O3MgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGVzc2VudGlhbGx5IHRlbGxpbmcgdGhlIHN5c3RlbSwgJiMzNDtIZXksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGlzIHNwZWNpZmljIFFNSSBzZXJ2aWNlLiBLZWVwIGFuIGV5ZSBvdXQgZm9yIGl0LiYjMzQ7IEkmIzM5O20gc2V0dGluZyB1cCBhIHNvcnQgb2YgbGlzdGVuaW5nIHBvc3QuCgpBbmQgdGhlbiwgdGhlIG1hZ2ljIGhhcHBlbnMuIE9uY2UgdGhlIHNlcnZpY2UgSSYjMzk7bSBsb29raW5nIGZvciBhY3R1YWxseSAqYXBwZWFycyog4oCTIGl0JiMzOTtzIGRpc2NvdmVyZWQgYW5kIGFjY2Vzc2libGUg4oCTIHRoZSBzeXN0ZW0gdHJpZ2dlcnMgdGhlIGBuZXdfc2VydmVyYCBjYWxsYmFjayBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgYXRoMTJrX3FtaV9vcHNgLiBUaGF0JiMzOTtzIHRoZSBob29rLCB0aGUgc2lnbmFsIHRoYXQgdGhlIHNlcnZpY2UgaXMgcmVhZHkuIFRoaXMgbWFrZXMgc3VyZSBteSBzeXN0ZW0ga25vd3MgZXhhY3RseSBob3cgdG8gaGFuZGxlIHRoZSBjb25uZWN0aW9uIHdoZW4gdGhlIHNlcnZpY2UgaXMgbGl2ZS4gSXQgcHJvdmlkZXMgYSBtZWFucyB0byBzZXQgdXAgdGhlIGNvbW11bmljYXRpb25zIG9uY2UgdGhlIHNlcnZpY2UgaXMgYXZhaWxhYmxlLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBFZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19xbWlfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zOTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX21zZ19oYW5kbGVyIGF0aDEya19xbWlfbXNnX2hhbmRsZXJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTUzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTU0OnN0YXRpYyBpbnQgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk1NS1cdFx0XHRcdCAgICAgc3RydWN0IHFtaV9zZXJ2aWNlICpzZXJ2aWNlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk3OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6Mzk3OTpzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX29wc19kZWxfc2VydmVyKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlfaGRsLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTgwLVx0XHRcdFx0ICAgICAgc3RydWN0IHFtaV9zZXJ2aWNlICpzZXJ2aWNlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6Mzk4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9vcHMgYXRoMTJrX3FtaV9vcHMgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5OTA6XHQubmV3X3NlcnZlciA9IGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5OTE6XHQuZGVsX3NlcnZlciA9IGF0aDEya19xbWlfb3BzX2RlbF9zZXJ2ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5OTItfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTQwODI9aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDkxLVx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIEFUSDEyS19RTUlfUkVTUF9MRU5fTUFYLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzo0MDkyOlx0XHRcdCAgICAgIFx1MDAyNmF0aDEya19xbWlfb3BzLCBhdGgxMmtfcW1pX21zZ19oYW5kbGVycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwOTMtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDI2CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcmAgZnVuY3Rpb24uIEFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBteSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBnb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgKioKCkFscmlnaHQsIHNvICphdGgxMmsqLCB0aGF0IHNjcmVhbXMgUXVhbGNvbW0gQXRoZXJvcyBXaUZpLCBzcGVjaWZpY2FsbHkgdGhlaXIgbmV3ZXIgZ2VuZXJhdGlvbiBjaGlwc2V0cywgcmlnaHQ/IEFuZCAqcW1pKiwgdGhhdCYjMzk7cyB1bmRvdWJ0ZWRseSB0aGUgUXVhbGNvbW0gSW50ZXJmYWNlLCB1c2VkIGZvciBtb2RlbSBjb250cm9sIGFuZCwgbW9yZSByZWxldmFudCBoZXJlLCBsaWtlbHkgc29tZSBmb3JtIG9mIGNvbW11bmljYXRpb24gd2l0aCBhIGZpcm13YXJlIHJ1bm5pbmcgb24gdGhlIFdpRmkgY2hpcHNldCBpdHNlbGYuIFRoZSAqb3BzKiBwYXJ0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYWJvdXQgZGVmaW5pbmcgYSBzZXQgb2YgKm9wZXJhdGlvbnMqIG9yIG1ldGhvZHMuIEZpbmFsbHksICpuZXdfc2VydmVyKi4uLiBUaGlzIHNjcmVhbXMgaW5pdGlhbGl6YXRpb24sIGNyZWF0aW9uLCBwcm9iYWJseSBzZXR1cCBvZiBhIGNvbW11bmljYXRpb24gY2hhbm5lbCBvciBzZXJ2ZXIgc2lkZSBjb21wb25lbnQuCgpNeSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHBvc3NpYmxlIHNjZW5hcmlvczogSXMgdGhpcyBoYW5kbGluZyB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgZm9yIGEgbmV3IFFNSSBjb25uZWN0aW9uIHRvIHRoZSBXaUZpIGZpcm13YXJlPyBPciBwZXJoYXBzIHRoZSBzZXR1cCBvZiBhIFFNSSAmIzM0O3NlcnZlciYjMzQ7IGluc3RhbmNlIHdpdGhpbiB0aGUgaG9zdCBkcml2ZXIsIGVuYWJsaW5nIGl0IHRvIGFjY2VwdCBjb21tYW5kcyBhbmQgZGF0YSBmcm9tIHRoZSBmaXJtd2FyZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHJlbGF0ZWQgdG8gYSBuZXcgY2hhbm5lbD8KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIHNjcnV0aW5pemUgdGhpcyBmdW5jdGlvbiBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uKio6IE1lbW9yeSBiZWluZyBhbGxvY2F0ZWQgZm9yIGRhdGEgc3RydWN0dXJlcywgYW5kIGhvdyBhcmUgdGhlc2UgcmVzb3VyY2VzIG1hbmFnZWQuCiogICAqKkVycm9yIGhhbmRsaW5nKio6IFdoZXJlIGFyZSBjaGVja3MgZm9yIGZhaWx1cmUgaGFwcGVuaW5nPyBXaGF0IGhhcHBlbnMgd2hlbiBhIHJlc291cmNlIGZhaWxzIHRvIGFsbG9jYXRlPwoqICAgKipTZWN1cml0eSBoYXJkZW5pbmcqKjogQ2hlY2sgZm9yIGFueSBwb3NzaWJsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW5oZXJlbnQgaW4gYSBuZXcgY2hhbm5lbC4KKiAgICoqRmlybXdhcmUgaW50ZXJhY3Rpb24qKjogU2VlIGV4YWN0bHkgd2hhdCBpcyBiZWluZyBjb21tdW5pY2F0ZWQsIGlmIGl0IHNlZW1zIHJlYXNvbmFibGUuCiogICAqKkNvbmN1cnJlbmN5Kio6IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NrLXVwcyBoZXJlPwoqICAgKipJbml0aWFsaXphdGlvbiBzdGVwcyoqOiBJJiMzOTttIGV4cGVjdGluZyBhIHNlcmllcyBvZiBmdW5jdGlvbiBjYWxscyB0byBpbml0aWFsaXplIHRoZSBRTUkgaW50ZXJmYWNlLiBQcm9iYWJseSBhIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBwb3RlbnRpYWxseSBzZXR0aW5nIHVwIGJ1ZmZlcnMsIGV0Yy4KKiAgICoqRGVwZW5kZW5jaWVzKio6IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhpcyBpcyBjYWxsaW5nIG9yIHVzaW5nOyB1bmRlcnN0YW5kIHdoYXQgZGF0YSBpdCYjMzk7cyBwYXNzaW5nLCBhbmQgd2hhdCBjb250ZXh0IGl0JiMzOTtzIG9wZXJhdGluZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk1NDpcdHN0YXRpYyBpbnQgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcbjM5NTU6XHRcdFx0XHRcdCAgICAgc3RydWN0IHFtaV9zZXJ2aWNlICpzZXJ2aWNlKVxuMzk1NjpcdHtcbjM5NTc6XHRcdHN0cnVjdCBhdGgxMmtfcW1pICpxbWkgPSBjb250YWluZXJfb2YocW1pX2hkbCwgc3RydWN0IGF0aDEya19xbWksIGhhbmRsZSk7XG4zOTU4Olx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVx1MDAzZWFiO1xuMzk1OTpcdFx0c3RydWN0IHNvY2thZGRyX3FydHIgKnNxID0gXHUwMDI2cW1pLVx1MDAzZXNxO1xuMzk2MDpcdFx0aW50IHJldDtcbjM5NjE6XHRcbjM5NjI6XHRcdHNxLVx1MDAzZXNxX2ZhbWlseSA9IEFGX1FJUENSVFI7XG4zOTYzOlx0XHRzcS1cdTAwM2VzcV9ub2RlID0gc2VydmljZS1cdTAwM2Vub2RlO1xuMzk2NDpcdFx0c3EtXHUwMDNlc3FfcG9ydCA9IHNlcnZpY2UtXHUwMDNlcG9ydDtcbjM5NjU6XHRcbjM5NjY6XHRcdHJldCA9IGtlcm5lbF9jb25uZWN0KHFtaV9oZGwtXHUwMDNlc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopc3EsXG4zOTY3Olx0XHRcdFx0ICAgICBzaXplb2YoKnNxKSwgMCk7XG4zOTY4Olx0XHRpZiAocmV0KSB7XG4zOTY5Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtxbWkgZmFpbGVkIHRvIGNvbm5lY3QgdG8gcmVtb3RlIHNlcnZpY2UgJWRcXG5cJiMzNDssIHJldCk7XG4zOTcwOlx0XHRcdHJldHVybiByZXQ7XG4zOTcxOlx0XHR9XG4zOTcyOlx0XG4zOTczOlx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSwgXCYjMzQ7cW1pIHdpZmkgZncgcW1pIHNlcnZpY2UgY29ubmVjdGVkXFxuXCYjMzQ7KTtcbjM5NzQ6XHRcdGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3Bvc3QocW1pLCBBVEgxMktfUU1JX0VWRU5UX1NFUlZFUl9BUlJJVkUsIE5VTEwpO1xuMzk3NTpcdFxuMzk3NjpcdFx0cmV0dXJuIHJldDtcbjM5Nzc6XHR9XG4zOTc4Olx0XG4zOTc5Olx0c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9vcHNfZGVsX3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcbjM5ODA6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBxbWlfc2VydmljZSAqc2VydmljZSlcbjM5ODE6XHR7XG4zOTgyOlx0XHRzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pID0gY29udGFpbmVyX29mKHFtaV9oZGwsIHN0cnVjdCBhdGgxMmtfcW1pLCBoYW5kbGUpO1xuMzk4MzpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cdTAwM2VhYjtcbjM5ODQ6XHRcbjM5ODU6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUU1JLCBcJiMzNDtxbWkgd2lmaSBmdyBkZWwgc2VydmVyXFxuXCYjMzQ7KTtcbjM5ODY6XHRcdGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3Bvc3QocW1pLCBBVEgxMktfUU1JX0VWRU5UX1NFUlZFUl9FWElULCBOVUxMKTtcbjM5ODc6XHR9XG4zOTg4Olx0XG4zOTg5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGF0aDEya19xbWlfb3BzID0ge1xuMzk5MDpcdFx0Lm5ld19zZXJ2ZXIgPSBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyLFxuMzk5MTpcdFx0LmRlbF9zZXJ2ZXIgPSBhdGgxMmtfcW1pX29wc19kZWxfc2VydmVyLFxuMzk5MjpcdH07XG4zOTkzOlx0XG4zOTk0Olx0c3RhdGljIGludCBhdGgxMmtfcW1pX2V2ZW50X2hvc3RfY2FwKHN0cnVjdCBhdGgxMmtfcW1pICpxbWkpXG4zOTk1Olx0e1xuMzk5NjpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cdTAwM2VhYjtcbjM5OTc6XHRcdGludCByZXQ7XG4zOTk4Olx0XG4zOTk5Olx0XHRyZXQgPSBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmQoYWIpO1xuNDAwMDpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuNDAwMTpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNlbmQgcW1pIGhvc3QgY2FwIGZvciBkZXZpY2UgaWQgJWQ6ICVkXFxuXCYjMzQ7LFxuNDAwMjpcdFx0XHRcdCAgICBhYi1cdTAwM2VkZXZpY2VfaWQsIHJldCk7XG40MDAzOlx0XHRcdHJldHVybiByZXQ7XG40MDA0Olx0XHR9XG40MDA1Olx0XG40MDA2Olx0XHRyZXR1cm4gcmV0O1xuNDAwNzpcdH1cbjQwMDg6XHRcbjQwMDk6XHRzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjQwMTA6XHR7XG40MDExOlx0XHRzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGgxMmtfcW1pLFxuNDAxMjpcdFx0XHRcdFx0XHQgICAgICBldmVudF93b3JrKTtcbjQwMTM6XHRcdHN0cnVjdCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudCAqZXZlbnQ7XG40MDE0Olx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVx1MDAzZWFiO1xuNDAxNTpcdFx0aW50IHJldDtcbjQwMTY6XHRcbjQwMTc6XHRcdHNwaW5fbG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG40MDE4Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2cW1pLVx1MDAzZWV2ZW50X2xpc3QpKSB7XG40MDE5Olx0XHRcdGV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZxbWktXHUwMDNlZXZlbnRfbGlzdCxcbjQwMjA6XHRcdFx0XHRcdFx0IHN0cnVjdCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudCwgbGlzdCk7XG40MDIxOlx0XHRcdGxpc3RfZGVsKFx1MDAyNmV2ZW50LVx1MDAzZWxpc3QpO1xuNDAyMjpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG40MDIzOlx0XG40MDI0Olx0XHRcdGlmICh0ZXN0X2JpdChBVEgxMktfRkxBR19VTlJFR0lTVEVSSU5HLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpKVxuNDAyNTpcdFx0XHRcdGdvdG8gc2tpcDtcbjQwMjY6XHRcbjQwMjc6XHRcdFx0c3dpdGNoIChldmVudC1cdTAwM2V0eXBlKSB7XG40MDI4Olx0XHRcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9TRVJWRVJfQVJSSVZFOlxuNDAyOTpcdFx0XHRcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZShxbWkpO1xuNDAzMDpcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG40MDMxOlx0XHRcdFx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpO1xuNDAzMjpcdFx0XHRcdGJyZWFrO1xuNDAzMzpcdFx0XHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0VYSVQ6XG40MDM0Olx0XHRcdFx0c2V0X2JpdChBVEgxMktfRkxBR19DUkFTSF9GTFVTSCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjQwMzU6XHRcdFx0XHRicmVhaztcbjQwMzY6XHRcdFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX1JFUVVFU1RfTUVNOlxuNDAzNzpcdFx0XHRcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfbWVtX3JlcXVlc3QocW1pKTtcbjQwMzg6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNDAzOTpcdFx0XHRcdFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjQwNDA6XHRcdFx0XHRicmVhaztcbjQwNDE6XHRcdFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX0ZXX01FTV9SRUFEWTpcbjQwNDI6XHRcdFx0XHRyZXQgPSBhdGgxMmtfcW1pX2V2ZW50X2xvYWRfYmRmKHFtaSk7XG40MDQzOlx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQwNDQ6XHRcdFx0XHRcdHNldF9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG40MDQ1Olx0XHRcdFx0YnJlYWs7XG40MDQ2Olx0XHRcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9GV19SRUFEWTpcbjQwNDc6XHRcdFx0XHRjbGVhcl9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG40MDQ4Olx0XHRcdFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX1FNSV9GV19SRUFEWV9DT01QTEVURSwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKSkge1xuNDA0OTpcdFx0XHRcdFx0aWYgKGFiLVx1MDAzZWlzX3Jlc2V0KVxuNDA1MDpcdFx0XHRcdFx0XHRhdGgxMmtfaGFsX2R1bXBfc3JuZ19zdGF0cyhhYik7XG40MDUxOlx0XG40MDUyOlx0XHRcdFx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1JFQ09WRVJZLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpO1xuNDA1MzpcdFx0XHRcdFx0cXVldWVfd29yayhhYi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmFiLVx1MDAzZXJlc3RhcnRfd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODAwCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nIGZvciBUZXN0aW5nIHRoZSBhdGgxMmsgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gdHJpZ2dlciBgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcmAgaW4gdGhlIGBhdGgxMmtgIGRyaXZlci4gSSBrbm93IHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiBhIFFNSSBzZXJ2aWNlIGlzIGRpc2NvdmVyZWQuIE5vdywgU3l6a2FsbGVyIGNhbiBlbXVsYXRlIFFNSSBzZXJ2aWNlcyB1c2luZyBBRl9RSVBDUlRSIHNvY2tldHMg4oCTIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgdXNlZnVsLiBCdXQgd2FpdCwgYGF0aDEya2AgaXMgYSBQQ0kgZHJpdmVyLCBpc24mIzM5O3QgaXQ/IEl0IGhhcyB0byByZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4KCkFoYSEgU3l6a2FsbGVyIGhhcyB0aGlzIGBzeXpfcGNpX2RldmljZV9hZGRgIGZ1bmN0aW9uLiBDYW4gSSB1c2UgdGhhdCB0byBteSBhZHZhbnRhZ2U/IElmIEkgY2FuIGFkZCBhIHZpcnR1YWwgUENJIGRldmljZSB1c2luZyBTeXprYWxsZXIgdGhhdCAqbWF0Y2hlcyogYGF0aDEya2AmIzM5O3MgdmVuZG9yIGFuZCBkZXZpY2UgSUQsIHRoZW4gYGF0aDEya19wY2lfcHJvYmVgIHNob3VsZCBnZXQgY2FsbGVkLiBHb29kLgoKT25jZSBgYXRoMTJrX3BjaV9wcm9iZWAgcnVucywgaXQgd2lsbCBjYWxsIGBhdGgxMmtfY29yZV9pbml0YCwgd2hpY2ggdGhlbiBsZWFkcyB0byBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgLiBBbmQgKnRoYXQqIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIFFNSSBjbGllbnQuIFBlcmZlY3QhCgpOb3csIHRoZSBjcnVjaWFsIHN0ZXA6IElmIFN5emthbGxlciAqYWxzbyogZW11bGF0ZXMgYSBRTUkgc2VydmVyIG9uIEFGX1FJUENSVFIsIHRoYXQgc2hvdWxkIHRyaWdnZXIgYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgIG9uIHRoZSBjbGllbnQgc2lkZS4gVGhhdCYjMzk7cyB0aGUgbGluayBJIHdhcyBsb29raW5nIGZvci4gVGhlbiwgYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgd2lsbCBiZSBjYWxsZWQuIE5vdyBJIGp1c3QgbmVlZCB0byBkaWcgaW50byBgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlYCBhbmQgc2VlIHdoYXQgaGFwcGVucyB0aGVyZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgc2hvdWxkIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzU4Olx0aW50IGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZShzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxuMzc1OTpcdHtcbjM3NjA6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBxbWktXHUwMDNlYWIsICpibG9ja19hYjtcbjM3NjE6XHRcdHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnID0gYWItXHUwMDNlYWc7XG4zNzYyOlx0XHRpbnQgcmV0O1xuMzc2MzpcdFxuMzc2NDpcdFx0YXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoYWIpO1xuMzc2NTpcdFxuMzc2NjpcdFx0cmV0ID0gYXRoMTJrX3FtaV9md19pbmRfcmVnaXN0ZXJfc2VuZChhYik7XG4zNzY3Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4zNzY4Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtxbWkgZmFpbGVkIHRvIHNlbmQgRlcgaW5kaWNhdGlvbiBRTUk6JWRcXG5cJiMzNDssIHJldCk7XG4zNzY5Olx0XHRcdHJldHVybiByZXQ7XG4zNzcwOlx0XHR9XG4zNzcxOlx0XG4zNzcyOlx0XHRzcGluX2xvY2soXHUwMDI2cW1pLVx1MDAzZWV2ZW50X2xvY2spO1xuMzc3MzpcdFxuMzc3NDpcdFx0YXRoMTJrX3FtaV9zZXRfZXZlbnRfYmxvY2socW1pLCB0cnVlKTtcbjM3NzU6XHRcbjM3NzY6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnFtaS1cdTAwM2VldmVudF9sb2NrKTtcbjM3Nzc6XHRcbjM3Nzg6XHRcdG11dGV4X2xvY2soXHUwMDI2YWctXHUwMDNlbXV0ZXgpO1xuMzc3OTpcdFxuMzc4MDpcdFx0aWYgKGF0aDEya19xbWlfaHdfZ3JvdXBfaG9zdF9jYXBfcmVhZHkoYWcpKSB7XG4zNzgxOlx0XHRcdGF0aDEya19jb3JlX2h3X2dyb3VwX3NldF9tbG9fY2FwYWJsZShhZyk7XG4zNzgyOlx0XG4zNzgzOlx0XHRcdGJsb2NrX2FiID0gYXRoMTJrX3FtaV9od19ncm91cF9maW5kX2Jsb2NrZWQoYWcpO1xuMzc4NDpcdFx0XHRpZiAoYmxvY2tfYWIpXG4zNzg1Olx0XHRcdFx0YXRoMTJrX3FtaV90cmlnZ2VyX2hvc3RfY2FwKGJsb2NrX2FiKTtcbjM3ODY6XHRcdH1cbjM3ODc6XHRcbjM3ODg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZhZy1cdTAwM2VtdXRleCk7XG4zNzg5Olx0XG4zNzkwOlx0XHRyZXR1cm4gcmV0O1xuMzc5MTpcdH1cbjM3OTI6XHRcbjM3OTM6XHQvKiBjbGFuZyBzdGFjayB1c2FnZSBleHBsb2RlcyBpZiB0aGlzIGlzIGlubGluZWQgKi9cbjM3OTQ6XHRzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrXG4zNzk1Olx0aW50IGF0aDEya19xbWlfZXZlbnRfbWVtX3JlcXVlc3Qoc3RydWN0IGF0aDEya19xbWkgKnFtaSlcbjM3OTY6XHR7XG4zNzk3Olx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVx1MDAzZWFiO1xuMzc5ODpcdFx0aW50IHJldDtcbjM3OTk6XHRcbjM4MDA6XHRcdHJldCA9IGF0aDEya19xbWlfcmVzcG9uZF9md19tZW1fcmVxdWVzdChhYik7XG4zODAxOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4zODAyOlx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtxbWkgZmFpbGVkIHRvIHJlc3BvbmQgZncgbWVtIHJlcTolZFxcblwmIzM0OywgcmV0KTtcbjM4MDM6XHRcdFx0cmV0dXJuIHJldDtcbjM4MDQ6XHRcdH1cbjM4MDU6XHRcbjM4MDY6XHRcdHJldHVybiByZXQ7XG4zODA3Olx0fVxuMzgwODpcdFxuMzgwOTpcdC8qIGNsYW5nIHN0YWNrIHVzYWdlIGV4cGxvZGVzIGlmIHRoaXMgaXMgaW5saW5lZCAqL1xuMzgxMDpcdHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2tcbjM4MTE6XHRpbnQgYXRoMTJrX3FtaV9ldmVudF9sb2FkX2JkZihzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxuMzgxMjpcdHtcbjM4MTM6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBxbWktXHUwMDNlYWI7XG4zODE0Olx0XHRjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHdfcGFyYW1zID0gYWItXHUwMDNlaHdfcGFyYW1zO1xuMzgxNTpcdFx0aW50IHJldDtcbjM4MTY6XHRcbjM4MTc6XHRcdHJldCA9IGF0aDEya19xbWlfcmVxdWVzdF90YXJnZXRfY2FwKGFiKTtcbjM4MTg6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjM4MTk6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O3FtaSBmYWlsZWQgdG8gcmVxIHRhcmdldCBjYXBhYmlsaXRpZXM6JWRcXG5cJiMzNDssIHJldCk7XG4zODIwOlx0XHRcdHJldHVybiByZXQ7XG4zODIxOlx0XHR9XG4zODIyOlx0XG4zODIzOlx0XHRyZXQgPSBhdGgxMmtfcW1pX2xvYWRfYmRmX3FtaShhYiwgQVRIMTJLX1FNSV9CREZfVFlQRV9SRUdEQik7XG4zODI0Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4zODI1Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtxbWkgZmFpbGVkIHRvIGxvYWQgcmVnZGIgZmlsZTolZFxcblwmIzM0OywgcmV0KTtcbjM4MjY6XHRcdFx0cmV0dXJuIHJldDtcbjM4Mjc6XHRcdH1cbjM4Mjg6XHRcbjM4Mjk6XHRcdHJldCA9IGF0aDEya19xbWlfbG9hZF9iZGZfcW1pKGFiLCBBVEgxMktfUU1JX0JERl9UWVBFX0VMRik7XG4zODMwOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4zODMxOlx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtxbWkgZmFpbGVkIHRvIGxvYWQgYm9hcmQgZGF0YSBmaWxlOiVkXFxuXCYjMzQ7LCByZXQpO1xuMzgzMjpcdFx0XHRyZXR1cm4gcmV0O1xuMzgzMzpcdFx0fVxuMzgzNDpcdFxuMzgzNTpcdFx0aWYgKGh3X3BhcmFtcy1cdTAwM2Vkb3dubG9hZF9jYWxpYikge1xuMzgzNjpcdFx0XHRyZXQgPSBhdGgxMmtfcW1pX2xvYWRfYmRmX3FtaShhYiwgQVRIMTJLX1FNSV9CREZfVFlQRV9DQUxJQlJBVElPTik7XG4zODM3Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4zODM4Olx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O3FtaSBmYWlsZWQgdG8gbG9hZCBjYWxpYnJhdGVkIGRhdGEgOiVkXFxuXCYjMzQ7LCByZXQpO1xuMzgzOTpcdFx0fVxuMzg0MDpcdFxuMzg0MTpcdFx0cmV0ID0gYXRoMTJrX3FtaV93bGFuZndfbTNfaW5mb19zZW5kKGFiKTtcbjM4NDI6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjM4NDM6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O3FtaSBmYWlsZWQgdG8gc2VuZCBtMyBpbmZvIHJlcTolZFxcblwmIzM0OywgcmV0KTtcbjM4NDQ6XHRcdFx0cmV0dXJuIHJldDtcbjM4NDU6XHRcdH1cbjM4NDY6XHRcbjM4NDc6XHRcdGlmIChod19wYXJhbXMtXHUwMDNlZncuZG93bmxvYWRfYXV4X3Vjb2RlKSB7XG4zODQ4Olx0XHRcdHJldCA9IGF0aDEya19xbWlfd2xhbmZ3X2F1eF91Y19pbmZvX3NlbmQoYWIpO1xuMzg0OTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4zODUwOlx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O3FtaSBmYWlsZWQgdG8gc2VuZCBhdXhfdWMgaW5mbyByZXE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMzg1MTpcdFx0XHRcdHJldHVybiByZXQ7XG4zODUyOlx0XHRcdH1cbjM4NTM6XHRcdH1cbjM4NTQ6XHRcbjM4NTU6XHRcdHJldHVybiByZXQ7XG4zODU2Olx0fVxuMzg1NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTEzNQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDc0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2g6IEEgU3l6a2FsbGVyIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQgbW9kaWZpZXMgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBhbmQgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgdGhhdCBgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlYCBjYWxscyB0aGUgZm9ybWVyLCBhbmQgYEFUSDEyS19RTUlfRVZFTlRfSE9TVF9DQVBgIHRyaWdnZXJzIHRoZSBsYXR0ZXIuIFRoZSBjcml0aWNhbCBsaW5rIGlzIHdoZXRoZXIgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSAqcmVhY2gqIHRoZXNlIGZ1bmN0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsZXZlcmFnZSBgc3l6X3BjaV9kZXZpY2VfYWRkYCB0byB0cmlnZ2VyIGBhdGgxMmtfcGNpX3Byb2JlYC4gTm93LCBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgYSBjb21wbGV4IGZ1bmN0aW9uLiBJdCYjMzk7cyBkb2luZyBhIGxvdCBvZiB0aGluZ3M6IFBDSSBjbGFpbWluZywgTVNJIGFsbG9jYXRpb24sIE1ISSByZWdpc3RyYXRpb24sIFNSTkcgaW5pdGlhbGl6YXRpb24sIENFIHBpcGUgYWxsb2NhdGlvbiwgSVJRIGNvbmZpZ3VyYXRpb24uLi4gYW5kIHVsdGltYXRlbHkgY2FsbHMgYGF0aDEya19jb3JlX2luaXRgLiBJZiBhbnkgb2YgdGhvc2Ugc3ViLWZ1bmN0aW9ucyBmYWlsLCBgYXRoMTJrX2NvcmVfaW5pdGAgaXMgbmV2ZXIgY2FsbGVkLiBUaGlzIGlzIGEgcG90ZW50aWFsIGh1cmRsZS4KClNwZWNpZmljYWxseSwgYGF0aDEya19taGlfcmVnaXN0ZXJgIHN0YW5kcyBvdXQuIFRoaXMgaXMgdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlLCBhIGZhaXJseSBjb21wbGV4IHByb3RvY29sIHRoYXQmIzM5O3MgbGlrZWx5IHJlbGlhbnQgb24gYWN0dWFsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSYjMzk7bSB3b25kZXJpbmcsIGNhbiB3ZSBnZXQgYXJvdW5kIHRoaXMgaWYgdGhlcmUmIzM5O3Mgbm8gcmVhbCBoYXJkd2FyZT8gRG9lcyBgYXRoMTJrYCB1c2UgUU1JIG92ZXIgTUhJLCBvciBzb21ldGhpbmcgZWxzZT8KCkEgcXVpY2sgY2hlY2sgb2YgYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgIHJldmVhbHMgaXQgdXNlcyBgQUZfUUlQQ1JUUmAgLSBJUEMgcm91dGVyISBFeGNlbGxlbnQuIEkmIzM5O20gbm93IHByZXR0eSBzdXJlIHRoYXQgaXQgY29ubmVjdHMgdG8gdGhlIFFNSSBzZXJ2aWNlIHZpYSBJUEMgcm91dGVyLCBzbyB0aGUgdHJhbnNwb3J0IGlzIHByb2JhYmx5IE1ISS4KCklmIE1ISSBpc24mIzM5O3QgdXAsIHRoZSBRTUkgY2xpZW50IHdpdGhpbiBgYXRoMTJrYCB3b24mIzM5O3Qgc2VlIHRoZSByZW1vdGUgc2VydmVyLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBjcml0aWNhbCBpbnNpZ2h0LCBTeXprYWxsZXIgY2FuICpjcmVhdGUqIGEgbG9jYWwgSVBDIHJvdXRlciBzZXJ2aWNlISBJdCBjYW4gYmluZCB0byBgQUZfUUlQQ1JUUmAgYW5kIGFkdmVydGlzZSBgUU1JX1NFUlZJQ0VfSURfV0xGV2AuIFRoaXMgbWVhbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIE1ISSBzdGF0ZSwgdGhlIGBhdGgxMmtgIGNsaWVudCBzaG91bGQgc2VlIGl0IGJlY2F1c2UgdGhlIElQQyByb3V0ZXIgaXMgYSBjZW50cmFsaXplZCBsb29rdXAuIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgdGhlIGBxbWlfYWRkX2xvb2t1cGAgY29uZmlybXMgdGhpcy4gVGhlIElQQyByb3V0ZXIgd2lsbCBub3RpZnkgdGhlIGNsaWVudCBvZiBhbnkgbWF0Y2hpbmcgc2VydmljZSBJRC4gU28sIGluIHRoZW9yeSwgU3l6a2FsbGVyIGNhbiBmdWxseSBlbXVsYXRlIHRoZSBRTUkgc2VydmVyLgoKSG93ZXZlciwgSSYjMzk7bSBub3cgYmFjayB0byB0aGUgYGF0aDEya19wY2lfcHJvYmVgIHByb2JsZW0uIEl0ICptdXN0KiBzdWNjZWVkIGZvciBgYXRoMTJrX2NvcmVfaW5pdGAgdG8gcnVuLCBzbyBJIGhhdmUgdG8gZW5zdXJlIFN5emthbGxlciBjYW4gcGFzcyB0aGF0IGZ1bmN0aW9uLiBUaW1lIHRvIGFuYWx5emUgYGF0aDEya19taGlfcmVnaXN0ZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYXRoMTJrX21oaV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9MTgwPXN0YXRpYyB2b2lkIGF0aDEya19taGlfb3Bfd3JpdGVfcmVnKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMTg2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzoxODc6aW50IGF0aDEya19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMTg4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oPTM1PXZvaWQgYXRoMTJrX21oaV9zdG9wKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2ksIGJvb2wgaXNfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM2OmludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaC0zNy12b2lkIGF0aDEya19taGlfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYXJfcGNpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4NDQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiAmIzM0O0xldCYjMzk7cyBzZWUgYGF0aDEya19taGlfcmVnaXN0ZXJgJiMzNDsgYXMgYSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBhdGgxMmtfbWhpX3JlZ2lzdGVyKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGF0aDEya19taGlfcmVnaXN0ZXJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbGlrZWx5IGZvY3VzZWQgb24gdGhlIEF0aGVyb3MgKG5vdyBRdWFsY29tbSkgODAyLjExYXgvV2ktRmkgNiB3aXJlbGVzcyBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgTW9iaWxlIEhvc3QgSW50ZXJmYWNlIChNSEkpIHJlZ2lzdGVyIGRlZmluaXRpb25zLiBDb25zaWRlcmluZyBteSBleHBlcmllbmNlIHdpdGggdGhlc2Uga2luZHMgb2YgbG93LWxldmVsIGRyaXZlciBjb21wb25lbnRzLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHJlZ2lzdGVyIHRvIGJlIGNydWNpYWwgZm9yIGVpdGhlciBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgcHJvYmFibHkgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBkcml2ZXIgZXhlY3V0aW9uIG9yIGR1cmluZyB0aGUgYm9vdC11cCBzZXF1ZW5jZSBvZiB0aGUgZGV2aWNlLCBvciB0aGUgTUhJIGNvbW11bmljYXRpb24gcHJvdG9jb2wsIHdoaWNoIEkgaGF2ZSB2YXN0IGV4cGVyaWVuY2UgaW4uIAoKSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gcmVjYWxsIG15IGtub3dsZWRnZSBvZiB0aGF0IHNwZWNpZmljIHJlZ2lzdGVyLiBJcyB0aGlzIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nLCBwZXJoYXBzPyBPciBpcyBpdCBtb3JlIGFib3V0IHJlc291cmNlIGFsbG9jYXRpb24sIERNQSBzZXR1cCwgb3IgcGVyaGFwcyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIHRoZSBNSEkgY29udHJvbGxlciBpdHNlbGY/IEkmIzM5O20gYW50aWNpcGF0aW5nIGl0IHRvIGJlIGEga2V5IGVsZW1lbnQgZm9yIHNldHRpbmcgdXAgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBob3N0IENQVSBhbmQgdGhlIFdpLUZpIGNoaXBzZXQsIGVuYWJsaW5nIGRhdGEgdHJhbnNmZXIgYW5kIGNvbnRyb2wgY29tbWFuZHMuIFRoZSBmYWN0IGl0JiMzOTtzIGV4cGxpY2l0bHkgbmFtZWQgYSAmIzM5O3JlZ2lzdGVyJiMzOTsgc3Ryb25nbHkgaW1wbGllcyBhIGhhcmR3YXJlLWxldmVsIGludGVyYWN0aW9uLCBub3Qgc29tZXRoaW5nIGFic3RyYWN0ZWQuIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBmb3JtaW5nIGEgaHlwb3RoZXNpczogSSBzaG91bGQgY2hlY2sgaXRzIGxvY2F0aW9uIGluIHRoZSBtZW1vcnkgbWFwLCBhbmQgd2hhdCBmaWVsZHMgYXJlIHByZXNlbnQgd2l0aGluIHRoYXQgcmVnaXN0ZXIuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4NzpcdGludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXG4gMTg4Olx0e1xuIDE4OTpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IGFiX3BjaS1cdTAwM2VhYjtcbiAxOTA6XHRcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmw7XG4gMTkxOlx0XHR1bnNpZ25lZCBpbnQgYm9hcmRfaWQ7XG4gMTkyOlx0XHRpbnQgcmV0O1xuIDE5MzpcdFx0Ym9vbCBkdWFsbWFjID0gZmFsc2U7XG4gMTk0Olx0XG4gMTk1Olx0XHRtaGlfY3RybCA9IG1oaV9hbGxvY19jb250cm9sbGVyKCk7XG4gMTk2Olx0XHRpZiAoIW1oaV9jdHJsKVxuIDE5NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxOTg6XHRcbiAxOTk6XHRcdGFiX3BjaS1cdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XG4gMjAwOlx0XHRhYl9wY2ktXHUwMDNlbWhpX2N0cmwgPSBtaGlfY3RybDtcbiAyMDE6XHRcdG1oaV9jdHJsLVx1MDAzZWNudHJsX2RldiA9IGFiLVx1MDAzZWRldjtcbiAyMDI6XHRcdG1oaV9jdHJsLVx1MDAzZXJlZ3MgPSBhYi1cdTAwM2VtZW07XG4gMjAzOlx0XHRtaGlfY3RybC1cdTAwM2VyZWdfbGVuID0gYWItXHUwMDNlbWVtX2xlbjtcbiAyMDQ6XHRcdG1oaV9jdHJsLVx1MDAzZXJkZG1fc2l6ZSA9IGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VyZGRtX3NpemU7XG4gMjA1Olx0XG4gMjA2Olx0XHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZW90cF9ib2FyZF9pZF9yZWdpc3Rlcikge1xuIDIwNzpcdFx0XHRib2FyZF9pZCA9XG4gMjA4Olx0XHRcdFx0YXRoMTJrX3BjaV9yZWFkMzIoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VvdHBfYm9hcmRfaWRfcmVnaXN0ZXIpO1xuIDIwOTpcdFx0XHRib2FyZF9pZCA9IHUzMl9nZXRfYml0cyhib2FyZF9pZCwgT1RQX0JPQVJEX0lEX01BU0spO1xuIDIxMDpcdFxuIDIxMTpcdFx0XHRpZiAoIWJvYXJkX2lkIHx8IChib2FyZF9pZCA9PSBPVFBfSU5WQUxJRF9CT0FSRF9JRCkpIHtcbiAyMTI6XHRcdFx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsXG4gMjEzOlx0XHRcdFx0XHQgICBcJiMzNDtmYWlsZWQgdG8gcmVhZCBib2FyZCBpZFxcblwmIzM0Oyk7XG4gMjE0Olx0XHRcdH0gZWxzZSBpZiAoYm9hcmRfaWQgXHUwMDI2IE9UUF9WQUxJRF9EVUFMTUFDX0JPQVJEX0lEX01BU0spIHtcbiAyMTU6XHRcdFx0XHRkdWFsbWFjID0gdHJ1ZTtcbiAyMTY6XHRcdFx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsXG4gMjE3Olx0XHRcdFx0XHQgICBcJiMzNDtkdWFsbWFjIGZ3IHNlbGVjdGVkIGZvciBib2FyZCBpZDogJXhcXG5cJiMzNDssIGJvYXJkX2lkKTtcbiAyMTg6XHRcdFx0fVxuIDIxOTpcdFx0fVxuIDIyMDpcdFxuIDIyMTpcdFx0aWYgKGR1YWxtYWMpIHtcbiAyMjI6XHRcdFx0aWYgKGFiLVx1MDAzZWZ3LmFtc3NfZHVhbG1hY19kYXRhIFx1MDAyNlx1MDAyNiBhYi1cdTAwM2Vmdy5hbXNzX2R1YWxtYWNfbGVuIFx1MDAzZSAwKSB7XG4gMjIzOlx0XHRcdFx0LyogdXNlIE1ISSBmaXJtd2FyZSBmaWxlIGZyb20gZmlybXdhcmUtTi5iaW4gKi9cbiAyMjQ6XHRcdFx0XHRtaGlfY3RybC1cdTAwM2Vmd19kYXRhID0gYWItXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGE7XG4gMjI1Olx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfc3ogPSBhYi1cdTAwM2Vmdy5hbXNzX2R1YWxtYWNfbGVuO1xuIDIyNjpcdFx0XHR9IGVsc2Uge1xuIDIyNzpcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtkdWFsbWFjIGZpcm13YXJlIElFIG5vdCBwcmVzZW50IGluIGZpcm13YXJlLU4uYmluXFxuXCYjMzQ7KTtcbiAyMjg6XHRcdFx0XHRyZXQgPSAtRU5PRU5UO1xuIDIyOTpcdFx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDIzMDpcdFx0XHR9XG4gMjMxOlx0XHR9IGVsc2Uge1xuIDIzMjpcdFx0XHRpZiAoYWItXHUwMDNlZncuYW1zc19kYXRhIFx1MDAyNlx1MDAyNiBhYi1cdTAwM2Vmdy5hbXNzX2xlbiBcdTAwM2UgMCkge1xuIDIzMzpcdFx0XHRcdC8qIHVzZSBNSEkgZmlybXdhcmUgZmlsZSBmcm9tIGZpcm13YXJlLU4uYmluICovXG4gMjM0Olx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfZGF0YSA9IGFiLVx1MDAzZWZ3LmFtc3NfZGF0YTtcbiAyMzU6XHRcdFx0XHRtaGlfY3RybC1cdTAwM2Vmd19zeiA9IGFiLVx1MDAzZWZ3LmFtc3NfbGVuO1xuIDIzNjpcdFx0XHR9IGVsc2Uge1xuIDIzNzpcdFx0XHRcdC8qIHVzZSB0aGUgb2xkIHNlcGFyYXRlIG1oaS5iaW4gTUhJIGZpcm13YXJlIGZpbGUgKi9cbiAyMzg6XHRcdFx0XHRhdGgxMmtfY29yZV9jcmVhdGVfZmlybXdhcmVfcGF0aChhYiwgQVRIMTJLX0FNU1NfRklMRSxcbiAyMzk6XHRcdFx0XHRcdFx0XHRcdCBhYl9wY2ktXHUwMDNlYW1zc19wYXRoLFxuIDI0MDpcdFx0XHRcdFx0XHRcdFx0IHNpemVvZihhYl9wY2ktXHUwMDNlYW1zc19wYXRoKSk7XG4gMjQxOlx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfaW1hZ2UgPSBhYl9wY2ktXHUwMDNlYW1zc19wYXRoO1xuIDI0MjpcdFx0XHR9XG4gMjQzOlx0XHR9XG4gMjQ0Olx0XG4gMjQ1Olx0XHRyZXQgPSBhdGgxMmtfbWhpX2dldF9tc2koYWJfcGNpKTtcbiAyNDY6XHRcdGlmIChyZXQpIHtcbiAyNDc6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBtc2kgZm9yIG1oaVxcblwmIzM0Oyk7XG4gMjQ4Olx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDI0OTpcdFx0fVxuIDI1MDpcdFxuIDI1MTpcdFx0aWYgKCF0ZXN0X2JpdChBVEgxMktfUENJX0ZMQUdfTVVMVElfTVNJX1ZFQ1RPUlMsIFx1MDAyNmFiX3BjaS1cdTAwM2VmbGFncykpXG4gMjUyOlx0XHRcdG1oaV9jdHJsLVx1MDAzZWlycV9mbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9OT0JBTEFOQ0lORztcbiAyNTM6XHRcbiAyNTQ6XHRcdG1oaV9jdHJsLVx1MDAzZWlvdmFfc3RhcnQgPSAwO1xuIDI1NTpcdFx0bWhpX2N0cmwtXHUwMDNlaW92YV9zdG9wID0gYWJfcGNpLVx1MDAzZWRtYV9tYXNrO1xuIDI1NjpcdFx0bWhpX2N0cmwtXHUwMDNlc2JsX3NpemUgPSBTWl81MTJLO1xuIDI1NzpcdFx0bWhpX2N0cmwtXHUwMDNlc2VnX2xlbiA9IFNaXzUxMks7XG4gMjU4Olx0XHRtaGlfY3RybC1cdTAwM2VmYmNfZG93bmxvYWQgPSB0cnVlO1xuIDI1OTpcdFx0bWhpX2N0cmwtXHUwMDNlcnVudGltZV9nZXQgPSBhdGgxMmtfbWhpX29wX3J1bnRpbWVfZ2V0O1xuIDI2MDpcdFx0bWhpX2N0cmwtXHUwMDNlcnVudGltZV9wdXQgPSBhdGgxMmtfbWhpX29wX3J1bnRpbWVfcHV0O1xuIDI2MTpcdFx0bWhpX2N0cmwtXHUwMDNlc3RhdHVzX2NiID0gYXRoMTJrX21oaV9vcF9zdGF0dXNfY2I7XG4gMjYyOlx0XHRtaGlfY3RybC1cdTAwM2VyZWFkX3JlZyA9IGF0aDEya19taGlfb3BfcmVhZF9yZWc7XG4gMjYzOlx0XHRtaGlfY3RybC1cdTAwM2V3cml0ZV9yZWcgPSBhdGgxMmtfbWhpX29wX3dyaXRlX3JlZztcbiAyNjQ6XHRcbiAyNjU6XHRcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlbWhpX2NvbmZpZyk7XG4gMjY2Olx0XHRpZiAocmV0KSB7XG4gMjY3Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciB0byBtaGkgYnVzLCBlcnIgPSAlZFxcblwmIzM0OywgcmV0KTtcbiAyNjg6XHRcdFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XG4gMjY5Olx0XHR9XG4gMjcwOlx0XG4gMjcxOlx0XHRyZXR1cm4gMDtcbiAyNzI6XHRcbiAyNzM6XHRmcmVlX2NvbnRyb2xsZXI6XG4gMjc0Olx0XHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyNzU6XHRcdGFiX3BjaS1cdTAwM2VtaGlfY3RybCA9IE5VTEw7XG4gMjc2Olx0XHRyZXR1cm4gcmV0O1xuIDI3NzpcdH1cbiAyNzg6XHRcbiAyNzk6XHR2b2lkIGF0aDEya19taGlfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuIDI4MDpcdHtcbiAyODE6XHRcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmwgPSBhYl9wY2ktXHUwMDNlbWhpX2N0cmw7XG4gMjgyOlx0XG4gMjgzOlx0XHRtaGlfdW5yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyODQ6XHRcdGtmcmVlKG1oaV9jdHJsLVx1MDAzZWlycSk7XG4gMjg1Olx0XHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyODY6XHRcdGFiX3BjaS1cdTAwM2VtaGlfY3RybCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTA0CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBNSEkgQ29udHJvbGxlciBhbmQgRmlybXdhcmUgUHJvY2VzcyoqCgpPa2F5LCBzbyB0aGUgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCByZWdpc3RlcmluZyB0aGUgY29udHJvbGxlci4gU2ltcGxlIGVub3VnaC4gQnV0IGl0JiMzOTtzIGNydWNpYWwgdG8gcmVtZW1iZXIgdGhhdCB0aGlzICpkb2VzbiYjMzk7dCogaW5pdGlhdGUgdGhlIGZpcm13YXJlIGRvd25sb2FkLiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIGxhdGVyIGRlYnVnZ2luZy4KClRoZSBmaXJtd2FyZSBkb3dubG9hZCwgYWxvbmcgd2l0aCB0aGUgYWN0dWFsIE1ISSBzdGFydCwgYXBwZWFycyB0byBiZSB0cmlnZ2VyZWQgYnkgZWl0aGVyIGBtaGlfcHJlcGFyZV9mb3JfcG93ZXJfdXBgIG9yIGBtaGlfYXN5bmNfcG93ZXJfdXBgLiBJJiMzOTttIGZhbWlsaWFyIHdpdGggYHByZXBhcmVfZm9yX3Bvd2VyX3VwYCwgYnV0IHRoZSBgYXN5bmNgIHZlcnNpb24gcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgc3RhbmRhcmQgcG93ZXIgdXAgZmxvdyBpbiBkZXRhaWwuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgaGF2ZSB0byB0cmFjZSB3aGVyZSBgbWhpX2FzeW5jX3Bvd2VyX3VwYCBpcyBhY3R1YWxseSBjYWxsZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB0aGVyZSBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXJhbGxlbCBwb3dlciB1cCBwcm9jZXNzZXMuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfYXN5bmNfcG93ZXJfdXB8bWhpX3N5bmNfcG93ZXJfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTQwNj1zdGF0aWMgaW50IGF0aDEya19taGlfc2V0X3N0YXRlKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00MzgtXHRcdCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0Mzk6XHRcdHJldCA9IG1oaV9zeW5jX3Bvd2VyX3VwKGFiX3BjaS1cdTAwM2VtaGlfY3RybCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ0MC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjAzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBmdW5jdGlvbiBgYXRoMTJrX21oaV9zZXRfc3RhdGVgLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZC4KCioqRGVlcCBEaXZlIGludG8gYGF0aDEya19taGlfc2V0X3N0YXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBgYXRoMTJrX21oaV9zZXRfc3RhdGVgLiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIHBvd2VyIHN0YXRlIG9mIHRoZSBNSEkgKE0tQnVzIEhvc3QgSW50ZXJmYWNlKSBjb21wb25lbnQgd2l0aGluIHRoZSBhdGgxMmsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIHBvd2VyIG1hbmFnZW1lbnQgc2NoZW1lIG9mIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGFuZCBwb3dlci1zYXZpbmcgZmVhdHVyZXM/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hhdCBgbWhpYCBzdGFuZHMgZm9yIGFuZCB3aGF0IGl0IGRvZXMuCgpJJiMzOTtkIGV4cGVjdCB0byBzZWUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSBmb3IgdGhlIFF1YWxjb21tIEF0aGVyb3MgY2hpcHNldC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFudGljaXBhdGluZyBjYWxscyB0byBsb3ctbGV2ZWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY2xvY2sgZ2F0aW5nLCB2b2x0YWdlIHNjYWxpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCByZWxhdGVkIHRvIE1ISSBjb21tdW5pY2F0aW9uLiBUaGUgc3RhdGUgdHJhbnNpdGlvbiDigJMgdGhhdCYjMzk7cyBjcnVjaWFsLiBJcyBpdCBoYW5kbGluZyB0cmFuc2l0aW9ucyBiZXR3ZWVuIHN0YXRlcyBsaWtlIGFjdGl2ZSwgc2xlZXAsIHN0YW5kYnksIHN1c3BlbmQsIGFuZCB3aGF0IGFyZSB0aGUgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnM/CgpJJiMzOTttIHRoaW5raW5nLCBpcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBNSEkgdG8gYSAmIzM0O2Rpc2FibGVkJiMzNDsgc3RhdGUgb3IgYW4gJiMzNDtlbmFibGVkJiMzNDsgc3RhdGUsIG9yIGRvZXMgaXQgY292ZXIgYW4gYXJyYXkgb2Ygc3RhdGUgY2hhbmdlcz8gS25vd2luZyB0aGUgZXhhY3QgcG93ZXIgc3RhdGVzIHRoZSBNSEkgY2FuIG9wZXJhdGUgdW5kZXIgd2lsbCBwcm92aWRlIGltcG9ydGFudCBjb250ZXh0LiBEb2VzIGl0IGhhbmRsZSBhbnkgcG93ZXItZG93biBzZXF1ZW5jaW5nLCBlc3BlY2lhbGx5IHRoZSBvcmRlciBpbiB3aGljaCBkZXZpY2VzIGFyZSBkaXNhYmxlZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHk/IEkgd2FudCB0byBrbm93IGFib3V0IHRoZSByZWdpc3RlciBhY2Nlc3NlcyDigJMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBiZWluZyBtb2RpZmllZD8gRG9lcyB0aGlzIGNhbGwgaW50byBhIG1vcmUgZ2VuZXJpYyBNSEkgZHJpdmVyLCBvciBpcyBpdCBzcGVjaWZpYyB0byB0aGUgYXRoMTJrIGNoaXBzZXQ/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbnRlbnRpb24gZHVyaW5nIHN0YXRlIHRyYW5zaXRpb25zPwoKSSYjMzk7ZCB3YW50IHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IG1lY2hhbmlzbXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgaGFyZHdhcmUgZmFpbHMgdG8gdHJhbnNpdGlvbiB0byB0aGUgcmVxdWVzdGVkIHN0YXRlPyBJcyB0aGVyZSBhIHRpbWVvdXQ/IERvZXMgaXQgbG9nIGVycm9ycyBvciB0cmlnZ2VyIGEgc3lzdGVtIHJlc2V0PyBJIHdvdWxkIGFsc28gd2FudCB0byBleGFtaW5lIHdoZXJlIGBhdGgxMmtfbWhpX3NldF9zdGF0ZWAgaXMgY2FsbGVkIGZyb20uIElzIGl0IGRyaXZlbiBieSB0aGUgd2lyZWxlc3MgY29yZSwgb3IgYXJlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaW5pdGlhdGluZyB0aGUgcG93ZXIgc3RhdGUgY2hhbmdlcywgbGlrZSB0aGUgcG93ZXIgbWFuYWdlcj8gRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZGV2aWNlJiMzOTtzIHJ1bnRpbWUgUE0gZnJhbWV3b3JrLiBEb2VzIGl0IGludGVncmF0ZSB3aXRoIHRob3NlIGZ1bmN0aW9uYWxpdGllcyBmb3Igc3lzdGVtIHN1c3BlbmQvcmVzdW1lPyBUaGlzIGZ1bmN0aW9uLCBkZXBlbmRpbmcgb24gaXRzIHJvbGUsIGlzIGEgcG90ZW50aWFsIGhvdHNwb3QgZm9yIHBvd2VyLXJlbGF0ZWQgYnVncywgc28gSSYjMzk7bGwgd2FudCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgZGV0YWlscy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21oaV9zZXRfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTI4OT1zdGF0aWMgY2hhciAqYXRoMTJrX21oaV9zdGF0ZV90b19zdHIoZW51bSBhdGgxMmtfbWhpX3N0YXRlIG1oaV9zdGF0ZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTMxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6MzE3OnN0YXRpYyB2b2lkIGF0aDEya19taGlfc2V0X3N0YXRlX2JpdChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0zMTgtXHRcdFx0XHQgICAgIGVudW0gYXRoMTJrX21oaV9zdGF0ZSBtaGlfc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0zNTY9c3RhdGljIGludCBhdGgxMmtfbWhpX2NoZWNrX3N0YXRlX2JpdChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDA1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0MDY6c3RhdGljIGludCBhdGgxMmtfbWhpX3NldF9zdGF0ZShzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00MDctXHRcdFx0XHRlbnVtIGF0aDEya19taGlfc3RhdGUgbWhpX3N0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDcxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0NzI6XHRhdGgxMmtfbWhpX3NldF9zdGF0ZV9iaXQoYWJfcGNpLCBtaGlfc3RhdGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00NzMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz00ODI9aW50IGF0aDEya19taGlfc3RhcnQoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDg4Olx0cmV0ID0gYXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX0lOSVQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00ODktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDkxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0OTI6XHRyZXQgPSBhdGgxMmtfbWhpX3NldF9zdGF0ZShhYl9wY2ksIEFUSDEyS19NSElfUE9XRVJfT04pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00OTMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NTAyPXZvaWQgYXRoMTJrX21oaV9zdG9wKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksIGJvb2wgaXNfc3VzcGVuZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUwOC1cdGlmIChpc19zdXNwZW5kKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo1MDk6XHRcdGF0aDEya19taGlfc2V0X3N0YXRlKGFiX3BjaSwgQVRIMTJLX01ISV9QT1dFUl9PRkZfS0VFUF9ERVYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy01MTAtXHRlbHNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjUxMTpcdFx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1BPV0VSX09GRik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUxMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NTEzOlx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX0RFSU5JVCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUxNC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz01MTY9dm9pZCBhdGgxMmtfbWhpX3N1c3BlbmQoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNTE3LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NTE4Olx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1NVU1BFTkQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy01MTktfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NTIxPXZvaWQgYXRoMTJrX21oaV9yZXN1bWUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNTIyLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NTIzOlx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1JFU1VNRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUyNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDk3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21oaV9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NDA2PXN0YXRpYyBpbnQgYXRoMTJrX21oaV9zZXRfc3RhdGUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDgyOmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaD0yMD1lbnVtIGF0aDEya19taGlfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM0OmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaC0zNS12b2lkIGF0aDEya19taGlfc3RvcChzdHJ1Y3QgYXRoMTJrX3BjaSAqYXJfcGNpLCBib29sIGlzX3N1c3BlbmQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQyND1pbnQgYXRoMTJrX3BjaV9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTQ0MzpcdHJldCA9IGF0aDEya19taGlfc3RhcnQoYWJfcGNpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0NC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2MDQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX3Bvd2VyX3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xMzEyPXN0YXRpYyB2b2lkIGF0aDEya19wY2lfY29yZWR1bXBfZG93bmxvYWQoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0MjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0MjQ6aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQyNS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNDc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2hpZl9vcHMgYXRoMTJrX3BjaV9oaWZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ4NC1cdC5wb3dlcl9kb3duID0gYXRoMTJrX3BjaV9wb3dlcl9kb3duLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDg1Olx0LnBvd2VyX3VwID0gYXRoMTJrX3BjaV9wb3dlcl91cCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ4Ni1cdC5zdXNwZW5kID0gYXRoMTJrX3BjaV9oaWZfc3VzcGVuZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oPTE3ND1pbnQgYXRoMTJrX3BjaV9zdGFydChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg6MTc1OmludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzYtdm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGRlZXBseSBmYW1pbGlhciB3aXRoIHdpcmVsZXNzIGRyaXZlcnMgYW5kIHRoZSBhdGgxMmsgaW4gcGFydGljdWxhcjoKCioqUG93ZXJpbmcgVXAgdGhlIGF0aDEyayBQQ0kgRGV2aWNlKioKCkFscmlnaHQsIHNvIHRoZSBgYXRoMTJrX3BjaV9wb3dlcl91cGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0LiBCdXQgaXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYGhpZl9vcHMtJmd0O3Bvd2VyX3VwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4sIHRoZSBjb250ZXh0LCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGhpZl9vcHMtJmd0O3Bvd2VyX3VwYCB0byBmaW5kIG91dCAqd2hlcmUqIHRoYXQgY2FsbCBpcyBoYXBwZW5pbmcuIElzIGl0IHRyaWdnZXJlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHJlc3VtZSBmcm9tIHN1c3BlbmQsIG9yIG1heWJlIGV2ZW4gYSBkeW5hbWljIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnQ/IEtub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb24gYW5kIGFueSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMgd2lsbCBnaXZlIG1lIGEgaHVnZSBhbW91bnQgb2YgY29udGV4dC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGBoaWZfb3BzYCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpdHNlbGYsIGFuZCB0aGVuIHRyYWNlIGZyb20gdGhlIGFzc2lnbm1lbnQgb2YgdGhhdCBzdHJ1Y3R1cmUgYmFjayB0aHJvdWdoIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgc3VzcGVjdCBpdCB3aWxsIGJlIGxpbmtlZCB0byBwbGF0Zm9ybSBvciBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIEkgYmV0IHRoZSBhbnN3ZXJzIGxpZSBpbiB0aG9zZSBhcmVhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG93ZXJfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg9MTI9c3RydWN0IGF0aDEya19oaWZfb3BzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTE4LVx0dm9pZCAoKnN0b3ApKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxOTpcdGludCAoKnBvd2VyX3VwKShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMjAtXHR2b2lkICgqcG93ZXJfZG93bikoc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oPTEzMD1zdGF0aWMgaW5saW5lIHZvaWQgYXRoMTJrX2hpZl93cml0ZTMyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUzMiBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTM1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxMzY6c3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2hpZl9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xMzcte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxMzg6XHRpZiAoIWFiLVx1MDAzZWhpZi5vcHMtXHUwMDNlcG93ZXJfdXApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTEzOS1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oOjE0MTpcdHJldHVybiBhYi1cdTAwM2VoaWYub3BzLVx1MDAzZXBvd2VyX3VwKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTQyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczODAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA4NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhdGgxMmsgRHJpdmVyIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKioKCk9rYXksIHNvIGBhdGgxMmtfaGlmX3Bvd2VyX3VwYCBnZXRzIGNhbGxlZCBmcm9tIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIHN0YXJ0LiBMZXQmIzM5O3MgdHJhY2UgaXQuLi4gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGZpcnN0IGluaXRpYWxpemVzIHRoZSBRTUkgc2VydmljZSBhbmQgY3JlYXRlcyBhIGRlYnVnZnMgZW50cnkuIFRoZW4sIGl0IGNhbGxzIGBhdGgxMmtfaGlmX3Bvd2VyX3VwYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBhdGgxMmtfaGlmX3Bvd2VyX3VwYCBldmVudHVhbGx5IGhpdHMgYGF0aDEya19wY2lfcG93ZXJfdXBgLCB3aGljaCBnb2VzIGRvd24gdG8gYGF0aDEya19taGlfc3RhcnRgLCBhbmQgZmluYWxseSBgbWhpX3N5bmNfcG93ZXJfdXBgLgoKVGhlIGtleSB0aGluZyBpcyBgbWhpX3N5bmNfcG93ZXJfdXBgIOKAkyB0aGF0JiMzOTtzIHRoZSBibG9ja2VyLiBJdCB3YWl0cyBmb3IgdGhlIE1ISSBkZXZpY2UgdG8gcmVhY2ggdGhlIE0wIHN0YXRlLCBlc3NlbnRpYWxseSB3YWl0aW5nIGZvciB0aGUgZmlybXdhcmUgdG8gbG9hZCBhbmQgcnVuLiBJZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IGFjdHVhbGx5IHRoZXJlLCBvciB0aGVyZSYjMzk7cyBzb21lIE1ISS1sZXZlbCBwcm9ibGVtLCBgbWhpX3N5bmNfcG93ZXJfdXBgIGZhaWxzLCBjYXVzaW5nIGBhdGgxMmtfaGlmX3Bvd2VyX3VwYCB0byBmYWlsLCBhbmQgY29uc2VxdWVudGx5LCBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAgdG8gZmFpbC4gVGhpcyB0aGVuIGJ1YmJsZXMgdXAgYW5kIGxlYWRzIHRvIGZhaWx1cmUgaW4gYGF0aDEya19jb3JlX2h3X2dyb3VwX2NyZWF0ZWAsIGFuZCBldmVudHVhbGx5IGBhdGgxMmtfY29yZV9pbml0YCwgYWxsIHRoZSB3YXkgdG8gYSBmYWlsZWQgYGF0aDEya19wY2lfcHJvYmVgLgoKQnV0Li4uIEkgc2VlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGhlcmUuIEhvbGQgb24uLi4gSSBqdXN0IHJlYWxpemVkIHRoZSBRTUkgc2VydmljZSBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBgYXRoMTJrX2hpZl9wb3dlcl91cGAuIFRoYXQgbWVhbnMgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBpcyBjYWxsZWQgKmJlZm9yZSogdGhlIGhhcmR3YXJlIHBvd2VyLXVwIHNlcXVlbmNlLCBhbmQgaXQgc2V0cyB1cCB0aGUgUU1JIGNsaWVudC4gVGhpcyBzdWdnZXN0cyB0aGF0IGlmIHN5emthbGxlciBpcyBlbXVsYXRpbmcgdGhlIFFNSSBzZXJ2aWNlIChsaWtlIHdpdGggQUZfUUlQQ1JUUikgYW5kIGFkdmVydGlzZXMgaXRzZWxmICpiZWZvcmUgb3IgZHVyaW5nKiBgYXRoMTJrX3BjaV9wcm9iZWAsIHRoZW4gdGhlIGBuZXdfc2VydmVyYCBjYWxsYmFjayAoYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgKSAqY291bGQqIGJlIHRyaWdnZXJlZCBhc3luY2hyb25vdXNseSEKClRoZSBjYWxsYmFjayB3b3VsZCB0aGVuIHBvc3QgYEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0FSUklWRWAgdG8gdGhlIGBldmVudF93cWAgd29ya3F1ZXVlLiBUaGUgYGV2ZW50X3dxYCB3b3JrcXVldWUgd291bGQgZXhlY3V0ZSBgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29ya2AsIHdoaWNoIGNhbGxzIGBhdGgxMmtfcW1pX2V2ZW50X3NlcnZlcl9hcnJpdmVgLiBJbnNpZGUgYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdCBoYXBwZW5zLCBuYW1lbHksIGEgY2FsbCB0byBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoYWIpYC4KClRoaXMgbWVhbnMgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBpcyAqcmVhY2hhYmxlKiBldmVuIGlmIGBtaGlfc3luY19wb3dlcl91cGAgdWx0aW1hdGVseSBmYWlscyEgVGhlIHBvd2VyLXVwIHNlcXVlbmNlIGFuZCB0aGUgUU1JIGNsaWVudCBldmVudCBoYW5kbGluZyBydW4gY29uY3VycmVudGx5IQoKQW5kIGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBzZW5kcyBhIFFNSSBtZXNzYWdlIHRvIHRoZSBRTUkgc2VydmVyLiBJZiBzeXprYWxsZXIgaXMgYWN0aW5nIGFzIHRoYXQgc2VydmVyLCBpdCB3aWxsIHJlY2VpdmUgdGhlIG1lc3NhZ2UgYW5kIGNhbiBnZW5lcmF0ZSBhIHJlc3BvbnNlLiBUaGlzIGNvbmN1cnJlbnQgbWVzc2FnZSBzZW5kaW5nIGlzIGltcG9ydGFudC4gSSBtdXN0IGludmVzdGlnYXRlIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMjI6XHRzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuMjMyMzpcdHtcbjIzMjQ6XHRcdHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVxX21zZ192MDEgcmVxID0ge307XG4yMzI1Olx0XHRzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSByZXNwID0ge307XG4yMzI2Olx0XHRzdHJ1Y3QgcW1pX3R4biB0eG47XG4yMzI3Olx0XHRpbnQgcmV0O1xuMjMyODpcdFxuMjMyOTpcdFx0cmV0ID0gcW1pX3R4bl9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIFx1MDAyNnR4bixcbjIzMzA6XHRcdFx0XHQgICBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxX2VpLCBcdTAwMjZyZXNwKTtcbjIzMzE6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMzMyOlx0XHRcdGdvdG8gb3V0O1xuMjMzMzpcdFxuMjMzNDpcdFx0cmV0ID0gcW1pX3NlbmRfcmVxdWVzdChcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlLCBOVUxMLCBcdTAwMjZ0eG4sXG4yMzM1Olx0XHRcdFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfVjAxLFxuMjMzNjpcdFx0XHRcdCAgICAgICBRTUlfV0xBTkZXX1BIWV9DQVBfUkVRX01TR19WMDFfTUFYX0xFTixcbjIzMzc6XHRcdFx0XHQgICAgICAgcW1pX3dsYW5md19waHlfY2FwX3JlcV9tc2dfdjAxX2VpLCBcdTAwMjZyZXEpO1xuMjMzODpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMjMzOTpcdFx0XHRxbWlfdHhuX2NhbmNlbChcdTAwMjZ0eG4pO1xuMjM0MDpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNlbmQgcGh5IGNhcGFiaWxpdHkgcmVxdWVzdDogJWRcXG5cJiMzNDssIHJldCk7XG4yMzQxOlx0XHRcdGdvdG8gb3V0O1xuMjM0MjpcdFx0fVxuMjM0MzpcdFxuMjM0NDpcdFx0cmV0ID0gcW1pX3R4bl93YWl0KFx1MDAyNnR4biwgbXNlY3NfdG9famlmZmllcyhBVEgxMktfUU1JX1dMQU5GV19USU1FT1VUX01TKSk7XG4yMzQ1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjM0NjpcdFx0XHRnb3RvIG91dDtcbjIzNDc6XHRcbjIzNDg6XHRcdGlmIChyZXNwLnJlc3AucmVzdWx0ICE9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDEpIHtcbjIzNDk6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4yMzUwOlx0XHRcdGdvdG8gb3V0O1xuMjM1MTpcdFx0fVxuMjM1MjpcdFxuMjM1MzpcdFx0aWYgKHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQgXHUwMDI2XHUwMDI2IHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQpXG4yMzU0Olx0XHRcdGFiLVx1MDAzZXNpbmdsZV9jaGlwX21sb19zdXBwb3J0ID0gdHJ1ZTtcbjIzNTU6XHRcbjIzNTY6XHRcdGlmICghcmVzcC5udW1fcGh5X3ZhbGlkKSB7XG4yMzU3Olx0XHRcdHJldCA9IC1FTk9EQVRBO1xuMjM1ODpcdFx0XHRnb3RvIG91dDtcbjIzNTk6XHRcdH1cbjIzNjA6XHRcbjIzNjE6XHRcdGFiLVx1MDAzZXFtaS5udW1fcmFkaW9zID0gcmVzcC5udW1fcGh5O1xuMjM2MjpcdFxuMjM2MzpcdFx0aWYgKHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZClcbjIzNjQ6XHRcdFx0YWItXHUwMDNlcW1pLmR5bmFtaWNfZGRyX3N1cHBvcnQgPSByZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnQ7XG4yMzY1Olx0XG4yMzY2Olx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSxcbjIzNjc6XHRcdFx0ICAgXCYjMzQ7cGh5IGNhcGFiaWxpdHkgcmVzcCB2YWxpZCAlZCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCAlZCB2YWxpZCAlZCBudW1fcGh5ICVkIHZhbGlkICVkIGJvYXJkX2lkICVkIGR5bmFtaWNfZGRyX3ZhbGlkICV1IGR5bmFtaWNfZGRyX3N1cHBvcnQgJXVcXG5cJiMzNDssXG4yMzY4Olx0XHRcdCAgIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQsIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQsXG4yMzY5Olx0XHRcdCAgIHJlc3AubnVtX3BoeV92YWxpZCwgcmVzcC5udW1fcGh5LCByZXNwLmJvYXJkX2lkX3ZhbGlkLCByZXNwLmJvYXJkX2lkLFxuMjM3MDpcdFx0XHQgICByZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWQsIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydCk7XG4yMzcxOlx0XG4yMzcyOlx0XHRyZXR1cm47XG4yMzczOlx0XG4yMzc0Olx0b3V0OlxuMjM3NTpcdFx0LyogSWYgUEhZIGNhcGFiaWxpdHkgbm90IGFkdmVydGlzZWQgdGhlbiByZWx5IG9uIGRlZmF1bHQgbnVtIGxpbmsgKi9cbjIzNzY6XHRcdGFiLVx1MDAzZXFtaS5udW1fcmFkaW9zID0gYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZWRlZl9udW1fbGluaztcbjIzNzc6XHRcbjIzNzg6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUU1JLFxuMjM3OTpcdFx0XHQgICBcJiMzNDtubyB2YWxpZCByZXNwb25zZSBmcm9tIFBIWSBjYXBhYmlsaXR5LCBjaG9vc2UgZGVmYXVsdCBudW1fcGh5ICVkXFxuXCYjMzQ7LFxuMjM4MDpcdFx0XHQgICBhYi1cdTAwM2VxbWkubnVtX3JhZGlvcyk7XG4yMzgxOlx0fVxuMjM4MjpcdFxuMjM4MzpcdHN0YXRpYyBpbnQgYXRoMTJrX3FtaV9md19pbmRfcmVnaXN0ZXJfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuMjM4NDpcdHtcbjIzODU6XHRcdHN0cnVjdCBxbWlfd2xhbmZ3X2luZF9yZWdpc3Rlcl9yZXFfbXNnX3YwMSAqcmVxO1xuMjM4NjpcdFx0c3RydWN0IHFtaV93bGFuZndfaW5kX3JlZ2lzdGVyX3Jlc3BfbXNnX3YwMSAqcmVzcDtcbjIzODc6XHRcdHN0cnVjdCBxbWlfaGFuZGxlICpoYW5kbGUgPSBcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlO1xuMjM4ODpcdFx0c3RydWN0IHFtaV90eG4gdHhuO1xuMjM4OTpcdFx0aW50IHJldDtcbjIzOTA6XHRcbjIzOTE6XHRcdHJlcSA9IGt6YWxsb2Nfb2JqKCpyZXEpO1xuMjM5MjpcdFx0aWYgKCFyZXEpXG4yMzkzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjM5NDpcdFxuMjM5NTpcdFx0cmVzcCA9IGt6YWxsb2Nfb2JqKCpyZXNwKTtcbjIzOTY6XHRcdGlmICghcmVzcCkge1xuMjM5NzpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMjM5ODpcdFx0XHRnb3RvIHJlc3Bfb3V0O1xuMjM5OTpcdFx0fVxuMjQwMDpcdFxuMjQwMTpcdFx0cmVxLVx1MDAzZWNsaWVudF9pZF92YWxpZCA9IDE7XG4yNDAyOlx0XHRyZXEtXHUwMDNlY2xpZW50X2lkID0gUU1JX1dMQU5GV19DTElFTlRfSUQ7XG4yNDAzOlx0XHRyZXEtXHUwMDNlZndfcmVhZHlfZW5hYmxlX3ZhbGlkID0gMTtcbjI0MDQ6XHRcdHJlcS1cdTAwM2Vmd19yZWFkeV9lbmFibGUgPSAxO1xuMjQwNTpcdFx0cmVxLVx1MDAzZXJlcXVlc3RfbWVtX2VuYWJsZV92YWxpZCA9IDE7XG4yNDA2Olx0XHRyZXEtXHUwMDNlcmVxdWVzdF9tZW1fZW5hYmxlID0gMTtcbjI0MDc6XHRcdHJlcS1cdTAwM2Vmd19tZW1fcmVhZHlfZW5hYmxlX3ZhbGlkID0gMTtcbjI0MDg6XHRcdHJlcS1cdTAwM2Vmd19tZW1fcmVhZHlfZW5hYmxlID0gMTtcbjI0MDk6XHRcdHJlcS1cdTAwM2VjYWxfZG9uZV9lbmFibGVfdmFsaWQgPSAxO1xuMjQxMDpcdFx0cmVxLVx1MDAzZWNhbF9kb25lX2VuYWJsZSA9IDE7XG4yNDExOlx0XHRyZXEtXHUwMDNlZndfaW5pdF9kb25lX2VuYWJsZV92YWxpZCA9IDE7XG4yNDEyOlx0XHRyZXEtXHUwMDNlZndfaW5pdF9kb25lX2VuYWJsZSA9IDE7XG4yNDEzOlx0XG4yNDE0Olx0XHRyZXEtXHUwMDNlcGluX2Nvbm5lY3RfcmVzdWx0X2VuYWJsZV92YWxpZCA9IDA7XG4yNDE1Olx0XHRyZXEtXHUwMDNlcGluX2Nvbm5lY3RfcmVzdWx0X2VuYWJsZSA9IDA7XG4yNDE2Olx0XG4yNDE3Olx0XHRyZXQgPSBxbWlfdHhuX2luaXQoaGFuZGxlLCBcdTAwMjZ0eG4sXG4yNDE4Olx0XHRcdFx0ICAgcW1pX3dsYW5md19pbmRfcmVnaXN0ZXJfcmVzcF9tc2dfdjAxX2VpLCByZXNwKTtcbjI0MTk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yNDIwOlx0XHRcdGdvdG8gb3V0O1xuMjQyMTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDc5MgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGF0aDEyayBRTUkgQ2FwYWJpbGl0eSBFeGNoYW5nZSoqCgpPa2F5LCBzbyBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIGlzIGRlZmluaXRlbHkgYSByZXF1ZXN0LXJlc3BvbnNlIGZ1bmN0aW9uOyBpdCBzZW5kcyBhIFFNSSBtZXNzYWdlIGFuZCB0aGVuIHdhaXRzIGZvciBhIHJlcGx5LiBJJiMzOTttIGltYWdpbmluZyBzeXprYWxsZXIgYXMgdGhlIFFNSSBzZXJ2ZXIgaGVyZS4gSWYgc3l6a2FsbGVyIHJlcGxpZXMgdG8gdGhpcyBjYXBhYmlsaXR5IGV4Y2hhbmdlLCBpdCBjYW4gc2V0IGJvdGggYGR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWRgIGFuZCBgZHluYW1pY19kZHJfc3VwcG9ydGAgdG8gMS4gVGhhdCB3b3VsZCB0cmlnZ2VyIGBhYi0mZ3Q7cW1pLmR5bmFtaWNfZGRyX3N1cHBvcnRgIHRvIGJlIHNldCB0byAxLgoKVGhlbiwgdGhlIGNvZGUganVtcHMgaW50byBgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlYC4gVGhlIGludGVyZXN0aW5nIHBhcnQga2lja3MgaW4gd2hlbiBgYXRoMTJrX3FtaV9od19ncm91cF9ob3N0X2NhcF9yZWFkeShhZylgIHJldHVybnMgdHJ1ZS4gSW4gdGhhdCBjYXNlLCBgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc2V0X21sb19jYXBhYmxlKGFnKWAgaXMgY2FsbGVkLCBhbmQgdGhlbiB0aGVyZSYjMzk7cyBhIGNoZWNrIGZvciBhIGJsb2NrZWQgYGF0aDEya19xbWlfaHdfZ3JvdXBfZmluZF9ibG9ja2VkKGFnKWAuIElmIHRoZXJlIGlzIGEgYmxvY2tlZCBncm91cCwgdGhlbiBpdCB0cmlnZ2VycyB0aGUgY2FsbCB0byBgYXRoMTJrX3FtaV90cmlnZ2VyX2hvc3RfY2FwKGJsb2NrX2FiKWAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNwZWNpZmljYWxseSB0cmlnZ2VyaW5nIGBBVEgxMktfUU1JX0VWRU5UX0hPU1RfQ0FQYCwgd2hpY2ggdGhlbiBraWNrcyBvZmYgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIGRpZyBpbnRvIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIG5vdyBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyODQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMjg1Olx0XHRcdGdvdG8gb3V0O1xuMjI4NjpcdFxuMjI4NzpcdFx0aWYgKGFiLVx1MDAzZXFtaS5keW5hbWljX2Rkcl9zdXBwb3J0KSB7XG4yMjg4Olx0XHRcdHJlcS5keW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkID0gMTtcbjIyODk6XHRcdFx0cmVxLmR5bmFtaWNfbWVtX3N1cHBvcnQgPSAxO1xuMjI5MDpcdFx0fVxuMjI5MTpcdFxuMjI5MjpcdFx0cmV0ID0gcW1pX3R4bl9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIFx1MDAyNnR4bixcbjIyOTM6XHRcdFx0XHQgICBxbWlfd2xhbmZ3X2hvc3RfY2FwX3Jlc3BfbXNnX3YwMV9laSwgXHUwMDI2cmVzcCk7XG4yMjk0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjI5NTpcdFx0XHRnb3RvIG91dDtcbjIyOTY6XHRcbjIyOTc6XHRcdHJldCA9IHFtaV9zZW5kX3JlcXVlc3QoXHUwMDI2YWItXHUwMDNlcW1pLmhhbmRsZSwgTlVMTCwgXHUwMDI2dHhuLFxuMjI5ODpcdFx0XHRcdCAgICAgICBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9WMDEsXG4yMjk5Olx0XHRcdFx0ICAgICAgIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTixcbjIzMDA6XHRcdFx0XHQgICAgICAgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMV9laSwgXHUwMDI2cmVxKTtcbjIzMDE6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjIzMDI6XHRcdFx0cW1pX3R4bl9jYW5jZWwoXHUwMDI2dHhuKTtcbjIzMDM6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O0ZhaWxlZCB0byBzZW5kIGhvc3QgY2FwYWJpbGl0eSByZXF1ZXN0LGVyciA9ICVkXFxuXCYjMzQ7LCByZXQpO1xuMjMwNDpcdFx0XHRnb3RvIG91dDtcbjIzMDU6XHRcdH1cbjIzMDY6XHRcbjIzMDc6XHRcdHJldCA9IHFtaV90eG5fd2FpdChcdTAwMjZ0eG4sIG1zZWNzX3RvX2ppZmZpZXMoQVRIMTJLX1FNSV9XTEFORldfVElNRU9VVF9NUykpO1xuMjMwODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIzMDk6XHRcdFx0Z290byBvdXQ7XG4yMzEwOlx0XG4yMzExOlx0XHRpZiAocmVzcC5yZXNwLnJlc3VsdCAhPSBRTUlfUkVTVUxUX1NVQ0NFU1NfVjAxKSB7XG4yMzEyOlx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtIb3N0IGNhcGFiaWxpdHkgcmVxdWVzdCBmYWlsZWQsIHJlc3VsdDogJWQsIGVycjogJWRcXG5cJiMzNDssXG4yMzEzOlx0XHRcdFx0ICAgIHJlc3AucmVzcC5yZXN1bHQsIHJlc3AucmVzcC5lcnJvcik7XG4yMzE0Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4yMzE1Olx0XHRcdGdvdG8gb3V0O1xuMjMxNjpcdFx0fVxuMjMxNzpcdFxuMjMxODpcdG91dDpcbjIzMTk6XHRcdHJldHVybiByZXQ7XG4yMzIwOlx0fVxuMjMyMTpcdFxuMjMyMjpcdHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4yMzIzOlx0e1xuMjMyNDpcdFx0c3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXFfbXNnX3YwMSByZXEgPSB7fTtcbjIzMjU6XHRcdHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxIHJlc3AgPSB7fTtcbjIzMjY6XHRcdHN0cnVjdCBxbWlfdHhuIHR4bjtcbjIzMjc6XHRcdGludCByZXQ7XG4yMzI4Olx0XG4yMzI5Olx0XHRyZXQgPSBxbWlfdHhuX2luaXQoXHUwMDI2YWItXHUwMDNlcW1pLmhhbmRsZSwgXHUwMDI2dHhuLFxuMjMzMDpcdFx0XHRcdCAgIHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDFfZWksIFx1MDAyNnJlc3ApO1xuMjMzMTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIzMzI6XHRcdFx0Z290byBvdXQ7XG4yMzMzOlx0XG4yMzM0Olx0XHRyZXQgPSBxbWlfc2VuZF9yZXF1ZXN0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIE5VTEwsIFx1MDAyNnR4bixcbjIzMzU6XHRcdFx0XHQgICAgICAgUU1JX1dMQU5GV19QSFlfQ0FQX1JFUV9WMDEsXG4yMzM2Olx0XHRcdFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfTVNHX1YwMV9NQVhfTEVOLFxuMjMzNzpcdFx0XHRcdCAgICAgICBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVxX21zZ192MDFfZWksIFx1MDAyNnJlcSk7XG4yMzM4Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4yMzM5Olx0XHRcdHFtaV90eG5fY2FuY2VsKFx1MDAyNnR4bik7XG4yMzQwOlx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2VuZCBwaHkgY2FwYWJpbGl0eSByZXF1ZXN0OiAlZFxcblwmIzM0OywgcmV0KTtcbjIzNDE6XHRcdFx0Z290byBvdXQ7XG4yMzQyOlx0XHR9XG4yMzQzOlx0XG4yMzQ0Olx0XHRyZXQgPSBxbWlfdHhuX3dhaXQoXHUwMDI2dHhuLCBtc2Vjc190b19qaWZmaWVzKEFUSDEyS19RTUlfV0xBTkZXX1RJTUVPVVRfTVMpKTtcbjIzNDU6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMzQ2Olx0XHRcdGdvdG8gb3V0O1xuMjM0NzpcdFxuMjM0ODpcdFx0aWYgKHJlc3AucmVzcC5yZXN1bHQgIT0gUU1JX1JFU1VMVF9TVUNDRVNTX1YwMSkge1xuMjM0OTpcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbjIzNTA6XHRcdFx0Z290byBvdXQ7XG4yMzUxOlx0XHR9XG4yMzUyOlx0XG4yMzUzOlx0XHRpZiAocmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydF92YWxpZCBcdTAwMjZcdTAwMjYgcmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydClcbjIzNTQ6XHRcdFx0YWItXHUwMDNlc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgPSB0cnVlO1xuMjM1NTpcdFxuMjM1NjpcdFx0aWYgKCFyZXNwLm51bV9waHlfdmFsaWQpIHtcbjIzNTc6XHRcdFx0cmV0ID0gLUVOT0RBVEE7XG4yMzU4Olx0XHRcdGdvdG8gb3V0O1xuMjM1OTpcdFx0fVxuMjM2MDpcdFxuMjM2MTpcdFx0YWItXHUwMDNlcW1pLm51bV9yYWRpb3MgPSByZXNwLm51bV9waHk7XG4yMzYyOlx0XG4yMzYzOlx0XHRpZiAocmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKVxuMjM2NDpcdFx0XHRhYi1cdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydCA9IHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydDtcbjIzNjU6XHRcbjIzNjY6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUU1JLFxuMjM2NzpcdFx0XHQgICBcJiMzNDtwaHkgY2FwYWJpbGl0eSByZXNwIHZhbGlkICVkIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0ICVkIHZhbGlkICVkIG51bV9waHkgJWQgdmFsaWQgJWQgYm9hcmRfaWQgJWQgZHluYW1pY19kZHJfdmFsaWQgJXUgZHluYW1pY19kZHJfc3VwcG9ydCAldVxcblwmIzM0OyxcbjIzNjg6XHRcdFx0ICAgcmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydF92YWxpZCwgcmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCxcbjIzNjk6XHRcdFx0ICAgcmVzcC5udW1fcGh5X3ZhbGlkLCByZXNwLm51bV9waHksIHJlc3AuYm9hcmRfaWRfdmFsaWQsIHJlc3AuYm9hcmRfaWQsXG4yMzcwOlx0XHRcdCAgIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCwgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0KTtcbjIzNzE6XHRcbjIzNzI6XHRcdHJldHVybjtcbjIzNzM6XHRcbjIzNzQ6XHRvdXQ6XG4yMzc1Olx0XHQvKiBJZiBQSFkgY2FwYWJpbGl0eSBub3QgYWR2ZXJ0aXNlZCB0aGVuIHJlbHkgb24gZGVmYXVsdCBudW0gbGluayAqL1xuMjM3NjpcdFx0YWItXHUwMDNlcW1pLm51bV9yYWRpb3MgPSBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlZGVmX251bV9saW5rO1xuMjM3NzpcdFxuMjM3ODpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19RTUksXG4yMzc5Olx0XHRcdCAgIFwmIzM0O25vIHZhbGlkIHJlc3BvbnNlIGZyb20gUEhZIGNhcGFiaWxpdHksIGNob29zZSBkZWZhdWx0IG51bV9waHkgJWRcXG5cJiMzNDssXG4yMzgwOlx0XHRcdCAgIGFiLVx1MDAzZXFtaS5udW1fcmFkaW9zKTtcbjIzODE6XHR9XG4yMzgyOlx0XG4yMzgzOlx0c3RhdGljIGludCBhdGgxMmtfcW1pX2Z3X2luZF9yZWdpc3Rlcl9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMjY3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGluIGEgU3l6a2FsbGVyIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0aGUgY29kZSBwYXRoIHdoZXJlIGl0IHNlbmRzIGEgcmVxdWVzdCB3aXRoIGBkeW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkID0gMWAgYW5kIGBkeW5hbWljX21lbV9zdXBwb3J0ID0gMWAgaXMgZGlyZWN0bHkgdGllZCB0byB0aGUgc2V0dGluZyBvZiBgYWItJmd0O3FtaS5keW5hbWljX2Rkcl9zdXBwb3J0YC4gVGhhdCYjMzk7cyB0aGF0IHBhdGNoJiMzOTtzIGRvaW5nLCBzbyB0aGF0IHBhcnQgaXMgY2xlYXIuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCAqY2FuKiB3ZSBoaXQgdGhpcyBjb2RlIHdpdGggc3l6a2FsbGVyPyBUaGUgY3J1Y2lhbCBmYWN0b3IgaXMgd2hldGhlciBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBRTUkgc2VydmVyIHRocm91Z2ggaXRzIElQQyByb3V0ZXIuIElmIGl0IGNhbiwgd2UmIzM5O3JlIGluIGJ1c2luZXNzLiBNeSBtZW1vcnkgdGVsbHMgbWUgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHN1cHBvcnQgZm9yIEFGX1FJUENSVFIgc29ja2V0cyDigJMgaXQgY2FuIGJpbmQgdG8gdGhlbSwgYWR2ZXJ0aXNlIHNlcnZpY2VzLCBhbmQgaGFuZGxlIGJvdGggaW5jb21pbmcgYW5kIG91dGdvaW5nIG1lc3NhZ2VzLiBTbywgYmFzZWQgb24gdGhhdCwgdGhlIGFuc3dlciBpcyAqbGlrZWx5KiB5ZXMsIHdlIGNhbiBlbXVsYXRlIHRoaXMuCgpIb3dldmVyLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIGBhdGgxMmtgLiBJdCB3b3VsZG4mIzM5O3QgZG8gdG8gYXNzdW1lLiBEb2VzIGBhdGgxMmtgIHJlcXVpcmUgYENPTkZJR19BVEgxMktgPyBZZXMsIG9mIGNvdXJzZS4gQW5kIGBDT05GSUdfUVJUUmA/IEkgYmVsaWV2ZSBzbywgYW5kIHllcywgaXQgbG9va3MgbGlrZSBgYXRoMTJrYCBkZXBlbmRzIG9uIGBRUlRSYC4gT2theSwgZ29vZC4gSeKAmWxsIG1ha2UgYSBub3RlIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgZm9yIGBhdGgxMmtgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBkZXBlbmRlbmN5IGRldGFpbHMuIFRoaXMgbG9va3MgcHJvbWlzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVRIMTJLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6Mjpjb25maWcgQVRIMTJLXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoxNzpjb25maWcgQVRIMTJLX0FIQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjU6Y29uZmlnIEFUSDEyS19ERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDthdGgxMmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM1OmNvbmZpZyBBVEgxMktfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjQ0OmNvbmZpZyBBVEgxMktfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ1LVx0Ym9vbCBcJiMzNDthdGgxMmsgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjUzOmNvbmZpZyBBVEgxMktfQ09SRURVTVBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7YXRoMTJrIGNvcmVkdW1wXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzYzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4ga2VybmVsIGRldmVsb3BtZW50IG9yIGVtYmVkZGVkIHN5c3RlbXM6CgoqKkluaXRpYWwgS2NvbmZpZyBSZXZpZXcqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoaXMgcGFydGljdWxhciBtb2R1bGUgb3Igc3Vic3lzdGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgdmFyaWFibGVzLCB0aGUgYm9vbGVhbiwgdHJpc3RhdGUsIGFuZCBpbnRlZ2VyIG9wdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gSXQmIzM5O3MgYWJvdXQgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHRoZSBwb3NzaWJsZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gYW50aWNpcGF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHNlbGVjdGluZyBzcGVjaWZpYyBmZWF0dXJlcywgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB0aGUgcmVzdWx0aW5nIGtlcm5lbCBpbWFnZSBzaXplLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcbiAgIDI6XHRjb25maWcgQVRIMTJLXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSBXaS1GaSA3IHN1cHBvcnQgKGF0aDEyaylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IEhBU19ETUEgXHUwMDI2XHUwMDI2IFBDSVxuICAgNTpcdFx0c2VsZWN0IFFDT01fUU1JX0hFTFBFUlNcbiAgIDY6XHRcdHNlbGVjdCBNSElfQlVTXG4gICA3Olx0XHRzZWxlY3QgUVJUUlxuICAgODpcdFx0c2VsZWN0IFFSVFJfTUhJXG4gICA5Olx0XHRzZWxlY3QgUENJX1BXUkNUUkxfUFdSU0VRIGlmIEhBVkVfUFdSQ1RSTFxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgUXVhbGNvbW0gVGVjaG5vbG9naWVzIFdpLUZpIDcgKElFRUVcbiAgMTI6XHRcdCAgODAyLjExYmUpIGZhbWlseSBvZiBjaGlwc2V0cywgZm9yIGV4YW1wbGUgV0NONzg1MCBhbmRcbiAgMTM6XHRcdCAgUUNOOTI3NC5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBhdGgxMmsuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIEFUSDEyS19BSEJcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7UXVhbGNvbW0gYXRoMTJrIEFIQiBzdXBwb3J0XCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFUSDEySyBcdTAwMjZcdTAwMjYgUkVNT1RFUFJPQ1xuICAyMDpcdFx0c2VsZWN0IFFDT01fTURUX0xPQURFUlxuICAyMTpcdFx0c2VsZWN0IFFDT01fU0NNXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIEVuYWJsZSBzdXBwb3J0IGZvciBBdGgxMmsgQUhCIGJ1cyBjaGlwc2V0cywgZXhhbXBsZSBJUFE1MzMyLlxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBBVEgxMktfREVCVUdcbiAgMjY6XHRcdGJvb2wgXCYjMzQ7YXRoMTJrIGRlYnVnZ2luZ1wmIzM0O1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBBVEgxMktcbiAgMjg6XHRcdGhlbHBcbiAgMjk6XHRcdCAgRW5hYmxlIGRlYnVnIHN1cHBvcnQsIGZvciBleGFtcGxlIGRlYnVnIG1lc3NhZ2VzIHdoaWNoIG11c3RcbiAgMzA6XHRcdCAgYmUgZW5hYmxlZCBzZXBhcmF0ZWx5IHVzaW5nIHRoZSBkZWJ1Z19tYXNrIG1vZHVsZSBwYXJhbWV0ZXIuXG4gIDMxOlx0XG4gIDMyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxuICAzMzpcdFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBBVEgxMktfREVCVUdGU1xuICAzNjpcdFx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEFUSDEySyBcdTAwMjZcdTAwMjYgTUFDODAyMTFfREVCVUdGU1xuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFxuICA0MDpcdFxuICA0MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnIHByb2JsZW1zLiBCdXQgaWZcbiAgNDI6XHRcdCAgeW91IHdhbnQgb3B0aW1hbCBwZXJmb3JtYW5jZSBjaG9vc2UgTi5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgQVRIMTJLX1RSQUNJTkdcbiAgNDU6XHRcdGJvb2wgXCYjMzQ7YXRoMTJrIHRyYWNpbmcgc3VwcG9ydFwmIzM0O1xuICA0NjpcdFx0ZGVwZW5kcyBvbiBBVEgxMksgXHUwMDI2XHUwMDI2IEVWRU5UX1RSQUNJTkdcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgRW5hYmxlIGF0aDEyayB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxuICA0OTpcdFxuICA1MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnIHByb2JsZW1zLiBCdXQgaWZcbiAgNTE6XHRcdCAgeW91IHdhbnQgb3B0aW1hbCBwZXJmb3JtYW5jZSBjaG9vc2UgTi5cbiAgNTI6XHRcbiAgNTM6XHRjb25maWcgQVRIMTJLX0NPUkVEVU1QXG4gIDU0Olx0XHRib29sIFwmIzM0O2F0aDEyayBjb3JlZHVtcFwmIzM0O1xuICA1NTpcdFx0ZGVwZW5kcyBvbiBBVEgxMktcbiAgNTY6XHRcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxuICA1NzpcdFx0aGVscFxuICA1ODpcdFx0ICBFbmFibGUgYXRoMTJrIGNvcmVkdW1wIGNvbGxlY3Rpb25cbiAgNTk6XHRcbiAgNjA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXG4gIDYxOlx0XHQgIGR1bXAgY29sbGVjdGlvbiBub3QgcmVxdWlyZWQgY2hvb3NlIE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NDI1CgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDExMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEFUSDEySyBRTUkgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGBBVEgxMktgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gd2UgbmVlZCB0byBlbmFibGUgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZS4gSXQgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCBgSEFTX0RNQWAsIGFuZCBgUENJYCwgd2hpY2ggYXJlIHN0YW5kYXJkIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBraW5kIG9mIHdpcmVsZXNzIGRyaXZlci4gTW9yZSBpbXBvcnRhbnRseSwgaXQgc2VsZWN0cyBhIHNldCBvZiBjcnVjaWFsIHN1YnN5c3RlbXMsIG5hbWVseSBgUUNPTV9RTUlfSEVMUEVSU2AsIGBNSElfQlVTYCwgYFFSVFJgLCBhbmQgYFFSVFJfTUhJYC4gVGhlc2UgYXJlIGFsbCBwb2ludGVycyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgoKVGhlIGtleSBoZXJlIGlzIHRoYXQgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZS4gQnkgYWRkaW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlLCB3ZSBjYW4gdHJpZ2dlciBgYXRoMTJrX3BjaV9wcm9iZWAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoZW4gZW11bGF0ZSB0aGUgUU1JIHNlcnZlciB1c2luZyBgQUZfUUlQQ1JUUmAgc29ja2V0cy4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBiaXQuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgdHdvIHNwZWNpZmljIGZ1bmN0aW9uczogYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAuIFRoZXNlIGFyZSB0aGUgb25lcyB3aGVyZSB0aGUgbmV3IGZpZWxkcyByZWxhdGVkIHRvIGR5bmFtaWMgRERSIGFuZCBtZW1vcnkgc3VwcG9ydCBhcmUgYmVpbmcgdXNlZC4gVGhleSYjMzk7cmUgc2VuZGluZyBRTUkgcmVxdWVzdHMgYW5kIHdhaXRpbmcgZm9yIHRoZSBmaXJtd2FyZSYjMzk7cyByZXNwb25zZXMuIFNpbmNlIHRoZSBwYXRjaCBhZGRzIG5ldyBgZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZGAsIGBkeW5hbWljX21lbV9zdXBwb3J0YCwgYGR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWRgLCBhbmQgYGR5bmFtaWNfZGRyX3N1cHBvcnRgIGZpZWxkcyB0byB0aGUgUU1JIG1lc3NhZ2VzLCB0aGUgcGF0Y2ggaXMgaW5kZWVkIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB1bmRlciB0aGUgcmlnaHQgY29uZGl0aW9ucy4gVGhhdCYjMzk7cyBleGNlbGxlbnQsIGl0IGlzIHdvcnRoIGZ1enppbmcuCgpUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHBhdGNoIGRpZmYsIGFuZCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgYmVpbmcgY2FsbGVkIGluIGBxbWkuY2AsIGFuZCB0aGUgUU1JIGZyYW1ld29yayBpbmRlZWQgdXNlcyB0aGUgcGF0Y2hlZCBhcnJheXMgd2hlbiBgcW1pX3NlbmRfcmVxdWVzdGAgYW5kIGBxbWlfdHhuX3dhaXRgIGFyZSBjYWxsZWQuCgpTcGVjaWZpY2FsbHksIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGlzICpub3QqIHN0YXRpYywgc28gaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgYW5kIHRoZSBvdGhlciBvbmUgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBpcyBzdGF0aWMgd2hpY2ggaXMgYWxzbyBmaW5lLiBUaGF0IGlzIHBlcmZlY3QuCgpTbywgdGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkeW5hbWljIEREUiBhbmQgbWVtb3J5IGluIHRoZSBhdGgxMmsgZHJpdmVyJiMzOTtzIFFNSSBjb21tdW5pY2F0aW9uLiBJdCBtb2RpZmllcyB0aGUgUU1JIG1lc3NhZ2UgZW5jb2RpbmcvZGVjb2RpbmcgYXJyYXlzIGFuZCBmdW5jdGlvbnMgdG8gc2V0IGFuZCByZWFkIHRoZXNlIG5ldyBmaWVsZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHdoZW4gYSBRTUkgc2VydmVyIGFycml2ZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGlzIGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgYW5kIHRoZSBRTUkgZmlybXdhcmUgc2VydmljZS4KClRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBpcyBgQVRIMTJLYC4gV2hpbGUgYFFSVFJgIGFuZCBgUUNPTV9RTUlfSEVMUEVSU2AgYXJlIHNlbGVjdGVkIGJ5IGBBVEgxMktgIGFuZCB3ZSBkb24mIzM5O3Qgc3RyaWN0bHkgbmVlZCB0byBsaXN0IHRoZW0sIGJ1dCBpdCBkb2VzbiYjMzk7dCBodXJ0LiBCdXQsIGVuYWJsaW5nIGBBVEgxMktgIHNob3VsZCBiZSBlbm91Z2guCgpUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaW5kaW5nLiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRIMTJLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kJiMzNDssCiAgICAmIzM0O2F0aDEya19xbWlfcGh5X2NhcF9zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHluYW1pYyBERFIgYW5kIG1lbW9yeSBzdXBwb3J0IGluIHRoZSBhdGgxMmsgZHJpdmVyJiMzOTtzIFFNSSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZpcm13YXJlLiBJdCBtb2RpZmllcyB0aGUgUU1JIG1lc3NhZ2UgZW5jb2RpbmcvZGVjb2RpbmcgYXJyYXlzIGFuZCB0aGUgZnVuY3Rpb25zIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGFuZCBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIHRvIHNldCBhbmQgcmVhZCB0aGVzZSBuZXcgZmllbGRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiB3aGVuIGEgUU1JIHNlcnZlciAoZmlybXdhcmUpIGFycml2ZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGlzIGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdG8gcHJvYmUgdGhlIGF0aDEyayBkcml2ZXIgYW5kIGVtdWxhdGluZyB0aGUgUU1JIGZpcm13YXJlIHNlcnZpY2UgdmlhIEFGX1FJUENSVFIgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRIMTJLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kJiMzNDssCiAgICAmIzM0O2F0aDEya19xbWlfcGh5X2NhcF9zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHluYW1pYyBERFIgYW5kIG1lbW9yeSBzdXBwb3J0IGluIHRoZSBhdGgxMmsgZHJpdmVyJiMzOTtzIFFNSSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZpcm13YXJlLiBJdCBtb2RpZmllcyB0aGUgUU1JIG1lc3NhZ2UgZW5jb2RpbmcvZGVjb2RpbmcgYXJyYXlzIGFuZCB0aGUgZnVuY3Rpb25zIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGFuZCBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIHRvIHNldCBhbmQgcmVhZCB0aGVzZSBuZXcgZmllbGRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiB3aGVuIGEgUU1JIHNlcnZlciAoZmlybXdhcmUpIGFycml2ZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGlzIGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdG8gcHJvYmUgdGhlIGF0aDEyayBkcml2ZXIgYW5kIGVtdWxhdGluZyB0aGUgUU1JIGZpcm13YXJlIHNlcnZpY2UgdmlhIEFGX1FJUENSVFIgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjEzLjg1MjIxMjcyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTYzMDQ4NjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVEgxMktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRcIixcbiAgICBcImF0aDEya19xbWlfcGh5X2NhcF9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkeW5hbWljIEREUiBhbmQgbWVtb3J5IHN1cHBvcnQgaW4gdGhlIGF0aDEyayBkcml2ZXIncyBRTUkgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBmaXJtd2FyZS4gSXQgbW9kaWZpZXMgdGhlIFFNSSBtZXNzYWdlIGVuY29kaW5nL2RlY29kaW5nIGFycmF5cyBhbmQgdGhlIGZ1bmN0aW9ucyBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBhbmQgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCB0byBzZXQgYW5kIHJlYWQgdGhlc2UgbmV3IGZpZWxkcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZHVyaW5nIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiB3aGVuIGEgUU1JIHNlcnZlciAoZmlybXdhcmUpIGFycml2ZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGlzIGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdG8gcHJvYmUgdGhlIGF0aDEyayBkcml2ZXIgYW5kIGVtdWxhdGluZyB0aGUgUU1JIGZpcm13YXJlIHNlcnZpY2UgdmlhIEFGX1FJUENSVFIgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MTMuODUyMjE5MzA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTc4NjM4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZTcyYjRmNWZiODY5NGE4Nzk1ZGM3YjcwZjdkNzY0MDU4MDIwZjhiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDA5OjE2OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXFxuaW5kZXggZmQ3NjJiNWQ3YmI1OTcuLmUxNWEwYzAxMjBkM2E4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXFxuQEAgLTUwNiw2ICs1MDYsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfZWxlbV9pbmZvIHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDFfZWlbXSA9IHtcXG4gXFx0XFx0Lm9mZnNldFxcdFxcdD0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGZlYXR1cmVfbGlzdCksXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmRhdGFfdHlwZVxcdD0gUU1JX09QVF9GTEFHLFxcbitcXHRcXHQuZWxlbV9sZW5cXHQ9IDEsXFxuK1xcdFxcdC5lbGVtX3NpemVcXHQ9IHNpemVvZih1OCksXFxuK1xcdFxcdC5hcnJheV90eXBlXFx0PSBOT19BUlJBWSxcXG4rXFx0XFx0LnRsdl90eXBlXFx0PSAweDMzLFxcbitcXHRcXHQub2Zmc2V0XFx0XFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCksXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmRhdGFfdHlwZVxcdD0gUU1JX1VOU0lHTkVEXzFfQllURSxcXG4rXFx0XFx0LmVsZW1fbGVuXFx0PSAxLFxcbitcXHRcXHQuZWxlbV9zaXplXFx0PSBzaXplb2YodTgpLFxcbitcXHRcXHQuYXJyYXlfdHlwZVxcdD0gTk9fQVJSQVksXFxuK1xcdFxcdC50bHZfdHlwZVxcdD0gMHgzMyxcXG4rXFx0XFx0Lm9mZnNldFxcdFxcdD0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGR5bmFtaWNfbWVtX3N1cHBvcnQpLFxcbitcXHR9LFxcbiBcXHR7XFxuIFxcdFxcdC5kYXRhX3R5cGVcXHQ9IFFNSV9FT1RJLFxcbiBcXHRcXHQuYXJyYXlfdHlwZVxcdD0gTk9fQVJSQVksXFxuQEAgLTYwMiw2ICs2MjAsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfZWxlbV9pbmZvIHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDFfZWlbXSA9IHtcXG4gXFx0XFx0Lm9mZnNldCAgICAgICAgID0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0KSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuZGF0YV90eXBlXFx0PSBRTUlfT1BUX0ZMQUcsXFxuK1xcdFxcdC5lbGVtX2xlblxcdD0gMSxcXG4rXFx0XFx0LmVsZW1fc2l6ZVxcdD0gc2l6ZW9mKHU4KSxcXG4rXFx0XFx0LmFycmF5X3R5cGVcXHQ9IE5PX0FSUkFZLFxcbitcXHRcXHQudGx2X3R5cGVcXHQ9IDB4MTcsXFxuK1xcdFxcdC5vZmZzZXRcXHRcXHQ9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxLFxcbitcXHRcXHRcXHRcXHRcXHQgICBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKSxcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuZGF0YV90eXBlXFx0PSBRTUlfVU5TSUdORURfMV9CWVRFLFxcbitcXHRcXHQuZWxlbV9sZW5cXHQ9IDEsXFxuK1xcdFxcdC5lbGVtX3NpemVcXHQ9IHNpemVvZih1OCksXFxuK1xcdFxcdC5hcnJheV90eXBlXFx0PSBOT19BUlJBWSxcXG4rXFx0XFx0LnRsdl90eXBlXFx0PSAweDE3LFxcbitcXHRcXHQub2Zmc2V0XFx0XFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZHluYW1pY19kZHJfc3VwcG9ydCksXFxuK1xcdH0sXFxuIFxcdHtcXG4gXFx0XFx0LmRhdGFfdHlwZVxcdD0gUU1JX0VPVEksXFxuIFxcdFxcdC5hcnJheV90eXBlXFx0PSBOT19BUlJBWSxcXG5AQCAtMjI0OCw2ICsyMjg0LDExIEBAIGludCBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0aWYgKGFiLVxcdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydCkge1xcbitcXHRcXHRyZXEuZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCA9IDE7XFxuK1xcdFxcdHJlcS5keW5hbWljX21lbV9zdXBwb3J0ID0gMTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gcW1pX3R4bl9pbml0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSwgXFx1MDAyNnR4bixcXG4gXFx0XFx0XFx0ICAgcW1pX3dsYW5md19ob3N0X2NhcF9yZXNwX21zZ192MDFfZWksIFxcdTAwMjZyZXNwKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuQEAgLTIzMTksMTEgKzIzNjAsMTQgQEAgc3RhdGljIHZvaWQgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFxuIFxcdGFiLVxcdTAwM2VxbWkubnVtX3JhZGlvcyA9IHJlc3AubnVtX3BoeTtcXG4gXFxuK1xcdGlmIChyZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWQpXFxuK1xcdFxcdGFiLVxcdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydCA9IHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydDtcXG4rXFxuIFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUU1JLFxcbi1cXHRcXHQgICBcXFwicGh5IGNhcGFiaWxpdHkgcmVzcCB2YWxpZCAlZCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCAlZCB2YWxpZCAlZCBudW1fcGh5ICVkIHZhbGlkICVkIGJvYXJkX2lkICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwicGh5IGNhcGFiaWxpdHkgcmVzcCB2YWxpZCAlZCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCAlZCB2YWxpZCAlZCBudW1fcGh5ICVkIHZhbGlkICVkIGJvYXJkX2lkICVkIGR5bmFtaWNfZGRyX3ZhbGlkICV1IGR5bmFtaWNfZGRyX3N1cHBvcnQgJXVcXFxcblxcXCIsXFxuIFxcdFxcdCAgIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQsIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQsXFxuLVxcdFxcdCAgIHJlc3AubnVtX3BoeV92YWxpZCwgcmVzcC5udW1fcGh5LFxcbi1cXHRcXHQgICByZXNwLmJvYXJkX2lkX3ZhbGlkLCByZXNwLmJvYXJkX2lkKTtcXG4rXFx0XFx0ICAgcmVzcC5udW1fcGh5X3ZhbGlkLCByZXNwLm51bV9waHksIHJlc3AuYm9hcmRfaWRfdmFsaWQsIHJlc3AuYm9hcmRfaWQsXFxuK1xcdFxcdCAgIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCwgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0KTtcXG4gXFxuIFxcdHJldHVybjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oXFxuaW5kZXggMmE2M2UyMTRlYjQyYzUuLjliZGIyOTBlMmNjZTkwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oXFxuQEAgLTE1Niw5ICsxNTYsMTAgQEAgc3RydWN0IGF0aDEya19xbWkge1xcbiBcXHRzdHJ1Y3QgbTNfbWVtX3JlZ2lvbiBhdXhfdWNfbWVtO1xcbiBcXHR1bnNpZ25lZCBpbnQgc2VydmljZV9pbnNfaWQ7XFxuIFxcdHN0cnVjdCBkZXZfbWVtX2luZm8gZGV2X21lbVtBVEgxMktfUU1JX1dMRldfTUFYX0RFVl9NRU1fTlVNX1YwMV07XFxuK1xcdHU4IGR5bmFtaWNfZGRyX3N1cHBvcnQ7XFxuIH07XFxuIFxcbi0jZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTlxcdFxcdDI2MVxcbisjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTlxcdFxcdDI2NVxcbiAjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX1YwMVxcdFxcdFxcdDB4MDAzNFxcbiAjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVTUF9NU0dfVjAxX01BWF9MRU5cXHQ3XFxuICNkZWZpbmUgUU1JX1dMRldfSE9TVF9DQVBfUkVTUF9WMDFcXHRcXHRcXHQweDAwMzRcXG5AQCAtMjU4LDcgKzI1OSw4IEBAIHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxIHtcXG4gXFx0c3RydWN0IHdsZndfaG9zdF9tbG9fY2hpcF9pbmZvX3NfdjAxIG1sb19jaGlwX2luZm9bUU1JX1dMRldfTUFYX05VTV9NTE9fQ0hJUFNfVjAxXTtcXG4gXFx0dTggZmVhdHVyZV9saXN0X3ZhbGlkO1xcbiBcXHR1NjQgZmVhdHVyZV9saXN0O1xcbi1cXG4rXFx0dTggZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZDtcXG4rXFx0dTggZHluYW1pY19tZW1fc3VwcG9ydDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3Jlc3BfbXNnX3YwMSB7XFxuQEAgLTI4MSw2ICsyODMsOCBAQCBzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSB7XFxuIFxcdHUzMiBib2FyZF9pZDtcXG4gXFx0dTggc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQ7XFxuIFxcdHU4IHNpbmdsZV9jaGlwX21sb19zdXBwb3J0O1xcbitcXHR1OCBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkO1xcbitcXHR1OCBkeW5hbWljX2Rkcl9zdXBwb3J0O1xcbiB9O1xcbiBcXG4gI2RlZmluZSBRTUlfV0xBTkZXX0lORF9SRUdJU1RFUl9SRVFfTVNHX1YwMV9NQVhfTEVOXFx0XFx0NTRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MTQuNDcxMzc3ODQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzkwMTEzMDQ1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kXCIsXG4gICAgXCJhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHluYW1pYyBERFIgYW5kIG1lbW9yeSBzdXBwb3J0IGluIHRoZSBhdGgxMmsgZHJpdmVyJ3MgUU1JIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUuIEl0IG1vZGlmaWVzIHRoZSBRTUkgbWVzc2FnZSBlbmNvZGluZy9kZWNvZGluZyBhcnJheXMgYW5kIHRoZSBmdW5jdGlvbnMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgdG8gc2V0IGFuZCByZWFkIHRoZXNlIG5ldyBmaWVsZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gd2hlbiBhIFFNSSBzZXJ2ZXIgKGZpcm13YXJlKSBhcnJpdmVzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhpcyBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRvIHByb2JlIHRoZSBhdGgxMmsgZHJpdmVyIGFuZCBlbXVsYXRpbmcgdGhlIFFNSSBmaXJtd2FyZSBzZXJ2aWNlIHZpYSBBRl9RSVBDUlRSIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2U3MmI0ZjVmYjg2OTRhODc5NWRjN2I3MGY3ZDc2NDA1ODAyMGY4YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDA5OjE2OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbmluZGV4IGZkNzYyYjVkN2JiNTk3Li5lMTVhMGMwMTIwZDNhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbkBAIC01MDYsNiArNTA2LDI0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX2VsZW1faW5mbyBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxX2VpW10gPSB7XG4gXHRcdC5vZmZzZXRcdFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMSxcbiBcdFx0XHRcdFx0ICAgZmVhdHVyZV9saXN0KSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5kYXRhX3R5cGVcdD0gUU1JX09QVF9GTEFHLFxuK1x0XHQuZWxlbV9sZW5cdD0gMSxcbitcdFx0LmVsZW1fc2l6ZVx0PSBzaXplb2YodTgpLFxuK1x0XHQuYXJyYXlfdHlwZVx0PSBOT19BUlJBWSxcbitcdFx0LnRsdl90eXBlXHQ9IDB4MzMsXG4rXHRcdC5vZmZzZXRcdFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMSxcbitcdFx0XHRcdFx0ICAgZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCksXG4rXHR9LFxuK1x0e1xuK1x0XHQuZGF0YV90eXBlXHQ9IFFNSV9VTlNJR05FRF8xX0JZVEUsXG4rXHRcdC5lbGVtX2xlblx0PSAxLFxuK1x0XHQuZWxlbV9zaXplXHQ9IHNpemVvZih1OCksXG4rXHRcdC5hcnJheV90eXBlXHQ9IE5PX0FSUkFZLFxuK1x0XHQudGx2X3R5cGVcdD0gMHgzMyxcbitcdFx0Lm9mZnNldFx0XHQ9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxLFxuK1x0XHRcdFx0XHQgICBkeW5hbWljX21lbV9zdXBwb3J0KSxcbitcdH0sXG4gXHR7XG4gXHRcdC5kYXRhX3R5cGVcdD0gUU1JX0VPVEksXG4gXHRcdC5hcnJheV90eXBlXHQ9IE5PX0FSUkFZLFxuQEAgLTYwMiw2ICs2MjAsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfZWxlbV9pbmZvIHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDFfZWlbXSA9IHtcbiBcdFx0Lm9mZnNldCAgICAgICAgID0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEsXG4gXHRcdFx0XHRcdCAgIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0KSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5kYXRhX3R5cGVcdD0gUU1JX09QVF9GTEFHLFxuK1x0XHQuZWxlbV9sZW5cdD0gMSxcbitcdFx0LmVsZW1fc2l6ZVx0PSBzaXplb2YodTgpLFxuK1x0XHQuYXJyYXlfdHlwZVx0PSBOT19BUlJBWSxcbitcdFx0LnRsdl90eXBlXHQ9IDB4MTcsXG4rXHRcdC5vZmZzZXRcdFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSxcbitcdFx0XHRcdFx0ICAgZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCksXG4rXHR9LFxuK1x0e1xuK1x0XHQuZGF0YV90eXBlXHQ9IFFNSV9VTlNJR05FRF8xX0JZVEUsXG4rXHRcdC5lbGVtX2xlblx0PSAxLFxuK1x0XHQuZWxlbV9zaXplXHQ9IHNpemVvZih1OCksXG4rXHRcdC5hcnJheV90eXBlXHQ9IE5PX0FSUkFZLFxuK1x0XHQudGx2X3R5cGVcdD0gMHgxNyxcbitcdFx0Lm9mZnNldFx0XHQ9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxLFxuK1x0XHRcdFx0XHQgICBkeW5hbWljX2Rkcl9zdXBwb3J0KSxcbitcdH0sXG4gXHR7XG4gXHRcdC5kYXRhX3R5cGVcdD0gUU1JX0VPVEksXG4gXHRcdC5hcnJheV90eXBlXHQ9IE5PX0FSUkFZLFxuQEAgLTIyNDgsNiArMjI4NCwxMSBAQCBpbnQgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGlmIChhYi1cdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydCkge1xuK1x0XHRyZXEuZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCA9IDE7XG4rXHRcdHJlcS5keW5hbWljX21lbV9zdXBwb3J0ID0gMTtcbitcdH1cbitcbiBcdHJldCA9IHFtaV90eG5faW5pdChcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlLCBcdTAwMjZ0eG4sXG4gXHRcdFx0ICAgcW1pX3dsYW5md19ob3N0X2NhcF9yZXNwX21zZ192MDFfZWksIFx1MDAyNnJlc3ApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbkBAIC0yMzE5LDExICsyMzYwLDE0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXG4gXHRhYi1cdTAwM2VxbWkubnVtX3JhZGlvcyA9IHJlc3AubnVtX3BoeTtcbiBcbitcdGlmIChyZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWQpXG4rXHRcdGFiLVx1MDAzZXFtaS5keW5hbWljX2Rkcl9zdXBwb3J0ID0gcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0O1xuK1xuIFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19RTUksXG4tXHRcdCAgIFwicGh5IGNhcGFiaWxpdHkgcmVzcCB2YWxpZCAlZCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCAlZCB2YWxpZCAlZCBudW1fcGh5ICVkIHZhbGlkICVkIGJvYXJkX2lkICVkXFxuXCIsXG4rXHRcdCAgIFwicGh5IGNhcGFiaWxpdHkgcmVzcCB2YWxpZCAlZCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCAlZCB2YWxpZCAlZCBudW1fcGh5ICVkIHZhbGlkICVkIGJvYXJkX2lkICVkIGR5bmFtaWNfZGRyX3ZhbGlkICV1IGR5bmFtaWNfZGRyX3N1cHBvcnQgJXVcXG5cIixcbiBcdFx0ICAgcmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydF92YWxpZCwgcmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCxcbi1cdFx0ICAgcmVzcC5udW1fcGh5X3ZhbGlkLCByZXNwLm51bV9waHksXG4tXHRcdCAgIHJlc3AuYm9hcmRfaWRfdmFsaWQsIHJlc3AuYm9hcmRfaWQpO1xuK1x0XHQgICByZXNwLm51bV9waHlfdmFsaWQsIHJlc3AubnVtX3BoeSwgcmVzcC5ib2FyZF9pZF92YWxpZCwgcmVzcC5ib2FyZF9pZCxcbitcdFx0ICAgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkLCByZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnQpO1xuIFxuIFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oXG5pbmRleCAyYTYzZTIxNGViNDJjNS4uOWJkYjI5MGUyY2NlOTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oXG5AQCAtMTU2LDkgKzE1NiwxMCBAQCBzdHJ1Y3QgYXRoMTJrX3FtaSB7XG4gXHRzdHJ1Y3QgbTNfbWVtX3JlZ2lvbiBhdXhfdWNfbWVtO1xuIFx0dW5zaWduZWQgaW50IHNlcnZpY2VfaW5zX2lkO1xuIFx0c3RydWN0IGRldl9tZW1faW5mbyBkZXZfbWVtW0FUSDEyS19RTUlfV0xGV19NQVhfREVWX01FTV9OVU1fVjAxXTtcbitcdHU4IGR5bmFtaWNfZGRyX3N1cHBvcnQ7XG4gfTtcbiBcbi0jZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTlx0XHQyNjFcbisjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTlx0XHQyNjVcbiAjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX1YwMVx0XHRcdDB4MDAzNFxuICNkZWZpbmUgUU1JX1dMQU5GV19IT1NUX0NBUF9SRVNQX01TR19WMDFfTUFYX0xFTlx0N1xuICNkZWZpbmUgUU1JX1dMRldfSE9TVF9DQVBfUkVTUF9WMDFcdFx0XHQweDAwMzRcbkBAIC0yNTgsNyArMjU5LDggQEAgc3RydWN0IHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDEge1xuIFx0c3RydWN0IHdsZndfaG9zdF9tbG9fY2hpcF9pbmZvX3NfdjAxIG1sb19jaGlwX2luZm9bUU1JX1dMRldfTUFYX05VTV9NTE9fQ0hJUFNfVjAxXTtcbiBcdHU4IGZlYXR1cmVfbGlzdF92YWxpZDtcbiBcdHU2NCBmZWF0dXJlX2xpc3Q7XG4tXG4rXHR1OCBkeW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkO1xuK1x0dTggZHluYW1pY19tZW1fc3VwcG9ydDtcbiB9O1xuIFxuIHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3Jlc3BfbXNnX3YwMSB7XG5AQCAtMjgxLDYgKzI4Myw4IEBAIHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxIHtcbiBcdHUzMiBib2FyZF9pZDtcbiBcdHU4IHNpbmdsZV9jaGlwX21sb19zdXBwb3J0X3ZhbGlkO1xuIFx0dTggc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQ7XG4rXHR1OCBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkO1xuK1x0dTggZHluYW1pY19kZHJfc3VwcG9ydDtcbiB9O1xuIFxuICNkZWZpbmUgUU1JX1dMQU5GV19JTkRfUkVHSVNURVJfUkVRX01TR19WMDFfTUFYX0xFTlx0XHQ1NFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MTQuNDcxMzc5NzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg0NjU1OTQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBBdGgxMmsgUU1JIFBhdGNoIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGBkeW5hbWljX2Rkcl9zdXBwb3J0YCBhbmQgYGR5bmFtaWNfbWVtX3N1cHBvcnRgIHRvIHRoZSBRTUkgbWVzc2FnZXMgaW4gYGF0aDEya2AuIFRoaXMgaXMgZm9yIFF1YWxjb21tJ3MgV2ktRmkgNyBkZXZpY2VzLCBhbmQgaXQgbW9kaWZpZXMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBob3cgcmVhY2hhYmxlIGlzIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgYGF0aDEya2AgZHJpdmVyIHVzdWFsbHkgZGVwZW5kcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSwgbGlrZSBQQ0llIG9yIEFIQiBkZXZpY2VzLlxuXG5NeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBgbWFjODAyMTFfaHdzaW1gIGNvdmVycyB0aGlzLCBidXQgbm8sIHRoYXQncyBhIG1hYzgwMjExICpzaW11bGF0b3IqLCBub3QgYSBmdWxsIGBhdGgxMmtgIGhhcmR3YXJlIG1vZGVsLiBTbywgY2FuIHdlIGZ1enogdGhpcyB2aWEgYSB2aXJ0dWFsIGJ1cyBvciBkaXJlY3RseSB0aHJvdWdoIFFNST8gV2UncmUgdGFsa2luZyBhYm91dCBRTUksIHRoZSBRdWFsY29tbSBNU00gSW50ZXJmYWNlLCB3aGljaCB0eXBpY2FsbHkgdXNlcyBJUEMgcm91dGVyIChBRl9RSVBDUlRSKSBvciBzaW1pbGFyLiBJbiB0aGUgYGF0aDEya2AgY29udGV4dCwgdGhpcyBpcyBob3cgd2UgdGFsayB0byB0aGUgZmlybXdhcmUgKm9uKiB0aGUgV2ktRmkgY2hpcC5cblxuVGhlIG5leHQgcXVlc3Rpb24gaXMsIGNhbiB3ZSBldmVuIHByb2JlIGBhdGgxMmtgIHdpdGhvdXQgdGhlIGhhcmR3YXJlIHByZXNlbnQ/IFBDSSBkcml2ZXJzIG9mdGVuIHJlcXVpcmUgYSB2aXJ0dWFsIFBDSSBkZXZpY2UuIFN5emthbGxlciAqY2FuKiBkbyBQQ0kgZnV6emluZywgbWF5YmUgd2l0aCBgdmhjaWAgb3Igc2ltaWxhciwgb3IgcG90ZW50aWFsbHkgd2l0aCB0aG9zZSBgc3l6X3BjaV8uLi5gIHBzZXVkby1zeXNjYWxscyBidXQgaXRzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcyBhcmUgbGltaXRlZCB3aXRob3V0IGEgbW9jay11cC4gQnV0IHNpbmNlIHRoaXMgaXMgUU1JLCBhbmQgUU1JIG1lc3NhZ2VzIGFyZSAqc2VudCogdG8gdGhlIGZpcm13YXJlLCB3aGljaCBpc24ndCB0aGVyZSB3aXRob3V0IHRoZSBoYXJkd2FyZSwgdGhvc2UgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgZnVuY3Rpb25zIG1pZ2h0IG5vdCBiZSBldmVuIGJlIHJlYWNoYWJsZS4gSSBzaG91bGQgY2hlY2sgdGhlIGBhdGgxMmtgIGluaXRpYWxpemF0aW9uIHBhdGggYW5kIHNlZSBob3cgdGhlIGRyaXZlciBzdGFydHMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjoyMy4zMTc5NDExNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2NDcwMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19xbWlfaG9zdF9jYXBfc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTIyMzU9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFja1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MjIzNjppbnQgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0yMjM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzk5ND1zdGF0aWMgaW50IGF0aDEya19xbWlfZXZlbnRfaG9zdF9jYXAoc3RydWN0IGF0aDEya19xbWkgKnFtaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk5OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5OTk6XFx0cmV0ID0gYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwMDAtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MjMuOTQ0NDY5MDA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMjUxNjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgY29udGV4dCBvZiBzb21lb25lIGV4cGVyaWVuY2VkIGluIHRoZWlyIGZpZWxkOlxuXG4qKkRlY29kaW5nIFRoaXMgRnVuY3Rpb24gQ2FsbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYGF0aDEya19xbWlfZXZlbnRfaG9zdF9jYXBgLiBUaGF0IGZ1bmN0aW9uIG5hbWUncyByaW5naW5nIGEgYmVsbCDigJMgaXQncyBkZWZpbml0ZWx5IHRpZWQgdG8gdGhlIEF0aGVyb3MgKG9yIGF0IGxlYXN0LCB0aGUgb2xkZXIgYXRoMTJrKSB3aXJlbGVzcyBkcml2ZXIgYW5kLCBzcGVjaWZpY2FsbHksIFFNSSBldmVudHMuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSSdkIGJldCB0aGlzIGZ1bmN0aW9uJ3Mgam9iIGlzIHRvIGhhbmRsZSBvciBpbnRlcnByZXQgc29tZSBraW5kIG9mIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gYmVpbmcgcmVwb3J0ZWQgYmFjayBmcm9tIHRoZSBRTUkgc2lkZSBvZiB0aGluZ3MuXG5cblRoZSBjcml0aWNhbCBwaWVjZSBoZXJlLCBiYXNlZCBvbiBteSBleHBlcmllbmNlLCBpcyB0aGF0IEkga25vdyB0aGlzIGlzIG1vc3QgbGlrZWx5IGNhbGxlZCB3aXRoaW4gYSB3b3JrcXVldWUgY29udGV4dC4gYHFtaV9ldmVudGAgaXMgYSBkZWFkIGdpdmVhd2F5LiBUaGF0IG1lYW5zIHdoYXRldmVyIGBhdGgxMmtfcW1pX2V2ZW50X2hvc3RfY2FwYCBpcyBkb2luZyBoYXMgYmVlbiAqcXVldWVkKiB0byBydW4gbGF0ZXIuIFRoaXMgaXMga2V5IGJlY2F1c2UgaXQgbWVhbnMgd2UgbmVlZCB0byBjb25zaWRlciB0aGluZ3MgbGlrZSBsb2NraW5nIGFuZCBjb25jdXJyZW5jeSB2ZXJ5IGNhcmVmdWxseS4gV2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBldmVudCBwcm9jZXNzaW5nLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgaGFyZHdhcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHdvcmtxdWV1ZSdzIGNoYXJhY3RlcmlzdGljcyBpcyBhYnNvbHV0ZWx5IHZpdGFsIGZvciBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gQW55IG5vbi1hdG9taWMgb3BlcmF0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlIHNvbWV0aGluZyB0byBzY3J1dGluaXplIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjoyNy44NjY5ODgxMzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MTEwNzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19xbWlfZXZlbnRfaG9zdF9jYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zOTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX29wcyBhdGgxMmtfcW1pX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5OTQ6c3RhdGljIGludCBhdGgxMmtfcW1pX2V2ZW50X2hvc3RfY2FwKHN0cnVjdCBhdGgxMmtfcW1pICpxbWkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9NDAwOT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDA2NS1cXHRcXHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfSE9TVF9DQVA6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzo0MDY2OlxcdFxcdFxcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfaG9zdF9jYXAocW1pKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwNjctXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjI4LjA4MzEwNDU5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTQ0NzY3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFNwZWNpZmljIEZ1bmN0aW9uIENhbGwqKlxuXG5TbywgdGhlIHF1ZXN0aW9uIHRoYXQncyBwaXF1ZWQgbXkgaW50ZXJlc3QgcmlnaHQgbm93IGlzLCBcIldoYXQgYWJvdXQgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYD9cIiBJIHNlZSB0aGF0IGZ1bmN0aW9uIGNhbGwgYW5kIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBicm9hZGVyIGNvbnRleHQuIFdoYXQncyBpdCBkb2luZz8gSXMgaXQgYSBrZXkgcGFydCBvZiB0aGUgUU1JIChRdWFsY29tbSBNU00gSW50ZXJmYWNlKSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGF0aDEyayBkcml2ZXIsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBQSFkgY2FwYWJpbGl0aWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIElzIGl0IHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIFBIWSBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIHRvIHRoZSBtb2RlbT8gSWYgc28sIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCdzIHRoZSBwcm90b2NvbD8gSXMgdGhpcyBhIGNyaXRpY2FsIHBpZWNlIGZvciBuZWdvdGlhdGlvbiwgc2V0dXAsIG9yIGp1c3QgcmVwb3J0aW5nP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgaWYgdGhpcyBmdW5jdGlvbiBoYXMgaXNzdWVzLiBEb2VzIGEgcHJvYmxlbSBoZXJlIGxlYWQgdG8gY29ubmVjdGlvbiBwcm9ibGVtcywgdGhyb3VnaHB1dCBsaW1pdGF0aW9ucywgb3IgZXZlbiBkZXZpY2UgaW5zdGFiaWxpdHk/IEFyZSB0aGVyZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBvciByZXR1cm4gdmFsdWVzIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGluIGFueSBkZWJ1Z2dpbmcgbG9ncz8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIGNhbGwgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgaW52b2tlZCwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIGl0LiBEaWdnaW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBsaWtlbHkgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjMxLjczNzU4NDI5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTcwNzkyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0yMjM2PWludCBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMjMyMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjIzMjI6c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTIzMjMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zNzU4PWludCBhdGgxMmtfcW1pX2V2ZW50X3NlcnZlcl9hcnJpdmUoc3RydWN0IGF0aDEya19xbWkgKnFtaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzc2My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM3NjQ6XFx0YXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzc2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MzEuOTk0NjY4OTgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MjM5OTU4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBhdGgxMmsgUU1JIFNlcnZlciBBcnJpdmFsKipcblxuT2theSwgc28gYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB0aGUgUU1JIHNlcnZlciBzaG93cyB1cC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEJ1dCB0aGUgaW1wb3J0YW50IHRoaW5nIGlzLCB0aGlzIHdob2xlIHByb2Nlc3MgaGluZ2VzIG9uIHRoZSBgYXRoMTJrYCBkcml2ZXIgYmVpbmcgcHJvcGVybHkgcHJvYmVkIGZpcnN0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gSSBhY3R1YWxseSBwcm9iZSBgYXRoMTJrYCB3aXRob3V0IGhhdmluZyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgcHJlc2VudD8gVGhhdCB3b3VsZCBiZSBpbmNyZWRpYmx5IHVzZWZ1bCBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQsIHdpdGhvdXQgYmVpbmcgdGllZCB0byBzcGVjaWZpYyBoYXJkd2FyZS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBmaW5kIG91dC4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY2AsIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gQW5kIG9mIGNvdXJzZSwgYG1hYy5jYCBhbmQgb3RoZXIgcmVsZXZhbnQgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkgYXJlIGFsc28gbGlrZWx5IHRvIGhvbGQgc29tZSBjbHVlcy4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCB0aGUgcHJvYmluZyByZXF1aXJlbWVudHMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MzUuNTc3MDcyMDE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI1NjE3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9NTU9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjY0Om1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02NS1tb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjM2LjE2OTY0MjE0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjUwMDkwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBhdGgxMmtgIE1vZHVsZSoqXG5cbk9rYXksIHNvIGBhdGgxMmtgIGlzIGEgbW9kdWxlLCByaWdodD8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBrbm93IHdoYXQgYnVzZXMgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRvIHByb3Blcmx5IGRpYWdub3NlIGFueSBpc3N1ZXMgb3Igb3B0aW1pemUgaXRzIHBlcmZvcm1hbmNlLiBMZXQncyBzZWUuLi4gd2hhdCBidXNlcyBpcyB0aGlzIG1vZHVsZSBhY3R1YWxseSB1c2luZz8gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGltbWVkaWF0ZWx5IHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHN5c3RlbSdzIGludGVncmF0aW9uIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFRoaXMgaXMgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgbmVlZHMgYW5zd2VyaW5nLiBLbm93aW5nIGhvdyBpdCdzIGNvbm5lY3RlZCBoZWxwcyBpbiBkZXRlcm1pbmluZyB0aGUgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY3MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjM4LjgxOTc0Nzg3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NDQyNTc3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGNpX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MzguOTg1MjI1NjQ5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzM5NTQzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCBnaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBlaXRoZXIgYHBjaS5jYCBvciBgYWhiLmNgLiBUaGUgcHJvYmxlbSBsaWtlbHkgcmV2b2x2ZXMgYXJvdW5kIHBlcmlwaGVyYWwgY29tbXVuaWNhdGlvbi4gVGhpcyBwb2ludHMgbWUgZGlyZWN0bHkgdG8gdGhvc2UgZmlsZXMuIEVpdGhlciB0aGUgUENJIGJ1cyBpcyBpbnZvbHZlZCwgb3IgaXQncyBjb25uZWN0ZWQgdG8gdGhlIEFIQiBidXMuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHdoaWNoZXZlciBsb29rcyBsaWtlIHRoZSBtb3JlIGxpa2VseSBzdXNwZWN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNpdHVhdGlvbiDigJMgbWF5YmUgSSByZW1lbWJlciBzb21ldGhpbmcgc3BlY2lmaWMgYWJvdXQgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEknbGwgcXVpY2tseSBlbGltaW5hdGUgb25lIG9yIHRoZSBvdGhlci4gVGhpcyBpcyBhYm91dCBlZmZpY2llbnRseSBwaW5wb2ludGluZyB0aGUgZW50cnkgcG9pbnQgZm9yIGludmVzdGlnYXRpb24uIE5vIG5lZWQgdG8gd2FzdGUgdGltZTsgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjo0MS41MTkxODI4NzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJhY3BpLmNcIixcbiAgICBcImFjcGkuaFwiLFxuICAgIFwiYWhiLmNcIixcbiAgICBcImFoYi5oXCIsXG4gICAgXCJjZS5jXCIsXG4gICAgXCJjZS5oXCIsXG4gICAgXCJjbW5fZGVmcy5oXCIsXG4gICAgXCJjb3JlLmNcIixcbiAgICBcImNvcmUuaFwiLFxuICAgIFwiY29yZWR1bXAuY1wiLFxuICAgIFwiY29yZWR1bXAuaFwiLFxuICAgIFwiZGJyaW5nLmNcIixcbiAgICBcImRicmluZy5oXCIsXG4gICAgXCJkZWJ1Zy5jXCIsXG4gICAgXCJkZWJ1Zy5oXCIsXG4gICAgXCJkZWJ1Z2ZzLmNcIixcbiAgICBcImRlYnVnZnMuaFwiLFxuICAgIFwiZGVidWdmc19odHRfc3RhdHMuY1wiLFxuICAgIFwiZGVidWdmc19odHRfc3RhdHMuaFwiLFxuICAgIFwiZGVidWdmc19zdGEuY1wiLFxuICAgIFwiZGVidWdmc19zdGEuaFwiLFxuICAgIFwiZHAuY1wiLFxuICAgIFwiZHAuaFwiLFxuICAgIFwiZHBfY21uLmhcIixcbiAgICBcImRwX2h0dC5jXCIsXG4gICAgXCJkcF9odHQuaFwiLFxuICAgIFwiZHBfbW9uLmNcIixcbiAgICBcImRwX21vbi5oXCIsXG4gICAgXCJkcF9wZWVyLmNcIixcbiAgICBcImRwX3BlZXIuaFwiLFxuICAgIFwiZHBfcnguY1wiLFxuICAgIFwiZHBfcnguaFwiLFxuICAgIFwiZHBfdHguY1wiLFxuICAgIFwiZHBfdHguaFwiLFxuICAgIFwiZncuY1wiLFxuICAgIFwiZncuaFwiLFxuICAgIFwiaGFsLmNcIixcbiAgICBcImhhbC5oXCIsXG4gICAgXCJoaWYuaFwiLFxuICAgIFwiaHRjLmNcIixcbiAgICBcImh0Yy5oXCIsXG4gICAgXCJody5oXCIsXG4gICAgXCJtYWMuY1wiLFxuICAgIFwibWFjLmhcIixcbiAgICBcIm1oaS5jXCIsXG4gICAgXCJtaGkuaFwiLFxuICAgIFwicDJwLmNcIixcbiAgICBcInAycC5oXCIsXG4gICAgXCJwY2kuY1wiLFxuICAgIFwicGNpLmhcIixcbiAgICBcInBlZXIuY1wiLFxuICAgIFwicGVlci5oXCIsXG4gICAgXCJxbWkuY1wiLFxuICAgIFwicW1pLmhcIixcbiAgICBcInJlZy5jXCIsXG4gICAgXCJyZWcuaFwiLFxuICAgIFwidGVzdG1vZGUuY1wiLFxuICAgIFwidGVzdG1vZGUuaFwiLFxuICAgIFwidGhlcm1hbC5jXCIsXG4gICAgXCJ0aGVybWFsLmhcIixcbiAgICBcInRyYWNlLmNcIixcbiAgICBcInRyYWNlLmhcIixcbiAgICBcIndtaS5jXCIsXG4gICAgXCJ3bWkuaFwiLFxuICAgIFwid293LmNcIixcbiAgICBcIndvdy5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcIndpZmk3XCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6NDEuNTE5MzUzNDI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzE2NzQxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQQ0kgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgUENJIGRyaXZlciBnZXRzIGluaXRpYWxpemVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgY29yZSBQQ0kgZHJpdmVyIGNvZGUsIHByb2JhYmx5IGBwY2kuY2AuIEkgbmVlZCB0byBsb29rIGZvciB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gaG9va3MuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgYG1vZHVsZV9pbml0YCwgb3IgYW55dGhpbmcgc2ltaWxhciB0aGF0IGhhbmRsZXMgZHJpdmVyIHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgaXQnbGwgZ2l2ZSBtZSBhIHJvYWRtYXAgb2YgaG93IHRoZSBkcml2ZXIgaXMgYnJvdWdodCB0byBsaWZlIHdpdGhpbiB0aGUga2VybmVsJ3MgUENJIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3MiwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjo0NC44OTEwMzA3MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTA5MjQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdHxtb2R1bGVfcGNpX2RyaXZlcnxwY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBfX21heWJlX3VudXNlZCBhdGgxMmtfcGNpX3BtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgwMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MDQ6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgwNS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICpkcml2ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODMxOlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKHBjaV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgzMi19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODMzOkVYUE9SVF9TWU1CT0woYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6NDUuMTAyMTMxMDMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTM2NTA4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcmAgRnVuY3Rpb24qKlxuXG5SaWdodCwgYGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyYCBpcyBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiSW50ZXJlc3RpbmcuIExldCdzIHNlZSB3aG8ncyBhY3R1YWxseSBtYWtpbmcgdXNlIG9mIHRoaXMuXCIgVGhlIGZhY3QgdGhhdCBpdCdzIGV4cG9ydGVkIGltcGxpZXMgaXQncyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUgaXQncyBkZWZpbmVkIGluLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGNhbGwgc2l0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgbW9kdWxlJ3MgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0uIEknbSBhc3N1bWluZyBpdCdzIGhhbmRsaW5nIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIFBDSSBkcml2ZXIgaXRzZWxmLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGUgZHJpdmVyIHJlZ2lzdHJhdGlvbiwgYXJlIHdlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGRldmljZSBJRCwgYXJlIHRoZXJlIGFueSBxdWlya3MgaW4gcGxheT9cblxuXG4iLCJJbnB1dFRva2VucyI6ODA5MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjQ3Ljk5NTc4NDY1M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MjY0NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTc5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgX19tYXliZV91bnVzZWQgYXRoMTJrX3BjaV9wbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODA0OmludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MDUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMyLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MzM6RVhQT1JUX1NZTUJPTChhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODM0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzY9dm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oOjE3NzppbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTk3PWludCBhdGgxMmtfd2lmaTdfcGNpX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MjAxOlxcdHJldCA9IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKEFUSDEyS19ERVZJQ0VfRkFNSUxZX1dJRkk3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAyLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjo0OC4xNzEwNjA5NTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI4Njc4NzMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBgYXRoMTJrYCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgYXRoMTJrYCBpcyBhIFBDSSBkcml2ZXIsIGFuZCBhbHNvIGFuIEFIQiBkcml2ZXIsIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXM6IENhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCBQQ0kgZGV2aWNlcz8gSSBrbm93IGl0IGhhcyBzb21lIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcywgdGhpbmdzIGxpa2UgYHN5el9wY2lfLi4uYCBwc2V1ZG8tc3lzY2FsbHMgYW5kIHRoZSBgdmhjaWAgaW50ZXJmYWNlIGlmIGl0J3MgVVNCLCBidXQgZm9yIFBDSSBzcGVjaWZpY2FsbHksIHRoZXJlJ3MgYHN5el9wY2lfZGV2aWNlX2FkZGAgYW5kIHN1Y2guIEhvd2V2ZXIsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHNlZW1zIFFNSSBtZXNzYWdlcyBhcmUgZ29pbmcgYmFjayBhbmQgZm9ydGggd2l0aCBmaXJtd2FyZS5cblxuVGhlIGJpZyBxdWVzdGlvbiBub3cgaXM6IERvZXMgc3l6a2FsbGVyIGRvIGFueXRoaW5nIHdpdGggUU1JIG1lc3NhZ2VzPyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBRTUkgZnV6emluZyBjYXBhYmlsaXRpZXMuXG5cbkFoLCB3YWl0LiBUaGUgcHJvbXB0IHNwZWNpZmllcyB0aGlzOiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlwiIE9rYXksIEknbSB0aGlua2luZywgaWYgdGhpcyAqZG9lcyogbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgbXkgdGFzayBpcyB0byB2ZXJpZnkgY29kZSBleGVjdXRpb24gdXNpbmcgbXkgcHJlZmVycmVkIGNvZGUgc2VhcmNoIHRvb2xzLCBhbmQgdGhlbiBkZWNpZGUgb24gV29ydGhGdXp6aW5nPXRydWUuXG5cbkhvbGQgb24sIGBhdGgxMmtgIGlzIGEgKmRyaXZlciogZm9yICpzcGVjaWZpYyogaGFyZHdhcmUuIERvZXMgc3l6a2FsbGVyIGFjdHVhbGx5IGZ1enogdGhlIGBhdGgxMmtgIGRyaXZlciBpdHNlbGY/IEkga25vdyBzeXprYWxsZXIgY2FuIGZ1enogUENJIGRldmljZXMsIGJhc2ljYWxseSBieSBlbXVsYXRpbmcgdGhlbSwgd2l0aCB0aGluZ3MgbGlrZSBgc3l6X3BjaV8uLi5gLCBidXQgdGhlIHRyaWNreSBwYXJ0IGlzIHRoYXQgYGF0aDEya2AgcmVxdWlyZXMgZmlybXdhcmUgdG8gYmUgbG9hZGVkIGFuZCwgdGhlbiBpdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgZmlybXdhcmUgdXNpbmcgUU1JLCB3aGljaCBpcyBub3QgYXMgc2ltcGxlIGFzIGZ1enppbmcgYSByZWd1bGFyIFBDSSBkZXZpY2UuXG5cbklmIHRoZSBmaXJtd2FyZSBpc24ndCB0aGVyZSwgdGhlIGRyaXZlciB3b24ndCBldmVuICpwcm9iZSogc3VjY2Vzc2Z1bGx5LiBTbywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgcHJvYmUgd29ya3MsIHdoZXJlIGlzIHRoZSBpbml0aWFsIHBvaW50PyBPa2F5LCBsZXQncyBsb29rIGF0IGBhdGgxMmtfcGNpX3Byb2JlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkxNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjo1NS40NTc4NTA2NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NTI2NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19wY2lfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTAzPWF0aDEya19nZXRfZGV2aWNlX2ZhbWlseShjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1MjQ6c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUyNS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE4MDQ9aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODI1LVxcdHBjaV9kcml2ZXItXFx1MDAzZWlkX3RhYmxlID0gZHJpdmVyLVxcdTAwM2VpZF90YWJsZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MjY6XFx0cGNpX2RyaXZlci1cXHUwMDNlcHJvYmUgPSBhdGgxMmtfcGNpX3Byb2JlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgyNy1cXHRwY2lfZHJpdmVyLVxcdTAwM2VyZW1vdmUgPSBhdGgxMmtfcGNpX3JlbW92ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6NTUuNjY1MzgyNzk1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODY1ODg3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgYXRoMTJrX3BjaV9wcm9iZWA6XG5cbioqQW5hbHl6aW5nIGBhdGgxMmtfcGNpX3Byb2JlYCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGF0aDEya19wY2lfcHJvYmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIHdoYXQgdGhlIGJyb2FkZXIgY29udGV4dCBpcy4gUmlnaHQsIHRoaXMgaXMgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGF0aDEyayBkcml2ZXIuIFRoYXQgbWVhbnMgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIHRyaWVzIHRvIGRldGVjdCBhbmQgaW5pdGlhbGl6ZSBhbiBhdGgxMmstYmFzZWQgV2ktRmkgZGV2aWNlIGNvbm5lY3RlZCB2aWEgUENJLiBUaGF0IGltbWVkaWF0ZWx5IGhpZ2hsaWdodHMgYSBmZXcga2V5IGFyZWFzIEkgbmVlZCB0byBmb2N1cyBvbjogZGV2aWNlIGRldGVjdGlvbiBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gV2UncmUgdGFsa2luZyBhYm91dCBhIGRyaXZlcidzIGluaXRpYWwgY29udGFjdCB3aXRoIHRoZSBoYXJkd2FyZS5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cy4gSSdtIGFzc3VtaW5nIGl0IHJlY2VpdmVzIGEgYHBjaV9kZXZgIHBvaW50ZXIuIE9rYXksIHNvIHRoYXQgc2hvdWxkIGNvbnRhaW4gdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlIGFuZCBhbGwgdGhlIGFzc29jaWF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmljIFBDSSBkZXZpY2UgYmVpbmcgcHJvYmVkLiBUaGVuIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmVnaW4gYnkgY2hlY2tpbmcgdGhlIGRldmljZSBJRCBhZ2FpbnN0IGEgbGlzdCBvZiBzdXBwb3J0ZWQgZGV2aWNlcywgcHJvYmFibHkgaW4gYSBgcGNpX2RldmljZV9pZGAgdGFibGUuIEkgd2FudCB0byBjaGVjayBob3cgcm9idXN0IHRoYXQgSUQgY2hlY2sgaXMuIERvZXMgaXQgaGF2ZSBtdWx0aXBsZSBpZGVudGlmaWVycywgb3IganVzdCBvbmU/IFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIG1hdGNoaW5nIHByb2Nlc3MgaXMgY3JpdGljYWwgdG8gYXZvaWRpbmcgY29sbGlzaW9ucyB3aXRoIG90aGVyIGRyaXZlcnMuXG5cblRoZW4sIHRoZXJlIG11c3QgYmUgYSBzZXJpZXMgb2YgaW5pdGlhbGl6YXRpb24gc3RlcHMuIEknbSBsb29raW5nIGZvciBob3cgdGhlIGZ1bmN0aW9uOlxuXG4qICAgKipNYXBzIHRoZSBQQ0kgQkFScyAoQmFzZSBBZGRyZXNzIFJlZ2lzdGVycykuKiogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlJ3MgcmVnaXN0ZXJzIGluIG1lbW9yeSBzcGFjZS4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZSBtYXBwaW5nIHByb2Nlc3MuIERvZXMgaXQgdW5tYXAgdGhlbSBvbiBlcnJvcj8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBzcGVjaWFsIGhhbmRsaW5nIG9mIGRpZmZlcmVudCBCQVIgdHlwZXMgKGUuZy4sIG1lbW9yeSB2cy4gSU8pLiBBcmUgdGhlcmUgYW55IHF1aXJrcyBuZWVkZWQgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmU/XG4qICAgKipSZXF1ZXN0cyBETUEgcmVzb3VyY2VzLioqIEFueSBtb2Rlcm4gd2lyZWxlc3MgZHJpdmVyIG5lZWRzIERNQS4gSSdkIG5lZWQgdG8gZXhhbWluZSBob3cgdGhlIG1lbW9yeSByZWdpb25zIGFyZSBzZXQgdXAgYW5kIGhvdyB0aGUgRE1BIGNvbmZpZ3VyYXRpb24gaXMgbWFuYWdlZC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBhbGlnbm1lbnQgY29uc3RyYWludHMgb3IgYnVmZmVyIHNpemUgbGltaXRhdGlvbnM/IEFueSBwb3RlbnRpYWwgZm9yIERNQSBidWZmZXIgb3ZlcmZsb3dzP1xuKiAgICoqR2V0cyB0aGUgcGxhdGZvcm0gZGF0YS4qKiBXaGF0IHN0cnVjdHVyZXMgYXJlIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZSBpbiBzb2Z0d2FyZSwgYW5kIGhvdyBpcyBpdCBwb3B1bGF0ZWQgKGxpa2UgdGhlIGFzc29jaWF0ZWQgZmlybXdhcmUgZmlsZSwgZm9yIGV4YW1wbGUpP1xuKiAgICoqUmVnaXN0ZXJzIHRoZSBkZXZpY2UuKiogRmluYWxseSwgaXQgbGlrZWx5IHJlZ2lzdGVycyB0aGUgbmV3bHkgZGlzY292ZXJlZCBXaS1GaSBkZXZpY2Ugd2l0aCB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjay4gSSB3YW50IHRvIHNlZSB3aGVyZSBpdCBob29rcyBpbnRvIHRoZSBjb3JlIG5ldHdvcmsgaW50ZXJmYWNlcy5cblxuQmV5b25kIHRoZSBiYXNpYyBwcm9iZSBzZXF1ZW5jZSwgSSdtIGV4cGVjdGluZyB0byBzZWUgZXJyb3IgaGFuZGxpbmcsIG9mIGNvdXJzZS4gSSdkIGxvb2sgZm9yIGhvdyB0aGUgZHJpdmVyIGdyYWNlZnVsbHkgaGFuZGxlcyBmYWlsdXJlcyBhdCB2YXJpb3VzIHN0YWdlcyDigJMgaW52YWxpZCBQQ0kgY29uZmlndXJhdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiBlcnJvcnMsIGZpcm13YXJlIGxvYWRpbmcgZmFpbHVyZXMsIGV0Yy4gSXQncyBhbHNvIHdvcnRoIGNoZWNraW5nIGhvdyBpdCBjbGVhbnMgdXAgcmVzb3VyY2VzIGlmIGFueSBzdGVwIGZhaWxzOyBlc3BlY2lhbGx5IGluIGEgcHJvYmUgZnVuY3Rpb24sIHlvdSB3YW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBvciBsZWF2aW5nIHRoZSBzeXN0ZW0gaW4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RhdGUuXG5cbkkgYWxzbyB3YW50IHRvIGxvb2sgZm9yIHdoYXQgdGhpcyBmdW5jdGlvbiBsZWF2ZXMgdG8gb3RoZXIgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUuIEl0IHdpbGwgcHJvYmFibHkgaGF2ZSB0byBsYXVuY2ggYSBmaXJtd2FyZSBkb3dubG9hZCBhbmQgaGFuZGxlIHRoZSBwb3dlciBvbiBzZXF1ZW5jZSBmb3IgdGhlIFdpLUZpIGNhcmQuIEkgaGF2ZSB0byBsb29rIGZvciBhbnkgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDc1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6MDEuMTUxOTc0NDMyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MjQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTI0OlxcdHN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4xNTI1OlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcXG4xNTI2OlxcdHtcXG4xNTI3OlxcdFxcdGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkO1xcbjE1Mjg6XFx0XFx0c3RydWN0IGF0aDEya19wY2kgKmFiX3BjaTtcXG4xNTI5OlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XFxuMTUzMDpcXHRcXHRpbnQgcmV0O1xcbjE1MzE6XFx0XFxuMTUzMjpcXHRcXHRhYiA9IGF0aDEya19jb3JlX2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqYWJfcGNpKSwgQVRIMTJLX0JVU19QQ0kpO1xcbjE1MzM6XFx0XFx0aWYgKCFhYikge1xcbjE1MzQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDEyayBiYXNlXFxcXG5cXFwiKTtcXG4xNTM1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE1MzY6XFx0XFx0fVxcbjE1Mzc6XFx0XFxuMTUzODpcXHRcXHRhYi1cXHUwMDNlZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4xNTM5OlxcdFxcdGFiX3BjaSA9IGF0aDEya19wY2lfcHJpdihhYik7XFxuMTU0MDpcXHRcXHRhYl9wY2ktXFx1MDAzZWRldl9pZCA9IHBjaV9kZXYtXFx1MDAzZWRldmljZTtcXG4xNTQxOlxcdFxcdGFiX3BjaS1cXHUwMDNlYWIgPSBhYjtcXG4xNTQyOlxcdFxcdGFiX3BjaS1cXHUwMDNlcGRldiA9IHBkZXY7XFxuMTU0MzpcXHRcXHRhYi1cXHUwMDNlaGlmLm9wcyA9IFxcdTAwMjZhdGgxMmtfcGNpX2hpZl9vcHM7XFxuMTU0NDpcXHRcXHRhYi1cXHUwMDNlZndfbW9kZSA9IEFUSDEyS19GSVJNV0FSRV9NT0RFX05PUk1BTDtcXG4xNTQ1OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XFxuMTU0NjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YWJfcGNpLVxcdTAwM2V3aW5kb3dfbG9jayk7XFxuMTU0NzpcXHRcXG4xNTQ4OlxcdFxcdHJldCA9IGF0aDEya19wY2lfY2xhaW0oYWJfcGNpLCBwZGV2KTtcXG4xNTQ5OlxcdFxcdGlmIChyZXQpIHtcXG4xNTUwOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gY2xhaW0gZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNTUxOlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfY29yZTtcXG4xNTUyOlxcdFxcdH1cXG4xNTUzOlxcdFxcbjE1NTQ6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcXFwicGNpIHByb2JlICUwNHg6JTA0eCAlMDR4OiUwNHhcXFxcblxcXCIsXFxuMTU1NTpcXHRcXHRcXHQgICBwZGV2LVxcdTAwM2V2ZW5kb3IsIHBkZXYtXFx1MDAzZWRldmljZSxcXG4xNTU2OlxcdFxcdFxcdCAgIHBkZXYtXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3IsIHBkZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2UpO1xcbjE1NTc6XFx0XFxuMTU1ODpcXHRcXHRhYi1cXHUwMDNlaWQudmVuZG9yID0gcGRldi1cXHUwMDNldmVuZG9yO1xcbjE1NTk6XFx0XFx0YWItXFx1MDAzZWlkLmRldmljZSA9IHBkZXYtXFx1MDAzZWRldmljZTtcXG4xNTYwOlxcdFxcdGFiLVxcdTAwM2VpZC5zdWJzeXN0ZW1fdmVuZG9yID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX3ZlbmRvcjtcXG4xNTYxOlxcdFxcdGFiLVxcdTAwM2VpZC5zdWJzeXN0ZW1fZGV2aWNlID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcXG4xNTYyOlxcdFxcbjE1NjM6XFx0XFx0ZGV2aWNlX2lkID0gYXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KHBjaV9kZXYpO1xcbjE1NjQ6XFx0XFx0aWYgKGRldmljZV9pZCBcXHUwMDNlPSBBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVgpIHtcXG4xNTY1OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gZ2V0IGRldmljZSBmYW1pbHkgaWRcXFxcblxcXCIpO1xcbjE1NjY6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xNTY3OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xNTY4OlxcdFxcdH1cXG4xNTY5OlxcdFxcbjE1NzA6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19QQ0ksIFxcXCJQQ0kgZGV2aWNlIGZhbWlseSBpZDogJWRcXFxcblxcXCIsIGRldmljZV9pZCk7XFxuMTU3MTpcXHRcXG4xNTcyOlxcdFxcdGFiX3BjaS1cXHUwMDNlZGV2aWNlX2ZhbWlseV9vcHMgPSBcXHUwMDI2YXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVxcdTAwM2VvcHM7XFxuMTU3MzpcXHRcXHRhYl9wY2ktXFx1MDAzZXJlZ19iYXNlID0gYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVxcdTAwM2VyZWdfYmFzZTtcXG4xNTc0OlxcdFxcbjE1NzU6XFx0XFx0LyogQ2FsbCBkZXZpY2Ugc3BlY2lmaWMgcHJvYmUuIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHRoYXQgY2FuXFxuMTU3NjpcXHRcXHQgKiBiZSB1c2VkIHRvIG92ZXJyaWRlIGFueSBvcHMgaW4gZnV0dXJlXFxuMTU3NzpcXHRcXHQgKiBwcm9iZSBpcyB2YWxpZGF0ZWQgZm9yIE5VTEwgZHVyaW5nIHJlZ2lzdHJhdGlvbi5cXG4xNTc4OlxcdFxcdCAqL1xcbjE1Nzk6XFx0XFx0cmV0ID0gYWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cXHUwMDNlcHJvYmUocGRldiwgcGNpX2Rldik7XFxuMTU4MDpcXHRcXHRpZiAocmV0KSB7XFxuMTU4MTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHByb2JlIGRldmljZTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTU4MjpcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTU4MzpcXHRcXHR9XFxuMTU4NDpcXHRcXG4xNTg1OlxcdFxcdHJldCA9IGF0aDEya19wY2lfbXNpX2FsbG9jKGFiX3BjaSk7XFxuMTU4NjpcXHRcXHRpZiAocmV0KSB7XFxuMTU4NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jIG1zaTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTU4ODpcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTU4OTpcXHRcXHR9XFxuMTU5MDpcXHRcXG4xNTkxOlxcdFxcdHJldCA9IGF0aDEya19jb3JlX3ByZV9pbml0KGFiKTtcXG4xNTkyOlxcdFxcdGlmIChyZXQpXFxuMTU5MzpcXHRcXHRcXHRnb3RvIGVycl9wY2lfbXNpX2ZyZWU7XFxuMTU5NDpcXHRcXG4xNTk1OlxcdFxcdHJldCA9IGF0aDEya19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KGFiX3BjaSwgY3B1bWFza19vZigwKSk7XFxuMTU5NjpcXHRcXHRpZiAocmV0KSB7XFxuMTU5NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHNldCBpcnEgYWZmaW5pdHkgJWRcXFxcblxcXCIsIHJldCk7XFxuMTU5ODpcXHRcXHRcXHRnb3RvIGVycl9wY2lfbXNpX2ZyZWU7XFxuMTU5OTpcXHRcXHR9XFxuMTYwMDpcXHRcXG4xNjAxOlxcdFxcdHJldCA9IGF0aDEya19taGlfcmVnaXN0ZXIoYWJfcGNpKTtcXG4xNjAyOlxcdFxcdGlmIChyZXQpIHtcXG4xNjAzOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgbWhpOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjA0OlxcdFxcdFxcdGdvdG8gZXJyX2lycV9hZmZpbml0eV9jbGVhbnVwO1xcbjE2MDU6XFx0XFx0fVxcbjE2MDY6XFx0XFxuMTYwNzpcXHRcXHRyZXQgPSBhdGgxMmtfaGFsX3NybmdfaW5pdChhYik7XFxuMTYwODpcXHRcXHRpZiAocmV0KVxcbjE2MDk6XFx0XFx0XFx0Z290byBlcnJfbWhpX3VucmVnaXN0ZXI7XFxuMTYxMDpcXHRcXG4xNjExOlxcdFxcdHJldCA9IGF0aDEya19jZV9hbGxvY19waXBlcyhhYik7XFxuMTYxMjpcXHRcXHRpZiAocmV0KSB7XFxuMTYxMzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGNlIHBpcGVzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjE0OlxcdFxcdFxcdGdvdG8gZXJyX2hhbF9zcm5nX2RlaW5pdDtcXG4xNjE1OlxcdFxcdH1cXG4xNjE2OlxcdFxcbjE2MTc6XFx0XFx0YXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWcoYWIpO1xcbjE2MTg6XFx0XFxuMTYxOTpcXHRcXHRyZXQgPSBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoYWIpO1xcbjE2MjA6XFx0XFx0aWYgKHJldCkge1xcbjE2MjE6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBjb25maWcgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjIyOlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTYyMzpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjAxLjE1MjE1Mzc5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQyMTY3Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBhdGgxMmtfcGNpX3Byb2JlYCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHNldHVwIGlzIHByZXR0eSBzdGFuZGFyZC4gV2UndmUgZ290IGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBoYXBwZW5pbmcgZmlyc3QsIHdoaWNoIEknbSBhc3N1bWluZyBoYW5kbGVzIHRoZSBNb2JpbGUgSG9zdCBJbnRlcmZhY2UgcmVnaXN0cmF0aW9uLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHVzdWFsbHkgdGhlIGdyb3VuZHdvcmsgZm9yIHRoaXMga2luZCBvZiBQQ0kgZGV2aWNlLiBUaGVuIGl0IGFsbG9jYXRlcyBDRSAoQ29tcGxldGlvbiBFbmdpbmUpIHBpcGVzLiBHb29kLCB3ZSBuZWVkIHRob3NlIGZvciBkYXRhIHRyYW5zZmVyLiBBZnRlciB0aGF0LCBjb25maWd1cmluZyB0aGUgaW50ZXJydXB0cy4gQ2FuJ3QgZm9yZ2V0IHRob3NlISBUaGUgcmVhbCBtZWF0IG9mIHRoZSBpbml0aWFsaXphdGlvbiB3aWxsIGxpa2VseSBiZSB0aGUgY2FsbCB0byBgYXRoMTJrX2NvcmVfaW5pdGAgbGF0ZXIgb24g4oCTIEknbSBiZXR0aW5nIHRoYXQncyB3aGVyZSB0aGUgZGVlcGVyIGNvbmZpZ3VyYXRpb24gYW5kIGJyaW5ndXAgb2NjdXIuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY2hpcCBub3chIExldCdzIGdldCB0aHJvdWdoIHRoZSByZXN0IG9mIHRoaXMgYGF0aDEya19wY2lfcHJvYmVgIGNvZGUuIEknbSBrZWVuIHRvIHNlZSB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzYsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjA3LjU5NDMyMzY5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MjQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjI0OlxcdFxcbjE2MjU6XFx0XFx0Lyoga2VybmVsIG1heSBhbGxvY2F0ZSBhIGR1bW15IHZlY3RvciBiZWZvcmUgcmVxdWVzdF9pcnEgYW5kXFxuMTYyNjpcXHRcXHQgKiB0aGVuIGFsbG9jYXRlIGEgcmVhbCB2ZWN0b3Igd2hlbiByZXF1ZXN0X2lycSBpcyBjYWxsZWQuXFxuMTYyNzpcXHRcXHQgKiBTbyBnZXQgbXNpX2RhdGEgaGVyZSBhZ2FpbiB0byBhdm9pZCBzcHVyaW91cyBpbnRlcnJ1cHRcXG4xNjI4OlxcdFxcdCAqIGFzIG1zaV9kYXRhIHdpbGwgY29uZmlndXJlZCB0byBzcm5ncy5cXG4xNjI5OlxcdFxcdCAqL1xcbjE2MzA6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9jb25maWdfbXNpX2RhdGEoYWJfcGNpKTtcXG4xNjMxOlxcdFxcdGlmIChyZXQpIHtcXG4xNjMyOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gY29uZmlnIG1zaV9kYXRhOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjMzOlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfaXJxO1xcbjE2MzQ6XFx0XFx0fVxcbjE2MzU6XFx0XFxuMTYzNjpcXHRcXHQvKiBJbnZva2UgYXJjaF9pbml0IGhlcmUgc28gdGhhdCBhcmNoLXNwZWNpZmljIGluaXQgb3BlcmF0aW9uc1xcbjE2Mzc6XFx0XFx0ICogY2FuIHV0aWxpemUgYWxyZWFkeSBpbml0aWFsaXplZCBhYiBmaWVsZHMsIHN1Y2ggYXMgSEFMIFNSTkdzLlxcbjE2Mzg6XFx0XFx0ICovXFxuMTYzOTpcXHRcXHRyZXQgPSBhYl9wY2ktXFx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVxcdTAwM2VhcmNoX2luaXQoYWIpO1xcbjE2NDA6XFx0XFx0aWYgKHJldCkge1xcbjE2NDE6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcIlBDSSBhcmNoX2luaXQgZmFpbGVkICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2NDI6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9pcnE7XFxuMTY0MzpcXHRcXHR9XFxuMTY0NDpcXHRcXG4xNjQ1OlxcdFxcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xcbjE2NDY6XFx0XFx0aWYgKHJldCkge1xcbjE2NDc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2NDg6XFx0XFx0XFx0Z290byBlcnJfZGVpbml0X2FyY2g7XFxuMTY0OTpcXHRcXHR9XFxuMTY1MDpcXHRcXHRyZXR1cm4gMDtcXG4xNjUxOlxcdFxcbjE2NTI6XFx0ZXJyX2RlaW5pdF9hcmNoOlxcbjE2NTM6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cXHUwMDNlYXJjaF9kZWluaXQoYWIpO1xcbjE2NTQ6XFx0XFxuMTY1NTpcXHRlcnJfZnJlZV9pcnE6XFxuMTY1NjpcXHRcXHQvKiBfX2ZyZWVfaXJxKCkgZXhwZWN0cyB0aGUgY2FsbGVyIHRvIGhhdmUgY2xlYXJlZCB0aGUgYWZmaW5pdHkgaGludCAqL1xcbjE2NTc6XFx0XFx0YXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBOVUxMKTtcXG4xNjU4OlxcdFxcdGF0aDEya19wY2lfZnJlZV9pcnEoYWIpO1xcbjE2NTk6XFx0XFxuMTY2MDpcXHRlcnJfY2VfZnJlZTpcXG4xNjYxOlxcdFxcdGF0aDEya19jZV9mcmVlX3BpcGVzKGFiKTtcXG4xNjYyOlxcdFxcbjE2NjM6XFx0ZXJyX2hhbF9zcm5nX2RlaW5pdDpcXG4xNjY0OlxcdFxcdGF0aDEya19oYWxfc3JuZ19kZWluaXQoYWIpO1xcbjE2NjU6XFx0XFxuMTY2NjpcXHRlcnJfbWhpX3VucmVnaXN0ZXI6XFxuMTY2NzpcXHRcXHRhdGgxMmtfbWhpX3VucmVnaXN0ZXIoYWJfcGNpKTtcXG4xNjY4OlxcdFxcbjE2Njk6XFx0ZXJyX2lycV9hZmZpbml0eV9jbGVhbnVwOlxcbjE2NzA6XFx0XFx0YXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBOVUxMKTtcXG4xNjcxOlxcdFxcbjE2NzI6XFx0ZXJyX3BjaV9tc2lfZnJlZTpcXG4xNjczOlxcdFxcdGF0aDEya19wY2lfbXNpX2ZyZWUoYWJfcGNpKTtcXG4xNjc0OlxcdFxcbjE2NzU6XFx0ZXJyX3BjaV9mcmVlX3JlZ2lvbjpcXG4xNjc2OlxcdFxcdGF0aDEya19wY2lfZnJlZV9yZWdpb24oYWJfcGNpKTtcXG4xNjc3OlxcdFxcbjE2Nzg6XFx0ZXJyX2ZyZWVfY29yZTpcXG4xNjc5OlxcdFxcdGF0aDEya19jb3JlX2ZyZWUoYWIpO1xcbjE2ODA6XFx0XFxuMTY4MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2ODI6XFx0fVxcbjE2ODM6XFx0XFxuMTY4NDpcXHRzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4xNjg1OlxcdHtcXG4xNjg2OlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuMTY4NzpcXHRcXHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcXG4xNjg4OlxcdFxcbjE2ODk6XFx0XFx0YXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBOVUxMKTtcXG4xNjkwOlxcdFxcbjE2OTE6XFx0XFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncykpIHtcXG4xNjkyOlxcdFxcdFxcdGF0aDEya19wY2lfcG93ZXJfZG93bihhYiwgZmFsc2UpO1xcbjE2OTM6XFx0XFx0XFx0Z290byBxbWlfZmFpbDtcXG4xNjk0OlxcdFxcdH1cXG4xNjk1OlxcdFxcbjE2OTY6XFx0XFx0c2V0X2JpdChBVEgxMktfRkxBR19VTlJFR0lTVEVSSU5HLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuMTY5NzpcXHRcXG4xNjk4OlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmFiLVxcdTAwM2VyZXNldF93b3JrKTtcXG4xNjk5OlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmFiLVxcdTAwM2VkdW1wX3dvcmspO1xcbjE3MDA6XFx0XFx0YXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChhYi1cXHUwMDNlYWcpO1xcbjE3MDE6XFx0XFxuMTcwMjpcXHRxbWlfZmFpbDpcXG4xNzAzOlxcdFxcdGF0aDEya19jb3JlX2RlaW5pdChhYik7XFxuMTcwNDpcXHRcXHRhdGgxMmtfZndfdW5tYXAoYWIpO1xcbjE3MDU6XFx0XFx0YXRoMTJrX21oaV91bnJlZ2lzdGVyKGFiX3BjaSk7XFxuMTcwNjpcXHRcXG4xNzA3OlxcdFxcdGF0aDEya19wY2lfZnJlZV9pcnEoYWIpO1xcbjE3MDg6XFx0XFx0YXRoMTJrX3BjaV9tc2lfZnJlZShhYl9wY2kpO1xcbjE3MDk6XFx0XFx0YXRoMTJrX3BjaV9mcmVlX3JlZ2lvbihhYl9wY2kpO1xcbjE3MTA6XFx0XFxuMTcxMTpcXHRcXHRhdGgxMmtfaGFsX3NybmdfZGVpbml0KGFiKTtcXG4xNzEyOlxcdFxcdGF0aDEya19jZV9mcmVlX3BpcGVzKGFiKTtcXG4xNzEzOlxcdFxcbjE3MTQ6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cXHUwMDNlYXJjaF9kZWluaXQoYWIpO1xcbjE3MTU6XFx0XFxuMTcxNjpcXHRcXHRhdGgxMmtfY29yZV9mcmVlKGFiKTtcXG4xNzE3OlxcdH1cXG4xNzE4OlxcdFxcbjE3MTk6XFx0c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9od19ncm91cF9wb3dlcl9kb3duKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxcbjE3MjA6XFx0e1xcbjE3MjE6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcXG4xNzIyOlxcdFxcdGludCBpO1xcbjE3MjM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjA3LjU5NDQ5NjA2OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAwOTIyMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGluaXRpYWwgdGhvdWdodHMsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBmdW5jdGlvbiBjYWxsOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhdGgxMmtfY29yZV9pbml0KipcblxuT2theSwgYGF0aDEya19jb3JlX2luaXRgLiBMZXQncyBkaXZlIGluLiBJIHNlZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgc28gaXQncyBjbGVhcmx5IGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHRoaXMgYXRoMTJrIGRyaXZlci4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgb3ZlcmFsbCBnb2FsIG9mIHRoaXMgaW5pdGlhbGl6YXRpb24/IElzIGl0IHNldHRpbmcgdXAgaGFyZHdhcmUgcmVzb3VyY2VzLCByZWdpc3RlcmluZyB3aXRoIHRoZSBrZXJuZWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmUgZmlyc3QuIEknbSBnb2luZyB0byBxdWlja2x5IGxvb2sgZm9yIGFueSBoaWdoLWxldmVsIGNvbW1lbnRzIG9yIGZ1bmN0aW9uIGNhbGwgdHJhY2VzIHRvIGVzdGFibGlzaCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBJJ2xsIG1lbnRhbGx5IG5vdGUgYW55IGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIGluIG9yIGluaXRpYWxpemVkLCBhcyB0aG9zZSB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRyaXZlcidzIGludGVybmFsIHN0YXRlLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgb2Z0ZW4gaGFuZGxlIHJlc291cmNlIGFsbG9jYXRpb24sIHNvIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgdGhhdC4gSSB3aWxsIHRoZW4gZXhhbWluZSB0aGUgY29yZSB0YXNrcyB0aGlzIGZ1bmN0aW9uIGFjY29tcGxpc2hlcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjExLjY5NTQyMDc0NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODc0ODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYXRoMTJrX2NvcmVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0yMTg4PXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc2V0X21sb19jYXBhYmxlKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoyMjI5OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIzMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaD0xMjY0PWludCBhdGgxMmtfY29yZV9wcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaDoxMjY1OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY2LXZvaWQgYXRoMTJrX2NvcmVfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6MTMuMzg0MTc2NjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwNTQ1MzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDEya19jb3JlX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBzdGFuZGFyZCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc3RlcHMsIGJ1dCBJIHdhbnQgdG8gbG9vayBmb3IgYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlIGF0aDEyayBjaGlwIG9yIGFueSBub3ZlbCBhcHByb2FjaGVzIGl0IHRha2VzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcmVnaXN0ZXIgYWNjZXNzIHBhdHRlcm5zLCBtZW1vcnkgYWxsb2NhdGlvbiwgaGFyZHdhcmUgc2V0dXAgc2VxdWVuY2VzLCBhbmQgYW55IHBvdGVudGlhbCBwb3dlciBtYW5hZ2VtZW50IG9yIGludGVycnVwdCBjb25maWd1cmF0aW9uIHRoYXQncyBkb25lIGF0IHRoaXMgc3RhZ2UuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNldCB1cCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4gQXJlIHRoZXJlIGFueSBlYXJseSBlcnJvciBjaGVja3Mgb3IgZGVidWcgcHJpbnRzIHRoYXQgZ2l2ZSBjbHVlcyBhYm91dCBjb21tb24gc3RhcnR1cCBwcm9ibGVtcz8gQW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBhcmUga2V5IHRvIHVuZGVyc3RhbmQgYXQgdGhpcyBzdGFnZSBhcyB0aGV5IGNhbiBzaWduaWZpY2FudGx5IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGxhdGVyIG9uLiBJJ20gYWxzbyBob3BpbmcgdG8gc3BvdCBhbnkgcG90ZW50aWFsIHBvaW50cyBmb3IgY3VzdG9taXphdGlvbiBvciBjb25maWd1cmF0aW9uIGlmIGl0J3MgYXBwbGljYWJsZSB0byBteSBwcm9qZWN0LiBGaW5hbGx5LCBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggYW55IGZpcm13YXJlIGxvYWRpbmcgb3IgZGV2aWNlIHByb2JlIHJvdXRpbmVzLCBhcyB0aGF0J3Mgb2Z0ZW4gYSBjcml0aWNhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA4NywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjE4Ljc4OTYzMTkxOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIyOSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMjk6XFx0aW50IGF0aDEya19jb3JlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4yMjMwOlxcdHtcXG4yMjMxOlxcdFxcdHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnO1xcbjIyMzI6XFx0XFx0aW50IHJldDtcXG4yMjMzOlxcdFxcbjIyMzQ6XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfcGFuaWNfbm90aWZpZXJfcmVnaXN0ZXIoYWIpO1xcbjIyMzU6XFx0XFx0aWYgKHJldClcXG4yMjM2OlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHBhbmljIGhhbmRsZXI6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjIyMzc6XFx0XFxuMjIzODpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xcbjIyMzk6XFx0XFxuMjI0MDpcXHRcXHRhZyA9IGF0aDEya19jb3JlX2h3X2dyb3VwX2Fzc2lnbihhYik7XFxuMjI0MTpcXHRcXHRpZiAoIWFnKSB7XFxuMjI0MjpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmF0aDEya19od19ncm91cF9tdXRleCk7XFxuMjI0MzpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInVuYWJsZSB0byBnZXQgaHcgZ3JvdXBcXFxcblxcXCIpO1xcbjIyNDQ6XFx0XFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4yMjQ1OlxcdFxcdFxcdGdvdG8gZXJyX3VucmVnaXN0ZXJfbm90aWZpZXI7XFxuMjI0NjpcXHRcXHR9XFxuMjI0NzpcXHRcXG4yMjQ4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YXRoMTJrX2h3X2dyb3VwX211dGV4KTtcXG4yMjQ5OlxcdFxcbjIyNTA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YWctXFx1MDAzZW11dGV4KTtcXG4yMjUxOlxcdFxcbjIyNTI6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcXFwibnVtIGRldmljZXMgJWQgbnVtIHByb2JlZCAlZFxcXFxuXFxcIixcXG4yMjUzOlxcdFxcdFxcdCAgIGFnLVxcdTAwM2VudW1fZGV2aWNlcywgYWctXFx1MDAzZW51bV9wcm9iZWQpO1xcbjIyNTQ6XFx0XFxuMjI1NTpcXHRcXHRpZiAoYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlX3JlYWR5KGFnKSkge1xcbjIyNTY6XFx0XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlKGFnKTtcXG4yMjU3OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4yMjU4OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YWctXFx1MDAzZW11dGV4KTtcXG4yMjU5OlxcdFxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwidW5hYmxlIHRvIGNyZWF0ZSBodyBncm91cFxcXFxuXFxcIik7XFxuMjI2MDpcXHRcXHRcXHRcXHRnb3RvIGVycl91bmFzc2lnbl9od19ncm91cDtcXG4yMjYxOlxcdFxcdFxcdH1cXG4yMjYyOlxcdFxcdH1cXG4yMjYzOlxcdFxcbjIyNjQ6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhZy1cXHUwMDNlbXV0ZXgpO1xcbjIyNjU6XFx0XFxuMjI2NjpcXHRcXHRyZXR1cm4gMDtcXG4yMjY3OlxcdFxcbjIyNjg6XFx0ZXJyX3VuYXNzaWduX2h3X2dyb3VwOlxcbjIyNjk6XFx0XFx0YXRoMTJrX2NvcmVfaHdfZ3JvdXBfdW5hc3NpZ24oYWIpO1xcbjIyNzA6XFx0ZXJyX3VucmVnaXN0ZXJfbm90aWZpZXI6XFxuMjI3MTpcXHRcXHRhdGgxMmtfY29yZV9wYW5pY19ub3RpZmllcl91bnJlZ2lzdGVyKGFiKTtcXG4yMjcyOlxcdFxcbjIyNzM6XFx0XFx0cmV0dXJuIHJldDtcXG4yMjc0OlxcdH1cXG4yMjc1OlxcdFxcbjIyNzY6XFx0dm9pZCBhdGgxMmtfY29yZV9kZWluaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4yMjc3OlxcdHtcXG4yMjc4OlxcdFxcdGF0aDEya19jb3JlX2h3X2dyb3VwX2Rlc3Ryb3koYWItXFx1MDAzZWFnKTtcXG4yMjc5OlxcdFxcdGF0aDEya19jb3JlX2h3X2dyb3VwX3VuYXNzaWduKGFiKTtcXG4yMjgwOlxcdFxcdGF0aDEya19jb3JlX3BhbmljX25vdGlmaWVyX3VucmVnaXN0ZXIoYWIpO1xcbjIyODE6XFx0fVxcbjIyODI6XFx0XFxuMjI4MzpcXHR2b2lkIGF0aDEya19jb3JlX2ZyZWUoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4yMjg0OlxcdHtcXG4yMjg1OlxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZhYi1cXHUwMDNlcnhfcmVwbGVuaXNoX3JldHJ5KTtcXG4yMjg2OlxcdFxcdGF0aDEya193bWlfZnJlZSgpO1xcbjIyODc6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWItXFx1MDAzZXdvcmtxdWV1ZV9hdXgpO1xcbjIyODg6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWItXFx1MDAzZXdvcmtxdWV1ZSk7XFxuMjI4OTpcXHRcXHRrZnJlZShhYik7XFxuMjI5MDpcXHR9XFxuMjI5MTpcXHRcXG4yMjkyOlxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrX2NvcmVfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3QgcHJpdl9zaXplLFxcbjIyOTM6XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBhdGgxMmtfYnVzIGJ1cylcXG4yMjk0OlxcdHtcXG4yMjk1OlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XFxuMjI5NjpcXHRcXG4yMjk3OlxcdFxcdGFiID0ga3phbGxvYyhzaXplb2YoKmFiKSArIHByaXZfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuMjI5ODpcXHRcXHRpZiAoIWFiKVxcbjIyOTk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjMwMDpcXHRcXG4yMzAxOlxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2YWItXFx1MDAzZWRyaXZlcl9yZWNvdmVyeSk7XFxuMjMwMjpcXHRcXG4yMzAzOlxcdFxcdGFiLVxcdTAwM2V3b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcXFwiYXRoMTJrX3dxXFxcIik7XFxuMjMwNDpcXHRcXHRpZiAoIWFiLVxcdTAwM2V3b3JrcXVldWUpXFxuMjMwNTpcXHRcXHRcXHRnb3RvIGVycl9zY19mcmVlO1xcbjIzMDY6XFx0XFxuMjMwNzpcXHRcXHRhYi1cXHUwMDNld29ya3F1ZXVlX2F1eCA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFxcXCJhdGgxMmtfYXV4X3dxXFxcIik7XFxuMjMwODpcXHRcXHRpZiAoIWFiLVxcdTAwM2V3b3JrcXVldWVfYXV4KVxcbjIzMDk6XFx0XFx0XFx0Z290byBlcnJfZnJlZV93cTtcXG4yMzEwOlxcdFxcbjIzMTE6XFx0XFx0aWYgKGF0aDEya193bWlfYWxsb2MoKSBcXHUwMDNjIDApXFxuMjMxMjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3dxX2F1eDtcXG4yMzEzOlxcdFxcbjIzMTQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2YWItXFx1MDAzZWNvcmVfbG9jayk7XFxuMjMxNTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YWItXFx1MDAzZWJhc2VfbG9jayk7XFxuMjMxNjpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmFiLVxcdTAwM2VyZXNldF9jb21wbGV0ZSk7XFxuMjMxNzpcXHRcXG4yMzE4OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmFiLVxcdTAwM2VwZWVyX21hcHBpbmdfd3EpO1xcbjIzMTk6XFx0XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2YWItXFx1MDAzZXdtaV9hYi50eF9jcmVkaXRzX3dxKTtcXG4yMzIwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2YWItXFx1MDAzZXJlc3RhcnRfd29yaywgYXRoMTJrX2NvcmVfcmVzdGFydCk7XFxuMjMyMTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmFiLVxcdTAwM2VyZXNldF93b3JrLCBhdGgxMmtfY29yZV9yZXNldCk7XFxuMjMyMjpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmFiLVxcdTAwM2VyZmtpbGxfd29yaywgYXRoMTJrX3Jma2lsbF93b3JrKTtcXG4yMzIzOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2YWItXFx1MDAzZWR1bXBfd29yaywgYXRoMTJrX2NvcmVkdW1wX3VwbG9hZCk7XFxuMjMyNDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmFiLVxcdTAwM2V1cGRhdGVfMTFkX3dvcmssIGF0aDEya191cGRhdGVfMTFkKTtcXG4yMzI1OlxcdFxcbjIzMjY6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNmFiLVxcdTAwM2VyeF9yZXBsZW5pc2hfcmV0cnksIGF0aDEya19jZV9yeF9yZXBsZW5pc2hfcmV0cnksIDApO1xcbjIzMjc6XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZhYi1cXHUwMDNlaHRjX3N1c3BlbmQpO1xcbjIzMjg6XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZhYi1cXHUwMDNlcmVzdGFydF9jb21wbGV0ZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNzoxOC43ODk4MzM1NzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2MjI5NDE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGF0aDEyayBIYXJkd2FyZSBHcm91cCBDcmVhdGlvbioqXG5cbk9rYXksIHNvIGBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGVgIGp1c3QgZ290IGNhbGxlZC4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyBoZXJlLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIGluaXRpYWxpemluZyBvciBjb25maWd1cmluZyBzb21lIGhhcmR3YXJlIHJlc291cmNlIGdyb3VwaW5nIHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlciwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG11bHRpLWNvcmUgYXJjaGl0ZWN0dXJlIG9mIHRoZXNlIG5ld2VyIFF1YWxjb21tIGNoaXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUgLSBkb2VzIHRoaXMgaW52b2x2ZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBjbG9jayBnYXRpbmcsIGludGVycnVwdCBiaW5kaW5nLCBvciBwZXJoYXBzIHNvbWV0aGluZyBtb3JlIGFic3RyYWN0IGxpa2UgZGVmaW5pbmcgZnVuY3Rpb25hbCBkb21haW5zIHdpdGhpbiB0aGUgaGFyZHdhcmU/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaGFyZHdhcmUgcmVnaXN0ZXJzIGl0J3MgbWFuaXB1bGF0aW5nLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhbGxvY2F0aW5nIG1lbW9yeSByZWdpb25zIGZvciBETUEsIHJlZ2lzdGVyaW5nIGludGVycnVwdCBoYW5kbGVycywgb3IgcGVyaGFwcyBjb25maWd1cmluZyBzb21lIGtpbmQgb2YgYXJiaXRyYXRpb24gbG9naWMgYmV0d2VlbiBjb3Jlcz8gV2hhdCBJIHJlYWxseSB3YW50IHRvIGRldGVybWluZSBpcyBob3cgdGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBiYXNpYyBidWlsZGluZyBibG9ja3MgZm9yIHRoZSBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgYW5kIGhvdyBpdCBlbnN1cmVzIGVmZmljaWVudCBhbmQgaXNvbGF0ZWQgYWNjZXNzLiBIb3BlZnVsbHksIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBnb29kLCBidXQgSSdsbCBiZSBwcmVwYXJlZCB0byBmb2xsb3cgdGhlIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGFzIHdlbGw7IGFueSBmYWlsdXJlcyBoZXJlIGNvdWxkIGJlIGEgc2hvdy1zdG9wcGVyIGZvciB0aGUgd2hvbGUgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAwNywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6MjQuNzUyMTMwNDg2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzMwOTQ4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGF0aDEya19jb3JlX2h3X2dyb3VwX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0yMTE2PXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTIxNDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MjE0ODpzdGF0aWMgaW50IGF0aDEya19jb3JlX2h3X2dyb3VwX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0yMTQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6MjUuMzg1MjMyMzgzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTYxMDA5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBjcmVhdGlvbiBvZiBoYXJkd2FyZSByZXNvdXJjZSBncm91cHMsIHByb2JhYmx5IHNwZWNpZmljIHRvIHRoZSBhdGgxMmsncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbSBleHBlY3RpbmcgdG8gc2VlIGFsbG9jYXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzLCBwZXJoYXBzIGluaXRpYWxpemF0aW9uIG9mIHNvbWUgaGFyZHdhcmUgcmVnaXN0ZXJzLCBhbmQgbGlrZWx5IHNvbWUgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGdyb3VwcyBhcmUgdXNlZC4gV2hhdCBhcmUgdGhlIGtleSBjb21wb25lbnRzIHdpdGhpbiBpdD8gQXJlIHRoZXkgcmVsYXRlZCB0byBETUEsIGludGVycnVwdCBtYW5hZ2VtZW50LCBvciByYWRpbyByZXNvdXJjZXM/IEknbGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byByZWxhdGVkIHN0cnVjdHVyZXMgc3VjaCBhcyAqYXRoMTJrX2h3KiAoaWYgdGhpcyBpcyByZWxldmFudCBmb3IgaG93IHRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyZWQpLCAqYXRoMTJrX2dyb3VwKiwgb3IgYW55dGhpbmcgdGhhdCBtaWdodCByZXByZXNlbnQgYSBwaHlzaWNhbCBvciBsb2dpY2FsIGVudGl0eSB3aXRoaW4gdGhlIGhhcmR3YXJlLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIGZvciBsb2NraW5nIG1lY2hhbmlzbXMsIGlmIHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIGEgbXVsdGktdGhyZWFkZWQgY29udGV4dCwgYW5kIGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgd2hldGhlciBpdCBpcyBhbGxvY2F0aW5nIHNvbWUgbmV3IHJlc291cmNlcywgYW5kLyBvciwgaG93IHRoZXNlIGFyZSBmcmVlZCB3aGVuIG5lY2Vzc2FyeS4gRmluYWxseSwgSSB3aWxsIGJlIHNjYW5uaW5nIGZvciBpdHMgcGxhY2UgaW4gdGhlIG92ZXJhbGwgd29ya2Zsb3cgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUwMiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjMwLjQwMTMzNjI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTQ4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE0ODpcXHRzdGF0aWMgaW50IGF0aDEya19jb3JlX2h3X2dyb3VwX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4yMTQ5OlxcdHtcXG4yMTUwOlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XFxuMjE1MTpcXHRcXHRpbnQgaSwgcmV0O1xcbjIxNTI6XFx0XFxuMjE1MzpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZhZy1cXHUwMDNlbXV0ZXgpO1xcbjIxNTQ6XFx0XFxuMjE1NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWctXFx1MDAzZW51bV9kZXZpY2VzOyBpKyspIHtcXG4yMTU2OlxcdFxcdFxcdGFiID0gYWctXFx1MDAzZWFiW2ldO1xcbjIxNTc6XFx0XFx0XFx0aWYgKCFhYilcXG4yMTU4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIxNTk6XFx0XFxuMjE2MDpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZhYi1cXHUwMDNlY29yZV9sb2NrKTtcXG4yMTYxOlxcdFxcbjIxNjI6XFx0XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfc29jX2NyZWF0ZShhYik7XFxuMjE2MzpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMjE2NDpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmFiLVxcdTAwM2Vjb3JlX2xvY2spO1xcbjIxNjU6XFx0XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBjcmVhdGUgc29jICVkIGNvcmU6ICVkXFxcXG5cXFwiLCBpLCByZXQpO1xcbjIxNjY6XFx0XFx0XFx0XFx0Z290byBkZXN0cm95O1xcbjIxNjc6XFx0XFx0XFx0fVxcbjIxNjg6XFx0XFxuMjE2OTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmFiLVxcdTAwM2Vjb3JlX2xvY2spO1xcbjIxNzA6XFx0XFx0fVxcbjIxNzE6XFx0XFxuMjE3MjpcXHRcXHRyZXR1cm4gMDtcXG4yMTczOlxcdFxcbjIxNzQ6XFx0ZGVzdHJveTpcXG4yMTc1OlxcdFxcdGZvciAoaS0tOyBpIFxcdTAwM2U9IDA7IGktLSkge1xcbjIxNzY6XFx0XFx0XFx0YWIgPSBhZy1cXHUwMDNlYWJbaV07XFxuMjE3NzpcXHRcXHRcXHRpZiAoIWFiKVxcbjIxNzg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjE3OTpcXHRcXG4yMTgwOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmFiLVxcdTAwM2Vjb3JlX2xvY2spO1xcbjIxODE6XFx0XFx0XFx0YXRoMTJrX2NvcmVfc29jX2Rlc3Ryb3koYWIpO1xcbjIxODI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhYi1cXHUwMDNlY29yZV9sb2NrKTtcXG4yMTgzOlxcdFxcdH1cXG4yMTg0OlxcdFxcbjIxODU6XFx0XFx0cmV0dXJuIHJldDtcXG4yMTg2OlxcdH1cXG4yMTg3OlxcdFxcbjIxODg6XFx0dm9pZCBhdGgxMmtfY29yZV9od19ncm91cF9zZXRfbWxvX2NhcGFibGUoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXFxuMjE4OTpcXHR7XFxuMjE5MDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiO1xcbjIxOTE6XFx0XFx0aW50IGk7XFxuMjE5MjpcXHRcXG4yMTkzOlxcdFxcdGlmIChhdGgxMmtfZnRtX21vZGUpXFxuMjE5NDpcXHRcXHRcXHRyZXR1cm47XFxuMjE5NTpcXHRcXG4yMTk2OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmFnLVxcdTAwM2VtdXRleCk7XFxuMjE5NzpcXHRcXG4yMTk4OlxcdFxcdGlmIChhZy1cXHUwMDNlbnVtX2RldmljZXMgPT0gMSkge1xcbjIxOTk6XFx0XFx0XFx0YWIgPSBhZy1cXHUwMDNlYWJbMF07XFxuMjIwMDpcXHRcXHRcXHQvKiBRQ045Mjc0IGZpcm13YXJlIHVzZXMgZmlybXdhcmUgSUUgZm9yIE1MTyBhZHZlcnRpc2VtZW50ICovXFxuMjIwMTpcXHRcXHRcXHRpZiAoYWItXFx1MDAzZWZ3LmZ3X2ZlYXR1cmVzX3ZhbGlkKSB7XFxuMjIwMjpcXHRcXHRcXHRcXHRhZy1cXHUwMDNlbWxvX2NhcGFibGUgPVxcbjIyMDM6XFx0XFx0XFx0XFx0XFx0YXRoMTJrX2Z3X2ZlYXR1cmVfc3VwcG9ydGVkKGFiLCBBVEgxMktfRldfRkVBVFVSRV9NTE8pO1xcbjIyMDQ6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjIyMDU6XFx0XFx0XFx0fVxcbjIyMDY6XFx0XFxuMjIwNzpcXHRcXHRcXHQvKiB3aGlsZSBXQ043ODUwIGZpcm13YXJlIHVzZXMgUU1JIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0IGJpdCAqL1xcbjIyMDg6XFx0XFx0XFx0YWctXFx1MDAzZW1sb19jYXBhYmxlID0gYWItXFx1MDAzZXNpbmdsZV9jaGlwX21sb19zdXBwb3J0O1xcbjIyMDk6XFx0XFx0XFx0cmV0dXJuO1xcbjIyMTA6XFx0XFx0fVxcbjIyMTE6XFx0XFxuMjIxMjpcXHRcXHRhZy1cXHUwMDNlbWxvX2NhcGFibGUgPSB0cnVlO1xcbjIyMTM6XFx0XFxuMjIxNDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWctXFx1MDAzZW51bV9kZXZpY2VzOyBpKyspIHtcXG4yMjE1OlxcdFxcdFxcdGFiID0gYWctXFx1MDAzZWFiW2ldO1xcbjIyMTY6XFx0XFx0XFx0aWYgKCFhYilcXG4yMjE3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIyMTg6XFx0XFxuMjIxOTpcXHRcXHRcXHQvKiBldmVuIGlmIDEgZGV2aWNlJ3MgZmlybXdhcmUgZmVhdHVyZSBpbmRpY2F0ZXMgTUxPXFxuMjIyMDpcXHRcXHRcXHQgKiB1bnN1cHBvcnRlZCwgbWFrZSBNTE8gdW5zdXBwb3J0ZWQgZm9yIHRoZSB3aG9sZSBncm91cFxcbjIyMjE6XFx0XFx0XFx0ICovXFxuMjIyMjpcXHRcXHRcXHRpZiAoIWF0aDEya19md19mZWF0dXJlX3N1cHBvcnRlZChhYiwgQVRIMTJLX0ZXX0ZFQVRVUkVfTUxPKSkge1xcbjIyMjM6XFx0XFx0XFx0XFx0YWctXFx1MDAzZW1sb19jYXBhYmxlID0gZmFsc2U7XFxuMjIyNDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjIyNTpcXHRcXHRcXHR9XFxuMjIyNjpcXHRcXHR9XFxuMjIyNzpcXHR9XFxuMjIyODpcXHRcXG4yMjI5OlxcdGludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuMjIzMDpcXHR7XFxuMjIzMTpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZztcXG4yMjMyOlxcdFxcdGludCByZXQ7XFxuMjIzMzpcXHRcXG4yMjM0OlxcdFxcdHJldCA9IGF0aDEya19jb3JlX3BhbmljX25vdGlmaWVyX3JlZ2lzdGVyKGFiKTtcXG4yMjM1OlxcdFxcdGlmIChyZXQpXFxuMjIzNjpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBwYW5pYyBoYW5kbGVyOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4yMjM3OlxcdFxcbjIyMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YXRoMTJrX2h3X2dyb3VwX211dGV4KTtcXG4yMjM5OlxcdFxcbjIyNDA6XFx0XFx0YWcgPSBhdGgxMmtfY29yZV9od19ncm91cF9hc3NpZ24oYWIpO1xcbjIyNDE6XFx0XFx0aWYgKCFhZykge1xcbjIyNDI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xcbjIyNDM6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJ1bmFibGUgdG8gZ2V0IGh3IGdyb3VwXFxcXG5cXFwiKTtcXG4yMjQ0OlxcdFxcdFxcdHJldCA9IC1FTk9ERVY7XFxuMjI0NTpcXHRcXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyX25vdGlmaWVyO1xcbjIyNDY6XFx0XFx0fVxcbjIyNDc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjMwLjQwMTcwNTkyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzI3NzA5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBhdGgxMmtfY29yZV9zb2NfY3JlYXRlIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIGJlaW5nIGludm9rZWQuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBjaGVjayB3aGF0J3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3Mgcm9sZSBpbiB0aGUgYnJvYWRlciBgYXRoMTJrYCBmcmFtZXdvcmsuIFByZXN1bWFibHksIGJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIGludm9sdmVkIGluIHRoZSBjcmVhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBzb21lIGtpbmQgb2YgU3lzdGVtLW9uLUNoaXAgKFNvQykgcmVsYXRlZCBjb21wb25lbnQgb3Igc3RydWN0dXJlIGZvciB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gcmFwaWRseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBoYXJkd2FyZSBicmluZ3VwIGFuZCBjb25maWd1cmF0aW9uLiBMZXQncyBkZWx2ZSBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQga2V5IGRhdGEgc3RydWN0dXJlcyBpdCdzIG1hbmlwdWxhdGluZyBhbmQgd2hpY2ggb3RoZXIga2V5IGZ1bmN0aW9ucyBpdOKAmXMgY2FsbGluZyB0byBmb3JtIHRoZSBTb0MuIEkgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgc3BlY2lmaWMgaGFyZHdhcmUgcmVzb3VyY2VzLCBvciBpZiBpdCBpcyByZXNwb25zaWJsZSBmb3IgbWVyZWx5IGNvb3JkaW5hdGluZyBvdGhlciBmdW5jdGlvbnMgdG8gYWNoaWV2ZSB0aGlzLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBjcnVjaWFsIHN0ZXAgaW4gdGhlIGRyaXZlcidzIHBvd2VyIG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgY2xvY2sgc2V0dGluZ3MsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNDMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjM0LjkzNDQ3ODgzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0NDA5Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBhdGgxMmtfY29yZV9zb2NfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTgwND1pbnQgYXRoMTJrX2NvcmVfY2hlY2tfc21iaW9zKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy04MTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6ODE1OnN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgxNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjM1LjQ3ODg5OTgwNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTk2Mzg2ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgLiBJIGtub3cgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgY29yZSBTT0MgKFN5c3RlbS1vbi1DaGlwKSBhc3BlY3RzIG9mIHRoZSBhdGgxMmsgZHJpdmVyLCBsaWtlbHkgZHVyaW5nIGRldmljZSBwcm9iZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBoYXJkd2FyZSByZXNvdXJjZXMsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBlc3RhYmxpc2hlcyB0aGUgYmFzaWMgY29ubmVjdGl2aXR5IHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuXG5cbkknbSBsb29raW5nIGZvciB0aGUgYWxsb2NhdGlvbiBvZiBhbnkgY29udHJvbCBzdHJ1Y3R1cmVzLCBjb25maWd1cmF0aW9uIG9mIHJlZ2lzdGVycywgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbnkgaW50ZXJuYWwgc3RhdGUgdmFyaWFibGVzIHRoYXQgd2lsbCBiZSBjcml0aWNhbCBmb3IgbGF0ZXIgb3BlcmF0aW9ucywgbGlrZSBoYW5kbGluZyBkYXRhIHRyYWZmaWMgYW5kIHBvd2VyIG1hbmFnZW1lbnQuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb247IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmYWlsdXJlIGNhc2VzIGFuZCB3aGF0IHJlY292ZXJ5IG1lY2hhbmlzbXMsIGlmIGFueSwgYXJlIGltcGxlbWVudGVkLiBJIGtub3cgYSBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9uIGhlcmUgaXMgcGFyYW1vdW50IGZvciB0aGUgZW50aXJlIGRyaXZlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgdGhlIGJlZHJvY2suIEkgbmVlZCB0byBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBoYXJkd2FyZSByZXNldCwgb3IgY2FsaWJyYXRpb24gYW5kIGluaXRpYWwgY29uZmlndXJhdGlvbi4gRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIHBvd2VyIGRvbWFpbiBjb25maWd1cmF0aW9ucyBhbmQgY2xvY2sgaW5pdGlhbGl6YXRpb24g4oCTIHRoaXMgaXMgYSBjcml0aWNhbCBhc3BlY3QgZm9yIHRoZSBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdGhlIFNPQy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MTksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNzo0My4wNzUyOTA5MTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxNSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTU6XFx0c3RhdGljIGludCBhdGgxMmtfY29yZV9zb2NfY3JlYXRlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDgxNjpcXHR7XFxuIDgxNzpcXHRcXHRpbnQgcmV0O1xcbiA4MTg6XFx0XFxuIDgxOTpcXHRcXHRpZiAoYXRoMTJrX2Z0bV9tb2RlKSB7XFxuIDgyMDpcXHRcXHRcXHRhYi1cXHUwMDNlZndfbW9kZSA9IEFUSDEyS19GSVJNV0FSRV9NT0RFX0ZUTTtcXG4gODIxOlxcdFxcdFxcdGF0aDEya19pbmZvKGFiLCBcXFwiQm9vdGluZyBpbiBmdG0gbW9kZVxcXFxuXFxcIik7XFxuIDgyMjpcXHRcXHR9XFxuIDgyMzpcXHRcXG4gODI0OlxcdFxcdHJldCA9IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKGFiKTtcXG4gODI1OlxcdFxcdGlmIChyZXQpIHtcXG4gODI2OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBxbWkgOiVkXFxcXG5cXFwiLCByZXQpO1xcbiA4Mjc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODI4OlxcdFxcdH1cXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0YXRoMTJrX2RlYnVnZnNfc29jX2NyZWF0ZShhYik7XFxuIDgzMTpcXHRcXG4gODMyOlxcdFxcdHJldCA9IGF0aDEya19oaWZfcG93ZXJfdXAoYWIpO1xcbiA4MzM6XFx0XFx0aWYgKHJldCkge1xcbiA4MzQ6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBwb3dlciB1cCA6JWRcXFxcblxcXCIsIHJldCk7XFxuIDgzNTpcXHRcXHRcXHRnb3RvIGVycl9xbWlfZGVpbml0O1xcbiA4MzY6XFx0XFx0fVxcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRyZXR1cm4gMDtcXG4gODM5OlxcdFxcbiA4NDA6XFx0ZXJyX3FtaV9kZWluaXQ6XFxuIDg0MTpcXHRcXHRhdGgxMmtfZGVidWdmc19zb2NfZGVzdHJveShhYik7XFxuIDg0MjpcXHRcXHRhdGgxMmtfcW1pX2RlaW5pdF9zZXJ2aWNlKGFiKTtcXG4gODQzOlxcdFxcdHJldHVybiByZXQ7XFxuIDg0NDpcXHR9XFxuIDg0NTpcXHRcXG4gODQ2OlxcdHN0YXRpYyB2b2lkIGF0aDEya19jb3JlX3NvY19kZXN0cm95KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDg0NzpcXHR7XFxuIDg0ODpcXHRcXHRhdGgxMmtfaGlmX3Bvd2VyX2Rvd24oYWIsIGZhbHNlKTtcXG4gODQ5OlxcdFxcdGF0aDEya19yZWdfZnJlZShhYik7XFxuIDg1MDpcXHRcXHRhdGgxMmtfZGVidWdmc19zb2NfZGVzdHJveShhYik7XFxuIDg1MTpcXHRcXHRhdGgxMmtfcW1pX2RlaW5pdF9zZXJ2aWNlKGFiKTtcXG4gODUyOlxcdH1cXG4gODUzOlxcdFxcbiA4NTQ6XFx0c3RhdGljIGludCBhdGgxMmtfY29yZV9wZGV2X2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbiA4NTU6XFx0e1xcbiA4NTY6XFx0XFx0aW50IHJldDtcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0cmV0ID0gYXRoMTJrX2RwX3BkZXZfYWxsb2MoYWIpO1xcbiA4NTk6XFx0XFx0aWYgKHJldCkge1xcbiA4NjA6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBhdHRhY2ggRFAgcGRldjogJWRcXFxcblxcXCIsIHJldCk7XFxuIDg2MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NjI6XFx0XFx0fVxcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRyZXQgPSBhdGgxMmtfdGhlcm1hbF9yZWdpc3RlcihhYik7XFxuIDg2NTpcXHRcXHRpZiAocmV0KSB7XFxuIDg2NjpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiY291bGQgbm90IHJlZ2lzdGVyIHRoZXJtYWwgZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gODY3OlxcdFxcdFxcdGdvdG8gZXJyX2RwX3BkZXZfZnJlZTtcXG4gODY4OlxcdFxcdH1cXG4gODY5OlxcdFxcbiA4NzA6XFx0XFx0YXRoMTJrX2RlYnVnZnNfcGRldl9jcmVhdGUoYWIpO1xcbiA4NzE6XFx0XFxuIDg3MjpcXHRcXHRyZXR1cm4gMDtcXG4gODczOlxcdFxcbiA4NzQ6XFx0ZXJyX2RwX3BkZXZfZnJlZTpcXG4gODc1OlxcdFxcdGF0aDEya19kcF9wZGV2X2ZyZWUoYWIpO1xcbiA4NzY6XFx0XFx0cmV0dXJuIHJldDtcXG4gODc3OlxcdH1cXG4gODc4OlxcdFxcbiA4Nzk6XFx0c3RhdGljIHZvaWQgYXRoMTJrX2NvcmVfcGRldl9kZXN0cm95KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDg4MDpcXHR7XFxuIDg4MTpcXHRcXHRhdGgxMmtfdGhlcm1hbF91bnJlZ2lzdGVyKGFiKTtcXG4gODgyOlxcdFxcdGF0aDEya19kcF9wZGV2X2ZyZWUoYWIpO1xcbiA4ODM6XFx0fVxcbiA4ODQ6XFx0XFxuIDg4NTpcXHRzdGF0aWMgaW50IGF0aDEya19jb3JlX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDg4NjpcXHR7XFxuIDg4NzpcXHRcXHRpbnQgcmV0O1xcbiA4ODg6XFx0XFxuIDg4OTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZhYi1cXHUwMDNlY29yZV9sb2NrKTtcXG4gODkwOlxcdFxcbiA4OTE6XFx0XFx0cmV0ID0gYXRoMTJrX3dtaV9hdHRhY2goYWIpO1xcbiA4OTI6XFx0XFx0aWYgKHJldCkge1xcbiA4OTM6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBhdHRhY2ggd21pOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gODk0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDg5NTpcXHRcXHR9XFxuIDg5NjpcXHRcXG4gODk3OlxcdFxcdHJldCA9IGF0aDEya19odGNfaW5pdChhYik7XFxuIDg5ODpcXHRcXHRpZiAocmV0KSB7XFxuIDg5OTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGluaXQgaHRjOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gOTAwOlxcdFxcdFxcdGdvdG8gZXJyX3dtaV9kZXRhY2g7XFxuIDkwMTpcXHRcXHR9XFxuIDkwMjpcXHRcXG4gOTAzOlxcdFxcdHJldCA9IGF0aDEya19oaWZfc3RhcnQoYWIpO1xcbiA5MDQ6XFx0XFx0aWYgKHJldCkge1xcbiA5MDU6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBzdGFydCBISUY6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiA5MDY6XFx0XFx0XFx0Z290byBlcnJfd21pX2RldGFjaDtcXG4gOTA3OlxcdFxcdH1cXG4gOTA4OlxcdFxcbiA5MDk6XFx0XFx0cmV0ID0gYXRoMTJrX2h0Y193YWl0X3RhcmdldChcXHUwMDI2YWItXFx1MDAzZWh0Yyk7XFxuIDkxMDpcXHRcXHRpZiAocmV0KSB7XFxuIDkxMTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbm5lY3QgdG8gSFRDOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gOTEyOlxcdFxcdFxcdGdvdG8gZXJyX2hpZl9zdG9wO1xcbiA5MTM6XFx0XFx0fVxcbiA5MTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjQzLjA3NTUxNjg4OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcwNDg0ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKipcblxuT2theSwgc28gYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBpcyBiZWluZyBjYWxsZWQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IHRoaXMgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBRTUkgKFF1YWxjb21tIE1TTSBJbnRlcmZhY2UpIGluaXRpYWxpemF0aW9uIGZvciB0aGUgYXRoMTJrIGRyaXZlci4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgZ3JvdW5kd29yayBpcyBsYWlkIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGZpcm13YXJlLCBsaWtlbHkgc2V0dGluZyB1cCBRTUkgY29ubmVjdGlvbnMgb3IgYmluZGluZ3MsIGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGV4Y2hhbmdlIHdpdGggdGhlIG1vZGVtLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIHRoZSBuZWNlc3NhcnkgZGV2aWNlIGZpbGVzLCBlbmRwb2ludHMsIG9yIHdoYXRldmVyIGludGVyZmFjZSB0aGUgZHJpdmVyIGlzIHVzaW5nIHRvIGludGVyZmFjZSB3aXRoIHRoZSBRdWFsY29tbSBtb2RlbSBvdmVyIHRoZSBRTUkgcHJvdG9jb2wuIEknbSBrZWVuIHRvIGxvb2sgZm9yIGFueSBlcnJvciBoYW5kbGluZyB0byBzZWUgaG93IHJvYnVzdCB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgaXMuIEkgaG9wZSB0aGUgZG9jdW1lbnRhdGlvbiBpcyB3ZWxsIHdyaXR0ZW4uIEknbSBnb2luZyB0byBsb29rIGZvciByZWdpc3RlciBvcGVyYXRpb25zIG5leHQuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYmVpbmcga2lja2VkIG9mZiBhdCB0aGlzIHN0YWdlLiBJdCdzIHRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUyMCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6NDYuNzQ2MDA0MjQzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk5Njc5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9NDAwOT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDA4MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjQwODI6aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmg9NjQ4PXZvaWQgYXRoMTJrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oOjY0OTppbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaC02NTAtdm9pZCBhdGgxMmtfcW1pX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjQ2Ljg5NTk4MzM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjE1ODYxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipEaXZpbmcgaW50byBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIGZ1bmN0aW9uLCBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgLiBGcm9tIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggaW5pdGlhbGl6aW5nIGEgUU1JIHNlcnZpY2Ugd2l0aGluIHRoZSBhdGgxMmsgZHJpdmVyLCBsaWtlbHkgcmVsYXRlZCB0byBRdWFsY29tbSdzIG1lc3NhZ2luZyBpbnRlcmZhY2UuIFRoYXQgbWVhbnMgd2UncmUgcHJvYmFibHkgbG9va2luZyBhdCBzZXR0aW5nIHVwIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUgb3ZlciBhIFFNSSBsaW5rLCBwZXJoYXBzIGZvciBkYXRhIHRyYW5zZmVyLCBjb250cm9sLCBvciBjb25maWd1cmF0aW9uIG9mIHRoZSB3aXJlbGVzcyBoYXJkd2FyZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gcmVnaXN0ZXIgb3IgZW5hYmxlIGEgUU1JIHNlcnZpY2UuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugc2VydmljZSBpZGVudGlmaWVycyAoU0lEcyksIGhhbmRsZXIgZnVuY3Rpb25zLCBhbmQgYW55IGFzc29jaWF0ZWQgY29udGV4dCBvciBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBRTUkgaW50ZXJhY3Rpb24uIEhvcGVmdWxseSB0aGVyZSBhcmUgZXJyb3IgY2hlY2tzIC0gYWx3YXlzIGEgbXVzdCB3aXRoIHRoZXNlIGxvdy1sZXZlbCBkcml2ZXJzLiBBIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBtaWdodCBiZSBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGRlcGVuZCBvbiB0aGlzIHNlcnZpY2UgYmVpbmcgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlbnN1cmluZyBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQgYW5kIGRlLWFsbG9jYXRlZC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGVzZSBkcml2ZXJzLCBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGFueSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHdoZW4gbXVsdGlwbGUgUU1JIG1lc3NhZ2VzIGFycml2ZSBvciBhcmUgdHJhbnNtaXR0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTA4LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6NTIuMDE3NTcyNTc1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDgyLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDA4MjpcXHRpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG40MDgzOlxcdHtcXG40MDg0OlxcdFxcdGludCByZXQ7XFxuNDA4NTpcXHRcXG40MDg2OlxcdFxcdG1lbXNldChcXHUwMDI2YWItXFx1MDAzZXFtaS50YXJnZXQsIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X2luZm8pKTtcXG40MDg3OlxcdFxcdG1lbXNldChcXHUwMDI2YWItXFx1MDAzZXFtaS50YXJnZXRfbWVtLCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9tZW1fY2h1bmspKTtcXG40MDg4OlxcdFxcdGFiLVxcdTAwM2VxbWkuYWIgPSBhYjtcXG40MDg5OlxcdFxcbjQwOTA6XFx0XFx0YWItXFx1MDAzZXFtaS50YXJnZXRfbWVtX21vZGUgPSBhYi1cXHUwMDNldGFyZ2V0X21lbV9tb2RlO1xcbjQwOTE6XFx0XFx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSwgQVRIMTJLX1FNSV9SRVNQX0xFTl9NQVgsXFxuNDA5MjpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YXRoMTJrX3FtaV9vcHMsIGF0aDEya19xbWlfbXNnX2hhbmRsZXJzKTtcXG40MDkzOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuNDA5NDpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIHFtaSBoYW5kbGVcXFxcblxcXCIpO1xcbjQwOTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40MDk2OlxcdFxcdH1cXG40MDk3OlxcdFxcbjQwOTg6XFx0XFx0YWItXFx1MDAzZXFtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJhdGgxMmtfcW1pX2RyaXZlcl9ldmVudFxcXCIsIDApO1xcbjQwOTk6XFx0XFx0aWYgKCFhYi1cXHUwMDNlcW1pLmV2ZW50X3dxKSB7XFxuNDEwMDpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuNDEwMTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40MTAyOlxcdFxcdH1cXG40MTAzOlxcdFxcbjQxMDQ6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFiLVxcdTAwM2VxbWkuZXZlbnRfbGlzdCk7XFxuNDEwNTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YWItXFx1MDAzZXFtaS5ldmVudF9sb2NrKTtcXG40MTA2OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2YWItXFx1MDAzZXFtaS5ldmVudF93b3JrLCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKTtcXG40MTA3OlxcdFxcbjQxMDg6XFx0XFx0cmV0ID0gcW1pX2FkZF9sb29rdXAoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBRTUlfU0VSVklDRV9JRF9XTEZXLFxcbjQxMDk6XFx0XFx0XFx0XFx0ICAgICBBVEgxMktfUU1JX1dMRldfU0VSVklDRV9WRVJTX1YwMSxcXG40MTEwOlxcdFxcdFxcdFxcdCAgICAgYWItXFx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCk7XFxuNDExMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjQxMTI6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gYWRkIHFtaSBsb29rdXBcXFxcblxcXCIpO1xcbjQxMTM6XFx0XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWItXFx1MDAzZXFtaS5ldmVudF93cSk7XFxuNDExNDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQxMTU6XFx0XFx0fVxcbjQxMTY6XFx0XFxuNDExNzpcXHRcXHRyZXR1cm4gcmV0O1xcbjQxMTg6XFx0fVxcbjQxMTk6XFx0XFxuNDEyMDpcXHR2b2lkIGF0aDEya19xbWlfZGVpbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG40MTIxOlxcdHtcXG40MTIyOlxcdFxcdGlmICghYWItXFx1MDAzZXFtaS5hYilcXG40MTIzOlxcdFxcdFxcdHJldHVybjtcXG40MTI0OlxcdFxcbjQxMjU6XFx0XFx0cW1pX2hhbmRsZV9yZWxlYXNlKFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSk7XFxuNDEyNjpcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZhYi1cXHUwMDNlcW1pLmV2ZW50X3dvcmspO1xcbjQxMjc6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWItXFx1MDAzZXFtaS5ldmVudF93cSk7XFxuNDEyODpcXHRcXHRhdGgxMmtfcW1pX2F1eF91Y19mcmVlKGFiKTtcXG40MTI5OlxcdFxcdGF0aDEya19xbWlfbTNfZnJlZShhYik7XFxuNDEzMDpcXHRcXHRhdGgxMmtfcW1pX2ZyZWVfdGFyZ2V0X21lbV9jaHVuayhhYik7XFxuNDEzMTpcXHRcXHRhYi1cXHUwMDNlcW1pLmFiID0gTlVMTDtcXG40MTMyOlxcdH1cXG40MTMzOlxcdFxcbjQxMzQ6XFx0dm9pZCBhdGgxMmtfcW1pX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG40MTM1OlxcdHtcXG40MTM2OlxcdFxcdGF0aDEya19xbWlfZnJlZV90YXJnZXRfbWVtX2NodW5rKGFiKTtcXG40MTM3OlxcdFxcdGF0aDEya19xbWlfYXV4X3VjX2ZyZWUoYWIpO1xcbjQxMzg6XFx0XFx0YXRoMTJrX3FtaV9tM19mcmVlKGFiKTtcXG40MTM5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6NTIuMDE5MTY3NDA0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjUwNTYyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHByb2Nlc3MsIHRoaW5raW5nIGl0IHRocm91Z2ggZnJvbSBhIHRlY2huaWNhbCBwZXJzcGVjdGl2ZS5cblxuKipDb25uZWN0aW5nIHRvIHRoZSBRTUkgU2VydmljZSoqXG5cbkFscmlnaHQsIHNvIGBxbWlfYWRkX2xvb2t1cGAgaXMgY2FsbGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoaXMgaXMgdGhlIGluaXRpYWwgc3RlcDogaXQncyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEknbSBlc3NlbnRpYWxseSB0ZWxsaW5nIHRoZSBzeXN0ZW0sIFwiSGV5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGlzIHNwZWNpZmljIFFNSSBzZXJ2aWNlLiBLZWVwIGFuIGV5ZSBvdXQgZm9yIGl0LlwiIEknbSBzZXR0aW5nIHVwIGEgc29ydCBvZiBsaXN0ZW5pbmcgcG9zdC5cblxuQW5kIHRoZW4sIHRoZSBtYWdpYyBoYXBwZW5zLiBPbmNlIHRoZSBzZXJ2aWNlIEknbSBsb29raW5nIGZvciBhY3R1YWxseSAqYXBwZWFycyog4oCTIGl0J3MgZGlzY292ZXJlZCBhbmQgYWNjZXNzaWJsZSDigJMgdGhlIHN5c3RlbSB0cmlnZ2VycyB0aGUgYG5ld19zZXJ2ZXJgIGNhbGxiYWNrIGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluIGBhdGgxMmtfcW1pX29wc2AuIFRoYXQncyB0aGUgaG9vaywgdGhlIHNpZ25hbCB0aGF0IHRoZSBzZXJ2aWNlIGlzIHJlYWR5LiBUaGlzIG1ha2VzIHN1cmUgbXkgc3lzdGVtIGtub3dzIGV4YWN0bHkgaG93IHRvIGhhbmRsZSB0aGUgY29ubmVjdGlvbiB3aGVuIHRoZSBzZXJ2aWNlIGlzIGxpdmUuIEl0IHByb3ZpZGVzIGEgbWVhbnMgdG8gc2V0IHVwIHRoZSBjb21tdW5pY2F0aW9ucyBvbmNlIHRoZSBzZXJ2aWNlIGlzIGF2YWlsYWJsZS4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gRWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ3NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6NTUuNzg0MjI2MTE3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzk4MjEwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3FtaV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zOTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX21zZ19oYW5kbGVyIGF0aDEya19xbWlfbXNnX2hhbmRsZXJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5NTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTU0OnN0YXRpYyBpbnQgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5NTUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcW1pX3NlcnZpY2UgKnNlcnZpY2UpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5NzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTc5OnN0YXRpYyB2b2lkIGF0aDEya19xbWlfb3BzX2RlbF9zZXJ2ZXIoc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9oZGwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTgwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBxbWlfc2VydmljZSAqc2VydmljZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk4OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGF0aDEya19xbWlfb3BzID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6Mzk5MDpcXHQubmV3X3NlcnZlciA9IGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTkxOlxcdC5kZWxfc2VydmVyID0gYXRoMTJrX3FtaV9vcHNfZGVsX3NlcnZlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5OTItfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9NDA4Mj1pbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDA5MS1cXHRyZXQgPSBxbWlfaGFuZGxlX2luaXQoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBBVEgxMktfUU1JX1JFU1BfTEVOX01BWCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjQwOTI6XFx0XFx0XFx0ICAgICAgXFx1MDAyNmF0aDEya19xbWlfb3BzLCBhdGgxMmtfcW1pX21zZ19oYW5kbGVycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDkzLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjU2LjM2NDA1MzAxNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjIzODk0MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcmAgZnVuY3Rpb24uIEFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBteSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBnb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcmAqKlxuXG5BbHJpZ2h0LCBzbyAqYXRoMTJrKiwgdGhhdCBzY3JlYW1zIFF1YWxjb21tIEF0aGVyb3MgV2lGaSwgc3BlY2lmaWNhbGx5IHRoZWlyIG5ld2VyIGdlbmVyYXRpb24gY2hpcHNldHMsIHJpZ2h0PyBBbmQgKnFtaSosIHRoYXQncyB1bmRvdWJ0ZWRseSB0aGUgUXVhbGNvbW0gSW50ZXJmYWNlLCB1c2VkIGZvciBtb2RlbSBjb250cm9sIGFuZCwgbW9yZSByZWxldmFudCBoZXJlLCBsaWtlbHkgc29tZSBmb3JtIG9mIGNvbW11bmljYXRpb24gd2l0aCBhIGZpcm13YXJlIHJ1bm5pbmcgb24gdGhlIFdpRmkgY2hpcHNldCBpdHNlbGYuIFRoZSAqb3BzKiBwYXJ0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYWJvdXQgZGVmaW5pbmcgYSBzZXQgb2YgKm9wZXJhdGlvbnMqIG9yIG1ldGhvZHMuIEZpbmFsbHksICpuZXdfc2VydmVyKi4uLiBUaGlzIHNjcmVhbXMgaW5pdGlhbGl6YXRpb24sIGNyZWF0aW9uLCBwcm9iYWJseSBzZXR1cCBvZiBhIGNvbW11bmljYXRpb24gY2hhbm5lbCBvciBzZXJ2ZXIgc2lkZSBjb21wb25lbnQuXG5cbk15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggcG9zc2libGUgc2NlbmFyaW9zOiBJcyB0aGlzIGhhbmRsaW5nIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBmb3IgYSBuZXcgUU1JIGNvbm5lY3Rpb24gdG8gdGhlIFdpRmkgZmlybXdhcmU/IE9yIHBlcmhhcHMgdGhlIHNldHVwIG9mIGEgUU1JIFwic2VydmVyXCIgaW5zdGFuY2Ugd2l0aGluIHRoZSBob3N0IGRyaXZlciwgZW5hYmxpbmcgaXQgdG8gYWNjZXB0IGNvbW1hbmRzIGFuZCBkYXRhIGZyb20gdGhlIGZpcm13YXJlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgcmVsYXRlZCB0byBhIG5ldyBjaGFubmVsP1xuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIHNjcnV0aW5pemUgdGhpcyBmdW5jdGlvbiBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlJlc291cmNlIGFsbG9jYXRpb24qKjogTWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBmb3IgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IGFyZSB0aGVzZSByZXNvdXJjZXMgbWFuYWdlZC5cbiogICAqKkVycm9yIGhhbmRsaW5nKio6IFdoZXJlIGFyZSBjaGVja3MgZm9yIGZhaWx1cmUgaGFwcGVuaW5nPyBXaGF0IGhhcHBlbnMgd2hlbiBhIHJlc291cmNlIGZhaWxzIHRvIGFsbG9jYXRlP1xuKiAgICoqU2VjdXJpdHkgaGFyZGVuaW5nKio6IENoZWNrIGZvciBhbnkgcG9zc2libGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGluaGVyZW50IGluIGEgbmV3IGNoYW5uZWwuXG4qICAgKipGaXJtd2FyZSBpbnRlcmFjdGlvbioqOiBTZWUgZXhhY3RseSB3aGF0IGlzIGJlaW5nIGNvbW11bmljYXRlZCwgaWYgaXQgc2VlbXMgcmVhc29uYWJsZS5cbiogICAqKkNvbmN1cnJlbmN5Kio6IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NrLXVwcyBoZXJlP1xuKiAgICoqSW5pdGlhbGl6YXRpb24gc3RlcHMqKjogSSdtIGV4cGVjdGluZyBhIHNlcmllcyBvZiBmdW5jdGlvbiBjYWxscyB0byBpbml0aWFsaXplIHRoZSBRTUkgaW50ZXJmYWNlLiBQcm9iYWJseSBhIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBwb3RlbnRpYWxseSBzZXR0aW5nIHVwIGJ1ZmZlcnMsIGV0Yy5cbiogICAqKkRlcGVuZGVuY2llcyoqOiBJJ20gZ29pbmcgdG8gbG9vayBhdCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhpcyBpcyBjYWxsaW5nIG9yIHVzaW5nOyB1bmRlcnN0YW5kIHdoYXQgZGF0YSBpdCdzIHBhc3NpbmcsIGFuZCB3aGF0IGNvbnRleHQgaXQncyBvcGVyYXRpbmcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDI2LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTg6MDIuNTg3OTUxODc3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NTQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTU0OlxcdHN0YXRpYyBpbnQgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcXG4zOTU1OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHFtaV9zZXJ2aWNlICpzZXJ2aWNlKVxcbjM5NTY6XFx0e1xcbjM5NTc6XFx0XFx0c3RydWN0IGF0aDEya19xbWkgKnFtaSA9IGNvbnRhaW5lcl9vZihxbWlfaGRsLCBzdHJ1Y3QgYXRoMTJrX3FtaSwgaGFuZGxlKTtcXG4zOTU4OlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBxbWktXFx1MDAzZWFiO1xcbjM5NTk6XFx0XFx0c3RydWN0IHNvY2thZGRyX3FydHIgKnNxID0gXFx1MDAyNnFtaS1cXHUwMDNlc3E7XFxuMzk2MDpcXHRcXHRpbnQgcmV0O1xcbjM5NjE6XFx0XFxuMzk2MjpcXHRcXHRzcS1cXHUwMDNlc3FfZmFtaWx5ID0gQUZfUUlQQ1JUUjtcXG4zOTYzOlxcdFxcdHNxLVxcdTAwM2VzcV9ub2RlID0gc2VydmljZS1cXHUwMDNlbm9kZTtcXG4zOTY0OlxcdFxcdHNxLVxcdTAwM2VzcV9wb3J0ID0gc2VydmljZS1cXHUwMDNlcG9ydDtcXG4zOTY1OlxcdFxcbjM5NjY6XFx0XFx0cmV0ID0ga2VybmVsX2Nvbm5lY3QocW1pX2hkbC1cXHUwMDNlc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopc3EsXFxuMzk2NzpcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqc3EpLCAwKTtcXG4zOTY4OlxcdFxcdGlmIChyZXQpIHtcXG4zOTY5OlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwicW1pIGZhaWxlZCB0byBjb25uZWN0IHRvIHJlbW90ZSBzZXJ2aWNlICVkXFxcXG5cXFwiLCByZXQpO1xcbjM5NzA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zOTcxOlxcdFxcdH1cXG4zOTcyOlxcdFxcbjM5NzM6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19RTUksIFxcXCJxbWkgd2lmaSBmdyBxbWkgc2VydmljZSBjb25uZWN0ZWRcXFxcblxcXCIpO1xcbjM5NzQ6XFx0XFx0YXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfcG9zdChxbWksIEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0FSUklWRSwgTlVMTCk7XFxuMzk3NTpcXHRcXG4zOTc2OlxcdFxcdHJldHVybiByZXQ7XFxuMzk3NzpcXHR9XFxuMzk3ODpcXHRcXG4zOTc5OlxcdHN0YXRpYyB2b2lkIGF0aDEya19xbWlfb3BzX2RlbF9zZXJ2ZXIoc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9oZGwsXFxuMzk4MDpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcW1pX3NlcnZpY2UgKnNlcnZpY2UpXFxuMzk4MTpcXHR7XFxuMzk4MjpcXHRcXHRzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pID0gY29udGFpbmVyX29mKHFtaV9oZGwsIHN0cnVjdCBhdGgxMmtfcW1pLCBoYW5kbGUpO1xcbjM5ODM6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cXHUwMDNlYWI7XFxuMzk4NDpcXHRcXG4zOTg1OlxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUU1JLCBcXFwicW1pIHdpZmkgZncgZGVsIHNlcnZlclxcXFxuXFxcIik7XFxuMzk4NjpcXHRcXHRhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF9wb3N0KHFtaSwgQVRIMTJLX1FNSV9FVkVOVF9TRVJWRVJfRVhJVCwgTlVMTCk7XFxuMzk4NzpcXHR9XFxuMzk4ODpcXHRcXG4zOTg5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX29wcyBhdGgxMmtfcW1pX29wcyA9IHtcXG4zOTkwOlxcdFxcdC5uZXdfc2VydmVyID0gYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcixcXG4zOTkxOlxcdFxcdC5kZWxfc2VydmVyID0gYXRoMTJrX3FtaV9vcHNfZGVsX3NlcnZlcixcXG4zOTkyOlxcdH07XFxuMzk5MzpcXHRcXG4zOTk0OlxcdHN0YXRpYyBpbnQgYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcChzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxcbjM5OTU6XFx0e1xcbjM5OTY6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cXHUwMDNlYWI7XFxuMzk5NzpcXHRcXHRpbnQgcmV0O1xcbjM5OTg6XFx0XFxuMzk5OTpcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmQoYWIpO1xcbjQwMDA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG40MDAxOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHNlbmQgcW1pIGhvc3QgY2FwIGZvciBkZXZpY2UgaWQgJWQ6ICVkXFxcXG5cXFwiLFxcbjQwMDI6XFx0XFx0XFx0XFx0ICAgIGFiLVxcdTAwM2VkZXZpY2VfaWQsIHJldCk7XFxuNDAwMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQwMDQ6XFx0XFx0fVxcbjQwMDU6XFx0XFxuNDAwNjpcXHRcXHRyZXR1cm4gcmV0O1xcbjQwMDc6XFx0fVxcbjQwMDg6XFx0XFxuNDAwOTpcXHRzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG40MDEwOlxcdHtcXG40MDExOlxcdFxcdHN0cnVjdCBhdGgxMmtfcW1pICpxbWkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aDEya19xbWksXFxuNDAxMjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBldmVudF93b3JrKTtcXG40MDEzOlxcdFxcdHN0cnVjdCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudCAqZXZlbnQ7XFxuNDAxNDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVxcdTAwM2VhYjtcXG40MDE1OlxcdFxcdGludCByZXQ7XFxuNDAxNjpcXHRcXG40MDE3OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2cW1pLVxcdTAwM2VldmVudF9sb2NrKTtcXG40MDE4OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2cW1pLVxcdTAwM2VldmVudF9saXN0KSkge1xcbjQwMTk6XFx0XFx0XFx0ZXZlbnQgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xpc3QsXFxuNDAyMDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGF0aDEya19xbWlfZHJpdmVyX2V2ZW50LCBsaXN0KTtcXG40MDIxOlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZldmVudC1cXHUwMDNlbGlzdCk7XFxuNDAyMjpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2cW1pLVxcdTAwM2VldmVudF9sb2NrKTtcXG40MDIzOlxcdFxcbjQwMjQ6XFx0XFx0XFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX1VOUkVHSVNURVJJTkcsIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKSlcXG40MDI1OlxcdFxcdFxcdFxcdGdvdG8gc2tpcDtcXG40MDI2OlxcdFxcbjQwMjc6XFx0XFx0XFx0c3dpdGNoIChldmVudC1cXHUwMDNldHlwZSkge1xcbjQwMjg6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX1NFUlZFUl9BUlJJVkU6XFxuNDAyOTpcXHRcXHRcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX2V2ZW50X3NlcnZlcl9hcnJpdmUocW1pKTtcXG40MDMwOlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQwMzE6XFx0XFx0XFx0XFx0XFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpO1xcbjQwMzI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDAzMzpcXHRcXHRcXHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0VYSVQ6XFxuNDAzNDpcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX0NSQVNIX0ZMVVNILCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDAzNTpcXHRcXHRcXHRcXHRicmVhaztcXG40MDM2OlxcdFxcdFxcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9SRVFVRVNUX01FTTpcXG40MDM3OlxcdFxcdFxcdFxcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfbWVtX3JlcXVlc3QocW1pKTtcXG40MDM4OlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQwMzk6XFx0XFx0XFx0XFx0XFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpO1xcbjQwNDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDA0MTpcXHRcXHRcXHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfRldfTUVNX1JFQURZOlxcbjQwNDI6XFx0XFx0XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9ldmVudF9sb2FkX2JkZihxbWkpO1xcbjQwNDM6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDA0NDpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDA0NTpcXHRcXHRcXHRcXHRicmVhaztcXG40MDQ2OlxcdFxcdFxcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9GV19SRUFEWTpcXG40MDQ3OlxcdFxcdFxcdFxcdGNsZWFyX2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpO1xcbjQwNDg6XFx0XFx0XFx0XFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX1FNSV9GV19SRUFEWV9DT01QTEVURSwgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpKSB7XFxuNDA0OTpcXHRcXHRcXHRcXHRcXHRpZiAoYWItXFx1MDAzZWlzX3Jlc2V0KVxcbjQwNTA6XFx0XFx0XFx0XFx0XFx0XFx0YXRoMTJrX2hhbF9kdW1wX3Nybmdfc3RhdHMoYWIpO1xcbjQwNTE6XFx0XFxuNDA1MjpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX1JFQ09WRVJZLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDA1MzpcXHRcXHRcXHRcXHRcXHRxdWV1ZV93b3JrKGFiLVxcdTAwM2V3b3JrcXVldWUsIFxcdTAwMjZhYi1cXHUwMDNlcmVzdGFydF93b3JrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTg6MDIuNTg4NTQ3MDI3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MzA0MzA5MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nIGZvciBUZXN0aW5nIHRoZSBhdGgxMmsgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIHRyaWdnZXIgYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgIGluIHRoZSBgYXRoMTJrYCBkcml2ZXIuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gYSBRTUkgc2VydmljZSBpcyBkaXNjb3ZlcmVkLiBOb3csIFN5emthbGxlciBjYW4gZW11bGF0ZSBRTUkgc2VydmljZXMgdXNpbmcgQUZfUUlQQ1JUUiBzb2NrZXRzIOKAkyB0aGF0J3MgcG90ZW50aWFsbHkgdXNlZnVsLiBCdXQgd2FpdCwgYGF0aDEya2AgaXMgYSBQQ0kgZHJpdmVyLCBpc24ndCBpdD8gSXQgaGFzIHRvIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtLlxuXG5BaGEhIFN5emthbGxlciBoYXMgdGhpcyBgc3l6X3BjaV9kZXZpY2VfYWRkYCBmdW5jdGlvbi4gQ2FuIEkgdXNlIHRoYXQgdG8gbXkgYWR2YW50YWdlPyBJZiBJIGNhbiBhZGQgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdXNpbmcgU3l6a2FsbGVyIHRoYXQgKm1hdGNoZXMqIGBhdGgxMmtgJ3MgdmVuZG9yIGFuZCBkZXZpY2UgSUQsIHRoZW4gYGF0aDEya19wY2lfcHJvYmVgIHNob3VsZCBnZXQgY2FsbGVkLiBHb29kLlxuXG5PbmNlIGBhdGgxMmtfcGNpX3Byb2JlYCBydW5zLCBpdCB3aWxsIGNhbGwgYGF0aDEya19jb3JlX2luaXRgLCB3aGljaCB0aGVuIGxlYWRzIHRvIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIEFuZCAqdGhhdCogZnVuY3Rpb24gcmVnaXN0ZXJzIGEgUU1JIGNsaWVudC4gUGVyZmVjdCFcblxuTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBJZiBTeXprYWxsZXIgKmFsc28qIGVtdWxhdGVzIGEgUU1JIHNlcnZlciBvbiBBRl9RSVBDUlRSLCB0aGF0IHNob3VsZCB0cmlnZ2VyIGBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyYCBvbiB0aGUgY2xpZW50IHNpZGUuIFRoYXQncyB0aGUgbGluayBJIHdhcyBsb29raW5nIGZvci4gVGhlbiwgYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgd2lsbCBiZSBjYWxsZWQuIE5vdyBJIGp1c3QgbmVlZCB0byBkaWcgaW50byBgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlYCBhbmQgc2VlIHdoYXQgaGFwcGVucyB0aGVyZS4gVGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBzaG91bGQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODAwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTg6MTYuODkyODYwMzMyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTA3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzU4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzc1ODpcXHRpbnQgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlKHN0cnVjdCBhdGgxMmtfcW1pICpxbWkpXFxuMzc1OTpcXHR7XFxuMzc2MDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVxcdTAwM2VhYiwgKmJsb2NrX2FiO1xcbjM3NjE6XFx0XFx0c3RydWN0IGF0aDEya19od19ncm91cCAqYWcgPSBhYi1cXHUwMDNlYWc7XFxuMzc2MjpcXHRcXHRpbnQgcmV0O1xcbjM3NjM6XFx0XFxuMzc2NDpcXHRcXHRhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZChhYik7XFxuMzc2NTpcXHRcXG4zNzY2OlxcdFxcdHJldCA9IGF0aDEya19xbWlfZndfaW5kX3JlZ2lzdGVyX3NlbmQoYWIpO1xcbjM3Njc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4zNzY4OlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwicW1pIGZhaWxlZCB0byBzZW5kIEZXIGluZGljYXRpb24gUU1JOiVkXFxcXG5cXFwiLCByZXQpO1xcbjM3Njk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zNzcwOlxcdFxcdH1cXG4zNzcxOlxcdFxcbjM3NzI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xvY2spO1xcbjM3NzM6XFx0XFxuMzc3NDpcXHRcXHRhdGgxMmtfcW1pX3NldF9ldmVudF9ibG9jayhxbWksIHRydWUpO1xcbjM3NzU6XFx0XFxuMzc3NjpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2cW1pLVxcdTAwM2VldmVudF9sb2NrKTtcXG4zNzc3OlxcdFxcbjM3Nzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YWctXFx1MDAzZW11dGV4KTtcXG4zNzc5OlxcdFxcbjM3ODA6XFx0XFx0aWYgKGF0aDEya19xbWlfaHdfZ3JvdXBfaG9zdF9jYXBfcmVhZHkoYWcpKSB7XFxuMzc4MTpcXHRcXHRcXHRhdGgxMmtfY29yZV9od19ncm91cF9zZXRfbWxvX2NhcGFibGUoYWcpO1xcbjM3ODI6XFx0XFxuMzc4MzpcXHRcXHRcXHRibG9ja19hYiA9IGF0aDEya19xbWlfaHdfZ3JvdXBfZmluZF9ibG9ja2VkKGFnKTtcXG4zNzg0OlxcdFxcdFxcdGlmIChibG9ja19hYilcXG4zNzg1OlxcdFxcdFxcdFxcdGF0aDEya19xbWlfdHJpZ2dlcl9ob3N0X2NhcChibG9ja19hYik7XFxuMzc4NjpcXHRcXHR9XFxuMzc4NzpcXHRcXG4zNzg4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YWctXFx1MDAzZW11dGV4KTtcXG4zNzg5OlxcdFxcbjM3OTA6XFx0XFx0cmV0dXJuIHJldDtcXG4zNzkxOlxcdH1cXG4zNzkyOlxcdFxcbjM3OTM6XFx0LyogY2xhbmcgc3RhY2sgdXNhZ2UgZXhwbG9kZXMgaWYgdGhpcyBpcyBpbmxpbmVkICovXFxuMzc5NDpcXHRzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrXFxuMzc5NTpcXHRpbnQgYXRoMTJrX3FtaV9ldmVudF9tZW1fcmVxdWVzdChzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxcbjM3OTY6XFx0e1xcbjM3OTc6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cXHUwMDNlYWI7XFxuMzc5ODpcXHRcXHRpbnQgcmV0O1xcbjM3OTk6XFx0XFxuMzgwMDpcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX3Jlc3BvbmRfZndfbWVtX3JlcXVlc3QoYWIpO1xcbjM4MDE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4zODAyOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwicW1pIGZhaWxlZCB0byByZXNwb25kIGZ3IG1lbSByZXE6JWRcXFxcblxcXCIsIHJldCk7XFxuMzgwMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM4MDQ6XFx0XFx0fVxcbjM4MDU6XFx0XFxuMzgwNjpcXHRcXHRyZXR1cm4gcmV0O1xcbjM4MDc6XFx0fVxcbjM4MDg6XFx0XFxuMzgwOTpcXHQvKiBjbGFuZyBzdGFjayB1c2FnZSBleHBsb2RlcyBpZiB0aGlzIGlzIGlubGluZWQgKi9cXG4zODEwOlxcdHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2tcXG4zODExOlxcdGludCBhdGgxMmtfcW1pX2V2ZW50X2xvYWRfYmRmKHN0cnVjdCBhdGgxMmtfcW1pICpxbWkpXFxuMzgxMjpcXHR7XFxuMzgxMzpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVxcdTAwM2VhYjtcXG4zODE0OlxcdFxcdGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpod19wYXJhbXMgPSBhYi1cXHUwMDNlaHdfcGFyYW1zO1xcbjM4MTU6XFx0XFx0aW50IHJldDtcXG4zODE2OlxcdFxcbjM4MTc6XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9yZXF1ZXN0X3RhcmdldF9jYXAoYWIpO1xcbjM4MTg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4zODE5OlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwicW1pIGZhaWxlZCB0byByZXEgdGFyZ2V0IGNhcGFiaWxpdGllczolZFxcXFxuXFxcIiwgcmV0KTtcXG4zODIwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzgyMTpcXHRcXHR9XFxuMzgyMjpcXHRcXG4zODIzOlxcdFxcdHJldCA9IGF0aDEya19xbWlfbG9hZF9iZGZfcW1pKGFiLCBBVEgxMktfUU1JX0JERl9UWVBFX1JFR0RCKTtcXG4zODI0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMzgyNTpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInFtaSBmYWlsZWQgdG8gbG9hZCByZWdkYiBmaWxlOiVkXFxcXG5cXFwiLCByZXQpO1xcbjM4MjY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zODI3OlxcdFxcdH1cXG4zODI4OlxcdFxcbjM4Mjk6XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9sb2FkX2JkZl9xbWkoYWIsIEFUSDEyS19RTUlfQkRGX1RZUEVfRUxGKTtcXG4zODMwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMzgzMTpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInFtaSBmYWlsZWQgdG8gbG9hZCBib2FyZCBkYXRhIGZpbGU6JWRcXFxcblxcXCIsIHJldCk7XFxuMzgzMjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM4MzM6XFx0XFx0fVxcbjM4MzQ6XFx0XFxuMzgzNTpcXHRcXHRpZiAoaHdfcGFyYW1zLVxcdTAwM2Vkb3dubG9hZF9jYWxpYikge1xcbjM4MzY6XFx0XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9sb2FkX2JkZl9xbWkoYWIsIEFUSDEyS19RTUlfQkRGX1RZUEVfQ0FMSUJSQVRJT04pO1xcbjM4Mzc6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMzgzODpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInFtaSBmYWlsZWQgdG8gbG9hZCBjYWxpYnJhdGVkIGRhdGEgOiVkXFxcXG5cXFwiLCByZXQpO1xcbjM4Mzk6XFx0XFx0fVxcbjM4NDA6XFx0XFxuMzg0MTpcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX3dsYW5md19tM19pbmZvX3NlbmQoYWIpO1xcbjM4NDI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4zODQzOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwicW1pIGZhaWxlZCB0byBzZW5kIG0zIGluZm8gcmVxOiVkXFxcXG5cXFwiLCByZXQpO1xcbjM4NDQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zODQ1OlxcdFxcdH1cXG4zODQ2OlxcdFxcbjM4NDc6XFx0XFx0aWYgKGh3X3BhcmFtcy1cXHUwMDNlZncuZG93bmxvYWRfYXV4X3Vjb2RlKSB7XFxuMzg0ODpcXHRcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX3dsYW5md19hdXhfdWNfaW5mb19zZW5kKGFiKTtcXG4zODQ5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMzg1MDpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInFtaSBmYWlsZWQgdG8gc2VuZCBhdXhfdWMgaW5mbyByZXE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjM4NTE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zODUyOlxcdFxcdFxcdH1cXG4zODUzOlxcdFxcdH1cXG4zODU0OlxcdFxcbjM4NTU6XFx0XFx0cmV0dXJuIHJldDtcXG4zODU2OlxcdH1cXG4zODU3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxODoxNi44OTU2NTU0MTJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNTI3MTA4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoOiBBIFN5emthbGxlciBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCBtb2RpZmllcyBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIGFuZCBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBrbm93IHRoYXQgYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgY2FsbHMgdGhlIGZvcm1lciwgYW5kIGBBVEgxMktfUU1JX0VWRU5UX0hPU1RfQ0FQYCB0cmlnZ2VycyB0aGUgbGF0dGVyLiBUaGUgY3JpdGljYWwgbGluayBpcyB3aGV0aGVyIFN5emthbGxlciBjYW4gYWN0dWFsbHkgKnJlYWNoKiB0aGVzZSBmdW5jdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsZXZlcmFnZSBgc3l6X3BjaV9kZXZpY2VfYWRkYCB0byB0cmlnZ2VyIGBhdGgxMmtfcGNpX3Byb2JlYC4gTm93LCBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgYSBjb21wbGV4IGZ1bmN0aW9uLiBJdCdzIGRvaW5nIGEgbG90IG9mIHRoaW5nczogUENJIGNsYWltaW5nLCBNU0kgYWxsb2NhdGlvbiwgTUhJIHJlZ2lzdHJhdGlvbiwgU1JORyBpbml0aWFsaXphdGlvbiwgQ0UgcGlwZSBhbGxvY2F0aW9uLCBJUlEgY29uZmlndXJhdGlvbi4uLiBhbmQgdWx0aW1hdGVseSBjYWxscyBgYXRoMTJrX2NvcmVfaW5pdGAuIElmIGFueSBvZiB0aG9zZSBzdWItZnVuY3Rpb25zIGZhaWwsIGBhdGgxMmtfY29yZV9pbml0YCBpcyBuZXZlciBjYWxsZWQuIFRoaXMgaXMgYSBwb3RlbnRpYWwgaHVyZGxlLlxuXG5TcGVjaWZpY2FsbHksIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBzdGFuZHMgb3V0LiBUaGlzIGlzIHRoZSBNb2RlbSBIb3N0IEludGVyZmFjZSwgYSBmYWlybHkgY29tcGxleCBwcm90b2NvbCB0aGF0J3MgbGlrZWx5IHJlbGlhbnQgb24gYWN0dWFsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdtIHdvbmRlcmluZywgY2FuIHdlIGdldCBhcm91bmQgdGhpcyBpZiB0aGVyZSdzIG5vIHJlYWwgaGFyZHdhcmU/IERvZXMgYGF0aDEya2AgdXNlIFFNSSBvdmVyIE1ISSwgb3Igc29tZXRoaW5nIGVsc2U/XG5cbkEgcXVpY2sgY2hlY2sgb2YgYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgIHJldmVhbHMgaXQgdXNlcyBgQUZfUUlQQ1JUUmAgLSBJUEMgcm91dGVyISBFeGNlbGxlbnQuIEknbSBub3cgcHJldHR5IHN1cmUgdGhhdCBpdCBjb25uZWN0cyB0byB0aGUgUU1JIHNlcnZpY2UgdmlhIElQQyByb3V0ZXIsIHNvIHRoZSB0cmFuc3BvcnQgaXMgcHJvYmFibHkgTUhJLlxuXG5JZiBNSEkgaXNuJ3QgdXAsIHRoZSBRTUkgY2xpZW50IHdpdGhpbiBgYXRoMTJrYCB3b24ndCBzZWUgdGhlIHJlbW90ZSBzZXJ2ZXIuIEJ1dCwgYW5kIHRoaXMgaXMgdGhlIGNyaXRpY2FsIGluc2lnaHQsIFN5emthbGxlciBjYW4gKmNyZWF0ZSogYSBsb2NhbCBJUEMgcm91dGVyIHNlcnZpY2UhIEl0IGNhbiBiaW5kIHRvIGBBRl9RSVBDUlRSYCBhbmQgYWR2ZXJ0aXNlIGBRTUlfU0VSVklDRV9JRF9XTEZXYC4gVGhpcyBtZWFucywgcmVnYXJkbGVzcyBvZiB0aGUgTUhJIHN0YXRlLCB0aGUgYGF0aDEya2AgY2xpZW50IHNob3VsZCBzZWUgaXQgYmVjYXVzZSB0aGUgSVBDIHJvdXRlciBpcyBhIGNlbnRyYWxpemVkIGxvb2t1cC4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IHRoZSBgcW1pX2FkZF9sb29rdXBgIGNvbmZpcm1zIHRoaXMuIFRoZSBJUEMgcm91dGVyIHdpbGwgbm90aWZ5IHRoZSBjbGllbnQgb2YgYW55IG1hdGNoaW5nIHNlcnZpY2UgSUQuIFNvLCBpbiB0aGVvcnksIFN5emthbGxlciBjYW4gZnVsbHkgZW11bGF0ZSB0aGUgUU1JIHNlcnZlci5cblxuSG93ZXZlciwgSSdtIG5vdyBiYWNrIHRvIHRoZSBgYXRoMTJrX3BjaV9wcm9iZWAgcHJvYmxlbS4gSXQgKm11c3QqIHN1Y2NlZWQgZm9yIGBhdGgxMmtfY29yZV9pbml0YCB0byBydW4sIHNvIEkgaGF2ZSB0byBlbnN1cmUgU3l6a2FsbGVyIGNhbiBwYXNzIHRoYXQgZnVuY3Rpb24uIFRpbWUgdG8gYW5hbHl6ZSBgYXRoMTJrX21oaV9yZWdpc3RlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTM1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTg6NTguMDQ4MzcwNDQ0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYxMzk1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGF0aDEya19taGlfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0xODA9c3RhdGljIHZvaWQgYXRoMTJrX21oaV9vcF93cml0ZV9yZWcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTE4Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjE4NzppbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmg9MzU9dm9pZCBhdGgxMmtfbWhpX3N0b3Aoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSwgYm9vbCBpc19zdXNwZW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM2OmludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzctdm9pZCBhdGgxMmtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE4OjU4LjU1NDUxNTMwNFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjczNTY5MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJMZXQncyBzZWUgYGF0aDEya19taGlfcmVnaXN0ZXJgXCIgYXMgYSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGF0aDEya19taGlfcmVnaXN0ZXIqKlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGF0aDEya19taGlfcmVnaXN0ZXJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbGlrZWx5IGZvY3VzZWQgb24gdGhlIEF0aGVyb3MgKG5vdyBRdWFsY29tbSkgODAyLjExYXgvV2ktRmkgNiB3aXJlbGVzcyBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgTW9iaWxlIEhvc3QgSW50ZXJmYWNlIChNSEkpIHJlZ2lzdGVyIGRlZmluaXRpb25zLiBDb25zaWRlcmluZyBteSBleHBlcmllbmNlIHdpdGggdGhlc2Uga2luZHMgb2YgbG93LWxldmVsIGRyaXZlciBjb21wb25lbnRzLCBJJ20gZXhwZWN0aW5nIHRoaXMgcmVnaXN0ZXIgdG8gYmUgY3J1Y2lhbCBmb3IgZWl0aGVyIGhhcmR3YXJlIGludGVyYWN0aW9uLCBwcm9iYWJseSBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGRyaXZlciBleGVjdXRpb24gb3IgZHVyaW5nIHRoZSBib290LXVwIHNlcXVlbmNlIG9mIHRoZSBkZXZpY2UsIG9yIHRoZSBNSEkgY29tbXVuaWNhdGlvbiBwcm90b2NvbCwgd2hpY2ggSSBoYXZlIHZhc3QgZXhwZXJpZW5jZSBpbi4gXG5cbkknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gcmVjYWxsIG15IGtub3dsZWRnZSBvZiB0aGF0IHNwZWNpZmljIHJlZ2lzdGVyLiBJcyB0aGlzIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nLCBwZXJoYXBzPyBPciBpcyBpdCBtb3JlIGFib3V0IHJlc291cmNlIGFsbG9jYXRpb24sIERNQSBzZXR1cCwgb3IgcGVyaGFwcyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIHRoZSBNSEkgY29udHJvbGxlciBpdHNlbGY/IEknbSBhbnRpY2lwYXRpbmcgaXQgdG8gYmUgYSBrZXkgZWxlbWVudCBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGhvc3QgQ1BVIGFuZCB0aGUgV2ktRmkgY2hpcHNldCwgZW5hYmxpbmcgZGF0YSB0cmFuc2ZlciBhbmQgY29udHJvbCBjb21tYW5kcy4gVGhlIGZhY3QgaXQncyBleHBsaWNpdGx5IG5hbWVkIGEgJ3JlZ2lzdGVyJyBzdHJvbmdseSBpbXBsaWVzIGEgaGFyZHdhcmUtbGV2ZWwgaW50ZXJhY3Rpb24sIG5vdCBzb21ldGhpbmcgYWJzdHJhY3RlZC4gSSdtIGFscmVhZHkgbWVudGFsbHkgZm9ybWluZyBhIGh5cG90aGVzaXM6IEkgc2hvdWxkIGNoZWNrIGl0cyBsb2NhdGlvbiBpbiB0aGUgbWVtb3J5IG1hcCwgYW5kIHdoYXQgZmllbGRzIGFyZSBwcmVzZW50IHdpdGhpbiB0aGF0IHJlZ2lzdGVyLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg0NCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE5OjAzLjIyODA4NzUwN1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTg3OlxcdGludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXFxuIDE4ODpcXHR7XFxuIDE4OTpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gYWJfcGNpLVxcdTAwM2VhYjtcXG4gMTkwOlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmw7XFxuIDE5MTpcXHRcXHR1bnNpZ25lZCBpbnQgYm9hcmRfaWQ7XFxuIDE5MjpcXHRcXHRpbnQgcmV0O1xcbiAxOTM6XFx0XFx0Ym9vbCBkdWFsbWFjID0gZmFsc2U7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdG1oaV9jdHJsID0gbWhpX2FsbG9jX2NvbnRyb2xsZXIoKTtcXG4gMTk2OlxcdFxcdGlmICghbWhpX2N0cmwpXFxuIDE5NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XFxuIDIwMDpcXHRcXHRhYl9wY2ktXFx1MDAzZW1oaV9jdHJsID0gbWhpX2N0cmw7XFxuIDIwMTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlY250cmxfZGV2ID0gYWItXFx1MDAzZWRldjtcXG4gMjAyOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VyZWdzID0gYWItXFx1MDAzZW1lbTtcXG4gMjAzOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VyZWdfbGVuID0gYWItXFx1MDAzZW1lbV9sZW47XFxuIDIwNDpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmRkbV9zaXplID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlcmRkbV9zaXplO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKSB7XFxuIDIwNzpcXHRcXHRcXHRib2FyZF9pZCA9XFxuIDIwODpcXHRcXHRcXHRcXHRhdGgxMmtfcGNpX3JlYWQzMihhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKTtcXG4gMjA5OlxcdFxcdFxcdGJvYXJkX2lkID0gdTMyX2dldF9iaXRzKGJvYXJkX2lkLCBPVFBfQk9BUkRfSURfTUFTSyk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdFxcdGlmICghYm9hcmRfaWQgfHwgKGJvYXJkX2lkID09IE9UUF9JTlZBTElEX0JPQVJEX0lEKSkge1xcbiAyMTI6XFx0XFx0XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULFxcbiAyMTM6XFx0XFx0XFx0XFx0XFx0ICAgXFxcImZhaWxlZCB0byByZWFkIGJvYXJkIGlkXFxcXG5cXFwiKTtcXG4gMjE0OlxcdFxcdFxcdH0gZWxzZSBpZiAoYm9hcmRfaWQgXFx1MDAyNiBPVFBfVkFMSURfRFVBTE1BQ19CT0FSRF9JRF9NQVNLKSB7XFxuIDIxNTpcXHRcXHRcXHRcXHRkdWFsbWFjID0gdHJ1ZTtcXG4gMjE2OlxcdFxcdFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcXG4gMjE3OlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJkdWFsbWFjIGZ3IHNlbGVjdGVkIGZvciBib2FyZCBpZDogJXhcXFxcblxcXCIsIGJvYXJkX2lkKTtcXG4gMjE4OlxcdFxcdFxcdH1cXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0aWYgKGR1YWxtYWMpIHtcXG4gMjIyOlxcdFxcdFxcdGlmIChhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGEgXFx1MDAyNlxcdTAwMjYgYWItXFx1MDAzZWZ3LmFtc3NfZHVhbG1hY19sZW4gXFx1MDAzZSAwKSB7XFxuIDIyMzpcXHRcXHRcXHRcXHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xcbiAyMjQ6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2RhdGEgPSBhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGE7XFxuIDIyNTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfc3ogPSBhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2xlbjtcXG4gMjI2OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIyNzpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImR1YWxtYWMgZmlybXdhcmUgSUUgbm90IHByZXNlbnQgaW4gZmlybXdhcmUtTi5iaW5cXFxcblxcXCIpO1xcbiAyMjg6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMjI5OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xcbiAyMzA6XFx0XFx0XFx0fVxcbiAyMzE6XFx0XFx0fSBlbHNlIHtcXG4gMjMyOlxcdFxcdFxcdGlmIChhYi1cXHUwMDNlZncuYW1zc19kYXRhIFxcdTAwMjZcXHUwMDI2IGFiLVxcdTAwM2Vmdy5hbXNzX2xlbiBcXHUwMDNlIDApIHtcXG4gMjMzOlxcdFxcdFxcdFxcdC8qIHVzZSBNSEkgZmlybXdhcmUgZmlsZSBmcm9tIGZpcm13YXJlLU4uYmluICovXFxuIDIzNDpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfZGF0YSA9IGFiLVxcdTAwM2Vmdy5hbXNzX2RhdGE7XFxuIDIzNTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfc3ogPSBhYi1cXHUwMDNlZncuYW1zc19sZW47XFxuIDIzNjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMzc6XFx0XFx0XFx0XFx0LyogdXNlIHRoZSBvbGQgc2VwYXJhdGUgbWhpLmJpbiBNSEkgZmlybXdhcmUgZmlsZSAqL1xcbiAyMzg6XFx0XFx0XFx0XFx0YXRoMTJrX2NvcmVfY3JlYXRlX2Zpcm13YXJlX3BhdGgoYWIsIEFUSDEyS19BTVNTX0ZJTEUsXFxuIDIzOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYWJfcGNpLVxcdTAwM2VhbXNzX3BhdGgsXFxuIDI0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKGFiX3BjaS1cXHUwMDNlYW1zc19wYXRoKSk7XFxuIDI0MTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfaW1hZ2UgPSBhYl9wY2ktXFx1MDAzZWFtc3NfcGF0aDtcXG4gMjQyOlxcdFxcdFxcdH1cXG4gMjQzOlxcdFxcdH1cXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0cmV0ID0gYXRoMTJrX21oaV9nZXRfbXNpKGFiX3BjaSk7XFxuIDI0NjpcXHRcXHRpZiAocmV0KSB7XFxuIDI0NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBtc2kgZm9yIG1oaVxcXFxuXFxcIik7XFxuIDI0ODpcXHRcXHRcXHRnb3RvIGZyZWVfY29udHJvbGxlcjtcXG4gMjQ5OlxcdFxcdH1cXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0aWYgKCF0ZXN0X2JpdChBVEgxMktfUENJX0ZMQUdfTVVMVElfTVNJX1ZFQ1RPUlMsIFxcdTAwMjZhYl9wY2ktXFx1MDAzZWZsYWdzKSlcXG4gMjUyOlxcdFxcdFxcdG1oaV9jdHJsLVxcdTAwM2VpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfTk9CQUxBTkNJTkc7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2Vpb3ZhX3N0YXJ0ID0gMDtcXG4gMjU1OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2Vpb3ZhX3N0b3AgPSBhYl9wY2ktXFx1MDAzZWRtYV9tYXNrO1xcbiAyNTY6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXNibF9zaXplID0gU1pfNTEySztcXG4gMjU3OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VzZWdfbGVuID0gU1pfNTEySztcXG4gMjU4OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VmYmNfZG93bmxvYWQgPSB0cnVlO1xcbiAyNTk6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJ1bnRpbWVfZ2V0ID0gYXRoMTJrX21oaV9vcF9ydW50aW1lX2dldDtcXG4gMjYwOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VydW50aW1lX3B1dCA9IGF0aDEya19taGlfb3BfcnVudGltZV9wdXQ7XFxuIDI2MTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlc3RhdHVzX2NiID0gYXRoMTJrX21oaV9vcF9zdGF0dXNfY2I7XFxuIDI2MjpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVhZF9yZWcgPSBhdGgxMmtfbWhpX29wX3JlYWRfcmVnO1xcbiAyNjM6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXdyaXRlX3JlZyA9IGF0aDEya19taGlfb3Bfd3JpdGVfcmVnO1xcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlbWhpX2NvbmZpZyk7XFxuIDI2NjpcXHRcXHRpZiAocmV0KSB7XFxuIDI2NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHRvIG1oaSBidXMsIGVyciA9ICVkXFxcXG5cXFwiLCByZXQpO1xcbiAyNjg6XFx0XFx0XFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XFxuIDI2OTpcXHRcXHR9XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdHJldHVybiAwO1xcbiAyNzI6XFx0XFxuIDI3MzpcXHRmcmVlX2NvbnRyb2xsZXI6XFxuIDI3NDpcXHRcXHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcXG4gMjc1OlxcdFxcdGFiX3BjaS1cXHUwMDNlbWhpX2N0cmwgPSBOVUxMO1xcbiAyNzY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjc3OlxcdH1cXG4gMjc4OlxcdFxcbiAyNzk6XFx0dm9pZCBhdGgxMmtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG4gMjgwOlxcdHtcXG4gMjgxOlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmwgPSBhYl9wY2ktXFx1MDAzZW1oaV9jdHJsO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRtaGlfdW5yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsKTtcXG4gMjg0OlxcdFxcdGtmcmVlKG1oaV9jdHJsLVxcdTAwM2VpcnEpO1xcbiAyODU6XFx0XFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XFxuIDI4NjpcXHRcXHRhYl9wY2ktXFx1MDAzZW1oaV9jdHJsID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6MDMuMjI4MzMzMTY3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODQ3NjY3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBNSEkgQ29udHJvbGxlciBhbmQgRmlybXdhcmUgUHJvY2VzcyoqXG5cbk9rYXksIHNvIHRoZSBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIHJlZ2lzdGVyaW5nIHRoZSBjb250cm9sbGVyLiBTaW1wbGUgZW5vdWdoLiBCdXQgaXQncyBjcnVjaWFsIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyAqZG9lc24ndCogaW5pdGlhdGUgdGhlIGZpcm13YXJlIGRvd25sb2FkLiBUaGF0J3MgYSBrZXkgZGlzdGluY3Rpb24gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgbGF0ZXIgZGVidWdnaW5nLlxuXG5UaGUgZmlybXdhcmUgZG93bmxvYWQsIGFsb25nIHdpdGggdGhlIGFjdHVhbCBNSEkgc3RhcnQsIGFwcGVhcnMgdG8gYmUgdHJpZ2dlcmVkIGJ5IGVpdGhlciBgbWhpX3ByZXBhcmVfZm9yX3Bvd2VyX3VwYCBvciBgbWhpX2FzeW5jX3Bvd2VyX3VwYC4gSSdtIGZhbWlsaWFyIHdpdGggYHByZXBhcmVfZm9yX3Bvd2VyX3VwYCwgYnV0IHRoZSBgYXN5bmNgIHZlcnNpb24gcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgc3RhbmRhcmQgcG93ZXIgdXAgZmxvdyBpbiBkZXRhaWwuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBoYXZlIHRvIHRyYWNlIHdoZXJlIGBtaGlfYXN5bmNfcG93ZXJfdXBgIGlzIGFjdHVhbGx5IGNhbGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIHRoZXJlIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhcmFsbGVsIHBvd2VyIHVwIHByb2Nlc3Nlcy4gSXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxMDQsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE5OjA5LjIxMzEwMjE3NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzEyODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1oaV9hc3luY19wb3dlcl91cHxtaGlfc3luY19wb3dlcl91cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTQwNj1zdGF0aWMgaW50IGF0aDEya19taGlfc2V0X3N0YXRlKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQzOC1cXHRcXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQzOTpcXHRcXHRyZXQgPSBtaGlfc3luY19wb3dlcl91cChhYl9wY2ktXFx1MDAzZW1oaV9jdHJsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ0MC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6MDkuNDQ3NDIwNjQ5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NTk4NjExMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGZ1bmN0aW9uIGBhdGgxMmtfbWhpX3NldF9zdGF0ZWAsIGtlZXBpbmcgaW4gbWluZCBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQuXG5cbioqRGVlcCBEaXZlIGludG8gYGF0aDEya19taGlfc2V0X3N0YXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgYGF0aDEya19taGlfc2V0X3N0YXRlYC4gR2l2ZW4gdGhlIG5hbWUsIEknbSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIHBvd2VyIHN0YXRlIG9mIHRoZSBNSEkgKE0tQnVzIEhvc3QgSW50ZXJmYWNlKSBjb21wb25lbnQgd2l0aGluIHRoZSBhdGgxMmsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIHBvd2VyIG1hbmFnZW1lbnQgc2NoZW1lIG9mIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGFuZCBwb3dlci1zYXZpbmcgZmVhdHVyZXM/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB3aGF0IGBtaGlgIHN0YW5kcyBmb3IgYW5kIHdoYXQgaXQgZG9lcy5cblxuSSdkIGV4cGVjdCB0byBzZWUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSBmb3IgdGhlIFF1YWxjb21tIEF0aGVyb3MgY2hpcHNldC4gU3BlY2lmaWNhbGx5LCBJJ20gYW50aWNpcGF0aW5nIGNhbGxzIHRvIGxvdy1sZXZlbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBjbG9jayBnYXRpbmcsIHZvbHRhZ2Ugc2NhbGluZywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGludGVycnVwdCBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gTUhJIGNvbW11bmljYXRpb24uIFRoZSBzdGF0ZSB0cmFuc2l0aW9uIOKAkyB0aGF0J3MgY3J1Y2lhbC4gSXMgaXQgaGFuZGxpbmcgdHJhbnNpdGlvbnMgYmV0d2VlbiBzdGF0ZXMgbGlrZSBhY3RpdmUsIHNsZWVwLCBzdGFuZGJ5LCBzdXNwZW5kLCBhbmQgd2hhdCBhcmUgdGhlIHNwZWNpZmljIGNvbnNpZGVyYXRpb25zP1xuXG5JJ20gdGhpbmtpbmcsIGlzIHRoaXMgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIE1ISSB0byBhIFwiZGlzYWJsZWRcIiBzdGF0ZSBvciBhbiBcImVuYWJsZWRcIiBzdGF0ZSwgb3IgZG9lcyBpdCBjb3ZlciBhbiBhcnJheSBvZiBzdGF0ZSBjaGFuZ2VzPyBLbm93aW5nIHRoZSBleGFjdCBwb3dlciBzdGF0ZXMgdGhlIE1ISSBjYW4gb3BlcmF0ZSB1bmRlciB3aWxsIHByb3ZpZGUgaW1wb3J0YW50IGNvbnRleHQuIERvZXMgaXQgaGFuZGxlIGFueSBwb3dlci1kb3duIHNlcXVlbmNpbmcsIGVzcGVjaWFsbHkgdGhlIG9yZGVyIGluIHdoaWNoIGRldmljZXMgYXJlIGRpc2FibGVkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eT8gSSB3YW50IHRvIGtub3cgYWJvdXQgdGhlIHJlZ2lzdGVyIGFjY2Vzc2VzIOKAkyB3aGljaCByZWdpc3RlcnMgYXJlIGJlaW5nIG1vZGlmaWVkPyBEb2VzIHRoaXMgY2FsbCBpbnRvIGEgbW9yZSBnZW5lcmljIE1ISSBkcml2ZXIsIG9yIGlzIGl0IHNwZWNpZmljIHRvIHRoZSBhdGgxMmsgY2hpcHNldD8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29udGVudGlvbiBkdXJpbmcgc3RhdGUgdHJhbnNpdGlvbnM/XG5cbkknZCB3YW50IHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IG1lY2hhbmlzbXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgaGFyZHdhcmUgZmFpbHMgdG8gdHJhbnNpdGlvbiB0byB0aGUgcmVxdWVzdGVkIHN0YXRlPyBJcyB0aGVyZSBhIHRpbWVvdXQ/IERvZXMgaXQgbG9nIGVycm9ycyBvciB0cmlnZ2VyIGEgc3lzdGVtIHJlc2V0PyBJIHdvdWxkIGFsc28gd2FudCB0byBleGFtaW5lIHdoZXJlIGBhdGgxMmtfbWhpX3NldF9zdGF0ZWAgaXMgY2FsbGVkIGZyb20uIElzIGl0IGRyaXZlbiBieSB0aGUgd2lyZWxlc3MgY29yZSwgb3IgYXJlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaW5pdGlhdGluZyB0aGUgcG93ZXIgc3RhdGUgY2hhbmdlcywgbGlrZSB0aGUgcG93ZXIgbWFuYWdlcj8gRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZGV2aWNlJ3MgcnVudGltZSBQTSBmcmFtZXdvcmsuIERvZXMgaXQgaW50ZWdyYXRlIHdpdGggdGhvc2UgZnVuY3Rpb25hbGl0aWVzIGZvciBzeXN0ZW0gc3VzcGVuZC9yZXN1bWU/IFRoaXMgZnVuY3Rpb24sIGRlcGVuZGluZyBvbiBpdHMgcm9sZSwgaXMgYSBwb3RlbnRpYWwgaG90c3BvdCBmb3IgcG93ZXItcmVsYXRlZCBidWdzLCBzbyBJJ2xsIHdhbnQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGRldGFpbHMuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2MDMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxOToxOS4wMDcyODQzNjJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjIxOTU4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX21oaV9zZXRfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0yODk9c3RhdGljIGNoYXIgKmF0aDEya19taGlfc3RhdGVfdG9fc3RyKGVudW0gYXRoMTJrX21oaV9zdGF0ZSBtaGlfc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTMxNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjMxNzpzdGF0aWMgdm9pZCBhdGgxMmtfbWhpX3NldF9zdGF0ZV9iaXQoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTMxOC1cXHRcXHRcXHRcXHQgICAgIGVudW0gYXRoMTJrX21oaV9zdGF0ZSBtaGlfc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTM1Nj1zdGF0aWMgaW50IGF0aDEya19taGlfY2hlY2tfc3RhdGVfYml0KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQwNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQwNjpzdGF0aWMgaW50IGF0aDEya19taGlfc2V0X3N0YXRlKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00MDctXFx0XFx0XFx0XFx0ZW51bSBhdGgxMmtfbWhpX3N0YXRlIG1oaV9zdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDcyOlxcdGF0aDEya19taGlfc2V0X3N0YXRlX2JpdChhYl9wY2ksIG1oaV9zdGF0ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00NzMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTQ4Mj1pbnQgYXRoMTJrX21oaV9zdGFydChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00ODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0ODg6XFx0cmV0ID0gYXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX0lOSVQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDg5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ5MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQ5MjpcXHRyZXQgPSBhdGgxMmtfbWhpX3NldF9zdGF0ZShhYl9wY2ksIEFUSDEyS19NSElfUE9XRVJfT04pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDkzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTUwMj12b2lkIGF0aDEya19taGlfc3RvcChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLCBib29sIGlzX3N1c3BlbmQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUwOC1cXHRpZiAoaXNfc3VzcGVuZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjUwOTpcXHRcXHRhdGgxMmtfbWhpX3NldF9zdGF0ZShhYl9wY2ksIEFUSDEyS19NSElfUE9XRVJfT0ZGX0tFRVBfREVWKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUxMC1cXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo1MTE6XFx0XFx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1BPV0VSX09GRik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy01MTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo1MTM6XFx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX0RFSU5JVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy01MTQtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz01MTY9dm9pZCBhdGgxMmtfbWhpX3N1c3BlbmQoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUxNy17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo1MTg6XFx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1NVU1BFTkQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNTE5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NTIxPXZvaWQgYXRoMTJrX21oaV9yZXN1bWUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUyMi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo1MjM6XFx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1JFU1VNRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy01MjQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxOToyMC42Mjk0ODk1OTlaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2NTA2NzM2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjozMzA5NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6MzIuMjgwMTY3MjA5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc0Mjg2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX21oaV9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTQwNj1zdGF0aWMgaW50IGF0aDEya19taGlfc2V0X3N0YXRlKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQ4MjppbnQgYXRoMTJrX21oaV9zdGFydChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmg9MjA9ZW51bSBhdGgxMmtfbWhpX3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaDozNDppbnQgYXRoMTJrX21oaV9zdGFydChzdHJ1Y3QgYXRoMTJrX3BjaSAqYXJfcGNpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oLTM1LXZvaWQgYXRoMTJrX21oaV9zdG9wKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2ksIGJvb2wgaXNfc3VzcGVuZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE0MjQ9aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0NDM6XFx0cmV0ID0gYXRoMTJrX21oaV9zdGFydChhYl9wY2kpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0NC1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE5OjMyLjg4NzYwNTIzNloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjY5NTk5ODczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjMzNjA0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxOTo0OS41ODM2MDYyMTJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzQ2MTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX3Bvd2VyX3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTMxMj1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NvcmVkdW1wX2Rvd25sb2FkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0MjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDI0OmludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQ3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19oaWZfb3BzIGF0aDEya19wY2lfaGlmX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ4NC1cXHQucG93ZXJfZG93biA9IGF0aDEya19wY2lfcG93ZXJfZG93bixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0ODU6XFx0LnBvd2VyX3VwID0gYXRoMTJrX3BjaV9wb3dlcl91cCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0ODYtXFx0LnN1c3BlbmQgPSBhdGgxMmtfcGNpX2hpZl9zdXNwZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzQ9aW50IGF0aDEya19wY2lfc3RhcnQoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzU6aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzYtdm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6NTAuMTQxMDcyOTMxWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MDg0Mzc2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGRlZXBseSBmYW1pbGlhciB3aXRoIHdpcmVsZXNzIGRyaXZlcnMgYW5kIHRoZSBhdGgxMmsgaW4gcGFydGljdWxhcjpcblxuKipQb3dlcmluZyBVcCB0aGUgYXRoMTJrIFBDSSBEZXZpY2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYGF0aDEya19wY2lfcG93ZXJfdXBgIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBUaGF0J3MgZ29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3QuIEJ1dCBpdCdzIGNhbGxlZCB0aHJvdWdoIGBoaWZfb3BzLVx1MDAzZXBvd2VyX3VwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4sIHRoZSBjb250ZXh0LCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgaGlmX29wcy1cdTAwM2Vwb3dlcl91cGAgdG8gZmluZCBvdXQgKndoZXJlKiB0aGF0IGNhbGwgaXMgaGFwcGVuaW5nLiBJcyBpdCB0cmlnZ2VyZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCByZXN1bWUgZnJvbSBzdXNwZW5kLCBvciBtYXliZSBldmVuIGEgZHluYW1pYyBwb3dlciBtYW5hZ2VtZW50IGV2ZW50PyBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzIHdpbGwgZ2l2ZSBtZSBhIGh1Z2UgYW1vdW50IG9mIGNvbnRleHQuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgYGhpZl9vcHNgIHN0cnVjdHVyZSBkZWZpbml0aW9uIGl0c2VsZiwgYW5kIHRoZW4gdHJhY2UgZnJvbSB0aGUgYXNzaWdubWVudCBvZiB0aGF0IHN0cnVjdHVyZSBiYWNrIHRocm91Z2ggdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHN1c3BlY3QgaXQgd2lsbCBiZSBsaW5rZWQgdG8gcGxhdGZvcm0gb3IgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBJIGJldCB0aGUgYW5zd2VycyBsaWUgaW4gdGhvc2UgYXJlYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6NTcuNzQ5NTEzNDE0WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk1MzAzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG93ZXJfdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oPTEyPXN0cnVjdCBhdGgxMmtfaGlmX29wcyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTE4LVxcdHZvaWQgKCpzdG9wKShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oOjE5OlxcdGludCAoKnBvd2VyX3VwKShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTIwLVxcdHZvaWQgKCpwb3dlcl9kb3duKShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIGlzX3N1c3BlbmQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaD0xMzA9c3RhdGljIGlubGluZSB2b2lkIGF0aDEya19oaWZfd3JpdGUzMihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MzIgYWRkcmVzcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTM2OnN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19oaWZfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTEzNy17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxMzg6XFx0aWYgKCFhYi1cXHUwMDNlaGlmLm9wcy1cXHUwMDNlcG93ZXJfdXApXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xMzktXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTQxOlxcdHJldHVybiBhYi1cXHUwMDNlaGlmLm9wcy1cXHUwMDNlcG93ZXJfdXAoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTQyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6NTcuOTY5MDQ5OVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjEwNDY1ODM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGF0aDEyayBEcml2ZXIgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5Pa2F5LCBzbyBgYXRoMTJrX2hpZl9wb3dlcl91cGAgZ2V0cyBjYWxsZWQgZnJvbSBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBzdGFydC4gTGV0J3MgdHJhY2UgaXQuLi4gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGZpcnN0IGluaXRpYWxpemVzIHRoZSBRTUkgc2VydmljZSBhbmQgY3JlYXRlcyBhIGRlYnVnZnMgZW50cnkuIFRoZW4sIGl0IGNhbGxzIGBhdGgxMmtfaGlmX3Bvd2VyX3VwYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBhdGgxMmtfaGlmX3Bvd2VyX3VwYCBldmVudHVhbGx5IGhpdHMgYGF0aDEya19wY2lfcG93ZXJfdXBgLCB3aGljaCBnb2VzIGRvd24gdG8gYGF0aDEya19taGlfc3RhcnRgLCBhbmQgZmluYWxseSBgbWhpX3N5bmNfcG93ZXJfdXBgLlxuXG5UaGUga2V5IHRoaW5nIGlzIGBtaGlfc3luY19wb3dlcl91cGAg4oCTIHRoYXQncyB0aGUgYmxvY2tlci4gSXQgd2FpdHMgZm9yIHRoZSBNSEkgZGV2aWNlIHRvIHJlYWNoIHRoZSBNMCBzdGF0ZSwgZXNzZW50aWFsbHkgd2FpdGluZyBmb3IgdGhlIGZpcm13YXJlIHRvIGxvYWQgYW5kIHJ1bi4gSWYgdGhlIGhhcmR3YXJlIGlzbid0IGFjdHVhbGx5IHRoZXJlLCBvciB0aGVyZSdzIHNvbWUgTUhJLWxldmVsIHByb2JsZW0sIGBtaGlfc3luY19wb3dlcl91cGAgZmFpbHMsIGNhdXNpbmcgYGF0aDEya19oaWZfcG93ZXJfdXBgIHRvIGZhaWwsIGFuZCBjb25zZXF1ZW50bHksIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCB0byBmYWlsLiBUaGlzIHRoZW4gYnViYmxlcyB1cCBhbmQgbGVhZHMgdG8gZmFpbHVyZSBpbiBgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlYCwgYW5kIGV2ZW50dWFsbHkgYGF0aDEya19jb3JlX2luaXRgLCBhbGwgdGhlIHdheSB0byBhIGZhaWxlZCBgYXRoMTJrX3BjaV9wcm9iZWAuXG5cbkJ1dC4uLiBJIHNlZSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBoZXJlLiBIb2xkIG9uLi4uIEkganVzdCByZWFsaXplZCB0aGUgUU1JIHNlcnZpY2UgaXMgaW5pdGlhbGl6ZWQgKmJlZm9yZSogYGF0aDEya19oaWZfcG93ZXJfdXBgLiBUaGF0IG1lYW5zIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAgaXMgY2FsbGVkICpiZWZvcmUqIHRoZSBoYXJkd2FyZSBwb3dlci11cCBzZXF1ZW5jZSwgYW5kIGl0IHNldHMgdXAgdGhlIFFNSSBjbGllbnQuIFRoaXMgc3VnZ2VzdHMgdGhhdCBpZiBzeXprYWxsZXIgaXMgZW11bGF0aW5nIHRoZSBRTUkgc2VydmljZSAobGlrZSB3aXRoIEFGX1FJUENSVFIpIGFuZCBhZHZlcnRpc2VzIGl0c2VsZiAqYmVmb3JlIG9yIGR1cmluZyogYGF0aDEya19wY2lfcHJvYmVgLCB0aGVuIHRoZSBgbmV3X3NlcnZlcmAgY2FsbGJhY2sgKGBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyYCkgKmNvdWxkKiBiZSB0cmlnZ2VyZWQgYXN5bmNocm9ub3VzbHkhXG5cblRoZSBjYWxsYmFjayB3b3VsZCB0aGVuIHBvc3QgYEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0FSUklWRWAgdG8gdGhlIGBldmVudF93cWAgd29ya3F1ZXVlLiBUaGUgYGV2ZW50X3dxYCB3b3JrcXVldWUgd291bGQgZXhlY3V0ZSBgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29ya2AsIHdoaWNoIGNhbGxzIGBhdGgxMmtfcW1pX2V2ZW50X3NlcnZlcl9hcnJpdmVgLiBJbnNpZGUgYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdCBoYXBwZW5zLCBuYW1lbHksIGEgY2FsbCB0byBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoYWIpYC5cblxuVGhpcyBtZWFucyBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIGlzICpyZWFjaGFibGUqIGV2ZW4gaWYgYG1oaV9zeW5jX3Bvd2VyX3VwYCB1bHRpbWF0ZWx5IGZhaWxzISBUaGUgcG93ZXItdXAgc2VxdWVuY2UgYW5kIHRoZSBRTUkgY2xpZW50IGV2ZW50IGhhbmRsaW5nIHJ1biBjb25jdXJyZW50bHkhXG5cbkFuZCBoZXJlJ3MgdGhlIGtpY2tlcjogYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBzZW5kcyBhIFFNSSBtZXNzYWdlIHRvIHRoZSBRTUkgc2VydmVyLiBJZiBzeXprYWxsZXIgaXMgYWN0aW5nIGFzIHRoYXQgc2VydmVyLCBpdCB3aWxsIHJlY2VpdmUgdGhlIG1lc3NhZ2UgYW5kIGNhbiBnZW5lcmF0ZSBhIHJlc3BvbnNlLiBUaGlzIGNvbmN1cnJlbnQgbWVzc2FnZSBzZW5kaW5nIGlzIGltcG9ydGFudC4gSSBtdXN0IGludmVzdGlnYXRlIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzgwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjIwOjEwLjA3MzcxMDg5WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMjIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzIyOlxcdHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuMjMyMzpcXHR7XFxuMjMyNDpcXHRcXHRzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3JlcV9tc2dfdjAxIHJlcSA9IHt9O1xcbjIzMjU6XFx0XFx0c3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEgcmVzcCA9IHt9O1xcbjIzMjY6XFx0XFx0c3RydWN0IHFtaV90eG4gdHhuO1xcbjIzMjc6XFx0XFx0aW50IHJldDtcXG4yMzI4OlxcdFxcbjIzMjk6XFx0XFx0cmV0ID0gcW1pX3R4bl9pbml0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSwgXFx1MDAyNnR4bixcXG4yMzMwOlxcdFxcdFxcdFxcdCAgIHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDFfZWksIFxcdTAwMjZyZXNwKTtcXG4yMzMxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIzMzI6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMzMzpcXHRcXG4yMzM0OlxcdFxcdHJldCA9IHFtaV9zZW5kX3JlcXVlc3QoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBOVUxMLCBcXHUwMDI2dHhuLFxcbjIzMzU6XFx0XFx0XFx0XFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfVjAxLFxcbjIzMzY6XFx0XFx0XFx0XFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfTVNHX1YwMV9NQVhfTEVOLFxcbjIzMzc6XFx0XFx0XFx0XFx0ICAgICAgIHFtaV93bGFuZndfcGh5X2NhcF9yZXFfbXNnX3YwMV9laSwgXFx1MDAyNnJlcSk7XFxuMjMzODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjIzMzk6XFx0XFx0XFx0cW1pX3R4bl9jYW5jZWwoXFx1MDAyNnR4bik7XFxuMjM0MDpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBzZW5kIHBoeSBjYXBhYmlsaXR5IHJlcXVlc3Q6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjIzNDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM0MjpcXHRcXHR9XFxuMjM0MzpcXHRcXG4yMzQ0OlxcdFxcdHJldCA9IHFtaV90eG5fd2FpdChcXHUwMDI2dHhuLCBtc2Vjc190b19qaWZmaWVzKEFUSDEyS19RTUlfV0xBTkZXX1RJTUVPVVRfTVMpKTtcXG4yMzQ1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIzNDY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM0NzpcXHRcXG4yMzQ4OlxcdFxcdGlmIChyZXNwLnJlc3AucmVzdWx0ICE9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDEpIHtcXG4yMzQ5OlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbjIzNTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM1MTpcXHRcXHR9XFxuMjM1MjpcXHRcXG4yMzUzOlxcdFxcdGlmIChyZXNwLnNpbmdsZV9jaGlwX21sb19zdXBwb3J0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQpXFxuMjM1NDpcXHRcXHRcXHRhYi1cXHUwMDNlc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgPSB0cnVlO1xcbjIzNTU6XFx0XFxuMjM1NjpcXHRcXHRpZiAoIXJlc3AubnVtX3BoeV92YWxpZCkge1xcbjIzNTc6XFx0XFx0XFx0cmV0ID0gLUVOT0RBVEE7XFxuMjM1ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzU5OlxcdFxcdH1cXG4yMzYwOlxcdFxcbjIzNjE6XFx0XFx0YWItXFx1MDAzZXFtaS5udW1fcmFkaW9zID0gcmVzcC5udW1fcGh5O1xcbjIzNjI6XFx0XFxuMjM2MzpcXHRcXHRpZiAocmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKVxcbjIzNjQ6XFx0XFx0XFx0YWItXFx1MDAzZXFtaS5keW5hbWljX2Rkcl9zdXBwb3J0ID0gcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0O1xcbjIzNjU6XFx0XFxuMjM2NjpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSxcXG4yMzY3OlxcdFxcdFxcdCAgIFxcXCJwaHkgY2FwYWJpbGl0eSByZXNwIHZhbGlkICVkIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0ICVkIHZhbGlkICVkIG51bV9waHkgJWQgdmFsaWQgJWQgYm9hcmRfaWQgJWQgZHluYW1pY19kZHJfdmFsaWQgJXUgZHluYW1pY19kZHJfc3VwcG9ydCAldVxcXFxuXFxcIixcXG4yMzY4OlxcdFxcdFxcdCAgIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQsIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQsXFxuMjM2OTpcXHRcXHRcXHQgICByZXNwLm51bV9waHlfdmFsaWQsIHJlc3AubnVtX3BoeSwgcmVzcC5ib2FyZF9pZF92YWxpZCwgcmVzcC5ib2FyZF9pZCxcXG4yMzcwOlxcdFxcdFxcdCAgIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCwgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0KTtcXG4yMzcxOlxcdFxcbjIzNzI6XFx0XFx0cmV0dXJuO1xcbjIzNzM6XFx0XFxuMjM3NDpcXHRvdXQ6XFxuMjM3NTpcXHRcXHQvKiBJZiBQSFkgY2FwYWJpbGl0eSBub3QgYWR2ZXJ0aXNlZCB0aGVuIHJlbHkgb24gZGVmYXVsdCBudW0gbGluayAqL1xcbjIzNzY6XFx0XFx0YWItXFx1MDAzZXFtaS5udW1fcmFkaW9zID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlZGVmX251bV9saW5rO1xcbjIzNzc6XFx0XFxuMjM3ODpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSxcXG4yMzc5OlxcdFxcdFxcdCAgIFxcXCJubyB2YWxpZCByZXNwb25zZSBmcm9tIFBIWSBjYXBhYmlsaXR5LCBjaG9vc2UgZGVmYXVsdCBudW1fcGh5ICVkXFxcXG5cXFwiLFxcbjIzODA6XFx0XFx0XFx0ICAgYWItXFx1MDAzZXFtaS5udW1fcmFkaW9zKTtcXG4yMzgxOlxcdH1cXG4yMzgyOlxcdFxcbjIzODM6XFx0c3RhdGljIGludCBhdGgxMmtfcW1pX2Z3X2luZF9yZWdpc3Rlcl9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuMjM4NDpcXHR7XFxuMjM4NTpcXHRcXHRzdHJ1Y3QgcW1pX3dsYW5md19pbmRfcmVnaXN0ZXJfcmVxX21zZ192MDEgKnJlcTtcXG4yMzg2OlxcdFxcdHN0cnVjdCBxbWlfd2xhbmZ3X2luZF9yZWdpc3Rlcl9yZXNwX21zZ192MDEgKnJlc3A7XFxuMjM4NzpcXHRcXHRzdHJ1Y3QgcW1pX2hhbmRsZSAqaGFuZGxlID0gXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlO1xcbjIzODg6XFx0XFx0c3RydWN0IHFtaV90eG4gdHhuO1xcbjIzODk6XFx0XFx0aW50IHJldDtcXG4yMzkwOlxcdFxcbjIzOTE6XFx0XFx0cmVxID0ga3phbGxvY19vYmooKnJlcSk7XFxuMjM5MjpcXHRcXHRpZiAoIXJlcSlcXG4yMzkzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIzOTQ6XFx0XFxuMjM5NTpcXHRcXHRyZXNwID0ga3phbGxvY19vYmooKnJlc3ApO1xcbjIzOTY6XFx0XFx0aWYgKCFyZXNwKSB7XFxuMjM5NzpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjIzOTg6XFx0XFx0XFx0Z290byByZXNwX291dDtcXG4yMzk5OlxcdFxcdH1cXG4yNDAwOlxcdFxcbjI0MDE6XFx0XFx0cmVxLVxcdTAwM2VjbGllbnRfaWRfdmFsaWQgPSAxO1xcbjI0MDI6XFx0XFx0cmVxLVxcdTAwM2VjbGllbnRfaWQgPSBRTUlfV0xBTkZXX0NMSUVOVF9JRDtcXG4yNDAzOlxcdFxcdHJlcS1cXHUwMDNlZndfcmVhZHlfZW5hYmxlX3ZhbGlkID0gMTtcXG4yNDA0OlxcdFxcdHJlcS1cXHUwMDNlZndfcmVhZHlfZW5hYmxlID0gMTtcXG4yNDA1OlxcdFxcdHJlcS1cXHUwMDNlcmVxdWVzdF9tZW1fZW5hYmxlX3ZhbGlkID0gMTtcXG4yNDA2OlxcdFxcdHJlcS1cXHUwMDNlcmVxdWVzdF9tZW1fZW5hYmxlID0gMTtcXG4yNDA3OlxcdFxcdHJlcS1cXHUwMDNlZndfbWVtX3JlYWR5X2VuYWJsZV92YWxpZCA9IDE7XFxuMjQwODpcXHRcXHRyZXEtXFx1MDAzZWZ3X21lbV9yZWFkeV9lbmFibGUgPSAxO1xcbjI0MDk6XFx0XFx0cmVxLVxcdTAwM2VjYWxfZG9uZV9lbmFibGVfdmFsaWQgPSAxO1xcbjI0MTA6XFx0XFx0cmVxLVxcdTAwM2VjYWxfZG9uZV9lbmFibGUgPSAxO1xcbjI0MTE6XFx0XFx0cmVxLVxcdTAwM2Vmd19pbml0X2RvbmVfZW5hYmxlX3ZhbGlkID0gMTtcXG4yNDEyOlxcdFxcdHJlcS1cXHUwMDNlZndfaW5pdF9kb25lX2VuYWJsZSA9IDE7XFxuMjQxMzpcXHRcXG4yNDE0OlxcdFxcdHJlcS1cXHUwMDNlcGluX2Nvbm5lY3RfcmVzdWx0X2VuYWJsZV92YWxpZCA9IDA7XFxuMjQxNTpcXHRcXHRyZXEtXFx1MDAzZXBpbl9jb25uZWN0X3Jlc3VsdF9lbmFibGUgPSAwO1xcbjI0MTY6XFx0XFxuMjQxNzpcXHRcXHRyZXQgPSBxbWlfdHhuX2luaXQoaGFuZGxlLCBcXHUwMDI2dHhuLFxcbjI0MTg6XFx0XFx0XFx0XFx0ICAgcW1pX3dsYW5md19pbmRfcmVnaXN0ZXJfcmVzcF9tc2dfdjAxX2VpLCByZXNwKTtcXG4yNDE5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjI0MjA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjQyMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MjA6MTAuMDc0MTE5MDdaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQyNjA2MTY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGF0aDEyayBRTUkgQ2FwYWJpbGl0eSBFeGNoYW5nZSoqXG5cbk9rYXksIHNvIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgaXMgZGVmaW5pdGVseSBhIHJlcXVlc3QtcmVzcG9uc2UgZnVuY3Rpb247IGl0IHNlbmRzIGEgUU1JIG1lc3NhZ2UgYW5kIHRoZW4gd2FpdHMgZm9yIGEgcmVwbHkuIEknbSBpbWFnaW5pbmcgc3l6a2FsbGVyIGFzIHRoZSBRTUkgc2VydmVyIGhlcmUuIElmIHN5emthbGxlciByZXBsaWVzIHRvIHRoaXMgY2FwYWJpbGl0eSBleGNoYW5nZSwgaXQgY2FuIHNldCBib3RoIGBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkYCBhbmQgYGR5bmFtaWNfZGRyX3N1cHBvcnRgIHRvIDEuIFRoYXQgd291bGQgdHJpZ2dlciBgYWItXHUwMDNlcW1pLmR5bmFtaWNfZGRyX3N1cHBvcnRgIHRvIGJlIHNldCB0byAxLlxuXG5UaGVuLCB0aGUgY29kZSBqdW1wcyBpbnRvIGBhdGgxMmtfcW1pX2V2ZW50X3NlcnZlcl9hcnJpdmVgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBraWNrcyBpbiB3aGVuIGBhdGgxMmtfcW1pX2h3X2dyb3VwX2hvc3RfY2FwX3JlYWR5KGFnKWAgcmV0dXJucyB0cnVlLiBJbiB0aGF0IGNhc2UsIGBhdGgxMmtfY29yZV9od19ncm91cF9zZXRfbWxvX2NhcGFibGUoYWcpYCBpcyBjYWxsZWQsIGFuZCB0aGVuIHRoZXJlJ3MgYSBjaGVjayBmb3IgYSBibG9ja2VkIGBhdGgxMmtfcW1pX2h3X2dyb3VwX2ZpbmRfYmxvY2tlZChhZylgLiBJZiB0aGVyZSBpcyBhIGJsb2NrZWQgZ3JvdXAsIHRoZW4gaXQgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gYGF0aDEya19xbWlfdHJpZ2dlcl9ob3N0X2NhcChibG9ja19hYilgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgdHJpZ2dlcmluZyBgQVRIMTJLX1FNSV9FVkVOVF9IT1NUX0NBUGAsIHdoaWNoIHRoZW4ga2lja3Mgb2ZmIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIGRpZyBpbnRvIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIG5vdyBhbmQgc2VlIHdoYXQgaXQncyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA3OTIsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToyMDoxOC41MDAxODQ3MjZaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI4NCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyODQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjI4NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjg2OlxcdFxcbjIyODc6XFx0XFx0aWYgKGFiLVxcdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydCkge1xcbjIyODg6XFx0XFx0XFx0cmVxLmR5bmFtaWNfbWVtX3N1cHBvcnRfdmFsaWQgPSAxO1xcbjIyODk6XFx0XFx0XFx0cmVxLmR5bmFtaWNfbWVtX3N1cHBvcnQgPSAxO1xcbjIyOTA6XFx0XFx0fVxcbjIyOTE6XFx0XFxuMjI5MjpcXHRcXHRyZXQgPSBxbWlfdHhuX2luaXQoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBcXHUwMDI2dHhuLFxcbjIyOTM6XFx0XFx0XFx0XFx0ICAgcW1pX3dsYW5md19ob3N0X2NhcF9yZXNwX21zZ192MDFfZWksIFxcdTAwMjZyZXNwKTtcXG4yMjk0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIyOTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjI5NjpcXHRcXG4yMjk3OlxcdFxcdHJldCA9IHFtaV9zZW5kX3JlcXVlc3QoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBOVUxMLCBcXHUwMDI2dHhuLFxcbjIyOTg6XFx0XFx0XFx0XFx0ICAgICAgIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX1YwMSxcXG4yMjk5OlxcdFxcdFxcdFxcdCAgICAgICBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9NU0dfVjAxX01BWF9MRU4sXFxuMjMwMDpcXHRcXHRcXHRcXHQgICAgICAgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMV9laSwgXFx1MDAyNnJlcSk7XFxuMjMwMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjIzMDI6XFx0XFx0XFx0cW1pX3R4bl9jYW5jZWwoXFx1MDAyNnR4bik7XFxuMjMwMzpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcIkZhaWxlZCB0byBzZW5kIGhvc3QgY2FwYWJpbGl0eSByZXF1ZXN0LGVyciA9ICVkXFxcXG5cXFwiLCByZXQpO1xcbjIzMDQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMwNTpcXHRcXHR9XFxuMjMwNjpcXHRcXG4yMzA3OlxcdFxcdHJldCA9IHFtaV90eG5fd2FpdChcXHUwMDI2dHhuLCBtc2Vjc190b19qaWZmaWVzKEFUSDEyS19RTUlfV0xBTkZXX1RJTUVPVVRfTVMpKTtcXG4yMzA4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIzMDk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMxMDpcXHRcXG4yMzExOlxcdFxcdGlmIChyZXNwLnJlc3AucmVzdWx0ICE9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDEpIHtcXG4yMzEyOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiSG9zdCBjYXBhYmlsaXR5IHJlcXVlc3QgZmFpbGVkLCByZXN1bHQ6ICVkLCBlcnI6ICVkXFxcXG5cXFwiLFxcbjIzMTM6XFx0XFx0XFx0XFx0ICAgIHJlc3AucmVzcC5yZXN1bHQsIHJlc3AucmVzcC5lcnJvcik7XFxuMjMxNDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjIzMTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMxNjpcXHRcXHR9XFxuMjMxNzpcXHRcXG4yMzE4OlxcdG91dDpcXG4yMzE5OlxcdFxcdHJldHVybiByZXQ7XFxuMjMyMDpcXHR9XFxuMjMyMTpcXHRcXG4yMzIyOlxcdHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuMjMyMzpcXHR7XFxuMjMyNDpcXHRcXHRzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3JlcV9tc2dfdjAxIHJlcSA9IHt9O1xcbjIzMjU6XFx0XFx0c3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEgcmVzcCA9IHt9O1xcbjIzMjY6XFx0XFx0c3RydWN0IHFtaV90eG4gdHhuO1xcbjIzMjc6XFx0XFx0aW50IHJldDtcXG4yMzI4OlxcdFxcbjIzMjk6XFx0XFx0cmV0ID0gcW1pX3R4bl9pbml0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSwgXFx1MDAyNnR4bixcXG4yMzMwOlxcdFxcdFxcdFxcdCAgIHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDFfZWksIFxcdTAwMjZyZXNwKTtcXG4yMzMxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIzMzI6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMzMzpcXHRcXG4yMzM0OlxcdFxcdHJldCA9IHFtaV9zZW5kX3JlcXVlc3QoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBOVUxMLCBcXHUwMDI2dHhuLFxcbjIzMzU6XFx0XFx0XFx0XFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfVjAxLFxcbjIzMzY6XFx0XFx0XFx0XFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfTVNHX1YwMV9NQVhfTEVOLFxcbjIzMzc6XFx0XFx0XFx0XFx0ICAgICAgIHFtaV93bGFuZndfcGh5X2NhcF9yZXFfbXNnX3YwMV9laSwgXFx1MDAyNnJlcSk7XFxuMjMzODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjIzMzk6XFx0XFx0XFx0cW1pX3R4bl9jYW5jZWwoXFx1MDAyNnR4bik7XFxuMjM0MDpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBzZW5kIHBoeSBjYXBhYmlsaXR5IHJlcXVlc3Q6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjIzNDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM0MjpcXHRcXHR9XFxuMjM0MzpcXHRcXG4yMzQ0OlxcdFxcdHJldCA9IHFtaV90eG5fd2FpdChcXHUwMDI2dHhuLCBtc2Vjc190b19qaWZmaWVzKEFUSDEyS19RTUlfV0xBTkZXX1RJTUVPVVRfTVMpKTtcXG4yMzQ1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIzNDY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM0NzpcXHRcXG4yMzQ4OlxcdFxcdGlmIChyZXNwLnJlc3AucmVzdWx0ICE9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDEpIHtcXG4yMzQ5OlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbjIzNTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM1MTpcXHRcXHR9XFxuMjM1MjpcXHRcXG4yMzUzOlxcdFxcdGlmIChyZXNwLnNpbmdsZV9jaGlwX21sb19zdXBwb3J0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQpXFxuMjM1NDpcXHRcXHRcXHRhYi1cXHUwMDNlc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgPSB0cnVlO1xcbjIzNTU6XFx0XFxuMjM1NjpcXHRcXHRpZiAoIXJlc3AubnVtX3BoeV92YWxpZCkge1xcbjIzNTc6XFx0XFx0XFx0cmV0ID0gLUVOT0RBVEE7XFxuMjM1ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzU5OlxcdFxcdH1cXG4yMzYwOlxcdFxcbjIzNjE6XFx0XFx0YWItXFx1MDAzZXFtaS5udW1fcmFkaW9zID0gcmVzcC5udW1fcGh5O1xcbjIzNjI6XFx0XFxuMjM2MzpcXHRcXHRpZiAocmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKVxcbjIzNjQ6XFx0XFx0XFx0YWItXFx1MDAzZXFtaS5keW5hbWljX2Rkcl9zdXBwb3J0ID0gcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0O1xcbjIzNjU6XFx0XFxuMjM2NjpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSxcXG4yMzY3OlxcdFxcdFxcdCAgIFxcXCJwaHkgY2FwYWJpbGl0eSByZXNwIHZhbGlkICVkIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0ICVkIHZhbGlkICVkIG51bV9waHkgJWQgdmFsaWQgJWQgYm9hcmRfaWQgJWQgZHluYW1pY19kZHJfdmFsaWQgJXUgZHluYW1pY19kZHJfc3VwcG9ydCAldVxcXFxuXFxcIixcXG4yMzY4OlxcdFxcdFxcdCAgIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQsIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQsXFxuMjM2OTpcXHRcXHRcXHQgICByZXNwLm51bV9waHlfdmFsaWQsIHJlc3AubnVtX3BoeSwgcmVzcC5ib2FyZF9pZF92YWxpZCwgcmVzcC5ib2FyZF9pZCxcXG4yMzcwOlxcdFxcdFxcdCAgIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCwgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0KTtcXG4yMzcxOlxcdFxcbjIzNzI6XFx0XFx0cmV0dXJuO1xcbjIzNzM6XFx0XFxuMjM3NDpcXHRvdXQ6XFxuMjM3NTpcXHRcXHQvKiBJZiBQSFkgY2FwYWJpbGl0eSBub3QgYWR2ZXJ0aXNlZCB0aGVuIHJlbHkgb24gZGVmYXVsdCBudW0gbGluayAqL1xcbjIzNzY6XFx0XFx0YWItXFx1MDAzZXFtaS5udW1fcmFkaW9zID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlZGVmX251bV9saW5rO1xcbjIzNzc6XFx0XFxuMjM3ODpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSxcXG4yMzc5OlxcdFxcdFxcdCAgIFxcXCJubyB2YWxpZCByZXNwb25zZSBmcm9tIFBIWSBjYXBhYmlsaXR5LCBjaG9vc2UgZGVmYXVsdCBudW1fcGh5ICVkXFxcXG5cXFwiLFxcbjIzODA6XFx0XFx0XFx0ICAgYWItXFx1MDAzZXFtaS5udW1fcmFkaW9zKTtcXG4yMzgxOlxcdH1cXG4yMzgyOlxcdFxcbjIzODM6XFx0c3RhdGljIGludCBhdGgxMmtfcW1pX2Z3X2luZF9yZWdpc3Rlcl9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjIwOjE4LjUwMDUwODgxN1oiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDIxMTQ3MTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBpbiBhIFN5emthbGxlciBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHRoZSBjb2RlIHBhdGggd2hlcmUgaXQgc2VuZHMgYSByZXF1ZXN0IHdpdGggYGR5bmFtaWNfbWVtX3N1cHBvcnRfdmFsaWQgPSAxYCBhbmQgYGR5bmFtaWNfbWVtX3N1cHBvcnQgPSAxYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBzZXR0aW5nIG9mIGBhYi1cdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydGAuIFRoYXQncyB0aGF0IHBhdGNoJ3MgZG9pbmcsIHNvIHRoYXQgcGFydCBpcyBjbGVhci5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgKmNhbiogd2UgaGl0IHRoaXMgY29kZSB3aXRoIHN5emthbGxlcj8gVGhlIGNydWNpYWwgZmFjdG9yIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgUU1JIHNlcnZlciB0aHJvdWdoIGl0cyBJUEMgcm91dGVyLiBJZiBpdCBjYW4sIHdlJ3JlIGluIGJ1c2luZXNzLiBNeSBtZW1vcnkgdGVsbHMgbWUgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHN1cHBvcnQgZm9yIEFGX1FJUENSVFIgc29ja2V0cyDigJMgaXQgY2FuIGJpbmQgdG8gdGhlbSwgYWR2ZXJ0aXNlIHNlcnZpY2VzLCBhbmQgaGFuZGxlIGJvdGggaW5jb21pbmcgYW5kIG91dGdvaW5nIG1lc3NhZ2VzLiBTbywgYmFzZWQgb24gdGhhdCwgdGhlIGFuc3dlciBpcyAqbGlrZWx5KiB5ZXMsIHdlIGNhbiBlbXVsYXRlIHRoaXMuXG5cbkhvd2V2ZXIsIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgYGF0aDEya2AuIEl0IHdvdWxkbid0IGRvIHRvIGFzc3VtZS4gRG9lcyBgYXRoMTJrYCByZXF1aXJlIGBDT05GSUdfQVRIMTJLYD8gWWVzLCBvZiBjb3Vyc2UuIEFuZCBgQ09ORklHX1FSVFJgPyBJIGJlbGlldmUgc28sIGFuZCB5ZXMsIGl0IGxvb2tzIGxpa2UgYGF0aDEya2AgZGVwZW5kcyBvbiBgUVJUUmAuIE9rYXksIGdvb2QuIEnigJlsbCBtYWtlIGEgbm90ZSB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIGZvciBgYXRoMTJrYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSdtIG5vdCBtaXNzaW5nIGFueSBkZXBlbmRlbmN5IGRldGFpbHMuIFRoaXMgbG9va3MgcHJvbWlzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI2NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjIwOjI4LjcxMTk4NDI3NloiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5NjAzNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEgxMktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjI6Y29uZmlnIEFUSDEyS1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBXaS1GaSA3IHN1cHBvcnQgKGF0aDEyaylcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjE3OmNvbmZpZyBBVEgxMktfQUhCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0yNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjU6Y29uZmlnIEFUSDEyS19ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJhdGgxMmsgZGVidWdnaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzozNTpjb25maWcgQVRIMTJLX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiUXVhbGNvbW0gYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NDQ6Y29uZmlnIEFUSDEyS19UUkFDSU5HXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ1LVxcdGJvb2wgXFxcImF0aDEyayB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjUzOmNvbmZpZyBBVEgxMktfQ09SRURVTVBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTQtXFx0Ym9vbCBcXFwiYXRoMTJrIGNvcmVkdW1wXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToyMDoyOS4zMjE1OTUyMzRaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxNzc0OTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBkZWVwIGluIGtlcm5lbCBkZXZlbG9wbWVudCBvciBlbWJlZGRlZCBzeXN0ZW1zOlxuXG4qKkluaXRpYWwgS2NvbmZpZyBSZXZpZXcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSwgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBvciBzdWJzeXN0ZW0uIEknbSBsb29raW5nIGZvciB0aGUga2V5IHZhcmlhYmxlcywgdGhlIGJvb2xlYW4sIHRyaXN0YXRlLCBhbmQgaW50ZWdlciBvcHRpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEl0J3MgYWJvdXQgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHRoZSBwb3NzaWJsZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gYW50aWNpcGF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHNlbGVjdGluZyBzcGVjaWZpYyBmZWF0dXJlcywgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB0aGUgcmVzdWx0aW5nIGtlcm5lbCBpbWFnZSBzaXplLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzYzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToyMDozNC44MzkzNDczOFoiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0Y29uZmlnIEFUSDEyS1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQSBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gICA1OlxcdFxcdHNlbGVjdCBRQ09NX1FNSV9IRUxQRVJTXFxuICAgNjpcXHRcXHRzZWxlY3QgTUhJX0JVU1xcbiAgIDc6XFx0XFx0c2VsZWN0IFFSVFJcXG4gICA4OlxcdFxcdHNlbGVjdCBRUlRSX01ISVxcbiAgIDk6XFx0XFx0c2VsZWN0IFBDSV9QV1JDVFJMX1BXUlNFUSBpZiBIQVZFX1BXUkNUUkxcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyBXaS1GaSA3IChJRUVFXFxuICAxMjpcXHRcXHQgIDgwMi4xMWJlKSBmYW1pbHkgb2YgY2hpcHNldHMsIGZvciBleGFtcGxlIFdDTjc4NTAgYW5kXFxuICAxMzpcXHRcXHQgIFFDTjkyNzQuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDEyay5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFUSDEyS19BSEJcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IFJFTU9URVBST0NcXG4gIDIwOlxcdFxcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcXG4gIDIxOlxcdFxcdHNlbGVjdCBRQ09NX1NDTVxcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgQXRoMTJrIEFIQiBidXMgY2hpcHNldHMsIGV4YW1wbGUgSVBRNTMzMi5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIEFUSDEyS19ERUJVR1xcbiAgMjY6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIGRlYnVnZ2luZ1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIEVuYWJsZSBkZWJ1ZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSBkZWJ1ZyBtZXNzYWdlcyB3aGljaCBtdXN0XFxuICAzMDpcXHRcXHQgIGJlIGVuYWJsZWQgc2VwYXJhdGVseSB1c2luZyB0aGUgZGVidWdfbWFzayBtb2R1bGUgcGFyYW1ldGVyLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgMzM6XFx0XFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgQVRIMTJLX0RFQlVHRlNcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEFUSDEySyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9ERUJVR0ZTXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXFxuICA0MjpcXHRcXHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBBVEgxMktfVFJBQ0lOR1xcbiAgNDU6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IEVWRU5UX1RSQUNJTkdcXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgRW5hYmxlIGF0aDEyayB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgNTE6XFx0XFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRjb25maWcgQVRIMTJLX0NPUkVEVU1QXFxuICA1NDpcXHRcXHRib29sIFxcXCJhdGgxMmsgY29yZWR1bXBcXFwiXFxuICA1NTpcXHRcXHRkZXBlbmRzIG9uIEFUSDEyS1xcbiAgNTY6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICA1NzpcXHRcXHRoZWxwXFxuICA1ODpcXHRcXHQgIEVuYWJsZSBhdGgxMmsgY29yZWR1bXAgY29sbGVjdGlvblxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgNjE6XFx0XFx0ICBkdW1wIGNvbGxlY3Rpb24gbm90IHJlcXVpcmVkIGNob29zZSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToyMDozNC44Mzk0NzQ0NFoiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODQxNDEyMTA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQVRIMTJLIFFNSSBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgQVRIMTJLYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHdlIG5lZWQgdG8gZW5hYmxlIHRvIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUuIEl0IGRlcGVuZHMgb24gYE1BQzgwMjExYCwgYEhBU19ETUFgLCBhbmQgYFBDSWAsIHdoaWNoIGFyZSBzdGFuZGFyZCByZXF1aXJlbWVudHMgZm9yIHRoaXMga2luZCBvZiB3aXJlbGVzcyBkcml2ZXIuIE1vcmUgaW1wb3J0YW50bHksIGl0IHNlbGVjdHMgYSBzZXQgb2YgY3J1Y2lhbCBzdWJzeXN0ZW1zLCBuYW1lbHkgYFFDT01fUU1JX0hFTFBFUlNgLCBgTUhJX0JVU2AsIGBRUlRSYCwgYW5kIGBRUlRSX01ISWAuIFRoZXNlIGFyZSBhbGwgcG9pbnRlcnMgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuVGhlIGtleSBoZXJlIGlzIHRoYXQgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZS4gQnkgYWRkaW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlLCB3ZSBjYW4gdHJpZ2dlciBgYXRoMTJrX3BjaV9wcm9iZWAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoZW4gZW11bGF0ZSB0aGUgUU1JIHNlcnZlciB1c2luZyBgQUZfUUlQQ1JUUmAgc29ja2V0cy4gVGhhdCdzIHRoZSBjcnVjaWFsIGJpdC5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIHR3byBzcGVjaWZpYyBmdW5jdGlvbnM6IGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGFuZCBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgLiBUaGVzZSBhcmUgdGhlIG9uZXMgd2hlcmUgdGhlIG5ldyBmaWVsZHMgcmVsYXRlZCB0byBkeW5hbWljIEREUiBhbmQgbWVtb3J5IHN1cHBvcnQgYXJlIGJlaW5nIHVzZWQuIFRoZXkncmUgc2VuZGluZyBRTUkgcmVxdWVzdHMgYW5kIHdhaXRpbmcgZm9yIHRoZSBmaXJtd2FyZSdzIHJlc3BvbnNlcy4gU2luY2UgdGhlIHBhdGNoIGFkZHMgbmV3IGBkeW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkYCwgYGR5bmFtaWNfbWVtX3N1cHBvcnRgLCBgZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZGAsIGFuZCBgZHluYW1pY19kZHJfc3VwcG9ydGAgZmllbGRzIHRvIHRoZSBRTUkgbWVzc2FnZXMsIHRoZSBwYXRjaCBpcyBpbmRlZWQgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHVuZGVyIHRoZSByaWdodCBjb25kaXRpb25zLiBUaGF0J3MgZXhjZWxsZW50LCBpdCBpcyB3b3J0aCBmdXp6aW5nLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcGF0Y2ggZGlmZiwgYW5kIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSB0aGUgb25lcyBiZWluZyBjYWxsZWQgaW4gYHFtaS5jYCwgYW5kIHRoZSBRTUkgZnJhbWV3b3JrIGluZGVlZCB1c2VzIHRoZSBwYXRjaGVkIGFycmF5cyB3aGVuIGBxbWlfc2VuZF9yZXF1ZXN0YCBhbmQgYHFtaV90eG5fd2FpdGAgYXJlIGNhbGxlZC5cblxuU3BlY2lmaWNhbGx5LCBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBpcyAqbm90KiBzdGF0aWMsIHNvIGl0J3MgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgYW5kIHRoZSBvdGhlciBvbmUgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBpcyBzdGF0aWMgd2hpY2ggaXMgYWxzbyBmaW5lLiBUaGF0IGlzIHBlcmZlY3QuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR5bmFtaWMgRERSIGFuZCBtZW1vcnkgaW4gdGhlIGF0aDEyayBkcml2ZXIncyBRTUkgY29tbXVuaWNhdGlvbi4gSXQgbW9kaWZpZXMgdGhlIFFNSSBtZXNzYWdlIGVuY29kaW5nL2RlY29kaW5nIGFycmF5cyBhbmQgZnVuY3Rpb25zIHRvIHNldCBhbmQgcmVhZCB0aGVzZSBuZXcgZmllbGRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHdoZW4gYSBRTUkgc2VydmVyIGFycml2ZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGlzIGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgYW5kIHRoZSBRTUkgZmlybXdhcmUgc2VydmljZS5cblxuVGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGlzIGBBVEgxMktgLiBXaGlsZSBgUVJUUmAgYW5kIGBRQ09NX1FNSV9IRUxQRVJTYCBhcmUgc2VsZWN0ZWQgYnkgYEFUSDEyS2AgYW5kIHdlIGRvbid0IHN0cmljdGx5IG5lZWQgdG8gbGlzdCB0aGVtLCBidXQgaXQgZG9lc24ndCBodXJ0LiBCdXQsIGVuYWJsaW5nIGBBVEgxMktgIHNob3VsZCBiZSBlbm91Z2guXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpbmRpbmcuIEknbSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU0MjUsIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjIwOjUzLjI1MzU5OTU3MVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTA3NTg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kXCIsXG4gICAgXCJhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHluYW1pYyBERFIgYW5kIG1lbW9yeSBzdXBwb3J0IGluIHRoZSBhdGgxMmsgZHJpdmVyJ3MgUU1JIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUuIEl0IG1vZGlmaWVzIHRoZSBRTUkgbWVzc2FnZSBlbmNvZGluZy9kZWNvZGluZyBhcnJheXMgYW5kIHRoZSBmdW5jdGlvbnMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgdG8gc2V0IGFuZCByZWFkIHRoZXNlIG5ldyBmaWVsZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gd2hlbiBhIFFNSSBzZXJ2ZXIgKGZpcm13YXJlKSBhcnJpdmVzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhpcyBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRvIHByb2JlIHRoZSBhdGgxMmsgZHJpdmVyIGFuZCBlbXVsYXRpbmcgdGhlIFFNSSBmaXJtd2FyZSBzZXJ2aWNlIHZpYSBBRl9RSVBDUlRSIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kXCIsXG4gICAgXCJhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHluYW1pYyBERFIgYW5kIG1lbW9yeSBzdXBwb3J0IGluIHRoZSBhdGgxMmsgZHJpdmVyJ3MgUU1JIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUuIEl0IG1vZGlmaWVzIHRoZSBRTUkgbWVzc2FnZSBlbmNvZGluZy9kZWNvZGluZyBhcnJheXMgYW5kIHRoZSBmdW5jdGlvbnMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgdG8gc2V0IGFuZCByZWFkIHRoZXNlIG5ldyBmaWVsZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gd2hlbiBhIFFNSSBzZXJ2ZXIgKGZpcm13YXJlKSBhcnJpdmVzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhpcyBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRvIHByb2JlIHRoZSBhdGgxMmsgZHJpdmVyIGFuZCBlbXVsYXRpbmcgdGhlIFFNSSBmaXJtd2FyZSBzZXJ2aWNlIHZpYSBBRl9RSVBDUlRSIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfs7j2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 08:53:58 +0000 UTC FinishedAt: 2026-06-26 09:20:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4edcdefd4083ae04b1a5656f4be6cd83ae919ef4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH12K" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4edcdefd4083ae04b1a5656f4be6cd83ae919ef4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ATH12K" ], "series_id": "0de4794d-03a3-49e2-ae06-824fe2d0e9ed" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ath12k_qmi_host_cap_send", "ath12k_qmi_phy_cap_send" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FUSDEySyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2F0aDEya19xbWlfaG9zdF9jYXBfc2VuZCYjMzQ7LAogICAgJiMzNDthdGgxMmtfcW1pX3BoeV9jYXBfc2VuZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR5bmFtaWMgRERSIGFuZCBtZW1vcnkgc3VwcG9ydCBpbiB0aGUgYXRoMTJrIGRyaXZlciYjMzk7cyBRTUkgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBmaXJtd2FyZS4gSXQgbW9kaWZpZXMgdGhlIFFNSSBtZXNzYWdlIGVuY29kaW5nL2RlY29kaW5nIGFycmF5cyBhbmQgdGhlIGZ1bmN0aW9ucyBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBhbmQgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCB0byBzZXQgYW5kIHJlYWQgdGhlc2UgbmV3IGZpZWxkcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZHVyaW5nIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gd2hlbiBhIFFNSSBzZXJ2ZXIgKGZpcm13YXJlKSBhcnJpdmVzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhpcyBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRvIHByb2JlIHRoZSBhdGgxMmsgZHJpdmVyIGFuZCBlbXVsYXRpbmcgdGhlIFFNSSBmaXJtd2FyZSBzZXJ2aWNlIHZpYSBBRl9RSVBDUlRSIHNvY2tldHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjZTcyYjRmNWZiODY5NGE4Nzk1ZGM3YjcwZjdkNzY0MDU4MDIwZjhiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDk6MTY6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbmluZGV4IGZkNzYyYjVkN2JiNTk3Li5lMTVhMGMwMTIwZDNhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbkBAIC01MDYsNiAmIzQzOzUwNiwyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9lbGVtX2luZm8gcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMV9laVtdID0ge1xuIFx0XHQub2Zmc2V0XHRcdD0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDEsXG4gXHRcdFx0XHRcdCAgIGZlYXR1cmVfbGlzdCksXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdC5kYXRhX3R5cGVcdD0gUU1JX09QVF9GTEFHLFxuJiM0MztcdFx0LmVsZW1fbGVuXHQ9IDEsXG4mIzQzO1x0XHQuZWxlbV9zaXplXHQ9IHNpemVvZih1OCksXG4mIzQzO1x0XHQuYXJyYXlfdHlwZVx0PSBOT19BUlJBWSxcbiYjNDM7XHRcdC50bHZfdHlwZVx0PSAweDMzLFxuJiM0MztcdFx0Lm9mZnNldFx0XHQ9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxLFxuJiM0MztcdFx0XHRcdFx0ICAgZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCksXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGF0YV90eXBlXHQ9IFFNSV9VTlNJR05FRF8xX0JZVEUsXG4mIzQzO1x0XHQuZWxlbV9sZW5cdD0gMSxcbiYjNDM7XHRcdC5lbGVtX3NpemVcdD0gc2l6ZW9mKHU4KSxcbiYjNDM7XHRcdC5hcnJheV90eXBlXHQ9IE5PX0FSUkFZLFxuJiM0MztcdFx0LnRsdl90eXBlXHQ9IDB4MzMsXG4mIzQzO1x0XHQub2Zmc2V0XHRcdD0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDEsXG4mIzQzO1x0XHRcdFx0XHQgICBkeW5hbWljX21lbV9zdXBwb3J0KSxcbiYjNDM7XHR9LFxuIFx0e1xuIFx0XHQuZGF0YV90eXBlXHQ9IFFNSV9FT1RJLFxuIFx0XHQuYXJyYXlfdHlwZVx0PSBOT19BUlJBWSxcbkBAIC02MDIsNiAmIzQzOzYyMCwyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9lbGVtX2luZm8gcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMV9laVtdID0ge1xuIFx0XHQub2Zmc2V0ICAgICAgICAgPSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSxcbiBcdFx0XHRcdFx0ICAgc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQpLFxuIFx0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuZGF0YV90eXBlXHQ9IFFNSV9PUFRfRkxBRyxcbiYjNDM7XHRcdC5lbGVtX2xlblx0PSAxLFxuJiM0MztcdFx0LmVsZW1fc2l6ZVx0PSBzaXplb2YodTgpLFxuJiM0MztcdFx0LmFycmF5X3R5cGVcdD0gTk9fQVJSQVksXG4mIzQzO1x0XHQudGx2X3R5cGVcdD0gMHgxNyxcbiYjNDM7XHRcdC5vZmZzZXRcdFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSxcbiYjNDM7XHRcdFx0XHRcdCAgIGR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWQpLFxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0LmRhdGFfdHlwZVx0PSBRTUlfVU5TSUdORURfMV9CWVRFLFxuJiM0MztcdFx0LmVsZW1fbGVuXHQ9IDEsXG4mIzQzO1x0XHQuZWxlbV9zaXplXHQ9IHNpemVvZih1OCksXG4mIzQzO1x0XHQuYXJyYXlfdHlwZVx0PSBOT19BUlJBWSxcbiYjNDM7XHRcdC50bHZfdHlwZVx0PSAweDE3LFxuJiM0MztcdFx0Lm9mZnNldFx0XHQ9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxLFxuJiM0MztcdFx0XHRcdFx0ICAgZHluYW1pY19kZHJfc3VwcG9ydCksXG4mIzQzO1x0fSxcbiBcdHtcbiBcdFx0LmRhdGFfdHlwZVx0PSBRTUlfRU9USSxcbiBcdFx0LmFycmF5X3R5cGVcdD0gTk9fQVJSQVksXG5AQCAtMjI0OCw2ICYjNDM7MjI4NCwxMSBAQCBpbnQgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRpZiAoYWItXHUwMDNlcW1pLmR5bmFtaWNfZGRyX3N1cHBvcnQpIHtcbiYjNDM7XHRcdHJlcS5keW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkID0gMTtcbiYjNDM7XHRcdHJlcS5keW5hbWljX21lbV9zdXBwb3J0ID0gMTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0ID0gcW1pX3R4bl9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIFx1MDAyNnR4bixcbiBcdFx0XHQgICBxbWlfd2xhbmZ3X2hvc3RfY2FwX3Jlc3BfbXNnX3YwMV9laSwgXHUwMDI2cmVzcCk7XG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuQEAgLTIzMTksMTEgJiM0MzsyMzYwLDE0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXG4gXHRhYi1cdTAwM2VxbWkubnVtX3JhZGlvcyA9IHJlc3AubnVtX3BoeTtcbiBcbiYjNDM7XHRpZiAocmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKVxuJiM0MztcdFx0YWItXHUwMDNlcW1pLmR5bmFtaWNfZGRyX3N1cHBvcnQgPSByZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnQ7XG4mIzQzO1xuIFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19RTUksXG4tXHRcdCAgIFwmIzM0O3BoeSBjYXBhYmlsaXR5IHJlc3AgdmFsaWQgJWQgc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgJWQgdmFsaWQgJWQgbnVtX3BoeSAlZCB2YWxpZCAlZCBib2FyZF9pZCAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdCAgIFwmIzM0O3BoeSBjYXBhYmlsaXR5IHJlc3AgdmFsaWQgJWQgc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgJWQgdmFsaWQgJWQgbnVtX3BoeSAlZCB2YWxpZCAlZCBib2FyZF9pZCAlZCBkeW5hbWljX2Rkcl92YWxpZCAldSBkeW5hbWljX2Rkcl9zdXBwb3J0ICV1XFxuXCYjMzQ7LFxuIFx0XHQgICByZXNwLnNpbmdsZV9jaGlwX21sb19zdXBwb3J0X3ZhbGlkLCByZXNwLnNpbmdsZV9jaGlwX21sb19zdXBwb3J0LFxuLVx0XHQgICByZXNwLm51bV9waHlfdmFsaWQsIHJlc3AubnVtX3BoeSxcbi1cdFx0ICAgcmVzcC5ib2FyZF9pZF92YWxpZCwgcmVzcC5ib2FyZF9pZCk7XG4mIzQzO1x0XHQgICByZXNwLm51bV9waHlfdmFsaWQsIHJlc3AubnVtX3BoeSwgcmVzcC5ib2FyZF9pZF92YWxpZCwgcmVzcC5ib2FyZF9pZCxcbiYjNDM7XHRcdCAgIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCwgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0KTtcbiBcbiBcdHJldHVybjtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaFxuaW5kZXggMmE2M2UyMTRlYjQyYzUuLjliZGIyOTBlMmNjZTkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaFxuQEAgLTE1Niw5ICYjNDM7MTU2LDEwIEBAIHN0cnVjdCBhdGgxMmtfcW1pIHtcbiBcdHN0cnVjdCBtM19tZW1fcmVnaW9uIGF1eF91Y19tZW07XG4gXHR1bnNpZ25lZCBpbnQgc2VydmljZV9pbnNfaWQ7XG4gXHRzdHJ1Y3QgZGV2X21lbV9pbmZvIGRldl9tZW1bQVRIMTJLX1FNSV9XTEZXX01BWF9ERVZfTUVNX05VTV9WMDFdO1xuJiM0MztcdHU4IGR5bmFtaWNfZGRyX3N1cHBvcnQ7XG4gfTtcbiBcbi0jZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTlx0XHQyNjFcbiYjNDM7I2RlZmluZSBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9NU0dfVjAxX01BWF9MRU5cdFx0MjY1XG4gI2RlZmluZSBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9WMDFcdFx0XHQweDAwMzRcbiAjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVTUF9NU0dfVjAxX01BWF9MRU5cdDdcbiAjZGVmaW5lIFFNSV9XTEZXX0hPU1RfQ0FQX1JFU1BfVjAxXHRcdFx0MHgwMDM0XG5AQCAtMjU4LDcgJiM0MzsyNTksOCBAQCBzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMSB7XG4gXHRzdHJ1Y3Qgd2xmd19ob3N0X21sb19jaGlwX2luZm9fc192MDEgbWxvX2NoaXBfaW5mb1tRTUlfV0xGV19NQVhfTlVNX01MT19DSElQU19WMDFdO1xuIFx0dTggZmVhdHVyZV9saXN0X3ZhbGlkO1xuIFx0dTY0IGZlYXR1cmVfbGlzdDtcbi1cbiYjNDM7XHR1OCBkeW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkO1xuJiM0MztcdHU4IGR5bmFtaWNfbWVtX3N1cHBvcnQ7XG4gfTtcbiBcbiBzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXNwX21zZ192MDEge1xuQEAgLTI4MSw2ICYjNDM7MjgzLDggQEAgc3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEge1xuIFx0dTMyIGJvYXJkX2lkO1xuIFx0dTggc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQ7XG4gXHR1OCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydDtcbiYjNDM7XHR1OCBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkO1xuJiM0MztcdHU4IGR5bmFtaWNfZGRyX3N1cHBvcnQ7XG4gfTtcbiBcbiAjZGVmaW5lIFFNSV9XTEFORldfSU5EX1JFR0lTVEVSX1JFUV9NU0dfVjAxX01BWF9MRU5cdFx0NTRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBVEgxMksmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmQmIzM0OywKICAgICYjMzQ7YXRoMTJrX3FtaV9waHlfY2FwX3NlbmQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkeW5hbWljIEREUiBhbmQgbWVtb3J5IHN1cHBvcnQgaW4gdGhlIGF0aDEyayBkcml2ZXImIzM5O3MgUU1JIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUuIEl0IG1vZGlmaWVzIHRoZSBRTUkgbWVzc2FnZSBlbmNvZGluZy9kZWNvZGluZyBhcnJheXMgYW5kIHRoZSBmdW5jdGlvbnMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgdG8gc2V0IGFuZCByZWFkIHRoZXNlIG5ldyBmaWVsZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHdoZW4gYSBRTUkgc2VydmVyIChmaXJtd2FyZSkgYXJyaXZlcy4gU3l6a2FsbGVyIGNhbiB0cmlnZ2VyIHRoaXMgYnkgZW11bGF0aW5nIGEgUENJIGRldmljZSB0byBwcm9iZSB0aGUgYXRoMTJrIGRyaXZlciBhbmQgZW11bGF0aW5nIHRoZSBRTUkgZmlybXdhcmUgc2VydmljZSB2aWEgQUZfUUlQQ1JUUiBzb2NrZXRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjZTcyYjRmNWZiODY5NGE4Nzk1ZGM3YjcwZjdkNzY0MDU4MDIwZjhiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMDk6MTY6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYwppbmRleCBmZDc2MmI1ZDdiYjU5Ny4uZTE1YTBjMDEyMGQzYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYwpAQCAtNTA2LDYgJiM0Mzs1MDYsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfZWxlbV9pbmZvIHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDFfZWlbXSA9IHsKIAkJLm9mZnNldAkJPSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMSwKIAkJCQkJICAgZmVhdHVyZV9saXN0KSwKIAl9LAomIzQzOwl7CiYjNDM7CQkuZGF0YV90eXBlCT0gUU1JX09QVF9GTEFHLAomIzQzOwkJLmVsZW1fbGVuCT0gMSwKJiM0MzsJCS5lbGVtX3NpemUJPSBzaXplb2YodTgpLAomIzQzOwkJLmFycmF5X3R5cGUJPSBOT19BUlJBWSwKJiM0MzsJCS50bHZfdHlwZQk9IDB4MzMsCiYjNDM7CQkub2Zmc2V0CQk9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxLAomIzQzOwkJCQkJICAgZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCksCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCS5kYXRhX3R5cGUJPSBRTUlfVU5TSUdORURfMV9CWVRFLAomIzQzOwkJLmVsZW1fbGVuCT0gMSwKJiM0MzsJCS5lbGVtX3NpemUJPSBzaXplb2YodTgpLAomIzQzOwkJLmFycmF5X3R5cGUJPSBOT19BUlJBWSwKJiM0MzsJCS50bHZfdHlwZQk9IDB4MzMsCiYjNDM7CQkub2Zmc2V0CQk9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxLAomIzQzOwkJCQkJICAgZHluYW1pY19tZW1fc3VwcG9ydCksCiYjNDM7CX0sCiAJewogCQkuZGF0YV90eXBlCT0gUU1JX0VPVEksCiAJCS5hcnJheV90eXBlCT0gTk9fQVJSQVksCkBAIC02MDIsNiAmIzQzOzYyMCwyNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9lbGVtX2luZm8gcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMV9laVtdID0gewogCQkub2Zmc2V0ICAgICAgICAgPSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSwKIAkJCQkJICAgc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQpLAogCX0sCiYjNDM7CXsKJiM0MzsJCS5kYXRhX3R5cGUJPSBRTUlfT1BUX0ZMQUcsCiYjNDM7CQkuZWxlbV9sZW4JPSAxLAomIzQzOwkJLmVsZW1fc2l6ZQk9IHNpemVvZih1OCksCiYjNDM7CQkuYXJyYXlfdHlwZQk9IE5PX0FSUkFZLAomIzQzOwkJLnRsdl90eXBlCT0gMHgxNywKJiM0MzsJCS5vZmZzZXQJCT0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEsCiYjNDM7CQkJCQkgICBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKSwKJiM0MzsJfSwKJiM0MzsJewomIzQzOwkJLmRhdGFfdHlwZQk9IFFNSV9VTlNJR05FRF8xX0JZVEUsCiYjNDM7CQkuZWxlbV9sZW4JPSAxLAomIzQzOwkJLmVsZW1fc2l6ZQk9IHNpemVvZih1OCksCiYjNDM7CQkuYXJyYXlfdHlwZQk9IE5PX0FSUkFZLAomIzQzOwkJLnRsdl90eXBlCT0gMHgxNywKJiM0MzsJCS5vZmZzZXQJCT0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEsCiYjNDM7CQkJCQkgICBkeW5hbWljX2Rkcl9zdXBwb3J0KSwKJiM0MzsJfSwKIAl7CiAJCS5kYXRhX3R5cGUJPSBRTUlfRU9USSwKIAkJLmFycmF5X3R5cGUJPSBOT19BUlJBWSwKQEAgLTIyNDgsNiAmIzQzOzIyODQsMTEgQEAgaW50IGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKQogCWlmIChyZXQgJmx0OyAwKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAoYWItJmd0O3FtaS5keW5hbWljX2Rkcl9zdXBwb3J0KSB7CiYjNDM7CQlyZXEuZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCA9IDE7CiYjNDM7CQlyZXEuZHluYW1pY19tZW1fc3VwcG9ydCA9IDE7CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBxbWlfdHhuX2luaXQoJmFtcDthYi0mZ3Q7cW1pLmhhbmRsZSwgJmFtcDt0eG4sCiAJCQkgICBxbWlfd2xhbmZ3X2hvc3RfY2FwX3Jlc3BfbXNnX3YwMV9laSwgJmFtcDtyZXNwKTsKIAlpZiAocmV0ICZsdDsgMCkKQEAgLTIzMTksMTEgJiM0MzsyMzYwLDE0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpCiAKIAlhYi0mZ3Q7cW1pLm51bV9yYWRpb3MgPSByZXNwLm51bV9waHk7CiAKJiM0MzsJaWYgKHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCkKJiM0MzsJCWFiLSZndDtxbWkuZHluYW1pY19kZHJfc3VwcG9ydCA9IHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydDsKJiM0MzsKIAlhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSwKLQkJICAgJiMzNDtwaHkgY2FwYWJpbGl0eSByZXNwIHZhbGlkICVkIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0ICVkIHZhbGlkICVkIG51bV9waHkgJWQgdmFsaWQgJWQgYm9hcmRfaWQgJWRcbiYjMzQ7LAomIzQzOwkJICAgJiMzNDtwaHkgY2FwYWJpbGl0eSByZXNwIHZhbGlkICVkIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0ICVkIHZhbGlkICVkIG51bV9waHkgJWQgdmFsaWQgJWQgYm9hcmRfaWQgJWQgZHluYW1pY19kZHJfdmFsaWQgJXUgZHluYW1pY19kZHJfc3VwcG9ydCAldVxuJiMzNDssCiAJCSAgIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQsIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQsCi0JCSAgIHJlc3AubnVtX3BoeV92YWxpZCwgcmVzcC5udW1fcGh5LAotCQkgICByZXNwLmJvYXJkX2lkX3ZhbGlkLCByZXNwLmJvYXJkX2lkKTsKJiM0MzsJCSAgIHJlc3AubnVtX3BoeV92YWxpZCwgcmVzcC5udW1fcGh5LCByZXNwLmJvYXJkX2lkX3ZhbGlkLCByZXNwLmJvYXJkX2lkLAomIzQzOwkJICAgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkLCByZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnQpOwogCiAJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaAppbmRleCAyYTYzZTIxNGViNDJjNS4uOWJkYjI5MGUyY2NlOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaApAQCAtMTU2LDkgJiM0MzsxNTYsMTAgQEAgc3RydWN0IGF0aDEya19xbWkgewogCXN0cnVjdCBtM19tZW1fcmVnaW9uIGF1eF91Y19tZW07CiAJdW5zaWduZWQgaW50IHNlcnZpY2VfaW5zX2lkOwogCXN0cnVjdCBkZXZfbWVtX2luZm8gZGV2X21lbVtBVEgxMktfUU1JX1dMRldfTUFYX0RFVl9NRU1fTlVNX1YwMV07CiYjNDM7CXU4IGR5bmFtaWNfZGRyX3N1cHBvcnQ7CiB9OwogCi0jZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTgkJMjYxCiYjNDM7I2RlZmluZSBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9NU0dfVjAxX01BWF9MRU4JCTI2NQogI2RlZmluZSBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9WMDEJCQkweDAwMzQKICNkZWZpbmUgUU1JX1dMQU5GV19IT1NUX0NBUF9SRVNQX01TR19WMDFfTUFYX0xFTgk3CiAjZGVmaW5lIFFNSV9XTEZXX0hPU1RfQ0FQX1JFU1BfVjAxCQkJMHgwMDM0CkBAIC0yNTgsNyAmIzQzOzI1OSw4IEBAIHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxIHsKIAlzdHJ1Y3Qgd2xmd19ob3N0X21sb19jaGlwX2luZm9fc192MDEgbWxvX2NoaXBfaW5mb1tRTUlfV0xGV19NQVhfTlVNX01MT19DSElQU19WMDFdOwogCXU4IGZlYXR1cmVfbGlzdF92YWxpZDsKIAl1NjQgZmVhdHVyZV9saXN0OwotCiYjNDM7CXU4IGR5bmFtaWNfbWVtX3N1cHBvcnRfdmFsaWQ7CiYjNDM7CXU4IGR5bmFtaWNfbWVtX3N1cHBvcnQ7CiB9OwogCiBzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXNwX21zZ192MDEgewpAQCAtMjgxLDYgJiM0MzsyODMsOCBAQCBzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSB7CiAJdTMyIGJvYXJkX2lkOwogCXU4IHNpbmdsZV9jaGlwX21sb19zdXBwb3J0X3ZhbGlkOwogCXU4IHNpbmdsZV9jaGlwX21sb19zdXBwb3J0OwomIzQzOwl1OCBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkOwomIzQzOwl1OCBkeW5hbWljX2Rkcl9zdXBwb3J0OwogfTsKIAogI2RlZmluZSBRTUlfV0xBTkZXX0lORF9SRUdJU1RFUl9SRVFfTVNHX1YwMV9NQVhfTEVOCQk1NAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjYwCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIEF0aDEyayBRTUkgUGF0Y2ggaW4gVmlydHVhbGl6ZWQgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWRkcyBgZHluYW1pY19kZHJfc3VwcG9ydGAgYW5kIGBkeW5hbWljX21lbV9zdXBwb3J0YCB0byB0aGUgUU1JIG1lc3NhZ2VzIGluIGBhdGgxMmtgLiBUaGlzIGlzIGZvciBRdWFsY29tbSYjMzk7cyBXaS1GaSA3IGRldmljZXMsIGFuZCBpdCBtb2RpZmllcyBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBhbmQgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGhvdyByZWFjaGFibGUgaXMgdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoZSBgYXRoMTJrYCBkcml2ZXIgdXN1YWxseSBkZXBlbmRzIG9uIHNwZWNpZmljIGhhcmR3YXJlLCBsaWtlIFBDSWUgb3IgQUhCIGRldmljZXMuCgpNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBgbWFjODAyMTFfaHdzaW1gIGNvdmVycyB0aGlzLCBidXQgbm8sIHRoYXQmIzM5O3MgYSBtYWM4MDIxMSAqc2ltdWxhdG9yKiwgbm90IGEgZnVsbCBgYXRoMTJrYCBoYXJkd2FyZSBtb2RlbC4gU28sIGNhbiB3ZSBmdXp6IHRoaXMgdmlhIGEgdmlydHVhbCBidXMgb3IgZGlyZWN0bHkgdGhyb3VnaCBRTUk/IFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IFFNSSwgdGhlIFF1YWxjb21tIE1TTSBJbnRlcmZhY2UsIHdoaWNoIHR5cGljYWxseSB1c2VzIElQQyByb3V0ZXIgKEFGX1FJUENSVFIpIG9yIHNpbWlsYXIuIEluIHRoZSBgYXRoMTJrYCBjb250ZXh0LCB0aGlzIGlzIGhvdyB3ZSB0YWxrIHRvIHRoZSBmaXJtd2FyZSAqb24qIHRoZSBXaS1GaSBjaGlwLgoKVGhlIG5leHQgcXVlc3Rpb24gaXMsIGNhbiB3ZSBldmVuIHByb2JlIGBhdGgxMmtgIHdpdGhvdXQgdGhlIGhhcmR3YXJlIHByZXNlbnQ/IFBDSSBkcml2ZXJzIG9mdGVuIHJlcXVpcmUgYSB2aXJ0dWFsIFBDSSBkZXZpY2UuIFN5emthbGxlciAqY2FuKiBkbyBQQ0kgZnV6emluZywgbWF5YmUgd2l0aCBgdmhjaWAgb3Igc2ltaWxhciwgb3IgcG90ZW50aWFsbHkgd2l0aCB0aG9zZSBgc3l6X3BjaV8uLi5gIHBzZXVkby1zeXNjYWxscyBidXQgaXRzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcyBhcmUgbGltaXRlZCB3aXRob3V0IGEgbW9jay11cC4gQnV0IHNpbmNlIHRoaXMgaXMgUU1JLCBhbmQgUU1JIG1lc3NhZ2VzIGFyZSAqc2VudCogdG8gdGhlIGZpcm13YXJlLCB3aGljaCBpc24mIzM5O3QgdGhlcmUgd2l0aG91dCB0aGUgaGFyZHdhcmUsIHRob3NlIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGFuZCBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIGZ1bmN0aW9ucyBtaWdodCBub3QgYmUgZXZlbiBiZSByZWFjaGFibGUuIEkgc2hvdWxkIGNoZWNrIHRoZSBgYXRoMTJrYCBpbml0aWFsaXphdGlvbiBwYXRoIGFuZCBzZWUgaG93IHRoZSBkcml2ZXIgc3RhcnRzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19xbWlfaG9zdF9jYXBfc2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9MjIzNT1zdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjIyMzY6aW50IGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0yMjM3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM5OTQ9c3RhdGljIGludCBhdGgxMmtfcW1pX2V2ZW50X2hvc3RfY2FwKHN0cnVjdCBhdGgxMmtfcW1pICpxbWkpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTk4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTk5Olx0cmV0ID0gYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDAwMC1cdGlmIChyZXQgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODg3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwga2VlcGluZyBpbiBtaW5kIHRoZSBjb250ZXh0IG9mIHNvbWVvbmUgZXhwZXJpZW5jZWQgaW4gdGhlaXIgZmllbGQ6CgoqKkRlY29kaW5nIFRoaXMgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcGAuIFRoYXQgZnVuY3Rpb24gbmFtZSYjMzk7cyByaW5naW5nIGEgYmVsbCDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSB0aWVkIHRvIHRoZSBBdGhlcm9zIChvciBhdCBsZWFzdCwgdGhlIG9sZGVyIGF0aDEyaykgd2lyZWxlc3MgZHJpdmVyIGFuZCwgc3BlY2lmaWNhbGx5LCBRTUkgZXZlbnRzLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIEkmIzM5O2QgYmV0IHRoaXMgZnVuY3Rpb24mIzM5O3Mgam9iIGlzIHRvIGhhbmRsZSBvciBpbnRlcnByZXQgc29tZSBraW5kIG9mIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gYmVpbmcgcmVwb3J0ZWQgYmFjayBmcm9tIHRoZSBRTUkgc2lkZSBvZiB0aGluZ3MuCgpUaGUgY3JpdGljYWwgcGllY2UgaGVyZSwgYmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgaXMgdGhhdCBJIGtub3cgdGhpcyBpcyBtb3N0IGxpa2VseSBjYWxsZWQgd2l0aGluIGEgd29ya3F1ZXVlIGNvbnRleHQuIGBxbWlfZXZlbnRgIGlzIGEgZGVhZCBnaXZlYXdheS4gVGhhdCBtZWFucyB3aGF0ZXZlciBgYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcGAgaXMgZG9pbmcgaGFzIGJlZW4gKnF1ZXVlZCogdG8gcnVuIGxhdGVyLiBUaGlzIGlzIGtleSBiZWNhdXNlIGl0IG1lYW5zIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhpbmdzIGxpa2UgbG9ja2luZyBhbmQgY29uY3VycmVuY3kgdmVyeSBjYXJlZnVsbHkuIFdlJiMzOTtyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggYXN5bmNocm9ub3VzIGV2ZW50IHByb2Nlc3NpbmcsIGFuZCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGJldHdlZW4gdGhlIGhvc3QgYW5kIHRoZSBoYXJkd2FyZS4gVW5kZXJzdGFuZGluZyB0aGUgd29ya3F1ZXVlJiMzOTtzIGNoYXJhY3RlcmlzdGljcyBpcyBhYnNvbHV0ZWx5IHZpdGFsIGZvciBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gQW55IG5vbi1hdG9taWMgb3BlcmF0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlIHNvbWV0aGluZyB0byBzY3J1dGluaXplIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzk4OT1zdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9vcHMgYXRoMTJrX3FtaV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTkzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTk0OnN0YXRpYyBpbnQgYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcChzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTk1LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTQwMDk9c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDY1LVx0XHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfSE9TVF9DQVA6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjQwNjY6XHRcdFx0cmV0ID0gYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcChxbWkpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDY3LVx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTU1OQoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFNwZWNpZmljIEZ1bmN0aW9uIENhbGwqKgoKU28sIHRoZSBxdWVzdGlvbiB0aGF0JiMzOTtzIHBpcXVlZCBteSBpbnRlcmVzdCByaWdodCBub3cgaXMsICYjMzQ7V2hhdCBhYm91dCBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgPyYjMzQ7IEkgc2VlIHRoYXQgZnVuY3Rpb24gY2FsbCBhbmQgaW1tZWRpYXRlbHkgc3RhcnQgdG8gdGhpbmsgYWJvdXQgdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCYjMzk7cyBpdCBkb2luZz8gSXMgaXQgYSBrZXkgcGFydCBvZiB0aGUgUU1JIChRdWFsY29tbSBNU00gSW50ZXJmYWNlKSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGF0aDEyayBkcml2ZXIsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBQSFkgY2FwYWJpbGl0aWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIElzIGl0IHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIFBIWSBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIHRvIHRoZSBtb2RlbT8gSWYgc28sIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgcHJvdG9jb2w/IElzIHRoaXMgYSBjcml0aWNhbCBwaWVjZSBmb3IgbmVnb3RpYXRpb24sIHNldHVwLCBvciBqdXN0IHJlcG9ydGluZz8KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgaWYgdGhpcyBmdW5jdGlvbiBoYXMgaXNzdWVzLiBEb2VzIGEgcHJvYmxlbSBoZXJlIGxlYWQgdG8gY29ubmVjdGlvbiBwcm9ibGVtcywgdGhyb3VnaHB1dCBsaW1pdGF0aW9ucywgb3IgZXZlbiBkZXZpY2UgaW5zdGFiaWxpdHk/IEFyZSB0aGVyZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBvciByZXR1cm4gdmFsdWVzIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGluIGFueSBkZWJ1Z2dpbmcgbG9ncz8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIGNhbGwgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGludm9rZWQsIGFuZCB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciBpdC4gRGlnZ2luZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgbGlrZWx5IGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGJlaGF2aW9yIGFuZCBwb3RlbnRpYWwgcHJvYmxlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3FtaV9waHlfY2FwX3NlbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTIyMzY9aW50IGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMjMyMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MjMyMjpzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0yMzIzLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTM3NTg9aW50IGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZShzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzc2My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6Mzc2NDpcdGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzc2NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYXRoMTJrIFFNSSBTZXJ2ZXIgQXJyaXZhbCoqCgpPa2F5LCBzbyBgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlYCBnZXRzIHRyaWdnZXJlZCB3aGVuIHRoZSBRTUkgc2VydmVyIHNob3dzIHVwLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gQnV0IHRoZSBpbXBvcnRhbnQgdGhpbmcgaXMsIHRoaXMgd2hvbGUgcHJvY2VzcyBoaW5nZXMgb24gdGhlIGBhdGgxMmtgIGRyaXZlciBiZWluZyBwcm9wZXJseSBwcm9iZWQgZmlyc3QuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IGNhbiBJIGFjdHVhbGx5IHByb2JlIGBhdGgxMmtgIHdpdGhvdXQgaGF2aW5nIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwcmVzZW50PyBUaGF0IHdvdWxkIGJlIGluY3JlZGlibHkgdXNlZnVsIGZvciB0ZXN0aW5nIGFuZCBkZXZlbG9wbWVudCwgd2l0aG91dCBiZWluZyB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIHRvIGZpbmQgb3V0LiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHN0YXJ0IHdpdGggYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNgLCB0aGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEFuZCBvZiBjb3Vyc2UsIGBtYWMuY2AgYW5kIG90aGVyIHJlbGV2YW50IGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IGFyZSBhbHNvIGxpa2VseSB0byBob2xkIHNvbWUgY2x1ZXMuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIHdoYXQgdGhlIHByb2JpbmcgcmVxdWlyZW1lbnRzIGFyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYz01NT1zdGF0aWMgdm9pZCBhdGgxMmtfd2lmaTdfZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM6NjQ6bW9kdWxlX2luaXQoYXRoMTJrX3dpZmk3X2luaXQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmMtNjUtbW9kdWxlX2V4aXQoYXRoMTJrX3dpZmk3X2V4aXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjcxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYXRoMTJrYCBNb2R1bGUqKgoKT2theSwgc28gYGF0aDEya2AgaXMgYSBtb2R1bGUsIHJpZ2h0PyBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1bmRlcnN0YW5kIGl0cyB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGtub3cgd2hhdCBidXNlcyBpdCYjMzk7cyBpbnRlcmFjdGluZyB3aXRoIHRvIHByb3Blcmx5IGRpYWdub3NlIGFueSBpc3N1ZXMgb3Igb3B0aW1pemUgaXRzIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQgYnVzZXMgaXMgdGhpcyBtb2R1bGUgYWN0dWFsbHkgdXNpbmc/IFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbW1lZGlhdGVseSB0ZWxsIG1lIGEgbG90IGFib3V0IHRoZSBzeXN0ZW0mIzM5O3MgaW50ZWdyYXRpb24gYW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcy4gVGhpcyBpcyB0aGUgZmlyc3QgcXVlc3Rpb24gdGhhdCBuZWVkcyBhbnN3ZXJpbmcuIEtub3dpbmcgaG93IGl0JiMzOTtzIGNvbm5lY3RlZCBoZWxwcyBpbiBkZXRlcm1pbmluZyB0aGUgbmV4dCBzdGVwcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfcGNpX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg3NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBBcmNoaXRlY3R1cmUqKgoKQWxyaWdodCwgZ2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gZWl0aGVyIGBwY2kuY2Agb3IgYGFoYi5jYC4gVGhlIHByb2JsZW0gbGlrZWx5IHJldm9sdmVzIGFyb3VuZCBwZXJpcGhlcmFsIGNvbW11bmljYXRpb24uIFRoaXMgcG9pbnRzIG1lIGRpcmVjdGx5IHRvIHRob3NlIGZpbGVzLiBFaXRoZXIgdGhlIFBDSSBidXMgaXMgaW52b2x2ZWQsIG9yIGl0JiMzOTtzIGNvbm5lY3RlZCB0byB0aGUgQUhCIGJ1cy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHdoaWNoZXZlciBsb29rcyBsaWtlIHRoZSBtb3JlIGxpa2VseSBzdXNwZWN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNpdHVhdGlvbiDigJMgbWF5YmUgSSByZW1lbWJlciBzb21ldGhpbmcgc3BlY2lmaWMgYWJvdXQgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEkmIzM5O2xsIHF1aWNrbHkgZWxpbWluYXRlIG9uZSBvciB0aGUgb3RoZXIuIFRoaXMgaXMgYWJvdXQgZWZmaWNpZW50bHkgcGlucG9pbnRpbmcgdGhlIGVudHJ5IHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLiBObyBuZWVkIHRvIHdhc3RlIHRpbWU7IGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthY3BpLmMmIzM0OywKICAgICYjMzQ7YWNwaS5oJiMzNDssCiAgICAmIzM0O2FoYi5jJiMzNDssCiAgICAmIzM0O2FoYi5oJiMzNDssCiAgICAmIzM0O2NlLmMmIzM0OywKICAgICYjMzQ7Y2UuaCYjMzQ7LAogICAgJiMzNDtjbW5fZGVmcy5oJiMzNDssCiAgICAmIzM0O2NvcmUuYyYjMzQ7LAogICAgJiMzNDtjb3JlLmgmIzM0OywKICAgICYjMzQ7Y29yZWR1bXAuYyYjMzQ7LAogICAgJiMzNDtjb3JlZHVtcC5oJiMzNDssCiAgICAmIzM0O2RicmluZy5jJiMzNDssCiAgICAmIzM0O2RicmluZy5oJiMzNDssCiAgICAmIzM0O2RlYnVnLmMmIzM0OywKICAgICYjMzQ7ZGVidWcuaCYjMzQ7LAogICAgJiMzNDtkZWJ1Z2ZzLmMmIzM0OywKICAgICYjMzQ7ZGVidWdmcy5oJiMzNDssCiAgICAmIzM0O2RlYnVnZnNfaHR0X3N0YXRzLmMmIzM0OywKICAgICYjMzQ7ZGVidWdmc19odHRfc3RhdHMuaCYjMzQ7LAogICAgJiMzNDtkZWJ1Z2ZzX3N0YS5jJiMzNDssCiAgICAmIzM0O2RlYnVnZnNfc3RhLmgmIzM0OywKICAgICYjMzQ7ZHAuYyYjMzQ7LAogICAgJiMzNDtkcC5oJiMzNDssCiAgICAmIzM0O2RwX2Ntbi5oJiMzNDssCiAgICAmIzM0O2RwX2h0dC5jJiMzNDssCiAgICAmIzM0O2RwX2h0dC5oJiMzNDssCiAgICAmIzM0O2RwX21vbi5jJiMzNDssCiAgICAmIzM0O2RwX21vbi5oJiMzNDssCiAgICAmIzM0O2RwX3BlZXIuYyYjMzQ7LAogICAgJiMzNDtkcF9wZWVyLmgmIzM0OywKICAgICYjMzQ7ZHBfcnguYyYjMzQ7LAogICAgJiMzNDtkcF9yeC5oJiMzNDssCiAgICAmIzM0O2RwX3R4LmMmIzM0OywKICAgICYjMzQ7ZHBfdHguaCYjMzQ7LAogICAgJiMzNDtmdy5jJiMzNDssCiAgICAmIzM0O2Z3LmgmIzM0OywKICAgICYjMzQ7aGFsLmMmIzM0OywKICAgICYjMzQ7aGFsLmgmIzM0OywKICAgICYjMzQ7aGlmLmgmIzM0OywKICAgICYjMzQ7aHRjLmMmIzM0OywKICAgICYjMzQ7aHRjLmgmIzM0OywKICAgICYjMzQ7aHcuaCYjMzQ7LAogICAgJiMzNDttYWMuYyYjMzQ7LAogICAgJiMzNDttYWMuaCYjMzQ7LAogICAgJiMzNDttaGkuYyYjMzQ7LAogICAgJiMzNDttaGkuaCYjMzQ7LAogICAgJiMzNDtwMnAuYyYjMzQ7LAogICAgJiMzNDtwMnAuaCYjMzQ7LAogICAgJiMzNDtwY2kuYyYjMzQ7LAogICAgJiMzNDtwY2kuaCYjMzQ7LAogICAgJiMzNDtwZWVyLmMmIzM0OywKICAgICYjMzQ7cGVlci5oJiMzNDssCiAgICAmIzM0O3FtaS5jJiMzNDssCiAgICAmIzM0O3FtaS5oJiMzNDssCiAgICAmIzM0O3JlZy5jJiMzNDssCiAgICAmIzM0O3JlZy5oJiMzNDssCiAgICAmIzM0O3Rlc3Rtb2RlLmMmIzM0OywKICAgICYjMzQ7dGVzdG1vZGUuaCYjMzQ7LAogICAgJiMzNDt0aGVybWFsLmMmIzM0OywKICAgICYjMzQ7dGhlcm1hbC5oJiMzNDssCiAgICAmIzM0O3RyYWNlLmMmIzM0OywKICAgICYjMzQ7dHJhY2UuaCYjMzQ7LAogICAgJiMzNDt3bWkuYyYjMzQ7LAogICAgJiMzNDt3bWkuaCYjMzQ7LAogICAgJiMzNDt3b3cuYyYjMzQ7LAogICAgJiMzNDt3b3cuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogWwogICAgJiMzNDt3aWZpNyYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzIKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUENJIERyaXZlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBQQ0kgZHJpdmVyIGdldHMgaW5pdGlhbGl6ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBjb3JlIFBDSSBkcml2ZXIgY29kZSwgcHJvYmFibHkgYHBjaS5jYC4gSSBuZWVkIHRvIGxvb2sgZm9yIHRoZSBzdGFuZGFyZCBpbml0aWFsaXphdGlvbiBob29rcy4gSSYjMzk7bSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgYG1vZHVsZV9pbml0YCwgb3IgYW55dGhpbmcgc2ltaWxhciB0aGF0IGhhbmRsZXMgZHJpdmVyIHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgYW5kIGl0JiMzOTtsbCBnaXZlIG1lIGEgcm9hZG1hcCBvZiBob3cgdGhlIGRyaXZlciBpcyBicm91Z2h0IHRvIGxpZmUgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgUENJIHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bW9kdWxlX2luaXR8bW9kdWxlX3BjaV9kcml2ZXJ8cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBfX21heWJlX3VudXNlZCBhdGgxMmtfcGNpX3BtX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MDMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MDQ6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODA1LVx0XHRcdCAgICAgICBzdHJ1Y3QgYXRoMTJrX3BjaV9kcml2ZXIgKmRyaXZlcilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MzAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MzE6XHRyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcihwY2lfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgzMi19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MzM6RVhQT1JUX1NZTUJPTChhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwOTMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXJgIEZ1bmN0aW9uKioKClJpZ2h0LCBgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXJgIGlzIGV4cG9ydGVkLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluaywgJiMzNDtJbnRlcmVzdGluZy4gTGV0JiMzOTtzIHNlZSB3aG8mIzM5O3MgYWN0dWFsbHkgbWFraW5nIHVzZSBvZiB0aGlzLiYjMzQ7IFRoZSBmYWN0IHRoYXQgaXQmIzM5O3MgZXhwb3J0ZWQgaW1wbGllcyBpdCYjMzk7cyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUgaXQmIzM5O3MgZGVmaW5lZCBpbi4gVGhpcyBpbW1lZGlhdGVseSB0ZWxscyBtZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBjYWxsIHNpdGVzIHRvIHVuZGVyc3RhbmQgdGhlIG1vZHVsZSYjMzk7cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBoYW5kbGluZyB0aGUgcmVnaXN0cmF0aW9uIG9mIHRoZSBQQ0kgZHJpdmVyIGl0c2VsZi4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoZSBkcml2ZXIgcmVnaXN0cmF0aW9uLCBhcmUgd2UgZGVhbGluZyB3aXRoIGEgc3BlY2lmaWMgZGV2aWNlIElELCBhcmUgdGhlcmUgYW55IHF1aXJrcyBpbiBwbGF5PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTc5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgX19tYXliZV91bnVzZWQgYXRoMTJrX3BjaV9wbV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODAzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODA0OmludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgwNS1cdFx0XHQgICAgICAgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICpkcml2ZXIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMyLX1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTgzMzpFWFBPUlRfU1lNQk9MKGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgzNC1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oPTE3Nj12b2lkIGF0aDEya19wY2lfcG93ZXJfZG93bihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIGlzX3N1c3BlbmQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzc6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzgtXHRcdFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jPTE5Nz1pbnQgYXRoMTJrX3dpZmk3X3BjaV9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0yMDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L3BjaS5jOjIwMTpcdHJldCA9IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKEFUSDEyS19ERVZJQ0VfRkFNSUxZX1dJRkk3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9wY2kuYy0yMDItXHRcdFx0XHRcdCBcdTAwMjZhdGgxMmtfd2lmaTdfcGNpX2RyaXZlcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5MTQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgYGF0aDEya2AgRHJpdmVyKioKCk9rYXksIHNvIGBhdGgxMmtgIGlzIGEgUENJIGRyaXZlciwgYW5kIGFsc28gYW4gQUhCIGRyaXZlciwgcmlnaHQ/IE15IGluaXRpYWwgdGhvdWdodCBpczogQ2FuIHN5emthbGxlciBldmVuIHRvdWNoIFBDSSBkZXZpY2VzPyBJIGtub3cgaXQgaGFzIHNvbWUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLCB0aGluZ3MgbGlrZSBgc3l6X3BjaV8uLi5gIHBzZXVkby1zeXNjYWxscyBhbmQgdGhlIGB2aGNpYCBpbnRlcmZhY2UgaWYgaXQmIzM5O3MgVVNCLCBidXQgZm9yIFBDSSBzcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGBzeXpfcGNpX2RldmljZV9hZGRgIGFuZCBzdWNoLiBIb3dldmVyLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCBzZWVtcyBRTUkgbWVzc2FnZXMgYXJlIGdvaW5nIGJhY2sgYW5kIGZvcnRoIHdpdGggZmlybXdhcmUuCgpUaGUgYmlnIHF1ZXN0aW9uIG5vdyBpczogRG9lcyBzeXprYWxsZXIgZG8gYW55dGhpbmcgd2l0aCBRTUkgbWVzc2FnZXM/IEkgbmVlZCB0byBxdWlja2x5IGNoZWNrIGlmIHN5emthbGxlciBoYXMgYW55IFFNSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4KCkFoLCB3YWl0LiBUaGUgcHJvbXB0IHNwZWNpZmllcyB0aGlzOiAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IE9rYXksIEkmIzM5O20gdGhpbmtpbmcsIGlmIHRoaXMgKmRvZXMqIG1vZGlmeSByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIG15IHRhc2sgaXMgdG8gdmVyaWZ5IGNvZGUgZXhlY3V0aW9uIHVzaW5nIG15IHByZWZlcnJlZCBjb2RlIHNlYXJjaCB0b29scywgYW5kIHRoZW4gZGVjaWRlIG9uIFdvcnRoRnV6emluZz10cnVlLgoKSG9sZCBvbiwgYGF0aDEya2AgaXMgYSAqZHJpdmVyKiBmb3IgKnNwZWNpZmljKiBoYXJkd2FyZS4gRG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgZnV6eiB0aGUgYGF0aDEya2AgZHJpdmVyIGl0c2VsZj8gSSBrbm93IHN5emthbGxlciBjYW4gZnV6eiBQQ0kgZGV2aWNlcywgYmFzaWNhbGx5IGJ5IGVtdWxhdGluZyB0aGVtLCB3aXRoIHRoaW5ncyBsaWtlIGBzeXpfcGNpXy4uLmAsIGJ1dCB0aGUgdHJpY2t5IHBhcnQgaXMgdGhhdCBgYXRoMTJrYCByZXF1aXJlcyBmaXJtd2FyZSB0byBiZSBsb2FkZWQgYW5kLCB0aGVuIGl0IGNvbW11bmljYXRlcyB3aXRoIHRoZSBmaXJtd2FyZSB1c2luZyBRTUksIHdoaWNoIGlzIG5vdCBhcyBzaW1wbGUgYXMgZnV6emluZyBhIHJlZ3VsYXIgUENJIGRldmljZS4KCklmIHRoZSBmaXJtd2FyZSBpc24mIzM5O3QgdGhlcmUsIHRoZSBkcml2ZXIgd29uJiMzOTt0IGV2ZW4gKnByb2JlKiBzdWNjZXNzZnVsbHkuIFNvLCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBwcm9iZSB3b3Jrcywgd2hlcmUgaXMgdGhlIGluaXRpYWwgcG9pbnQ/IE9rYXksIGxldCYjMzk7cyBsb29rIGF0IGBhdGgxMmtfcGNpX3Byb2JlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX3BjaV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTUwMz1hdGgxMmtfZ2V0X2RldmljZV9mYW1pbHkoY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNTIzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNTI0OnN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUyNS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xODA0PWludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjUtXHRwY2lfZHJpdmVyLVx1MDAzZWlkX3RhYmxlID0gZHJpdmVyLVx1MDAzZWlkX3RhYmxlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODI2Olx0cGNpX2RyaXZlci1cdTAwM2Vwcm9iZSA9IGF0aDEya19wY2lfcHJvYmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MjctXHRwY2lfZHJpdmVyLVx1MDAzZXJlbW92ZSA9IGF0aDEya19wY2lfcmVtb3ZlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA3NQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgYXRoMTJrX3BjaV9wcm9iZWA6CgoqKkFuYWx5emluZyBgYXRoMTJrX3BjaV9wcm9iZWAqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgYGF0aDEya19wY2lfcHJvYmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIHdoYXQgdGhlIGJyb2FkZXIgY29udGV4dCBpcy4gUmlnaHQsIHRoaXMgaXMgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGF0aDEyayBkcml2ZXIuIFRoYXQgbWVhbnMgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIHRyaWVzIHRvIGRldGVjdCBhbmQgaW5pdGlhbGl6ZSBhbiBhdGgxMmstYmFzZWQgV2ktRmkgZGV2aWNlIGNvbm5lY3RlZCB2aWEgUENJLiBUaGF0IGltbWVkaWF0ZWx5IGhpZ2hsaWdodHMgYSBmZXcga2V5IGFyZWFzIEkgbmVlZCB0byBmb2N1cyBvbjogZGV2aWNlIGRldGVjdGlvbiBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYSBkcml2ZXImIzM5O3MgaW5pdGlhbCBjb250YWN0IHdpdGggdGhlIGhhcmR3YXJlLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyBhcmd1bWVudHMuIEkmIzM5O20gYXNzdW1pbmcgaXQgcmVjZWl2ZXMgYSBgcGNpX2RldmAgcG9pbnRlci4gT2theSwgc28gdGhhdCBzaG91bGQgY29udGFpbiB0aGUgUENJIGRldmljZSBzdHJ1Y3R1cmUgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWMgUENJIGRldmljZSBiZWluZyBwcm9iZWQuIFRoZW4gdGhlIGZ1bmN0aW9uIGhhcyB0byBiZWdpbiBieSBjaGVja2luZyB0aGUgZGV2aWNlIElEIGFnYWluc3QgYSBsaXN0IG9mIHN1cHBvcnRlZCBkZXZpY2VzLCBwcm9iYWJseSBpbiBhIGBwY2lfZGV2aWNlX2lkYCB0YWJsZS4gSSB3YW50IHRvIGNoZWNrIGhvdyByb2J1c3QgdGhhdCBJRCBjaGVjayBpcy4gRG9lcyBpdCBoYXZlIG11bHRpcGxlIGlkZW50aWZpZXJzLCBvciBqdXN0IG9uZT8gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSB0aGUgbWF0Y2hpbmcgcHJvY2VzcyBpcyBjcml0aWNhbCB0byBhdm9pZGluZyBjb2xsaXNpb25zIHdpdGggb3RoZXIgZHJpdmVycy4KClRoZW4sIHRoZXJlIG11c3QgYmUgYSBzZXJpZXMgb2YgaW5pdGlhbGl6YXRpb24gc3RlcHMuIEkmIzM5O20gbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbjoKCiogICAqKk1hcHMgdGhlIFBDSSBCQVJzIChCYXNlIEFkZHJlc3MgUmVnaXN0ZXJzKS4qKiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgYWNjZXNzaW5nIHRoZSBkZXZpY2UmIzM5O3MgcmVnaXN0ZXJzIGluIG1lbW9yeSBzcGFjZS4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZSBtYXBwaW5nIHByb2Nlc3MuIERvZXMgaXQgdW5tYXAgdGhlbSBvbiBlcnJvcj8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBzcGVjaWFsIGhhbmRsaW5nIG9mIGRpZmZlcmVudCBCQVIgdHlwZXMgKGUuZy4sIG1lbW9yeSB2cy4gSU8pLiBBcmUgdGhlcmUgYW55IHF1aXJrcyBuZWVkZWQgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmU/CiogICAqKlJlcXVlc3RzIERNQSByZXNvdXJjZXMuKiogQW55IG1vZGVybiB3aXJlbGVzcyBkcml2ZXIgbmVlZHMgRE1BLiBJJiMzOTtkIG5lZWQgdG8gZXhhbWluZSBob3cgdGhlIG1lbW9yeSByZWdpb25zIGFyZSBzZXQgdXAgYW5kIGhvdyB0aGUgRE1BIGNvbmZpZ3VyYXRpb24gaXMgbWFuYWdlZC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBhbGlnbm1lbnQgY29uc3RyYWludHMgb3IgYnVmZmVyIHNpemUgbGltaXRhdGlvbnM/IEFueSBwb3RlbnRpYWwgZm9yIERNQSBidWZmZXIgb3ZlcmZsb3dzPwoqICAgKipHZXRzIHRoZSBwbGF0Zm9ybSBkYXRhLioqIFdoYXQgc3RydWN0dXJlcyBhcmUgbmVlZGVkIHRvIHJlcHJlc2VudCB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZGV2aWNlIGluIHNvZnR3YXJlLCBhbmQgaG93IGlzIGl0IHBvcHVsYXRlZCAobGlrZSB0aGUgYXNzb2NpYXRlZCBmaXJtd2FyZSBmaWxlLCBmb3IgZXhhbXBsZSk/CiogICAqKlJlZ2lzdGVycyB0aGUgZGV2aWNlLioqIEZpbmFsbHksIGl0IGxpa2VseSByZWdpc3RlcnMgdGhlIG5ld2x5IGRpc2NvdmVyZWQgV2ktRmkgZGV2aWNlIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JrIHN0YWNrLiBJIHdhbnQgdG8gc2VlIHdoZXJlIGl0IGhvb2tzIGludG8gdGhlIGNvcmUgbmV0d29yayBpbnRlcmZhY2VzLgoKQmV5b25kIHRoZSBiYXNpYyBwcm9iZSBzZXF1ZW5jZSwgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGVycm9yIGhhbmRsaW5nLCBvZiBjb3Vyc2UuIEkmIzM5O2QgbG9vayBmb3IgaG93IHRoZSBkcml2ZXIgZ3JhY2VmdWxseSBoYW5kbGVzIGZhaWx1cmVzIGF0IHZhcmlvdXMgc3RhZ2VzIOKAkyBpbnZhbGlkIFBDSSBjb25maWd1cmF0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uIGVycm9ycywgZmlybXdhcmUgbG9hZGluZyBmYWlsdXJlcywgZXRjLiBJdCYjMzk7cyBhbHNvIHdvcnRoIGNoZWNraW5nIGhvdyBpdCBjbGVhbnMgdXAgcmVzb3VyY2VzIGlmIGFueSBzdGVwIGZhaWxzOyBlc3BlY2lhbGx5IGluIGEgcHJvYmUgZnVuY3Rpb24sIHlvdSB3YW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBvciBsZWF2aW5nIHRoZSBzeXN0ZW0gaW4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RhdGUuCgpJIGFsc28gd2FudCB0byBsb29rIGZvciB3aGF0IHRoaXMgZnVuY3Rpb24gbGVhdmVzIHRvIG90aGVyIGZ1bmN0aW9ucyB0byBpbml0aWFsaXplLiBJdCB3aWxsIHByb2JhYmx5IGhhdmUgdG8gbGF1bmNoIGEgZmlybXdhcmUgZG93bmxvYWQgYW5kIGhhbmRsZSB0aGUgcG93ZXIgb24gc2VxdWVuY2UgZm9yIHRoZSBXaS1GaSBjYXJkLiBJIGhhdmUgdG8gbG9vayBmb3IgYW55IGNsdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTI0Olx0c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuMTUyNTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcbjE1MjY6XHR7XG4xNTI3Olx0XHRlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZDtcbjE1Mjg6XHRcdHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2k7XG4xNTI5Olx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiO1xuMTUzMDpcdFx0aW50IHJldDtcbjE1MzE6XHRcbjE1MzI6XHRcdGFiID0gYXRoMTJrX2NvcmVfYWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqYWJfcGNpKSwgQVRIMTJLX0JVU19QQ0kpO1xuMTUzMzpcdFx0aWYgKCFhYikge1xuMTUzNDpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgYXRoMTJrIGJhc2VcXG5cJiMzNDspO1xuMTUzNTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE1MzY6XHRcdH1cbjE1Mzc6XHRcbjE1Mzg6XHRcdGFiLVx1MDAzZWRldiA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuMTUzOTpcdFx0YWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcbjE1NDA6XHRcdGFiX3BjaS1cdTAwM2VkZXZfaWQgPSBwY2lfZGV2LVx1MDAzZWRldmljZTtcbjE1NDE6XHRcdGFiX3BjaS1cdTAwM2VhYiA9IGFiO1xuMTU0MjpcdFx0YWJfcGNpLVx1MDAzZXBkZXYgPSBwZGV2O1xuMTU0MzpcdFx0YWItXHUwMDNlaGlmLm9wcyA9IFx1MDAyNmF0aDEya19wY2lfaGlmX29wcztcbjE1NDQ6XHRcdGFiLVx1MDAzZWZ3X21vZGUgPSBBVEgxMktfRklSTVdBUkVfTU9ERV9OT1JNQUw7XG4xNTQ1Olx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgYWIpO1xuMTU0NjpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YWJfcGNpLVx1MDAzZXdpbmRvd19sb2NrKTtcbjE1NDc6XHRcbjE1NDg6XHRcdHJldCA9IGF0aDEya19wY2lfY2xhaW0oYWJfcGNpLCBwZGV2KTtcbjE1NDk6XHRcdGlmIChyZXQpIHtcbjE1NTA6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNsYWltIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xNTUxOlx0XHRcdGdvdG8gZXJyX2ZyZWVfY29yZTtcbjE1NTI6XHRcdH1cbjE1NTM6XHRcbjE1NTQ6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCwgXCYjMzQ7cGNpIHByb2JlICUwNHg6JTA0eCAlMDR4OiUwNHhcXG5cJiMzNDssXG4xNTU1Olx0XHRcdCAgIHBkZXYtXHUwMDNldmVuZG9yLCBwZGV2LVx1MDAzZWRldmljZSxcbjE1NTY6XHRcdFx0ICAgcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yLCBwZGV2LVx1MDAzZXN1YnN5c3RlbV9kZXZpY2UpO1xuMTU1NzpcdFxuMTU1ODpcdFx0YWItXHUwMDNlaWQudmVuZG9yID0gcGRldi1cdTAwM2V2ZW5kb3I7XG4xNTU5Olx0XHRhYi1cdTAwM2VpZC5kZXZpY2UgPSBwZGV2LVx1MDAzZWRldmljZTtcbjE1NjA6XHRcdGFiLVx1MDAzZWlkLnN1YnN5c3RlbV92ZW5kb3IgPSBwZGV2LVx1MDAzZXN1YnN5c3RlbV92ZW5kb3I7XG4xNTYxOlx0XHRhYi1cdTAwM2VpZC5zdWJzeXN0ZW1fZGV2aWNlID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlO1xuMTU2MjpcdFxuMTU2MzpcdFx0ZGV2aWNlX2lkID0gYXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KHBjaV9kZXYpO1xuMTU2NDpcdFx0aWYgKGRldmljZV9pZCBcdTAwM2U9IEFUSDEyS19ERVZJQ0VfRkFNSUxZX01BWCkge1xuMTU2NTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gZ2V0IGRldmljZSBmYW1pbHkgaWRcXG5cJiMzNDspO1xuMTU2NjpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuMTU2NzpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNTY4Olx0XHR9XG4xNTY5Olx0XG4xNTcwOlx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1BDSSwgXCYjMzQ7UENJIGRldmljZSBmYW1pbHkgaWQ6ICVkXFxuXCYjMzQ7LCBkZXZpY2VfaWQpO1xuMTU3MTpcdFxuMTU3MjpcdFx0YWJfcGNpLVx1MDAzZWRldmljZV9mYW1pbHlfb3BzID0gXHUwMDI2YXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVx1MDAzZW9wcztcbjE1NzM6XHRcdGFiX3BjaS1cdTAwM2VyZWdfYmFzZSA9IGF0aDEya19wY2lfZmFtaWx5X2RyaXZlcnNbZGV2aWNlX2lkXS1cdTAwM2VyZWdfYmFzZTtcbjE1NzQ6XHRcbjE1NzU6XHRcdC8qIENhbGwgZGV2aWNlIHNwZWNpZmljIHByb2JlLiBUaGlzIGlzIHRoZSBjYWxsYmFjayB0aGF0IGNhblxuMTU3NjpcdFx0ICogYmUgdXNlZCB0byBvdmVycmlkZSBhbnkgb3BzIGluIGZ1dHVyZVxuMTU3NzpcdFx0ICogcHJvYmUgaXMgdmFsaWRhdGVkIGZvciBOVUxMIGR1cmluZyByZWdpc3RyYXRpb24uXG4xNTc4Olx0XHQgKi9cbjE1Nzk6XHRcdHJldCA9IGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2Vwcm9iZShwZGV2LCBwY2lfZGV2KTtcbjE1ODA6XHRcdGlmIChyZXQpIHtcbjE1ODE6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHByb2JlIGRldmljZTogJWRcXG5cJiMzNDssIHJldCk7XG4xNTgyOlx0XHRcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcbjE1ODM6XHRcdH1cbjE1ODQ6XHRcbjE1ODU6XHRcdHJldCA9IGF0aDEya19wY2lfbXNpX2FsbG9jKGFiX3BjaSk7XG4xNTg2Olx0XHRpZiAocmV0KSB7XG4xNTg3Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvYyBtc2k6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU4ODpcdFx0XHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XG4xNTg5Olx0XHR9XG4xNTkwOlx0XG4xNTkxOlx0XHRyZXQgPSBhdGgxMmtfY29yZV9wcmVfaW5pdChhYik7XG4xNTkyOlx0XHRpZiAocmV0KVxuMTU5MzpcdFx0XHRnb3RvIGVycl9wY2lfbXNpX2ZyZWU7XG4xNTk0Olx0XG4xNTk1Olx0XHRyZXQgPSBhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChhYl9wY2ksIGNwdW1hc2tfb2YoMCkpO1xuMTU5NjpcdFx0aWYgKHJldCkge1xuMTU5NzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2V0IGlycSBhZmZpbml0eSAlZFxcblwmIzM0OywgcmV0KTtcbjE1OTg6XHRcdFx0Z290byBlcnJfcGNpX21zaV9mcmVlO1xuMTU5OTpcdFx0fVxuMTYwMDpcdFxuMTYwMTpcdFx0cmV0ID0gYXRoMTJrX21oaV9yZWdpc3RlcihhYl9wY2kpO1xuMTYwMjpcdFx0aWYgKHJldCkge1xuMTYwMzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgbWhpOiAlZFxcblwmIzM0OywgcmV0KTtcbjE2MDQ6XHRcdFx0Z290byBlcnJfaXJxX2FmZmluaXR5X2NsZWFudXA7XG4xNjA1Olx0XHR9XG4xNjA2Olx0XG4xNjA3Olx0XHRyZXQgPSBhdGgxMmtfaGFsX3NybmdfaW5pdChhYik7XG4xNjA4Olx0XHRpZiAocmV0KVxuMTYwOTpcdFx0XHRnb3RvIGVycl9taGlfdW5yZWdpc3RlcjtcbjE2MTA6XHRcbjE2MTE6XHRcdHJldCA9IGF0aDEya19jZV9hbGxvY19waXBlcyhhYik7XG4xNjEyOlx0XHRpZiAocmV0KSB7XG4xNjEzOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSBjZSBwaXBlczogJWRcXG5cJiMzNDssIHJldCk7XG4xNjE0Olx0XHRcdGdvdG8gZXJyX2hhbF9zcm5nX2RlaW5pdDtcbjE2MTU6XHRcdH1cbjE2MTY6XHRcbjE2MTc6XHRcdGF0aDEya19wY2lfaW5pdF9xbWlfY2VfY29uZmlnKGFiKTtcbjE2MTg6XHRcbjE2MTk6XHRcdHJldCA9IGF0aDEya19wY2lfY29uZmlnX2lycShhYik7XG4xNjIwOlx0XHRpZiAocmV0KSB7XG4xNjIxOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBjb25maWcgaXJxOiAlZFxcblwmIzM0OywgcmV0KTtcbjE2MjI6XHRcdFx0Z290byBlcnJfY2VfZnJlZTtcbjE2MjM6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzYKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIGBhdGgxMmtfcGNpX3Byb2JlYCoqCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCBzZXR1cCBpcyBwcmV0dHkgc3RhbmRhcmQuIFdlJiMzOTt2ZSBnb3QgYGF0aDEya19taGlfcmVnaXN0ZXJgIGhhcHBlbmluZyBmaXJzdCwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBoYW5kbGVzIHRoZSBNb2JpbGUgSG9zdCBJbnRlcmZhY2UgcmVnaXN0cmF0aW9uLiBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBncm91bmR3b3JrIGZvciB0aGlzIGtpbmQgb2YgUENJIGRldmljZS4gVGhlbiBpdCBhbGxvY2F0ZXMgQ0UgKENvbXBsZXRpb24gRW5naW5lKSBwaXBlcy4gR29vZCwgd2UgbmVlZCB0aG9zZSBmb3IgZGF0YSB0cmFuc2Zlci4gQWZ0ZXIgdGhhdCwgY29uZmlndXJpbmcgdGhlIGludGVycnVwdHMuIENhbiYjMzk7dCBmb3JnZXQgdGhvc2UhIFRoZSByZWFsIG1lYXQgb2YgdGhlIGluaXRpYWxpemF0aW9uIHdpbGwgbGlrZWx5IGJlIHRoZSBjYWxsIHRvIGBhdGgxMmtfY29yZV9pbml0YCBsYXRlciBvbiDigJMgSSYjMzk7bSBiZXR0aW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlZXBlciBjb25maWd1cmF0aW9uIGFuZCBicmluZ3VwIG9jY3VyLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGNoaXAgbm93ISBMZXQmIzM5O3MgZ2V0IHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhpcyBgYXRoMTJrX3BjaV9wcm9iZWAgY29kZS4gSSYjMzk7bSBrZWVuIHRvIHNlZSB0aGUgZmxvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYyNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTYyNDpcdFxuMTYyNTpcdFx0Lyoga2VybmVsIG1heSBhbGxvY2F0ZSBhIGR1bW15IHZlY3RvciBiZWZvcmUgcmVxdWVzdF9pcnEgYW5kXG4xNjI2Olx0XHQgKiB0aGVuIGFsbG9jYXRlIGEgcmVhbCB2ZWN0b3Igd2hlbiByZXF1ZXN0X2lycSBpcyBjYWxsZWQuXG4xNjI3Olx0XHQgKiBTbyBnZXQgbXNpX2RhdGEgaGVyZSBhZ2FpbiB0byBhdm9pZCBzcHVyaW91cyBpbnRlcnJ1cHRcbjE2Mjg6XHRcdCAqIGFzIG1zaV9kYXRhIHdpbGwgY29uZmlndXJlZCB0byBzcm5ncy5cbjE2Mjk6XHRcdCAqL1xuMTYzMDpcdFx0cmV0ID0gYXRoMTJrX3BjaV9jb25maWdfbXNpX2RhdGEoYWJfcGNpKTtcbjE2MzE6XHRcdGlmIChyZXQpIHtcbjE2MzI6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbmZpZyBtc2lfZGF0YTogJWRcXG5cJiMzNDssIHJldCk7XG4xNjMzOlx0XHRcdGdvdG8gZXJyX2ZyZWVfaXJxO1xuMTYzNDpcdFx0fVxuMTYzNTpcdFxuMTYzNjpcdFx0LyogSW52b2tlIGFyY2hfaW5pdCBoZXJlIHNvIHRoYXQgYXJjaC1zcGVjaWZpYyBpbml0IG9wZXJhdGlvbnNcbjE2Mzc6XHRcdCAqIGNhbiB1dGlsaXplIGFscmVhZHkgaW5pdGlhbGl6ZWQgYWIgZmllbGRzLCBzdWNoIGFzIEhBTCBTUk5Hcy5cbjE2Mzg6XHRcdCAqL1xuMTYzOTpcdFx0cmV0ID0gYWJfcGNpLVx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVx1MDAzZWFyY2hfaW5pdChhYik7XG4xNjQwOlx0XHRpZiAocmV0KSB7XG4xNjQxOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O1BDSSBhcmNoX2luaXQgZmFpbGVkICVkXFxuXCYjMzQ7LCByZXQpO1xuMTY0MjpcdFx0XHRnb3RvIGVycl9mcmVlX2lycTtcbjE2NDM6XHRcdH1cbjE2NDQ6XHRcbjE2NDU6XHRcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xuMTY0NjpcdFx0aWYgKHJldCkge1xuMTY0NzpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gaW5pdCBjb3JlOiAlZFxcblwmIzM0OywgcmV0KTtcbjE2NDg6XHRcdFx0Z290byBlcnJfZGVpbml0X2FyY2g7XG4xNjQ5Olx0XHR9XG4xNjUwOlx0XHRyZXR1cm4gMDtcbjE2NTE6XHRcbjE2NTI6XHRlcnJfZGVpbml0X2FyY2g6XG4xNjUzOlx0XHRhYl9wY2ktXHUwMDNlZGV2aWNlX2ZhbWlseV9vcHMtXHUwMDNlYXJjaF9kZWluaXQoYWIpO1xuMTY1NDpcdFxuMTY1NTpcdGVycl9mcmVlX2lycTpcbjE2NTY6XHRcdC8qIF9fZnJlZV9pcnEoKSBleHBlY3RzIHRoZSBjYWxsZXIgdG8gaGF2ZSBjbGVhcmVkIHRoZSBhZmZpbml0eSBoaW50ICovXG4xNjU3Olx0XHRhdGgxMmtfcGNpX3NldF9pcnFfYWZmaW5pdHlfaGludChhYl9wY2ksIE5VTEwpO1xuMTY1ODpcdFx0YXRoMTJrX3BjaV9mcmVlX2lycShhYik7XG4xNjU5Olx0XG4xNjYwOlx0ZXJyX2NlX2ZyZWU6XG4xNjYxOlx0XHRhdGgxMmtfY2VfZnJlZV9waXBlcyhhYik7XG4xNjYyOlx0XG4xNjYzOlx0ZXJyX2hhbF9zcm5nX2RlaW5pdDpcbjE2NjQ6XHRcdGF0aDEya19oYWxfc3JuZ19kZWluaXQoYWIpO1xuMTY2NTpcdFxuMTY2NjpcdGVycl9taGlfdW5yZWdpc3RlcjpcbjE2Njc6XHRcdGF0aDEya19taGlfdW5yZWdpc3RlcihhYl9wY2kpO1xuMTY2ODpcdFxuMTY2OTpcdGVycl9pcnFfYWZmaW5pdHlfY2xlYW51cDpcbjE2NzA6XHRcdGF0aDEya19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KGFiX3BjaSwgTlVMTCk7XG4xNjcxOlx0XG4xNjcyOlx0ZXJyX3BjaV9tc2lfZnJlZTpcbjE2NzM6XHRcdGF0aDEya19wY2lfbXNpX2ZyZWUoYWJfcGNpKTtcbjE2NzQ6XHRcbjE2NzU6XHRlcnJfcGNpX2ZyZWVfcmVnaW9uOlxuMTY3NjpcdFx0YXRoMTJrX3BjaV9mcmVlX3JlZ2lvbihhYl9wY2kpO1xuMTY3NzpcdFxuMTY3ODpcdGVycl9mcmVlX2NvcmU6XG4xNjc5Olx0XHRhdGgxMmtfY29yZV9mcmVlKGFiKTtcbjE2ODA6XHRcbjE2ODE6XHRcdHJldHVybiByZXQ7XG4xNjgyOlx0fVxuMTY4MzpcdFxuMTY4NDpcdHN0YXRpYyB2b2lkIGF0aDEya19wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuMTY4NTpcdHtcbjE2ODY6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XG4xNjg3Olx0XHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcbjE2ODg6XHRcbjE2ODk6XHRcdGF0aDEya19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KGFiX3BjaSwgTlVMTCk7XG4xNjkwOlx0XG4xNjkxOlx0XHRpZiAodGVzdF9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncykpIHtcbjE2OTI6XHRcdFx0YXRoMTJrX3BjaV9wb3dlcl9kb3duKGFiLCBmYWxzZSk7XG4xNjkzOlx0XHRcdGdvdG8gcW1pX2ZhaWw7XG4xNjk0Olx0XHR9XG4xNjk1Olx0XG4xNjk2Olx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1VOUkVHSVNURVJJTkcsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG4xNjk3Olx0XG4xNjk4Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmFiLVx1MDAzZXJlc2V0X3dvcmspO1xuMTY5OTpcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZhYi1cdTAwM2VkdW1wX3dvcmspO1xuMTcwMDpcdFx0YXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChhYi1cdTAwM2VhZyk7XG4xNzAxOlx0XG4xNzAyOlx0cW1pX2ZhaWw6XG4xNzAzOlx0XHRhdGgxMmtfY29yZV9kZWluaXQoYWIpO1xuMTcwNDpcdFx0YXRoMTJrX2Z3X3VubWFwKGFiKTtcbjE3MDU6XHRcdGF0aDEya19taGlfdW5yZWdpc3RlcihhYl9wY2kpO1xuMTcwNjpcdFxuMTcwNzpcdFx0YXRoMTJrX3BjaV9mcmVlX2lycShhYik7XG4xNzA4Olx0XHRhdGgxMmtfcGNpX21zaV9mcmVlKGFiX3BjaSk7XG4xNzA5Olx0XHRhdGgxMmtfcGNpX2ZyZWVfcmVnaW9uKGFiX3BjaSk7XG4xNzEwOlx0XG4xNzExOlx0XHRhdGgxMmtfaGFsX3NybmdfZGVpbml0KGFiKTtcbjE3MTI6XHRcdGF0aDEya19jZV9mcmVlX3BpcGVzKGFiKTtcbjE3MTM6XHRcbjE3MTQ6XHRcdGFiX3BjaS1cdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cdTAwM2VhcmNoX2RlaW5pdChhYik7XG4xNzE1Olx0XG4xNzE2Olx0XHRhdGgxMmtfY29yZV9mcmVlKGFiKTtcbjE3MTc6XHR9XG4xNzE4Olx0XG4xNzE5Olx0c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9od19ncm91cF9wb3dlcl9kb3duKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuMTcyMDpcdHtcbjE3MjE6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XG4xNzIyOlx0XHRpbnQgaTtcbjE3MjM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTYKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgaW5pdGlhbCB0aG91Z2h0cywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGZ1bmN0aW9uIGNhbGw6CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhdGgxMmtfY29yZV9pbml0KioKCk9rYXksIGBhdGgxMmtfY29yZV9pbml0YC4gTGV0JiMzOTtzIGRpdmUgaW4uIEkgc2VlIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCBzbyBpdCYjMzk7cyBjbGVhcmx5IGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHRoaXMgYXRoMTJrIGRyaXZlci4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgb3ZlcmFsbCBnb2FsIG9mIHRoaXMgaW5pdGlhbGl6YXRpb24/IElzIGl0IHNldHRpbmcgdXAgaGFyZHdhcmUgcmVzb3VyY2VzLCByZWdpc3RlcmluZyB3aXRoIHRoZSBrZXJuZWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmUgZmlyc3QuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBsb29rIGZvciBhbnkgaGlnaC1sZXZlbCBjb21tZW50cyBvciBmdW5jdGlvbiBjYWxsIHRyYWNlcyB0byBlc3RhYmxpc2ggdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgbWVudGFsbHkgbm90ZSBhbnkga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBwYXNzZWQgaW4gb3IgaW5pdGlhbGl6ZWQsIGFzIHRob3NlIHdpbGwgYmUgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgZHJpdmVyJiMzOTtzIGludGVybmFsIHN0YXRlLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgb2Z0ZW4gaGFuZGxlIHJlc291cmNlIGFsbG9jYXRpb24sIHNvIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgdGhhdC4gSSB3aWxsIHRoZW4gZXhhbWluZSB0aGUgY29yZSB0YXNrcyB0aGlzIGZ1bmN0aW9uIGFjY29tcGxpc2hlcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGF0aDEya19jb3JlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0yMTg4PXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc2V0X21sb19jYXBhYmxlKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTIyMjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoyMjI5OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0yMjMwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaD0xMjY0PWludCBhdGgxMmtfY29yZV9wcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5oOjEyNjU6aW50IGF0aDEya19jb3JlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphdGgxMmspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmgtMTI2Ni12b2lkIGF0aDEya19jb3JlX2RlaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEyayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDg3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYXRoMTJrX2NvcmVfaW5pdGAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBnaXZlbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoZSBzdGFuZGFyZCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc3RlcHMsIGJ1dCBJIHdhbnQgdG8gbG9vayBmb3IgYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlIGF0aDEyayBjaGlwIG9yIGFueSBub3ZlbCBhcHByb2FjaGVzIGl0IHRha2VzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHJlZ2lzdGVyIGFjY2VzcyBwYXR0ZXJucywgbWVtb3J5IGFsbG9jYXRpb24sIGhhcmR3YXJlIHNldHVwIHNlcXVlbmNlcywgYW5kIGFueSBwb3RlbnRpYWwgcG93ZXIgbWFuYWdlbWVudCBvciBpbnRlcnJ1cHQgY29uZmlndXJhdGlvbiB0aGF0JiMzOTtzIGRvbmUgYXQgdGhpcyBzdGFnZS4gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNldCB1cCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4gQXJlIHRoZXJlIGFueSBlYXJseSBlcnJvciBjaGVja3Mgb3IgZGVidWcgcHJpbnRzIHRoYXQgZ2l2ZSBjbHVlcyBhYm91dCBjb21tb24gc3RhcnR1cCBwcm9ibGVtcz8gQW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBhcmUga2V5IHRvIHVuZGVyc3RhbmQgYXQgdGhpcyBzdGFnZSBhcyB0aGV5IGNhbiBzaWduaWZpY2FudGx5IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGxhdGVyIG9uLiBJJiMzOTttIGFsc28gaG9waW5nIHRvIHNwb3QgYW55IHBvdGVudGlhbCBwb2ludHMgZm9yIGN1c3RvbWl6YXRpb24gb3IgY29uZmlndXJhdGlvbiBpZiBpdCYjMzk7cyBhcHBsaWNhYmxlIHRvIG15IHByb2plY3QuIEZpbmFsbHksIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggYW55IGZpcm13YXJlIGxvYWRpbmcgb3IgZGV2aWNlIHByb2JlIHJvdXRpbmVzLCBhcyB0aGF0JiMzOTtzIG9mdGVuIGEgY3JpdGljYWwgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMjksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyMjk6XHRpbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuMjIzMDpcdHtcbjIyMzE6XHRcdHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnO1xuMjIzMjpcdFx0aW50IHJldDtcbjIyMzM6XHRcbjIyMzQ6XHRcdHJldCA9IGF0aDEya19jb3JlX3BhbmljX25vdGlmaWVyX3JlZ2lzdGVyKGFiKTtcbjIyMzU6XHRcdGlmIChyZXQpXG4yMjM2Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgcGFuaWMgaGFuZGxlcjogJWRcXG5cJiMzNDssIHJldCk7XG4yMjM3Olx0XG4yMjM4Olx0XHRtdXRleF9sb2NrKFx1MDAyNmF0aDEya19od19ncm91cF9tdXRleCk7XG4yMjM5Olx0XG4yMjQwOlx0XHRhZyA9IGF0aDEya19jb3JlX2h3X2dyb3VwX2Fzc2lnbihhYik7XG4yMjQxOlx0XHRpZiAoIWFnKSB7XG4yMjQyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xuMjI0MzpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7dW5hYmxlIHRvIGdldCBodyBncm91cFxcblwmIzM0Oyk7XG4yMjQ0Olx0XHRcdHJldCA9IC1FTk9ERVY7XG4yMjQ1Olx0XHRcdGdvdG8gZXJyX3VucmVnaXN0ZXJfbm90aWZpZXI7XG4yMjQ2Olx0XHR9XG4yMjQ3Olx0XG4yMjQ4Olx0XHRtdXRleF91bmxvY2soXHUwMDI2YXRoMTJrX2h3X2dyb3VwX211dGV4KTtcbjIyNDk6XHRcbjIyNTA6XHRcdG11dGV4X2xvY2soXHUwMDI2YWctXHUwMDNlbXV0ZXgpO1xuMjI1MTpcdFxuMjI1MjpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcJiMzNDtudW0gZGV2aWNlcyAlZCBudW0gcHJvYmVkICVkXFxuXCYjMzQ7LFxuMjI1MzpcdFx0XHQgICBhZy1cdTAwM2VudW1fZGV2aWNlcywgYWctXHUwMDNlbnVtX3Byb2JlZCk7XG4yMjU0Olx0XG4yMjU1Olx0XHRpZiAoYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlX3JlYWR5KGFnKSkge1xuMjI1NjpcdFx0XHRyZXQgPSBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGUoYWcpO1xuMjI1NzpcdFx0XHRpZiAocmV0KSB7XG4yMjU4Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFnLVx1MDAzZW11dGV4KTtcbjIyNTk6XHRcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7dW5hYmxlIHRvIGNyZWF0ZSBodyBncm91cFxcblwmIzM0Oyk7XG4yMjYwOlx0XHRcdFx0Z290byBlcnJfdW5hc3NpZ25faHdfZ3JvdXA7XG4yMjYxOlx0XHRcdH1cbjIyNjI6XHRcdH1cbjIyNjM6XHRcbjIyNjQ6XHRcdG11dGV4X3VubG9jayhcdTAwMjZhZy1cdTAwM2VtdXRleCk7XG4yMjY1Olx0XG4yMjY2Olx0XHRyZXR1cm4gMDtcbjIyNjc6XHRcbjIyNjg6XHRlcnJfdW5hc3NpZ25faHdfZ3JvdXA6XG4yMjY5Olx0XHRhdGgxMmtfY29yZV9od19ncm91cF91bmFzc2lnbihhYik7XG4yMjcwOlx0ZXJyX3VucmVnaXN0ZXJfbm90aWZpZXI6XG4yMjcxOlx0XHRhdGgxMmtfY29yZV9wYW5pY19ub3RpZmllcl91bnJlZ2lzdGVyKGFiKTtcbjIyNzI6XHRcbjIyNzM6XHRcdHJldHVybiByZXQ7XG4yMjc0Olx0fVxuMjI3NTpcdFxuMjI3NjpcdHZvaWQgYXRoMTJrX2NvcmVfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4yMjc3Olx0e1xuMjI3ODpcdFx0YXRoMTJrX2NvcmVfaHdfZ3JvdXBfZGVzdHJveShhYi1cdTAwM2VhZyk7XG4yMjc5Olx0XHRhdGgxMmtfY29yZV9od19ncm91cF91bmFzc2lnbihhYik7XG4yMjgwOlx0XHRhdGgxMmtfY29yZV9wYW5pY19ub3RpZmllcl91bnJlZ2lzdGVyKGFiKTtcbjIyODE6XHR9XG4yMjgyOlx0XG4yMjgzOlx0dm9pZCBhdGgxMmtfY29yZV9mcmVlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4yMjg0Olx0e1xuMjI4NTpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2YWItXHUwMDNlcnhfcmVwbGVuaXNoX3JldHJ5KTtcbjIyODY6XHRcdGF0aDEya193bWlfZnJlZSgpO1xuMjI4NzpcdFx0ZGVzdHJveV93b3JrcXVldWUoYWItXHUwMDNld29ya3F1ZXVlX2F1eCk7XG4yMjg4Olx0XHRkZXN0cm95X3dvcmtxdWV1ZShhYi1cdTAwM2V3b3JrcXVldWUpO1xuMjI4OTpcdFx0a2ZyZWUoYWIpO1xuMjI5MDpcdH1cbjIyOTE6XHRcbjIyOTI6XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmF0aDEya19jb3JlX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHByaXZfc2l6ZSxcbjIyOTM6XHRcdFx0XHRcdCAgICAgIGVudW0gYXRoMTJrX2J1cyBidXMpXG4yMjk0Olx0e1xuMjI5NTpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcbjIyOTY6XHRcbjIyOTc6XHRcdGFiID0ga3phbGxvYyhzaXplb2YoKmFiKSAmIzQzOyBwcml2X3NpemUsIEdGUF9LRVJORUwpO1xuMjI5ODpcdFx0aWYgKCFhYilcbjIyOTk6XHRcdFx0cmV0dXJuIE5VTEw7XG4yMzAwOlx0XG4yMzAxOlx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2YWItXHUwMDNlZHJpdmVyX3JlY292ZXJ5KTtcbjIzMDI6XHRcbjIzMDM6XHRcdGFiLVx1MDAzZXdvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFwmIzM0O2F0aDEya193cVwmIzM0Oyk7XG4yMzA0Olx0XHRpZiAoIWFiLVx1MDAzZXdvcmtxdWV1ZSlcbjIzMDU6XHRcdFx0Z290byBlcnJfc2NfZnJlZTtcbjIzMDY6XHRcbjIzMDc6XHRcdGFiLVx1MDAzZXdvcmtxdWV1ZV9hdXggPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcJiMzNDthdGgxMmtfYXV4X3dxXCYjMzQ7KTtcbjIzMDg6XHRcdGlmICghYWItXHUwMDNld29ya3F1ZXVlX2F1eClcbjIzMDk6XHRcdFx0Z290byBlcnJfZnJlZV93cTtcbjIzMTA6XHRcbjIzMTE6XHRcdGlmIChhdGgxMmtfd21pX2FsbG9jKCkgXHUwMDNjIDApXG4yMzEyOlx0XHRcdGdvdG8gZXJyX2ZyZWVfd3FfYXV4O1xuMjMxMzpcdFxuMjMxNDpcdFx0bXV0ZXhfaW5pdChcdTAwMjZhYi1cdTAwM2Vjb3JlX2xvY2spO1xuMjMxNTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2YWItXHUwMDNlYmFzZV9sb2NrKTtcbjIzMTY6XHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZhYi1cdTAwM2VyZXNldF9jb21wbGV0ZSk7XG4yMzE3Olx0XG4yMzE4Olx0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFiLVx1MDAzZXBlZXJfbWFwcGluZ193cSk7XG4yMzE5Olx0XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmFiLVx1MDAzZXdtaV9hYi50eF9jcmVkaXRzX3dxKTtcbjIzMjA6XHRcdElOSVRfV09SSyhcdTAwMjZhYi1cdTAwM2VyZXN0YXJ0X3dvcmssIGF0aDEya19jb3JlX3Jlc3RhcnQpO1xuMjMyMTpcdFx0SU5JVF9XT1JLKFx1MDAyNmFiLVx1MDAzZXJlc2V0X3dvcmssIGF0aDEya19jb3JlX3Jlc2V0KTtcbjIzMjI6XHRcdElOSVRfV09SSyhcdTAwMjZhYi1cdTAwM2VyZmtpbGxfd29yaywgYXRoMTJrX3Jma2lsbF93b3JrKTtcbjIzMjM6XHRcdElOSVRfV09SSyhcdTAwMjZhYi1cdTAwM2VkdW1wX3dvcmssIGF0aDEya19jb3JlZHVtcF91cGxvYWQpO1xuMjMyNDpcdFx0SU5JVF9XT1JLKFx1MDAyNmFiLVx1MDAzZXVwZGF0ZV8xMWRfd29yaywgYXRoMTJrX3VwZGF0ZV8xMWQpO1xuMjMyNTpcdFxuMjMyNjpcdFx0dGltZXJfc2V0dXAoXHUwMDI2YWItXHUwMDNlcnhfcmVwbGVuaXNoX3JldHJ5LCBhdGgxMmtfY2VfcnhfcmVwbGVuaXNoX3JldHJ5LCAwKTtcbjIzMjc6XHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZhYi1cdTAwM2VodGNfc3VzcGVuZCk7XG4yMzI4Olx0XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2YWItXHUwMDNlcmVzdGFydF9jb21wbGV0ZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwNwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBhdGgxMmsgSGFyZHdhcmUgR3JvdXAgQ3JlYXRpb24qKgoKT2theSwgc28gYGF0aDEya19jb3JlX2h3X2dyb3VwX2NyZWF0ZWAganVzdCBnb3QgY2FsbGVkLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZS4gSSYjMzk7bSBhc3N1bWluZyB0aGlzIGlzIHJlbGF0ZWQgdG8gaW5pdGlhbGl6aW5nIG9yIGNvbmZpZ3VyaW5nIHNvbWUgaGFyZHdhcmUgcmVzb3VyY2UgZ3JvdXBpbmcgd2l0aGluIHRoZSBhdGgxMmsgZHJpdmVyLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgbXVsdGktY29yZSBhcmNoaXRlY3R1cmUgb2YgdGhlc2UgbmV3ZXIgUXVhbGNvbW0gY2hpcHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgaGVyZSAtIGRvZXMgdGhpcyBpbnZvbHZlIHJlc291cmNlIGFsbG9jYXRpb24sIGNsb2NrIGdhdGluZywgaW50ZXJydXB0IGJpbmRpbmcsIG9yIHBlcmhhcHMgc29tZXRoaW5nIG1vcmUgYWJzdHJhY3QgbGlrZSBkZWZpbmluZyBmdW5jdGlvbmFsIGRvbWFpbnMgd2l0aGluIHRoZSBoYXJkd2FyZT8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGhhcmR3YXJlIHJlZ2lzdGVycyBpdCYjMzk7cyBtYW5pcHVsYXRpbmcuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGFsbG9jYXRpbmcgbWVtb3J5IHJlZ2lvbnMgZm9yIERNQSwgcmVnaXN0ZXJpbmcgaW50ZXJydXB0IGhhbmRsZXJzLCBvciBwZXJoYXBzIGNvbmZpZ3VyaW5nIHNvbWUga2luZCBvZiBhcmJpdHJhdGlvbiBsb2dpYyBiZXR3ZWVuIGNvcmVzPyBXaGF0IEkgcmVhbGx5IHdhbnQgdG8gZGV0ZXJtaW5lIGlzIGhvdyB0aGlzIGZ1bmN0aW9uIHNldHMgdXAgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdGhlIGRyaXZlciB0byBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgaG93IGl0IGVuc3VyZXMgZWZmaWNpZW50IGFuZCBpc29sYXRlZCBhY2Nlc3MuIEhvcGVmdWxseSwgdGhlIGNvZGUgY29tbWVudHMgYXJlIGdvb2QsIGJ1dCBJJiMzOTtsbCBiZSBwcmVwYXJlZCB0byBmb2xsb3cgdGhlIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGFzIHdlbGw7IGFueSBmYWlsdXJlcyBoZXJlIGNvdWxkIGJlIGEgc2hvdy1zdG9wcGVyIGZvciB0aGUgd2hvbGUgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM9MjExNj12b2lkIGF0aDEya19jb3JlX2h3X2dyb3VwX2NsZWFudXAoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjE0Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jOjIxNDg6c3RhdGljIGludCBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGUoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0yMTQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc1MDIKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgY3JlYXRpb24gb2YgaGFyZHdhcmUgcmVzb3VyY2UgZ3JvdXBzLCBwcm9iYWJseSBzcGVjaWZpYyB0byB0aGUgYXRoMTJrJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGFsbG9jYXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzLCBwZXJoYXBzIGluaXRpYWxpemF0aW9uIG9mIHNvbWUgaGFyZHdhcmUgcmVnaXN0ZXJzLCBhbmQgbGlrZWx5IHNvbWUgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGdyb3VwcyBhcmUgdXNlZC4gV2hhdCBhcmUgdGhlIGtleSBjb21wb25lbnRzIHdpdGhpbiBpdD8gQXJlIHRoZXkgcmVsYXRlZCB0byBETUEsIGludGVycnVwdCBtYW5hZ2VtZW50LCBvciByYWRpbyByZXNvdXJjZXM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHJlZmVyZW5jZXMgdG8gcmVsYXRlZCBzdHJ1Y3R1cmVzIHN1Y2ggYXMgKmF0aDEya19odyogKGlmIHRoaXMgaXMgcmVsZXZhbnQgZm9yIGhvdyB0aGlzIGRyaXZlciBpcyBzdHJ1Y3R1cmVkKSwgKmF0aDEya19ncm91cCosIG9yIGFueXRoaW5nIHRoYXQgbWlnaHQgcmVwcmVzZW50IGEgcGh5c2ljYWwgb3IgbG9naWNhbCBlbnRpdHkgd2l0aGluIHRoZSBoYXJkd2FyZS4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBmb3IgbG9ja2luZyBtZWNoYW5pc21zLCBpZiB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBhIG11bHRpLXRocmVhZGVkIGNvbnRleHQsIGFuZCBpdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIGl0IGlzIGFsbG9jYXRpbmcgc29tZSBuZXcgcmVzb3VyY2VzLCBhbmQvIG9yLCBob3cgdGhlc2UgYXJlIGZyZWVkIHdoZW4gbmVjZXNzYXJ5LiBGaW5hbGx5LCBJIHdpbGwgYmUgc2Nhbm5pbmcgZm9yIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCB3b3JrZmxvdyBhbmQgaG93IGl0IGltcGFjdHMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTQ4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTQ4Olx0c3RhdGljIGludCBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGUoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXG4yMTQ5Olx0e1xuMjE1MDpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcbjIxNTE6XHRcdGludCBpLCByZXQ7XG4yMTUyOlx0XG4yMTUzOlx0XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmFnLVx1MDAzZW11dGV4KTtcbjIxNTQ6XHRcbjIxNTU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFnLVx1MDAzZW51bV9kZXZpY2VzOyBpJiM0MzsmIzQzOykge1xuMjE1NjpcdFx0XHRhYiA9IGFnLVx1MDAzZWFiW2ldO1xuMjE1NzpcdFx0XHRpZiAoIWFiKVxuMjE1ODpcdFx0XHRcdGNvbnRpbnVlO1xuMjE1OTpcdFxuMjE2MDpcdFx0XHRtdXRleF9sb2NrKFx1MDAyNmFiLVx1MDAzZWNvcmVfbG9jayk7XG4yMTYxOlx0XG4yMTYyOlx0XHRcdHJldCA9IGF0aDEya19jb3JlX3NvY19jcmVhdGUoYWIpO1xuMjE2MzpcdFx0XHRpZiAocmV0KSB7XG4yMTY0Olx0XHRcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmFiLVx1MDAzZWNvcmVfbG9jayk7XG4yMTY1Olx0XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNyZWF0ZSBzb2MgJWQgY29yZTogJWRcXG5cJiMzNDssIGksIHJldCk7XG4yMTY2Olx0XHRcdFx0Z290byBkZXN0cm95O1xuMjE2NzpcdFx0XHR9XG4yMTY4Olx0XG4yMTY5Olx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhYi1cdTAwM2Vjb3JlX2xvY2spO1xuMjE3MDpcdFx0fVxuMjE3MTpcdFxuMjE3MjpcdFx0cmV0dXJuIDA7XG4yMTczOlx0XG4yMTc0Olx0ZGVzdHJveTpcbjIxNzU6XHRcdGZvciAoaS0tOyBpIFx1MDAzZT0gMDsgaS0tKSB7XG4yMTc2Olx0XHRcdGFiID0gYWctXHUwMDNlYWJbaV07XG4yMTc3Olx0XHRcdGlmICghYWIpXG4yMTc4Olx0XHRcdFx0Y29udGludWU7XG4yMTc5Olx0XG4yMTgwOlx0XHRcdG11dGV4X2xvY2soXHUwMDI2YWItXHUwMDNlY29yZV9sb2NrKTtcbjIxODE6XHRcdFx0YXRoMTJrX2NvcmVfc29jX2Rlc3Ryb3koYWIpO1xuMjE4MjpcdFx0XHRtdXRleF91bmxvY2soXHUwMDI2YWItXHUwMDNlY29yZV9sb2NrKTtcbjIxODM6XHRcdH1cbjIxODQ6XHRcbjIxODU6XHRcdHJldHVybiByZXQ7XG4yMTg2Olx0fVxuMjE4NzpcdFxuMjE4ODpcdHZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc2V0X21sb19jYXBhYmxlKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxuMjE4OTpcdHtcbjIxOTA6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XG4yMTkxOlx0XHRpbnQgaTtcbjIxOTI6XHRcbjIxOTM6XHRcdGlmIChhdGgxMmtfZnRtX21vZGUpXG4yMTk0Olx0XHRcdHJldHVybjtcbjIxOTU6XHRcbjIxOTY6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YWctXHUwMDNlbXV0ZXgpO1xuMjE5NzpcdFxuMjE5ODpcdFx0aWYgKGFnLVx1MDAzZW51bV9kZXZpY2VzID09IDEpIHtcbjIxOTk6XHRcdFx0YWIgPSBhZy1cdTAwM2VhYlswXTtcbjIyMDA6XHRcdFx0LyogUUNOOTI3NCBmaXJtd2FyZSB1c2VzIGZpcm13YXJlIElFIGZvciBNTE8gYWR2ZXJ0aXNlbWVudCAqL1xuMjIwMTpcdFx0XHRpZiAoYWItXHUwMDNlZncuZndfZmVhdHVyZXNfdmFsaWQpIHtcbjIyMDI6XHRcdFx0XHRhZy1cdTAwM2VtbG9fY2FwYWJsZSA9XG4yMjAzOlx0XHRcdFx0XHRhdGgxMmtfZndfZmVhdHVyZV9zdXBwb3J0ZWQoYWIsIEFUSDEyS19GV19GRUFUVVJFX01MTyk7XG4yMjA0Olx0XHRcdFx0cmV0dXJuO1xuMjIwNTpcdFx0XHR9XG4yMjA2Olx0XG4yMjA3Olx0XHRcdC8qIHdoaWxlIFdDTjc4NTAgZmlybXdhcmUgdXNlcyBRTUkgc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgYml0ICovXG4yMjA4Olx0XHRcdGFnLVx1MDAzZW1sb19jYXBhYmxlID0gYWItXHUwMDNlc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQ7XG4yMjA5Olx0XHRcdHJldHVybjtcbjIyMTA6XHRcdH1cbjIyMTE6XHRcbjIyMTI6XHRcdGFnLVx1MDAzZW1sb19jYXBhYmxlID0gdHJ1ZTtcbjIyMTM6XHRcbjIyMTQ6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGFnLVx1MDAzZW51bV9kZXZpY2VzOyBpJiM0MzsmIzQzOykge1xuMjIxNTpcdFx0XHRhYiA9IGFnLVx1MDAzZWFiW2ldO1xuMjIxNjpcdFx0XHRpZiAoIWFiKVxuMjIxNzpcdFx0XHRcdGNvbnRpbnVlO1xuMjIxODpcdFxuMjIxOTpcdFx0XHQvKiBldmVuIGlmIDEgZGV2aWNlJiMzOTtzIGZpcm13YXJlIGZlYXR1cmUgaW5kaWNhdGVzIE1MT1xuMjIyMDpcdFx0XHQgKiB1bnN1cHBvcnRlZCwgbWFrZSBNTE8gdW5zdXBwb3J0ZWQgZm9yIHRoZSB3aG9sZSBncm91cFxuMjIyMTpcdFx0XHQgKi9cbjIyMjI6XHRcdFx0aWYgKCFhdGgxMmtfZndfZmVhdHVyZV9zdXBwb3J0ZWQoYWIsIEFUSDEyS19GV19GRUFUVVJFX01MTykpIHtcbjIyMjM6XHRcdFx0XHRhZy1cdTAwM2VtbG9fY2FwYWJsZSA9IGZhbHNlO1xuMjIyNDpcdFx0XHRcdHJldHVybjtcbjIyMjU6XHRcdFx0fVxuMjIyNjpcdFx0fVxuMjIyNzpcdH1cbjIyMjg6XHRcbjIyMjk6XHRpbnQgYXRoMTJrX2NvcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuMjIzMDpcdHtcbjIyMzE6XHRcdHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnO1xuMjIzMjpcdFx0aW50IHJldDtcbjIyMzM6XHRcbjIyMzQ6XHRcdHJldCA9IGF0aDEya19jb3JlX3BhbmljX25vdGlmaWVyX3JlZ2lzdGVyKGFiKTtcbjIyMzU6XHRcdGlmIChyZXQpXG4yMjM2Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgcGFuaWMgaGFuZGxlcjogJWRcXG5cJiMzNDssIHJldCk7XG4yMjM3Olx0XG4yMjM4Olx0XHRtdXRleF9sb2NrKFx1MDAyNmF0aDEya19od19ncm91cF9tdXRleCk7XG4yMjM5Olx0XG4yMjQwOlx0XHRhZyA9IGF0aDEya19jb3JlX2h3X2dyb3VwX2Fzc2lnbihhYik7XG4yMjQxOlx0XHRpZiAoIWFnKSB7XG4yMjQyOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xuMjI0MzpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7dW5hYmxlIHRvIGdldCBodyBncm91cFxcblwmIzM0Oyk7XG4yMjQ0Olx0XHRcdHJldCA9IC1FTk9ERVY7XG4yMjQ1Olx0XHRcdGdvdG8gZXJyX3VucmVnaXN0ZXJfbm90aWZpZXI7XG4yMjQ2Olx0XHR9XG4yMjQ3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjQzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGF0aDEya19jb3JlX3NvY19jcmVhdGUgRnVuY3Rpb24qKgoKT2theSwgc28gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIGJlaW5nIGludm9rZWQuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBjaGVjayB3aGF0JiMzOTtzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiYjMzk7cyByb2xlIGluIHRoZSBicm9hZGVyIGBhdGgxMmtgIGZyYW1ld29yay4gUHJlc3VtYWJseSwgYmFzZWQgb24gdGhlIG5hbWUsIGl0JiMzOTtzIGludm9sdmVkIGluIHRoZSBjcmVhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBzb21lIGtpbmQgb2YgU3lzdGVtLW9uLUNoaXAgKFNvQykgcmVsYXRlZCBjb21wb25lbnQgb3Igc3RydWN0dXJlIGZvciB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gcmFwaWRseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBoYXJkd2FyZSBicmluZ3VwIGFuZCBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3MgZGVsdmUgaW50byBpdHMgaW1wbGVtZW50YXRpb24gYW5kIHNlZSB3aGF0IGtleSBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgbWFuaXB1bGF0aW5nIGFuZCB3aGljaCBvdGhlciBrZXkgZnVuY3Rpb25zIGl04oCZcyBjYWxsaW5nIHRvIGZvcm0gdGhlIFNvQy4gSSBhbHNvIHdhbnQgdG8gc2VlIGlmIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyBzcGVjaWZpYyBoYXJkd2FyZSByZXNvdXJjZXMsIG9yIGlmIGl0IGlzIHJlc3BvbnNpYmxlIGZvciBtZXJlbHkgY29vcmRpbmF0aW5nIG90aGVyIGZ1bmN0aW9ucyB0byBhY2hpZXZlIHRoaXMuIFVsdGltYXRlbHksIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBjcnVjaWFsIHN0ZXAgaW4gdGhlIGRyaXZlciYjMzk7cyBwb3dlciBtYW5hZ2VtZW50IGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBjbG9jayBzZXR0aW5ncywgaW50ZXJydXB0IGhhbmRsZXJzLCBhbmQgYW55IHBsYXRmb3JtLXNwZWNpZmljIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTgwND1pbnQgYXRoMTJrX2NvcmVfY2hlY2tfc21iaW9zKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6ODE1OnN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtODE2LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk3MTkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAuIEkga25vdyB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBjb3JlIFNPQyAoU3lzdGVtLW9uLUNoaXApIGFzcGVjdHMgb2YgdGhlIGF0aDEyayBkcml2ZXIsIGxpa2VseSBkdXJpbmcgZGV2aWNlIHByb2JlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGl0IHNldHMgdXAgdGhlIGhhcmR3YXJlIHJlc291cmNlcywgYWxsb2NhdGVzIG1lbW9yeSwgYW5kIGVzdGFibGlzaGVzIHRoZSBiYXNpYyBjb25uZWN0aXZpdHkgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4KCkkmIzM5O20gbG9va2luZyBmb3IgdGhlIGFsbG9jYXRpb24gb2YgYW55IGNvbnRyb2wgc3RydWN0dXJlcywgY29uZmlndXJhdGlvbiBvZiByZWdpc3RlcnMsIGFuZCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYW55IGludGVybmFsIHN0YXRlIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgY3JpdGljYWwgZm9yIGxhdGVyIG9wZXJhdGlvbnMsIGxpa2UgaGFuZGxpbmcgZGF0YSB0cmFmZmljIGFuZCBwb3dlciBtYW5hZ2VtZW50LiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhpcyBmdW5jdGlvbjsgSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZhaWx1cmUgY2FzZXMgYW5kIHdoYXQgcmVjb3ZlcnkgbWVjaGFuaXNtcywgaWYgYW55LCBhcmUgaW1wbGVtZW50ZWQuIEkga25vdyBhIHN1Y2Nlc3NmdWwgaW5pdGlhbGl6YXRpb24gaGVyZSBpcyBwYXJhbW91bnQgZm9yIHRoZSBlbnRpcmUgZHJpdmVyIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyB0aGUgYmVkcm9jay4gSSBuZWVkIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBoYXJkd2FyZSByZXNldCwgb3IgY2FsaWJyYXRpb24gYW5kIGluaXRpYWwgY29uZmlndXJhdGlvbi4gRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIGFib3V0IHRoZSBwb3dlciBkb21haW4gY29uZmlndXJhdGlvbnMgYW5kIGNsb2NrIGluaXRpYWxpemF0aW9uIOKAkyB0aGlzIGlzIGEgY3JpdGljYWwgYXNwZWN0IGZvciB0aGUgcHJvcGVyIGZ1bmN0aW9uaW5nIG9mIHRoZSBTT0MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MTU6XHRzdGF0aWMgaW50IGF0aDEya19jb3JlX3NvY19jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA4MTY6XHR7XG4gODE3Olx0XHRpbnQgcmV0O1xuIDgxODpcdFxuIDgxOTpcdFx0aWYgKGF0aDEya19mdG1fbW9kZSkge1xuIDgyMDpcdFx0XHRhYi1cdTAwM2Vmd19tb2RlID0gQVRIMTJLX0ZJUk1XQVJFX01PREVfRlRNO1xuIDgyMTpcdFx0XHRhdGgxMmtfaW5mbyhhYiwgXCYjMzQ7Qm9vdGluZyBpbiBmdG0gbW9kZVxcblwmIzM0Oyk7XG4gODIyOlx0XHR9XG4gODIzOlx0XG4gODI0Olx0XHRyZXQgPSBhdGgxMmtfcW1pX2luaXRfc2VydmljZShhYik7XG4gODI1Olx0XHRpZiAocmV0KSB7XG4gODI2Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBpbml0aWFsaXplIHFtaSA6JWRcXG5cJiMzNDssIHJldCk7XG4gODI3Olx0XHRcdHJldHVybiByZXQ7XG4gODI4Olx0XHR9XG4gODI5Olx0XG4gODMwOlx0XHRhdGgxMmtfZGVidWdmc19zb2NfY3JlYXRlKGFiKTtcbiA4MzE6XHRcbiA4MzI6XHRcdHJldCA9IGF0aDEya19oaWZfcG93ZXJfdXAoYWIpO1xuIDgzMzpcdFx0aWYgKHJldCkge1xuIDgzNDpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gcG93ZXIgdXAgOiVkXFxuXCYjMzQ7LCByZXQpO1xuIDgzNTpcdFx0XHRnb3RvIGVycl9xbWlfZGVpbml0O1xuIDgzNjpcdFx0fVxuIDgzNzpcdFxuIDgzODpcdFx0cmV0dXJuIDA7XG4gODM5Olx0XG4gODQwOlx0ZXJyX3FtaV9kZWluaXQ6XG4gODQxOlx0XHRhdGgxMmtfZGVidWdmc19zb2NfZGVzdHJveShhYik7XG4gODQyOlx0XHRhdGgxMmtfcW1pX2RlaW5pdF9zZXJ2aWNlKGFiKTtcbiA4NDM6XHRcdHJldHVybiByZXQ7XG4gODQ0Olx0fVxuIDg0NTpcdFxuIDg0NjpcdHN0YXRpYyB2b2lkIGF0aDEya19jb3JlX3NvY19kZXN0cm95KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gODQ3Olx0e1xuIDg0ODpcdFx0YXRoMTJrX2hpZl9wb3dlcl9kb3duKGFiLCBmYWxzZSk7XG4gODQ5Olx0XHRhdGgxMmtfcmVnX2ZyZWUoYWIpO1xuIDg1MDpcdFx0YXRoMTJrX2RlYnVnZnNfc29jX2Rlc3Ryb3koYWIpO1xuIDg1MTpcdFx0YXRoMTJrX3FtaV9kZWluaXRfc2VydmljZShhYik7XG4gODUyOlx0fVxuIDg1MzpcdFxuIDg1NDpcdHN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfcGRldl9jcmVhdGUoc3RydWN0IGF0aDEya19iYXNlICphYilcbiA4NTU6XHR7XG4gODU2Olx0XHRpbnQgcmV0O1xuIDg1NzpcdFxuIDg1ODpcdFx0cmV0ID0gYXRoMTJrX2RwX3BkZXZfYWxsb2MoYWIpO1xuIDg1OTpcdFx0aWYgKHJldCkge1xuIDg2MDpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gYXR0YWNoIERQIHBkZXY6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDg2MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDg2MjpcdFx0fVxuIDg2MzpcdFxuIDg2NDpcdFx0cmV0ID0gYXRoMTJrX3RoZXJtYWxfcmVnaXN0ZXIoYWIpO1xuIDg2NTpcdFx0aWYgKHJldCkge1xuIDg2NjpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtjb3VsZCBub3QgcmVnaXN0ZXIgdGhlcm1hbCBkZXZpY2U6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDg2NzpcdFx0XHRnb3RvIGVycl9kcF9wZGV2X2ZyZWU7XG4gODY4Olx0XHR9XG4gODY5Olx0XG4gODcwOlx0XHRhdGgxMmtfZGVidWdmc19wZGV2X2NyZWF0ZShhYik7XG4gODcxOlx0XG4gODcyOlx0XHRyZXR1cm4gMDtcbiA4NzM6XHRcbiA4NzQ6XHRlcnJfZHBfcGRldl9mcmVlOlxuIDg3NTpcdFx0YXRoMTJrX2RwX3BkZXZfZnJlZShhYik7XG4gODc2Olx0XHRyZXR1cm4gcmV0O1xuIDg3NzpcdH1cbiA4Nzg6XHRcbiA4Nzk6XHRzdGF0aWMgdm9pZCBhdGgxMmtfY29yZV9wZGV2X2Rlc3Ryb3koc3RydWN0IGF0aDEya19iYXNlICphYilcbiA4ODA6XHR7XG4gODgxOlx0XHRhdGgxMmtfdGhlcm1hbF91bnJlZ2lzdGVyKGFiKTtcbiA4ODI6XHRcdGF0aDEya19kcF9wZGV2X2ZyZWUoYWIpO1xuIDg4MzpcdH1cbiA4ODQ6XHRcbiA4ODU6XHRzdGF0aWMgaW50IGF0aDEya19jb3JlX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gODg2Olx0e1xuIDg4NzpcdFx0aW50IHJldDtcbiA4ODg6XHRcbiA4ODk6XHRcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YWItXHUwMDNlY29yZV9sb2NrKTtcbiA4OTA6XHRcbiA4OTE6XHRcdHJldCA9IGF0aDEya193bWlfYXR0YWNoKGFiKTtcbiA4OTI6XHRcdGlmIChyZXQpIHtcbiA4OTM6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGF0dGFjaCB3bWk6ICVkXFxuXCYjMzQ7LCByZXQpO1xuIDg5NDpcdFx0XHRyZXR1cm4gcmV0O1xuIDg5NTpcdFx0fVxuIDg5NjpcdFxuIDg5NzpcdFx0cmV0ID0gYXRoMTJrX2h0Y19pbml0KGFiKTtcbiA4OTg6XHRcdGlmIChyZXQpIHtcbiA4OTk6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGluaXQgaHRjOiAlZFxcblwmIzM0OywgcmV0KTtcbiA5MDA6XHRcdFx0Z290byBlcnJfd21pX2RldGFjaDtcbiA5MDE6XHRcdH1cbiA5MDI6XHRcbiA5MDM6XHRcdHJldCA9IGF0aDEya19oaWZfc3RhcnQoYWIpO1xuIDkwNDpcdFx0aWYgKHJldCkge1xuIDkwNTpcdFx0XHRhdGgxMmtfZXJyKGFiLCBcJiMzNDtmYWlsZWQgdG8gc3RhcnQgSElGOiAlZFxcblwmIzM0OywgcmV0KTtcbiA5MDY6XHRcdFx0Z290byBlcnJfd21pX2RldGFjaDtcbiA5MDc6XHRcdH1cbiA5MDg6XHRcbiA5MDk6XHRcdHJldCA9IGF0aDEya19odGNfd2FpdF90YXJnZXQoXHUwMDI2YWItXHUwMDNlaHRjKTtcbiA5MTA6XHRcdGlmIChyZXQpIHtcbiA5MTE6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbm5lY3QgdG8gSFRDOiAlZFxcblwmIzM0OywgcmV0KTtcbiA5MTI6XHRcdFx0Z290byBlcnJfaGlmX3N0b3A7XG4gOTEzOlx0XHR9XG4gOTE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNTIwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBhdGgxMmtfcW1pX2luaXRfc2VydmljZSoqCgpPa2F5LCBzbyBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgIGlzIGJlaW5nIGNhbGxlZC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgdGhpcyBmdW5jdGlvbiBhbmQgdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIFFNSSAoUXVhbGNvbW0gTVNNIEludGVyZmFjZSkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBhdGgxMmsgZHJpdmVyLiBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgZ3JvdW5kd29yayBpcyBsYWlkIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGZpcm13YXJlLCBsaWtlbHkgc2V0dGluZyB1cCBRTUkgY29ubmVjdGlvbnMgb3IgYmluZGluZ3MsIGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGV4Y2hhbmdlIHdpdGggdGhlIG1vZGVtLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIHRoZSBuZWNlc3NhcnkgZGV2aWNlIGZpbGVzLCBlbmRwb2ludHMsIG9yIHdoYXRldmVyIGludGVyZmFjZSB0aGUgZHJpdmVyIGlzIHVzaW5nIHRvIGludGVyZmFjZSB3aXRoIHRoZSBRdWFsY29tbSBtb2RlbSBvdmVyIHRoZSBRTUkgcHJvdG9jb2wuIEkmIzM5O20ga2VlbiB0byBsb29rIGZvciBhbnkgZXJyb3IgaGFuZGxpbmcgdG8gc2VlIGhvdyByb2J1c3QgdGhpcyBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzLiBJIGhvcGUgdGhlIGRvY3VtZW50YXRpb24gaXMgd2VsbCB3cml0dGVuLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHJlZ2lzdGVyIG9wZXJhdGlvbnMgbmV4dC4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYmVpbmcga2lja2VkIG9mZiBhdCB0aGlzIHN0YWdlLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz00MDA5PXN0YXRpYyB2b2lkIGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDA4MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6NDA4MjppbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDA4My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaD02NDg9dm9pZCBhdGgxMmtfcW1pX2RlaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaDo2NDk6aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaC02NTAtdm9pZCBhdGgxMmtfcW1pX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTA4CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUgd2UgZ28uLi4KCioqRGl2aW5nIGludG8gYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIGZ1bmN0aW9uLCBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgLiBGcm9tIHRoZSBuYW1lLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBpbml0aWFsaXppbmcgYSBRTUkgc2VydmljZSB3aXRoaW4gdGhlIGF0aDEyayBkcml2ZXIsIGxpa2VseSByZWxhdGVkIHRvIFF1YWxjb21tJiMzOTtzIG1lc3NhZ2luZyBpbnRlcmZhY2UuIFRoYXQgbWVhbnMgd2UmIzM5O3JlIHByb2JhYmx5IGxvb2tpbmcgYXQgc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZpcm13YXJlIG92ZXIgYSBRTUkgbGluaywgcGVyaGFwcyBmb3IgZGF0YSB0cmFuc2ZlciwgY29udHJvbCwgb3IgY29uZmlndXJhdGlvbiBvZiB0aGUgd2lyZWxlc3MgaGFyZHdhcmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBjYWxscyB0byByZWdpc3RlciBvciBlbmFibGUgYSBRTUkgc2VydmljZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugc2VydmljZSBpZGVudGlmaWVycyAoU0lEcyksIGhhbmRsZXIgZnVuY3Rpb25zLCBhbmQgYW55IGFzc29jaWF0ZWQgY29udGV4dCBvciBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBRTUkgaW50ZXJhY3Rpb24uIEhvcGVmdWxseSB0aGVyZSBhcmUgZXJyb3IgY2hlY2tzIC0gYWx3YXlzIGEgbXVzdCB3aXRoIHRoZXNlIGxvdy1sZXZlbCBkcml2ZXJzLiBBIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBtaWdodCBiZSBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGRlcGVuZCBvbiB0aGlzIHNlcnZpY2UgYmVpbmcgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgZW5zdXJpbmcgZXZlcnl0aGluZyBpcyBwcm9wZXJseSBhbGxvY2F0ZWQsIGluaXRpYWxpemVkIGFuZCBkZS1hbGxvY2F0ZWQuIEdpdmVuIHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhlc2UgZHJpdmVycywgSSB3aWxsIGJlIGxvb2tpbmcgb3V0IGZvciBhbnkgcmFjZSBjb25kaXRpb25zIG9yIGNvbmN1cnJlbmN5IGlzc3VlcyB3aGVuIG11bHRpcGxlIFFNSSBtZXNzYWdlcyBhcnJpdmUgb3IgYXJlIHRyYW5zbWl0dGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MDgyOlx0aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG40MDgzOlx0e1xuNDA4NDpcdFx0aW50IHJldDtcbjQwODU6XHRcbjQwODY6XHRcdG1lbXNldChcdTAwMjZhYi1cdTAwM2VxbWkudGFyZ2V0LCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9pbmZvKSk7XG40MDg3Olx0XHRtZW1zZXQoXHUwMDI2YWItXHUwMDNlcW1pLnRhcmdldF9tZW0sIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X21lbV9jaHVuaykpO1xuNDA4ODpcdFx0YWItXHUwMDNlcW1pLmFiID0gYWI7XG40MDg5Olx0XG40MDkwOlx0XHRhYi1cdTAwM2VxbWkudGFyZ2V0X21lbV9tb2RlID0gYWItXHUwMDNldGFyZ2V0X21lbV9tb2RlO1xuNDA5MTpcdFx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIEFUSDEyS19RTUlfUkVTUF9MRU5fTUFYLFxuNDA5MjpcdFx0XHRcdCAgICAgIFx1MDAyNmF0aDEya19xbWlfb3BzLCBhdGgxMmtfcW1pX21zZ19oYW5kbGVycyk7XG40MDkzOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG40MDk0Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gaW5pdGlhbGl6ZSBxbWkgaGFuZGxlXFxuXCYjMzQ7KTtcbjQwOTU6XHRcdFx0cmV0dXJuIHJldDtcbjQwOTY6XHRcdH1cbjQwOTc6XHRcbjQwOTg6XHRcdGFiLVx1MDAzZXFtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFwmIzM0O2F0aDEya19xbWlfZHJpdmVyX2V2ZW50XCYjMzQ7LCAwKTtcbjQwOTk6XHRcdGlmICghYWItXHUwMDNlcW1pLmV2ZW50X3dxKSB7XG40MTAwOlx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byBhbGxvY2F0ZSB3b3JrcXVldWVcXG5cJiMzNDspO1xuNDEwMTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjQxMDI6XHRcdH1cbjQxMDM6XHRcbjQxMDQ6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmFiLVx1MDAzZXFtaS5ldmVudF9saXN0KTtcbjQxMDU6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5ldmVudF9sb2NrKTtcbjQxMDY6XHRcdElOSVRfV09SSyhcdTAwMjZhYi1cdTAwM2VxbWkuZXZlbnRfd29yaywgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29yayk7XG40MTA3Olx0XG40MTA4Olx0XHRyZXQgPSBxbWlfYWRkX2xvb2t1cChcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlLCBRTUlfU0VSVklDRV9JRF9XTEZXLFxuNDEwOTpcdFx0XHRcdCAgICAgQVRIMTJLX1FNSV9XTEZXX1NFUlZJQ0VfVkVSU19WMDEsXG40MTEwOlx0XHRcdFx0ICAgICBhYi1cdTAwM2VxbWkuc2VydmljZV9pbnNfaWQpO1xuNDExMTpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuNDExMjpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGFkZCBxbWkgbG9va3VwXFxuXCYjMzQ7KTtcbjQxMTM6XHRcdFx0ZGVzdHJveV93b3JrcXVldWUoYWItXHUwMDNlcW1pLmV2ZW50X3dxKTtcbjQxMTQ6XHRcdFx0cmV0dXJuIHJldDtcbjQxMTU6XHRcdH1cbjQxMTY6XHRcbjQxMTc6XHRcdHJldHVybiByZXQ7XG40MTE4Olx0fVxuNDExOTpcdFxuNDEyMDpcdHZvaWQgYXRoMTJrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuNDEyMTpcdHtcbjQxMjI6XHRcdGlmICghYWItXHUwMDNlcW1pLmFiKVxuNDEyMzpcdFx0XHRyZXR1cm47XG40MTI0Olx0XG40MTI1Olx0XHRxbWlfaGFuZGxlX3JlbGVhc2UoXHUwMDI2YWItXHUwMDNlcW1pLmhhbmRsZSk7XG40MTI2Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmFiLVx1MDAzZXFtaS5ldmVudF93b3JrKTtcbjQxMjc6XHRcdGRlc3Ryb3lfd29ya3F1ZXVlKGFiLVx1MDAzZXFtaS5ldmVudF93cSk7XG40MTI4Olx0XHRhdGgxMmtfcW1pX2F1eF91Y19mcmVlKGFiKTtcbjQxMjk6XHRcdGF0aDEya19xbWlfbTNfZnJlZShhYik7XG40MTMwOlx0XHRhdGgxMmtfcW1pX2ZyZWVfdGFyZ2V0X21lbV9jaHVuayhhYik7XG40MTMxOlx0XHRhYi1cdTAwM2VxbWkuYWIgPSBOVUxMO1xuNDEzMjpcdH1cbjQxMzM6XHRcbjQxMzQ6XHR2b2lkIGF0aDEya19xbWlfZnJlZV9yZXNvdXJjZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuNDEzNTpcdHtcbjQxMzY6XHRcdGF0aDEya19xbWlfZnJlZV90YXJnZXRfbWVtX2NodW5rKGFiKTtcbjQxMzc6XHRcdGF0aDEya19xbWlfYXV4X3VjX2ZyZWUoYWIpO1xuNDEzODpcdFx0YXRoMTJrX3FtaV9tM19mcmVlKGFiKTtcbjQxMzk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNDc0CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBwcm9jZXNzLCB0aGlua2luZyBpdCB0aHJvdWdoIGZyb20gYSB0ZWNobmljYWwgcGVyc3BlY3RpdmUuCgoqKkNvbm5lY3RpbmcgdG8gdGhlIFFNSSBTZXJ2aWNlKioKCkFscmlnaHQsIHNvIGBxbWlfYWRkX2xvb2t1cGAgaXMgY2FsbGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoaXMgaXMgdGhlIGluaXRpYWwgc3RlcDogaXQmIzM5O3MgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGVzc2VudGlhbGx5IHRlbGxpbmcgdGhlIHN5c3RlbSwgJiMzNDtIZXksIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGlzIHNwZWNpZmljIFFNSSBzZXJ2aWNlLiBLZWVwIGFuIGV5ZSBvdXQgZm9yIGl0LiYjMzQ7IEkmIzM5O20gc2V0dGluZyB1cCBhIHNvcnQgb2YgbGlzdGVuaW5nIHBvc3QuCgpBbmQgdGhlbiwgdGhlIG1hZ2ljIGhhcHBlbnMuIE9uY2UgdGhlIHNlcnZpY2UgSSYjMzk7bSBsb29raW5nIGZvciBhY3R1YWxseSAqYXBwZWFycyog4oCTIGl0JiMzOTtzIGRpc2NvdmVyZWQgYW5kIGFjY2Vzc2libGUg4oCTIHRoZSBzeXN0ZW0gdHJpZ2dlcnMgdGhlIGBuZXdfc2VydmVyYCBjYWxsYmFjayBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgYXRoMTJrX3FtaV9vcHNgLiBUaGF0JiMzOTtzIHRoZSBob29rLCB0aGUgc2lnbmFsIHRoYXQgdGhlIHNlcnZpY2UgaXMgcmVhZHkuIFRoaXMgbWFrZXMgc3VyZSBteSBzeXN0ZW0ga25vd3MgZXhhY3RseSBob3cgdG8gaGFuZGxlIHRoZSBjb25uZWN0aW9uIHdoZW4gdGhlIHNlcnZpY2UgaXMgbGl2ZS4gSXQgcHJvdmlkZXMgYSBtZWFucyB0byBzZXQgdXAgdGhlIGNvbW11bmljYXRpb25zIG9uY2UgdGhlIHNlcnZpY2UgaXMgYXZhaWxhYmxlLiBQcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBFZmZpY2llbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2F0aDEya19xbWlfb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zOTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX21zZ19oYW5kbGVyIGF0aDEya19xbWlfbXNnX2hhbmRsZXJzW10gPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTUzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTU0OnN0YXRpYyBpbnQgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk1NS1cdFx0XHRcdCAgICAgc3RydWN0IHFtaV9zZXJ2aWNlICpzZXJ2aWNlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk3OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6Mzk3OTpzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX29wc19kZWxfc2VydmVyKHN0cnVjdCBxbWlfaGFuZGxlICpxbWlfaGRsLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTgwLVx0XHRcdFx0ICAgICAgc3RydWN0IHFtaV9zZXJ2aWNlICpzZXJ2aWNlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6Mzk4OTpzdGF0aWMgY29uc3Qgc3RydWN0IHFtaV9vcHMgYXRoMTJrX3FtaV9vcHMgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5OTA6XHQubmV3X3NlcnZlciA9IGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5OTE6XHQuZGVsX3NlcnZlciA9IGF0aDEya19xbWlfb3BzX2RlbF9zZXJ2ZXIsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5OTItfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTQwODI9aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDkxLVx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIEFUSDEyS19RTUlfUkVTUF9MRU5fTUFYLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzo0MDkyOlx0XHRcdCAgICAgIFx1MDAyNmF0aDEya19xbWlfb3BzLCBhdGgxMmtfcW1pX21zZ19oYW5kbGVycyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwOTMtXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDI2CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcmAgZnVuY3Rpb24uIEFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBteSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBnb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgKioKCkFscmlnaHQsIHNvICphdGgxMmsqLCB0aGF0IHNjcmVhbXMgUXVhbGNvbW0gQXRoZXJvcyBXaUZpLCBzcGVjaWZpY2FsbHkgdGhlaXIgbmV3ZXIgZ2VuZXJhdGlvbiBjaGlwc2V0cywgcmlnaHQ/IEFuZCAqcW1pKiwgdGhhdCYjMzk7cyB1bmRvdWJ0ZWRseSB0aGUgUXVhbGNvbW0gSW50ZXJmYWNlLCB1c2VkIGZvciBtb2RlbSBjb250cm9sIGFuZCwgbW9yZSByZWxldmFudCBoZXJlLCBsaWtlbHkgc29tZSBmb3JtIG9mIGNvbW11bmljYXRpb24gd2l0aCBhIGZpcm13YXJlIHJ1bm5pbmcgb24gdGhlIFdpRmkgY2hpcHNldCBpdHNlbGYuIFRoZSAqb3BzKiBwYXJ0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYWJvdXQgZGVmaW5pbmcgYSBzZXQgb2YgKm9wZXJhdGlvbnMqIG9yIG1ldGhvZHMuIEZpbmFsbHksICpuZXdfc2VydmVyKi4uLiBUaGlzIHNjcmVhbXMgaW5pdGlhbGl6YXRpb24sIGNyZWF0aW9uLCBwcm9iYWJseSBzZXR1cCBvZiBhIGNvbW11bmljYXRpb24gY2hhbm5lbCBvciBzZXJ2ZXIgc2lkZSBjb21wb25lbnQuCgpNeSBicmFpbiBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHBvc3NpYmxlIHNjZW5hcmlvczogSXMgdGhpcyBoYW5kbGluZyB0aGUgaW5pdGlhbCBjb25uZWN0aW9uIGVzdGFibGlzaG1lbnQgZm9yIGEgbmV3IFFNSSBjb25uZWN0aW9uIHRvIHRoZSBXaUZpIGZpcm13YXJlPyBPciBwZXJoYXBzIHRoZSBzZXR1cCBvZiBhIFFNSSAmIzM0O3NlcnZlciYjMzQ7IGluc3RhbmNlIHdpdGhpbiB0aGUgaG9zdCBkcml2ZXIsIGVuYWJsaW5nIGl0IHRvIGFjY2VwdCBjb21tYW5kcyBhbmQgZGF0YSBmcm9tIHRoZSBmaXJtd2FyZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zIHJlbGF0ZWQgdG8gYSBuZXcgY2hhbm5lbD8KCkkmIzM5O20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIHNjcnV0aW5pemUgdGhpcyBmdW5jdGlvbiBmb3IgdGhpbmdzIGxpa2U6CgoqICAgKipSZXNvdXJjZSBhbGxvY2F0aW9uKio6IE1lbW9yeSBiZWluZyBhbGxvY2F0ZWQgZm9yIGRhdGEgc3RydWN0dXJlcywgYW5kIGhvdyBhcmUgdGhlc2UgcmVzb3VyY2VzIG1hbmFnZWQuCiogICAqKkVycm9yIGhhbmRsaW5nKio6IFdoZXJlIGFyZSBjaGVja3MgZm9yIGZhaWx1cmUgaGFwcGVuaW5nPyBXaGF0IGhhcHBlbnMgd2hlbiBhIHJlc291cmNlIGZhaWxzIHRvIGFsbG9jYXRlPwoqICAgKipTZWN1cml0eSBoYXJkZW5pbmcqKjogQ2hlY2sgZm9yIGFueSBwb3NzaWJsZSBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgaW5oZXJlbnQgaW4gYSBuZXcgY2hhbm5lbC4KKiAgICoqRmlybXdhcmUgaW50ZXJhY3Rpb24qKjogU2VlIGV4YWN0bHkgd2hhdCBpcyBiZWluZyBjb21tdW5pY2F0ZWQsIGlmIGl0IHNlZW1zIHJlYXNvbmFibGUuCiogICAqKkNvbmN1cnJlbmN5Kio6IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NrLXVwcyBoZXJlPwoqICAgKipJbml0aWFsaXphdGlvbiBzdGVwcyoqOiBJJiMzOTttIGV4cGVjdGluZyBhIHNlcmllcyBvZiBmdW5jdGlvbiBjYWxscyB0byBpbml0aWFsaXplIHRoZSBRTUkgaW50ZXJmYWNlLiBQcm9iYWJseSBhIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBwb3RlbnRpYWxseSBzZXR0aW5nIHVwIGJ1ZmZlcnMsIGV0Yy4KKiAgICoqRGVwZW5kZW5jaWVzKio6IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhpcyBpcyBjYWxsaW5nIG9yIHVzaW5nOyB1bmRlcnN0YW5kIHdoYXQgZGF0YSBpdCYjMzk7cyBwYXNzaW5nLCBhbmQgd2hhdCBjb250ZXh0IGl0JiMzOTtzIG9wZXJhdGluZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzk1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzk1NDpcdHN0YXRpYyBpbnQgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcbjM5NTU6XHRcdFx0XHRcdCAgICAgc3RydWN0IHFtaV9zZXJ2aWNlICpzZXJ2aWNlKVxuMzk1NjpcdHtcbjM5NTc6XHRcdHN0cnVjdCBhdGgxMmtfcW1pICpxbWkgPSBjb250YWluZXJfb2YocW1pX2hkbCwgc3RydWN0IGF0aDEya19xbWksIGhhbmRsZSk7XG4zOTU4Olx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVx1MDAzZWFiO1xuMzk1OTpcdFx0c3RydWN0IHNvY2thZGRyX3FydHIgKnNxID0gXHUwMDI2cW1pLVx1MDAzZXNxO1xuMzk2MDpcdFx0aW50IHJldDtcbjM5NjE6XHRcbjM5NjI6XHRcdHNxLVx1MDAzZXNxX2ZhbWlseSA9IEFGX1FJUENSVFI7XG4zOTYzOlx0XHRzcS1cdTAwM2VzcV9ub2RlID0gc2VydmljZS1cdTAwM2Vub2RlO1xuMzk2NDpcdFx0c3EtXHUwMDNlc3FfcG9ydCA9IHNlcnZpY2UtXHUwMDNlcG9ydDtcbjM5NjU6XHRcbjM5NjY6XHRcdHJldCA9IGtlcm5lbF9jb25uZWN0KHFtaV9oZGwtXHUwMDNlc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopc3EsXG4zOTY3Olx0XHRcdFx0ICAgICBzaXplb2YoKnNxKSwgMCk7XG4zOTY4Olx0XHRpZiAocmV0KSB7XG4zOTY5Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtxbWkgZmFpbGVkIHRvIGNvbm5lY3QgdG8gcmVtb3RlIHNlcnZpY2UgJWRcXG5cJiMzNDssIHJldCk7XG4zOTcwOlx0XHRcdHJldHVybiByZXQ7XG4zOTcxOlx0XHR9XG4zOTcyOlx0XG4zOTczOlx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSwgXCYjMzQ7cW1pIHdpZmkgZncgcW1pIHNlcnZpY2UgY29ubmVjdGVkXFxuXCYjMzQ7KTtcbjM5NzQ6XHRcdGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3Bvc3QocW1pLCBBVEgxMktfUU1JX0VWRU5UX1NFUlZFUl9BUlJJVkUsIE5VTEwpO1xuMzk3NTpcdFxuMzk3NjpcdFx0cmV0dXJuIHJldDtcbjM5Nzc6XHR9XG4zOTc4Olx0XG4zOTc5Olx0c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9vcHNfZGVsX3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcbjM5ODA6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBxbWlfc2VydmljZSAqc2VydmljZSlcbjM5ODE6XHR7XG4zOTgyOlx0XHRzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pID0gY29udGFpbmVyX29mKHFtaV9oZGwsIHN0cnVjdCBhdGgxMmtfcW1pLCBoYW5kbGUpO1xuMzk4MzpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cdTAwM2VhYjtcbjM5ODQ6XHRcbjM5ODU6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUU1JLCBcJiMzNDtxbWkgd2lmaSBmdyBkZWwgc2VydmVyXFxuXCYjMzQ7KTtcbjM5ODY6XHRcdGF0aDEya19xbWlfZHJpdmVyX2V2ZW50X3Bvc3QocW1pLCBBVEgxMktfUU1JX0VWRU5UX1NFUlZFUl9FWElULCBOVUxMKTtcbjM5ODc6XHR9XG4zOTg4Olx0XG4zOTg5Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGF0aDEya19xbWlfb3BzID0ge1xuMzk5MDpcdFx0Lm5ld19zZXJ2ZXIgPSBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyLFxuMzk5MTpcdFx0LmRlbF9zZXJ2ZXIgPSBhdGgxMmtfcW1pX29wc19kZWxfc2VydmVyLFxuMzk5MjpcdH07XG4zOTkzOlx0XG4zOTk0Olx0c3RhdGljIGludCBhdGgxMmtfcW1pX2V2ZW50X2hvc3RfY2FwKHN0cnVjdCBhdGgxMmtfcW1pICpxbWkpXG4zOTk1Olx0e1xuMzk5NjpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cdTAwM2VhYjtcbjM5OTc6XHRcdGludCByZXQ7XG4zOTk4Olx0XG4zOTk5Olx0XHRyZXQgPSBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmQoYWIpO1xuNDAwMDpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuNDAwMTpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNlbmQgcW1pIGhvc3QgY2FwIGZvciBkZXZpY2UgaWQgJWQ6ICVkXFxuXCYjMzQ7LFxuNDAwMjpcdFx0XHRcdCAgICBhYi1cdTAwM2VkZXZpY2VfaWQsIHJldCk7XG40MDAzOlx0XHRcdHJldHVybiByZXQ7XG40MDA0Olx0XHR9XG40MDA1Olx0XG40MDA2Olx0XHRyZXR1cm4gcmV0O1xuNDAwNzpcdH1cbjQwMDg6XHRcbjQwMDk6XHRzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjQwMTA6XHR7XG40MDExOlx0XHRzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGgxMmtfcW1pLFxuNDAxMjpcdFx0XHRcdFx0XHQgICAgICBldmVudF93b3JrKTtcbjQwMTM6XHRcdHN0cnVjdCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudCAqZXZlbnQ7XG40MDE0Olx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVx1MDAzZWFiO1xuNDAxNTpcdFx0aW50IHJldDtcbjQwMTY6XHRcbjQwMTc6XHRcdHNwaW5fbG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG40MDE4Olx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoXHUwMDI2cW1pLVx1MDAzZWV2ZW50X2xpc3QpKSB7XG40MDE5Olx0XHRcdGV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZxbWktXHUwMDNlZXZlbnRfbGlzdCxcbjQwMjA6XHRcdFx0XHRcdFx0IHN0cnVjdCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudCwgbGlzdCk7XG40MDIxOlx0XHRcdGxpc3RfZGVsKFx1MDAyNmV2ZW50LVx1MDAzZWxpc3QpO1xuNDAyMjpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZxbWktXHUwMDNlZXZlbnRfbG9jayk7XG40MDIzOlx0XG40MDI0Olx0XHRcdGlmICh0ZXN0X2JpdChBVEgxMktfRkxBR19VTlJFR0lTVEVSSU5HLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpKVxuNDAyNTpcdFx0XHRcdGdvdG8gc2tpcDtcbjQwMjY6XHRcbjQwMjc6XHRcdFx0c3dpdGNoIChldmVudC1cdTAwM2V0eXBlKSB7XG40MDI4Olx0XHRcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9TRVJWRVJfQVJSSVZFOlxuNDAyOTpcdFx0XHRcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZShxbWkpO1xuNDAzMDpcdFx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG40MDMxOlx0XHRcdFx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpO1xuNDAzMjpcdFx0XHRcdGJyZWFrO1xuNDAzMzpcdFx0XHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0VYSVQ6XG40MDM0Olx0XHRcdFx0c2V0X2JpdChBVEgxMktfRkxBR19DUkFTSF9GTFVTSCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjQwMzU6XHRcdFx0XHRicmVhaztcbjQwMzY6XHRcdFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX1JFUVVFU1RfTUVNOlxuNDAzNzpcdFx0XHRcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfbWVtX3JlcXVlc3QocW1pKTtcbjQwMzg6XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuNDAzOTpcdFx0XHRcdFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKTtcbjQwNDA6XHRcdFx0XHRicmVhaztcbjQwNDE6XHRcdFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX0ZXX01FTV9SRUFEWTpcbjQwNDI6XHRcdFx0XHRyZXQgPSBhdGgxMmtfcW1pX2V2ZW50X2xvYWRfYmRmKHFtaSk7XG40MDQzOlx0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbjQwNDQ6XHRcdFx0XHRcdHNldF9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG40MDQ1Olx0XHRcdFx0YnJlYWs7XG40MDQ2Olx0XHRcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9GV19SRUFEWTpcbjQwNDc6XHRcdFx0XHRjbGVhcl9iaXQoQVRIMTJLX0ZMQUdfUU1JX0ZBSUwsIFx1MDAyNmFiLVx1MDAzZWRldl9mbGFncyk7XG40MDQ4Olx0XHRcdFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX1FNSV9GV19SRUFEWV9DT01QTEVURSwgXHUwMDI2YWItXHUwMDNlZGV2X2ZsYWdzKSkge1xuNDA0OTpcdFx0XHRcdFx0aWYgKGFiLVx1MDAzZWlzX3Jlc2V0KVxuNDA1MDpcdFx0XHRcdFx0XHRhdGgxMmtfaGFsX2R1bXBfc3JuZ19zdGF0cyhhYik7XG40MDUxOlx0XG40MDUyOlx0XHRcdFx0XHRzZXRfYml0KEFUSDEyS19GTEFHX1JFQ09WRVJZLCBcdTAwMjZhYi1cdTAwM2VkZXZfZmxhZ3MpO1xuNDA1MzpcdFx0XHRcdFx0cXVldWVfd29yayhhYi1cdTAwM2V3b3JrcXVldWUsIFx1MDAyNmFiLVx1MDAzZXJlc3RhcnRfd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2ODAwCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nIGZvciBUZXN0aW5nIHRoZSBhdGgxMmsgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdG8gdHJpZ2dlciBgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcmAgaW4gdGhlIGBhdGgxMmtgIGRyaXZlci4gSSBrbm93IHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiBhIFFNSSBzZXJ2aWNlIGlzIGRpc2NvdmVyZWQuIE5vdywgU3l6a2FsbGVyIGNhbiBlbXVsYXRlIFFNSSBzZXJ2aWNlcyB1c2luZyBBRl9RSVBDUlRSIHNvY2tldHMg4oCTIHRoYXQmIzM5O3MgcG90ZW50aWFsbHkgdXNlZnVsLiBCdXQgd2FpdCwgYGF0aDEya2AgaXMgYSBQQ0kgZHJpdmVyLCBpc24mIzM5O3QgaXQ/IEl0IGhhcyB0byByZWdpc3RlciBpdHNlbGYgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4KCkFoYSEgU3l6a2FsbGVyIGhhcyB0aGlzIGBzeXpfcGNpX2RldmljZV9hZGRgIGZ1bmN0aW9uLiBDYW4gSSB1c2UgdGhhdCB0byBteSBhZHZhbnRhZ2U/IElmIEkgY2FuIGFkZCBhIHZpcnR1YWwgUENJIGRldmljZSB1c2luZyBTeXprYWxsZXIgdGhhdCAqbWF0Y2hlcyogYGF0aDEya2AmIzM5O3MgdmVuZG9yIGFuZCBkZXZpY2UgSUQsIHRoZW4gYGF0aDEya19wY2lfcHJvYmVgIHNob3VsZCBnZXQgY2FsbGVkLiBHb29kLgoKT25jZSBgYXRoMTJrX3BjaV9wcm9iZWAgcnVucywgaXQgd2lsbCBjYWxsIGBhdGgxMmtfY29yZV9pbml0YCwgd2hpY2ggdGhlbiBsZWFkcyB0byBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgLiBBbmQgKnRoYXQqIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIFFNSSBjbGllbnQuIFBlcmZlY3QhCgpOb3csIHRoZSBjcnVjaWFsIHN0ZXA6IElmIFN5emthbGxlciAqYWxzbyogZW11bGF0ZXMgYSBRTUkgc2VydmVyIG9uIEFGX1FJUENSVFIsIHRoYXQgc2hvdWxkIHRyaWdnZXIgYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgIG9uIHRoZSBjbGllbnQgc2lkZS4gVGhhdCYjMzk7cyB0aGUgbGluayBJIHdhcyBsb29raW5nIGZvci4gVGhlbiwgYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgd2lsbCBiZSBjYWxsZWQuIE5vdyBJIGp1c3QgbmVlZCB0byBkaWcgaW50byBgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlYCBhbmQgc2VlIHdoYXQgaGFwcGVucyB0aGVyZS4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaW50ZXJlc3Rpbmcgc3R1ZmYgc2hvdWxkIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNzU4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNzU4Olx0aW50IGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZShzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxuMzc1OTpcdHtcbjM3NjA6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBxbWktXHUwMDNlYWIsICpibG9ja19hYjtcbjM3NjE6XHRcdHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnID0gYWItXHUwMDNlYWc7XG4zNzYyOlx0XHRpbnQgcmV0O1xuMzc2MzpcdFxuMzc2NDpcdFx0YXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoYWIpO1xuMzc2NTpcdFxuMzc2NjpcdFx0cmV0ID0gYXRoMTJrX3FtaV9md19pbmRfcmVnaXN0ZXJfc2VuZChhYik7XG4zNzY3Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4zNzY4Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtxbWkgZmFpbGVkIHRvIHNlbmQgRlcgaW5kaWNhdGlvbiBRTUk6JWRcXG5cJiMzNDssIHJldCk7XG4zNzY5Olx0XHRcdHJldHVybiByZXQ7XG4zNzcwOlx0XHR9XG4zNzcxOlx0XG4zNzcyOlx0XHRzcGluX2xvY2soXHUwMDI2cW1pLVx1MDAzZWV2ZW50X2xvY2spO1xuMzc3MzpcdFxuMzc3NDpcdFx0YXRoMTJrX3FtaV9zZXRfZXZlbnRfYmxvY2socW1pLCB0cnVlKTtcbjM3NzU6XHRcbjM3NzY6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnFtaS1cdTAwM2VldmVudF9sb2NrKTtcbjM3Nzc6XHRcbjM3Nzg6XHRcdG11dGV4X2xvY2soXHUwMDI2YWctXHUwMDNlbXV0ZXgpO1xuMzc3OTpcdFxuMzc4MDpcdFx0aWYgKGF0aDEya19xbWlfaHdfZ3JvdXBfaG9zdF9jYXBfcmVhZHkoYWcpKSB7XG4zNzgxOlx0XHRcdGF0aDEya19jb3JlX2h3X2dyb3VwX3NldF9tbG9fY2FwYWJsZShhZyk7XG4zNzgyOlx0XG4zNzgzOlx0XHRcdGJsb2NrX2FiID0gYXRoMTJrX3FtaV9od19ncm91cF9maW5kX2Jsb2NrZWQoYWcpO1xuMzc4NDpcdFx0XHRpZiAoYmxvY2tfYWIpXG4zNzg1Olx0XHRcdFx0YXRoMTJrX3FtaV90cmlnZ2VyX2hvc3RfY2FwKGJsb2NrX2FiKTtcbjM3ODY6XHRcdH1cbjM3ODc6XHRcbjM3ODg6XHRcdG11dGV4X3VubG9jayhcdTAwMjZhZy1cdTAwM2VtdXRleCk7XG4zNzg5Olx0XG4zNzkwOlx0XHRyZXR1cm4gcmV0O1xuMzc5MTpcdH1cbjM3OTI6XHRcbjM3OTM6XHQvKiBjbGFuZyBzdGFjayB1c2FnZSBleHBsb2RlcyBpZiB0aGlzIGlzIGlubGluZWQgKi9cbjM3OTQ6XHRzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrXG4zNzk1Olx0aW50IGF0aDEya19xbWlfZXZlbnRfbWVtX3JlcXVlc3Qoc3RydWN0IGF0aDEya19xbWkgKnFtaSlcbjM3OTY6XHR7XG4zNzk3Olx0XHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVx1MDAzZWFiO1xuMzc5ODpcdFx0aW50IHJldDtcbjM3OTk6XHRcbjM4MDA6XHRcdHJldCA9IGF0aDEya19xbWlfcmVzcG9uZF9md19tZW1fcmVxdWVzdChhYik7XG4zODAxOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4zODAyOlx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtxbWkgZmFpbGVkIHRvIHJlc3BvbmQgZncgbWVtIHJlcTolZFxcblwmIzM0OywgcmV0KTtcbjM4MDM6XHRcdFx0cmV0dXJuIHJldDtcbjM4MDQ6XHRcdH1cbjM4MDU6XHRcbjM4MDY6XHRcdHJldHVybiByZXQ7XG4zODA3Olx0fVxuMzgwODpcdFxuMzgwOTpcdC8qIGNsYW5nIHN0YWNrIHVzYWdlIGV4cGxvZGVzIGlmIHRoaXMgaXMgaW5saW5lZCAqL1xuMzgxMDpcdHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2tcbjM4MTE6XHRpbnQgYXRoMTJrX3FtaV9ldmVudF9sb2FkX2JkZihzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxuMzgxMjpcdHtcbjM4MTM6XHRcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBxbWktXHUwMDNlYWI7XG4zODE0Olx0XHRjb25zdCBzdHJ1Y3QgYXRoMTJrX2h3X3BhcmFtcyAqaHdfcGFyYW1zID0gYWItXHUwMDNlaHdfcGFyYW1zO1xuMzgxNTpcdFx0aW50IHJldDtcbjM4MTY6XHRcbjM4MTc6XHRcdHJldCA9IGF0aDEya19xbWlfcmVxdWVzdF90YXJnZXRfY2FwKGFiKTtcbjM4MTg6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjM4MTk6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O3FtaSBmYWlsZWQgdG8gcmVxIHRhcmdldCBjYXBhYmlsaXRpZXM6JWRcXG5cJiMzNDssIHJldCk7XG4zODIwOlx0XHRcdHJldHVybiByZXQ7XG4zODIxOlx0XHR9XG4zODIyOlx0XG4zODIzOlx0XHRyZXQgPSBhdGgxMmtfcW1pX2xvYWRfYmRmX3FtaShhYiwgQVRIMTJLX1FNSV9CREZfVFlQRV9SRUdEQik7XG4zODI0Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4zODI1Olx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtxbWkgZmFpbGVkIHRvIGxvYWQgcmVnZGIgZmlsZTolZFxcblwmIzM0OywgcmV0KTtcbjM4MjY6XHRcdFx0cmV0dXJuIHJldDtcbjM4Mjc6XHRcdH1cbjM4Mjg6XHRcbjM4Mjk6XHRcdHJldCA9IGF0aDEya19xbWlfbG9hZF9iZGZfcW1pKGFiLCBBVEgxMktfUU1JX0JERl9UWVBFX0VMRik7XG4zODMwOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4zODMxOlx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtxbWkgZmFpbGVkIHRvIGxvYWQgYm9hcmQgZGF0YSBmaWxlOiVkXFxuXCYjMzQ7LCByZXQpO1xuMzgzMjpcdFx0XHRyZXR1cm4gcmV0O1xuMzgzMzpcdFx0fVxuMzgzNDpcdFxuMzgzNTpcdFx0aWYgKGh3X3BhcmFtcy1cdTAwM2Vkb3dubG9hZF9jYWxpYikge1xuMzgzNjpcdFx0XHRyZXQgPSBhdGgxMmtfcW1pX2xvYWRfYmRmX3FtaShhYiwgQVRIMTJLX1FNSV9CREZfVFlQRV9DQUxJQlJBVElPTik7XG4zODM3Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4zODM4Olx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O3FtaSBmYWlsZWQgdG8gbG9hZCBjYWxpYnJhdGVkIGRhdGEgOiVkXFxuXCYjMzQ7LCByZXQpO1xuMzgzOTpcdFx0fVxuMzg0MDpcdFxuMzg0MTpcdFx0cmV0ID0gYXRoMTJrX3FtaV93bGFuZndfbTNfaW5mb19zZW5kKGFiKTtcbjM4NDI6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjM4NDM6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O3FtaSBmYWlsZWQgdG8gc2VuZCBtMyBpbmZvIHJlcTolZFxcblwmIzM0OywgcmV0KTtcbjM4NDQ6XHRcdFx0cmV0dXJuIHJldDtcbjM4NDU6XHRcdH1cbjM4NDY6XHRcbjM4NDc6XHRcdGlmIChod19wYXJhbXMtXHUwMDNlZncuZG93bmxvYWRfYXV4X3Vjb2RlKSB7XG4zODQ4Olx0XHRcdHJldCA9IGF0aDEya19xbWlfd2xhbmZ3X2F1eF91Y19pbmZvX3NlbmQoYWIpO1xuMzg0OTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4zODUwOlx0XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O3FtaSBmYWlsZWQgdG8gc2VuZCBhdXhfdWMgaW5mbyByZXE6ICVkXFxuXCYjMzQ7LCByZXQpO1xuMzg1MTpcdFx0XHRcdHJldHVybiByZXQ7XG4zODUyOlx0XHRcdH1cbjM4NTM6XHRcdH1cbjM4NTQ6XHRcbjM4NTU6XHRcdHJldHVybiByZXQ7XG4zODU2Olx0fVxuMzg1NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTEzNQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDc0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgUGF0Y2g6IEEgU3l6a2FsbGVyIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSBzZWUgaXQgbW9kaWZpZXMgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBhbmQgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIGtub3cgdGhhdCBgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlYCBjYWxscyB0aGUgZm9ybWVyLCBhbmQgYEFUSDEyS19RTUlfRVZFTlRfSE9TVF9DQVBgIHRyaWdnZXJzIHRoZSBsYXR0ZXIuIFRoZSBjcml0aWNhbCBsaW5rIGlzIHdoZXRoZXIgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSAqcmVhY2gqIHRoZXNlIGZ1bmN0aW9ucy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsZXZlcmFnZSBgc3l6X3BjaV9kZXZpY2VfYWRkYCB0byB0cmlnZ2VyIGBhdGgxMmtfcGNpX3Byb2JlYC4gTm93LCBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgYSBjb21wbGV4IGZ1bmN0aW9uLiBJdCYjMzk7cyBkb2luZyBhIGxvdCBvZiB0aGluZ3M6IFBDSSBjbGFpbWluZywgTVNJIGFsbG9jYXRpb24sIE1ISSByZWdpc3RyYXRpb24sIFNSTkcgaW5pdGlhbGl6YXRpb24sIENFIHBpcGUgYWxsb2NhdGlvbiwgSVJRIGNvbmZpZ3VyYXRpb24uLi4gYW5kIHVsdGltYXRlbHkgY2FsbHMgYGF0aDEya19jb3JlX2luaXRgLiBJZiBhbnkgb2YgdGhvc2Ugc3ViLWZ1bmN0aW9ucyBmYWlsLCBgYXRoMTJrX2NvcmVfaW5pdGAgaXMgbmV2ZXIgY2FsbGVkLiBUaGlzIGlzIGEgcG90ZW50aWFsIGh1cmRsZS4KClNwZWNpZmljYWxseSwgYGF0aDEya19taGlfcmVnaXN0ZXJgIHN0YW5kcyBvdXQuIFRoaXMgaXMgdGhlIE1vZGVtIEhvc3QgSW50ZXJmYWNlLCBhIGZhaXJseSBjb21wbGV4IHByb3RvY29sIHRoYXQmIzM5O3MgbGlrZWx5IHJlbGlhbnQgb24gYWN0dWFsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSYjMzk7bSB3b25kZXJpbmcsIGNhbiB3ZSBnZXQgYXJvdW5kIHRoaXMgaWYgdGhlcmUmIzM5O3Mgbm8gcmVhbCBoYXJkd2FyZT8gRG9lcyBgYXRoMTJrYCB1c2UgUU1JIG92ZXIgTUhJLCBvciBzb21ldGhpbmcgZWxzZT8KCkEgcXVpY2sgY2hlY2sgb2YgYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgIHJldmVhbHMgaXQgdXNlcyBgQUZfUUlQQ1JUUmAgLSBJUEMgcm91dGVyISBFeGNlbGxlbnQuIEkmIzM5O20gbm93IHByZXR0eSBzdXJlIHRoYXQgaXQgY29ubmVjdHMgdG8gdGhlIFFNSSBzZXJ2aWNlIHZpYSBJUEMgcm91dGVyLCBzbyB0aGUgdHJhbnNwb3J0IGlzIHByb2JhYmx5IE1ISS4KCklmIE1ISSBpc24mIzM5O3QgdXAsIHRoZSBRTUkgY2xpZW50IHdpdGhpbiBgYXRoMTJrYCB3b24mIzM5O3Qgc2VlIHRoZSByZW1vdGUgc2VydmVyLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBjcml0aWNhbCBpbnNpZ2h0LCBTeXprYWxsZXIgY2FuICpjcmVhdGUqIGEgbG9jYWwgSVBDIHJvdXRlciBzZXJ2aWNlISBJdCBjYW4gYmluZCB0byBgQUZfUUlQQ1JUUmAgYW5kIGFkdmVydGlzZSBgUU1JX1NFUlZJQ0VfSURfV0xGV2AuIFRoaXMgbWVhbnMsIHJlZ2FyZGxlc3Mgb2YgdGhlIE1ISSBzdGF0ZSwgdGhlIGBhdGgxMmtgIGNsaWVudCBzaG91bGQgc2VlIGl0IGJlY2F1c2UgdGhlIElQQyByb3V0ZXIgaXMgYSBjZW50cmFsaXplZCBsb29rdXAuIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgdGhlIGBxbWlfYWRkX2xvb2t1cGAgY29uZmlybXMgdGhpcy4gVGhlIElQQyByb3V0ZXIgd2lsbCBub3RpZnkgdGhlIGNsaWVudCBvZiBhbnkgbWF0Y2hpbmcgc2VydmljZSBJRC4gU28sIGluIHRoZW9yeSwgU3l6a2FsbGVyIGNhbiBmdWxseSBlbXVsYXRlIHRoZSBRTUkgc2VydmVyLgoKSG93ZXZlciwgSSYjMzk7bSBub3cgYmFjayB0byB0aGUgYGF0aDEya19wY2lfcHJvYmVgIHByb2JsZW0uIEl0ICptdXN0KiBzdWNjZWVkIGZvciBgYXRoMTJrX2NvcmVfaW5pdGAgdG8gcnVuLCBzbyBJIGhhdmUgdG8gZW5zdXJlIFN5emthbGxlciBjYW4gcGFzcyB0aGF0IGZ1bmN0aW9uLiBUaW1lIHRvIGFuYWx5emUgYGF0aDEya19taGlfcmVnaXN0ZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgYXRoMTJrX21oaV9yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9MTgwPXN0YXRpYyB2b2lkIGF0aDEya19taGlfb3Bfd3JpdGVfcmVnKHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2NudHJsLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMTg2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzoxODc6aW50IGF0aDEya19taGlfcmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMTg4LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oPTM1PXZvaWQgYXRoMTJrX21oaV9zdG9wKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2ksIGJvb2wgaXNfc3VzcGVuZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM2OmludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaC0zNy12b2lkIGF0aDEya19taGlfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYXJfcGNpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4NDQKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiAmIzM0O0xldCYjMzk7cyBzZWUgYGF0aDEya19taGlfcmVnaXN0ZXJgJiMzNDsgYXMgYSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBhdGgxMmtfbWhpX3JlZ2lzdGVyKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYGF0aDEya19taGlfcmVnaXN0ZXJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbGlrZWx5IGZvY3VzZWQgb24gdGhlIEF0aGVyb3MgKG5vdyBRdWFsY29tbSkgODAyLjExYXgvV2ktRmkgNiB3aXJlbGVzcyBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgTW9iaWxlIEhvc3QgSW50ZXJmYWNlIChNSEkpIHJlZ2lzdGVyIGRlZmluaXRpb25zLiBDb25zaWRlcmluZyBteSBleHBlcmllbmNlIHdpdGggdGhlc2Uga2luZHMgb2YgbG93LWxldmVsIGRyaXZlciBjb21wb25lbnRzLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHJlZ2lzdGVyIHRvIGJlIGNydWNpYWwgZm9yIGVpdGhlciBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgcHJvYmFibHkgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBkcml2ZXIgZXhlY3V0aW9uIG9yIGR1cmluZyB0aGUgYm9vdC11cCBzZXF1ZW5jZSBvZiB0aGUgZGV2aWNlLCBvciB0aGUgTUhJIGNvbW11bmljYXRpb24gcHJvdG9jb2wsIHdoaWNoIEkgaGF2ZSB2YXN0IGV4cGVyaWVuY2UgaW4uIAoKSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gcmVjYWxsIG15IGtub3dsZWRnZSBvZiB0aGF0IHNwZWNpZmljIHJlZ2lzdGVyLiBJcyB0aGlzIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nLCBwZXJoYXBzPyBPciBpcyBpdCBtb3JlIGFib3V0IHJlc291cmNlIGFsbG9jYXRpb24sIERNQSBzZXR1cCwgb3IgcGVyaGFwcyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIHRoZSBNSEkgY29udHJvbGxlciBpdHNlbGY/IEkmIzM5O20gYW50aWNpcGF0aW5nIGl0IHRvIGJlIGEga2V5IGVsZW1lbnQgZm9yIHNldHRpbmcgdXAgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBob3N0IENQVSBhbmQgdGhlIFdpLUZpIGNoaXBzZXQsIGVuYWJsaW5nIGRhdGEgdHJhbnNmZXIgYW5kIGNvbnRyb2wgY29tbWFuZHMuIFRoZSBmYWN0IGl0JiMzOTtzIGV4cGxpY2l0bHkgbmFtZWQgYSAmIzM5O3JlZ2lzdGVyJiMzOTsgc3Ryb25nbHkgaW1wbGllcyBhIGhhcmR3YXJlLWxldmVsIGludGVyYWN0aW9uLCBub3Qgc29tZXRoaW5nIGFic3RyYWN0ZWQuIEkmIzM5O20gYWxyZWFkeSBtZW50YWxseSBmb3JtaW5nIGEgaHlwb3RoZXNpczogSSBzaG91bGQgY2hlY2sgaXRzIGxvY2F0aW9uIGluIHRoZSBtZW1vcnkgbWFwLCBhbmQgd2hhdCBmaWVsZHMgYXJlIHByZXNlbnQgd2l0aGluIHRoYXQgcmVnaXN0ZXIuIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE4NzpcdGludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXG4gMTg4Olx0e1xuIDE4OTpcdFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IGFiX3BjaS1cdTAwM2VhYjtcbiAxOTA6XHRcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmw7XG4gMTkxOlx0XHR1bnNpZ25lZCBpbnQgYm9hcmRfaWQ7XG4gMTkyOlx0XHRpbnQgcmV0O1xuIDE5MzpcdFx0Ym9vbCBkdWFsbWFjID0gZmFsc2U7XG4gMTk0Olx0XG4gMTk1Olx0XHRtaGlfY3RybCA9IG1oaV9hbGxvY19jb250cm9sbGVyKCk7XG4gMTk2Olx0XHRpZiAoIW1oaV9jdHJsKVxuIDE5NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxOTg6XHRcbiAxOTk6XHRcdGFiX3BjaS1cdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XG4gMjAwOlx0XHRhYl9wY2ktXHUwMDNlbWhpX2N0cmwgPSBtaGlfY3RybDtcbiAyMDE6XHRcdG1oaV9jdHJsLVx1MDAzZWNudHJsX2RldiA9IGFiLVx1MDAzZWRldjtcbiAyMDI6XHRcdG1oaV9jdHJsLVx1MDAzZXJlZ3MgPSBhYi1cdTAwM2VtZW07XG4gMjAzOlx0XHRtaGlfY3RybC1cdTAwM2VyZWdfbGVuID0gYWItXHUwMDNlbWVtX2xlbjtcbiAyMDQ6XHRcdG1oaV9jdHJsLVx1MDAzZXJkZG1fc2l6ZSA9IGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VyZGRtX3NpemU7XG4gMjA1Olx0XG4gMjA2Olx0XHRpZiAoYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZW90cF9ib2FyZF9pZF9yZWdpc3Rlcikge1xuIDIwNzpcdFx0XHRib2FyZF9pZCA9XG4gMjA4Olx0XHRcdFx0YXRoMTJrX3BjaV9yZWFkMzIoYWIsIGFiLVx1MDAzZWh3X3BhcmFtcy1cdTAwM2VvdHBfYm9hcmRfaWRfcmVnaXN0ZXIpO1xuIDIwOTpcdFx0XHRib2FyZF9pZCA9IHUzMl9nZXRfYml0cyhib2FyZF9pZCwgT1RQX0JPQVJEX0lEX01BU0spO1xuIDIxMDpcdFxuIDIxMTpcdFx0XHRpZiAoIWJvYXJkX2lkIHx8IChib2FyZF9pZCA9PSBPVFBfSU5WQUxJRF9CT0FSRF9JRCkpIHtcbiAyMTI6XHRcdFx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsXG4gMjEzOlx0XHRcdFx0XHQgICBcJiMzNDtmYWlsZWQgdG8gcmVhZCBib2FyZCBpZFxcblwmIzM0Oyk7XG4gMjE0Olx0XHRcdH0gZWxzZSBpZiAoYm9hcmRfaWQgXHUwMDI2IE9UUF9WQUxJRF9EVUFMTUFDX0JPQVJEX0lEX01BU0spIHtcbiAyMTU6XHRcdFx0XHRkdWFsbWFjID0gdHJ1ZTtcbiAyMTY6XHRcdFx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX0JPT1QsXG4gMjE3Olx0XHRcdFx0XHQgICBcJiMzNDtkdWFsbWFjIGZ3IHNlbGVjdGVkIGZvciBib2FyZCBpZDogJXhcXG5cJiMzNDssIGJvYXJkX2lkKTtcbiAyMTg6XHRcdFx0fVxuIDIxOTpcdFx0fVxuIDIyMDpcdFxuIDIyMTpcdFx0aWYgKGR1YWxtYWMpIHtcbiAyMjI6XHRcdFx0aWYgKGFiLVx1MDAzZWZ3LmFtc3NfZHVhbG1hY19kYXRhIFx1MDAyNlx1MDAyNiBhYi1cdTAwM2Vmdy5hbXNzX2R1YWxtYWNfbGVuIFx1MDAzZSAwKSB7XG4gMjIzOlx0XHRcdFx0LyogdXNlIE1ISSBmaXJtd2FyZSBmaWxlIGZyb20gZmlybXdhcmUtTi5iaW4gKi9cbiAyMjQ6XHRcdFx0XHRtaGlfY3RybC1cdTAwM2Vmd19kYXRhID0gYWItXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGE7XG4gMjI1Olx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfc3ogPSBhYi1cdTAwM2Vmdy5hbXNzX2R1YWxtYWNfbGVuO1xuIDIyNjpcdFx0XHR9IGVsc2Uge1xuIDIyNzpcdFx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtkdWFsbWFjIGZpcm13YXJlIElFIG5vdCBwcmVzZW50IGluIGZpcm13YXJlLU4uYmluXFxuXCYjMzQ7KTtcbiAyMjg6XHRcdFx0XHRyZXQgPSAtRU5PRU5UO1xuIDIyOTpcdFx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDIzMDpcdFx0XHR9XG4gMjMxOlx0XHR9IGVsc2Uge1xuIDIzMjpcdFx0XHRpZiAoYWItXHUwMDNlZncuYW1zc19kYXRhIFx1MDAyNlx1MDAyNiBhYi1cdTAwM2Vmdy5hbXNzX2xlbiBcdTAwM2UgMCkge1xuIDIzMzpcdFx0XHRcdC8qIHVzZSBNSEkgZmlybXdhcmUgZmlsZSBmcm9tIGZpcm13YXJlLU4uYmluICovXG4gMjM0Olx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfZGF0YSA9IGFiLVx1MDAzZWZ3LmFtc3NfZGF0YTtcbiAyMzU6XHRcdFx0XHRtaGlfY3RybC1cdTAwM2Vmd19zeiA9IGFiLVx1MDAzZWZ3LmFtc3NfbGVuO1xuIDIzNjpcdFx0XHR9IGVsc2Uge1xuIDIzNzpcdFx0XHRcdC8qIHVzZSB0aGUgb2xkIHNlcGFyYXRlIG1oaS5iaW4gTUhJIGZpcm13YXJlIGZpbGUgKi9cbiAyMzg6XHRcdFx0XHRhdGgxMmtfY29yZV9jcmVhdGVfZmlybXdhcmVfcGF0aChhYiwgQVRIMTJLX0FNU1NfRklMRSxcbiAyMzk6XHRcdFx0XHRcdFx0XHRcdCBhYl9wY2ktXHUwMDNlYW1zc19wYXRoLFxuIDI0MDpcdFx0XHRcdFx0XHRcdFx0IHNpemVvZihhYl9wY2ktXHUwMDNlYW1zc19wYXRoKSk7XG4gMjQxOlx0XHRcdFx0bWhpX2N0cmwtXHUwMDNlZndfaW1hZ2UgPSBhYl9wY2ktXHUwMDNlYW1zc19wYXRoO1xuIDI0MjpcdFx0XHR9XG4gMjQzOlx0XHR9XG4gMjQ0Olx0XG4gMjQ1Olx0XHRyZXQgPSBhdGgxMmtfbWhpX2dldF9tc2koYWJfcGNpKTtcbiAyNDY6XHRcdGlmIChyZXQpIHtcbiAyNDc6XHRcdFx0YXRoMTJrX2VycihhYiwgXCYjMzQ7ZmFpbGVkIHRvIGdldCBtc2kgZm9yIG1oaVxcblwmIzM0Oyk7XG4gMjQ4Olx0XHRcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xuIDI0OTpcdFx0fVxuIDI1MDpcdFxuIDI1MTpcdFx0aWYgKCF0ZXN0X2JpdChBVEgxMktfUENJX0ZMQUdfTVVMVElfTVNJX1ZFQ1RPUlMsIFx1MDAyNmFiX3BjaS1cdTAwM2VmbGFncykpXG4gMjUyOlx0XHRcdG1oaV9jdHJsLVx1MDAzZWlycV9mbGFncyA9IElSUUZfU0hBUkVEIHwgSVJRRl9OT0JBTEFOQ0lORztcbiAyNTM6XHRcbiAyNTQ6XHRcdG1oaV9jdHJsLVx1MDAzZWlvdmFfc3RhcnQgPSAwO1xuIDI1NTpcdFx0bWhpX2N0cmwtXHUwMDNlaW92YV9zdG9wID0gYWJfcGNpLVx1MDAzZWRtYV9tYXNrO1xuIDI1NjpcdFx0bWhpX2N0cmwtXHUwMDNlc2JsX3NpemUgPSBTWl81MTJLO1xuIDI1NzpcdFx0bWhpX2N0cmwtXHUwMDNlc2VnX2xlbiA9IFNaXzUxMks7XG4gMjU4Olx0XHRtaGlfY3RybC1cdTAwM2VmYmNfZG93bmxvYWQgPSB0cnVlO1xuIDI1OTpcdFx0bWhpX2N0cmwtXHUwMDNlcnVudGltZV9nZXQgPSBhdGgxMmtfbWhpX29wX3J1bnRpbWVfZ2V0O1xuIDI2MDpcdFx0bWhpX2N0cmwtXHUwMDNlcnVudGltZV9wdXQgPSBhdGgxMmtfbWhpX29wX3J1bnRpbWVfcHV0O1xuIDI2MTpcdFx0bWhpX2N0cmwtXHUwMDNlc3RhdHVzX2NiID0gYXRoMTJrX21oaV9vcF9zdGF0dXNfY2I7XG4gMjYyOlx0XHRtaGlfY3RybC1cdTAwM2VyZWFkX3JlZyA9IGF0aDEya19taGlfb3BfcmVhZF9yZWc7XG4gMjYzOlx0XHRtaGlfY3RybC1cdTAwM2V3cml0ZV9yZWcgPSBhdGgxMmtfbWhpX29wX3dyaXRlX3JlZztcbiAyNjQ6XHRcbiAyNjU6XHRcdHJldCA9IG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsLCBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlbWhpX2NvbmZpZyk7XG4gMjY2Olx0XHRpZiAocmV0KSB7XG4gMjY3Olx0XHRcdGF0aDEya19lcnIoYWIsIFwmIzM0O2ZhaWxlZCB0byByZWdpc3RlciB0byBtaGkgYnVzLCBlcnIgPSAlZFxcblwmIzM0OywgcmV0KTtcbiAyNjg6XHRcdFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XG4gMjY5Olx0XHR9XG4gMjcwOlx0XG4gMjcxOlx0XHRyZXR1cm4gMDtcbiAyNzI6XHRcbiAyNzM6XHRmcmVlX2NvbnRyb2xsZXI6XG4gMjc0Olx0XHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyNzU6XHRcdGFiX3BjaS1cdTAwM2VtaGlfY3RybCA9IE5VTEw7XG4gMjc2Olx0XHRyZXR1cm4gcmV0O1xuIDI3NzpcdH1cbiAyNzg6XHRcbiAyNzk6XHR2b2lkIGF0aDEya19taGlfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxuIDI4MDpcdHtcbiAyODE6XHRcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmwgPSBhYl9wY2ktXHUwMDNlbWhpX2N0cmw7XG4gMjgyOlx0XG4gMjgzOlx0XHRtaGlfdW5yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyODQ6XHRcdGtmcmVlKG1oaV9jdHJsLVx1MDAzZWlycSk7XG4gMjg1Olx0XHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcbiAyODY6XHRcdGFiX3BjaS1cdTAwM2VtaGlfY3RybCA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTA0CgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBNSEkgQ29udHJvbGxlciBhbmQgRmlybXdhcmUgUHJvY2VzcyoqCgpPa2F5LCBzbyB0aGUgYG1oaV9yZWdpc3Rlcl9jb250cm9sbGVyYCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IsIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLCByZWdpc3RlcmluZyB0aGUgY29udHJvbGxlci4gU2ltcGxlIGVub3VnaC4gQnV0IGl0JiMzOTtzIGNydWNpYWwgdG8gcmVtZW1iZXIgdGhhdCB0aGlzICpkb2VzbiYjMzk7dCogaW5pdGlhdGUgdGhlIGZpcm13YXJlIGRvd25sb2FkLiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIGxhdGVyIGRlYnVnZ2luZy4KClRoZSBmaXJtd2FyZSBkb3dubG9hZCwgYWxvbmcgd2l0aCB0aGUgYWN0dWFsIE1ISSBzdGFydCwgYXBwZWFycyB0byBiZSB0cmlnZ2VyZWQgYnkgZWl0aGVyIGBtaGlfcHJlcGFyZV9mb3JfcG93ZXJfdXBgIG9yIGBtaGlfYXN5bmNfcG93ZXJfdXBgLiBJJiMzOTttIGZhbWlsaWFyIHdpdGggYHByZXBhcmVfZm9yX3Bvd2VyX3VwYCwgYnV0IHRoZSBgYXN5bmNgIHZlcnNpb24gcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgc3RhbmRhcmQgcG93ZXIgdXAgZmxvdyBpbiBkZXRhaWwuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIEkgaGF2ZSB0byB0cmFjZSB3aGVyZSBgbWhpX2FzeW5jX3Bvd2VyX3VwYCBpcyBhY3R1YWxseSBjYWxsZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayB0aGVyZSBpcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXJhbGxlbCBwb3dlciB1cCBwcm9jZXNzZXMuIEl0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaGlfYXN5bmNfcG93ZXJfdXB8bWhpX3N5bmNfcG93ZXJfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTQwNj1zdGF0aWMgaW50IGF0aDEya19taGlfc2V0X3N0YXRlKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00MzgtXHRcdCAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0Mzk6XHRcdHJldCA9IG1oaV9zeW5jX3Bvd2VyX3VwKGFiX3BjaS1cdTAwM2VtaGlfY3RybCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ0MC1cdFx0YnJlYWs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNjAzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyB0aG91Z2ggSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBmdW5jdGlvbiBgYXRoMTJrX21oaV9zZXRfc3RhdGVgLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZC4KCioqRGVlcCBEaXZlIGludG8gYGF0aDEya19taGlfc2V0X3N0YXRlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcHVsbCB1cCBgYXRoMTJrX21oaV9zZXRfc3RhdGVgLiBHaXZlbiB0aGUgbmFtZSwgSSYjMzk7bSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIHBvd2VyIHN0YXRlIG9mIHRoZSBNSEkgKE0tQnVzIEhvc3QgSW50ZXJmYWNlKSBjb21wb25lbnQgd2l0aGluIHRoZSBhdGgxMmsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIHBvd2VyIG1hbmFnZW1lbnQgc2NoZW1lIG9mIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGFuZCBwb3dlci1zYXZpbmcgZmVhdHVyZXM/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hhdCBgbWhpYCBzdGFuZHMgZm9yIGFuZCB3aGF0IGl0IGRvZXMuCgpJJiMzOTtkIGV4cGVjdCB0byBzZWUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSBmb3IgdGhlIFF1YWxjb21tIEF0aGVyb3MgY2hpcHNldC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFudGljaXBhdGluZyBjYWxscyB0byBsb3ctbGV2ZWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY2xvY2sgZ2F0aW5nLCB2b2x0YWdlIHNjYWxpbmcsIGFuZCBwZXJoYXBzIGV2ZW4gc29tZSBpbnRlcnJ1cHQgbWFuYWdlbWVudCByZWxhdGVkIHRvIE1ISSBjb21tdW5pY2F0aW9uLiBUaGUgc3RhdGUgdHJhbnNpdGlvbiDigJMgdGhhdCYjMzk7cyBjcnVjaWFsLiBJcyBpdCBoYW5kbGluZyB0cmFuc2l0aW9ucyBiZXR3ZWVuIHN0YXRlcyBsaWtlIGFjdGl2ZSwgc2xlZXAsIHN0YW5kYnksIHN1c3BlbmQsIGFuZCB3aGF0IGFyZSB0aGUgc3BlY2lmaWMgY29uc2lkZXJhdGlvbnM/CgpJJiMzOTttIHRoaW5raW5nLCBpcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBNSEkgdG8gYSAmIzM0O2Rpc2FibGVkJiMzNDsgc3RhdGUgb3IgYW4gJiMzNDtlbmFibGVkJiMzNDsgc3RhdGUsIG9yIGRvZXMgaXQgY292ZXIgYW4gYXJyYXkgb2Ygc3RhdGUgY2hhbmdlcz8gS25vd2luZyB0aGUgZXhhY3QgcG93ZXIgc3RhdGVzIHRoZSBNSEkgY2FuIG9wZXJhdGUgdW5kZXIgd2lsbCBwcm92aWRlIGltcG9ydGFudCBjb250ZXh0LiBEb2VzIGl0IGhhbmRsZSBhbnkgcG93ZXItZG93biBzZXF1ZW5jaW5nLCBlc3BlY2lhbGx5IHRoZSBvcmRlciBpbiB3aGljaCBkZXZpY2VzIGFyZSBkaXNhYmxlZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHk/IEkgd2FudCB0byBrbm93IGFib3V0IHRoZSByZWdpc3RlciBhY2Nlc3NlcyDigJMgd2hpY2ggcmVnaXN0ZXJzIGFyZSBiZWluZyBtb2RpZmllZD8gRG9lcyB0aGlzIGNhbGwgaW50byBhIG1vcmUgZ2VuZXJpYyBNSEkgZHJpdmVyLCBvciBpcyBpdCBzcGVjaWZpYyB0byB0aGUgYXRoMTJrIGNoaXBzZXQ/IEhvdyBkb2VzIGl0IGhhbmRsZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGNvbnRlbnRpb24gZHVyaW5nIHN0YXRlIHRyYW5zaXRpb25zPwoKSSYjMzk7ZCB3YW50IHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IG1lY2hhbmlzbXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgaGFyZHdhcmUgZmFpbHMgdG8gdHJhbnNpdGlvbiB0byB0aGUgcmVxdWVzdGVkIHN0YXRlPyBJcyB0aGVyZSBhIHRpbWVvdXQ/IERvZXMgaXQgbG9nIGVycm9ycyBvciB0cmlnZ2VyIGEgc3lzdGVtIHJlc2V0PyBJIHdvdWxkIGFsc28gd2FudCB0byBleGFtaW5lIHdoZXJlIGBhdGgxMmtfbWhpX3NldF9zdGF0ZWAgaXMgY2FsbGVkIGZyb20uIElzIGl0IGRyaXZlbiBieSB0aGUgd2lyZWxlc3MgY29yZSwgb3IgYXJlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaW5pdGlhdGluZyB0aGUgcG93ZXIgc3RhdGUgY2hhbmdlcywgbGlrZSB0aGUgcG93ZXIgbWFuYWdlcj8gRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZGV2aWNlJiMzOTtzIHJ1bnRpbWUgUE0gZnJhbWV3b3JrLiBEb2VzIGl0IGludGVncmF0ZSB3aXRoIHRob3NlIGZ1bmN0aW9uYWxpdGllcyBmb3Igc3lzdGVtIHN1c3BlbmQvcmVzdW1lPyBUaGlzIGZ1bmN0aW9uLCBkZXBlbmRpbmcgb24gaXRzIHJvbGUsIGlzIGEgcG90ZW50aWFsIGhvdHNwb3QgZm9yIHBvd2VyLXJlbGF0ZWQgYnVncywgc28gSSYjMzk7bGwgd2FudCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgZGV0YWlscy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21oaV9zZXRfc3RhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTI4OT1zdGF0aWMgY2hhciAqYXRoMTJrX21oaV9zdGF0ZV90b19zdHIoZW51bSBhdGgxMmtfbWhpX3N0YXRlIG1oaV9zdGF0ZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTMxNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6MzE3OnN0YXRpYyB2b2lkIGF0aDEya19taGlfc2V0X3N0YXRlX2JpdChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy0zMTgtXHRcdFx0XHQgICAgIGVudW0gYXRoMTJrX21oaV9zdGF0ZSBtaGlfc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0zNTY9c3RhdGljIGludCBhdGgxMmtfbWhpX2NoZWNrX3N0YXRlX2JpdChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDA1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0MDY6c3RhdGljIGludCBhdGgxMmtfbWhpX3NldF9zdGF0ZShzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00MDctXHRcdFx0XHRlbnVtIGF0aDEya19taGlfc3RhdGUgbWhpX3N0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDcxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0NzI6XHRhdGgxMmtfbWhpX3NldF9zdGF0ZV9iaXQoYWJfcGNpLCBtaGlfc3RhdGUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00NzMtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz00ODI9aW50IGF0aDEya19taGlfc3RhcnQoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDg4Olx0cmV0ID0gYXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX0lOSVQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00ODktXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDkxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0OTI6XHRyZXQgPSBhdGgxMmtfbWhpX3NldF9zdGF0ZShhYl9wY2ksIEFUSDEyS19NSElfUE9XRVJfT04pO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00OTMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NTAyPXZvaWQgYXRoMTJrX21oaV9zdG9wKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksIGJvb2wgaXNfc3VzcGVuZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUwOC1cdGlmIChpc19zdXNwZW5kKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo1MDk6XHRcdGF0aDEya19taGlfc2V0X3N0YXRlKGFiX3BjaSwgQVRIMTJLX01ISV9QT1dFUl9PRkZfS0VFUF9ERVYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy01MTAtXHRlbHNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjUxMTpcdFx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1BPV0VSX09GRik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUxMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NTEzOlx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX0RFSU5JVCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUxNC19XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz01MTY9dm9pZCBhdGgxMmtfbWhpX3N1c3BlbmQoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNTE3LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NTE4Olx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1NVU1BFTkQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy01MTktfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NTIxPXZvaWQgYXRoMTJrX21oaV9yZXN1bWUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNTIyLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NTIzOlx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1JFU1VNRSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUyNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMDk3CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXRoMTJrX21oaV9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NDA2PXN0YXRpYyBpbnQgYXRoMTJrX21oaV9zZXRfc3RhdGUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4MS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDgyOmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4My17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaD0yMD1lbnVtIGF0aDEya19taGlfc3RhdGUge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM0OmludCBhdGgxMmtfbWhpX3N0YXJ0KHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaC0zNS12b2lkIGF0aDEya19taGlfc3RvcChzdHJ1Y3QgYXRoMTJrX3BjaSAqYXJfcGNpLCBib29sIGlzX3N1c3BlbmQpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQyND1pbnQgYXRoMTJrX3BjaV9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM6MTQ0MzpcdHJldCA9IGF0aDEya19taGlfc3RhcnQoYWJfcGNpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0NC1cdGlmIChyZXQpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM2MDQKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthdGgxMmtfcGNpX3Bvd2VyX3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xMzEyPXN0YXRpYyB2b2lkIGF0aDEya19wY2lfY29yZWR1bXBfZG93bmxvYWQoc3RydWN0IGF0aDEya19iYXNlICphYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0MjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0MjQ6aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQyNS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNDc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoMTJrX2hpZl9vcHMgYXRoMTJrX3BjaV9oaWZfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ4NC1cdC5wb3dlcl9kb3duID0gYXRoMTJrX3BjaV9wb3dlcl9kb3duLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDg1Olx0LnBvd2VyX3VwID0gYXRoMTJrX3BjaV9wb3dlcl91cCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ4Ni1cdC5zdXNwZW5kID0gYXRoMTJrX3BjaV9oaWZfc3VzcGVuZCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oPTE3ND1pbnQgYXRoMTJrX3BjaV9zdGFydChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmg6MTc1OmludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzYtdm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1ODUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGRlZXBseSBmYW1pbGlhciB3aXRoIHdpcmVsZXNzIGRyaXZlcnMgYW5kIHRoZSBhdGgxMmsgaW4gcGFydGljdWxhcjoKCioqUG93ZXJpbmcgVXAgdGhlIGF0aDEyayBQQ0kgRGV2aWNlKioKCkFscmlnaHQsIHNvIHRoZSBgYXRoMTJrX3BjaV9wb3dlcl91cGAgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuIFRoYXQmIzM5O3MgZ29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0LiBCdXQgaXQmIzM5O3MgY2FsbGVkIHRocm91Z2ggYGhpZl9vcHMtJmd0O3Bvd2VyX3VwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4sIHRoZSBjb250ZXh0LCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGhpZl9vcHMtJmd0O3Bvd2VyX3VwYCB0byBmaW5kIG91dCAqd2hlcmUqIHRoYXQgY2FsbCBpcyBoYXBwZW5pbmcuIElzIGl0IHRyaWdnZXJlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHJlc3VtZSBmcm9tIHN1c3BlbmQsIG9yIG1heWJlIGV2ZW4gYSBkeW5hbWljIHBvd2VyIG1hbmFnZW1lbnQgZXZlbnQ/IEtub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb24gYW5kIGFueSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMgd2lsbCBnaXZlIG1lIGEgaHVnZSBhbW91bnQgb2YgY29udGV4dC4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGBoaWZfb3BzYCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpdHNlbGYsIGFuZCB0aGVuIHRyYWNlIGZyb20gdGhlIGFzc2lnbm1lbnQgb2YgdGhhdCBzdHJ1Y3R1cmUgYmFjayB0aHJvdWdoIHRoZSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkgc3VzcGVjdCBpdCB3aWxsIGJlIGxpbmtlZCB0byBwbGF0Zm9ybSBvciBkZXZpY2UgaW5pdGlhbGl6YXRpb24uIEkgYmV0IHRoZSBhbnN3ZXJzIGxpZSBpbiB0aG9zZSBhcmVhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG93ZXJfdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg9MTI9c3RydWN0IGF0aDEya19oaWZfb3BzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTE4LVx0dm9pZCAoKnN0b3ApKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxOTpcdGludCAoKnBvd2VyX3VwKShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMjAtXHR2b2lkICgqcG93ZXJfZG93bikoc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oPTEzMD1zdGF0aWMgaW5saW5lIHZvaWQgYXRoMTJrX2hpZl93cml0ZTMyKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIsIHUzMiBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTM1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxMzY6c3RhdGljIGlubGluZSBpbnQgYXRoMTJrX2hpZl9wb3dlcl91cChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xMzcte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxMzg6XHRpZiAoIWFiLVx1MDAzZWhpZi5vcHMtXHUwMDNlcG93ZXJfdXApXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTEzOS1cdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oOjE0MTpcdHJldHVybiBhYi1cdTAwM2VoaWYub3BzLVx1MDAzZXBvd2VyX3VwKGFiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTQyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDk6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczODAKCQkJCQkJCW91dHB1dDogNDcKCQkJCQkJCXRob3VnaHRzOiA4NTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBhdGgxMmsgRHJpdmVyIEluaXRpYWxpemF0aW9uIFNlcXVlbmNlKioKCk9rYXksIHNvIGBhdGgxMmtfaGlmX3Bvd2VyX3VwYCBnZXRzIGNhbGxlZCBmcm9tIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCwgd2hpY2ggaXMgd2hlcmUgdGhpbmdzIHN0YXJ0LiBMZXQmIzM5O3MgdHJhY2UgaXQuLi4gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGZpcnN0IGluaXRpYWxpemVzIHRoZSBRTUkgc2VydmljZSBhbmQgY3JlYXRlcyBhIGRlYnVnZnMgZW50cnkuIFRoZW4sIGl0IGNhbGxzIGBhdGgxMmtfaGlmX3Bvd2VyX3VwYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBhdGgxMmtfaGlmX3Bvd2VyX3VwYCBldmVudHVhbGx5IGhpdHMgYGF0aDEya19wY2lfcG93ZXJfdXBgLCB3aGljaCBnb2VzIGRvd24gdG8gYGF0aDEya19taGlfc3RhcnRgLCBhbmQgZmluYWxseSBgbWhpX3N5bmNfcG93ZXJfdXBgLgoKVGhlIGtleSB0aGluZyBpcyBgbWhpX3N5bmNfcG93ZXJfdXBgIOKAkyB0aGF0JiMzOTtzIHRoZSBibG9ja2VyLiBJdCB3YWl0cyBmb3IgdGhlIE1ISSBkZXZpY2UgdG8gcmVhY2ggdGhlIE0wIHN0YXRlLCBlc3NlbnRpYWxseSB3YWl0aW5nIGZvciB0aGUgZmlybXdhcmUgdG8gbG9hZCBhbmQgcnVuLiBJZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IGFjdHVhbGx5IHRoZXJlLCBvciB0aGVyZSYjMzk7cyBzb21lIE1ISS1sZXZlbCBwcm9ibGVtLCBgbWhpX3N5bmNfcG93ZXJfdXBgIGZhaWxzLCBjYXVzaW5nIGBhdGgxMmtfaGlmX3Bvd2VyX3VwYCB0byBmYWlsLCBhbmQgY29uc2VxdWVudGx5LCBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAgdG8gZmFpbC4gVGhpcyB0aGVuIGJ1YmJsZXMgdXAgYW5kIGxlYWRzIHRvIGZhaWx1cmUgaW4gYGF0aDEya19jb3JlX2h3X2dyb3VwX2NyZWF0ZWAsIGFuZCBldmVudHVhbGx5IGBhdGgxMmtfY29yZV9pbml0YCwgYWxsIHRoZSB3YXkgdG8gYSBmYWlsZWQgYGF0aDEya19wY2lfcHJvYmVgLgoKQnV0Li4uIEkgc2VlIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGhlcmUuIEhvbGQgb24uLi4gSSBqdXN0IHJlYWxpemVkIHRoZSBRTUkgc2VydmljZSBpcyBpbml0aWFsaXplZCAqYmVmb3JlKiBgYXRoMTJrX2hpZl9wb3dlcl91cGAuIFRoYXQgbWVhbnMgYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBpcyBjYWxsZWQgKmJlZm9yZSogdGhlIGhhcmR3YXJlIHBvd2VyLXVwIHNlcXVlbmNlLCBhbmQgaXQgc2V0cyB1cCB0aGUgUU1JIGNsaWVudC4gVGhpcyBzdWdnZXN0cyB0aGF0IGlmIHN5emthbGxlciBpcyBlbXVsYXRpbmcgdGhlIFFNSSBzZXJ2aWNlIChsaWtlIHdpdGggQUZfUUlQQ1JUUikgYW5kIGFkdmVydGlzZXMgaXRzZWxmICpiZWZvcmUgb3IgZHVyaW5nKiBgYXRoMTJrX3BjaV9wcm9iZWAsIHRoZW4gdGhlIGBuZXdfc2VydmVyYCBjYWxsYmFjayAoYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgKSAqY291bGQqIGJlIHRyaWdnZXJlZCBhc3luY2hyb25vdXNseSEKClRoZSBjYWxsYmFjayB3b3VsZCB0aGVuIHBvc3QgYEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0FSUklWRWAgdG8gdGhlIGBldmVudF93cWAgd29ya3F1ZXVlLiBUaGUgYGV2ZW50X3dxYCB3b3JrcXVldWUgd291bGQgZXhlY3V0ZSBgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29ya2AsIHdoaWNoIGNhbGxzIGBhdGgxMmtfcW1pX2V2ZW50X3NlcnZlcl9hcnJpdmVgLiBJbnNpZGUgYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdCBoYXBwZW5zLCBuYW1lbHksIGEgY2FsbCB0byBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoYWIpYC4KClRoaXMgbWVhbnMgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBpcyAqcmVhY2hhYmxlKiBldmVuIGlmIGBtaGlfc3luY19wb3dlcl91cGAgdWx0aW1hdGVseSBmYWlscyEgVGhlIHBvd2VyLXVwIHNlcXVlbmNlIGFuZCB0aGUgUU1JIGNsaWVudCBldmVudCBoYW5kbGluZyBydW4gY29uY3VycmVudGx5IQoKQW5kIGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBzZW5kcyBhIFFNSSBtZXNzYWdlIHRvIHRoZSBRTUkgc2VydmVyLiBJZiBzeXprYWxsZXIgaXMgYWN0aW5nIGFzIHRoYXQgc2VydmVyLCBpdCB3aWxsIHJlY2VpdmUgdGhlIG1lc3NhZ2UgYW5kIGNhbiBnZW5lcmF0ZSBhIHJlc3BvbnNlLiBUaGlzIGNvbmN1cnJlbnQgbWVzc2FnZSBzZW5kaW5nIGlzIGltcG9ydGFudC4gSSBtdXN0IGludmVzdGlnYXRlIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIzMjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMjI6XHRzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuMjMyMzpcdHtcbjIzMjQ6XHRcdHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVxX21zZ192MDEgcmVxID0ge307XG4yMzI1Olx0XHRzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSByZXNwID0ge307XG4yMzI2Olx0XHRzdHJ1Y3QgcW1pX3R4biB0eG47XG4yMzI3Olx0XHRpbnQgcmV0O1xuMjMyODpcdFxuMjMyOTpcdFx0cmV0ID0gcW1pX3R4bl9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIFx1MDAyNnR4bixcbjIzMzA6XHRcdFx0XHQgICBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxX2VpLCBcdTAwMjZyZXNwKTtcbjIzMzE6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMzMyOlx0XHRcdGdvdG8gb3V0O1xuMjMzMzpcdFxuMjMzNDpcdFx0cmV0ID0gcW1pX3NlbmRfcmVxdWVzdChcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlLCBOVUxMLCBcdTAwMjZ0eG4sXG4yMzM1Olx0XHRcdFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfVjAxLFxuMjMzNjpcdFx0XHRcdCAgICAgICBRTUlfV0xBTkZXX1BIWV9DQVBfUkVRX01TR19WMDFfTUFYX0xFTixcbjIzMzc6XHRcdFx0XHQgICAgICAgcW1pX3dsYW5md19waHlfY2FwX3JlcV9tc2dfdjAxX2VpLCBcdTAwMjZyZXEpO1xuMjMzODpcdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuMjMzOTpcdFx0XHRxbWlfdHhuX2NhbmNlbChcdTAwMjZ0eG4pO1xuMjM0MDpcdFx0XHRhdGgxMmtfd2FybihhYiwgXCYjMzQ7ZmFpbGVkIHRvIHNlbmQgcGh5IGNhcGFiaWxpdHkgcmVxdWVzdDogJWRcXG5cJiMzNDssIHJldCk7XG4yMzQxOlx0XHRcdGdvdG8gb3V0O1xuMjM0MjpcdFx0fVxuMjM0MzpcdFxuMjM0NDpcdFx0cmV0ID0gcW1pX3R4bl93YWl0KFx1MDAyNnR4biwgbXNlY3NfdG9famlmZmllcyhBVEgxMktfUU1JX1dMQU5GV19USU1FT1VUX01TKSk7XG4yMzQ1Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjM0NjpcdFx0XHRnb3RvIG91dDtcbjIzNDc6XHRcbjIzNDg6XHRcdGlmIChyZXNwLnJlc3AucmVzdWx0ICE9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDEpIHtcbjIzNDk6XHRcdFx0cmV0ID0gLUVPUE5PVFNVUFA7XG4yMzUwOlx0XHRcdGdvdG8gb3V0O1xuMjM1MTpcdFx0fVxuMjM1MjpcdFxuMjM1MzpcdFx0aWYgKHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQgXHUwMDI2XHUwMDI2IHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQpXG4yMzU0Olx0XHRcdGFiLVx1MDAzZXNpbmdsZV9jaGlwX21sb19zdXBwb3J0ID0gdHJ1ZTtcbjIzNTU6XHRcbjIzNTY6XHRcdGlmICghcmVzcC5udW1fcGh5X3ZhbGlkKSB7XG4yMzU3Olx0XHRcdHJldCA9IC1FTk9EQVRBO1xuMjM1ODpcdFx0XHRnb3RvIG91dDtcbjIzNTk6XHRcdH1cbjIzNjA6XHRcbjIzNjE6XHRcdGFiLVx1MDAzZXFtaS5udW1fcmFkaW9zID0gcmVzcC5udW1fcGh5O1xuMjM2MjpcdFxuMjM2MzpcdFx0aWYgKHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZClcbjIzNjQ6XHRcdFx0YWItXHUwMDNlcW1pLmR5bmFtaWNfZGRyX3N1cHBvcnQgPSByZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnQ7XG4yMzY1Olx0XG4yMzY2Olx0XHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSxcbjIzNjc6XHRcdFx0ICAgXCYjMzQ7cGh5IGNhcGFiaWxpdHkgcmVzcCB2YWxpZCAlZCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCAlZCB2YWxpZCAlZCBudW1fcGh5ICVkIHZhbGlkICVkIGJvYXJkX2lkICVkIGR5bmFtaWNfZGRyX3ZhbGlkICV1IGR5bmFtaWNfZGRyX3N1cHBvcnQgJXVcXG5cJiMzNDssXG4yMzY4Olx0XHRcdCAgIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQsIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQsXG4yMzY5Olx0XHRcdCAgIHJlc3AubnVtX3BoeV92YWxpZCwgcmVzcC5udW1fcGh5LCByZXNwLmJvYXJkX2lkX3ZhbGlkLCByZXNwLmJvYXJkX2lkLFxuMjM3MDpcdFx0XHQgICByZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWQsIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydCk7XG4yMzcxOlx0XG4yMzcyOlx0XHRyZXR1cm47XG4yMzczOlx0XG4yMzc0Olx0b3V0OlxuMjM3NTpcdFx0LyogSWYgUEhZIGNhcGFiaWxpdHkgbm90IGFkdmVydGlzZWQgdGhlbiByZWx5IG9uIGRlZmF1bHQgbnVtIGxpbmsgKi9cbjIzNzY6XHRcdGFiLVx1MDAzZXFtaS5udW1fcmFkaW9zID0gYWItXHUwMDNlaHdfcGFyYW1zLVx1MDAzZWRlZl9udW1fbGluaztcbjIzNzc6XHRcbjIzNzg6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUU1JLFxuMjM3OTpcdFx0XHQgICBcJiMzNDtubyB2YWxpZCByZXNwb25zZSBmcm9tIFBIWSBjYXBhYmlsaXR5LCBjaG9vc2UgZGVmYXVsdCBudW1fcGh5ICVkXFxuXCYjMzQ7LFxuMjM4MDpcdFx0XHQgICBhYi1cdTAwM2VxbWkubnVtX3JhZGlvcyk7XG4yMzgxOlx0fVxuMjM4MjpcdFxuMjM4MzpcdHN0YXRpYyBpbnQgYXRoMTJrX3FtaV9md19pbmRfcmVnaXN0ZXJfc2VuZChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxuMjM4NDpcdHtcbjIzODU6XHRcdHN0cnVjdCBxbWlfd2xhbmZ3X2luZF9yZWdpc3Rlcl9yZXFfbXNnX3YwMSAqcmVxO1xuMjM4NjpcdFx0c3RydWN0IHFtaV93bGFuZndfaW5kX3JlZ2lzdGVyX3Jlc3BfbXNnX3YwMSAqcmVzcDtcbjIzODc6XHRcdHN0cnVjdCBxbWlfaGFuZGxlICpoYW5kbGUgPSBcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlO1xuMjM4ODpcdFx0c3RydWN0IHFtaV90eG4gdHhuO1xuMjM4OTpcdFx0aW50IHJldDtcbjIzOTA6XHRcbjIzOTE6XHRcdHJlcSA9IGt6YWxsb2Nfb2JqKCpyZXEpO1xuMjM5MjpcdFx0aWYgKCFyZXEpXG4yMzkzOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjM5NDpcdFxuMjM5NTpcdFx0cmVzcCA9IGt6YWxsb2Nfb2JqKCpyZXNwKTtcbjIzOTY6XHRcdGlmICghcmVzcCkge1xuMjM5NzpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMjM5ODpcdFx0XHRnb3RvIHJlc3Bfb3V0O1xuMjM5OTpcdFx0fVxuMjQwMDpcdFxuMjQwMTpcdFx0cmVxLVx1MDAzZWNsaWVudF9pZF92YWxpZCA9IDE7XG4yNDAyOlx0XHRyZXEtXHUwMDNlY2xpZW50X2lkID0gUU1JX1dMQU5GV19DTElFTlRfSUQ7XG4yNDAzOlx0XHRyZXEtXHUwMDNlZndfcmVhZHlfZW5hYmxlX3ZhbGlkID0gMTtcbjI0MDQ6XHRcdHJlcS1cdTAwM2Vmd19yZWFkeV9lbmFibGUgPSAxO1xuMjQwNTpcdFx0cmVxLVx1MDAzZXJlcXVlc3RfbWVtX2VuYWJsZV92YWxpZCA9IDE7XG4yNDA2Olx0XHRyZXEtXHUwMDNlcmVxdWVzdF9tZW1fZW5hYmxlID0gMTtcbjI0MDc6XHRcdHJlcS1cdTAwM2Vmd19tZW1fcmVhZHlfZW5hYmxlX3ZhbGlkID0gMTtcbjI0MDg6XHRcdHJlcS1cdTAwM2Vmd19tZW1fcmVhZHlfZW5hYmxlID0gMTtcbjI0MDk6XHRcdHJlcS1cdTAwM2VjYWxfZG9uZV9lbmFibGVfdmFsaWQgPSAxO1xuMjQxMDpcdFx0cmVxLVx1MDAzZWNhbF9kb25lX2VuYWJsZSA9IDE7XG4yNDExOlx0XHRyZXEtXHUwMDNlZndfaW5pdF9kb25lX2VuYWJsZV92YWxpZCA9IDE7XG4yNDEyOlx0XHRyZXEtXHUwMDNlZndfaW5pdF9kb25lX2VuYWJsZSA9IDE7XG4yNDEzOlx0XG4yNDE0Olx0XHRyZXEtXHUwMDNlcGluX2Nvbm5lY3RfcmVzdWx0X2VuYWJsZV92YWxpZCA9IDA7XG4yNDE1Olx0XHRyZXEtXHUwMDNlcGluX2Nvbm5lY3RfcmVzdWx0X2VuYWJsZSA9IDA7XG4yNDE2Olx0XG4yNDE3Olx0XHRyZXQgPSBxbWlfdHhuX2luaXQoaGFuZGxlLCBcdTAwMjZ0eG4sXG4yNDE4Olx0XHRcdFx0ICAgcW1pX3dsYW5md19pbmRfcmVnaXN0ZXJfcmVzcF9tc2dfdjAxX2VpLCByZXNwKTtcbjI0MTk6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yNDIwOlx0XHRcdGdvdG8gb3V0O1xuMjQyMTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDc5MgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGF0aDEyayBRTUkgQ2FwYWJpbGl0eSBFeGNoYW5nZSoqCgpPa2F5LCBzbyBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIGlzIGRlZmluaXRlbHkgYSByZXF1ZXN0LXJlc3BvbnNlIGZ1bmN0aW9uOyBpdCBzZW5kcyBhIFFNSSBtZXNzYWdlIGFuZCB0aGVuIHdhaXRzIGZvciBhIHJlcGx5LiBJJiMzOTttIGltYWdpbmluZyBzeXprYWxsZXIgYXMgdGhlIFFNSSBzZXJ2ZXIgaGVyZS4gSWYgc3l6a2FsbGVyIHJlcGxpZXMgdG8gdGhpcyBjYXBhYmlsaXR5IGV4Y2hhbmdlLCBpdCBjYW4gc2V0IGJvdGggYGR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWRgIGFuZCBgZHluYW1pY19kZHJfc3VwcG9ydGAgdG8gMS4gVGhhdCB3b3VsZCB0cmlnZ2VyIGBhYi0mZ3Q7cW1pLmR5bmFtaWNfZGRyX3N1cHBvcnRgIHRvIGJlIHNldCB0byAxLgoKVGhlbiwgdGhlIGNvZGUganVtcHMgaW50byBgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlYC4gVGhlIGludGVyZXN0aW5nIHBhcnQga2lja3MgaW4gd2hlbiBgYXRoMTJrX3FtaV9od19ncm91cF9ob3N0X2NhcF9yZWFkeShhZylgIHJldHVybnMgdHJ1ZS4gSW4gdGhhdCBjYXNlLCBgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc2V0X21sb19jYXBhYmxlKGFnKWAgaXMgY2FsbGVkLCBhbmQgdGhlbiB0aGVyZSYjMzk7cyBhIGNoZWNrIGZvciBhIGJsb2NrZWQgYGF0aDEya19xbWlfaHdfZ3JvdXBfZmluZF9ibG9ja2VkKGFnKWAuIElmIHRoZXJlIGlzIGEgYmxvY2tlZCBncm91cCwgdGhlbiBpdCB0cmlnZ2VycyB0aGUgY2FsbCB0byBgYXRoMTJrX3FtaV90cmlnZ2VyX2hvc3RfY2FwKGJsb2NrX2FiKWAuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNwZWNpZmljYWxseSB0cmlnZ2VyaW5nIGBBVEgxMktfUU1JX0VWRU5UX0hPU1RfQ0FQYCwgd2hpY2ggdGhlbiBraWNrcyBvZmYgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIGRpZyBpbnRvIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIG5vdyBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyODQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyODQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMjg1Olx0XHRcdGdvdG8gb3V0O1xuMjI4NjpcdFxuMjI4NzpcdFx0aWYgKGFiLVx1MDAzZXFtaS5keW5hbWljX2Rkcl9zdXBwb3J0KSB7XG4yMjg4Olx0XHRcdHJlcS5keW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkID0gMTtcbjIyODk6XHRcdFx0cmVxLmR5bmFtaWNfbWVtX3N1cHBvcnQgPSAxO1xuMjI5MDpcdFx0fVxuMjI5MTpcdFxuMjI5MjpcdFx0cmV0ID0gcW1pX3R4bl9pbml0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIFx1MDAyNnR4bixcbjIyOTM6XHRcdFx0XHQgICBxbWlfd2xhbmZ3X2hvc3RfY2FwX3Jlc3BfbXNnX3YwMV9laSwgXHUwMDI2cmVzcCk7XG4yMjk0Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMjI5NTpcdFx0XHRnb3RvIG91dDtcbjIyOTY6XHRcbjIyOTc6XHRcdHJldCA9IHFtaV9zZW5kX3JlcXVlc3QoXHUwMDI2YWItXHUwMDNlcW1pLmhhbmRsZSwgTlVMTCwgXHUwMDI2dHhuLFxuMjI5ODpcdFx0XHRcdCAgICAgICBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9WMDEsXG4yMjk5Olx0XHRcdFx0ICAgICAgIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTixcbjIzMDA6XHRcdFx0XHQgICAgICAgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMV9laSwgXHUwMDI2cmVxKTtcbjIzMDE6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbjIzMDI6XHRcdFx0cW1pX3R4bl9jYW5jZWwoXHUwMDI2dHhuKTtcbjIzMDM6XHRcdFx0YXRoMTJrX3dhcm4oYWIsIFwmIzM0O0ZhaWxlZCB0byBzZW5kIGhvc3QgY2FwYWJpbGl0eSByZXF1ZXN0LGVyciA9ICVkXFxuXCYjMzQ7LCByZXQpO1xuMjMwNDpcdFx0XHRnb3RvIG91dDtcbjIzMDU6XHRcdH1cbjIzMDY6XHRcbjIzMDc6XHRcdHJldCA9IHFtaV90eG5fd2FpdChcdTAwMjZ0eG4sIG1zZWNzX3RvX2ppZmZpZXMoQVRIMTJLX1FNSV9XTEFORldfVElNRU9VVF9NUykpO1xuMjMwODpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIzMDk6XHRcdFx0Z290byBvdXQ7XG4yMzEwOlx0XG4yMzExOlx0XHRpZiAocmVzcC5yZXNwLnJlc3VsdCAhPSBRTUlfUkVTVUxUX1NVQ0NFU1NfVjAxKSB7XG4yMzEyOlx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtIb3N0IGNhcGFiaWxpdHkgcmVxdWVzdCBmYWlsZWQsIHJlc3VsdDogJWQsIGVycjogJWRcXG5cJiMzNDssXG4yMzEzOlx0XHRcdFx0ICAgIHJlc3AucmVzcC5yZXN1bHQsIHJlc3AucmVzcC5lcnJvcik7XG4yMzE0Olx0XHRcdHJldCA9IC1FSU5WQUw7XG4yMzE1Olx0XHRcdGdvdG8gb3V0O1xuMjMxNjpcdFx0fVxuMjMxNzpcdFxuMjMxODpcdG91dDpcbjIzMTk6XHRcdHJldHVybiByZXQ7XG4yMzIwOlx0fVxuMjMyMTpcdFxuMjMyMjpcdHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4yMzIzOlx0e1xuMjMyNDpcdFx0c3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXFfbXNnX3YwMSByZXEgPSB7fTtcbjIzMjU6XHRcdHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxIHJlc3AgPSB7fTtcbjIzMjY6XHRcdHN0cnVjdCBxbWlfdHhuIHR4bjtcbjIzMjc6XHRcdGludCByZXQ7XG4yMzI4Olx0XG4yMzI5Olx0XHRyZXQgPSBxbWlfdHhuX2luaXQoXHUwMDI2YWItXHUwMDNlcW1pLmhhbmRsZSwgXHUwMDI2dHhuLFxuMjMzMDpcdFx0XHRcdCAgIHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDFfZWksIFx1MDAyNnJlc3ApO1xuMjMzMTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjIzMzI6XHRcdFx0Z290byBvdXQ7XG4yMzMzOlx0XG4yMzM0Olx0XHRyZXQgPSBxbWlfc2VuZF9yZXF1ZXN0KFx1MDAyNmFiLVx1MDAzZXFtaS5oYW5kbGUsIE5VTEwsIFx1MDAyNnR4bixcbjIzMzU6XHRcdFx0XHQgICAgICAgUU1JX1dMQU5GV19QSFlfQ0FQX1JFUV9WMDEsXG4yMzM2Olx0XHRcdFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfTVNHX1YwMV9NQVhfTEVOLFxuMjMzNzpcdFx0XHRcdCAgICAgICBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVxX21zZ192MDFfZWksIFx1MDAyNnJlcSk7XG4yMzM4Olx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4yMzM5Olx0XHRcdHFtaV90eG5fY2FuY2VsKFx1MDAyNnR4bik7XG4yMzQwOlx0XHRcdGF0aDEya193YXJuKGFiLCBcJiMzNDtmYWlsZWQgdG8gc2VuZCBwaHkgY2FwYWJpbGl0eSByZXF1ZXN0OiAlZFxcblwmIzM0OywgcmV0KTtcbjIzNDE6XHRcdFx0Z290byBvdXQ7XG4yMzQyOlx0XHR9XG4yMzQzOlx0XG4yMzQ0Olx0XHRyZXQgPSBxbWlfdHhuX3dhaXQoXHUwMDI2dHhuLCBtc2Vjc190b19qaWZmaWVzKEFUSDEyS19RTUlfV0xBTkZXX1RJTUVPVVRfTVMpKTtcbjIzNDU6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4yMzQ2Olx0XHRcdGdvdG8gb3V0O1xuMjM0NzpcdFxuMjM0ODpcdFx0aWYgKHJlc3AucmVzcC5yZXN1bHQgIT0gUU1JX1JFU1VMVF9TVUNDRVNTX1YwMSkge1xuMjM0OTpcdFx0XHRyZXQgPSAtRU9QTk9UU1VQUDtcbjIzNTA6XHRcdFx0Z290byBvdXQ7XG4yMzUxOlx0XHR9XG4yMzUyOlx0XG4yMzUzOlx0XHRpZiAocmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydF92YWxpZCBcdTAwMjZcdTAwMjYgcmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydClcbjIzNTQ6XHRcdFx0YWItXHUwMDNlc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgPSB0cnVlO1xuMjM1NTpcdFxuMjM1NjpcdFx0aWYgKCFyZXNwLm51bV9waHlfdmFsaWQpIHtcbjIzNTc6XHRcdFx0cmV0ID0gLUVOT0RBVEE7XG4yMzU4Olx0XHRcdGdvdG8gb3V0O1xuMjM1OTpcdFx0fVxuMjM2MDpcdFxuMjM2MTpcdFx0YWItXHUwMDNlcW1pLm51bV9yYWRpb3MgPSByZXNwLm51bV9waHk7XG4yMzYyOlx0XG4yMzYzOlx0XHRpZiAocmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKVxuMjM2NDpcdFx0XHRhYi1cdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydCA9IHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydDtcbjIzNjU6XHRcbjIzNjY6XHRcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUU1JLFxuMjM2NzpcdFx0XHQgICBcJiMzNDtwaHkgY2FwYWJpbGl0eSByZXNwIHZhbGlkICVkIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0ICVkIHZhbGlkICVkIG51bV9waHkgJWQgdmFsaWQgJWQgYm9hcmRfaWQgJWQgZHluYW1pY19kZHJfdmFsaWQgJXUgZHluYW1pY19kZHJfc3VwcG9ydCAldVxcblwmIzM0OyxcbjIzNjg6XHRcdFx0ICAgcmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydF92YWxpZCwgcmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCxcbjIzNjk6XHRcdFx0ICAgcmVzcC5udW1fcGh5X3ZhbGlkLCByZXNwLm51bV9waHksIHJlc3AuYm9hcmRfaWRfdmFsaWQsIHJlc3AuYm9hcmRfaWQsXG4yMzcwOlx0XHRcdCAgIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCwgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0KTtcbjIzNzE6XHRcbjIzNzI6XHRcdHJldHVybjtcbjIzNzM6XHRcbjIzNzQ6XHRvdXQ6XG4yMzc1Olx0XHQvKiBJZiBQSFkgY2FwYWJpbGl0eSBub3QgYWR2ZXJ0aXNlZCB0aGVuIHJlbHkgb24gZGVmYXVsdCBudW0gbGluayAqL1xuMjM3NjpcdFx0YWItXHUwMDNlcW1pLm51bV9yYWRpb3MgPSBhYi1cdTAwM2Vod19wYXJhbXMtXHUwMDNlZGVmX251bV9saW5rO1xuMjM3NzpcdFxuMjM3ODpcdFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19RTUksXG4yMzc5Olx0XHRcdCAgIFwmIzM0O25vIHZhbGlkIHJlc3BvbnNlIGZyb20gUEhZIGNhcGFiaWxpdHksIGNob29zZSBkZWZhdWx0IG51bV9waHkgJWRcXG5cJiMzNDssXG4yMzgwOlx0XHRcdCAgIGFiLVx1MDAzZXFtaS5udW1fcmFkaW9zKTtcbjIzODE6XHR9XG4yMzgyOlx0XG4yMzgzOlx0c3RhdGljIGludCBhdGgxMmtfcW1pX2Z3X2luZF9yZWdpc3Rlcl9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMjY3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGluIGEgU3l6a2FsbGVyIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgZnVuY3Rpb24sIGFuZCBpdCBzZWVtcyB0aGUgY29kZSBwYXRoIHdoZXJlIGl0IHNlbmRzIGEgcmVxdWVzdCB3aXRoIGBkeW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkID0gMWAgYW5kIGBkeW5hbWljX21lbV9zdXBwb3J0ID0gMWAgaXMgZGlyZWN0bHkgdGllZCB0byB0aGUgc2V0dGluZyBvZiBgYWItJmd0O3FtaS5keW5hbWljX2Rkcl9zdXBwb3J0YC4gVGhhdCYjMzk7cyB0aGF0IHBhdGNoJiMzOTtzIGRvaW5nLCBzbyB0aGF0IHBhcnQgaXMgY2xlYXIuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCAqY2FuKiB3ZSBoaXQgdGhpcyBjb2RlIHdpdGggc3l6a2FsbGVyPyBUaGUgY3J1Y2lhbCBmYWN0b3IgaXMgd2hldGhlciBzeXprYWxsZXIgY2FuIGVtdWxhdGUgYSBRTUkgc2VydmVyIHRocm91Z2ggaXRzIElQQyByb3V0ZXIuIElmIGl0IGNhbiwgd2UmIzM5O3JlIGluIGJ1c2luZXNzLiBNeSBtZW1vcnkgdGVsbHMgbWUgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHN1cHBvcnQgZm9yIEFGX1FJUENSVFIgc29ja2V0cyDigJMgaXQgY2FuIGJpbmQgdG8gdGhlbSwgYWR2ZXJ0aXNlIHNlcnZpY2VzLCBhbmQgaGFuZGxlIGJvdGggaW5jb21pbmcgYW5kIG91dGdvaW5nIG1lc3NhZ2VzLiBTbywgYmFzZWQgb24gdGhhdCwgdGhlIGFuc3dlciBpcyAqbGlrZWx5KiB5ZXMsIHdlIGNhbiBlbXVsYXRlIHRoaXMuCgpIb3dldmVyLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIGBhdGgxMmtgLiBJdCB3b3VsZG4mIzM5O3QgZG8gdG8gYXNzdW1lLiBEb2VzIGBhdGgxMmtgIHJlcXVpcmUgYENPTkZJR19BVEgxMktgPyBZZXMsIG9mIGNvdXJzZS4gQW5kIGBDT05GSUdfUVJUUmA/IEkgYmVsaWV2ZSBzbywgYW5kIHllcywgaXQgbG9va3MgbGlrZSBgYXRoMTJrYCBkZXBlbmRzIG9uIGBRUlRSYC4gT2theSwgZ29vZC4gSeKAmWxsIG1ha2UgYSBub3RlIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZXMgZm9yIGBhdGgxMmtgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBkZXBlbmRlbmN5IGRldGFpbHMuIFRoaXMgbG9va3MgcHJvbWlzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQVRIMTJLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6Mjpjb25maWcgQVRIMTJLXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1F1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0xNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzoxNzpjb25maWcgQVRIMTJLX0FIQlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgQUhCIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMjQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjU6Y29uZmlnIEFUSDEyS19ERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTI2LVx0Ym9vbCBcJiMzNDthdGgxMmsgZGVidWdnaW5nXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjM1OmNvbmZpZyBBVEgxMktfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjQ0OmNvbmZpZyBBVEgxMktfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ1LVx0Ym9vbCBcJiMzNDthdGgxMmsgdHJhY2luZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTUyLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjUzOmNvbmZpZyBBVEgxMktfQ09SRURVTVBcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy01NC1cdGJvb2wgXCYjMzQ7YXRoMTJrIGNvcmVkdW1wXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MzYzCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW4ga2VybmVsIGRldmVsb3BtZW50IG9yIGVtYmVkZGVkIHN5c3RlbXM6CgoqKkluaXRpYWwgS2NvbmZpZyBSZXZpZXcqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHRoZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgb3B0aW9ucyBhdmFpbGFibGUgZm9yIHRoaXMgcGFydGljdWxhciBtb2R1bGUgb3Igc3Vic3lzdGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBrZXkgdmFyaWFibGVzLCB0aGUgYm9vbGVhbiwgdHJpc3RhdGUsIGFuZCBpbnRlZ2VyIG9wdGlvbnMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gSXQmIzM5O3MgYWJvdXQgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHRoZSBwb3NzaWJsZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gYW50aWNpcGF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHNlbGVjdGluZyBzcGVjaWZpYyBmZWF0dXJlcywgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB0aGUgcmVzdWx0aW5nIGtlcm5lbCBpbWFnZSBzaXplLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRoaXMgb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UtQ2xlYXJcbiAgIDI6XHRjb25maWcgQVRIMTJLXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtRdWFsY29tbSBXaS1GaSA3IHN1cHBvcnQgKGF0aDEyaylcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gTUFDODAyMTEgXHUwMDI2XHUwMDI2IEhBU19ETUEgXHUwMDI2XHUwMDI2IFBDSVxuICAgNTpcdFx0c2VsZWN0IFFDT01fUU1JX0hFTFBFUlNcbiAgIDY6XHRcdHNlbGVjdCBNSElfQlVTXG4gICA3Olx0XHRzZWxlY3QgUVJUUlxuICAgODpcdFx0c2VsZWN0IFFSVFJfTUhJXG4gICA5Olx0XHRzZWxlY3QgUENJX1BXUkNUUkxfUFdSU0VRIGlmIEhBVkVfUFdSQ1RSTFxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgUXVhbGNvbW0gVGVjaG5vbG9naWVzIFdpLUZpIDcgKElFRUVcbiAgMTI6XHRcdCAgODAyLjExYmUpIGZhbWlseSBvZiBjaGlwc2V0cywgZm9yIGV4YW1wbGUgV0NONzg1MCBhbmRcbiAgMTM6XHRcdCAgUUNOOTI3NC5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQmIzM5O2xsIGJlIGNhbGxlZCBhdGgxMmsuXG4gIDE2Olx0XG4gIDE3Olx0Y29uZmlnIEFUSDEyS19BSEJcbiAgMTg6XHRcdGJvb2wgXCYjMzQ7UXVhbGNvbW0gYXRoMTJrIEFIQiBzdXBwb3J0XCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIEFUSDEySyBcdTAwMjZcdTAwMjYgUkVNT1RFUFJPQ1xuICAyMDpcdFx0c2VsZWN0IFFDT01fTURUX0xPQURFUlxuICAyMTpcdFx0c2VsZWN0IFFDT01fU0NNXG4gIDIyOlx0XHRoZWxwXG4gIDIzOlx0XHQgIEVuYWJsZSBzdXBwb3J0IGZvciBBdGgxMmsgQUhCIGJ1cyBjaGlwc2V0cywgZXhhbXBsZSBJUFE1MzMyLlxuICAyNDpcdFxuICAyNTpcdGNvbmZpZyBBVEgxMktfREVCVUdcbiAgMjY6XHRcdGJvb2wgXCYjMzQ7YXRoMTJrIGRlYnVnZ2luZ1wmIzM0O1xuICAyNzpcdFx0ZGVwZW5kcyBvbiBBVEgxMktcbiAgMjg6XHRcdGhlbHBcbiAgMjk6XHRcdCAgRW5hYmxlIGRlYnVnIHN1cHBvcnQsIGZvciBleGFtcGxlIGRlYnVnIG1lc3NhZ2VzIHdoaWNoIG11c3RcbiAgMzA6XHRcdCAgYmUgZW5hYmxlZCBzZXBhcmF0ZWx5IHVzaW5nIHRoZSBkZWJ1Z19tYXNrIG1vZHVsZSBwYXJhbWV0ZXIuXG4gIDMxOlx0XG4gIDMyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxuICAzMzpcdFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxuICAzNDpcdFxuICAzNTpcdGNvbmZpZyBBVEgxMktfREVCVUdGU1xuICAzNjpcdFx0Ym9vbCBcJiMzNDtRdWFsY29tbSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4gIDM3Olx0XHRkZXBlbmRzIG9uIEFUSDEySyBcdTAwMjZcdTAwMjYgTUFDODAyMTFfREVCVUdGU1xuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBFbmFibGUgYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFxuICA0MDpcdFxuICA0MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnIHByb2JsZW1zLiBCdXQgaWZcbiAgNDI6XHRcdCAgeW91IHdhbnQgb3B0aW1hbCBwZXJmb3JtYW5jZSBjaG9vc2UgTi5cbiAgNDM6XHRcbiAgNDQ6XHRjb25maWcgQVRIMTJLX1RSQUNJTkdcbiAgNDU6XHRcdGJvb2wgXCYjMzQ7YXRoMTJrIHRyYWNpbmcgc3VwcG9ydFwmIzM0O1xuICA0NjpcdFx0ZGVwZW5kcyBvbiBBVEgxMksgXHUwMDI2XHUwMDI2IEVWRU5UX1RSQUNJTkdcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgRW5hYmxlIGF0aDEyayB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxuICA0OTpcdFxuICA1MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBZIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnIHByb2JsZW1zLiBCdXQgaWZcbiAgNTE6XHRcdCAgeW91IHdhbnQgb3B0aW1hbCBwZXJmb3JtYW5jZSBjaG9vc2UgTi5cbiAgNTI6XHRcbiAgNTM6XHRjb25maWcgQVRIMTJLX0NPUkVEVU1QXG4gIDU0Olx0XHRib29sIFwmIzM0O2F0aDEyayBjb3JlZHVtcFwmIzM0O1xuICA1NTpcdFx0ZGVwZW5kcyBvbiBBVEgxMktcbiAgNTY6XHRcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxuICA1NzpcdFx0aGVscFxuICA1ODpcdFx0ICBFbmFibGUgYXRoMTJrIGNvcmVkdW1wIGNvbGxlY3Rpb25cbiAgNTk6XHRcbiAgNjA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXG4gIDYxOlx0XHQgIGR1bXAgY29sbGVjdGlvbiBub3QgcmVxdWlyZWQgY2hvb3NlIE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA5OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NDI1CgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDExMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIEFUSDEySyBRTUkgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGBBVEgxMktgIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gd2UgbmVlZCB0byBlbmFibGUgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZS4gSXQgZGVwZW5kcyBvbiBgTUFDODAyMTFgLCBgSEFTX0RNQWAsIGFuZCBgUENJYCwgd2hpY2ggYXJlIHN0YW5kYXJkIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBraW5kIG9mIHdpcmVsZXNzIGRyaXZlci4gTW9yZSBpbXBvcnRhbnRseSwgaXQgc2VsZWN0cyBhIHNldCBvZiBjcnVjaWFsIHN1YnN5c3RlbXMsIG5hbWVseSBgUUNPTV9RTUlfSEVMUEVSU2AsIGBNSElfQlVTYCwgYFFSVFJgLCBhbmQgYFFSVFJfTUhJYC4gVGhlc2UgYXJlIGFsbCBwb2ludGVycyBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLgoKVGhlIGtleSBoZXJlIGlzIHRoYXQgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZS4gQnkgYWRkaW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlLCB3ZSBjYW4gdHJpZ2dlciBgYXRoMTJrX3BjaV9wcm9iZWAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoZW4gZW11bGF0ZSB0aGUgUU1JIHNlcnZlciB1c2luZyBgQUZfUUlQQ1JUUmAgc29ja2V0cy4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBiaXQuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgdHdvIHNwZWNpZmljIGZ1bmN0aW9uczogYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAuIFRoZXNlIGFyZSB0aGUgb25lcyB3aGVyZSB0aGUgbmV3IGZpZWxkcyByZWxhdGVkIHRvIGR5bmFtaWMgRERSIGFuZCBtZW1vcnkgc3VwcG9ydCBhcmUgYmVpbmcgdXNlZC4gVGhleSYjMzk7cmUgc2VuZGluZyBRTUkgcmVxdWVzdHMgYW5kIHdhaXRpbmcgZm9yIHRoZSBmaXJtd2FyZSYjMzk7cyByZXNwb25zZXMuIFNpbmNlIHRoZSBwYXRjaCBhZGRzIG5ldyBgZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZGAsIGBkeW5hbWljX21lbV9zdXBwb3J0YCwgYGR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWRgLCBhbmQgYGR5bmFtaWNfZGRyX3N1cHBvcnRgIGZpZWxkcyB0byB0aGUgUU1JIG1lc3NhZ2VzLCB0aGUgcGF0Y2ggaXMgaW5kZWVkIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSB1bmRlciB0aGUgcmlnaHQgY29uZGl0aW9ucy4gVGhhdCYjMzk7cyBleGNlbGxlbnQsIGl0IGlzIHdvcnRoIGZ1enppbmcuCgpUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHBhdGNoIGRpZmYsIGFuZCBJIGNhbiBjb25maXJtIHRoYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgdGhlIG9uZXMgYmVpbmcgY2FsbGVkIGluIGBxbWkuY2AsIGFuZCB0aGUgUU1JIGZyYW1ld29yayBpbmRlZWQgdXNlcyB0aGUgcGF0Y2hlZCBhcnJheXMgd2hlbiBgcW1pX3NlbmRfcmVxdWVzdGAgYW5kIGBxbWlfdHhuX3dhaXRgIGFyZSBjYWxsZWQuCgpTcGVjaWZpY2FsbHksIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGlzICpub3QqIHN0YXRpYywgc28gaXQmIzM5O3MgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgYW5kIHRoZSBvdGhlciBvbmUgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBpcyBzdGF0aWMgd2hpY2ggaXMgYWxzbyBmaW5lLiBUaGF0IGlzIHBlcmZlY3QuCgpTbywgdGhlIHJlYXNvbmluZyBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkeW5hbWljIEREUiBhbmQgbWVtb3J5IGluIHRoZSBhdGgxMmsgZHJpdmVyJiMzOTtzIFFNSSBjb21tdW5pY2F0aW9uLiBJdCBtb2RpZmllcyB0aGUgUU1JIG1lc3NhZ2UgZW5jb2RpbmcvZGVjb2RpbmcgYXJyYXlzIGFuZCBmdW5jdGlvbnMgdG8gc2V0IGFuZCByZWFkIHRoZXNlIG5ldyBmaWVsZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyB0aGUgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHdoZW4gYSBRTUkgc2VydmVyIGFycml2ZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGlzIGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgYW5kIHRoZSBRTUkgZmlybXdhcmUgc2VydmljZS4KClRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBpcyBgQVRIMTJLYC4gV2hpbGUgYFFSVFJgIGFuZCBgUUNPTV9RTUlfSEVMUEVSU2AgYXJlIHNlbGVjdGVkIGJ5IGBBVEgxMktgIGFuZCB3ZSBkb24mIzM5O3Qgc3RyaWN0bHkgbmVlZCB0byBsaXN0IHRoZW0sIGJ1dCBpdCBkb2VzbiYjMzk7dCBodXJ0LiBCdXQsIGVuYWJsaW5nIGBBVEgxMktgIHNob3VsZCBiZSBlbm91Z2guCgpUaGlzIGxvb2tzIGxpa2UgYSBzb2xpZCBmaW5kaW5nLiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwOToyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRIMTJLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kJiMzNDssCiAgICAmIzM0O2F0aDEya19xbWlfcGh5X2NhcF9zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHluYW1pYyBERFIgYW5kIG1lbW9yeSBzdXBwb3J0IGluIHRoZSBhdGgxMmsgZHJpdmVyJiMzOTtzIFFNSSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZpcm13YXJlLiBJdCBtb2RpZmllcyB0aGUgUU1JIG1lc3NhZ2UgZW5jb2RpbmcvZGVjb2RpbmcgYXJyYXlzIGFuZCB0aGUgZnVuY3Rpb25zIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGFuZCBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIHRvIHNldCBhbmQgcmVhZCB0aGVzZSBuZXcgZmllbGRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiB3aGVuIGEgUU1JIHNlcnZlciAoZmlybXdhcmUpIGFycml2ZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGlzIGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdG8gcHJvYmUgdGhlIGF0aDEyayBkcml2ZXIgYW5kIGVtdWxhdGluZyB0aGUgUU1JIGZpcm13YXJlIHNlcnZpY2UgdmlhIEFGX1FJUENSVFIgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QVRIMTJLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kJiMzNDssCiAgICAmIzM0O2F0aDEya19xbWlfcGh5X2NhcF9zZW5kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHluYW1pYyBERFIgYW5kIG1lbW9yeSBzdXBwb3J0IGluIHRoZSBhdGgxMmsgZHJpdmVyJiMzOTtzIFFNSSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGZpcm13YXJlLiBJdCBtb2RpZmllcyB0aGUgUU1JIG1lc3NhZ2UgZW5jb2RpbmcvZGVjb2RpbmcgYXJyYXlzIGFuZCB0aGUgZnVuY3Rpb25zIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGFuZCBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIHRvIHNldCBhbmQgcmVhZCB0aGVzZSBuZXcgZmllbGRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiB3aGVuIGEgUU1JIHNlcnZlciAoZmlybXdhcmUpIGFycml2ZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGlzIGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdG8gcHJvYmUgdGhlIGF0aDEyayBkcml2ZXIgYW5kIGVtdWxhdGluZyB0aGUgUU1JIGZpcm13YXJlIHNlcnZpY2UgdmlhIEFGX1FJUENSVFIgc29ja2V0cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjEzLjg1MjIxMjcyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTYzMDQ4NjIyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBVEgxMktcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRcIixcbiAgICBcImF0aDEya19xbWlfcGh5X2NhcF9zZW5kXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkeW5hbWljIEREUiBhbmQgbWVtb3J5IHN1cHBvcnQgaW4gdGhlIGF0aDEyayBkcml2ZXIncyBRTUkgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBmaXJtd2FyZS4gSXQgbW9kaWZpZXMgdGhlIFFNSSBtZXNzYWdlIGVuY29kaW5nL2RlY29kaW5nIGFycmF5cyBhbmQgdGhlIGZ1bmN0aW9ucyBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBhbmQgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCB0byBzZXQgYW5kIHJlYWQgdGhlc2UgbmV3IGZpZWxkcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZHVyaW5nIHRoZSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiB3aGVuIGEgUU1JIHNlcnZlciAoZmlybXdhcmUpIGFycml2ZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGlzIGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgdG8gcHJvYmUgdGhlIGF0aDEyayBkcml2ZXIgYW5kIGVtdWxhdGluZyB0aGUgUU1JIGZpcm13YXJlIHNlcnZpY2UgdmlhIEFGX1FJUENSVFIgc29ja2V0cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MTMuODUyMjE5MzA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTc4NjM4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZTcyYjRmNWZiODY5NGE4Nzk1ZGM3YjcwZjdkNzY0MDU4MDIwZjhiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDA5OjE2OjEyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXFxuaW5kZXggZmQ3NjJiNWQ3YmI1OTcuLmUxNWEwYzAxMjBkM2E4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXFxuQEAgLTUwNiw2ICs1MDYsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfZWxlbV9pbmZvIHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDFfZWlbXSA9IHtcXG4gXFx0XFx0Lm9mZnNldFxcdFxcdD0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGZlYXR1cmVfbGlzdCksXFxuIFxcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmRhdGFfdHlwZVxcdD0gUU1JX09QVF9GTEFHLFxcbitcXHRcXHQuZWxlbV9sZW5cXHQ9IDEsXFxuK1xcdFxcdC5lbGVtX3NpemVcXHQ9IHNpemVvZih1OCksXFxuK1xcdFxcdC5hcnJheV90eXBlXFx0PSBOT19BUlJBWSxcXG4rXFx0XFx0LnRsdl90eXBlXFx0PSAweDMzLFxcbitcXHRcXHQub2Zmc2V0XFx0XFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCksXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0LmRhdGFfdHlwZVxcdD0gUU1JX1VOU0lHTkVEXzFfQllURSxcXG4rXFx0XFx0LmVsZW1fbGVuXFx0PSAxLFxcbitcXHRcXHQuZWxlbV9zaXplXFx0PSBzaXplb2YodTgpLFxcbitcXHRcXHQuYXJyYXlfdHlwZVxcdD0gTk9fQVJSQVksXFxuK1xcdFxcdC50bHZfdHlwZVxcdD0gMHgzMyxcXG4rXFx0XFx0Lm9mZnNldFxcdFxcdD0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDEsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIGR5bmFtaWNfbWVtX3N1cHBvcnQpLFxcbitcXHR9LFxcbiBcXHR7XFxuIFxcdFxcdC5kYXRhX3R5cGVcXHQ9IFFNSV9FT1RJLFxcbiBcXHRcXHQuYXJyYXlfdHlwZVxcdD0gTk9fQVJSQVksXFxuQEAgLTYwMiw2ICs2MjAsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfZWxlbV9pbmZvIHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDFfZWlbXSA9IHtcXG4gXFx0XFx0Lm9mZnNldCAgICAgICAgID0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0KSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuZGF0YV90eXBlXFx0PSBRTUlfT1BUX0ZMQUcsXFxuK1xcdFxcdC5lbGVtX2xlblxcdD0gMSxcXG4rXFx0XFx0LmVsZW1fc2l6ZVxcdD0gc2l6ZW9mKHU4KSxcXG4rXFx0XFx0LmFycmF5X3R5cGVcXHQ9IE5PX0FSUkFZLFxcbitcXHRcXHQudGx2X3R5cGVcXHQ9IDB4MTcsXFxuK1xcdFxcdC5vZmZzZXRcXHRcXHQ9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxLFxcbitcXHRcXHRcXHRcXHRcXHQgICBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKSxcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHQuZGF0YV90eXBlXFx0PSBRTUlfVU5TSUdORURfMV9CWVRFLFxcbitcXHRcXHQuZWxlbV9sZW5cXHQ9IDEsXFxuK1xcdFxcdC5lbGVtX3NpemVcXHQ9IHNpemVvZih1OCksXFxuK1xcdFxcdC5hcnJheV90eXBlXFx0PSBOT19BUlJBWSxcXG4rXFx0XFx0LnRsdl90eXBlXFx0PSAweDE3LFxcbitcXHRcXHQub2Zmc2V0XFx0XFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZHluYW1pY19kZHJfc3VwcG9ydCksXFxuK1xcdH0sXFxuIFxcdHtcXG4gXFx0XFx0LmRhdGFfdHlwZVxcdD0gUU1JX0VPVEksXFxuIFxcdFxcdC5hcnJheV90eXBlXFx0PSBOT19BUlJBWSxcXG5AQCAtMjI0OCw2ICsyMjg0LDExIEBAIGludCBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0aWYgKGFiLVxcdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydCkge1xcbitcXHRcXHRyZXEuZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCA9IDE7XFxuK1xcdFxcdHJlcS5keW5hbWljX21lbV9zdXBwb3J0ID0gMTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0ID0gcW1pX3R4bl9pbml0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSwgXFx1MDAyNnR4bixcXG4gXFx0XFx0XFx0ICAgcW1pX3dsYW5md19ob3N0X2NhcF9yZXNwX21zZ192MDFfZWksIFxcdTAwMjZyZXNwKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuQEAgLTIzMTksMTEgKzIzNjAsMTQgQEAgc3RhdGljIHZvaWQgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4gXFxuIFxcdGFiLVxcdTAwM2VxbWkubnVtX3JhZGlvcyA9IHJlc3AubnVtX3BoeTtcXG4gXFxuK1xcdGlmIChyZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWQpXFxuK1xcdFxcdGFiLVxcdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydCA9IHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydDtcXG4rXFxuIFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUU1JLFxcbi1cXHRcXHQgICBcXFwicGh5IGNhcGFiaWxpdHkgcmVzcCB2YWxpZCAlZCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCAlZCB2YWxpZCAlZCBudW1fcGh5ICVkIHZhbGlkICVkIGJvYXJkX2lkICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICBcXFwicGh5IGNhcGFiaWxpdHkgcmVzcCB2YWxpZCAlZCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCAlZCB2YWxpZCAlZCBudW1fcGh5ICVkIHZhbGlkICVkIGJvYXJkX2lkICVkIGR5bmFtaWNfZGRyX3ZhbGlkICV1IGR5bmFtaWNfZGRyX3N1cHBvcnQgJXVcXFxcblxcXCIsXFxuIFxcdFxcdCAgIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQsIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQsXFxuLVxcdFxcdCAgIHJlc3AubnVtX3BoeV92YWxpZCwgcmVzcC5udW1fcGh5LFxcbi1cXHRcXHQgICByZXNwLmJvYXJkX2lkX3ZhbGlkLCByZXNwLmJvYXJkX2lkKTtcXG4rXFx0XFx0ICAgcmVzcC5udW1fcGh5X3ZhbGlkLCByZXNwLm51bV9waHksIHJlc3AuYm9hcmRfaWRfdmFsaWQsIHJlc3AuYm9hcmRfaWQsXFxuK1xcdFxcdCAgIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCwgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0KTtcXG4gXFxuIFxcdHJldHVybjtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oXFxuaW5kZXggMmE2M2UyMTRlYjQyYzUuLjliZGIyOTBlMmNjZTkwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oXFxuQEAgLTE1Niw5ICsxNTYsMTAgQEAgc3RydWN0IGF0aDEya19xbWkge1xcbiBcXHRzdHJ1Y3QgbTNfbWVtX3JlZ2lvbiBhdXhfdWNfbWVtO1xcbiBcXHR1bnNpZ25lZCBpbnQgc2VydmljZV9pbnNfaWQ7XFxuIFxcdHN0cnVjdCBkZXZfbWVtX2luZm8gZGV2X21lbVtBVEgxMktfUU1JX1dMRldfTUFYX0RFVl9NRU1fTlVNX1YwMV07XFxuK1xcdHU4IGR5bmFtaWNfZGRyX3N1cHBvcnQ7XFxuIH07XFxuIFxcbi0jZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTlxcdFxcdDI2MVxcbisjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTlxcdFxcdDI2NVxcbiAjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX1YwMVxcdFxcdFxcdDB4MDAzNFxcbiAjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVTUF9NU0dfVjAxX01BWF9MRU5cXHQ3XFxuICNkZWZpbmUgUU1JX1dMRldfSE9TVF9DQVBfUkVTUF9WMDFcXHRcXHRcXHQweDAwMzRcXG5AQCAtMjU4LDcgKzI1OSw4IEBAIHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxIHtcXG4gXFx0c3RydWN0IHdsZndfaG9zdF9tbG9fY2hpcF9pbmZvX3NfdjAxIG1sb19jaGlwX2luZm9bUU1JX1dMRldfTUFYX05VTV9NTE9fQ0hJUFNfVjAxXTtcXG4gXFx0dTggZmVhdHVyZV9saXN0X3ZhbGlkO1xcbiBcXHR1NjQgZmVhdHVyZV9saXN0O1xcbi1cXG4rXFx0dTggZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZDtcXG4rXFx0dTggZHluYW1pY19tZW1fc3VwcG9ydDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3Jlc3BfbXNnX3YwMSB7XFxuQEAgLTI4MSw2ICsyODMsOCBAQCBzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSB7XFxuIFxcdHUzMiBib2FyZF9pZDtcXG4gXFx0dTggc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQ7XFxuIFxcdHU4IHNpbmdsZV9jaGlwX21sb19zdXBwb3J0O1xcbitcXHR1OCBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkO1xcbitcXHR1OCBkeW5hbWljX2Rkcl9zdXBwb3J0O1xcbiB9O1xcbiBcXG4gI2RlZmluZSBRTUlfV0xBTkZXX0lORF9SRUdJU1RFUl9SRVFfTVNHX1YwMV9NQVhfTEVOXFx0XFx0NTRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MTQuNDcxMzc3ODQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzkwMTEzMDQ1NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kXCIsXG4gICAgXCJhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHluYW1pYyBERFIgYW5kIG1lbW9yeSBzdXBwb3J0IGluIHRoZSBhdGgxMmsgZHJpdmVyJ3MgUU1JIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUuIEl0IG1vZGlmaWVzIHRoZSBRTUkgbWVzc2FnZSBlbmNvZGluZy9kZWNvZGluZyBhcnJheXMgYW5kIHRoZSBmdW5jdGlvbnMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgdG8gc2V0IGFuZCByZWFkIHRoZXNlIG5ldyBmaWVsZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gd2hlbiBhIFFNSSBzZXJ2ZXIgKGZpcm13YXJlKSBhcnJpdmVzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhpcyBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRvIHByb2JlIHRoZSBhdGgxMmsgZHJpdmVyIGFuZCBlbXVsYXRpbmcgdGhlIFFNSSBmaXJtd2FyZSBzZXJ2aWNlIHZpYSBBRl9RSVBDUlRSIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgY2U3MmI0ZjVmYjg2OTRhODc5NWRjN2I3MGY3ZDc2NDA1ODAyMGY4YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDA5OjE2OjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbmluZGV4IGZkNzYyYjVkN2JiNTk3Li5lMTVhMGMwMTIwZDNhOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcbkBAIC01MDYsNiArNTA2LDI0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX2VsZW1faW5mbyBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxX2VpW10gPSB7XG4gXHRcdC5vZmZzZXRcdFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMSxcbiBcdFx0XHRcdFx0ICAgZmVhdHVyZV9saXN0KSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5kYXRhX3R5cGVcdD0gUU1JX09QVF9GTEFHLFxuK1x0XHQuZWxlbV9sZW5cdD0gMSxcbitcdFx0LmVsZW1fc2l6ZVx0PSBzaXplb2YodTgpLFxuK1x0XHQuYXJyYXlfdHlwZVx0PSBOT19BUlJBWSxcbitcdFx0LnRsdl90eXBlXHQ9IDB4MzMsXG4rXHRcdC5vZmZzZXRcdFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMSxcbitcdFx0XHRcdFx0ICAgZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCksXG4rXHR9LFxuK1x0e1xuK1x0XHQuZGF0YV90eXBlXHQ9IFFNSV9VTlNJR05FRF8xX0JZVEUsXG4rXHRcdC5lbGVtX2xlblx0PSAxLFxuK1x0XHQuZWxlbV9zaXplXHQ9IHNpemVvZih1OCksXG4rXHRcdC5hcnJheV90eXBlXHQ9IE5PX0FSUkFZLFxuK1x0XHQudGx2X3R5cGVcdD0gMHgzMyxcbitcdFx0Lm9mZnNldFx0XHQ9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3JlcV9tc2dfdjAxLFxuK1x0XHRcdFx0XHQgICBkeW5hbWljX21lbV9zdXBwb3J0KSxcbitcdH0sXG4gXHR7XG4gXHRcdC5kYXRhX3R5cGVcdD0gUU1JX0VPVEksXG4gXHRcdC5hcnJheV90eXBlXHQ9IE5PX0FSUkFZLFxuQEAgLTYwMiw2ICs2MjAsMjQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfZWxlbV9pbmZvIHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDFfZWlbXSA9IHtcbiBcdFx0Lm9mZnNldCAgICAgICAgID0gb2Zmc2V0b2Yoc3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEsXG4gXHRcdFx0XHRcdCAgIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0KSxcbiBcdH0sXG4rXHR7XG4rXHRcdC5kYXRhX3R5cGVcdD0gUU1JX09QVF9GTEFHLFxuK1x0XHQuZWxlbV9sZW5cdD0gMSxcbitcdFx0LmVsZW1fc2l6ZVx0PSBzaXplb2YodTgpLFxuK1x0XHQuYXJyYXlfdHlwZVx0PSBOT19BUlJBWSxcbitcdFx0LnRsdl90eXBlXHQ9IDB4MTcsXG4rXHRcdC5vZmZzZXRcdFx0PSBvZmZzZXRvZihzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3Jlc3BfbXNnX3YwMSxcbitcdFx0XHRcdFx0ICAgZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCksXG4rXHR9LFxuK1x0e1xuK1x0XHQuZGF0YV90eXBlXHQ9IFFNSV9VTlNJR05FRF8xX0JZVEUsXG4rXHRcdC5lbGVtX2xlblx0PSAxLFxuK1x0XHQuZWxlbV9zaXplXHQ9IHNpemVvZih1OCksXG4rXHRcdC5hcnJheV90eXBlXHQ9IE5PX0FSUkFZLFxuK1x0XHQudGx2X3R5cGVcdD0gMHgxNyxcbitcdFx0Lm9mZnNldFx0XHQ9IG9mZnNldG9mKHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxLFxuK1x0XHRcdFx0XHQgICBkeW5hbWljX2Rkcl9zdXBwb3J0KSxcbitcdH0sXG4gXHR7XG4gXHRcdC5kYXRhX3R5cGVcdD0gUU1JX0VPVEksXG4gXHRcdC5hcnJheV90eXBlXHQ9IE5PX0FSUkFZLFxuQEAgLTIyNDgsNiArMjI4NCwxMSBAQCBpbnQgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXHRpZiAocmV0IFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGlmIChhYi1cdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydCkge1xuK1x0XHRyZXEuZHluYW1pY19tZW1fc3VwcG9ydF92YWxpZCA9IDE7XG4rXHRcdHJlcS5keW5hbWljX21lbV9zdXBwb3J0ID0gMTtcbitcdH1cbitcbiBcdHJldCA9IHFtaV90eG5faW5pdChcdTAwMjZhYi1cdTAwM2VxbWkuaGFuZGxlLCBcdTAwMjZ0eG4sXG4gXHRcdFx0ICAgcW1pX3dsYW5md19ob3N0X2NhcF9yZXNwX21zZ192MDFfZWksIFx1MDAyNnJlc3ApO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbkBAIC0yMzE5LDExICsyMzYwLDE0IEBAIHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXG4gXG4gXHRhYi1cdTAwM2VxbWkubnVtX3JhZGlvcyA9IHJlc3AubnVtX3BoeTtcbiBcbitcdGlmIChyZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnRfdmFsaWQpXG4rXHRcdGFiLVx1MDAzZXFtaS5keW5hbWljX2Rkcl9zdXBwb3J0ID0gcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0O1xuK1xuIFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19RTUksXG4tXHRcdCAgIFwicGh5IGNhcGFiaWxpdHkgcmVzcCB2YWxpZCAlZCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCAlZCB2YWxpZCAlZCBudW1fcGh5ICVkIHZhbGlkICVkIGJvYXJkX2lkICVkXFxuXCIsXG4rXHRcdCAgIFwicGh5IGNhcGFiaWxpdHkgcmVzcCB2YWxpZCAlZCBzaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCAlZCB2YWxpZCAlZCBudW1fcGh5ICVkIHZhbGlkICVkIGJvYXJkX2lkICVkIGR5bmFtaWNfZGRyX3ZhbGlkICV1IGR5bmFtaWNfZGRyX3N1cHBvcnQgJXVcXG5cIixcbiBcdFx0ICAgcmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydF92YWxpZCwgcmVzcC5zaW5nbGVfY2hpcF9tbG9fc3VwcG9ydCxcbi1cdFx0ICAgcmVzcC5udW1fcGh5X3ZhbGlkLCByZXNwLm51bV9waHksXG4tXHRcdCAgIHJlc3AuYm9hcmRfaWRfdmFsaWQsIHJlc3AuYm9hcmRfaWQpO1xuK1x0XHQgICByZXNwLm51bV9waHlfdmFsaWQsIHJlc3AubnVtX3BoeSwgcmVzcC5ib2FyZF9pZF92YWxpZCwgcmVzcC5ib2FyZF9pZCxcbitcdFx0ICAgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkLCByZXNwLmR5bmFtaWNfZGRyX3N1cHBvcnQpO1xuIFxuIFx0cmV0dXJuO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oXG5pbmRleCAyYTYzZTIxNGViNDJjNS4uOWJkYjI5MGUyY2NlOTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oXG5AQCAtMTU2LDkgKzE1NiwxMCBAQCBzdHJ1Y3QgYXRoMTJrX3FtaSB7XG4gXHRzdHJ1Y3QgbTNfbWVtX3JlZ2lvbiBhdXhfdWNfbWVtO1xuIFx0dW5zaWduZWQgaW50IHNlcnZpY2VfaW5zX2lkO1xuIFx0c3RydWN0IGRldl9tZW1faW5mbyBkZXZfbWVtW0FUSDEyS19RTUlfV0xGV19NQVhfREVWX01FTV9OVU1fVjAxXTtcbitcdHU4IGR5bmFtaWNfZGRyX3N1cHBvcnQ7XG4gfTtcbiBcbi0jZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTlx0XHQyNjFcbisjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX01TR19WMDFfTUFYX0xFTlx0XHQyNjVcbiAjZGVmaW5lIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX1YwMVx0XHRcdDB4MDAzNFxuICNkZWZpbmUgUU1JX1dMQU5GV19IT1NUX0NBUF9SRVNQX01TR19WMDFfTUFYX0xFTlx0N1xuICNkZWZpbmUgUU1JX1dMRldfSE9TVF9DQVBfUkVTUF9WMDFcdFx0XHQweDAwMzRcbkBAIC0yNTgsNyArMjU5LDggQEAgc3RydWN0IHFtaV93bGFuZndfaG9zdF9jYXBfcmVxX21zZ192MDEge1xuIFx0c3RydWN0IHdsZndfaG9zdF9tbG9fY2hpcF9pbmZvX3NfdjAxIG1sb19jaGlwX2luZm9bUU1JX1dMRldfTUFYX05VTV9NTE9fQ0hJUFNfVjAxXTtcbiBcdHU4IGZlYXR1cmVfbGlzdF92YWxpZDtcbiBcdHU2NCBmZWF0dXJlX2xpc3Q7XG4tXG4rXHR1OCBkeW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkO1xuK1x0dTggZHluYW1pY19tZW1fc3VwcG9ydDtcbiB9O1xuIFxuIHN0cnVjdCBxbWlfd2xhbmZ3X2hvc3RfY2FwX3Jlc3BfbXNnX3YwMSB7XG5AQCAtMjgxLDYgKzI4Myw4IEBAIHN0cnVjdCBxbWlfd2xhbmZ3X3BoeV9jYXBfcmVzcF9tc2dfdjAxIHtcbiBcdHUzMiBib2FyZF9pZDtcbiBcdHU4IHNpbmdsZV9jaGlwX21sb19zdXBwb3J0X3ZhbGlkO1xuIFx0dTggc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQ7XG4rXHR1OCBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkO1xuK1x0dTggZHluYW1pY19kZHJfc3VwcG9ydDtcbiB9O1xuIFxuICNkZWZpbmUgUU1JX1dMQU5GV19JTkRfUkVHSVNURVJfUkVRX01TR19WMDFfTUFYX0xFTlx0XHQ1NFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MTQuNDcxMzc5NzY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg0NjU1OTQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBBdGgxMmsgUU1JIFBhdGNoIGluIFZpcnR1YWxpemVkIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCBhZGRzIGBkeW5hbWljX2Rkcl9zdXBwb3J0YCBhbmQgYGR5bmFtaWNfbWVtX3N1cHBvcnRgIHRvIHRoZSBRTUkgbWVzc2FnZXMgaW4gYGF0aDEya2AuIFRoaXMgaXMgZm9yIFF1YWxjb21tJ3MgV2ktRmkgNyBkZXZpY2VzLCBhbmQgaXQgbW9kaWZpZXMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBob3cgcmVhY2hhYmxlIGlzIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgYGF0aDEya2AgZHJpdmVyIHVzdWFsbHkgZGVwZW5kcyBvbiBzcGVjaWZpYyBoYXJkd2FyZSwgbGlrZSBQQ0llIG9yIEFIQiBkZXZpY2VzLlxuXG5NeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBpZiBgbWFjODAyMTFfaHdzaW1gIGNvdmVycyB0aGlzLCBidXQgbm8sIHRoYXQncyBhIG1hYzgwMjExICpzaW11bGF0b3IqLCBub3QgYSBmdWxsIGBhdGgxMmtgIGhhcmR3YXJlIG1vZGVsLiBTbywgY2FuIHdlIGZ1enogdGhpcyB2aWEgYSB2aXJ0dWFsIGJ1cyBvciBkaXJlY3RseSB0aHJvdWdoIFFNST8gV2UncmUgdGFsa2luZyBhYm91dCBRTUksIHRoZSBRdWFsY29tbSBNU00gSW50ZXJmYWNlLCB3aGljaCB0eXBpY2FsbHkgdXNlcyBJUEMgcm91dGVyIChBRl9RSVBDUlRSKSBvciBzaW1pbGFyLiBJbiB0aGUgYGF0aDEya2AgY29udGV4dCwgdGhpcyBpcyBob3cgd2UgdGFsayB0byB0aGUgZmlybXdhcmUgKm9uKiB0aGUgV2ktRmkgY2hpcC5cblxuVGhlIG5leHQgcXVlc3Rpb24gaXMsIGNhbiB3ZSBldmVuIHByb2JlIGBhdGgxMmtgIHdpdGhvdXQgdGhlIGhhcmR3YXJlIHByZXNlbnQ/IFBDSSBkcml2ZXJzIG9mdGVuIHJlcXVpcmUgYSB2aXJ0dWFsIFBDSSBkZXZpY2UuIFN5emthbGxlciAqY2FuKiBkbyBQQ0kgZnV6emluZywgbWF5YmUgd2l0aCBgdmhjaWAgb3Igc2ltaWxhciwgb3IgcG90ZW50aWFsbHkgd2l0aCB0aG9zZSBgc3l6X3BjaV8uLi5gIHBzZXVkby1zeXNjYWxscyBidXQgaXRzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcyBhcmUgbGltaXRlZCB3aXRob3V0IGEgbW9jay11cC4gQnV0IHNpbmNlIHRoaXMgaXMgUU1JLCBhbmQgUU1JIG1lc3NhZ2VzIGFyZSAqc2VudCogdG8gdGhlIGZpcm13YXJlLCB3aGljaCBpc24ndCB0aGVyZSB3aXRob3V0IHRoZSBoYXJkd2FyZSwgdGhvc2UgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgZnVuY3Rpb25zIG1pZ2h0IG5vdCBiZSBldmVuIGJlIHJlYWNoYWJsZS4gSSBzaG91bGQgY2hlY2sgdGhlIGBhdGgxMmtgIGluaXRpYWxpemF0aW9uIHBhdGggYW5kIHNlZSBob3cgdGhlIGRyaXZlciBzdGFydHMgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NjAsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjoyMy4zMTc5NDExNTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI2NDcwMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19xbWlfaG9zdF9jYXBfc2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jPTIyMzU9c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFja1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6MjIzNjppbnQgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0yMjM3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9Mzk5ND1zdGF0aWMgaW50IGF0aDEya19xbWlfZXZlbnRfaG9zdF9jYXAoc3RydWN0IGF0aDEya19xbWkgKnFtaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk5OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5OTk6XFx0cmV0ID0gYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kKGFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwMDAtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MjMuOTQ0NDY5MDA5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkyMjUxNjU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCB0aGUgY29udGV4dCBvZiBzb21lb25lIGV4cGVyaWVuY2VkIGluIHRoZWlyIGZpZWxkOlxuXG4qKkRlY29kaW5nIFRoaXMgRnVuY3Rpb24gQ2FsbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYGF0aDEya19xbWlfZXZlbnRfaG9zdF9jYXBgLiBUaGF0IGZ1bmN0aW9uIG5hbWUncyByaW5naW5nIGEgYmVsbCDigJMgaXQncyBkZWZpbml0ZWx5IHRpZWQgdG8gdGhlIEF0aGVyb3MgKG9yIGF0IGxlYXN0LCB0aGUgb2xkZXIgYXRoMTJrKSB3aXJlbGVzcyBkcml2ZXIgYW5kLCBzcGVjaWZpY2FsbHksIFFNSSBldmVudHMuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgSSdkIGJldCB0aGlzIGZ1bmN0aW9uJ3Mgam9iIGlzIHRvIGhhbmRsZSBvciBpbnRlcnByZXQgc29tZSBraW5kIG9mIGNhcGFiaWxpdHkgaW5mb3JtYXRpb24gYmVpbmcgcmVwb3J0ZWQgYmFjayBmcm9tIHRoZSBRTUkgc2lkZSBvZiB0aGluZ3MuXG5cblRoZSBjcml0aWNhbCBwaWVjZSBoZXJlLCBiYXNlZCBvbiBteSBleHBlcmllbmNlLCBpcyB0aGF0IEkga25vdyB0aGlzIGlzIG1vc3QgbGlrZWx5IGNhbGxlZCB3aXRoaW4gYSB3b3JrcXVldWUgY29udGV4dC4gYHFtaV9ldmVudGAgaXMgYSBkZWFkIGdpdmVhd2F5LiBUaGF0IG1lYW5zIHdoYXRldmVyIGBhdGgxMmtfcW1pX2V2ZW50X2hvc3RfY2FwYCBpcyBkb2luZyBoYXMgYmVlbiAqcXVldWVkKiB0byBydW4gbGF0ZXIuIFRoaXMgaXMga2V5IGJlY2F1c2UgaXQgbWVhbnMgd2UgbmVlZCB0byBjb25zaWRlciB0aGluZ3MgbGlrZSBsb2NraW5nIGFuZCBjb25jdXJyZW5jeSB2ZXJ5IGNhcmVmdWxseS4gV2UncmUgcHJvYmFibHkgZGVhbGluZyB3aXRoIGFzeW5jaHJvbm91cyBldmVudCBwcm9jZXNzaW5nLCBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgaGFyZHdhcmUuIFVuZGVyc3RhbmRpbmcgdGhlIHdvcmtxdWV1ZSdzIGNoYXJhY3RlcmlzdGljcyBpcyBhYnNvbHV0ZWx5IHZpdGFsIGZvciBkZWJ1Z2dpbmcgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gQW55IG5vbi1hdG9taWMgb3BlcmF0aW9ucyBpbiB0aGlzIGNvbnRleHQgYXJlIHNvbWV0aGluZyB0byBzY3J1dGluaXplIGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODcsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjoyNy44NjY5ODgxMzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MTEwNzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19xbWlfZXZlbnRfaG9zdF9jYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zOTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX29wcyBhdGgxMmtfcW1pX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk5My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5OTQ6c3RhdGljIGludCBhdGgxMmtfcW1pX2V2ZW50X2hvc3RfY2FwKHN0cnVjdCBhdGgxMmtfcW1pICpxbWkpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTk1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9NDAwOT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDA2NS1cXHRcXHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfSE9TVF9DQVA6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzo0MDY2OlxcdFxcdFxcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfaG9zdF9jYXAocW1pKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTQwNjctXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjI4LjA4MzEwNDU5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTQ0NzY3NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIFNwZWNpZmljIEZ1bmN0aW9uIENhbGwqKlxuXG5TbywgdGhlIHF1ZXN0aW9uIHRoYXQncyBwaXF1ZWQgbXkgaW50ZXJlc3QgcmlnaHQgbm93IGlzLCBcIldoYXQgYWJvdXQgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYD9cIiBJIHNlZSB0aGF0IGZ1bmN0aW9uIGNhbGwgYW5kIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBicm9hZGVyIGNvbnRleHQuIFdoYXQncyBpdCBkb2luZz8gSXMgaXQgYSBrZXkgcGFydCBvZiB0aGUgUU1JIChRdWFsY29tbSBNU00gSW50ZXJmYWNlKSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGF0aDEyayBkcml2ZXIsIHBhcnRpY3VsYXJseSBpbiByZWxhdGlvbiB0byBQSFkgY2FwYWJpbGl0aWVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBmcmFtZXdvcmsuIElzIGl0IHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIFBIWSBjYXBhYmlsaXR5IGluZm9ybWF0aW9uIHRvIHRoZSBtb2RlbT8gSWYgc28sIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCdzIHRoZSBwcm90b2NvbD8gSXMgdGhpcyBhIGNyaXRpY2FsIHBpZWNlIGZvciBuZWdvdGlhdGlvbiwgc2V0dXAsIG9yIGp1c3QgcmVwb3J0aW5nP1xuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgaWYgdGhpcyBmdW5jdGlvbiBoYXMgaXNzdWVzLiBEb2VzIGEgcHJvYmxlbSBoZXJlIGxlYWQgdG8gY29ubmVjdGlvbiBwcm9ibGVtcywgdGhyb3VnaHB1dCBsaW1pdGF0aW9ucywgb3IgZXZlbiBkZXZpY2UgaW5zdGFiaWxpdHk/IEFyZSB0aGVyZSBzcGVjaWZpYyBlcnJvciBjb2RlcyBvciByZXR1cm4gdmFsdWVzIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGluIGFueSBkZWJ1Z2dpbmcgbG9ncz8gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGlzIGZ1bmN0aW9uIGNhbGwgdG8gc2VlIHdoZXJlIGl0J3MgYmVpbmcgaW52b2tlZCwgYW5kIHdoYXQgY29uZGl0aW9ucyB0cmlnZ2VyIGl0LiBEaWdnaW5nIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgd2lsbCBsaWtlbHkgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1OSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjMxLjczNzU4NDI5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTcwNzkyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0yMjM2PWludCBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMjMyMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjIzMjI6c3RhdGljIHZvaWQgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTIzMjMte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zNzU4PWludCBhdGgxMmtfcW1pX2V2ZW50X3NlcnZlcl9hcnJpdmUoc3RydWN0IGF0aDEya19xbWkgKnFtaSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzc2My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM3NjQ6XFx0YXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzc2NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MzEuOTk0NjY4OTgzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MjM5OTU4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBhdGgxMmsgUU1JIFNlcnZlciBBcnJpdmFsKipcblxuT2theSwgc28gYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgZ2V0cyB0cmlnZ2VyZWQgd2hlbiB0aGUgUU1JIHNlcnZlciBzaG93cyB1cC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2UuIEJ1dCB0aGUgaW1wb3J0YW50IHRoaW5nIGlzLCB0aGlzIHdob2xlIHByb2Nlc3MgaGluZ2VzIG9uIHRoZSBgYXRoMTJrYCBkcml2ZXIgYmVpbmcgcHJvcGVybHkgcHJvYmVkIGZpcnN0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIGlzOiBjYW4gSSBhY3R1YWxseSBwcm9iZSBgYXRoMTJrYCB3aXRob3V0IGhhdmluZyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgcHJlc2VudD8gVGhhdCB3b3VsZCBiZSBpbmNyZWRpYmx5IHVzZWZ1bCBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQsIHdpdGhvdXQgYmVpbmcgdGllZCB0byBzcGVjaWZpYyBoYXJkd2FyZS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSB0byBmaW5kIG91dC4gTGV0J3Mgc2VlLi4uIEknbGwgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuY2AsIHRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludC4gQW5kIG9mIGNvdXJzZSwgYG1hYy5jYCBhbmQgb3RoZXIgcmVsZXZhbnQgZmlsZXMgaW4gdGhhdCBkaXJlY3RvcnkgYXJlIGFsc28gbGlrZWx5IHRvIGhvbGQgc29tZSBjbHVlcy4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgd2hhdCB0aGUgcHJvYmluZyByZXF1aXJlbWVudHMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MzUuNTc3MDcyMDE5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI1NjE3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93aWZpNy9jb3JlLmM9NTU9c3RhdGljIHZvaWQgYXRoMTJrX3dpZmk3X2V4aXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jLTYzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvY29yZS5jOjY0Om1vZHVsZV9pbml0KGF0aDEya193aWZpN19pbml0KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dpZmk3L2NvcmUuYy02NS1tb2R1bGVfZXhpdChhdGgxMmtfd2lmaTdfZXhpdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjM2LjE2OTY0MjE0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjUwMDkwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBhdGgxMmtgIE1vZHVsZSoqXG5cbk9rYXksIHNvIGBhdGgxMmtgIGlzIGEgbW9kdWxlLCByaWdodD8gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gdW5kZXJzdGFuZCBpdHMgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBrbm93IHdoYXQgYnVzZXMgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRvIHByb3Blcmx5IGRpYWdub3NlIGFueSBpc3N1ZXMgb3Igb3B0aW1pemUgaXRzIHBlcmZvcm1hbmNlLiBMZXQncyBzZWUuLi4gd2hhdCBidXNlcyBpcyB0aGlzIG1vZHVsZSBhY3R1YWxseSB1c2luZz8gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGltbWVkaWF0ZWx5IHRlbGwgbWUgYSBsb3QgYWJvdXQgdGhlIHN5c3RlbSdzIGludGVncmF0aW9uIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFRoaXMgaXMgdGhlIGZpcnN0IHF1ZXN0aW9uIHRoYXQgbmVlZHMgYW5zd2VyaW5nLiBLbm93aW5nIGhvdyBpdCdzIGNvbm5lY3RlZCBoZWxwcyBpbiBkZXRlcm1pbmluZyB0aGUgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY3MSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjM4LjgxOTc0Nzg3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NDQyNTc3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGNpX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6MzguOTg1MjI1NjQ5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1MzM5NTQzNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBBcmNoaXRlY3R1cmUqKlxuXG5BbHJpZ2h0LCBnaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgc3RyYWlnaHQgaW50byBlaXRoZXIgYHBjaS5jYCBvciBgYWhiLmNgLiBUaGUgcHJvYmxlbSBsaWtlbHkgcmV2b2x2ZXMgYXJvdW5kIHBlcmlwaGVyYWwgY29tbXVuaWNhdGlvbi4gVGhpcyBwb2ludHMgbWUgZGlyZWN0bHkgdG8gdGhvc2UgZmlsZXMuIEVpdGhlciB0aGUgUENJIGJ1cyBpcyBpbnZvbHZlZCwgb3IgaXQncyBjb25uZWN0ZWQgdG8gdGhlIEFIQiBidXMuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIHdoaWNoZXZlciBsb29rcyBsaWtlIHRoZSBtb3JlIGxpa2VseSBzdXNwZWN0IGJhc2VkIG9uIHRoZSBjdXJyZW50IHNpdHVhdGlvbiDigJMgbWF5YmUgSSByZW1lbWJlciBzb21ldGhpbmcgc3BlY2lmaWMgYWJvdXQgdGhlIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEknbGwgcXVpY2tseSBlbGltaW5hdGUgb25lIG9yIHRoZSBvdGhlci4gVGhpcyBpcyBhYm91dCBlZmZpY2llbnRseSBwaW5wb2ludGluZyB0aGUgZW50cnkgcG9pbnQgZm9yIGludmVzdGlnYXRpb24uIE5vIG5lZWQgdG8gd2FzdGUgdGltZTsgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4NzYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjo0MS41MTkxODI4NzdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjgxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJhY3BpLmNcIixcbiAgICBcImFjcGkuaFwiLFxuICAgIFwiYWhiLmNcIixcbiAgICBcImFoYi5oXCIsXG4gICAgXCJjZS5jXCIsXG4gICAgXCJjZS5oXCIsXG4gICAgXCJjbW5fZGVmcy5oXCIsXG4gICAgXCJjb3JlLmNcIixcbiAgICBcImNvcmUuaFwiLFxuICAgIFwiY29yZWR1bXAuY1wiLFxuICAgIFwiY29yZWR1bXAuaFwiLFxuICAgIFwiZGJyaW5nLmNcIixcbiAgICBcImRicmluZy5oXCIsXG4gICAgXCJkZWJ1Zy5jXCIsXG4gICAgXCJkZWJ1Zy5oXCIsXG4gICAgXCJkZWJ1Z2ZzLmNcIixcbiAgICBcImRlYnVnZnMuaFwiLFxuICAgIFwiZGVidWdmc19odHRfc3RhdHMuY1wiLFxuICAgIFwiZGVidWdmc19odHRfc3RhdHMuaFwiLFxuICAgIFwiZGVidWdmc19zdGEuY1wiLFxuICAgIFwiZGVidWdmc19zdGEuaFwiLFxuICAgIFwiZHAuY1wiLFxuICAgIFwiZHAuaFwiLFxuICAgIFwiZHBfY21uLmhcIixcbiAgICBcImRwX2h0dC5jXCIsXG4gICAgXCJkcF9odHQuaFwiLFxuICAgIFwiZHBfbW9uLmNcIixcbiAgICBcImRwX21vbi5oXCIsXG4gICAgXCJkcF9wZWVyLmNcIixcbiAgICBcImRwX3BlZXIuaFwiLFxuICAgIFwiZHBfcnguY1wiLFxuICAgIFwiZHBfcnguaFwiLFxuICAgIFwiZHBfdHguY1wiLFxuICAgIFwiZHBfdHguaFwiLFxuICAgIFwiZncuY1wiLFxuICAgIFwiZncuaFwiLFxuICAgIFwiaGFsLmNcIixcbiAgICBcImhhbC5oXCIsXG4gICAgXCJoaWYuaFwiLFxuICAgIFwiaHRjLmNcIixcbiAgICBcImh0Yy5oXCIsXG4gICAgXCJody5oXCIsXG4gICAgXCJtYWMuY1wiLFxuICAgIFwibWFjLmhcIixcbiAgICBcIm1oaS5jXCIsXG4gICAgXCJtaGkuaFwiLFxuICAgIFwicDJwLmNcIixcbiAgICBcInAycC5oXCIsXG4gICAgXCJwY2kuY1wiLFxuICAgIFwicGNpLmhcIixcbiAgICBcInBlZXIuY1wiLFxuICAgIFwicGVlci5oXCIsXG4gICAgXCJxbWkuY1wiLFxuICAgIFwicW1pLmhcIixcbiAgICBcInJlZy5jXCIsXG4gICAgXCJyZWcuaFwiLFxuICAgIFwidGVzdG1vZGUuY1wiLFxuICAgIFwidGVzdG1vZGUuaFwiLFxuICAgIFwidGhlcm1hbC5jXCIsXG4gICAgXCJ0aGVybWFsLmhcIixcbiAgICBcInRyYWNlLmNcIixcbiAgICBcInRyYWNlLmhcIixcbiAgICBcIndtaS5jXCIsXG4gICAgXCJ3bWkuaFwiLFxuICAgIFwid293LmNcIixcbiAgICBcIndvdy5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcIndpZmk3XCJcbiAgXVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6NDEuNTE5MzUzNDI3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzE2NzQxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQQ0kgRHJpdmVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgUENJIGRyaXZlciBnZXRzIGluaXRpYWxpemVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgY29yZSBQQ0kgZHJpdmVyIGNvZGUsIHByb2JhYmx5IGBwY2kuY2AuIEkgbmVlZCB0byBsb29rIGZvciB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gaG9va3MuIEknbSB0aGlua2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgYG1vZHVsZV9pbml0YCwgb3IgYW55dGhpbmcgc2ltaWxhciB0aGF0IGhhbmRsZXMgZHJpdmVyIHJlZ2lzdHJhdGlvbiBhbmQgc2V0dXAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBhbmQgaXQnbGwgZ2l2ZSBtZSBhIHJvYWRtYXAgb2YgaG93IHRoZSBkcml2ZXIgaXMgYnJvdWdodCB0byBsaWZlIHdpdGhpbiB0aGUga2VybmVsJ3MgUENJIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3MiwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjo0NC44OTEwMzA3MTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTA5MjQ4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdHxtb2R1bGVfcGNpX2RyaXZlcnxwY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNzk3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBfX21heWJlX3VudXNlZCBhdGgxMmtfcGNpX3BtX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgwMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MDQ6aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgwNS1cXHRcXHRcXHQgICAgICAgc3RydWN0IGF0aDEya19wY2lfZHJpdmVyICpkcml2ZXIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODMxOlxcdHJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKHBjaV9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgzMi19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODMzOkVYUE9SVF9TWU1CT0woYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6NDUuMTAyMTMxMDMzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTM2NTA4MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcmAgRnVuY3Rpb24qKlxuXG5SaWdodCwgYGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyYCBpcyBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmssIFwiSW50ZXJlc3RpbmcuIExldCdzIHNlZSB3aG8ncyBhY3R1YWxseSBtYWtpbmcgdXNlIG9mIHRoaXMuXCIgVGhlIGZhY3QgdGhhdCBpdCdzIGV4cG9ydGVkIGltcGxpZXMgaXQncyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUgaXQncyBkZWZpbmVkIGluLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nIHRocm91Z2ggdGhlIGNhbGwgc2l0ZXMgdG8gdW5kZXJzdGFuZCB0aGUgbW9kdWxlJ3MgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0uIEknbSBhc3N1bWluZyBpdCdzIGhhbmRsaW5nIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIFBDSSBkcml2ZXIgaXRzZWxmLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGUgZHJpdmVyIHJlZ2lzdHJhdGlvbiwgYXJlIHdlIGRlYWxpbmcgd2l0aCBhIHNwZWNpZmljIGRldmljZSBJRCwgYXJlIHRoZXJlIGFueSBxdWlya3MgaW4gcGxheT9cblxuXG4iLCJJbnB1dFRva2VucyI6ODA5MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE2OjQ3Ljk5NTc4NDY1M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1MjY0NjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTc5Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgX19tYXliZV91bnVzZWQgYXRoMTJrX3BjaV9wbV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxODA0OmludCBhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcihjb25zdCBlbnVtIGF0aDEya19kZXZpY2VfZmFtaWx5IGRldmljZV9pZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE4MDUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODMyLX1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MzM6RVhQT1JUX1NZTUJPTChhdGgxMmtfcGNpX3JlZ2lzdGVyX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODM0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzY9dm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5oOjE3NzppbnQgYXRoMTJrX3BjaV9yZWdpc3Rlcl9kcml2ZXIoY29uc3QgZW51bSBhdGgxMmtfZGV2aWNlX2ZhbWlseSBkZXZpY2VfaWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBhdGgxMmtfcGNpX2RyaXZlciAqZHJpdmVyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM9MTk3PWludCBhdGgxMmtfd2lmaTdfcGNpX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmM6MjAxOlxcdHJldCA9IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKEFUSDEyS19ERVZJQ0VfRkFNSUxZX1dJRkk3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd2lmaTcvcGNpLmMtMjAyLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2YXRoMTJrX3dpZmk3X3BjaV9kcml2ZXIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjo0OC4xNzEwNjA5NTlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI4Njc4NzMzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZ1enppbmcgUG90ZW50aWFsIG9mIHRoZSBgYXRoMTJrYCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgYXRoMTJrYCBpcyBhIFBDSSBkcml2ZXIsIGFuZCBhbHNvIGFuIEFIQiBkcml2ZXIsIHJpZ2h0PyBNeSBpbml0aWFsIHRob3VnaHQgaXM6IENhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCBQQ0kgZGV2aWNlcz8gSSBrbm93IGl0IGhhcyBzb21lIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcywgdGhpbmdzIGxpa2UgYHN5el9wY2lfLi4uYCBwc2V1ZG8tc3lzY2FsbHMgYW5kIHRoZSBgdmhjaWAgaW50ZXJmYWNlIGlmIGl0J3MgVVNCLCBidXQgZm9yIFBDSSBzcGVjaWZpY2FsbHksIHRoZXJlJ3MgYHN5el9wY2lfZGV2aWNlX2FkZGAgYW5kIHN1Y2guIEhvd2V2ZXIsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHNlZW1zIFFNSSBtZXNzYWdlcyBhcmUgZ29pbmcgYmFjayBhbmQgZm9ydGggd2l0aCBmaXJtd2FyZS5cblxuVGhlIGJpZyBxdWVzdGlvbiBub3cgaXM6IERvZXMgc3l6a2FsbGVyIGRvIGFueXRoaW5nIHdpdGggUU1JIG1lc3NhZ2VzPyBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBzeXprYWxsZXIgaGFzIGFueSBRTUkgZnV6emluZyBjYXBhYmlsaXRpZXMuXG5cbkFoLCB3YWl0LiBUaGUgcHJvbXB0IHNwZWNpZmllcyB0aGlzOiBcIkNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlwiIE9rYXksIEknbSB0aGlua2luZywgaWYgdGhpcyAqZG9lcyogbW9kaWZ5IHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgbXkgdGFzayBpcyB0byB2ZXJpZnkgY29kZSBleGVjdXRpb24gdXNpbmcgbXkgcHJlZmVycmVkIGNvZGUgc2VhcmNoIHRvb2xzLCBhbmQgdGhlbiBkZWNpZGUgb24gV29ydGhGdXp6aW5nPXRydWUuXG5cbkhvbGQgb24sIGBhdGgxMmtgIGlzIGEgKmRyaXZlciogZm9yICpzcGVjaWZpYyogaGFyZHdhcmUuIERvZXMgc3l6a2FsbGVyIGFjdHVhbGx5IGZ1enogdGhlIGBhdGgxMmtgIGRyaXZlciBpdHNlbGY/IEkga25vdyBzeXprYWxsZXIgY2FuIGZ1enogUENJIGRldmljZXMsIGJhc2ljYWxseSBieSBlbXVsYXRpbmcgdGhlbSwgd2l0aCB0aGluZ3MgbGlrZSBgc3l6X3BjaV8uLi5gLCBidXQgdGhlIHRyaWNreSBwYXJ0IGlzIHRoYXQgYGF0aDEya2AgcmVxdWlyZXMgZmlybXdhcmUgdG8gYmUgbG9hZGVkIGFuZCwgdGhlbiBpdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgZmlybXdhcmUgdXNpbmcgUU1JLCB3aGljaCBpcyBub3QgYXMgc2ltcGxlIGFzIGZ1enppbmcgYSByZWd1bGFyIFBDSSBkZXZpY2UuXG5cbklmIHRoZSBmaXJtd2FyZSBpc24ndCB0aGVyZSwgdGhlIGRyaXZlciB3b24ndCBldmVuICpwcm9iZSogc3VjY2Vzc2Z1bGx5LiBTbywgSSBuZWVkIHRvIGNoZWNrIGhvdyB0aGUgcHJvYmUgd29ya3MsIHdoZXJlIGlzIHRoZSBpbml0aWFsIHBvaW50PyBPa2F5LCBsZXQncyBsb29rIGF0IGBhdGgxMmtfcGNpX3Byb2JlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODkxNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNjo1NS40NTc4NTA2NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3NTI2NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImF0aDEya19wY2lfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYz0xNTAzPWF0aDEya19nZXRfZGV2aWNlX2ZhbWlseShjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE1MjQ6c3RhdGljIGludCBhdGgxMmtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTUyNS1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE4MDQ9aW50IGF0aDEya19wY2lfcmVnaXN0ZXJfZHJpdmVyKGNvbnN0IGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xODI1LVxcdHBjaV9kcml2ZXItXFx1MDAzZWlkX3RhYmxlID0gZHJpdmVyLVxcdTAwM2VpZF90YWJsZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE4MjY6XFx0cGNpX2RyaXZlci1cXHUwMDNlcHJvYmUgPSBhdGgxMmtfcGNpX3Byb2JlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTgyNy1cXHRwY2lfZHJpdmVyLVxcdTAwM2VyZW1vdmUgPSBhdGgxMmtfcGNpX3JlbW92ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTY6NTUuNjY1MzgyNzk1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODY1ODg3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgYXRoMTJrX3BjaV9wcm9iZWA6XG5cbioqQW5hbHl6aW5nIGBhdGgxMmtfcGNpX3Byb2JlYCoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYGF0aDEya19wY2lfcHJvYmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVjYWxsIHdoYXQgdGhlIGJyb2FkZXIgY29udGV4dCBpcy4gUmlnaHQsIHRoaXMgaXMgdGhlIFBDSSBwcm9iZSBmdW5jdGlvbiBmb3IgdGhlIGF0aDEyayBkcml2ZXIuIFRoYXQgbWVhbnMgdGhpcyBpcyB3aGVyZSB0aGUgc3lzdGVtIHRyaWVzIHRvIGRldGVjdCBhbmQgaW5pdGlhbGl6ZSBhbiBhdGgxMmstYmFzZWQgV2ktRmkgZGV2aWNlIGNvbm5lY3RlZCB2aWEgUENJLiBUaGF0IGltbWVkaWF0ZWx5IGhpZ2hsaWdodHMgYSBmZXcga2V5IGFyZWFzIEkgbmVlZCB0byBmb2N1cyBvbjogZGV2aWNlIGRldGVjdGlvbiBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gV2UncmUgdGFsa2luZyBhYm91dCBhIGRyaXZlcidzIGluaXRpYWwgY29udGFjdCB3aXRoIHRoZSBoYXJkd2FyZS5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cy4gSSdtIGFzc3VtaW5nIGl0IHJlY2VpdmVzIGEgYHBjaV9kZXZgIHBvaW50ZXIuIE9rYXksIHNvIHRoYXQgc2hvdWxkIGNvbnRhaW4gdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlIGFuZCBhbGwgdGhlIGFzc29jaWF0ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmljIFBDSSBkZXZpY2UgYmVpbmcgcHJvYmVkLiBUaGVuIHRoZSBmdW5jdGlvbiBoYXMgdG8gYmVnaW4gYnkgY2hlY2tpbmcgdGhlIGRldmljZSBJRCBhZ2FpbnN0IGEgbGlzdCBvZiBzdXBwb3J0ZWQgZGV2aWNlcywgcHJvYmFibHkgaW4gYSBgcGNpX2RldmljZV9pZGAgdGFibGUuIEkgd2FudCB0byBjaGVjayBob3cgcm9idXN0IHRoYXQgSUQgY2hlY2sgaXMuIERvZXMgaXQgaGF2ZSBtdWx0aXBsZSBpZGVudGlmaWVycywgb3IganVzdCBvbmU/IFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIG1hdGNoaW5nIHByb2Nlc3MgaXMgY3JpdGljYWwgdG8gYXZvaWRpbmcgY29sbGlzaW9ucyB3aXRoIG90aGVyIGRyaXZlcnMuXG5cblRoZW4sIHRoZXJlIG11c3QgYmUgYSBzZXJpZXMgb2YgaW5pdGlhbGl6YXRpb24gc3RlcHMuIEknbSBsb29raW5nIGZvciBob3cgdGhlIGZ1bmN0aW9uOlxuXG4qICAgKipNYXBzIHRoZSBQQ0kgQkFScyAoQmFzZSBBZGRyZXNzIFJlZ2lzdGVycykuKiogVGhpcyBpcyBlc3NlbnRpYWwgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlJ3MgcmVnaXN0ZXJzIGluIG1lbW9yeSBzcGFjZS4gSSB3YW50IHRvIHBheSBhdHRlbnRpb24gdG8gaG93IHRoZXkgaGFuZGxlIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIHRoZSBtYXBwaW5nIHByb2Nlc3MuIERvZXMgaXQgdW5tYXAgdGhlbSBvbiBlcnJvcj8gSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBzcGVjaWFsIGhhbmRsaW5nIG9mIGRpZmZlcmVudCBCQVIgdHlwZXMgKGUuZy4sIG1lbW9yeSB2cy4gSU8pLiBBcmUgdGhlcmUgYW55IHF1aXJrcyBuZWVkZWQgZm9yIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmU/XG4qICAgKipSZXF1ZXN0cyBETUEgcmVzb3VyY2VzLioqIEFueSBtb2Rlcm4gd2lyZWxlc3MgZHJpdmVyIG5lZWRzIERNQS4gSSdkIG5lZWQgdG8gZXhhbWluZSBob3cgdGhlIG1lbW9yeSByZWdpb25zIGFyZSBzZXQgdXAgYW5kIGhvdyB0aGUgRE1BIGNvbmZpZ3VyYXRpb24gaXMgbWFuYWdlZC4gQXJlIHRoZXJlIGFueSBzcGVjaWZpYyBhbGlnbm1lbnQgY29uc3RyYWludHMgb3IgYnVmZmVyIHNpemUgbGltaXRhdGlvbnM/IEFueSBwb3RlbnRpYWwgZm9yIERNQSBidWZmZXIgb3ZlcmZsb3dzP1xuKiAgICoqR2V0cyB0aGUgcGxhdGZvcm0gZGF0YS4qKiBXaGF0IHN0cnVjdHVyZXMgYXJlIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZSBpbiBzb2Z0d2FyZSwgYW5kIGhvdyBpcyBpdCBwb3B1bGF0ZWQgKGxpa2UgdGhlIGFzc29jaWF0ZWQgZmlybXdhcmUgZmlsZSwgZm9yIGV4YW1wbGUpP1xuKiAgICoqUmVnaXN0ZXJzIHRoZSBkZXZpY2UuKiogRmluYWxseSwgaXQgbGlrZWx5IHJlZ2lzdGVycyB0aGUgbmV3bHkgZGlzY292ZXJlZCBXaS1GaSBkZXZpY2Ugd2l0aCB0aGUga2VybmVsJ3MgbmV0d29yayBzdGFjay4gSSB3YW50IHRvIHNlZSB3aGVyZSBpdCBob29rcyBpbnRvIHRoZSBjb3JlIG5ldHdvcmsgaW50ZXJmYWNlcy5cblxuQmV5b25kIHRoZSBiYXNpYyBwcm9iZSBzZXF1ZW5jZSwgSSdtIGV4cGVjdGluZyB0byBzZWUgZXJyb3IgaGFuZGxpbmcsIG9mIGNvdXJzZS4gSSdkIGxvb2sgZm9yIGhvdyB0aGUgZHJpdmVyIGdyYWNlZnVsbHkgaGFuZGxlcyBmYWlsdXJlcyBhdCB2YXJpb3VzIHN0YWdlcyDigJMgaW52YWxpZCBQQ0kgY29uZmlndXJhdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiBlcnJvcnMsIGZpcm13YXJlIGxvYWRpbmcgZmFpbHVyZXMsIGV0Yy4gSXQncyBhbHNvIHdvcnRoIGNoZWNraW5nIGhvdyBpdCBjbGVhbnMgdXAgcmVzb3VyY2VzIGlmIGFueSBzdGVwIGZhaWxzOyBlc3BlY2lhbGx5IGluIGEgcHJvYmUgZnVuY3Rpb24sIHlvdSB3YW50IHRvIGF2b2lkIG1lbW9yeSBsZWFrcyBvciBsZWF2aW5nIHRoZSBzeXN0ZW0gaW4gYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgc3RhdGUuXG5cbkkgYWxzbyB3YW50IHRvIGxvb2sgZm9yIHdoYXQgdGhpcyBmdW5jdGlvbiBsZWF2ZXMgdG8gb3RoZXIgZnVuY3Rpb25zIHRvIGluaXRpYWxpemUuIEl0IHdpbGwgcHJvYmFibHkgaGF2ZSB0byBsYXVuY2ggYSBmaXJtd2FyZSBkb3dubG9hZCBhbmQgaGFuZGxlIHRoZSBwb3dlciBvbiBzZXF1ZW5jZSBmb3IgdGhlIFdpLUZpIGNhcmQuIEkgaGF2ZSB0byBsb29rIGZvciBhbnkgY2x1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDc1LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6MDEuMTUxOTc0NDMyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NTg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MjQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNTI0OlxcdHN0YXRpYyBpbnQgYXRoMTJrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4xNTI1OlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldilcXG4xNTI2OlxcdHtcXG4xNTI3OlxcdFxcdGVudW0gYXRoMTJrX2RldmljZV9mYW1pbHkgZGV2aWNlX2lkO1xcbjE1Mjg6XFx0XFx0c3RydWN0IGF0aDEya19wY2kgKmFiX3BjaTtcXG4xNTI5OlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XFxuMTUzMDpcXHRcXHRpbnQgcmV0O1xcbjE1MzE6XFx0XFxuMTUzMjpcXHRcXHRhYiA9IGF0aDEya19jb3JlX2FsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqYWJfcGNpKSwgQVRIMTJLX0JVU19QQ0kpO1xcbjE1MzM6XFx0XFx0aWYgKCFhYikge1xcbjE1MzQ6XFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGF0aDEyayBiYXNlXFxcXG5cXFwiKTtcXG4xNTM1OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE1MzY6XFx0XFx0fVxcbjE1Mzc6XFx0XFxuMTUzODpcXHRcXHRhYi1cXHUwMDNlZGV2ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4xNTM5OlxcdFxcdGFiX3BjaSA9IGF0aDEya19wY2lfcHJpdihhYik7XFxuMTU0MDpcXHRcXHRhYl9wY2ktXFx1MDAzZWRldl9pZCA9IHBjaV9kZXYtXFx1MDAzZWRldmljZTtcXG4xNTQxOlxcdFxcdGFiX3BjaS1cXHUwMDNlYWIgPSBhYjtcXG4xNTQyOlxcdFxcdGFiX3BjaS1cXHUwMDNlcGRldiA9IHBkZXY7XFxuMTU0MzpcXHRcXHRhYi1cXHUwMDNlaGlmLm9wcyA9IFxcdTAwMjZhdGgxMmtfcGNpX2hpZl9vcHM7XFxuMTU0NDpcXHRcXHRhYi1cXHUwMDNlZndfbW9kZSA9IEFUSDEyS19GSVJNV0FSRV9NT0RFX05PUk1BTDtcXG4xNTQ1OlxcdFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBhYik7XFxuMTU0NjpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YWJfcGNpLVxcdTAwM2V3aW5kb3dfbG9jayk7XFxuMTU0NzpcXHRcXG4xNTQ4OlxcdFxcdHJldCA9IGF0aDEya19wY2lfY2xhaW0oYWJfcGNpLCBwZGV2KTtcXG4xNTQ5OlxcdFxcdGlmIChyZXQpIHtcXG4xNTUwOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gY2xhaW0gZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNTUxOlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfY29yZTtcXG4xNTUyOlxcdFxcdH1cXG4xNTUzOlxcdFxcbjE1NTQ6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcXFwicGNpIHByb2JlICUwNHg6JTA0eCAlMDR4OiUwNHhcXFxcblxcXCIsXFxuMTU1NTpcXHRcXHRcXHQgICBwZGV2LVxcdTAwM2V2ZW5kb3IsIHBkZXYtXFx1MDAzZWRldmljZSxcXG4xNTU2OlxcdFxcdFxcdCAgIHBkZXYtXFx1MDAzZXN1YnN5c3RlbV92ZW5kb3IsIHBkZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2UpO1xcbjE1NTc6XFx0XFxuMTU1ODpcXHRcXHRhYi1cXHUwMDNlaWQudmVuZG9yID0gcGRldi1cXHUwMDNldmVuZG9yO1xcbjE1NTk6XFx0XFx0YWItXFx1MDAzZWlkLmRldmljZSA9IHBkZXYtXFx1MDAzZWRldmljZTtcXG4xNTYwOlxcdFxcdGFiLVxcdTAwM2VpZC5zdWJzeXN0ZW1fdmVuZG9yID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX3ZlbmRvcjtcXG4xNTYxOlxcdFxcdGFiLVxcdTAwM2VpZC5zdWJzeXN0ZW1fZGV2aWNlID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcXG4xNTYyOlxcdFxcbjE1NjM6XFx0XFx0ZGV2aWNlX2lkID0gYXRoMTJrX2dldF9kZXZpY2VfZmFtaWx5KHBjaV9kZXYpO1xcbjE1NjQ6XFx0XFx0aWYgKGRldmljZV9pZCBcXHUwMDNlPSBBVEgxMktfREVWSUNFX0ZBTUlMWV9NQVgpIHtcXG4xNTY1OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gZ2V0IGRldmljZSBmYW1pbHkgaWRcXFxcblxcXCIpO1xcbjE1NjY6XFx0XFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4xNTY3OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9mcmVlX3JlZ2lvbjtcXG4xNTY4OlxcdFxcdH1cXG4xNTY5OlxcdFxcbjE1NzA6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19QQ0ksIFxcXCJQQ0kgZGV2aWNlIGZhbWlseSBpZDogJWRcXFxcblxcXCIsIGRldmljZV9pZCk7XFxuMTU3MTpcXHRcXG4xNTcyOlxcdFxcdGFiX3BjaS1cXHUwMDNlZGV2aWNlX2ZhbWlseV9vcHMgPSBcXHUwMDI2YXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVxcdTAwM2VvcHM7XFxuMTU3MzpcXHRcXHRhYl9wY2ktXFx1MDAzZXJlZ19iYXNlID0gYXRoMTJrX3BjaV9mYW1pbHlfZHJpdmVyc1tkZXZpY2VfaWRdLVxcdTAwM2VyZWdfYmFzZTtcXG4xNTc0OlxcdFxcbjE1NzU6XFx0XFx0LyogQ2FsbCBkZXZpY2Ugc3BlY2lmaWMgcHJvYmUuIFRoaXMgaXMgdGhlIGNhbGxiYWNrIHRoYXQgY2FuXFxuMTU3NjpcXHRcXHQgKiBiZSB1c2VkIHRvIG92ZXJyaWRlIGFueSBvcHMgaW4gZnV0dXJlXFxuMTU3NzpcXHRcXHQgKiBwcm9iZSBpcyB2YWxpZGF0ZWQgZm9yIE5VTEwgZHVyaW5nIHJlZ2lzdHJhdGlvbi5cXG4xNTc4OlxcdFxcdCAqL1xcbjE1Nzk6XFx0XFx0cmV0ID0gYWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cXHUwMDNlcHJvYmUocGRldiwgcGNpX2Rldik7XFxuMTU4MDpcXHRcXHRpZiAocmV0KSB7XFxuMTU4MTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHByb2JlIGRldmljZTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTU4MjpcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTU4MzpcXHRcXHR9XFxuMTU4NDpcXHRcXG4xNTg1OlxcdFxcdHJldCA9IGF0aDEya19wY2lfbXNpX2FsbG9jKGFiX3BjaSk7XFxuMTU4NjpcXHRcXHRpZiAocmV0KSB7XFxuMTU4NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jIG1zaTogJWRcXFxcblxcXCIsIHJldCk7XFxuMTU4ODpcXHRcXHRcXHRnb3RvIGVycl9wY2lfZnJlZV9yZWdpb247XFxuMTU4OTpcXHRcXHR9XFxuMTU5MDpcXHRcXG4xNTkxOlxcdFxcdHJldCA9IGF0aDEya19jb3JlX3ByZV9pbml0KGFiKTtcXG4xNTkyOlxcdFxcdGlmIChyZXQpXFxuMTU5MzpcXHRcXHRcXHRnb3RvIGVycl9wY2lfbXNpX2ZyZWU7XFxuMTU5NDpcXHRcXG4xNTk1OlxcdFxcdHJldCA9IGF0aDEya19wY2lfc2V0X2lycV9hZmZpbml0eV9oaW50KGFiX3BjaSwgY3B1bWFza19vZigwKSk7XFxuMTU5NjpcXHRcXHRpZiAocmV0KSB7XFxuMTU5NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHNldCBpcnEgYWZmaW5pdHkgJWRcXFxcblxcXCIsIHJldCk7XFxuMTU5ODpcXHRcXHRcXHRnb3RvIGVycl9wY2lfbXNpX2ZyZWU7XFxuMTU5OTpcXHRcXHR9XFxuMTYwMDpcXHRcXG4xNjAxOlxcdFxcdHJldCA9IGF0aDEya19taGlfcmVnaXN0ZXIoYWJfcGNpKTtcXG4xNjAyOlxcdFxcdGlmIChyZXQpIHtcXG4xNjAzOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gcmVnaXN0ZXIgbWhpOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjA0OlxcdFxcdFxcdGdvdG8gZXJyX2lycV9hZmZpbml0eV9jbGVhbnVwO1xcbjE2MDU6XFx0XFx0fVxcbjE2MDY6XFx0XFxuMTYwNzpcXHRcXHRyZXQgPSBhdGgxMmtfaGFsX3NybmdfaW5pdChhYik7XFxuMTYwODpcXHRcXHRpZiAocmV0KVxcbjE2MDk6XFx0XFx0XFx0Z290byBlcnJfbWhpX3VucmVnaXN0ZXI7XFxuMTYxMDpcXHRcXG4xNjExOlxcdFxcdHJldCA9IGF0aDEya19jZV9hbGxvY19waXBlcyhhYik7XFxuMTYxMjpcXHRcXHRpZiAocmV0KSB7XFxuMTYxMzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIGNlIHBpcGVzOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjE0OlxcdFxcdFxcdGdvdG8gZXJyX2hhbF9zcm5nX2RlaW5pdDtcXG4xNjE1OlxcdFxcdH1cXG4xNjE2OlxcdFxcbjE2MTc6XFx0XFx0YXRoMTJrX3BjaV9pbml0X3FtaV9jZV9jb25maWcoYWIpO1xcbjE2MTg6XFx0XFxuMTYxOTpcXHRcXHRyZXQgPSBhdGgxMmtfcGNpX2NvbmZpZ19pcnEoYWIpO1xcbjE2MjA6XFx0XFx0aWYgKHJldCkge1xcbjE2MjE6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBjb25maWcgaXJxOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjIyOlxcdFxcdFxcdGdvdG8gZXJyX2NlX2ZyZWU7XFxuMTYyMzpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjAxLjE1MjE1Mzc5MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQyMTY3Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIGBhdGgxMmtfcGNpX3Byb2JlYCoqXG5cbk9rYXksIHNvIHRoZSBpbml0aWFsIHNldHVwIGlzIHByZXR0eSBzdGFuZGFyZC4gV2UndmUgZ290IGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBoYXBwZW5pbmcgZmlyc3QsIHdoaWNoIEknbSBhc3N1bWluZyBoYW5kbGVzIHRoZSBNb2JpbGUgSG9zdCBJbnRlcmZhY2UgcmVnaXN0cmF0aW9uLiBNYWtlcyBzZW5zZSwgdGhhdCdzIHVzdWFsbHkgdGhlIGdyb3VuZHdvcmsgZm9yIHRoaXMga2luZCBvZiBQQ0kgZGV2aWNlLiBUaGVuIGl0IGFsbG9jYXRlcyBDRSAoQ29tcGxldGlvbiBFbmdpbmUpIHBpcGVzLiBHb29kLCB3ZSBuZWVkIHRob3NlIGZvciBkYXRhIHRyYW5zZmVyLiBBZnRlciB0aGF0LCBjb25maWd1cmluZyB0aGUgaW50ZXJydXB0cy4gQ2FuJ3QgZm9yZ2V0IHRob3NlISBUaGUgcmVhbCBtZWF0IG9mIHRoZSBpbml0aWFsaXphdGlvbiB3aWxsIGxpa2VseSBiZSB0aGUgY2FsbCB0byBgYXRoMTJrX2NvcmVfaW5pdGAgbGF0ZXIgb24g4oCTIEknbSBiZXR0aW5nIHRoYXQncyB3aGVyZSB0aGUgZGVlcGVyIGNvbmZpZ3VyYXRpb24gYW5kIGJyaW5ndXAgb2NjdXIuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgY2hpcCBub3chIExldCdzIGdldCB0aHJvdWdoIHRoZSByZXN0IG9mIHRoaXMgYGF0aDEya19wY2lfcHJvYmVgIGNvZGUuIEknbSBrZWVuIHRvIHNlZSB0aGUgZmxvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1NzYsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjA3LjU5NDMyMzY5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE2MjQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjI0OlxcdFxcbjE2MjU6XFx0XFx0Lyoga2VybmVsIG1heSBhbGxvY2F0ZSBhIGR1bW15IHZlY3RvciBiZWZvcmUgcmVxdWVzdF9pcnEgYW5kXFxuMTYyNjpcXHRcXHQgKiB0aGVuIGFsbG9jYXRlIGEgcmVhbCB2ZWN0b3Igd2hlbiByZXF1ZXN0X2lycSBpcyBjYWxsZWQuXFxuMTYyNzpcXHRcXHQgKiBTbyBnZXQgbXNpX2RhdGEgaGVyZSBhZ2FpbiB0byBhdm9pZCBzcHVyaW91cyBpbnRlcnJ1cHRcXG4xNjI4OlxcdFxcdCAqIGFzIG1zaV9kYXRhIHdpbGwgY29uZmlndXJlZCB0byBzcm5ncy5cXG4xNjI5OlxcdFxcdCAqL1xcbjE2MzA6XFx0XFx0cmV0ID0gYXRoMTJrX3BjaV9jb25maWdfbXNpX2RhdGEoYWJfcGNpKTtcXG4xNjMxOlxcdFxcdGlmIChyZXQpIHtcXG4xNjMyOlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gY29uZmlnIG1zaV9kYXRhOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNjMzOlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfaXJxO1xcbjE2MzQ6XFx0XFx0fVxcbjE2MzU6XFx0XFxuMTYzNjpcXHRcXHQvKiBJbnZva2UgYXJjaF9pbml0IGhlcmUgc28gdGhhdCBhcmNoLXNwZWNpZmljIGluaXQgb3BlcmF0aW9uc1xcbjE2Mzc6XFx0XFx0ICogY2FuIHV0aWxpemUgYWxyZWFkeSBpbml0aWFsaXplZCBhYiBmaWVsZHMsIHN1Y2ggYXMgSEFMIFNSTkdzLlxcbjE2Mzg6XFx0XFx0ICovXFxuMTYzOTpcXHRcXHRyZXQgPSBhYl9wY2ktXFx1MDAzZWRldmljZV9mYW1pbHlfb3BzLVxcdTAwM2VhcmNoX2luaXQoYWIpO1xcbjE2NDA6XFx0XFx0aWYgKHJldCkge1xcbjE2NDE6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcIlBDSSBhcmNoX2luaXQgZmFpbGVkICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2NDI6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9pcnE7XFxuMTY0MzpcXHRcXHR9XFxuMTY0NDpcXHRcXG4xNjQ1OlxcdFxcdHJldCA9IGF0aDEya19jb3JlX2luaXQoYWIpO1xcbjE2NDY6XFx0XFx0aWYgKHJldCkge1xcbjE2NDc6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBpbml0IGNvcmU6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjE2NDg6XFx0XFx0XFx0Z290byBlcnJfZGVpbml0X2FyY2g7XFxuMTY0OTpcXHRcXHR9XFxuMTY1MDpcXHRcXHRyZXR1cm4gMDtcXG4xNjUxOlxcdFxcbjE2NTI6XFx0ZXJyX2RlaW5pdF9hcmNoOlxcbjE2NTM6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cXHUwMDNlYXJjaF9kZWluaXQoYWIpO1xcbjE2NTQ6XFx0XFxuMTY1NTpcXHRlcnJfZnJlZV9pcnE6XFxuMTY1NjpcXHRcXHQvKiBfX2ZyZWVfaXJxKCkgZXhwZWN0cyB0aGUgY2FsbGVyIHRvIGhhdmUgY2xlYXJlZCB0aGUgYWZmaW5pdHkgaGludCAqL1xcbjE2NTc6XFx0XFx0YXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBOVUxMKTtcXG4xNjU4OlxcdFxcdGF0aDEya19wY2lfZnJlZV9pcnEoYWIpO1xcbjE2NTk6XFx0XFxuMTY2MDpcXHRlcnJfY2VfZnJlZTpcXG4xNjYxOlxcdFxcdGF0aDEya19jZV9mcmVlX3BpcGVzKGFiKTtcXG4xNjYyOlxcdFxcbjE2NjM6XFx0ZXJyX2hhbF9zcm5nX2RlaW5pdDpcXG4xNjY0OlxcdFxcdGF0aDEya19oYWxfc3JuZ19kZWluaXQoYWIpO1xcbjE2NjU6XFx0XFxuMTY2NjpcXHRlcnJfbWhpX3VucmVnaXN0ZXI6XFxuMTY2NzpcXHRcXHRhdGgxMmtfbWhpX3VucmVnaXN0ZXIoYWJfcGNpKTtcXG4xNjY4OlxcdFxcbjE2Njk6XFx0ZXJyX2lycV9hZmZpbml0eV9jbGVhbnVwOlxcbjE2NzA6XFx0XFx0YXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBOVUxMKTtcXG4xNjcxOlxcdFxcbjE2NzI6XFx0ZXJyX3BjaV9tc2lfZnJlZTpcXG4xNjczOlxcdFxcdGF0aDEya19wY2lfbXNpX2ZyZWUoYWJfcGNpKTtcXG4xNjc0OlxcdFxcbjE2NzU6XFx0ZXJyX3BjaV9mcmVlX3JlZ2lvbjpcXG4xNjc2OlxcdFxcdGF0aDEya19wY2lfZnJlZV9yZWdpb24oYWJfcGNpKTtcXG4xNjc3OlxcdFxcbjE2Nzg6XFx0ZXJyX2ZyZWVfY29yZTpcXG4xNjc5OlxcdFxcdGF0aDEya19jb3JlX2ZyZWUoYWIpO1xcbjE2ODA6XFx0XFxuMTY4MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE2ODI6XFx0fVxcbjE2ODM6XFx0XFxuMTY4NDpcXHRzdGF0aWMgdm9pZCBhdGgxMmtfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4xNjg1OlxcdHtcXG4xNjg2OlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuMTY4NzpcXHRcXHRzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpID0gYXRoMTJrX3BjaV9wcml2KGFiKTtcXG4xNjg4OlxcdFxcbjE2ODk6XFx0XFx0YXRoMTJrX3BjaV9zZXRfaXJxX2FmZmluaXR5X2hpbnQoYWJfcGNpLCBOVUxMKTtcXG4xNjkwOlxcdFxcbjE2OTE6XFx0XFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncykpIHtcXG4xNjkyOlxcdFxcdFxcdGF0aDEya19wY2lfcG93ZXJfZG93bihhYiwgZmFsc2UpO1xcbjE2OTM6XFx0XFx0XFx0Z290byBxbWlfZmFpbDtcXG4xNjk0OlxcdFxcdH1cXG4xNjk1OlxcdFxcbjE2OTY6XFx0XFx0c2V0X2JpdChBVEgxMktfRkxBR19VTlJFR0lTVEVSSU5HLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuMTY5NzpcXHRcXG4xNjk4OlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmFiLVxcdTAwM2VyZXNldF93b3JrKTtcXG4xNjk5OlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmFiLVxcdTAwM2VkdW1wX3dvcmspO1xcbjE3MDA6XFx0XFx0YXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChhYi1cXHUwMDNlYWcpO1xcbjE3MDE6XFx0XFxuMTcwMjpcXHRxbWlfZmFpbDpcXG4xNzAzOlxcdFxcdGF0aDEya19jb3JlX2RlaW5pdChhYik7XFxuMTcwNDpcXHRcXHRhdGgxMmtfZndfdW5tYXAoYWIpO1xcbjE3MDU6XFx0XFx0YXRoMTJrX21oaV91bnJlZ2lzdGVyKGFiX3BjaSk7XFxuMTcwNjpcXHRcXG4xNzA3OlxcdFxcdGF0aDEya19wY2lfZnJlZV9pcnEoYWIpO1xcbjE3MDg6XFx0XFx0YXRoMTJrX3BjaV9tc2lfZnJlZShhYl9wY2kpO1xcbjE3MDk6XFx0XFx0YXRoMTJrX3BjaV9mcmVlX3JlZ2lvbihhYl9wY2kpO1xcbjE3MTA6XFx0XFxuMTcxMTpcXHRcXHRhdGgxMmtfaGFsX3NybmdfZGVpbml0KGFiKTtcXG4xNzEyOlxcdFxcdGF0aDEya19jZV9mcmVlX3BpcGVzKGFiKTtcXG4xNzEzOlxcdFxcbjE3MTQ6XFx0XFx0YWJfcGNpLVxcdTAwM2VkZXZpY2VfZmFtaWx5X29wcy1cXHUwMDNlYXJjaF9kZWluaXQoYWIpO1xcbjE3MTU6XFx0XFxuMTcxNjpcXHRcXHRhdGgxMmtfY29yZV9mcmVlKGFiKTtcXG4xNzE3OlxcdH1cXG4xNzE4OlxcdFxcbjE3MTk6XFx0c3RhdGljIHZvaWQgYXRoMTJrX3BjaV9od19ncm91cF9wb3dlcl9kb3duKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxcbjE3MjA6XFx0e1xcbjE3MjE6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYjtcXG4xNzIyOlxcdFxcdGludCBpO1xcbjE3MjM6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjA3LjU5NDQ5NjA2OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTAwOTIyMTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGluaXRpYWwgdGhvdWdodHMsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBmdW5jdGlvbiBjYWxsOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBhdGgxMmtfY29yZV9pbml0KipcblxuT2theSwgYGF0aDEya19jb3JlX2luaXRgLiBMZXQncyBkaXZlIGluLiBJIHNlZSB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgc28gaXQncyBjbGVhcmx5IGEgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIHRoaXMgYXRoMTJrIGRyaXZlci4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBpcyB0aGUgb3ZlcmFsbCBnb2FsIG9mIHRoaXMgaW5pdGlhbGl6YXRpb24/IElzIGl0IHNldHRpbmcgdXAgaGFyZHdhcmUgcmVzb3VyY2VzLCByZWdpc3RlcmluZyB3aXRoIHRoZSBrZXJuZWwsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYmlnIHBpY3R1cmUgZmlyc3QuIEknbSBnb2luZyB0byBxdWlja2x5IGxvb2sgZm9yIGFueSBoaWdoLWxldmVsIGNvbW1lbnRzIG9yIGZ1bmN0aW9uIGNhbGwgdHJhY2VzIHRvIGVzdGFibGlzaCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBJJ2xsIG1lbnRhbGx5IG5vdGUgYW55IGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIGluIG9yIGluaXRpYWxpemVkLCBhcyB0aG9zZSB3aWxsIGJlIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRyaXZlcidzIGludGVybmFsIHN0YXRlLiBNeSBleHBlcmllbmNlIHN1Z2dlc3RzIHRoYXQgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgb2Z0ZW4gaGFuZGxlIHJlc291cmNlIGFsbG9jYXRpb24sIHNvIEkgd2lsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgdGhhdC4gSSB3aWxsIHRoZW4gZXhhbWluZSB0aGUgY29yZSB0YXNrcyB0aGlzIGZ1bmN0aW9uIGFjY29tcGxpc2hlcyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGRyaXZlciB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MTYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjExLjY5NTQyMDc0NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4ODc0ODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgYXRoMTJrX2NvcmVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0yMTg4PXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfc2V0X21sb19jYXBhYmxlKHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIyOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYzoyMjI5OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmMtMjIzMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaD0xMjY0PWludCBhdGgxMmtfY29yZV9wcmVfaW5pdChzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaDoxMjY1OmludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuaC0xMjY2LXZvaWQgYXRoMTJrX2NvcmVfZGVpbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6MTMuMzg0MTc2NjhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwNTQ1MzAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGF0aDEya19jb3JlX2luaXRgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBzeXN0ZW0uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBzdGFuZGFyZCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc3RlcHMsIGJ1dCBJIHdhbnQgdG8gbG9vayBmb3IgYW55dGhpbmcgc3BlY2lmaWMgdG8gdGhlIGF0aDEyayBjaGlwIG9yIGFueSBub3ZlbCBhcHByb2FjaGVzIGl0IHRha2VzLiBJJ20gZ29pbmcgdG8gbG9vayBmb3IgcmVnaXN0ZXIgYWNjZXNzIHBhdHRlcm5zLCBtZW1vcnkgYWxsb2NhdGlvbiwgaGFyZHdhcmUgc2V0dXAgc2VxdWVuY2VzLCBhbmQgYW55IHBvdGVudGlhbCBwb3dlciBtYW5hZ2VtZW50IG9yIGludGVycnVwdCBjb25maWd1cmF0aW9uIHRoYXQncyBkb25lIGF0IHRoaXMgc3RhZ2UuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHNldCB1cCBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcy4gQXJlIHRoZXJlIGFueSBlYXJseSBlcnJvciBjaGVja3Mgb3IgZGVidWcgcHJpbnRzIHRoYXQgZ2l2ZSBjbHVlcyBhYm91dCBjb21tb24gc3RhcnR1cCBwcm9ibGVtcz8gQW55IGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBhcmUga2V5IHRvIHVuZGVyc3RhbmQgYXQgdGhpcyBzdGFnZSBhcyB0aGV5IGNhbiBzaWduaWZpY2FudGx5IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgc3RhYmlsaXR5IGxhdGVyIG9uLiBJJ20gYWxzbyBob3BpbmcgdG8gc3BvdCBhbnkgcG90ZW50aWFsIHBvaW50cyBmb3IgY3VzdG9taXphdGlvbiBvciBjb25maWd1cmF0aW9uIGlmIGl0J3MgYXBwbGljYWJsZSB0byBteSBwcm9qZWN0LiBGaW5hbGx5LCBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggYW55IGZpcm13YXJlIGxvYWRpbmcgb3IgZGV2aWNlIHByb2JlIHJvdXRpbmVzLCBhcyB0aGF0J3Mgb2Z0ZW4gYSBjcml0aWNhbCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA4NywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjE4Ljc4OTYzMTkxOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjIyOSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMjk6XFx0aW50IGF0aDEya19jb3JlX2luaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4yMjMwOlxcdHtcXG4yMjMxOlxcdFxcdHN0cnVjdCBhdGgxMmtfaHdfZ3JvdXAgKmFnO1xcbjIyMzI6XFx0XFx0aW50IHJldDtcXG4yMjMzOlxcdFxcbjIyMzQ6XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfcGFuaWNfbm90aWZpZXJfcmVnaXN0ZXIoYWIpO1xcbjIyMzU6XFx0XFx0aWYgKHJldClcXG4yMjM2OlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHBhbmljIGhhbmRsZXI6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjIyMzc6XFx0XFxuMjIzODpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xcbjIyMzk6XFx0XFxuMjI0MDpcXHRcXHRhZyA9IGF0aDEya19jb3JlX2h3X2dyb3VwX2Fzc2lnbihhYik7XFxuMjI0MTpcXHRcXHRpZiAoIWFnKSB7XFxuMjI0MjpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmF0aDEya19od19ncm91cF9tdXRleCk7XFxuMjI0MzpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInVuYWJsZSB0byBnZXQgaHcgZ3JvdXBcXFxcblxcXCIpO1xcbjIyNDQ6XFx0XFx0XFx0cmV0ID0gLUVOT0RFVjtcXG4yMjQ1OlxcdFxcdFxcdGdvdG8gZXJyX3VucmVnaXN0ZXJfbm90aWZpZXI7XFxuMjI0NjpcXHRcXHR9XFxuMjI0NzpcXHRcXG4yMjQ4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YXRoMTJrX2h3X2dyb3VwX211dGV4KTtcXG4yMjQ5OlxcdFxcbjIyNTA6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YWctXFx1MDAzZW11dGV4KTtcXG4yMjUxOlxcdFxcbjIyNTI6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULCBcXFwibnVtIGRldmljZXMgJWQgbnVtIHByb2JlZCAlZFxcXFxuXFxcIixcXG4yMjUzOlxcdFxcdFxcdCAgIGFnLVxcdTAwM2VudW1fZGV2aWNlcywgYWctXFx1MDAzZW51bV9wcm9iZWQpO1xcbjIyNTQ6XFx0XFxuMjI1NTpcXHRcXHRpZiAoYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlX3JlYWR5KGFnKSkge1xcbjIyNTY6XFx0XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlKGFnKTtcXG4yMjU3OlxcdFxcdFxcdGlmIChyZXQpIHtcXG4yMjU4OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YWctXFx1MDAzZW11dGV4KTtcXG4yMjU5OlxcdFxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwidW5hYmxlIHRvIGNyZWF0ZSBodyBncm91cFxcXFxuXFxcIik7XFxuMjI2MDpcXHRcXHRcXHRcXHRnb3RvIGVycl91bmFzc2lnbl9od19ncm91cDtcXG4yMjYxOlxcdFxcdFxcdH1cXG4yMjYyOlxcdFxcdH1cXG4yMjYzOlxcdFxcbjIyNjQ6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhZy1cXHUwMDNlbXV0ZXgpO1xcbjIyNjU6XFx0XFxuMjI2NjpcXHRcXHRyZXR1cm4gMDtcXG4yMjY3OlxcdFxcbjIyNjg6XFx0ZXJyX3VuYXNzaWduX2h3X2dyb3VwOlxcbjIyNjk6XFx0XFx0YXRoMTJrX2NvcmVfaHdfZ3JvdXBfdW5hc3NpZ24oYWIpO1xcbjIyNzA6XFx0ZXJyX3VucmVnaXN0ZXJfbm90aWZpZXI6XFxuMjI3MTpcXHRcXHRhdGgxMmtfY29yZV9wYW5pY19ub3RpZmllcl91bnJlZ2lzdGVyKGFiKTtcXG4yMjcyOlxcdFxcbjIyNzM6XFx0XFx0cmV0dXJuIHJldDtcXG4yMjc0OlxcdH1cXG4yMjc1OlxcdFxcbjIyNzY6XFx0dm9pZCBhdGgxMmtfY29yZV9kZWluaXQoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4yMjc3OlxcdHtcXG4yMjc4OlxcdFxcdGF0aDEya19jb3JlX2h3X2dyb3VwX2Rlc3Ryb3koYWItXFx1MDAzZWFnKTtcXG4yMjc5OlxcdFxcdGF0aDEya19jb3JlX2h3X2dyb3VwX3VuYXNzaWduKGFiKTtcXG4yMjgwOlxcdFxcdGF0aDEya19jb3JlX3BhbmljX25vdGlmaWVyX3VucmVnaXN0ZXIoYWIpO1xcbjIyODE6XFx0fVxcbjIyODI6XFx0XFxuMjI4MzpcXHR2b2lkIGF0aDEya19jb3JlX2ZyZWUoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4yMjg0OlxcdHtcXG4yMjg1OlxcdFxcdHRpbWVyX2RlbGV0ZV9zeW5jKFxcdTAwMjZhYi1cXHUwMDNlcnhfcmVwbGVuaXNoX3JldHJ5KTtcXG4yMjg2OlxcdFxcdGF0aDEya193bWlfZnJlZSgpO1xcbjIyODc6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWItXFx1MDAzZXdvcmtxdWV1ZV9hdXgpO1xcbjIyODg6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWItXFx1MDAzZXdvcmtxdWV1ZSk7XFxuMjI4OTpcXHRcXHRrZnJlZShhYik7XFxuMjI5MDpcXHR9XFxuMjI5MTpcXHRcXG4yMjkyOlxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYXRoMTJrX2NvcmVfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3QgcHJpdl9zaXplLFxcbjIyOTM6XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBhdGgxMmtfYnVzIGJ1cylcXG4yMjk0OlxcdHtcXG4yMjk1OlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XFxuMjI5NjpcXHRcXG4yMjk3OlxcdFxcdGFiID0ga3phbGxvYyhzaXplb2YoKmFiKSArIHByaXZfc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuMjI5ODpcXHRcXHRpZiAoIWFiKVxcbjIyOTk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjMwMDpcXHRcXG4yMzAxOlxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2YWItXFx1MDAzZWRyaXZlcl9yZWNvdmVyeSk7XFxuMjMwMjpcXHRcXG4yMzAzOlxcdFxcdGFiLVxcdTAwM2V3b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShcXFwiYXRoMTJrX3dxXFxcIik7XFxuMjMwNDpcXHRcXHRpZiAoIWFiLVxcdTAwM2V3b3JrcXVldWUpXFxuMjMwNTpcXHRcXHRcXHRnb3RvIGVycl9zY19mcmVlO1xcbjIzMDY6XFx0XFxuMjMwNzpcXHRcXHRhYi1cXHUwMDNld29ya3F1ZXVlX2F1eCA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFxcXCJhdGgxMmtfYXV4X3dxXFxcIik7XFxuMjMwODpcXHRcXHRpZiAoIWFiLVxcdTAwM2V3b3JrcXVldWVfYXV4KVxcbjIzMDk6XFx0XFx0XFx0Z290byBlcnJfZnJlZV93cTtcXG4yMzEwOlxcdFxcbjIzMTE6XFx0XFx0aWYgKGF0aDEya193bWlfYWxsb2MoKSBcXHUwMDNjIDApXFxuMjMxMjpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX3dxX2F1eDtcXG4yMzEzOlxcdFxcbjIzMTQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2YWItXFx1MDAzZWNvcmVfbG9jayk7XFxuMjMxNTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YWItXFx1MDAzZWJhc2VfbG9jayk7XFxuMjMxNjpcXHRcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmFiLVxcdTAwM2VyZXNldF9jb21wbGV0ZSk7XFxuMjMxNzpcXHRcXG4yMzE4OlxcdFxcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXFx1MDAyNmFiLVxcdTAwM2VwZWVyX21hcHBpbmdfd3EpO1xcbjIzMTk6XFx0XFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2YWItXFx1MDAzZXdtaV9hYi50eF9jcmVkaXRzX3dxKTtcXG4yMzIwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2YWItXFx1MDAzZXJlc3RhcnRfd29yaywgYXRoMTJrX2NvcmVfcmVzdGFydCk7XFxuMjMyMTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmFiLVxcdTAwM2VyZXNldF93b3JrLCBhdGgxMmtfY29yZV9yZXNldCk7XFxuMjMyMjpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmFiLVxcdTAwM2VyZmtpbGxfd29yaywgYXRoMTJrX3Jma2lsbF93b3JrKTtcXG4yMzIzOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2YWItXFx1MDAzZWR1bXBfd29yaywgYXRoMTJrX2NvcmVkdW1wX3VwbG9hZCk7XFxuMjMyNDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNmFiLVxcdTAwM2V1cGRhdGVfMTFkX3dvcmssIGF0aDEya191cGRhdGVfMTFkKTtcXG4yMzI1OlxcdFxcbjIzMjY6XFx0XFx0dGltZXJfc2V0dXAoXFx1MDAyNmFiLVxcdTAwM2VyeF9yZXBsZW5pc2hfcmV0cnksIGF0aDEya19jZV9yeF9yZXBsZW5pc2hfcmV0cnksIDApO1xcbjIzMjc6XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZhYi1cXHUwMDNlaHRjX3N1c3BlbmQpO1xcbjIzMjg6XFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZhYi1cXHUwMDNlcmVzdGFydF9jb21wbGV0ZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNzoxOC43ODk4MzM1NzlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk2MjI5NDE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGF0aDEyayBIYXJkd2FyZSBHcm91cCBDcmVhdGlvbioqXG5cbk9rYXksIHNvIGBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGVgIGp1c3QgZ290IGNhbGxlZC4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyBoZXJlLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIGluaXRpYWxpemluZyBvciBjb25maWd1cmluZyBzb21lIGhhcmR3YXJlIHJlc291cmNlIGdyb3VwaW5nIHdpdGhpbiB0aGUgYXRoMTJrIGRyaXZlciwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIG11bHRpLWNvcmUgYXJjaGl0ZWN0dXJlIG9mIHRoZXNlIG5ld2VyIFF1YWxjb21tIGNoaXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGhlcmUgLSBkb2VzIHRoaXMgaW52b2x2ZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBjbG9jayBnYXRpbmcsIGludGVycnVwdCBiaW5kaW5nLCBvciBwZXJoYXBzIHNvbWV0aGluZyBtb3JlIGFic3RyYWN0IGxpa2UgZGVmaW5pbmcgZnVuY3Rpb25hbCBkb21haW5zIHdpdGhpbiB0aGUgaGFyZHdhcmU/XG5cbkknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgaGFyZHdhcmUgcmVnaXN0ZXJzIGl0J3MgbWFuaXB1bGF0aW5nLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhbGxvY2F0aW5nIG1lbW9yeSByZWdpb25zIGZvciBETUEsIHJlZ2lzdGVyaW5nIGludGVycnVwdCBoYW5kbGVycywgb3IgcGVyaGFwcyBjb25maWd1cmluZyBzb21lIGtpbmQgb2YgYXJiaXRyYXRpb24gbG9naWMgYmV0d2VlbiBjb3Jlcz8gV2hhdCBJIHJlYWxseSB3YW50IHRvIGRldGVybWluZSBpcyBob3cgdGhpcyBmdW5jdGlvbiBzZXRzIHVwIHRoZSBiYXNpYyBidWlsZGluZyBibG9ja3MgZm9yIHRoZSBkcml2ZXIgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgYW5kIGhvdyBpdCBlbnN1cmVzIGVmZmljaWVudCBhbmQgaXNvbGF0ZWQgYWNjZXNzLiBIb3BlZnVsbHksIHRoZSBjb2RlIGNvbW1lbnRzIGFyZSBnb29kLCBidXQgSSdsbCBiZSBwcmVwYXJlZCB0byBmb2xsb3cgdGhlIGRhdGEgc3RydWN0dXJlcy4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGhzIGFzIHdlbGw7IGFueSBmYWlsdXJlcyBoZXJlIGNvdWxkIGJlIGEgc2hvdy1zdG9wcGVyIGZvciB0aGUgd2hvbGUgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAwNywiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6MjQuNzUyMTMwNDg2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzMwOTQ4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGF0aDEya19jb3JlX2h3X2dyb3VwX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYz0yMTE2PXZvaWQgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY2xlYW51cChzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTIxNDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6MjE0ODpzdGF0aWMgaW50IGF0aDEya19jb3JlX2h3X2dyb3VwX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy0yMTQ5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6MjUuMzg1MjMyMzgzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMTYxMDA5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBhdGgxMmtfY29yZV9od19ncm91cF9jcmVhdGVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcHVycG9zZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBhdGgxMmsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgaXQncyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBjcmVhdGlvbiBvZiBoYXJkd2FyZSByZXNvdXJjZSBncm91cHMsIHByb2JhYmx5IHNwZWNpZmljIHRvIHRoZSBhdGgxMmsncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbSBleHBlY3RpbmcgdG8gc2VlIGFsbG9jYXRpb24gb2YgZGF0YSBzdHJ1Y3R1cmVzLCBwZXJoYXBzIGluaXRpYWxpemF0aW9uIG9mIHNvbWUgaGFyZHdhcmUgcmVnaXN0ZXJzLCBhbmQgbGlrZWx5IHNvbWUgZXJyb3IgaGFuZGxpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGdyb3VwcyBhcmUgdXNlZC4gV2hhdCBhcmUgdGhlIGtleSBjb21wb25lbnRzIHdpdGhpbiBpdD8gQXJlIHRoZXkgcmVsYXRlZCB0byBETUEsIGludGVycnVwdCBtYW5hZ2VtZW50LCBvciByYWRpbyByZXNvdXJjZXM/IEknbGwgYmUgbG9va2luZyBmb3IgcmVmZXJlbmNlcyB0byByZWxhdGVkIHN0cnVjdHVyZXMgc3VjaCBhcyAqYXRoMTJrX2h3KiAoaWYgdGhpcyBpcyByZWxldmFudCBmb3IgaG93IHRoaXMgZHJpdmVyIGlzIHN0cnVjdHVyZWQpLCAqYXRoMTJrX2dyb3VwKiwgb3IgYW55dGhpbmcgdGhhdCBtaWdodCByZXByZXNlbnQgYSBwaHlzaWNhbCBvciBsb2dpY2FsIGVudGl0eSB3aXRoaW4gdGhlIGhhcmR3YXJlLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIGZvciBsb2NraW5nIG1lY2hhbmlzbXMsIGlmIHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIGEgbXVsdGktdGhyZWFkZWQgY29udGV4dCwgYW5kIGl0J3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgd2hldGhlciBpdCBpcyBhbGxvY2F0aW5nIHNvbWUgbmV3IHJlc291cmNlcywgYW5kLyBvciwgaG93IHRoZXNlIGFyZSBmcmVlZCB3aGVuIG5lY2Vzc2FyeS4gRmluYWxseSwgSSB3aWxsIGJlIHNjYW5uaW5nIGZvciBpdHMgcGxhY2UgaW4gdGhlIG92ZXJhbGwgd29ya2Zsb3cgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzUwMiwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjMwLjQwMTMzNjI2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTQ4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE0ODpcXHRzdGF0aWMgaW50IGF0aDEya19jb3JlX2h3X2dyb3VwX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZylcXG4yMTQ5OlxcdHtcXG4yMTUwOlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWI7XFxuMjE1MTpcXHRcXHRpbnQgaSwgcmV0O1xcbjIxNTI6XFx0XFxuMjE1MzpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZhZy1cXHUwMDNlbXV0ZXgpO1xcbjIxNTQ6XFx0XFxuMjE1NTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWctXFx1MDAzZW51bV9kZXZpY2VzOyBpKyspIHtcXG4yMTU2OlxcdFxcdFxcdGFiID0gYWctXFx1MDAzZWFiW2ldO1xcbjIxNTc6XFx0XFx0XFx0aWYgKCFhYilcXG4yMTU4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIxNTk6XFx0XFxuMjE2MDpcXHRcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZhYi1cXHUwMDNlY29yZV9sb2NrKTtcXG4yMTYxOlxcdFxcbjIxNjI6XFx0XFx0XFx0cmV0ID0gYXRoMTJrX2NvcmVfc29jX2NyZWF0ZShhYik7XFxuMjE2MzpcXHRcXHRcXHRpZiAocmV0KSB7XFxuMjE2NDpcXHRcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmFiLVxcdTAwM2Vjb3JlX2xvY2spO1xcbjIxNjU6XFx0XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBjcmVhdGUgc29jICVkIGNvcmU6ICVkXFxcXG5cXFwiLCBpLCByZXQpO1xcbjIxNjY6XFx0XFx0XFx0XFx0Z290byBkZXN0cm95O1xcbjIxNjc6XFx0XFx0XFx0fVxcbjIxNjg6XFx0XFxuMjE2OTpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNmFiLVxcdTAwM2Vjb3JlX2xvY2spO1xcbjIxNzA6XFx0XFx0fVxcbjIxNzE6XFx0XFxuMjE3MjpcXHRcXHRyZXR1cm4gMDtcXG4yMTczOlxcdFxcbjIxNzQ6XFx0ZGVzdHJveTpcXG4yMTc1OlxcdFxcdGZvciAoaS0tOyBpIFxcdTAwM2U9IDA7IGktLSkge1xcbjIxNzY6XFx0XFx0XFx0YWIgPSBhZy1cXHUwMDNlYWJbaV07XFxuMjE3NzpcXHRcXHRcXHRpZiAoIWFiKVxcbjIxNzg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjE3OTpcXHRcXG4yMTgwOlxcdFxcdFxcdG11dGV4X2xvY2soXFx1MDAyNmFiLVxcdTAwM2Vjb3JlX2xvY2spO1xcbjIxODE6XFx0XFx0XFx0YXRoMTJrX2NvcmVfc29jX2Rlc3Ryb3koYWIpO1xcbjIxODI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhYi1cXHUwMDNlY29yZV9sb2NrKTtcXG4yMTgzOlxcdFxcdH1cXG4yMTg0OlxcdFxcbjIxODU6XFx0XFx0cmV0dXJuIHJldDtcXG4yMTg2OlxcdH1cXG4yMTg3OlxcdFxcbjIxODg6XFx0dm9pZCBhdGgxMmtfY29yZV9od19ncm91cF9zZXRfbWxvX2NhcGFibGUoc3RydWN0IGF0aDEya19od19ncm91cCAqYWcpXFxuMjE4OTpcXHR7XFxuMjE5MDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiO1xcbjIxOTE6XFx0XFx0aW50IGk7XFxuMjE5MjpcXHRcXG4yMTkzOlxcdFxcdGlmIChhdGgxMmtfZnRtX21vZGUpXFxuMjE5NDpcXHRcXHRcXHRyZXR1cm47XFxuMjE5NTpcXHRcXG4yMTk2OlxcdFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNmFnLVxcdTAwM2VtdXRleCk7XFxuMjE5NzpcXHRcXG4yMTk4OlxcdFxcdGlmIChhZy1cXHUwMDNlbnVtX2RldmljZXMgPT0gMSkge1xcbjIxOTk6XFx0XFx0XFx0YWIgPSBhZy1cXHUwMDNlYWJbMF07XFxuMjIwMDpcXHRcXHRcXHQvKiBRQ045Mjc0IGZpcm13YXJlIHVzZXMgZmlybXdhcmUgSUUgZm9yIE1MTyBhZHZlcnRpc2VtZW50ICovXFxuMjIwMTpcXHRcXHRcXHRpZiAoYWItXFx1MDAzZWZ3LmZ3X2ZlYXR1cmVzX3ZhbGlkKSB7XFxuMjIwMjpcXHRcXHRcXHRcXHRhZy1cXHUwMDNlbWxvX2NhcGFibGUgPVxcbjIyMDM6XFx0XFx0XFx0XFx0XFx0YXRoMTJrX2Z3X2ZlYXR1cmVfc3VwcG9ydGVkKGFiLCBBVEgxMktfRldfRkVBVFVSRV9NTE8pO1xcbjIyMDQ6XFx0XFx0XFx0XFx0cmV0dXJuO1xcbjIyMDU6XFx0XFx0XFx0fVxcbjIyMDY6XFx0XFxuMjIwNzpcXHRcXHRcXHQvKiB3aGlsZSBXQ043ODUwIGZpcm13YXJlIHVzZXMgUU1JIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0IGJpdCAqL1xcbjIyMDg6XFx0XFx0XFx0YWctXFx1MDAzZW1sb19jYXBhYmxlID0gYWItXFx1MDAzZXNpbmdsZV9jaGlwX21sb19zdXBwb3J0O1xcbjIyMDk6XFx0XFx0XFx0cmV0dXJuO1xcbjIyMTA6XFx0XFx0fVxcbjIyMTE6XFx0XFxuMjIxMjpcXHRcXHRhZy1cXHUwMDNlbWxvX2NhcGFibGUgPSB0cnVlO1xcbjIyMTM6XFx0XFxuMjIxNDpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgYWctXFx1MDAzZW51bV9kZXZpY2VzOyBpKyspIHtcXG4yMjE1OlxcdFxcdFxcdGFiID0gYWctXFx1MDAzZWFiW2ldO1xcbjIyMTY6XFx0XFx0XFx0aWYgKCFhYilcXG4yMjE3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIyMTg6XFx0XFxuMjIxOTpcXHRcXHRcXHQvKiBldmVuIGlmIDEgZGV2aWNlJ3MgZmlybXdhcmUgZmVhdHVyZSBpbmRpY2F0ZXMgTUxPXFxuMjIyMDpcXHRcXHRcXHQgKiB1bnN1cHBvcnRlZCwgbWFrZSBNTE8gdW5zdXBwb3J0ZWQgZm9yIHRoZSB3aG9sZSBncm91cFxcbjIyMjE6XFx0XFx0XFx0ICovXFxuMjIyMjpcXHRcXHRcXHRpZiAoIWF0aDEya19md19mZWF0dXJlX3N1cHBvcnRlZChhYiwgQVRIMTJLX0ZXX0ZFQVRVUkVfTUxPKSkge1xcbjIyMjM6XFx0XFx0XFx0XFx0YWctXFx1MDAzZW1sb19jYXBhYmxlID0gZmFsc2U7XFxuMjIyNDpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjIyNTpcXHRcXHRcXHR9XFxuMjIyNjpcXHRcXHR9XFxuMjIyNzpcXHR9XFxuMjIyODpcXHRcXG4yMjI5OlxcdGludCBhdGgxMmtfY29yZV9pbml0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuMjIzMDpcXHR7XFxuMjIzMTpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2h3X2dyb3VwICphZztcXG4yMjMyOlxcdFxcdGludCByZXQ7XFxuMjIzMzpcXHRcXG4yMjM0OlxcdFxcdHJldCA9IGF0aDEya19jb3JlX3BhbmljX25vdGlmaWVyX3JlZ2lzdGVyKGFiKTtcXG4yMjM1OlxcdFxcdGlmIChyZXQpXFxuMjIzNjpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBwYW5pYyBoYW5kbGVyOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4yMjM3OlxcdFxcbjIyMzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YXRoMTJrX2h3X2dyb3VwX211dGV4KTtcXG4yMjM5OlxcdFxcbjIyNDA6XFx0XFx0YWcgPSBhdGgxMmtfY29yZV9od19ncm91cF9hc3NpZ24oYWIpO1xcbjIyNDE6XFx0XFx0aWYgKCFhZykge1xcbjIyNDI6XFx0XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZhdGgxMmtfaHdfZ3JvdXBfbXV0ZXgpO1xcbjIyNDM6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJ1bmFibGUgdG8gZ2V0IGh3IGdyb3VwXFxcXG5cXFwiKTtcXG4yMjQ0OlxcdFxcdFxcdHJldCA9IC1FTk9ERVY7XFxuMjI0NTpcXHRcXHRcXHRnb3RvIGVycl91bnJlZ2lzdGVyX25vdGlmaWVyO1xcbjIyNDY6XFx0XFx0fVxcbjIyNDc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjMwLjQwMTcwNTkyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzI3NzA5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBvZiB0aGUgcHJvdmlkZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBhdGgxMmtfY29yZV9zb2NfY3JlYXRlIEZ1bmN0aW9uKipcblxuT2theSwgc28gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGlzIGJlaW5nIGludm9rZWQuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byBjaGVjayB3aGF0J3MgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3Mgcm9sZSBpbiB0aGUgYnJvYWRlciBgYXRoMTJrYCBmcmFtZXdvcmsuIFByZXN1bWFibHksIGJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIGludm9sdmVkIGluIHRoZSBjcmVhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBzb21lIGtpbmQgb2YgU3lzdGVtLW9uLUNoaXAgKFNvQykgcmVsYXRlZCBjb21wb25lbnQgb3Igc3RydWN0dXJlIGZvciB0aGUgZHJpdmVyLiBJIG5lZWQgdG8gcmFwaWRseSB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgY29udGV4dCBvZiBoYXJkd2FyZSBicmluZ3VwIGFuZCBjb25maWd1cmF0aW9uLiBMZXQncyBkZWx2ZSBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgc2VlIHdoYXQga2V5IGRhdGEgc3RydWN0dXJlcyBpdCdzIG1hbmlwdWxhdGluZyBhbmQgd2hpY2ggb3RoZXIga2V5IGZ1bmN0aW9ucyBpdOKAmXMgY2FsbGluZyB0byBmb3JtIHRoZSBTb0MuIEkgYWxzbyB3YW50IHRvIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGFuZCBpbml0aWFsaXppbmcgc3BlY2lmaWMgaGFyZHdhcmUgcmVzb3VyY2VzLCBvciBpZiBpdCBpcyByZXNwb25zaWJsZSBmb3IgbWVyZWx5IGNvb3JkaW5hdGluZyBvdGhlciBmdW5jdGlvbnMgdG8gYWNoaWV2ZSB0aGlzLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgYSBjcnVjaWFsIHN0ZXAgaW4gdGhlIGRyaXZlcidzIHBvd2VyIG1hbmFnZW1lbnQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgY2xvY2sgc2V0dGluZ3MsIGludGVycnVwdCBoYW5kbGVycywgYW5kIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgdGhhdCBtaWdodCBiZSByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNDMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjM0LjkzNDQ3ODgzNloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0NDA5Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImludCBhdGgxMmtfY29yZV9zb2NfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jPTgwND1pbnQgYXRoMTJrX2NvcmVfY2hlY2tfc21iaW9zKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2NvcmUuYy04MTQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9jb3JlLmM6ODE1OnN0YXRpYyBpbnQgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jLTgxNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjM1LjQ3ODg5OTgwNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTk2Mzg2ODE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgLiBJIGtub3cgdGhpcyBpcyB0aGUgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgY29yZSBTT0MgKFN5c3RlbS1vbi1DaGlwKSBhc3BlY3RzIG9mIHRoZSBhdGgxMmsgZHJpdmVyLCBsaWtlbHkgZHVyaW5nIGRldmljZSBwcm9iZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBzZXRzIHVwIHRoZSBoYXJkd2FyZSByZXNvdXJjZXMsIGFsbG9jYXRlcyBtZW1vcnksIGFuZCBlc3RhYmxpc2hlcyB0aGUgYmFzaWMgY29ubmVjdGl2aXR5IHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuXG5cbkknbSBsb29raW5nIGZvciB0aGUgYWxsb2NhdGlvbiBvZiBhbnkgY29udHJvbCBzdHJ1Y3R1cmVzLCBjb25maWd1cmF0aW9uIG9mIHJlZ2lzdGVycywgYW5kIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbnkgaW50ZXJuYWwgc3RhdGUgdmFyaWFibGVzIHRoYXQgd2lsbCBiZSBjcml0aWNhbCBmb3IgbGF0ZXIgb3BlcmF0aW9ucywgbGlrZSBoYW5kbGluZyBkYXRhIHRyYWZmaWMgYW5kIHBvd2VyIG1hbmFnZW1lbnQuIEknbGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIHRoaXMgZnVuY3Rpb247IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmYWlsdXJlIGNhc2VzIGFuZCB3aGF0IHJlY292ZXJ5IG1lY2hhbmlzbXMsIGlmIGFueSwgYXJlIGltcGxlbWVudGVkLiBJIGtub3cgYSBzdWNjZXNzZnVsIGluaXRpYWxpemF0aW9uIGhlcmUgaXMgcGFyYW1vdW50IGZvciB0aGUgZW50aXJlIGRyaXZlciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgdGhlIGJlZHJvY2suIEkgbmVlZCB0byBzZWUgaG93IHRoZXkncmUgaGFuZGxpbmcgYW55IHBvdGVudGlhbCBoYXJkd2FyZSByZXNldCwgb3IgY2FsaWJyYXRpb24gYW5kIGluaXRpYWwgY29uZmlndXJhdGlvbi4gRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgdGhlIHBvd2VyIGRvbWFpbiBjb25maWd1cmF0aW9ucyBhbmQgY2xvY2sgaW5pdGlhbGl6YXRpb24g4oCTIHRoaXMgaXMgYSBjcml0aWNhbCBhc3BlY3QgZm9yIHRoZSBwcm9wZXIgZnVuY3Rpb25pbmcgb2YgdGhlIFNPQy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk3MTksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxNzo0My4wNzUyOTA5MTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDgxNSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MTU6XFx0c3RhdGljIGludCBhdGgxMmtfY29yZV9zb2NfY3JlYXRlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDgxNjpcXHR7XFxuIDgxNzpcXHRcXHRpbnQgcmV0O1xcbiA4MTg6XFx0XFxuIDgxOTpcXHRcXHRpZiAoYXRoMTJrX2Z0bV9tb2RlKSB7XFxuIDgyMDpcXHRcXHRcXHRhYi1cXHUwMDNlZndfbW9kZSA9IEFUSDEyS19GSVJNV0FSRV9NT0RFX0ZUTTtcXG4gODIxOlxcdFxcdFxcdGF0aDEya19pbmZvKGFiLCBcXFwiQm9vdGluZyBpbiBmdG0gbW9kZVxcXFxuXFxcIik7XFxuIDgyMjpcXHRcXHR9XFxuIDgyMzpcXHRcXG4gODI0OlxcdFxcdHJldCA9IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKGFiKTtcXG4gODI1OlxcdFxcdGlmIChyZXQpIHtcXG4gODI2OlxcdFxcdFxcdGF0aDEya19lcnIoYWIsIFxcXCJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBxbWkgOiVkXFxcXG5cXFwiLCByZXQpO1xcbiA4Mjc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gODI4OlxcdFxcdH1cXG4gODI5OlxcdFxcbiA4MzA6XFx0XFx0YXRoMTJrX2RlYnVnZnNfc29jX2NyZWF0ZShhYik7XFxuIDgzMTpcXHRcXG4gODMyOlxcdFxcdHJldCA9IGF0aDEya19oaWZfcG93ZXJfdXAoYWIpO1xcbiA4MzM6XFx0XFx0aWYgKHJldCkge1xcbiA4MzQ6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBwb3dlciB1cCA6JWRcXFxcblxcXCIsIHJldCk7XFxuIDgzNTpcXHRcXHRcXHRnb3RvIGVycl9xbWlfZGVpbml0O1xcbiA4MzY6XFx0XFx0fVxcbiA4Mzc6XFx0XFxuIDgzODpcXHRcXHRyZXR1cm4gMDtcXG4gODM5OlxcdFxcbiA4NDA6XFx0ZXJyX3FtaV9kZWluaXQ6XFxuIDg0MTpcXHRcXHRhdGgxMmtfZGVidWdmc19zb2NfZGVzdHJveShhYik7XFxuIDg0MjpcXHRcXHRhdGgxMmtfcW1pX2RlaW5pdF9zZXJ2aWNlKGFiKTtcXG4gODQzOlxcdFxcdHJldHVybiByZXQ7XFxuIDg0NDpcXHR9XFxuIDg0NTpcXHRcXG4gODQ2OlxcdHN0YXRpYyB2b2lkIGF0aDEya19jb3JlX3NvY19kZXN0cm95KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDg0NzpcXHR7XFxuIDg0ODpcXHRcXHRhdGgxMmtfaGlmX3Bvd2VyX2Rvd24oYWIsIGZhbHNlKTtcXG4gODQ5OlxcdFxcdGF0aDEya19yZWdfZnJlZShhYik7XFxuIDg1MDpcXHRcXHRhdGgxMmtfZGVidWdmc19zb2NfZGVzdHJveShhYik7XFxuIDg1MTpcXHRcXHRhdGgxMmtfcW1pX2RlaW5pdF9zZXJ2aWNlKGFiKTtcXG4gODUyOlxcdH1cXG4gODUzOlxcdFxcbiA4NTQ6XFx0c3RhdGljIGludCBhdGgxMmtfY29yZV9wZGV2X2NyZWF0ZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKVxcbiA4NTU6XFx0e1xcbiA4NTY6XFx0XFx0aW50IHJldDtcXG4gODU3OlxcdFxcbiA4NTg6XFx0XFx0cmV0ID0gYXRoMTJrX2RwX3BkZXZfYWxsb2MoYWIpO1xcbiA4NTk6XFx0XFx0aWYgKHJldCkge1xcbiA4NjA6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBhdHRhY2ggRFAgcGRldjogJWRcXFxcblxcXCIsIHJldCk7XFxuIDg2MTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA4NjI6XFx0XFx0fVxcbiA4NjM6XFx0XFxuIDg2NDpcXHRcXHRyZXQgPSBhdGgxMmtfdGhlcm1hbF9yZWdpc3RlcihhYik7XFxuIDg2NTpcXHRcXHRpZiAocmV0KSB7XFxuIDg2NjpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiY291bGQgbm90IHJlZ2lzdGVyIHRoZXJtYWwgZGV2aWNlOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gODY3OlxcdFxcdFxcdGdvdG8gZXJyX2RwX3BkZXZfZnJlZTtcXG4gODY4OlxcdFxcdH1cXG4gODY5OlxcdFxcbiA4NzA6XFx0XFx0YXRoMTJrX2RlYnVnZnNfcGRldl9jcmVhdGUoYWIpO1xcbiA4NzE6XFx0XFxuIDg3MjpcXHRcXHRyZXR1cm4gMDtcXG4gODczOlxcdFxcbiA4NzQ6XFx0ZXJyX2RwX3BkZXZfZnJlZTpcXG4gODc1OlxcdFxcdGF0aDEya19kcF9wZGV2X2ZyZWUoYWIpO1xcbiA4NzY6XFx0XFx0cmV0dXJuIHJldDtcXG4gODc3OlxcdH1cXG4gODc4OlxcdFxcbiA4Nzk6XFx0c3RhdGljIHZvaWQgYXRoMTJrX2NvcmVfcGRldl9kZXN0cm95KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDg4MDpcXHR7XFxuIDg4MTpcXHRcXHRhdGgxMmtfdGhlcm1hbF91bnJlZ2lzdGVyKGFiKTtcXG4gODgyOlxcdFxcdGF0aDEya19kcF9wZGV2X2ZyZWUoYWIpO1xcbiA4ODM6XFx0fVxcbiA4ODQ6XFx0XFxuIDg4NTpcXHRzdGF0aWMgaW50IGF0aDEya19jb3JlX3N0YXJ0KHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuIDg4NjpcXHR7XFxuIDg4NzpcXHRcXHRpbnQgcmV0O1xcbiA4ODg6XFx0XFxuIDg4OTpcXHRcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZhYi1cXHUwMDNlY29yZV9sb2NrKTtcXG4gODkwOlxcdFxcbiA4OTE6XFx0XFx0cmV0ID0gYXRoMTJrX3dtaV9hdHRhY2goYWIpO1xcbiA4OTI6XFx0XFx0aWYgKHJldCkge1xcbiA4OTM6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBhdHRhY2ggd21pOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gODk0OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDg5NTpcXHRcXHR9XFxuIDg5NjpcXHRcXG4gODk3OlxcdFxcdHJldCA9IGF0aDEya19odGNfaW5pdChhYik7XFxuIDg5ODpcXHRcXHRpZiAocmV0KSB7XFxuIDg5OTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGluaXQgaHRjOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gOTAwOlxcdFxcdFxcdGdvdG8gZXJyX3dtaV9kZXRhY2g7XFxuIDkwMTpcXHRcXHR9XFxuIDkwMjpcXHRcXG4gOTAzOlxcdFxcdHJldCA9IGF0aDEya19oaWZfc3RhcnQoYWIpO1xcbiA5MDQ6XFx0XFx0aWYgKHJldCkge1xcbiA5MDU6XFx0XFx0XFx0YXRoMTJrX2VycihhYiwgXFxcImZhaWxlZCB0byBzdGFydCBISUY6ICVkXFxcXG5cXFwiLCByZXQpO1xcbiA5MDY6XFx0XFx0XFx0Z290byBlcnJfd21pX2RldGFjaDtcXG4gOTA3OlxcdFxcdH1cXG4gOTA4OlxcdFxcbiA5MDk6XFx0XFx0cmV0ID0gYXRoMTJrX2h0Y193YWl0X3RhcmdldChcXHUwMDI2YWItXFx1MDAzZWh0Yyk7XFxuIDkxMDpcXHRcXHRpZiAocmV0KSB7XFxuIDkxMTpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGNvbm5lY3QgdG8gSFRDOiAlZFxcXFxuXFxcIiwgcmV0KTtcXG4gOTEyOlxcdFxcdFxcdGdvdG8gZXJyX2hpZl9zdG9wO1xcbiA5MTM6XFx0XFx0fVxcbiA5MTQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjQzLjA3NTUxNjg4OVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjcwNDg0ODc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKipcblxuT2theSwgc28gYGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlYCBpcyBiZWluZyBjYWxsZWQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IHRoaXMgZnVuY3Rpb24gYW5kIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBRTUkgKFF1YWxjb21tIE1TTSBJbnRlcmZhY2UpIGluaXRpYWxpemF0aW9uIGZvciB0aGUgYXRoMTJrIGRyaXZlci4gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgZ3JvdW5kd29yayBpcyBsYWlkIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIGZpcm13YXJlLCBsaWtlbHkgc2V0dGluZyB1cCBRTUkgY29ubmVjdGlvbnMgb3IgYmluZGluZ3MsIGFuZCBwb3RlbnRpYWxseSBoYW5kbGluZyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIGV4Y2hhbmdlIHdpdGggdGhlIG1vZGVtLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBlc3RhYmxpc2htZW50IG9mIHRoZSBuZWNlc3NhcnkgZGV2aWNlIGZpbGVzLCBlbmRwb2ludHMsIG9yIHdoYXRldmVyIGludGVyZmFjZSB0aGUgZHJpdmVyIGlzIHVzaW5nIHRvIGludGVyZmFjZSB3aXRoIHRoZSBRdWFsY29tbSBtb2RlbSBvdmVyIHRoZSBRTUkgcHJvdG9jb2wuIEknbSBrZWVuIHRvIGxvb2sgZm9yIGFueSBlcnJvciBoYW5kbGluZyB0byBzZWUgaG93IHJvYnVzdCB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgaXMuIEkgaG9wZSB0aGUgZG9jdW1lbnRhdGlvbiBpcyB3ZWxsIHdyaXR0ZW4uIEknbSBnb2luZyB0byBsb29rIGZvciByZWdpc3RlciBvcGVyYXRpb25zIG5leHQuIEknbSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgYmVpbmcga2lja2VkIG9mZiBhdCB0aGlzIHN0YWdlLiBJdCdzIHRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUyMCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6NDYuNzQ2MDA0MjQzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk5Njc5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9NDAwOT1zdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDA4MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjQwODI6aW50IGF0aDEya19xbWlfaW5pdF9zZXJ2aWNlKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmg9NjQ4PXZvaWQgYXRoMTJrX3FtaV9kZWluaXRfc2VydmljZShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5oOjY0OTppbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuaC02NTAtdm9pZCBhdGgxMmtfcW1pX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjQ2Ljg5NTk4MzM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMjE1ODYxNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUgd2UgZ28uLi5cblxuKipEaXZpbmcgaW50byBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzIGZ1bmN0aW9uLCBgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2VgLiBGcm9tIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB3ZSdyZSBkZWFsaW5nIHdpdGggaW5pdGlhbGl6aW5nIGEgUU1JIHNlcnZpY2Ugd2l0aGluIHRoZSBhdGgxMmsgZHJpdmVyLCBsaWtlbHkgcmVsYXRlZCB0byBRdWFsY29tbSdzIG1lc3NhZ2luZyBpbnRlcmZhY2UuIFRoYXQgbWVhbnMgd2UncmUgcHJvYmFibHkgbG9va2luZyBhdCBzZXR0aW5nIHVwIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUgb3ZlciBhIFFNSSBsaW5rLCBwZXJoYXBzIGZvciBkYXRhIHRyYW5zZmVyLCBjb250cm9sLCBvciBjb25maWd1cmF0aW9uIG9mIHRoZSB3aXJlbGVzcyBoYXJkd2FyZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gcmVnaXN0ZXIgb3IgZW5hYmxlIGEgUU1JIHNlcnZpY2UuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2Ugc2VydmljZSBpZGVudGlmaWVycyAoU0lEcyksIGhhbmRsZXIgZnVuY3Rpb25zLCBhbmQgYW55IGFzc29jaWF0ZWQgY29udGV4dCBvciBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoZSBRTUkgaW50ZXJhY3Rpb24uIEhvcGVmdWxseSB0aGVyZSBhcmUgZXJyb3IgY2hlY2tzIC0gYWx3YXlzIGEgbXVzdCB3aXRoIHRoZXNlIGxvdy1sZXZlbCBkcml2ZXJzLiBBIGdsYW5jZSBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBtaWdodCBiZSBoZWxwZnVsIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGRlcGVuZCBvbiB0aGlzIHNlcnZpY2UgYmVpbmcgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBlbnN1cmluZyBldmVyeXRoaW5nIGlzIHByb3Blcmx5IGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQgYW5kIGRlLWFsbG9jYXRlZC4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGVzZSBkcml2ZXJzLCBJIHdpbGwgYmUgbG9va2luZyBvdXQgZm9yIGFueSByYWNlIGNvbmRpdGlvbnMgb3IgY29uY3VycmVuY3kgaXNzdWVzIHdoZW4gbXVsdGlwbGUgUU1JIG1lc3NhZ2VzIGFycml2ZSBvciBhcmUgdHJhbnNtaXR0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMTA4LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6NTIuMDE3NTcyNTc1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTE3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDgyLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNDA4MjpcXHRpbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG40MDgzOlxcdHtcXG40MDg0OlxcdFxcdGludCByZXQ7XFxuNDA4NTpcXHRcXG40MDg2OlxcdFxcdG1lbXNldChcXHUwMDI2YWItXFx1MDAzZXFtaS50YXJnZXQsIDAsIHNpemVvZihzdHJ1Y3QgdGFyZ2V0X2luZm8pKTtcXG40MDg3OlxcdFxcdG1lbXNldChcXHUwMDI2YWItXFx1MDAzZXFtaS50YXJnZXRfbWVtLCAwLCBzaXplb2Yoc3RydWN0IHRhcmdldF9tZW1fY2h1bmspKTtcXG40MDg4OlxcdFxcdGFiLVxcdTAwM2VxbWkuYWIgPSBhYjtcXG40MDg5OlxcdFxcbjQwOTA6XFx0XFx0YWItXFx1MDAzZXFtaS50YXJnZXRfbWVtX21vZGUgPSBhYi1cXHUwMDNldGFyZ2V0X21lbV9tb2RlO1xcbjQwOTE6XFx0XFx0cmV0ID0gcW1pX2hhbmRsZV9pbml0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSwgQVRIMTJLX1FNSV9SRVNQX0xFTl9NQVgsXFxuNDA5MjpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2YXRoMTJrX3FtaV9vcHMsIGF0aDEya19xbWlfbXNnX2hhbmRsZXJzKTtcXG40MDkzOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuNDA5NDpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBpbml0aWFsaXplIHFtaSBoYW5kbGVcXFxcblxcXCIpO1xcbjQwOTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG40MDk2OlxcdFxcdH1cXG40MDk3OlxcdFxcbjQwOTg6XFx0XFx0YWItXFx1MDAzZXFtaS5ldmVudF93cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKFxcXCJhdGgxMmtfcW1pX2RyaXZlcl9ldmVudFxcXCIsIDApO1xcbjQwOTk6XFx0XFx0aWYgKCFhYi1cXHUwMDNlcW1pLmV2ZW50X3dxKSB7XFxuNDEwMDpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGFsbG9jYXRlIHdvcmtxdWV1ZVxcXFxuXFxcIik7XFxuNDEwMTpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG40MTAyOlxcdFxcdH1cXG40MTAzOlxcdFxcbjQxMDQ6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmFiLVxcdTAwM2VxbWkuZXZlbnRfbGlzdCk7XFxuNDEwNTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YWItXFx1MDAzZXFtaS5ldmVudF9sb2NrKTtcXG40MTA2OlxcdFxcdElOSVRfV09SSyhcXHUwMDI2YWItXFx1MDAzZXFtaS5ldmVudF93b3JrLCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKTtcXG40MTA3OlxcdFxcbjQxMDg6XFx0XFx0cmV0ID0gcW1pX2FkZF9sb29rdXAoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBRTUlfU0VSVklDRV9JRF9XTEZXLFxcbjQxMDk6XFx0XFx0XFx0XFx0ICAgICBBVEgxMktfUU1JX1dMRldfU0VSVklDRV9WRVJTX1YwMSxcXG40MTEwOlxcdFxcdFxcdFxcdCAgICAgYWItXFx1MDAzZXFtaS5zZXJ2aWNlX2luc19pZCk7XFxuNDExMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjQxMTI6XFx0XFx0XFx0YXRoMTJrX3dhcm4oYWIsIFxcXCJmYWlsZWQgdG8gYWRkIHFtaSBsb29rdXBcXFxcblxcXCIpO1xcbjQxMTM6XFx0XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWItXFx1MDAzZXFtaS5ldmVudF93cSk7XFxuNDExNDpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQxMTU6XFx0XFx0fVxcbjQxMTY6XFx0XFxuNDExNzpcXHRcXHRyZXR1cm4gcmV0O1xcbjQxMTg6XFx0fVxcbjQxMTk6XFx0XFxuNDEyMDpcXHR2b2lkIGF0aDEya19xbWlfZGVpbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG40MTIxOlxcdHtcXG40MTIyOlxcdFxcdGlmICghYWItXFx1MDAzZXFtaS5hYilcXG40MTIzOlxcdFxcdFxcdHJldHVybjtcXG40MTI0OlxcdFxcbjQxMjU6XFx0XFx0cW1pX2hhbmRsZV9yZWxlYXNlKFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSk7XFxuNDEyNjpcXHRcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZhYi1cXHUwMDNlcW1pLmV2ZW50X3dvcmspO1xcbjQxMjc6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUoYWItXFx1MDAzZXFtaS5ldmVudF93cSk7XFxuNDEyODpcXHRcXHRhdGgxMmtfcW1pX2F1eF91Y19mcmVlKGFiKTtcXG40MTI5OlxcdFxcdGF0aDEya19xbWlfbTNfZnJlZShhYik7XFxuNDEzMDpcXHRcXHRhdGgxMmtfcW1pX2ZyZWVfdGFyZ2V0X21lbV9jaHVuayhhYik7XFxuNDEzMTpcXHRcXHRhYi1cXHUwMDNlcW1pLmFiID0gTlVMTDtcXG40MTMyOlxcdH1cXG40MTMzOlxcdFxcbjQxMzQ6XFx0dm9pZCBhdGgxMmtfcW1pX2ZyZWVfcmVzb3VyY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG40MTM1OlxcdHtcXG40MTM2OlxcdFxcdGF0aDEya19xbWlfZnJlZV90YXJnZXRfbWVtX2NodW5rKGFiKTtcXG40MTM3OlxcdFxcdGF0aDEya19xbWlfYXV4X3VjX2ZyZWUoYWIpO1xcbjQxMzg6XFx0XFx0YXRoMTJrX3FtaV9tM19mcmVlKGFiKTtcXG40MTM5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6NTIuMDE5MTY3NDA0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NjUwNTYyODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHByb2Nlc3MsIHRoaW5raW5nIGl0IHRocm91Z2ggZnJvbSBhIHRlY2huaWNhbCBwZXJzcGVjdGl2ZS5cblxuKipDb25uZWN0aW5nIHRvIHRoZSBRTUkgU2VydmljZSoqXG5cbkFscmlnaHQsIHNvIGBxbWlfYWRkX2xvb2t1cGAgaXMgY2FsbGVkLiBUaGF0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIFRoaXMgaXMgdGhlIGluaXRpYWwgc3RlcDogaXQncyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuIEknbSBlc3NlbnRpYWxseSB0ZWxsaW5nIHRoZSBzeXN0ZW0sIFwiSGV5LCBJJ20gaW50ZXJlc3RlZCBpbiB0aGlzIHNwZWNpZmljIFFNSSBzZXJ2aWNlLiBLZWVwIGFuIGV5ZSBvdXQgZm9yIGl0LlwiIEknbSBzZXR0aW5nIHVwIGEgc29ydCBvZiBsaXN0ZW5pbmcgcG9zdC5cblxuQW5kIHRoZW4sIHRoZSBtYWdpYyBoYXBwZW5zLiBPbmNlIHRoZSBzZXJ2aWNlIEknbSBsb29raW5nIGZvciBhY3R1YWxseSAqYXBwZWFycyog4oCTIGl0J3MgZGlzY292ZXJlZCBhbmQgYWNjZXNzaWJsZSDigJMgdGhlIHN5c3RlbSB0cmlnZ2VycyB0aGUgYG5ld19zZXJ2ZXJgIGNhbGxiYWNrIGZ1bmN0aW9uIGRlZmluZWQgd2l0aGluIGBhdGgxMmtfcW1pX29wc2AuIFRoYXQncyB0aGUgaG9vaywgdGhlIHNpZ25hbCB0aGF0IHRoZSBzZXJ2aWNlIGlzIHJlYWR5LiBUaGlzIG1ha2VzIHN1cmUgbXkgc3lzdGVtIGtub3dzIGV4YWN0bHkgaG93IHRvIGhhbmRsZSB0aGUgY29ubmVjdGlvbiB3aGVuIHRoZSBzZXJ2aWNlIGlzIGxpdmUuIEl0IHByb3ZpZGVzIGEgbWVhbnMgdG8gc2V0IHVwIHRoZSBjb21tdW5pY2F0aW9ucyBvbmNlIHRoZSBzZXJ2aWNlIGlzIGF2YWlsYWJsZS4gUHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gRWZmaWNpZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQ3NCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTc6NTUuNzg0MjI2MTE3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzk4MjEwMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX3FtaV9vcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYz0zOTI3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX21zZ19oYW5kbGVyIGF0aDEya19xbWlfbXNnX2hhbmRsZXJzW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5NTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTU0OnN0YXRpYyBpbnQgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5NTUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcW1pX3NlcnZpY2UgKnNlcnZpY2UpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5NzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTc5OnN0YXRpYyB2b2lkIGF0aDEya19xbWlfb3BzX2RlbF9zZXJ2ZXIoc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9oZGwsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy0zOTgwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBxbWlfc2VydmljZSAqc2VydmljZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtMzk4OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjM5ODk6c3RhdGljIGNvbnN0IHN0cnVjdCBxbWlfb3BzIGF0aDEya19xbWlfb3BzID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM6Mzk5MDpcXHQubmV3X3NlcnZlciA9IGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXIsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYzozOTkxOlxcdC5kZWxfc2VydmVyID0gYXRoMTJrX3FtaV9vcHNfZGVsX3NlcnZlcixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jLTM5OTItfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmM9NDA4Mj1pbnQgYXRoMTJrX3FtaV9pbml0X3NlcnZpY2Uoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmMtNDA5MS1cXHRyZXQgPSBxbWlfaGFuZGxlX2luaXQoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBBVEgxMktfUU1JX1JFU1BfTEVOX01BWCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jOjQwOTI6XFx0XFx0XFx0ICAgICAgXFx1MDAyNmF0aDEya19xbWlfb3BzLCBhdGgxMmtfcW1pX21zZ19oYW5kbGVycyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuYy00MDkzLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE3OjU2LjM2NDA1MzAxNVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjIzODk0MjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcmAgZnVuY3Rpb24uIEFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBteSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBnb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcmAqKlxuXG5BbHJpZ2h0LCBzbyAqYXRoMTJrKiwgdGhhdCBzY3JlYW1zIFF1YWxjb21tIEF0aGVyb3MgV2lGaSwgc3BlY2lmaWNhbGx5IHRoZWlyIG5ld2VyIGdlbmVyYXRpb24gY2hpcHNldHMsIHJpZ2h0PyBBbmQgKnFtaSosIHRoYXQncyB1bmRvdWJ0ZWRseSB0aGUgUXVhbGNvbW0gSW50ZXJmYWNlLCB1c2VkIGZvciBtb2RlbSBjb250cm9sIGFuZCwgbW9yZSByZWxldmFudCBoZXJlLCBsaWtlbHkgc29tZSBmb3JtIG9mIGNvbW11bmljYXRpb24gd2l0aCBhIGZpcm13YXJlIHJ1bm5pbmcgb24gdGhlIFdpRmkgY2hpcHNldCBpdHNlbGYuIFRoZSAqb3BzKiBwYXJ0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgYWJvdXQgZGVmaW5pbmcgYSBzZXQgb2YgKm9wZXJhdGlvbnMqIG9yIG1ldGhvZHMuIEZpbmFsbHksICpuZXdfc2VydmVyKi4uLiBUaGlzIHNjcmVhbXMgaW5pdGlhbGl6YXRpb24sIGNyZWF0aW9uLCBwcm9iYWJseSBzZXR1cCBvZiBhIGNvbW11bmljYXRpb24gY2hhbm5lbCBvciBzZXJ2ZXIgc2lkZSBjb21wb25lbnQuXG5cbk15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggcG9zc2libGUgc2NlbmFyaW9zOiBJcyB0aGlzIGhhbmRsaW5nIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCBmb3IgYSBuZXcgUU1JIGNvbm5lY3Rpb24gdG8gdGhlIFdpRmkgZmlybXdhcmU/IE9yIHBlcmhhcHMgdGhlIHNldHVwIG9mIGEgUU1JIFwic2VydmVyXCIgaW5zdGFuY2Ugd2l0aGluIHRoZSBob3N0IGRyaXZlciwgZW5hYmxpbmcgaXQgdG8gYWNjZXB0IGNvbW1hbmRzIGFuZCBkYXRhIGZyb20gdGhlIGZpcm13YXJlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgc2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgcmVsYXRlZCB0byBhIG5ldyBjaGFubmVsP1xuXG5JJ20gbWVudGFsbHkgcHJlcGFyaW5nIHRvIHNjcnV0aW5pemUgdGhpcyBmdW5jdGlvbiBmb3IgdGhpbmdzIGxpa2U6XG5cbiogICAqKlJlc291cmNlIGFsbG9jYXRpb24qKjogTWVtb3J5IGJlaW5nIGFsbG9jYXRlZCBmb3IgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgaG93IGFyZSB0aGVzZSByZXNvdXJjZXMgbWFuYWdlZC5cbiogICAqKkVycm9yIGhhbmRsaW5nKio6IFdoZXJlIGFyZSBjaGVja3MgZm9yIGZhaWx1cmUgaGFwcGVuaW5nPyBXaGF0IGhhcHBlbnMgd2hlbiBhIHJlc291cmNlIGZhaWxzIHRvIGFsbG9jYXRlP1xuKiAgICoqU2VjdXJpdHkgaGFyZGVuaW5nKio6IENoZWNrIGZvciBhbnkgcG9zc2libGUgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIGluaGVyZW50IGluIGEgbmV3IGNoYW5uZWwuXG4qICAgKipGaXJtd2FyZSBpbnRlcmFjdGlvbioqOiBTZWUgZXhhY3RseSB3aGF0IGlzIGJlaW5nIGNvbW11bmljYXRlZCwgaWYgaXQgc2VlbXMgcmVhc29uYWJsZS5cbiogICAqKkNvbmN1cnJlbmN5Kio6IEFyZSB0aGVyZSBhbnkgcmFjZSBjb25kaXRpb25zIGFuZCBsb2NrLXVwcyBoZXJlP1xuKiAgICoqSW5pdGlhbGl6YXRpb24gc3RlcHMqKjogSSdtIGV4cGVjdGluZyBhIHNlcmllcyBvZiBmdW5jdGlvbiBjYWxscyB0byBpbml0aWFsaXplIHRoZSBRTUkgaW50ZXJmYWNlLiBQcm9iYWJseSBhIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBwb3RlbnRpYWxseSBzZXR0aW5nIHVwIGJ1ZmZlcnMsIGV0Yy5cbiogICAqKkRlcGVuZGVuY2llcyoqOiBJJ20gZ29pbmcgdG8gbG9vayBhdCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgdGhpcyBpcyBjYWxsaW5nIG9yIHVzaW5nOyB1bmRlcnN0YW5kIHdoYXQgZGF0YSBpdCdzIHBhc3NpbmcsIGFuZCB3aGF0IGNvbnRleHQgaXQncyBvcGVyYXRpbmcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NDI2LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTg6MDIuNTg3OTUxODc3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MTY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM5NTQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzOTU0OlxcdHN0YXRpYyBpbnQgYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcihzdHJ1Y3QgcW1pX2hhbmRsZSAqcW1pX2hkbCxcXG4zOTU1OlxcdFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHFtaV9zZXJ2aWNlICpzZXJ2aWNlKVxcbjM5NTY6XFx0e1xcbjM5NTc6XFx0XFx0c3RydWN0IGF0aDEya19xbWkgKnFtaSA9IGNvbnRhaW5lcl9vZihxbWlfaGRsLCBzdHJ1Y3QgYXRoMTJrX3FtaSwgaGFuZGxlKTtcXG4zOTU4OlxcdFxcdHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIgPSBxbWktXFx1MDAzZWFiO1xcbjM5NTk6XFx0XFx0c3RydWN0IHNvY2thZGRyX3FydHIgKnNxID0gXFx1MDAyNnFtaS1cXHUwMDNlc3E7XFxuMzk2MDpcXHRcXHRpbnQgcmV0O1xcbjM5NjE6XFx0XFxuMzk2MjpcXHRcXHRzcS1cXHUwMDNlc3FfZmFtaWx5ID0gQUZfUUlQQ1JUUjtcXG4zOTYzOlxcdFxcdHNxLVxcdTAwM2VzcV9ub2RlID0gc2VydmljZS1cXHUwMDNlbm9kZTtcXG4zOTY0OlxcdFxcdHNxLVxcdTAwM2VzcV9wb3J0ID0gc2VydmljZS1cXHUwMDNlcG9ydDtcXG4zOTY1OlxcdFxcbjM5NjY6XFx0XFx0cmV0ID0ga2VybmVsX2Nvbm5lY3QocW1pX2hkbC1cXHUwMDNlc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopc3EsXFxuMzk2NzpcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqc3EpLCAwKTtcXG4zOTY4OlxcdFxcdGlmIChyZXQpIHtcXG4zOTY5OlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwicW1pIGZhaWxlZCB0byBjb25uZWN0IHRvIHJlbW90ZSBzZXJ2aWNlICVkXFxcXG5cXFwiLCByZXQpO1xcbjM5NzA6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zOTcxOlxcdFxcdH1cXG4zOTcyOlxcdFxcbjM5NzM6XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19RTUksIFxcXCJxbWkgd2lmaSBmdyBxbWkgc2VydmljZSBjb25uZWN0ZWRcXFxcblxcXCIpO1xcbjM5NzQ6XFx0XFx0YXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfcG9zdChxbWksIEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0FSUklWRSwgTlVMTCk7XFxuMzk3NTpcXHRcXG4zOTc2OlxcdFxcdHJldHVybiByZXQ7XFxuMzk3NzpcXHR9XFxuMzk3ODpcXHRcXG4zOTc5OlxcdHN0YXRpYyB2b2lkIGF0aDEya19xbWlfb3BzX2RlbF9zZXJ2ZXIoc3RydWN0IHFtaV9oYW5kbGUgKnFtaV9oZGwsXFxuMzk4MDpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgcW1pX3NlcnZpY2UgKnNlcnZpY2UpXFxuMzk4MTpcXHR7XFxuMzk4MjpcXHRcXHRzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pID0gY29udGFpbmVyX29mKHFtaV9oZGwsIHN0cnVjdCBhdGgxMmtfcW1pLCBoYW5kbGUpO1xcbjM5ODM6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cXHUwMDNlYWI7XFxuMzk4NDpcXHRcXG4zOTg1OlxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfUU1JLCBcXFwicW1pIHdpZmkgZncgZGVsIHNlcnZlclxcXFxuXFxcIik7XFxuMzk4NjpcXHRcXHRhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF9wb3N0KHFtaSwgQVRIMTJLX1FNSV9FVkVOVF9TRVJWRVJfRVhJVCwgTlVMTCk7XFxuMzk4NzpcXHR9XFxuMzk4ODpcXHRcXG4zOTg5OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgcW1pX29wcyBhdGgxMmtfcW1pX29wcyA9IHtcXG4zOTkwOlxcdFxcdC5uZXdfc2VydmVyID0gYXRoMTJrX3FtaV9vcHNfbmV3X3NlcnZlcixcXG4zOTkxOlxcdFxcdC5kZWxfc2VydmVyID0gYXRoMTJrX3FtaV9vcHNfZGVsX3NlcnZlcixcXG4zOTkyOlxcdH07XFxuMzk5MzpcXHRcXG4zOTk0OlxcdHN0YXRpYyBpbnQgYXRoMTJrX3FtaV9ldmVudF9ob3N0X2NhcChzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxcbjM5OTU6XFx0e1xcbjM5OTY6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cXHUwMDNlYWI7XFxuMzk5NzpcXHRcXHRpbnQgcmV0O1xcbjM5OTg6XFx0XFxuMzk5OTpcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmQoYWIpO1xcbjQwMDA6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG40MDAxOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiZmFpbGVkIHRvIHNlbmQgcW1pIGhvc3QgY2FwIGZvciBkZXZpY2UgaWQgJWQ6ICVkXFxcXG5cXFwiLFxcbjQwMDI6XFx0XFx0XFx0XFx0ICAgIGFiLVxcdTAwM2VkZXZpY2VfaWQsIHJldCk7XFxuNDAwMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjQwMDQ6XFx0XFx0fVxcbjQwMDU6XFx0XFxuNDAwNjpcXHRcXHRyZXR1cm4gcmV0O1xcbjQwMDc6XFx0fVxcbjQwMDg6XFx0XFxuNDAwOTpcXHRzdGF0aWMgdm9pZCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG40MDEwOlxcdHtcXG40MDExOlxcdFxcdHN0cnVjdCBhdGgxMmtfcW1pICpxbWkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aDEya19xbWksXFxuNDAxMjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBldmVudF93b3JrKTtcXG40MDEzOlxcdFxcdHN0cnVjdCBhdGgxMmtfcW1pX2RyaXZlcl9ldmVudCAqZXZlbnQ7XFxuNDAxNDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVxcdTAwM2VhYjtcXG40MDE1OlxcdFxcdGludCByZXQ7XFxuNDAxNjpcXHRcXG40MDE3OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2cW1pLVxcdTAwM2VldmVudF9sb2NrKTtcXG40MDE4OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShcXHUwMDI2cW1pLVxcdTAwM2VldmVudF9saXN0KSkge1xcbjQwMTk6XFx0XFx0XFx0ZXZlbnQgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xpc3QsXFxuNDAyMDpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGF0aDEya19xbWlfZHJpdmVyX2V2ZW50LCBsaXN0KTtcXG40MDIxOlxcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZldmVudC1cXHUwMDNlbGlzdCk7XFxuNDAyMjpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2cW1pLVxcdTAwM2VldmVudF9sb2NrKTtcXG40MDIzOlxcdFxcbjQwMjQ6XFx0XFx0XFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX1VOUkVHSVNURVJJTkcsIFxcdTAwMjZhYi1cXHUwMDNlZGV2X2ZsYWdzKSlcXG40MDI1OlxcdFxcdFxcdFxcdGdvdG8gc2tpcDtcXG40MDI2OlxcdFxcbjQwMjc6XFx0XFx0XFx0c3dpdGNoIChldmVudC1cXHUwMDNldHlwZSkge1xcbjQwMjg6XFx0XFx0XFx0Y2FzZSBBVEgxMktfUU1JX0VWRU5UX1NFUlZFUl9BUlJJVkU6XFxuNDAyOTpcXHRcXHRcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX2V2ZW50X3NlcnZlcl9hcnJpdmUocW1pKTtcXG40MDMwOlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQwMzE6XFx0XFx0XFx0XFx0XFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpO1xcbjQwMzI6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDAzMzpcXHRcXHRcXHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0VYSVQ6XFxuNDAzNDpcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX0NSQVNIX0ZMVVNILCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDAzNTpcXHRcXHRcXHRcXHRicmVhaztcXG40MDM2OlxcdFxcdFxcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9SRVFVRVNUX01FTTpcXG40MDM3OlxcdFxcdFxcdFxcdHJldCA9IGF0aDEya19xbWlfZXZlbnRfbWVtX3JlcXVlc3QocW1pKTtcXG40MDM4OlxcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjQwMzk6XFx0XFx0XFx0XFx0XFx0c2V0X2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpO1xcbjQwNDA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNDA0MTpcXHRcXHRcXHRjYXNlIEFUSDEyS19RTUlfRVZFTlRfRldfTUVNX1JFQURZOlxcbjQwNDI6XFx0XFx0XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9ldmVudF9sb2FkX2JkZihxbWkpO1xcbjQwNDM6XFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuNDA0NDpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX1FNSV9GQUlMLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDA0NTpcXHRcXHRcXHRcXHRicmVhaztcXG40MDQ2OlxcdFxcdFxcdGNhc2UgQVRIMTJLX1FNSV9FVkVOVF9GV19SRUFEWTpcXG40MDQ3OlxcdFxcdFxcdFxcdGNsZWFyX2JpdChBVEgxMktfRkxBR19RTUlfRkFJTCwgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpO1xcbjQwNDg6XFx0XFx0XFx0XFx0aWYgKHRlc3RfYml0KEFUSDEyS19GTEFHX1FNSV9GV19SRUFEWV9DT01QTEVURSwgXFx1MDAyNmFiLVxcdTAwM2VkZXZfZmxhZ3MpKSB7XFxuNDA0OTpcXHRcXHRcXHRcXHRcXHRpZiAoYWItXFx1MDAzZWlzX3Jlc2V0KVxcbjQwNTA6XFx0XFx0XFx0XFx0XFx0XFx0YXRoMTJrX2hhbF9kdW1wX3Nybmdfc3RhdHMoYWIpO1xcbjQwNTE6XFx0XFxuNDA1MjpcXHRcXHRcXHRcXHRcXHRzZXRfYml0KEFUSDEyS19GTEFHX1JFQ09WRVJZLCBcXHUwMDI2YWItXFx1MDAzZWRldl9mbGFncyk7XFxuNDA1MzpcXHRcXHRcXHRcXHRcXHRxdWV1ZV93b3JrKGFiLVxcdTAwM2V3b3JrcXVldWUsIFxcdTAwMjZhYi1cXHUwMDNlcmVzdGFydF93b3JrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTg6MDIuNTg4NTQ3MDI3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MzA0MzA5MzM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgUmVhc29uaW5nIGZvciBUZXN0aW5nIHRoZSBhdGgxMmsgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRvIHRyaWdnZXIgYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgIGluIHRoZSBgYXRoMTJrYCBkcml2ZXIuIEkga25vdyB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gYSBRTUkgc2VydmljZSBpcyBkaXNjb3ZlcmVkLiBOb3csIFN5emthbGxlciBjYW4gZW11bGF0ZSBRTUkgc2VydmljZXMgdXNpbmcgQUZfUUlQQ1JUUiBzb2NrZXRzIOKAkyB0aGF0J3MgcG90ZW50aWFsbHkgdXNlZnVsLiBCdXQgd2FpdCwgYGF0aDEya2AgaXMgYSBQQ0kgZHJpdmVyLCBpc24ndCBpdD8gSXQgaGFzIHRvIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIHRoZSBQQ0kgc3Vic3lzdGVtLlxuXG5BaGEhIFN5emthbGxlciBoYXMgdGhpcyBgc3l6X3BjaV9kZXZpY2VfYWRkYCBmdW5jdGlvbi4gQ2FuIEkgdXNlIHRoYXQgdG8gbXkgYWR2YW50YWdlPyBJZiBJIGNhbiBhZGQgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgdXNpbmcgU3l6a2FsbGVyIHRoYXQgKm1hdGNoZXMqIGBhdGgxMmtgJ3MgdmVuZG9yIGFuZCBkZXZpY2UgSUQsIHRoZW4gYGF0aDEya19wY2lfcHJvYmVgIHNob3VsZCBnZXQgY2FsbGVkLiBHb29kLlxuXG5PbmNlIGBhdGgxMmtfcGNpX3Byb2JlYCBydW5zLCBpdCB3aWxsIGNhbGwgYGF0aDEya19jb3JlX2luaXRgLCB3aGljaCB0aGVuIGxlYWRzIHRvIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAuIEFuZCAqdGhhdCogZnVuY3Rpb24gcmVnaXN0ZXJzIGEgUU1JIGNsaWVudC4gUGVyZmVjdCFcblxuTm93LCB0aGUgY3J1Y2lhbCBzdGVwOiBJZiBTeXprYWxsZXIgKmFsc28qIGVtdWxhdGVzIGEgUU1JIHNlcnZlciBvbiBBRl9RSVBDUlRSLCB0aGF0IHNob3VsZCB0cmlnZ2VyIGBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyYCBvbiB0aGUgY2xpZW50IHNpZGUuIFRoYXQncyB0aGUgbGluayBJIHdhcyBsb29raW5nIGZvci4gVGhlbiwgYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgd2lsbCBiZSBjYWxsZWQuIE5vdyBJIGp1c3QgbmVlZCB0byBkaWcgaW50byBgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlYCBhbmQgc2VlIHdoYXQgaGFwcGVucyB0aGVyZS4gVGhhdCdzIHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzdHVmZiBzaG91bGQgYmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2ODAwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjczLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTg6MTYuODkyODYwMzMyWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTA3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9xbWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNzU4LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzc1ODpcXHRpbnQgYXRoMTJrX3FtaV9ldmVudF9zZXJ2ZXJfYXJyaXZlKHN0cnVjdCBhdGgxMmtfcW1pICpxbWkpXFxuMzc1OTpcXHR7XFxuMzc2MDpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVxcdTAwM2VhYiwgKmJsb2NrX2FiO1xcbjM3NjE6XFx0XFx0c3RydWN0IGF0aDEya19od19ncm91cCAqYWcgPSBhYi1cXHUwMDNlYWc7XFxuMzc2MjpcXHRcXHRpbnQgcmV0O1xcbjM3NjM6XFx0XFxuMzc2NDpcXHRcXHRhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZChhYik7XFxuMzc2NTpcXHRcXG4zNzY2OlxcdFxcdHJldCA9IGF0aDEya19xbWlfZndfaW5kX3JlZ2lzdGVyX3NlbmQoYWIpO1xcbjM3Njc6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4zNzY4OlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwicW1pIGZhaWxlZCB0byBzZW5kIEZXIGluZGljYXRpb24gUU1JOiVkXFxcXG5cXFwiLCByZXQpO1xcbjM3Njk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zNzcwOlxcdFxcdH1cXG4zNzcxOlxcdFxcbjM3NzI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZxbWktXFx1MDAzZWV2ZW50X2xvY2spO1xcbjM3NzM6XFx0XFxuMzc3NDpcXHRcXHRhdGgxMmtfcW1pX3NldF9ldmVudF9ibG9jayhxbWksIHRydWUpO1xcbjM3NzU6XFx0XFxuMzc3NjpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2cW1pLVxcdTAwM2VldmVudF9sb2NrKTtcXG4zNzc3OlxcdFxcbjM3Nzg6XFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2YWctXFx1MDAzZW11dGV4KTtcXG4zNzc5OlxcdFxcbjM3ODA6XFx0XFx0aWYgKGF0aDEya19xbWlfaHdfZ3JvdXBfaG9zdF9jYXBfcmVhZHkoYWcpKSB7XFxuMzc4MTpcXHRcXHRcXHRhdGgxMmtfY29yZV9od19ncm91cF9zZXRfbWxvX2NhcGFibGUoYWcpO1xcbjM3ODI6XFx0XFxuMzc4MzpcXHRcXHRcXHRibG9ja19hYiA9IGF0aDEya19xbWlfaHdfZ3JvdXBfZmluZF9ibG9ja2VkKGFnKTtcXG4zNzg0OlxcdFxcdFxcdGlmIChibG9ja19hYilcXG4zNzg1OlxcdFxcdFxcdFxcdGF0aDEya19xbWlfdHJpZ2dlcl9ob3N0X2NhcChibG9ja19hYik7XFxuMzc4NjpcXHRcXHR9XFxuMzc4NzpcXHRcXG4zNzg4OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2YWctXFx1MDAzZW11dGV4KTtcXG4zNzg5OlxcdFxcbjM3OTA6XFx0XFx0cmV0dXJuIHJldDtcXG4zNzkxOlxcdH1cXG4zNzkyOlxcdFxcbjM3OTM6XFx0LyogY2xhbmcgc3RhY2sgdXNhZ2UgZXhwbG9kZXMgaWYgdGhpcyBpcyBpbmxpbmVkICovXFxuMzc5NDpcXHRzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrXFxuMzc5NTpcXHRpbnQgYXRoMTJrX3FtaV9ldmVudF9tZW1fcmVxdWVzdChzdHJ1Y3QgYXRoMTJrX3FtaSAqcW1pKVxcbjM3OTY6XFx0e1xcbjM3OTc6XFx0XFx0c3RydWN0IGF0aDEya19iYXNlICphYiA9IHFtaS1cXHUwMDNlYWI7XFxuMzc5ODpcXHRcXHRpbnQgcmV0O1xcbjM3OTk6XFx0XFxuMzgwMDpcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX3Jlc3BvbmRfZndfbWVtX3JlcXVlc3QoYWIpO1xcbjM4MDE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4zODAyOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwicW1pIGZhaWxlZCB0byByZXNwb25kIGZ3IG1lbSByZXE6JWRcXFxcblxcXCIsIHJldCk7XFxuMzgwMzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM4MDQ6XFx0XFx0fVxcbjM4MDU6XFx0XFxuMzgwNjpcXHRcXHRyZXR1cm4gcmV0O1xcbjM4MDc6XFx0fVxcbjM4MDg6XFx0XFxuMzgwOTpcXHQvKiBjbGFuZyBzdGFjayB1c2FnZSBleHBsb2RlcyBpZiB0aGlzIGlzIGlubGluZWQgKi9cXG4zODEwOlxcdHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2tcXG4zODExOlxcdGludCBhdGgxMmtfcW1pX2V2ZW50X2xvYWRfYmRmKHN0cnVjdCBhdGgxMmtfcW1pICpxbWkpXFxuMzgxMjpcXHR7XFxuMzgxMzpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gcW1pLVxcdTAwM2VhYjtcXG4zODE0OlxcdFxcdGNvbnN0IHN0cnVjdCBhdGgxMmtfaHdfcGFyYW1zICpod19wYXJhbXMgPSBhYi1cXHUwMDNlaHdfcGFyYW1zO1xcbjM4MTU6XFx0XFx0aW50IHJldDtcXG4zODE2OlxcdFxcbjM4MTc6XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9yZXF1ZXN0X3RhcmdldF9jYXAoYWIpO1xcbjM4MTg6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4zODE5OlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwicW1pIGZhaWxlZCB0byByZXEgdGFyZ2V0IGNhcGFiaWxpdGllczolZFxcXFxuXFxcIiwgcmV0KTtcXG4zODIwOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMzgyMTpcXHRcXHR9XFxuMzgyMjpcXHRcXG4zODIzOlxcdFxcdHJldCA9IGF0aDEya19xbWlfbG9hZF9iZGZfcW1pKGFiLCBBVEgxMktfUU1JX0JERl9UWVBFX1JFR0RCKTtcXG4zODI0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMzgyNTpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInFtaSBmYWlsZWQgdG8gbG9hZCByZWdkYiBmaWxlOiVkXFxcXG5cXFwiLCByZXQpO1xcbjM4MjY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zODI3OlxcdFxcdH1cXG4zODI4OlxcdFxcbjM4Mjk6XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9sb2FkX2JkZl9xbWkoYWIsIEFUSDEyS19RTUlfQkRGX1RZUEVfRUxGKTtcXG4zODMwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMzgzMTpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInFtaSBmYWlsZWQgdG8gbG9hZCBib2FyZCBkYXRhIGZpbGU6JWRcXFxcblxcXCIsIHJldCk7XFxuMzgzMjpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbjM4MzM6XFx0XFx0fVxcbjM4MzQ6XFx0XFxuMzgzNTpcXHRcXHRpZiAoaHdfcGFyYW1zLVxcdTAwM2Vkb3dubG9hZF9jYWxpYikge1xcbjM4MzY6XFx0XFx0XFx0cmV0ID0gYXRoMTJrX3FtaV9sb2FkX2JkZl9xbWkoYWIsIEFUSDEyS19RTUlfQkRGX1RZUEVfQ0FMSUJSQVRJT04pO1xcbjM4Mzc6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMzgzODpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInFtaSBmYWlsZWQgdG8gbG9hZCBjYWxpYnJhdGVkIGRhdGEgOiVkXFxcXG5cXFwiLCByZXQpO1xcbjM4Mzk6XFx0XFx0fVxcbjM4NDA6XFx0XFxuMzg0MTpcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX3dsYW5md19tM19pbmZvX3NlbmQoYWIpO1xcbjM4NDI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4zODQzOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwicW1pIGZhaWxlZCB0byBzZW5kIG0zIGluZm8gcmVxOiVkXFxcXG5cXFwiLCByZXQpO1xcbjM4NDQ6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zODQ1OlxcdFxcdH1cXG4zODQ2OlxcdFxcbjM4NDc6XFx0XFx0aWYgKGh3X3BhcmFtcy1cXHUwMDNlZncuZG93bmxvYWRfYXV4X3Vjb2RlKSB7XFxuMzg0ODpcXHRcXHRcXHRyZXQgPSBhdGgxMmtfcW1pX3dsYW5md19hdXhfdWNfaW5mb19zZW5kKGFiKTtcXG4zODQ5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuMzg1MDpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcInFtaSBmYWlsZWQgdG8gc2VuZCBhdXhfdWMgaW5mbyByZXE6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjM4NTE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zODUyOlxcdFxcdFxcdH1cXG4zODUzOlxcdFxcdH1cXG4zODU0OlxcdFxcbjM4NTU6XFx0XFx0cmV0dXJuIHJldDtcXG4zODU2OlxcdH1cXG4zODU3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxODoxNi44OTU2NTU0MTJaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExNTI3MTA4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbXBhY3Qgb2YgdGhlIFBhdGNoOiBBIFN5emthbGxlciBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCBtb2RpZmllcyBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIGFuZCBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBrbm93IHRoYXQgYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgY2FsbHMgdGhlIGZvcm1lciwgYW5kIGBBVEgxMktfUU1JX0VWRU5UX0hPU1RfQ0FQYCB0cmlnZ2VycyB0aGUgbGF0dGVyLiBUaGUgY3JpdGljYWwgbGluayBpcyB3aGV0aGVyIFN5emthbGxlciBjYW4gYWN0dWFsbHkgKnJlYWNoKiB0aGVzZSBmdW5jdGlvbnMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsZXZlcmFnZSBgc3l6X3BjaV9kZXZpY2VfYWRkYCB0byB0cmlnZ2VyIGBhdGgxMmtfcGNpX3Byb2JlYC4gTm93LCBgYXRoMTJrX3BjaV9wcm9iZWAgaXMgYSBjb21wbGV4IGZ1bmN0aW9uLiBJdCdzIGRvaW5nIGEgbG90IG9mIHRoaW5nczogUENJIGNsYWltaW5nLCBNU0kgYWxsb2NhdGlvbiwgTUhJIHJlZ2lzdHJhdGlvbiwgU1JORyBpbml0aWFsaXphdGlvbiwgQ0UgcGlwZSBhbGxvY2F0aW9uLCBJUlEgY29uZmlndXJhdGlvbi4uLiBhbmQgdWx0aW1hdGVseSBjYWxscyBgYXRoMTJrX2NvcmVfaW5pdGAuIElmIGFueSBvZiB0aG9zZSBzdWItZnVuY3Rpb25zIGZhaWwsIGBhdGgxMmtfY29yZV9pbml0YCBpcyBuZXZlciBjYWxsZWQuIFRoaXMgaXMgYSBwb3RlbnRpYWwgaHVyZGxlLlxuXG5TcGVjaWZpY2FsbHksIGBhdGgxMmtfbWhpX3JlZ2lzdGVyYCBzdGFuZHMgb3V0LiBUaGlzIGlzIHRoZSBNb2RlbSBIb3N0IEludGVyZmFjZSwgYSBmYWlybHkgY29tcGxleCBwcm90b2NvbCB0aGF0J3MgbGlrZWx5IHJlbGlhbnQgb24gYWN0dWFsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSdtIHdvbmRlcmluZywgY2FuIHdlIGdldCBhcm91bmQgdGhpcyBpZiB0aGVyZSdzIG5vIHJlYWwgaGFyZHdhcmU/IERvZXMgYGF0aDEya2AgdXNlIFFNSSBvdmVyIE1ISSwgb3Igc29tZXRoaW5nIGVsc2U/XG5cbkEgcXVpY2sgY2hlY2sgb2YgYGF0aDEya19xbWlfb3BzX25ld19zZXJ2ZXJgIHJldmVhbHMgaXQgdXNlcyBgQUZfUUlQQ1JUUmAgLSBJUEMgcm91dGVyISBFeGNlbGxlbnQuIEknbSBub3cgcHJldHR5IHN1cmUgdGhhdCBpdCBjb25uZWN0cyB0byB0aGUgUU1JIHNlcnZpY2UgdmlhIElQQyByb3V0ZXIsIHNvIHRoZSB0cmFuc3BvcnQgaXMgcHJvYmFibHkgTUhJLlxuXG5JZiBNSEkgaXNuJ3QgdXAsIHRoZSBRTUkgY2xpZW50IHdpdGhpbiBgYXRoMTJrYCB3b24ndCBzZWUgdGhlIHJlbW90ZSBzZXJ2ZXIuIEJ1dCwgYW5kIHRoaXMgaXMgdGhlIGNyaXRpY2FsIGluc2lnaHQsIFN5emthbGxlciBjYW4gKmNyZWF0ZSogYSBsb2NhbCBJUEMgcm91dGVyIHNlcnZpY2UhIEl0IGNhbiBiaW5kIHRvIGBBRl9RSVBDUlRSYCBhbmQgYWR2ZXJ0aXNlIGBRTUlfU0VSVklDRV9JRF9XTEZXYC4gVGhpcyBtZWFucywgcmVnYXJkbGVzcyBvZiB0aGUgTUhJIHN0YXRlLCB0aGUgYGF0aDEya2AgY2xpZW50IHNob3VsZCBzZWUgaXQgYmVjYXVzZSB0aGUgSVBDIHJvdXRlciBpcyBhIGNlbnRyYWxpemVkIGxvb2t1cC4gSSdtIHJlYXNvbmFibHkgY29uZmlkZW50IHRoZSBgcW1pX2FkZF9sb29rdXBgIGNvbmZpcm1zIHRoaXMuIFRoZSBJUEMgcm91dGVyIHdpbGwgbm90aWZ5IHRoZSBjbGllbnQgb2YgYW55IG1hdGNoaW5nIHNlcnZpY2UgSUQuIFNvLCBpbiB0aGVvcnksIFN5emthbGxlciBjYW4gZnVsbHkgZW11bGF0ZSB0aGUgUU1JIHNlcnZlci5cblxuSG93ZXZlciwgSSdtIG5vdyBiYWNrIHRvIHRoZSBgYXRoMTJrX3BjaV9wcm9iZWAgcHJvYmxlbS4gSXQgKm11c3QqIHN1Y2NlZWQgZm9yIGBhdGgxMmtfY29yZV9pbml0YCB0byBydW4sIHNvIEkgaGF2ZSB0byBlbnN1cmUgU3l6a2FsbGVyIGNhbiBwYXNzIHRoYXQgZnVuY3Rpb24uIFRpbWUgdG8gYW5hbHl6ZSBgYXRoMTJrX21oaV9yZWdpc3RlcmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTM1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTg6NTguMDQ4MzcwNDQ0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDYxMzk1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGF0aDEya19taGlfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0xODA9c3RhdGljIHZvaWQgYXRoMTJrX21oaV9vcF93cml0ZV9yZWcoc3RydWN0IG1oaV9jb250cm9sbGVyICptaGlfY250cmwsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTE4Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjE4NzppbnQgYXRoMTJrX21oaV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtMTg4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmg9MzU9dm9pZCBhdGgxMmtfbWhpX3N0b3Aoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSwgYm9vbCBpc19zdXNwZW5kKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oOjM2OmludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2kpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzctdm9pZCBhdGgxMmtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFyX3BjaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE4OjU4LjU1NDUxNTMwNFoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjczNTY5MzczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgXCJMZXQncyBzZWUgYGF0aDEya19taGlfcmVnaXN0ZXJgXCIgYXMgYSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGF0aDEya19taGlfcmVnaXN0ZXIqKlxuXG5SaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGF0aDEya19taGlfcmVnaXN0ZXJgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbGlrZWx5IGZvY3VzZWQgb24gdGhlIEF0aGVyb3MgKG5vdyBRdWFsY29tbSkgODAyLjExYXgvV2ktRmkgNiB3aXJlbGVzcyBkcml2ZXIsIHNwZWNpZmljYWxseSBpdHMgTW9iaWxlIEhvc3QgSW50ZXJmYWNlIChNSEkpIHJlZ2lzdGVyIGRlZmluaXRpb25zLiBDb25zaWRlcmluZyBteSBleHBlcmllbmNlIHdpdGggdGhlc2Uga2luZHMgb2YgbG93LWxldmVsIGRyaXZlciBjb21wb25lbnRzLCBJJ20gZXhwZWN0aW5nIHRoaXMgcmVnaXN0ZXIgdG8gYmUgY3J1Y2lhbCBmb3IgZWl0aGVyIGhhcmR3YXJlIGludGVyYWN0aW9uLCBwcm9iYWJseSBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGRyaXZlciBleGVjdXRpb24gb3IgZHVyaW5nIHRoZSBib290LXVwIHNlcXVlbmNlIG9mIHRoZSBkZXZpY2UsIG9yIHRoZSBNSEkgY29tbXVuaWNhdGlvbiBwcm90b2NvbCwgd2hpY2ggSSBoYXZlIHZhc3QgZXhwZXJpZW5jZSBpbi4gXG5cbkknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gcmVjYWxsIG15IGtub3dsZWRnZSBvZiB0aGF0IHNwZWNpZmljIHJlZ2lzdGVyLiBJcyB0aGlzIHJlbGF0ZWQgdG8gaW50ZXJydXB0IGhhbmRsaW5nLCBwZXJoYXBzPyBPciBpcyBpdCBtb3JlIGFib3V0IHJlc291cmNlIGFsbG9jYXRpb24sIERNQSBzZXR1cCwgb3IgcGVyaGFwcyB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIHRoZSBNSEkgY29udHJvbGxlciBpdHNlbGY/IEknbSBhbnRpY2lwYXRpbmcgaXQgdG8gYmUgYSBrZXkgZWxlbWVudCBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGhvc3QgQ1BVIGFuZCB0aGUgV2ktRmkgY2hpcHNldCwgZW5hYmxpbmcgZGF0YSB0cmFuc2ZlciBhbmQgY29udHJvbCBjb21tYW5kcy4gVGhlIGZhY3QgaXQncyBleHBsaWNpdGx5IG5hbWVkIGEgJ3JlZ2lzdGVyJyBzdHJvbmdseSBpbXBsaWVzIGEgaGFyZHdhcmUtbGV2ZWwgaW50ZXJhY3Rpb24sIG5vdCBzb21ldGhpbmcgYWJzdHJhY3RlZC4gSSdtIGFscmVhZHkgbWVudGFsbHkgZm9ybWluZyBhIGh5cG90aGVzaXM6IEkgc2hvdWxkIGNoZWNrIGl0cyBsb2NhdGlvbiBpbiB0aGUgbWVtb3J5IG1hcCwgYW5kIHdoYXQgZmllbGRzIGFyZSBwcmVzZW50IHdpdGhpbiB0aGF0IHJlZ2lzdGVyLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDg0NCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE5OjAzLjIyODA4NzUwN1oiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDMxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTg3OlxcdGludCBhdGgxMmtfbWhpX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2kpXFxuIDE4ODpcXHR7XFxuIDE4OTpcXHRcXHRzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiID0gYWJfcGNpLVxcdTAwM2VhYjtcXG4gMTkwOlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmw7XFxuIDE5MTpcXHRcXHR1bnNpZ25lZCBpbnQgYm9hcmRfaWQ7XFxuIDE5MjpcXHRcXHRpbnQgcmV0O1xcbiAxOTM6XFx0XFx0Ym9vbCBkdWFsbWFjID0gZmFsc2U7XFxuIDE5NDpcXHRcXG4gMTk1OlxcdFxcdG1oaV9jdHJsID0gbWhpX2FsbG9jX2NvbnRyb2xsZXIoKTtcXG4gMTk2OlxcdFxcdGlmICghbWhpX2N0cmwpXFxuIDE5NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0XFx0YWJfcGNpLVxcdTAwM2VtaGlfcHJlX2NiID0gTUhJX0NCX0lOVkFMSUQ7XFxuIDIwMDpcXHRcXHRhYl9wY2ktXFx1MDAzZW1oaV9jdHJsID0gbWhpX2N0cmw7XFxuIDIwMTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlY250cmxfZGV2ID0gYWItXFx1MDAzZWRldjtcXG4gMjAyOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VyZWdzID0gYWItXFx1MDAzZW1lbTtcXG4gMjAzOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VyZWdfbGVuID0gYWItXFx1MDAzZW1lbV9sZW47XFxuIDIwNDpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmRkbV9zaXplID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlcmRkbV9zaXplO1xcbiAyMDU6XFx0XFxuIDIwNjpcXHRcXHRpZiAoYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKSB7XFxuIDIwNzpcXHRcXHRcXHRib2FyZF9pZCA9XFxuIDIwODpcXHRcXHRcXHRcXHRhdGgxMmtfcGNpX3JlYWQzMihhYiwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlb3RwX2JvYXJkX2lkX3JlZ2lzdGVyKTtcXG4gMjA5OlxcdFxcdFxcdGJvYXJkX2lkID0gdTMyX2dldF9iaXRzKGJvYXJkX2lkLCBPVFBfQk9BUkRfSURfTUFTSyk7XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdFxcdGlmICghYm9hcmRfaWQgfHwgKGJvYXJkX2lkID09IE9UUF9JTlZBTElEX0JPQVJEX0lEKSkge1xcbiAyMTI6XFx0XFx0XFx0XFx0YXRoMTJrX2RiZyhhYiwgQVRIMTJLX0RCR19CT09ULFxcbiAyMTM6XFx0XFx0XFx0XFx0XFx0ICAgXFxcImZhaWxlZCB0byByZWFkIGJvYXJkIGlkXFxcXG5cXFwiKTtcXG4gMjE0OlxcdFxcdFxcdH0gZWxzZSBpZiAoYm9hcmRfaWQgXFx1MDAyNiBPVFBfVkFMSURfRFVBTE1BQ19CT0FSRF9JRF9NQVNLKSB7XFxuIDIxNTpcXHRcXHRcXHRcXHRkdWFsbWFjID0gdHJ1ZTtcXG4gMjE2OlxcdFxcdFxcdFxcdGF0aDEya19kYmcoYWIsIEFUSDEyS19EQkdfQk9PVCxcXG4gMjE3OlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJkdWFsbWFjIGZ3IHNlbGVjdGVkIGZvciBib2FyZCBpZDogJXhcXFxcblxcXCIsIGJvYXJkX2lkKTtcXG4gMjE4OlxcdFxcdFxcdH1cXG4gMjE5OlxcdFxcdH1cXG4gMjIwOlxcdFxcbiAyMjE6XFx0XFx0aWYgKGR1YWxtYWMpIHtcXG4gMjIyOlxcdFxcdFxcdGlmIChhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGEgXFx1MDAyNlxcdTAwMjYgYWItXFx1MDAzZWZ3LmFtc3NfZHVhbG1hY19sZW4gXFx1MDAzZSAwKSB7XFxuIDIyMzpcXHRcXHRcXHRcXHQvKiB1c2UgTUhJIGZpcm13YXJlIGZpbGUgZnJvbSBmaXJtd2FyZS1OLmJpbiAqL1xcbiAyMjQ6XFx0XFx0XFx0XFx0bWhpX2N0cmwtXFx1MDAzZWZ3X2RhdGEgPSBhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2RhdGE7XFxuIDIyNTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfc3ogPSBhYi1cXHUwMDNlZncuYW1zc19kdWFsbWFjX2xlbjtcXG4gMjI2OlxcdFxcdFxcdH0gZWxzZSB7XFxuIDIyNzpcXHRcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImR1YWxtYWMgZmlybXdhcmUgSUUgbm90IHByZXNlbnQgaW4gZmlybXdhcmUtTi5iaW5cXFxcblxcXCIpO1xcbiAyMjg6XFx0XFx0XFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gMjI5OlxcdFxcdFxcdFxcdGdvdG8gZnJlZV9jb250cm9sbGVyO1xcbiAyMzA6XFx0XFx0XFx0fVxcbiAyMzE6XFx0XFx0fSBlbHNlIHtcXG4gMjMyOlxcdFxcdFxcdGlmIChhYi1cXHUwMDNlZncuYW1zc19kYXRhIFxcdTAwMjZcXHUwMDI2IGFiLVxcdTAwM2Vmdy5hbXNzX2xlbiBcXHUwMDNlIDApIHtcXG4gMjMzOlxcdFxcdFxcdFxcdC8qIHVzZSBNSEkgZmlybXdhcmUgZmlsZSBmcm9tIGZpcm13YXJlLU4uYmluICovXFxuIDIzNDpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfZGF0YSA9IGFiLVxcdTAwM2Vmdy5hbXNzX2RhdGE7XFxuIDIzNTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfc3ogPSBhYi1cXHUwMDNlZncuYW1zc19sZW47XFxuIDIzNjpcXHRcXHRcXHR9IGVsc2Uge1xcbiAyMzc6XFx0XFx0XFx0XFx0LyogdXNlIHRoZSBvbGQgc2VwYXJhdGUgbWhpLmJpbiBNSEkgZmlybXdhcmUgZmlsZSAqL1xcbiAyMzg6XFx0XFx0XFx0XFx0YXRoMTJrX2NvcmVfY3JlYXRlX2Zpcm13YXJlX3BhdGgoYWIsIEFUSDEyS19BTVNTX0ZJTEUsXFxuIDIzOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYWJfcGNpLVxcdTAwM2VhbXNzX3BhdGgsXFxuIDI0MDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKGFiX3BjaS1cXHUwMDNlYW1zc19wYXRoKSk7XFxuIDI0MTpcXHRcXHRcXHRcXHRtaGlfY3RybC1cXHUwMDNlZndfaW1hZ2UgPSBhYl9wY2ktXFx1MDAzZWFtc3NfcGF0aDtcXG4gMjQyOlxcdFxcdFxcdH1cXG4gMjQzOlxcdFxcdH1cXG4gMjQ0OlxcdFxcbiAyNDU6XFx0XFx0cmV0ID0gYXRoMTJrX21oaV9nZXRfbXNpKGFiX3BjaSk7XFxuIDI0NjpcXHRcXHRpZiAocmV0KSB7XFxuIDI0NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIGdldCBtc2kgZm9yIG1oaVxcXFxuXFxcIik7XFxuIDI0ODpcXHRcXHRcXHRnb3RvIGZyZWVfY29udHJvbGxlcjtcXG4gMjQ5OlxcdFxcdH1cXG4gMjUwOlxcdFxcbiAyNTE6XFx0XFx0aWYgKCF0ZXN0X2JpdChBVEgxMktfUENJX0ZMQUdfTVVMVElfTVNJX1ZFQ1RPUlMsIFxcdTAwMjZhYl9wY2ktXFx1MDAzZWZsYWdzKSlcXG4gMjUyOlxcdFxcdFxcdG1oaV9jdHJsLVxcdTAwM2VpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfTk9CQUxBTkNJTkc7XFxuIDI1MzpcXHRcXG4gMjU0OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2Vpb3ZhX3N0YXJ0ID0gMDtcXG4gMjU1OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2Vpb3ZhX3N0b3AgPSBhYl9wY2ktXFx1MDAzZWRtYV9tYXNrO1xcbiAyNTY6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXNibF9zaXplID0gU1pfNTEySztcXG4gMjU3OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VzZWdfbGVuID0gU1pfNTEySztcXG4gMjU4OlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VmYmNfZG93bmxvYWQgPSB0cnVlO1xcbiAyNTk6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXJ1bnRpbWVfZ2V0ID0gYXRoMTJrX21oaV9vcF9ydW50aW1lX2dldDtcXG4gMjYwOlxcdFxcdG1oaV9jdHJsLVxcdTAwM2VydW50aW1lX3B1dCA9IGF0aDEya19taGlfb3BfcnVudGltZV9wdXQ7XFxuIDI2MTpcXHRcXHRtaGlfY3RybC1cXHUwMDNlc3RhdHVzX2NiID0gYXRoMTJrX21oaV9vcF9zdGF0dXNfY2I7XFxuIDI2MjpcXHRcXHRtaGlfY3RybC1cXHUwMDNlcmVhZF9yZWcgPSBhdGgxMmtfbWhpX29wX3JlYWRfcmVnO1xcbiAyNjM6XFx0XFx0bWhpX2N0cmwtXFx1MDAzZXdyaXRlX3JlZyA9IGF0aDEya19taGlfb3Bfd3JpdGVfcmVnO1xcbiAyNjQ6XFx0XFxuIDI2NTpcXHRcXHRyZXQgPSBtaGlfcmVnaXN0ZXJfY29udHJvbGxlcihtaGlfY3RybCwgYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlbWhpX2NvbmZpZyk7XFxuIDI2NjpcXHRcXHRpZiAocmV0KSB7XFxuIDI2NzpcXHRcXHRcXHRhdGgxMmtfZXJyKGFiLCBcXFwiZmFpbGVkIHRvIHJlZ2lzdGVyIHRvIG1oaSBidXMsIGVyciA9ICVkXFxcXG5cXFwiLCByZXQpO1xcbiAyNjg6XFx0XFx0XFx0Z290byBmcmVlX2NvbnRyb2xsZXI7XFxuIDI2OTpcXHRcXHR9XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdHJldHVybiAwO1xcbiAyNzI6XFx0XFxuIDI3MzpcXHRmcmVlX2NvbnRyb2xsZXI6XFxuIDI3NDpcXHRcXHRtaGlfZnJlZV9jb250cm9sbGVyKG1oaV9jdHJsKTtcXG4gMjc1OlxcdFxcdGFiX3BjaS1cXHUwMDNlbWhpX2N0cmwgPSBOVUxMO1xcbiAyNzY6XFx0XFx0cmV0dXJuIHJldDtcXG4gMjc3OlxcdH1cXG4gMjc4OlxcdFxcbiAyNzk6XFx0dm9pZCBhdGgxMmtfbWhpX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG4gMjgwOlxcdHtcXG4gMjgxOlxcdFxcdHN0cnVjdCBtaGlfY29udHJvbGxlciAqbWhpX2N0cmwgPSBhYl9wY2ktXFx1MDAzZW1oaV9jdHJsO1xcbiAyODI6XFx0XFxuIDI4MzpcXHRcXHRtaGlfdW5yZWdpc3Rlcl9jb250cm9sbGVyKG1oaV9jdHJsKTtcXG4gMjg0OlxcdFxcdGtmcmVlKG1oaV9jdHJsLVxcdTAwM2VpcnEpO1xcbiAyODU6XFx0XFx0bWhpX2ZyZWVfY29udHJvbGxlcihtaGlfY3RybCk7XFxuIDI4NjpcXHRcXHRhYl9wY2ktXFx1MDAzZW1oaV9jdHJsID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6MDMuMjI4MzMzMTY3WiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5ODQ3NjY3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBc3Nlc3NtZW50IG9mIHRoZSBNSEkgQ29udHJvbGxlciBhbmQgRmlybXdhcmUgUHJvY2VzcyoqXG5cbk9rYXksIHNvIHRoZSBgbWhpX3JlZ2lzdGVyX2NvbnRyb2xsZXJgIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciwgYXMgdGhlIG5hbWUgc3VnZ2VzdHMsIHJlZ2lzdGVyaW5nIHRoZSBjb250cm9sbGVyLiBTaW1wbGUgZW5vdWdoLiBCdXQgaXQncyBjcnVjaWFsIHRvIHJlbWVtYmVyIHRoYXQgdGhpcyAqZG9lc24ndCogaW5pdGlhdGUgdGhlIGZpcm13YXJlIGRvd25sb2FkLiBUaGF0J3MgYSBrZXkgZGlzdGluY3Rpb24gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCBmb3IgbGF0ZXIgZGVidWdnaW5nLlxuXG5UaGUgZmlybXdhcmUgZG93bmxvYWQsIGFsb25nIHdpdGggdGhlIGFjdHVhbCBNSEkgc3RhcnQsIGFwcGVhcnMgdG8gYmUgdHJpZ2dlcmVkIGJ5IGVpdGhlciBgbWhpX3ByZXBhcmVfZm9yX3Bvd2VyX3VwYCBvciBgbWhpX2FzeW5jX3Bvd2VyX3VwYC4gSSdtIGZhbWlsaWFyIHdpdGggYHByZXBhcmVfZm9yX3Bvd2VyX3VwYCwgYnV0IHRoZSBgYXN5bmNgIHZlcnNpb24gcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgc3RhbmRhcmQgcG93ZXIgdXAgZmxvdyBpbiBkZXRhaWwuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhci4gSSBoYXZlIHRvIHRyYWNlIHdoZXJlIGBtaGlfYXN5bmNfcG93ZXJfdXBgIGlzIGFjdHVhbGx5IGNhbGxlZCB3aXRoaW4gdGhlIGJyb2FkZXIgc3lzdGVtLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIHRoZXJlIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBhcmFsbGVsIHBvd2VyIHVwIHByb2Nlc3Nlcy4gSXQncyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxMDQsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE5OjA5LjIxMzEwMjE3NFoiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzEyODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1oaV9hc3luY19wb3dlcl91cHxtaGlfc3luY19wb3dlcl91cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTQwNj1zdGF0aWMgaW50IGF0aDEya19taGlfc2V0X3N0YXRlKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQzOC1cXHRcXHQgKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQzOTpcXHRcXHRyZXQgPSBtaGlfc3luY19wb3dlcl91cChhYl9wY2ktXFx1MDAzZW1oaV9jdHJsKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ0MC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6MDkuNDQ3NDIwNjQ5WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk1NTk4NjExMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHRob3VnaCBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGZ1bmN0aW9uIGBhdGgxMmtfbWhpX3NldF9zdGF0ZWAsIGtlZXBpbmcgaW4gbWluZCBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQuXG5cbioqRGVlcCBEaXZlIGludG8gYGF0aDEya19taGlfc2V0X3N0YXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgYGF0aDEya19taGlfc2V0X3N0YXRlYC4gR2l2ZW4gdGhlIG5hbWUsIEknbSBpbW1lZGlhdGVseSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgY29yZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhlIHBvd2VyIHN0YXRlIG9mIHRoZSBNSEkgKE0tQnVzIEhvc3QgSW50ZXJmYWNlKSBjb21wb25lbnQgd2l0aGluIHRoZSBhdGgxMmsgZHJpdmVyLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIHJvbGUgd2l0aGluIHRoZSBicm9hZGVyIHBvd2VyIG1hbmFnZW1lbnQgc2NoZW1lIG9mIHRoZSB3aXJlbGVzcyBzdWJzeXN0ZW0uIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGFuZCBwb3dlci1zYXZpbmcgZmVhdHVyZXM/IEknbGwgcHJvYmFibHkgc3RhcnQgYnkgbG9va2luZyBhdCB3aGF0IGBtaGlgIHN0YW5kcyBmb3IgYW5kIHdoYXQgaXQgZG9lcy5cblxuSSdkIGV4cGVjdCB0byBzZWUgc29tZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSBmb3IgdGhlIFF1YWxjb21tIEF0aGVyb3MgY2hpcHNldC4gU3BlY2lmaWNhbGx5LCBJJ20gYW50aWNpcGF0aW5nIGNhbGxzIHRvIGxvdy1sZXZlbCBmdW5jdGlvbnMgcmVsYXRlZCB0byBjbG9jayBnYXRpbmcsIHZvbHRhZ2Ugc2NhbGluZywgYW5kIHBlcmhhcHMgZXZlbiBzb21lIGludGVycnVwdCBtYW5hZ2VtZW50IHJlbGF0ZWQgdG8gTUhJIGNvbW11bmljYXRpb24uIFRoZSBzdGF0ZSB0cmFuc2l0aW9uIOKAkyB0aGF0J3MgY3J1Y2lhbC4gSXMgaXQgaGFuZGxpbmcgdHJhbnNpdGlvbnMgYmV0d2VlbiBzdGF0ZXMgbGlrZSBhY3RpdmUsIHNsZWVwLCBzdGFuZGJ5LCBzdXNwZW5kLCBhbmQgd2hhdCBhcmUgdGhlIHNwZWNpZmljIGNvbnNpZGVyYXRpb25zP1xuXG5JJ20gdGhpbmtpbmcsIGlzIHRoaXMgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdGhlIE1ISSB0byBhIFwiZGlzYWJsZWRcIiBzdGF0ZSBvciBhbiBcImVuYWJsZWRcIiBzdGF0ZSwgb3IgZG9lcyBpdCBjb3ZlciBhbiBhcnJheSBvZiBzdGF0ZSBjaGFuZ2VzPyBLbm93aW5nIHRoZSBleGFjdCBwb3dlciBzdGF0ZXMgdGhlIE1ISSBjYW4gb3BlcmF0ZSB1bmRlciB3aWxsIHByb3ZpZGUgaW1wb3J0YW50IGNvbnRleHQuIERvZXMgaXQgaGFuZGxlIGFueSBwb3dlci1kb3duIHNlcXVlbmNpbmcsIGVzcGVjaWFsbHkgdGhlIG9yZGVyIGluIHdoaWNoIGRldmljZXMgYXJlIGRpc2FibGVkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eT8gSSB3YW50IHRvIGtub3cgYWJvdXQgdGhlIHJlZ2lzdGVyIGFjY2Vzc2VzIOKAkyB3aGljaCByZWdpc3RlcnMgYXJlIGJlaW5nIG1vZGlmaWVkPyBEb2VzIHRoaXMgY2FsbCBpbnRvIGEgbW9yZSBnZW5lcmljIE1ISSBkcml2ZXIsIG9yIGlzIGl0IHNwZWNpZmljIHRvIHRoZSBhdGgxMmsgY2hpcHNldD8gSG93IGRvZXMgaXQgaGFuZGxlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgY29udGVudGlvbiBkdXJpbmcgc3RhdGUgdHJhbnNpdGlvbnM/XG5cbkknZCB3YW50IHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55IGVycm9yIGhhbmRsaW5nIG9yIHJldHJ5IG1lY2hhbmlzbXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgaGFyZHdhcmUgZmFpbHMgdG8gdHJhbnNpdGlvbiB0byB0aGUgcmVxdWVzdGVkIHN0YXRlPyBJcyB0aGVyZSBhIHRpbWVvdXQ/IERvZXMgaXQgbG9nIGVycm9ycyBvciB0cmlnZ2VyIGEgc3lzdGVtIHJlc2V0PyBJIHdvdWxkIGFsc28gd2FudCB0byBleGFtaW5lIHdoZXJlIGBhdGgxMmtfbWhpX3NldF9zdGF0ZWAgaXMgY2FsbGVkIGZyb20uIElzIGl0IGRyaXZlbiBieSB0aGUgd2lyZWxlc3MgY29yZSwgb3IgYXJlIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gaW5pdGlhdGluZyB0aGUgcG93ZXIgc3RhdGUgY2hhbmdlcywgbGlrZSB0aGUgcG93ZXIgbWFuYWdlcj8gRmluYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgZGV2aWNlJ3MgcnVudGltZSBQTSBmcmFtZXdvcmsuIERvZXMgaXQgaW50ZWdyYXRlIHdpdGggdGhvc2UgZnVuY3Rpb25hbGl0aWVzIGZvciBzeXN0ZW0gc3VzcGVuZC9yZXN1bWU/IFRoaXMgZnVuY3Rpb24sIGRlcGVuZGluZyBvbiBpdHMgcm9sZSwgaXMgYSBwb3RlbnRpYWwgaG90c3BvdCBmb3IgcG93ZXItcmVsYXRlZCBidWdzLCBzbyBJJ2xsIHdhbnQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGRldGFpbHMuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM2MDMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxOToxOS4wMDcyODQzNjJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjIxOTU4MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX21oaV9zZXRfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz0yODk9c3RhdGljIGNoYXIgKmF0aDEya19taGlfc3RhdGVfdG9fc3RyKGVudW0gYXRoMTJrX21oaV9zdGF0ZSBtaGlfc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTMxNi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjMxNzpzdGF0aWMgdm9pZCBhdGgxMmtfbWhpX3NldF9zdGF0ZV9iaXQoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTMxOC1cXHRcXHRcXHRcXHQgICAgIGVudW0gYXRoMTJrX21oaV9zdGF0ZSBtaGlfc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTM1Nj1zdGF0aWMgaW50IGF0aDEya19taGlfY2hlY2tfc3RhdGVfYml0KHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQwNS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQwNjpzdGF0aWMgaW50IGF0aDEya19taGlfc2V0X3N0YXRlKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00MDctXFx0XFx0XFx0XFx0ZW51bSBhdGgxMmtfbWhpX3N0YXRlIG1oaV9zdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM6NDcyOlxcdGF0aDEya19taGlfc2V0X3N0YXRlX2JpdChhYl9wY2ksIG1oaV9zdGF0ZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00NzMtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTQ4Mj1pbnQgYXRoMTJrX21oaV9zdGFydChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy00ODctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo0ODg6XFx0cmV0ID0gYXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX0lOSVQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDg5LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ5MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQ5MjpcXHRyZXQgPSBhdGgxMmtfbWhpX3NldF9zdGF0ZShhYl9wY2ksIEFUSDEyS19NSElfUE9XRVJfT04pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDkzLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTUwMj12b2lkIGF0aDEya19taGlfc3RvcChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpLCBib29sIGlzX3N1c3BlbmQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUwOC1cXHRpZiAoaXNfc3VzcGVuZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjUwOTpcXHRcXHRhdGgxMmtfbWhpX3NldF9zdGF0ZShhYl9wY2ksIEFUSDEyS19NSElfUE9XRVJfT0ZGX0tFRVBfREVWKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUxMC1cXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo1MTE6XFx0XFx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1BPV0VSX09GRik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy01MTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo1MTM6XFx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX0RFSU5JVCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy01MTQtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYz01MTY9dm9pZCBhdGgxMmtfbWhpX3N1c3BlbmQoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUxNy17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo1MTg6XFx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1NVU1BFTkQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNTE5LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmM9NTIxPXZvaWQgYXRoMTJrX21oaV9yZXN1bWUoc3RydWN0IGF0aDEya19wY2kgKmFiX3BjaSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTUyMi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYzo1MjM6XFx0YXRoMTJrX21oaV9zZXRfc3RhdGUoYWJfcGNpLCBBVEgxMktfTUhJX1JFU1VNRSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuYy01MjQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxOToyMC42Mjk0ODk1OTlaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE2NTA2NzM2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjozMzA5NywiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6MzIuMjgwMTY3MjA5WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc0Mjg2MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXRoMTJrX21oaV9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jPTQwNj1zdGF0aWMgaW50IGF0aDEya19taGlfc2V0X3N0YXRlKHN0cnVjdCBhdGgxMmtfcGNpICphYl9wY2ksXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jLTQ4MS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5jOjQ4MjppbnQgYXRoMTJrX21oaV9zdGFydChzdHJ1Y3QgYXRoMTJrX3BjaSAqYWJfcGNpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmMtNDgzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmg9MjA9ZW51bSBhdGgxMmtfbWhpX3N0YXRlIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvbWhpLmgtMzMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9taGkuaDozNDppbnQgYXRoMTJrX21oaV9zdGFydChzdHJ1Y3QgYXRoMTJrX3BjaSAqYXJfcGNpKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL21oaS5oLTM1LXZvaWQgYXRoMTJrX21oaV9zdG9wKHN0cnVjdCBhdGgxMmtfcGNpICphcl9wY2ksIGJvb2wgaXNfc3VzcGVuZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jPTE0MjQ9aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0NDM6XFx0cmV0ID0gYXRoMTJrX21oaV9zdGFydChhYl9wY2kpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ0NC1cXHRpZiAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjE5OjMyLjg4NzYwNTIzNloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjY5NTk5ODczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjMzNjA0LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToxOTo0OS41ODM2MDYyMTJaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzQ2MTI0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhdGgxMmtfcGNpX3Bvd2VyX3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTMxMj1zdGF0aWMgdm9pZCBhdGgxMmtfcGNpX2NvcmVkdW1wX2Rvd25sb2FkKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0MjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYzoxNDI0OmludCBhdGgxMmtfcGNpX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuYy0xNDI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmM9MTQ3OT1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDEya19oaWZfb3BzIGF0aDEya19wY2lfaGlmX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcGNpLmMtMTQ4NC1cXHQucG93ZXJfZG93biA9IGF0aDEya19wY2lfcG93ZXJfZG93bixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jOjE0ODU6XFx0LnBvd2VyX3VwID0gYXRoMTJrX3BjaV9wb3dlcl91cCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3BjaS5jLTE0ODYtXFx0LnN1c3BlbmQgPSBhdGgxMmtfcGNpX2hpZl9zdXNwZW5kLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaD0xNzQ9aW50IGF0aDEya19wY2lfc3RhcnQoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaDoxNzU6aW50IGF0aDEya19wY2lfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9wY2kuaC0xNzYtdm9pZCBhdGgxMmtfcGNpX3Bvd2VyX2Rvd24oc3RydWN0IGF0aDEya19iYXNlICphYiwgYm9vbCBpc19zdXNwZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6NTAuMTQxMDcyOTMxWiIsIlNlcSI6NTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MDg0Mzc2OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIGRlZXBseSBmYW1pbGlhciB3aXRoIHdpcmVsZXNzIGRyaXZlcnMgYW5kIHRoZSBhdGgxMmsgaW4gcGFydGljdWxhcjpcblxuKipQb3dlcmluZyBVcCB0aGUgYXRoMTJrIFBDSSBEZXZpY2UqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgYGF0aDEya19wY2lfcG93ZXJfdXBgIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBUaGF0J3MgZ29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3QuIEJ1dCBpdCdzIGNhbGxlZCB0aHJvdWdoIGBoaWZfb3BzLVx1MDAzZXBvd2VyX3VwYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4sIHRoZSBjb250ZXh0LCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgaGlmX29wcy1cdTAwM2Vwb3dlcl91cGAgdG8gZmluZCBvdXQgKndoZXJlKiB0aGF0IGNhbGwgaXMgaGFwcGVuaW5nLiBJcyBpdCB0cmlnZ2VyZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLCByZXN1bWUgZnJvbSBzdXNwZW5kLCBvciBtYXliZSBldmVuIGEgZHluYW1pYyBwb3dlciBtYW5hZ2VtZW50IGV2ZW50PyBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzIHdpbGwgZ2l2ZSBtZSBhIGh1Z2UgYW1vdW50IG9mIGNvbnRleHQuIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgYGhpZl9vcHNgIHN0cnVjdHVyZSBkZWZpbml0aW9uIGl0c2VsZiwgYW5kIHRoZW4gdHJhY2UgZnJvbSB0aGUgYXNzaWdubWVudCBvZiB0aGF0IHN0cnVjdHVyZSBiYWNrIHRocm91Z2ggdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHN1c3BlY3QgaXQgd2lsbCBiZSBsaW5rZWQgdG8gcGxhdGZvcm0gb3IgZGV2aWNlIGluaXRpYWxpemF0aW9uLiBJIGJldCB0aGUgYW5zd2VycyBsaWUgaW4gdGhvc2UgYXJlYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2NTg1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6NTcuNzQ5NTEzNDE0WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTk1MzAzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicG93ZXJfdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oPTEyPXN0cnVjdCBhdGgxMmtfaGlmX29wcyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTE4LVxcdHZvaWQgKCpzdG9wKShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oOjE5OlxcdGludCAoKnBvd2VyX3VwKShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTIwLVxcdHZvaWQgKCpwb3dlcl9kb3duKShzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCBib29sIGlzX3N1c3BlbmQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaD0xMzA9c3RhdGljIGlubGluZSB2b2lkIGF0aDEya19oaWZfd3JpdGUzMihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLCB1MzIgYWRkcmVzcyxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTM1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTM2OnN0YXRpYyBpbmxpbmUgaW50IGF0aDEya19oaWZfcG93ZXJfdXAoc3RydWN0IGF0aDEya19iYXNlICphYilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL2hpZi5oLTEzNy17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaDoxMzg6XFx0aWYgKCFhYi1cXHUwMDNlaGlmLm9wcy1cXHUwMDNlcG93ZXJfdXApXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9oaWYuaC0xMzktXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTQwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmg6MTQxOlxcdHJldHVybiBhYi1cXHUwMDNlaGlmLm9wcy1cXHUwMDNlcG93ZXJfdXAoYWIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvaGlmLmgtMTQyLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MTk6NTcuOTY5MDQ5OVoiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjEwNDY1ODM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGF0aDEyayBEcml2ZXIgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKlxuXG5Pa2F5LCBzbyBgYXRoMTJrX2hpZl9wb3dlcl91cGAgZ2V0cyBjYWxsZWQgZnJvbSBgYXRoMTJrX2NvcmVfc29jX2NyZWF0ZWAsIHdoaWNoIGlzIHdoZXJlIHRoaW5ncyBzdGFydC4gTGV0J3MgdHJhY2UgaXQuLi4gYGF0aDEya19jb3JlX3NvY19jcmVhdGVgIGZpcnN0IGluaXRpYWxpemVzIHRoZSBRTUkgc2VydmljZSBhbmQgY3JlYXRlcyBhIGRlYnVnZnMgZW50cnkuIFRoZW4sIGl0IGNhbGxzIGBhdGgxMmtfaGlmX3Bvd2VyX3VwYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGBhdGgxMmtfaGlmX3Bvd2VyX3VwYCBldmVudHVhbGx5IGhpdHMgYGF0aDEya19wY2lfcG93ZXJfdXBgLCB3aGljaCBnb2VzIGRvd24gdG8gYGF0aDEya19taGlfc3RhcnRgLCBhbmQgZmluYWxseSBgbWhpX3N5bmNfcG93ZXJfdXBgLlxuXG5UaGUga2V5IHRoaW5nIGlzIGBtaGlfc3luY19wb3dlcl91cGAg4oCTIHRoYXQncyB0aGUgYmxvY2tlci4gSXQgd2FpdHMgZm9yIHRoZSBNSEkgZGV2aWNlIHRvIHJlYWNoIHRoZSBNMCBzdGF0ZSwgZXNzZW50aWFsbHkgd2FpdGluZyBmb3IgdGhlIGZpcm13YXJlIHRvIGxvYWQgYW5kIHJ1bi4gSWYgdGhlIGhhcmR3YXJlIGlzbid0IGFjdHVhbGx5IHRoZXJlLCBvciB0aGVyZSdzIHNvbWUgTUhJLWxldmVsIHByb2JsZW0sIGBtaGlfc3luY19wb3dlcl91cGAgZmFpbHMsIGNhdXNpbmcgYGF0aDEya19oaWZfcG93ZXJfdXBgIHRvIGZhaWwsIGFuZCBjb25zZXF1ZW50bHksIGBhdGgxMmtfY29yZV9zb2NfY3JlYXRlYCB0byBmYWlsLiBUaGlzIHRoZW4gYnViYmxlcyB1cCBhbmQgbGVhZHMgdG8gZmFpbHVyZSBpbiBgYXRoMTJrX2NvcmVfaHdfZ3JvdXBfY3JlYXRlYCwgYW5kIGV2ZW50dWFsbHkgYGF0aDEya19jb3JlX2luaXRgLCBhbGwgdGhlIHdheSB0byBhIGZhaWxlZCBgYXRoMTJrX3BjaV9wcm9iZWAuXG5cbkJ1dC4uLiBJIHNlZSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBoZXJlLiBIb2xkIG9uLi4uIEkganVzdCByZWFsaXplZCB0aGUgUU1JIHNlcnZpY2UgaXMgaW5pdGlhbGl6ZWQgKmJlZm9yZSogYGF0aDEya19oaWZfcG93ZXJfdXBgLiBUaGF0IG1lYW5zIGBhdGgxMmtfcW1pX2luaXRfc2VydmljZWAgaXMgY2FsbGVkICpiZWZvcmUqIHRoZSBoYXJkd2FyZSBwb3dlci11cCBzZXF1ZW5jZSwgYW5kIGl0IHNldHMgdXAgdGhlIFFNSSBjbGllbnQuIFRoaXMgc3VnZ2VzdHMgdGhhdCBpZiBzeXprYWxsZXIgaXMgZW11bGF0aW5nIHRoZSBRTUkgc2VydmljZSAobGlrZSB3aXRoIEFGX1FJUENSVFIpIGFuZCBhZHZlcnRpc2VzIGl0c2VsZiAqYmVmb3JlIG9yIGR1cmluZyogYGF0aDEya19wY2lfcHJvYmVgLCB0aGVuIHRoZSBgbmV3X3NlcnZlcmAgY2FsbGJhY2sgKGBhdGgxMmtfcW1pX29wc19uZXdfc2VydmVyYCkgKmNvdWxkKiBiZSB0cmlnZ2VyZWQgYXN5bmNocm9ub3VzbHkhXG5cblRoZSBjYWxsYmFjayB3b3VsZCB0aGVuIHBvc3QgYEFUSDEyS19RTUlfRVZFTlRfU0VSVkVSX0FSUklWRWAgdG8gdGhlIGBldmVudF93cWAgd29ya3F1ZXVlLiBUaGUgYGV2ZW50X3dxYCB3b3JrcXVldWUgd291bGQgZXhlY3V0ZSBgYXRoMTJrX3FtaV9kcml2ZXJfZXZlbnRfd29ya2AsIHdoaWNoIGNhbGxzIGBhdGgxMmtfcW1pX2V2ZW50X3NlcnZlcl9hcnJpdmVgLiBJbnNpZGUgYGF0aDEya19xbWlfZXZlbnRfc2VydmVyX2Fycml2ZWAgaXMgd2hlcmUgdGhlIGludGVyZXN0aW5nIGJpdCBoYXBwZW5zLCBuYW1lbHksIGEgY2FsbCB0byBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmQoYWIpYC5cblxuVGhpcyBtZWFucyBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgIGlzICpyZWFjaGFibGUqIGV2ZW4gaWYgYG1oaV9zeW5jX3Bvd2VyX3VwYCB1bHRpbWF0ZWx5IGZhaWxzISBUaGUgcG93ZXItdXAgc2VxdWVuY2UgYW5kIHRoZSBRTUkgY2xpZW50IGV2ZW50IGhhbmRsaW5nIHJ1biBjb25jdXJyZW50bHkhXG5cbkFuZCBoZXJlJ3MgdGhlIGtpY2tlcjogYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBzZW5kcyBhIFFNSSBtZXNzYWdlIHRvIHRoZSBRTUkgc2VydmVyLiBJZiBzeXprYWxsZXIgaXMgYWN0aW5nIGFzIHRoYXQgc2VydmVyLCBpdCB3aWxsIHJlY2VpdmUgdGhlIG1lc3NhZ2UgYW5kIGNhbiBnZW5lcmF0ZSBhIHJlc3BvbnNlLiBUaGlzIGNvbmN1cnJlbnQgbWVzc2FnZSBzZW5kaW5nIGlzIGltcG9ydGFudC4gSSBtdXN0IGludmVzdGlnYXRlIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MzgwLCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjIwOjEwLjA3MzcxMDg5WiIsIlNlcSI6NjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNTE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3FtaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMjIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzIyOlxcdHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuMjMyMzpcXHR7XFxuMjMyNDpcXHRcXHRzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3JlcV9tc2dfdjAxIHJlcSA9IHt9O1xcbjIzMjU6XFx0XFx0c3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEgcmVzcCA9IHt9O1xcbjIzMjY6XFx0XFx0c3RydWN0IHFtaV90eG4gdHhuO1xcbjIzMjc6XFx0XFx0aW50IHJldDtcXG4yMzI4OlxcdFxcbjIzMjk6XFx0XFx0cmV0ID0gcW1pX3R4bl9pbml0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSwgXFx1MDAyNnR4bixcXG4yMzMwOlxcdFxcdFxcdFxcdCAgIHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDFfZWksIFxcdTAwMjZyZXNwKTtcXG4yMzMxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIzMzI6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMzMzpcXHRcXG4yMzM0OlxcdFxcdHJldCA9IHFtaV9zZW5kX3JlcXVlc3QoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBOVUxMLCBcXHUwMDI2dHhuLFxcbjIzMzU6XFx0XFx0XFx0XFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfVjAxLFxcbjIzMzY6XFx0XFx0XFx0XFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfTVNHX1YwMV9NQVhfTEVOLFxcbjIzMzc6XFx0XFx0XFx0XFx0ICAgICAgIHFtaV93bGFuZndfcGh5X2NhcF9yZXFfbXNnX3YwMV9laSwgXFx1MDAyNnJlcSk7XFxuMjMzODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjIzMzk6XFx0XFx0XFx0cW1pX3R4bl9jYW5jZWwoXFx1MDAyNnR4bik7XFxuMjM0MDpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBzZW5kIHBoeSBjYXBhYmlsaXR5IHJlcXVlc3Q6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjIzNDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM0MjpcXHRcXHR9XFxuMjM0MzpcXHRcXG4yMzQ0OlxcdFxcdHJldCA9IHFtaV90eG5fd2FpdChcXHUwMDI2dHhuLCBtc2Vjc190b19qaWZmaWVzKEFUSDEyS19RTUlfV0xBTkZXX1RJTUVPVVRfTVMpKTtcXG4yMzQ1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIzNDY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM0NzpcXHRcXG4yMzQ4OlxcdFxcdGlmIChyZXNwLnJlc3AucmVzdWx0ICE9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDEpIHtcXG4yMzQ5OlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbjIzNTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM1MTpcXHRcXHR9XFxuMjM1MjpcXHRcXG4yMzUzOlxcdFxcdGlmIChyZXNwLnNpbmdsZV9jaGlwX21sb19zdXBwb3J0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQpXFxuMjM1NDpcXHRcXHRcXHRhYi1cXHUwMDNlc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgPSB0cnVlO1xcbjIzNTU6XFx0XFxuMjM1NjpcXHRcXHRpZiAoIXJlc3AubnVtX3BoeV92YWxpZCkge1xcbjIzNTc6XFx0XFx0XFx0cmV0ID0gLUVOT0RBVEE7XFxuMjM1ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzU5OlxcdFxcdH1cXG4yMzYwOlxcdFxcbjIzNjE6XFx0XFx0YWItXFx1MDAzZXFtaS5udW1fcmFkaW9zID0gcmVzcC5udW1fcGh5O1xcbjIzNjI6XFx0XFxuMjM2MzpcXHRcXHRpZiAocmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKVxcbjIzNjQ6XFx0XFx0XFx0YWItXFx1MDAzZXFtaS5keW5hbWljX2Rkcl9zdXBwb3J0ID0gcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0O1xcbjIzNjU6XFx0XFxuMjM2NjpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSxcXG4yMzY3OlxcdFxcdFxcdCAgIFxcXCJwaHkgY2FwYWJpbGl0eSByZXNwIHZhbGlkICVkIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0ICVkIHZhbGlkICVkIG51bV9waHkgJWQgdmFsaWQgJWQgYm9hcmRfaWQgJWQgZHluYW1pY19kZHJfdmFsaWQgJXUgZHluYW1pY19kZHJfc3VwcG9ydCAldVxcXFxuXFxcIixcXG4yMzY4OlxcdFxcdFxcdCAgIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQsIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQsXFxuMjM2OTpcXHRcXHRcXHQgICByZXNwLm51bV9waHlfdmFsaWQsIHJlc3AubnVtX3BoeSwgcmVzcC5ib2FyZF9pZF92YWxpZCwgcmVzcC5ib2FyZF9pZCxcXG4yMzcwOlxcdFxcdFxcdCAgIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCwgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0KTtcXG4yMzcxOlxcdFxcbjIzNzI6XFx0XFx0cmV0dXJuO1xcbjIzNzM6XFx0XFxuMjM3NDpcXHRvdXQ6XFxuMjM3NTpcXHRcXHQvKiBJZiBQSFkgY2FwYWJpbGl0eSBub3QgYWR2ZXJ0aXNlZCB0aGVuIHJlbHkgb24gZGVmYXVsdCBudW0gbGluayAqL1xcbjIzNzY6XFx0XFx0YWItXFx1MDAzZXFtaS5udW1fcmFkaW9zID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlZGVmX251bV9saW5rO1xcbjIzNzc6XFx0XFxuMjM3ODpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSxcXG4yMzc5OlxcdFxcdFxcdCAgIFxcXCJubyB2YWxpZCByZXNwb25zZSBmcm9tIFBIWSBjYXBhYmlsaXR5LCBjaG9vc2UgZGVmYXVsdCBudW1fcGh5ICVkXFxcXG5cXFwiLFxcbjIzODA6XFx0XFx0XFx0ICAgYWItXFx1MDAzZXFtaS5udW1fcmFkaW9zKTtcXG4yMzgxOlxcdH1cXG4yMzgyOlxcdFxcbjIzODM6XFx0c3RhdGljIGludCBhdGgxMmtfcW1pX2Z3X2luZF9yZWdpc3Rlcl9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuMjM4NDpcXHR7XFxuMjM4NTpcXHRcXHRzdHJ1Y3QgcW1pX3dsYW5md19pbmRfcmVnaXN0ZXJfcmVxX21zZ192MDEgKnJlcTtcXG4yMzg2OlxcdFxcdHN0cnVjdCBxbWlfd2xhbmZ3X2luZF9yZWdpc3Rlcl9yZXNwX21zZ192MDEgKnJlc3A7XFxuMjM4NzpcXHRcXHRzdHJ1Y3QgcW1pX2hhbmRsZSAqaGFuZGxlID0gXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlO1xcbjIzODg6XFx0XFx0c3RydWN0IHFtaV90eG4gdHhuO1xcbjIzODk6XFx0XFx0aW50IHJldDtcXG4yMzkwOlxcdFxcbjIzOTE6XFx0XFx0cmVxID0ga3phbGxvY19vYmooKnJlcSk7XFxuMjM5MjpcXHRcXHRpZiAoIXJlcSlcXG4yMzkzOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIzOTQ6XFx0XFxuMjM5NTpcXHRcXHRyZXNwID0ga3phbGxvY19vYmooKnJlc3ApO1xcbjIzOTY6XFx0XFx0aWYgKCFyZXNwKSB7XFxuMjM5NzpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjIzOTg6XFx0XFx0XFx0Z290byByZXNwX291dDtcXG4yMzk5OlxcdFxcdH1cXG4yNDAwOlxcdFxcbjI0MDE6XFx0XFx0cmVxLVxcdTAwM2VjbGllbnRfaWRfdmFsaWQgPSAxO1xcbjI0MDI6XFx0XFx0cmVxLVxcdTAwM2VjbGllbnRfaWQgPSBRTUlfV0xBTkZXX0NMSUVOVF9JRDtcXG4yNDAzOlxcdFxcdHJlcS1cXHUwMDNlZndfcmVhZHlfZW5hYmxlX3ZhbGlkID0gMTtcXG4yNDA0OlxcdFxcdHJlcS1cXHUwMDNlZndfcmVhZHlfZW5hYmxlID0gMTtcXG4yNDA1OlxcdFxcdHJlcS1cXHUwMDNlcmVxdWVzdF9tZW1fZW5hYmxlX3ZhbGlkID0gMTtcXG4yNDA2OlxcdFxcdHJlcS1cXHUwMDNlcmVxdWVzdF9tZW1fZW5hYmxlID0gMTtcXG4yNDA3OlxcdFxcdHJlcS1cXHUwMDNlZndfbWVtX3JlYWR5X2VuYWJsZV92YWxpZCA9IDE7XFxuMjQwODpcXHRcXHRyZXEtXFx1MDAzZWZ3X21lbV9yZWFkeV9lbmFibGUgPSAxO1xcbjI0MDk6XFx0XFx0cmVxLVxcdTAwM2VjYWxfZG9uZV9lbmFibGVfdmFsaWQgPSAxO1xcbjI0MTA6XFx0XFx0cmVxLVxcdTAwM2VjYWxfZG9uZV9lbmFibGUgPSAxO1xcbjI0MTE6XFx0XFx0cmVxLVxcdTAwM2Vmd19pbml0X2RvbmVfZW5hYmxlX3ZhbGlkID0gMTtcXG4yNDEyOlxcdFxcdHJlcS1cXHUwMDNlZndfaW5pdF9kb25lX2VuYWJsZSA9IDE7XFxuMjQxMzpcXHRcXG4yNDE0OlxcdFxcdHJlcS1cXHUwMDNlcGluX2Nvbm5lY3RfcmVzdWx0X2VuYWJsZV92YWxpZCA9IDA7XFxuMjQxNTpcXHRcXHRyZXEtXFx1MDAzZXBpbl9jb25uZWN0X3Jlc3VsdF9lbmFibGUgPSAwO1xcbjI0MTY6XFx0XFxuMjQxNzpcXHRcXHRyZXQgPSBxbWlfdHhuX2luaXQoaGFuZGxlLCBcXHUwMDI2dHhuLFxcbjI0MTg6XFx0XFx0XFx0XFx0ICAgcW1pX3dsYW5md19pbmRfcmVnaXN0ZXJfcmVzcF9tc2dfdjAxX2VpLCByZXNwKTtcXG4yNDE5OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjI0MjA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjQyMTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDk6MjA6MTAuMDc0MTE5MDdaIiwiU2VxIjo2MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQyNjA2MTY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGF0aDEyayBRTUkgQ2FwYWJpbGl0eSBFeGNoYW5nZSoqXG5cbk9rYXksIHNvIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgaXMgZGVmaW5pdGVseSBhIHJlcXVlc3QtcmVzcG9uc2UgZnVuY3Rpb247IGl0IHNlbmRzIGEgUU1JIG1lc3NhZ2UgYW5kIHRoZW4gd2FpdHMgZm9yIGEgcmVwbHkuIEknbSBpbWFnaW5pbmcgc3l6a2FsbGVyIGFzIHRoZSBRTUkgc2VydmVyIGhlcmUuIElmIHN5emthbGxlciByZXBsaWVzIHRvIHRoaXMgY2FwYWJpbGl0eSBleGNoYW5nZSwgaXQgY2FuIHNldCBib3RoIGBkeW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkYCBhbmQgYGR5bmFtaWNfZGRyX3N1cHBvcnRgIHRvIDEuIFRoYXQgd291bGQgdHJpZ2dlciBgYWItXHUwMDNlcW1pLmR5bmFtaWNfZGRyX3N1cHBvcnRgIHRvIGJlIHNldCB0byAxLlxuXG5UaGVuLCB0aGUgY29kZSBqdW1wcyBpbnRvIGBhdGgxMmtfcW1pX2V2ZW50X3NlcnZlcl9hcnJpdmVgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBraWNrcyBpbiB3aGVuIGBhdGgxMmtfcW1pX2h3X2dyb3VwX2hvc3RfY2FwX3JlYWR5KGFnKWAgcmV0dXJucyB0cnVlLiBJbiB0aGF0IGNhc2UsIGBhdGgxMmtfY29yZV9od19ncm91cF9zZXRfbWxvX2NhcGFibGUoYWcpYCBpcyBjYWxsZWQsIGFuZCB0aGVuIHRoZXJlJ3MgYSBjaGVjayBmb3IgYSBibG9ja2VkIGBhdGgxMmtfcW1pX2h3X2dyb3VwX2ZpbmRfYmxvY2tlZChhZylgLiBJZiB0aGVyZSBpcyBhIGJsb2NrZWQgZ3JvdXAsIHRoZW4gaXQgdHJpZ2dlcnMgdGhlIGNhbGwgdG8gYGF0aDEya19xbWlfdHJpZ2dlcl9ob3N0X2NhcChibG9ja19hYilgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBzcGVjaWZpY2FsbHkgdHJpZ2dlcmluZyBgQVRIMTJLX1FNSV9FVkVOVF9IT1NUX0NBUGAsIHdoaWNoIHRoZW4ga2lja3Mgb2ZmIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIGRpZyBpbnRvIGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIG5vdyBhbmQgc2VlIHdoYXQgaXQncyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA3OTIsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToyMDoxOC41MDAxODQ3MjZaIiwiU2VxIjo2NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvcW1pLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI4NCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyODQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMjI4NTpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjg2OlxcdFxcbjIyODc6XFx0XFx0aWYgKGFiLVxcdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydCkge1xcbjIyODg6XFx0XFx0XFx0cmVxLmR5bmFtaWNfbWVtX3N1cHBvcnRfdmFsaWQgPSAxO1xcbjIyODk6XFx0XFx0XFx0cmVxLmR5bmFtaWNfbWVtX3N1cHBvcnQgPSAxO1xcbjIyOTA6XFx0XFx0fVxcbjIyOTE6XFx0XFxuMjI5MjpcXHRcXHRyZXQgPSBxbWlfdHhuX2luaXQoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBcXHUwMDI2dHhuLFxcbjIyOTM6XFx0XFx0XFx0XFx0ICAgcW1pX3dsYW5md19ob3N0X2NhcF9yZXNwX21zZ192MDFfZWksIFxcdTAwMjZyZXNwKTtcXG4yMjk0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIyOTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjI5NjpcXHRcXG4yMjk3OlxcdFxcdHJldCA9IHFtaV9zZW5kX3JlcXVlc3QoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBOVUxMLCBcXHUwMDI2dHhuLFxcbjIyOTg6XFx0XFx0XFx0XFx0ICAgICAgIFFNSV9XTEFORldfSE9TVF9DQVBfUkVRX1YwMSxcXG4yMjk5OlxcdFxcdFxcdFxcdCAgICAgICBRTUlfV0xBTkZXX0hPU1RfQ0FQX1JFUV9NU0dfVjAxX01BWF9MRU4sXFxuMjMwMDpcXHRcXHRcXHRcXHQgICAgICAgcW1pX3dsYW5md19ob3N0X2NhcF9yZXFfbXNnX3YwMV9laSwgXFx1MDAyNnJlcSk7XFxuMjMwMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjIzMDI6XFx0XFx0XFx0cW1pX3R4bl9jYW5jZWwoXFx1MDAyNnR4bik7XFxuMjMwMzpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcIkZhaWxlZCB0byBzZW5kIGhvc3QgY2FwYWJpbGl0eSByZXF1ZXN0LGVyciA9ICVkXFxcXG5cXFwiLCByZXQpO1xcbjIzMDQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMwNTpcXHRcXHR9XFxuMjMwNjpcXHRcXG4yMzA3OlxcdFxcdHJldCA9IHFtaV90eG5fd2FpdChcXHUwMDI2dHhuLCBtc2Vjc190b19qaWZmaWVzKEFUSDEyS19RTUlfV0xBTkZXX1RJTUVPVVRfTVMpKTtcXG4yMzA4OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIzMDk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMxMDpcXHRcXG4yMzExOlxcdFxcdGlmIChyZXNwLnJlc3AucmVzdWx0ICE9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDEpIHtcXG4yMzEyOlxcdFxcdFxcdGF0aDEya193YXJuKGFiLCBcXFwiSG9zdCBjYXBhYmlsaXR5IHJlcXVlc3QgZmFpbGVkLCByZXN1bHQ6ICVkLCBlcnI6ICVkXFxcXG5cXFwiLFxcbjIzMTM6XFx0XFx0XFx0XFx0ICAgIHJlc3AucmVzcC5yZXN1bHQsIHJlc3AucmVzcC5lcnJvcik7XFxuMjMxNDpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbjIzMTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMxNjpcXHRcXHR9XFxuMjMxNzpcXHRcXG4yMzE4OlxcdG91dDpcXG4yMzE5OlxcdFxcdHJldHVybiByZXQ7XFxuMjMyMDpcXHR9XFxuMjMyMTpcXHRcXG4yMzIyOlxcdHN0YXRpYyB2b2lkIGF0aDEya19xbWlfcGh5X2NhcF9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuMjMyMzpcXHR7XFxuMjMyNDpcXHRcXHRzdHJ1Y3QgcW1pX3dsYW5md19waHlfY2FwX3JlcV9tc2dfdjAxIHJlcSA9IHt9O1xcbjIzMjU6XFx0XFx0c3RydWN0IHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDEgcmVzcCA9IHt9O1xcbjIzMjY6XFx0XFx0c3RydWN0IHFtaV90eG4gdHhuO1xcbjIzMjc6XFx0XFx0aW50IHJldDtcXG4yMzI4OlxcdFxcbjIzMjk6XFx0XFx0cmV0ID0gcW1pX3R4bl9pbml0KFxcdTAwMjZhYi1cXHUwMDNlcW1pLmhhbmRsZSwgXFx1MDAyNnR4bixcXG4yMzMwOlxcdFxcdFxcdFxcdCAgIHFtaV93bGFuZndfcGh5X2NhcF9yZXNwX21zZ192MDFfZWksIFxcdTAwMjZyZXNwKTtcXG4yMzMxOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIzMzI6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjMzMzpcXHRcXG4yMzM0OlxcdFxcdHJldCA9IHFtaV9zZW5kX3JlcXVlc3QoXFx1MDAyNmFiLVxcdTAwM2VxbWkuaGFuZGxlLCBOVUxMLCBcXHUwMDI2dHhuLFxcbjIzMzU6XFx0XFx0XFx0XFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfVjAxLFxcbjIzMzY6XFx0XFx0XFx0XFx0ICAgICAgIFFNSV9XTEFORldfUEhZX0NBUF9SRVFfTVNHX1YwMV9NQVhfTEVOLFxcbjIzMzc6XFx0XFx0XFx0XFx0ICAgICAgIHFtaV93bGFuZndfcGh5X2NhcF9yZXFfbXNnX3YwMV9laSwgXFx1MDAyNnJlcSk7XFxuMjMzODpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjIzMzk6XFx0XFx0XFx0cW1pX3R4bl9jYW5jZWwoXFx1MDAyNnR4bik7XFxuMjM0MDpcXHRcXHRcXHRhdGgxMmtfd2FybihhYiwgXFxcImZhaWxlZCB0byBzZW5kIHBoeSBjYXBhYmlsaXR5IHJlcXVlc3Q6ICVkXFxcXG5cXFwiLCByZXQpO1xcbjIzNDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM0MjpcXHRcXHR9XFxuMjM0MzpcXHRcXG4yMzQ0OlxcdFxcdHJldCA9IHFtaV90eG5fd2FpdChcXHUwMDI2dHhuLCBtc2Vjc190b19qaWZmaWVzKEFUSDEyS19RTUlfV0xBTkZXX1RJTUVPVVRfTVMpKTtcXG4yMzQ1OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbjIzNDY6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM0NzpcXHRcXG4yMzQ4OlxcdFxcdGlmIChyZXNwLnJlc3AucmVzdWx0ICE9IFFNSV9SRVNVTFRfU1VDQ0VTU19WMDEpIHtcXG4yMzQ5OlxcdFxcdFxcdHJldCA9IC1FT1BOT1RTVVBQO1xcbjIzNTA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjM1MTpcXHRcXHR9XFxuMjM1MjpcXHRcXG4yMzUzOlxcdFxcdGlmIChyZXNwLnNpbmdsZV9jaGlwX21sb19zdXBwb3J0X3ZhbGlkIFxcdTAwMjZcXHUwMDI2IHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQpXFxuMjM1NDpcXHRcXHRcXHRhYi1cXHUwMDNlc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQgPSB0cnVlO1xcbjIzNTU6XFx0XFxuMjM1NjpcXHRcXHRpZiAoIXJlc3AubnVtX3BoeV92YWxpZCkge1xcbjIzNTc6XFx0XFx0XFx0cmV0ID0gLUVOT0RBVEE7XFxuMjM1ODpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMzU5OlxcdFxcdH1cXG4yMzYwOlxcdFxcbjIzNjE6XFx0XFx0YWItXFx1MDAzZXFtaS5udW1fcmFkaW9zID0gcmVzcC5udW1fcGh5O1xcbjIzNjI6XFx0XFxuMjM2MzpcXHRcXHRpZiAocmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0X3ZhbGlkKVxcbjIzNjQ6XFx0XFx0XFx0YWItXFx1MDAzZXFtaS5keW5hbWljX2Rkcl9zdXBwb3J0ID0gcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0O1xcbjIzNjU6XFx0XFxuMjM2NjpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSxcXG4yMzY3OlxcdFxcdFxcdCAgIFxcXCJwaHkgY2FwYWJpbGl0eSByZXNwIHZhbGlkICVkIHNpbmdsZV9jaGlwX21sb19zdXBwb3J0ICVkIHZhbGlkICVkIG51bV9waHkgJWQgdmFsaWQgJWQgYm9hcmRfaWQgJWQgZHluYW1pY19kZHJfdmFsaWQgJXUgZHluYW1pY19kZHJfc3VwcG9ydCAldVxcXFxuXFxcIixcXG4yMzY4OlxcdFxcdFxcdCAgIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnRfdmFsaWQsIHJlc3Auc2luZ2xlX2NoaXBfbWxvX3N1cHBvcnQsXFxuMjM2OTpcXHRcXHRcXHQgICByZXNwLm51bV9waHlfdmFsaWQsIHJlc3AubnVtX3BoeSwgcmVzcC5ib2FyZF9pZF92YWxpZCwgcmVzcC5ib2FyZF9pZCxcXG4yMzcwOlxcdFxcdFxcdCAgIHJlc3AuZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZCwgcmVzcC5keW5hbWljX2Rkcl9zdXBwb3J0KTtcXG4yMzcxOlxcdFxcbjIzNzI6XFx0XFx0cmV0dXJuO1xcbjIzNzM6XFx0XFxuMjM3NDpcXHRvdXQ6XFxuMjM3NTpcXHRcXHQvKiBJZiBQSFkgY2FwYWJpbGl0eSBub3QgYWR2ZXJ0aXNlZCB0aGVuIHJlbHkgb24gZGVmYXVsdCBudW0gbGluayAqL1xcbjIzNzY6XFx0XFx0YWItXFx1MDAzZXFtaS5udW1fcmFkaW9zID0gYWItXFx1MDAzZWh3X3BhcmFtcy1cXHUwMDNlZGVmX251bV9saW5rO1xcbjIzNzc6XFx0XFxuMjM3ODpcXHRcXHRhdGgxMmtfZGJnKGFiLCBBVEgxMktfREJHX1FNSSxcXG4yMzc5OlxcdFxcdFxcdCAgIFxcXCJubyB2YWxpZCByZXNwb25zZSBmcm9tIFBIWSBjYXBhYmlsaXR5LCBjaG9vc2UgZGVmYXVsdCBudW1fcGh5ICVkXFxcXG5cXFwiLFxcbjIzODA6XFx0XFx0XFx0ICAgYWItXFx1MDAzZXFtaS5udW1fcmFkaW9zKTtcXG4yMzgxOlxcdH1cXG4yMzgyOlxcdFxcbjIzODM6XFx0c3RhdGljIGludCBhdGgxMmtfcW1pX2Z3X2luZF9yZWdpc3Rlcl9zZW5kKHN0cnVjdCBhdGgxMmtfYmFzZSAqYWIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjIwOjE4LjUwMDUwODgxN1oiLCJTZXEiOjY1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDIxMTQ3MTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBpbiBhIFN5emthbGxlciBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBmdW5jdGlvbiwgYW5kIGl0IHNlZW1zIHRoZSBjb2RlIHBhdGggd2hlcmUgaXQgc2VuZHMgYSByZXF1ZXN0IHdpdGggYGR5bmFtaWNfbWVtX3N1cHBvcnRfdmFsaWQgPSAxYCBhbmQgYGR5bmFtaWNfbWVtX3N1cHBvcnQgPSAxYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBzZXR0aW5nIG9mIGBhYi1cdTAwM2VxbWkuZHluYW1pY19kZHJfc3VwcG9ydGAuIFRoYXQncyB0aGF0IHBhdGNoJ3MgZG9pbmcsIHNvIHRoYXQgcGFydCBpcyBjbGVhci5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgKmNhbiogd2UgaGl0IHRoaXMgY29kZSB3aXRoIHN5emthbGxlcj8gVGhlIGNydWNpYWwgZmFjdG9yIGlzIHdoZXRoZXIgc3l6a2FsbGVyIGNhbiBlbXVsYXRlIGEgUU1JIHNlcnZlciB0aHJvdWdoIGl0cyBJUEMgcm91dGVyLiBJZiBpdCBjYW4sIHdlJ3JlIGluIGJ1c2luZXNzLiBNeSBtZW1vcnkgdGVsbHMgbWUgc3l6a2FsbGVyICpkb2VzKiBoYXZlIHN1cHBvcnQgZm9yIEFGX1FJUENSVFIgc29ja2V0cyDigJMgaXQgY2FuIGJpbmQgdG8gdGhlbSwgYWR2ZXJ0aXNlIHNlcnZpY2VzLCBhbmQgaGFuZGxlIGJvdGggaW5jb21pbmcgYW5kIG91dGdvaW5nIG1lc3NhZ2VzLiBTbywgYmFzZWQgb24gdGhhdCwgdGhlIGFuc3dlciBpcyAqbGlrZWx5KiB5ZXMsIHdlIGNhbiBlbXVsYXRlIHRoaXMuXG5cbkhvd2V2ZXIsIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgcHJlcmVxdWlzaXRlcyBmb3IgYGF0aDEya2AuIEl0IHdvdWxkbid0IGRvIHRvIGFzc3VtZS4gRG9lcyBgYXRoMTJrYCByZXF1aXJlIGBDT05GSUdfQVRIMTJLYD8gWWVzLCBvZiBjb3Vyc2UuIEFuZCBgQ09ORklHX1FSVFJgPyBJIGJlbGlldmUgc28sIGFuZCB5ZXMsIGl0IGxvb2tzIGxpa2UgYGF0aDEya2AgZGVwZW5kcyBvbiBgUVJUUmAuIE9rYXksIGdvb2QuIEnigJlsbCBtYWtlIGEgbm90ZSB0byBjaGVjayB0aGUgYEtjb25maWdgIGZpbGVzIGZvciBgYXRoMTJrYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSdtIG5vdCBtaXNzaW5nIGFueSBkZXBlbmRlbmN5IGRldGFpbHMuIFRoaXMgbG9va3MgcHJvbWlzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI2NywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjIwOjI4LjcxMTk4NDI3NloiLCJTZXEiOjY2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5NjAzNjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBVEgxMktcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlLUNsZWFyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjI6Y29uZmlnIEFUSDEyS1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJRdWFsY29tbSBXaS1GaSA3IHN1cHBvcnQgKGF0aDEyaylcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjE3OmNvbmZpZyBBVEgxMktfQUhCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTE4LVxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0yNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6MjU6Y29uZmlnIEFUSDEyS19ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy0yNi1cXHRib29sIFxcXCJhdGgxMmsgZGVidWdnaW5nXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTM0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZzozNTpjb25maWcgQVRIMTJLX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiUXVhbGNvbW0gYXRoMTJrIGRlYnVnZnMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvS2NvbmZpZy00My1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWc6NDQ6Y29uZmlnIEFUSDEyS19UUkFDSU5HXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnLTQ1LVxcdGJvb2wgXFxcImF0aDEyayB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnOjUzOmNvbmZpZyBBVEgxMktfQ09SRURVTVBcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL0tjb25maWctNTQtXFx0Ym9vbCBcXFwiYXRoMTJrIGNvcmVkdW1wXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToyMDoyOS4zMjE1OTUyMzRaIiwiU2VxIjo2NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxNzc0OTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYWxyZWFkeSBkZWVwIGluIGtlcm5lbCBkZXZlbG9wbWVudCBvciBlbWJlZGRlZCBzeXN0ZW1zOlxuXG4qKkluaXRpYWwgS2NvbmZpZyBSZXZpZXcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBzcGFjZSwgdGhlIGRlcGVuZGVuY2llcywgYW5kIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBvciBzdWJzeXN0ZW0uIEknbSBsb29raW5nIGZvciB0aGUga2V5IHZhcmlhYmxlcywgdGhlIGJvb2xlYW4sIHRyaXN0YXRlLCBhbmQgaW50ZWdlciBvcHRpb25zLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIGVhY2ggb3RoZXIuIEl0J3MgYWJvdXQgYnVpbGRpbmcgYSBtZW50YWwgbWFwIG9mIHRoZSBwb3NzaWJsZSBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGJlIGFibGUgdG8gYW50aWNpcGF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIHNlbGVjdGluZyBzcGVjaWZpYyBmZWF0dXJlcywgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB0aGUgcmVzdWx0aW5nIGtlcm5lbCBpbWFnZSBzaXplLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhpcyBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MzYzLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToyMDozNC44MzkzNDczOFoiLCJTZXEiOjY4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZS1DbGVhclxcbiAgIDI6XFx0Y29uZmlnIEFUSDEyS1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIlF1YWxjb21tIFdpLUZpIDcgc3VwcG9ydCAoYXRoMTJrKVxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gTUFDODAyMTEgXFx1MDAyNlxcdTAwMjYgSEFTX0RNQSBcXHUwMDI2XFx1MDAyNiBQQ0lcXG4gICA1OlxcdFxcdHNlbGVjdCBRQ09NX1FNSV9IRUxQRVJTXFxuICAgNjpcXHRcXHRzZWxlY3QgTUhJX0JVU1xcbiAgIDc6XFx0XFx0c2VsZWN0IFFSVFJcXG4gICA4OlxcdFxcdHNlbGVjdCBRUlRSX01ISVxcbiAgIDk6XFx0XFx0c2VsZWN0IFBDSV9QV1JDVFJMX1BXUlNFUSBpZiBIQVZFX1BXUkNUUkxcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIFF1YWxjb21tIFRlY2hub2xvZ2llcyBXaS1GaSA3IChJRUVFXFxuICAxMjpcXHRcXHQgIDgwMi4xMWJlKSBmYW1pbHkgb2YgY2hpcHNldHMsIGZvciBleGFtcGxlIFdDTjc4NTAgYW5kXFxuICAxMzpcXHRcXHQgIFFDTjkyNzQuXFxuICAxNDpcXHRcXG4gIDE1OlxcdFxcdCAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIGF0aDEyay5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIEFUSDEyS19BSEJcXG4gIDE4OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBBSEIgc3VwcG9ydFxcXCJcXG4gIDE5OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IFJFTU9URVBST0NcXG4gIDIwOlxcdFxcdHNlbGVjdCBRQ09NX01EVF9MT0FERVJcXG4gIDIxOlxcdFxcdHNlbGVjdCBRQ09NX1NDTVxcbiAgMjI6XFx0XFx0aGVscFxcbiAgMjM6XFx0XFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgQXRoMTJrIEFIQiBidXMgY2hpcHNldHMsIGV4YW1wbGUgSVBRNTMzMi5cXG4gIDI0OlxcdFxcbiAgMjU6XFx0Y29uZmlnIEFUSDEyS19ERUJVR1xcbiAgMjY6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIGRlYnVnZ2luZ1xcXCJcXG4gIDI3OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLXFxuICAyODpcXHRcXHRoZWxwXFxuICAyOTpcXHRcXHQgIEVuYWJsZSBkZWJ1ZyBzdXBwb3J0LCBmb3IgZXhhbXBsZSBkZWJ1ZyBtZXNzYWdlcyB3aGljaCBtdXN0XFxuICAzMDpcXHRcXHQgIGJlIGVuYWJsZWQgc2VwYXJhdGVseSB1c2luZyB0aGUgZGVidWdfbWFzayBtb2R1bGUgcGFyYW1ldGVyLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgMzM6XFx0XFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgQVRIMTJLX0RFQlVHRlNcXG4gIDM2OlxcdFxcdGJvb2wgXFxcIlF1YWxjb21tIGF0aDEyayBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIEFUSDEySyBcXHUwMDI2XFx1MDAyNiBNQUM4MDIxMV9ERUJVR0ZTXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIEVuYWJsZSBhdGgxMmsgZGVidWdmcyBzdXBwb3J0XFxuICA0MDpcXHRcXG4gIDQxOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWSB0byBtYWtlIGl0IGVhc2llciB0byBkZWJ1ZyBwcm9ibGVtcy4gQnV0IGlmXFxuICA0MjpcXHRcXHQgIHlvdSB3YW50IG9wdGltYWwgcGVyZm9ybWFuY2UgY2hvb3NlIE4uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBBVEgxMktfVFJBQ0lOR1xcbiAgNDU6XFx0XFx0Ym9vbCBcXFwiYXRoMTJrIHRyYWNpbmcgc3VwcG9ydFxcXCJcXG4gIDQ2OlxcdFxcdGRlcGVuZHMgb24gQVRIMTJLIFxcdTAwMjZcXHUwMDI2IEVWRU5UX1RSQUNJTkdcXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgRW5hYmxlIGF0aDEyayB0cmFjaW5nIGluZnJhc3RydWN0dXJlLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgNTE6XFx0XFx0ICB5b3Ugd2FudCBvcHRpbWFsIHBlcmZvcm1hbmNlIGNob29zZSBOLlxcbiAgNTI6XFx0XFxuICA1MzpcXHRjb25maWcgQVRIMTJLX0NPUkVEVU1QXFxuICA1NDpcXHRcXHRib29sIFxcXCJhdGgxMmsgY29yZWR1bXBcXFwiXFxuICA1NTpcXHRcXHRkZXBlbmRzIG9uIEFUSDEyS1xcbiAgNTY6XFx0XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuICA1NzpcXHRcXHRoZWxwXFxuICA1ODpcXHRcXHQgIEVuYWJsZSBhdGgxMmsgY29yZWR1bXAgY29sbGVjdGlvblxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGVidWcgcHJvYmxlbXMuIEJ1dCBpZlxcbiAgNjE6XFx0XFx0ICBkdW1wIGNvbGxlY3Rpb24gbm90IHJlcXVpcmVkIGNob29zZSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwOToyMDozNC44Mzk0NzQ0NFoiLCJTZXEiOjY5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODQxNDEyMTA4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQVRIMTJLIFFNSSBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgQVRIMTJLYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHdlIG5lZWQgdG8gZW5hYmxlIHRvIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUuIEl0IGRlcGVuZHMgb24gYE1BQzgwMjExYCwgYEhBU19ETUFgLCBhbmQgYFBDSWAsIHdoaWNoIGFyZSBzdGFuZGFyZCByZXF1aXJlbWVudHMgZm9yIHRoaXMga2luZCBvZiB3aXJlbGVzcyBkcml2ZXIuIE1vcmUgaW1wb3J0YW50bHksIGl0IHNlbGVjdHMgYSBzZXQgb2YgY3J1Y2lhbCBzdWJzeXN0ZW1zLCBuYW1lbHkgYFFDT01fUU1JX0hFTFBFUlNgLCBgTUhJX0JVU2AsIGBRUlRSYCwgYW5kIGBRUlRSX01ISWAuIFRoZXNlIGFyZSBhbGwgcG9pbnRlcnMgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cblxuVGhlIGtleSBoZXJlIGlzIHRoYXQgU3l6a2FsbGVyIGNhbiBhY3R1YWxseSAqcmVhY2gqIHRoaXMgY29kZS4gQnkgYWRkaW5nIGEgdmlydHVhbCBQQ0kgZGV2aWNlLCB3ZSBjYW4gdHJpZ2dlciBgYXRoMTJrX3BjaV9wcm9iZWAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIHRoZW4gZW11bGF0ZSB0aGUgUU1JIHNlcnZlciB1c2luZyBgQUZfUUlQQ1JUUmAgc29ja2V0cy4gVGhhdCdzIHRoZSBjcnVjaWFsIGJpdC5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIHR3byBzcGVjaWZpYyBmdW5jdGlvbnM6IGBhdGgxMmtfcW1pX2hvc3RfY2FwX3NlbmRgIGFuZCBgYXRoMTJrX3FtaV9waHlfY2FwX3NlbmRgLiBUaGVzZSBhcmUgdGhlIG9uZXMgd2hlcmUgdGhlIG5ldyBmaWVsZHMgcmVsYXRlZCB0byBkeW5hbWljIEREUiBhbmQgbWVtb3J5IHN1cHBvcnQgYXJlIGJlaW5nIHVzZWQuIFRoZXkncmUgc2VuZGluZyBRTUkgcmVxdWVzdHMgYW5kIHdhaXRpbmcgZm9yIHRoZSBmaXJtd2FyZSdzIHJlc3BvbnNlcy4gU2luY2UgdGhlIHBhdGNoIGFkZHMgbmV3IGBkeW5hbWljX21lbV9zdXBwb3J0X3ZhbGlkYCwgYGR5bmFtaWNfbWVtX3N1cHBvcnRgLCBgZHluYW1pY19kZHJfc3VwcG9ydF92YWxpZGAsIGFuZCBgZHluYW1pY19kZHJfc3VwcG9ydGAgZmllbGRzIHRvIHRoZSBRTUkgbWVzc2FnZXMsIHRoZSBwYXRjaCBpcyBpbmRlZWQgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIHVuZGVyIHRoZSByaWdodCBjb25kaXRpb25zLiBUaGF0J3MgZXhjZWxsZW50LCBpdCBpcyB3b3J0aCBmdXp6aW5nLlxuXG5UbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgcGF0Y2ggZGlmZiwgYW5kIEkgY2FuIGNvbmZpcm0gdGhhdCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSB0aGUgb25lcyBiZWluZyBjYWxsZWQgaW4gYHFtaS5jYCwgYW5kIHRoZSBRTUkgZnJhbWV3b3JrIGluZGVlZCB1c2VzIHRoZSBwYXRjaGVkIGFycmF5cyB3aGVuIGBxbWlfc2VuZF9yZXF1ZXN0YCBhbmQgYHFtaV90eG5fd2FpdGAgYXJlIGNhbGxlZC5cblxuU3BlY2lmaWNhbGx5LCBgYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kYCBpcyAqbm90KiBzdGF0aWMsIHNvIGl0J3MgZXhwb3J0ZWQgYW5kIGFjY2Vzc2libGUgYW5kIHRoZSBvdGhlciBvbmUgYGF0aDEya19xbWlfcGh5X2NhcF9zZW5kYCBpcyBzdGF0aWMgd2hpY2ggaXMgYWxzbyBmaW5lLiBUaGF0IGlzIHBlcmZlY3QuXG5cblNvLCB0aGUgcmVhc29uaW5nIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGR5bmFtaWMgRERSIGFuZCBtZW1vcnkgaW4gdGhlIGF0aDEyayBkcml2ZXIncyBRTUkgY29tbXVuaWNhdGlvbi4gSXQgbW9kaWZpZXMgdGhlIFFNSSBtZXNzYWdlIGVuY29kaW5nL2RlY29kaW5nIGFycmF5cyBhbmQgZnVuY3Rpb25zIHRvIHNldCBhbmQgcmVhZCB0aGVzZSBuZXcgZmllbGRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBkdXJpbmcgdGhlIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHdoZW4gYSBRTUkgc2VydmVyIGFycml2ZXMuIFN5emthbGxlciBjYW4gdHJpZ2dlciB0aGlzIGJ5IGVtdWxhdGluZyBhIFBDSSBkZXZpY2UgYW5kIHRoZSBRTUkgZmlybXdhcmUgc2VydmljZS5cblxuVGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIGlzIGBBVEgxMktgLiBXaGlsZSBgUVJUUmAgYW5kIGBRQ09NX1FNSV9IRUxQRVJTYCBhcmUgc2VsZWN0ZWQgYnkgYEFUSDEyS2AgYW5kIHdlIGRvbid0IHN0cmljdGx5IG5lZWQgdG8gbGlzdCB0aGVtLCBidXQgaXQgZG9lc24ndCBodXJ0LiBCdXQsIGVuYWJsaW5nIGBBVEgxMktgIHNob3VsZCBiZSBlbm91Z2guXG5cblRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIGZpbmRpbmcuIEknbSBnb2luZyB0byBzZXQgdGhlc2UgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU0MjUsIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA5OjIwOjUzLjI1MzU5OTU3MVoiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTA3NTg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kXCIsXG4gICAgXCJhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHluYW1pYyBERFIgYW5kIG1lbW9yeSBzdXBwb3J0IGluIHRoZSBhdGgxMmsgZHJpdmVyJ3MgUU1JIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUuIEl0IG1vZGlmaWVzIHRoZSBRTUkgbWVzc2FnZSBlbmNvZGluZy9kZWNvZGluZyBhcnJheXMgYW5kIHRoZSBmdW5jdGlvbnMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgdG8gc2V0IGFuZCByZWFkIHRoZXNlIG5ldyBmaWVsZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gd2hlbiBhIFFNSSBzZXJ2ZXIgKGZpcm13YXJlKSBhcnJpdmVzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhpcyBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRvIHByb2JlIHRoZSBhdGgxMmsgZHJpdmVyIGFuZCBlbXVsYXRpbmcgdGhlIFFNSSBmaXJtd2FyZSBzZXJ2aWNlIHZpYSBBRl9RSVBDUlRSIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQVRIMTJLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXRoMTJrX3FtaV9ob3N0X2NhcF9zZW5kXCIsXG4gICAgXCJhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZHluYW1pYyBERFIgYW5kIG1lbW9yeSBzdXBwb3J0IGluIHRoZSBhdGgxMmsgZHJpdmVyJ3MgUU1JIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUuIEl0IG1vZGlmaWVzIHRoZSBRTUkgbWVzc2FnZSBlbmNvZGluZy9kZWNvZGluZyBhcnJheXMgYW5kIHRoZSBmdW5jdGlvbnMgYGF0aDEya19xbWlfaG9zdF9jYXBfc2VuZGAgYW5kIGBhdGgxMmtfcW1pX3BoeV9jYXBfc2VuZGAgdG8gc2V0IGFuZCByZWFkIHRoZXNlIG5ldyBmaWVsZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGR1cmluZyB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gd2hlbiBhIFFNSSBzZXJ2ZXIgKGZpcm13YXJlKSBhcnJpdmVzLiBTeXprYWxsZXIgY2FuIHRyaWdnZXIgdGhpcyBieSBlbXVsYXRpbmcgYSBQQ0kgZGV2aWNlIHRvIHByb2JlIHRoZSBhdGgxMmsgZHJpdmVyIGFuZCBlbXVsYXRpbmcgdGhlIFFNSSBmaXJtd2FyZSBzZXJ2aWNlIHZpYSBBRl9RSVBDUlRSIHNvY2tldHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfs7j2[1] Phase: Succeeded StartedAt: 2026-06-26 09:21:05 +0000 UTC FinishedAt: 2026-06-26 09:21:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 09:21:05 +0000 UTC FinishedAt: 2026-06-26 09:21:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2] Phase: Succeeded StartedAt: 2026-06-26 09:21:05 +0000 UTC FinishedAt: 2026-06-26 11:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-26 09:21:05 +0000 UTC FinishedAt: 2026-06-26 11:11:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-26 09:21:05 +0000 UTC FinishedAt: 2026-06-26 09:21:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-26 09:21:05 +0000 UTC FinishedAt: 2026-06-26 09:21:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowfs7j2/series-workflowfs7j2-convert-artifact-288306584/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-26 09:21:31 +0000 UTC FinishedAt: 2026-06-26 09:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-26 09:21:31 +0000 UTC FinishedAt: 2026-06-26 09:46:44 +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:*db4b5c69-a764-40a5-8964-bd300ffd1103,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-workflowfs7j2/series-workflowfs7j2-convert-artifact-288306584/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": "653aa12c-3e1d-4dff-a736-a7a95499aa2e", "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-workflowfs7j2/series-workflowfs7j2-build-action-1868460750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-26 09:21:31 +0000 UTC FinishedAt: 2026-06-26 09:46:29 +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:*db4b5c69-a764-40a5-8964-bd300ffd1103,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-workflowfs7j2/series-workflowfs7j2-convert-artifact-288306584/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": "653aa12c-3e1d-4dff-a736-a7a95499aa2e", "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-workflowfs7j2/series-workflowfs7j2-build-action-1868460750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-26 09:46:44 +0000 UTC FinishedAt: 2026-06-26 09:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-26 09:46:44 +0000 UTC FinishedAt: 2026-06-26 09:46:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-26 09:46:44 +0000 UTC FinishedAt: 2026-06-26 09:47:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-26 09:46:44 +0000 UTC FinishedAt: 2026-06-26 09:46:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowfs7j2/series-workflowfs7j2-convert-artifact-90612735/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-26 09:47:00 +0000 UTC FinishedAt: 2026-06-26 09:49:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-26 09:47:00 +0000 UTC FinishedAt: 2026-06-26 09:48:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*653aa12c-3e1d-4dff-a736-a7a95499aa2e,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-workflowfs7j2/series-workflowfs7j2-build-action-1868460750/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-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-26 09:49:01 +0000 UTC FinishedAt: 2026-06-26 09:49:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-26 09:49:02 +0000 UTC FinishedAt: 2026-06-26 09:49:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-26 09:49:02 +0000 UTC FinishedAt: 2026-06-26 10:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-26 09:49:02 +0000 UTC FinishedAt: 2026-06-26 10:14:10 +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:*db4b5c69-a764-40a5-8964-bd300ffd1103,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-workflowfs7j2/series-workflowfs7j2-convert-artifact-90612735/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": "a3ca49cb-433b-4255-8b1a-0e04557bf4b7", "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-workflowfs7j2/series-workflowfs7j2-build-action-1635346963/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-26 09:49:02 +0000 UTC FinishedAt: 2026-06-26 10:14:00 +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:*db4b5c69-a764-40a5-8964-bd300ffd1103,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-workflowfs7j2/series-workflowfs7j2-convert-artifact-90612735/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": "a3ca49cb-433b-4255-8b1a-0e04557bf4b7", "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-workflowfs7j2/series-workflowfs7j2-build-action-1635346963/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-26 10:14:10 +0000 UTC FinishedAt: 2026-06-26 10:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-26 10:14:10 +0000 UTC FinishedAt: 2026-06-26 10:14:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-26 10:14:10 +0000 UTC FinishedAt: 2026-06-26 10:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-26 10:14:10 +0000 UTC FinishedAt: 2026-06-26 10:16:13 +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:*a3ca49cb-433b-4255-8b1a-0e04557bf4b7,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-workflowfs7j2/series-workflowfs7j2-build-action-1635346963/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-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-26 10:16:23 +0000 UTC FinishedAt: 2026-06-26 11:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-26 10:16:23 +0000 UTC FinishedAt: 2026-06-26 11:11:07 +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_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"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:*653aa12c-3e1d-4dff-a736-a7a95499aa2e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a3ca49cb-433b-4255-8b1a-0e04557bf4b7,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-workflowfs7j2/series-workflowfs7j2-build-action-1868460750/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-workflowfs7j2/series-workflowfs7j2-build-action-1635346963/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-26 10:16:23 +0000 UTC FinishedAt: 2026-06-26 10:16:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-26 10:16:23 +0000 UTC FinishedAt: 2026-06-26 10:16:27 +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_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"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-workflowfs7j2/series-workflowfs7j2-convert-artifact-1321823384/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-26 10:16:23 +0000 UTC FinishedAt: 2026-06-26 10:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-26 10:16:23 +0000 UTC FinishedAt: 2026-06-26 10:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-26 10:16:23 +0000 UTC FinishedAt: 2026-06-26 10:16:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-26 10:16:33 +0000 UTC FinishedAt: 2026-06-26 11:11:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfs7j2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ath12k_qmi_host_cap_send","ath12k_qmi_phy_cap_send"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["ATH12K"],"series_id":"0de4794d-03a3-49e2-ae06-824fe2d0e9ed","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-26 10:16:33 +0000 UTC FinishedAt: 2026-06-26 11:10:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*653aa12c-3e1d-4dff-a736-a7a95499aa2e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a3ca49cb-433b-4255-8b1a-0e04557bf4b7,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-workflowfs7j2/series-workflowfs7j2-build-action-1868460750/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-workflowfs7j2/series-workflowfs7j2-build-action-1635346963/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-workflowfs7j2/series-workflowfs7j2-convert-artifact-1321823384/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,}