Name: series-workflow8vfvt Phase: Running StartedAt: 2026-08-02 00:23:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vfvt[0] Phase: Running StartedAt: 2026-08-02 00:23:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vfvt[0].run-triage Phase: Running StartedAt: 2026-08-02 00:23:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8vfvt[0].run-triage(0) Phase: Running StartedAt: 2026-08-02 00:23:26 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +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": "8fd62901d6bf03f274a49dd0060793cc07dd51b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "8fd62901d6bf03f274a49dd0060793cc07dd51b0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BRCMFMAC", "BRCMFMAC_USB" ], "series_id": "0feb88fd-168c-4506-8a5f-c228fa3a284c" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "brcmf_pmksa_v2_op", "brcmf_cfg80211_set_pmksa", "brcmf_cfg80211_del_pmksa", "brcmf_cfg80211_flush_pmksa" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3Bta3NhX3YyX29wJiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9kZWxfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2EmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBjb21wb25lbnRzIG9mIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXJzLiBDaGFuZ2VzIHRvIFBDSWUgKG1zZ2J1Zi5jLCBmbG93cmluZy5jLCBwY2llLmMpIGFuZCBTRElPIChzZGlvLmMpIGFyZSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXMgdGhleSByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLiBIb3dldmVyLCB0aGUgYnJjbWZtYWMgZHJpdmVyIHN1cHBvcnRzIFVTQiwgd2hpY2ggY2FuIGJlIGVtdWxhdGVkIGJ5IHN5emthbGxlci4gVGhlIHBhdGNoIGFkZHMgYGJyY21mX3Bta3NhX3YyX29wYCBpbiB0aGUgc2hhcmVkIGNmZzgwMjExLmMgdG8gaGFuZGxlIFYyIFBNS1NBIGNhY2hlIHVwZGF0ZXMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBOTDgwMjExX0NNRF9TRVRfUE1LU0EpIGlmIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIHJlcG9ydHMgYSBmaXJtd2FyZSB2ZXJzaW9uIFx1MDAzZT0gMTIuIFRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBpcyBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ1MzY5ZTE0MzkyZTFmOTQyODQ0NjljMzg2NmRiN2UyMWNkYmM0YWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDAwOjQ2OjE2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbmluZGV4IDBiNTVkNDQ1ODk1ZjIuLjIzNzVjMmY5ZDk3YTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbkBAIC0zOTg5LDEyICYjNDM7Mzk4OSwxMCBAQCBzdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBicmNtZl9kZWxheSh1MzIgbXMpXG4ge1xuLVx0aWYgKG1zIFx1MDAzYyAxMDAwIC8gSFopIHtcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHRcdG1kZWxheShtcyk7XG4tXHR9IGVsc2Uge1xuJiM0MztcdGlmIChtcyBcdTAwM2M9IDIwKVxuJiM0MztcdFx0dXNsZWVwX3JhbmdlKG1zICogMTAwMCwgbXMgKiAxMDAwICYjNDM7IDEwMDApO1xuJiM0MztcdGVsc2VcbiBcdFx0bXNsZWVwKG1zKTtcbi1cdH1cbiB9XG4gXG4gc3RhdGljIHMzMiBicmNtZl9jb25maWdfd293bF9wYXR0ZXJuKHN0cnVjdCBicmNtZl9pZiAqaWZwLCB1OCBjbWRbNF0sXG5AQCAtNDM2NCw2ICYjNDM7NDM2MiwxMDkgQEAgYnJjbWZfcG1rc2FfdjNfb3Aoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJyY21mX3Bta3NhX3YyX29wIC0gdXBkYXRlIGZpcm13YXJlIFBNS1NBIGNhY2hlIHVzaW5nIHRoZSBWMiBsaXN0IGludGVyZmFjZS5cbiYjNDM7ICpcbiYjNDM7ICogVjIgZmlybXdhcmUgKHJldmlzaW9uIDEyKSB1c2VzIGEgdmVyc2lvbmVkIGZsYXQgbGlzdCBzdHJ1Y3R1cmVcbiYjNDM7ICogKGJyY21mX3Bta19saXN0X3YyX2xlKSByYXRoZXIgdGhhbiB0aGUgcGVyLWVudHJ5IG9wZXJhdGlvbiBtb2RlbCBvZiBWMy5cbiYjNDM7ICogRWFjaCBlbnRyeSBjYXJyaWVzIEZJTFMtc3BlY2lmaWMgZmllbGRzIChyYXcgUE1LIG1hdGVyaWFsLCBTU0lELCBhbmRcbiYjNDM7ICogZmlsc19jYWNoZV9pZCkgaW4gYWRkaXRpb24gdG8gdGhlIGJhc2ljIEJTU0lEICYjNDM7IFBNS0lEIHBhaXIsIGVuYWJsaW5nXG4mIzQzOyAqIEZJTFMgZmFzdC1yb2FtaW5nIG9uIGRldmljZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBWMy5cbiYjNDM7ICpcbiYjNDM7ICogQGNmZzogICBkcml2ZXIgY29uZmlnIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBzaGFkb3cgVjIgUE1LU0EgbGlzdFxuJiM0MzsgKiBAaWZwOiAgIGludGVyZmFjZSBwb2ludGVyXG4mIzQzOyAqIEBwbWtzYTogdGhlIFBNS1NBIHRvIGFkZC9yZW1vdmUsIG9yIE5VTEwgZm9yIGEgZmx1c2hcbiYjNDM7ICogQGFsaXZlOiB0cnVlID0gYWRkIChzZXQgdGltZV9sZWZ0IHRvIG5vLWV4cGlyeSksIGZhbHNlID0gcmVtb3ZlL2ZsdXNoXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgczMyXG4mIzQzO2JyY21mX3Bta3NhX3YyX29wKHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwLFxuJiM0MztcdFx0ICBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLCBib29sIGFsaXZlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGNmZy1cdTAwM2VwdWI7XG4mIzQzO1x0c3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlICpsaXN0ID0gXHUwMDI2Y2ZnLVx1MDAzZXBta19saXN0X3YyO1xuJiM0MztcdHN0cnVjdCBicmNtZl9wbWtzYV92MiAqcG1rID0gbGlzdC1cdTAwM2VwbWs7XG4mIzQzO1x0dTMyIG5wbWsgPSBsZTE2X3RvX2NwdShsaXN0LVx1MDAzZWxlbmd0aCk7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdC8qIG5wbWsgaGVyZSBzdG9yZXMgdGhlIGNvdW50IG9mIHZhbGlkIGVudHJpZXMsIHJlcHVycG9zaW5nIHRoZVxuJiM0MztcdCAqIGxlbmd0aCBmaWVsZCBvZiB0aGUgc2hhZG93IGxpc3QgYXMgYSBjb3VudGVyLiAgV2UgY29udmVydCB0b1xuJiM0MztcdCAqIHRoZSB3aXJlIGZvcm1hdCAoYnl0ZSBsZW5ndGgpIHdoZW4gc2VuZGluZyB0byBmaXJtd2FyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXBta3NhKSB7XG4mIzQzO1x0XHQvKiBGbHVzaDogemVybyB0aGUgc2hhZG93IGxpc3QgYW5kIHB1c2ggYW4gZW1wdHkgVjIgbGlzdC4gKi9cbiYjNDM7XHRcdG1lbXNldChsaXN0LCAwLCBzaXplb2YoKmxpc3QpKTtcbiYjNDM7XHRcdGdvdG8gc2VuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChhbGl2ZSkge1xuJiM0MztcdFx0LyogU2V0OiBzZWFyY2ggZm9yIGV4aXN0aW5nIEJTU0lEIG1hdGNoIGZpcnN0LiAqL1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnBtazsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGlmICghbWVtY21wKHBta3NhLVx1MDAzZWJzc2lkLCBwbWtbaV0uYnNzaWQsIEVUSF9BTEVOKSlcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaSBcdTAwM2U9IEJSQ01GX01BWFBNS0lEKSB7XG4mIzQzO1x0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O1YyIFBNS1NBIGNhY2hlIGZ1bGwgKCVkIGVudHJpZXMpXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCBucG1rKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KFx1MDAyNnBta1tpXSwgMCwgc2l6ZW9mKHBta1tpXSkpO1xuJiM0MztcdFx0cG1rW2ldLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIpKTtcbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2Vic3NpZClcbiYjNDM7XHRcdFx0bWVtY3B5KHBta1tpXS5ic3NpZCwgcG1rc2EtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2VwbWtpZClcbiYjNDM7XHRcdFx0bWVtY3B5KHBta1tpXS5wbWtpZCwgcG1rc2EtXHUwMDNlcG1raWQsIFdMQU5fUE1LSURfTEVOKTtcbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2VwbWsgXHUwMDI2XHUwMDI2IHBta3NhLVx1MDAzZXBta19sZW4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgcG1rc2EtXHUwMDNlcG1rX2xlbiBcdTAwM2M9IFdMQU5fUE1LX0xFTl9TVUlURV9CXzE5Mikge1xuJiM0MztcdFx0XHRtZW1jcHkocG1rW2ldLnBtaywgcG1rc2EtXHUwMDNlcG1rLCBwbWtzYS1cdTAwM2VwbWtfbGVuKTtcbiYjNDM7XHRcdFx0cG1rW2ldLnBta19sZW4gPSBjcHVfdG9fbGUxNihwbWtzYS1cdTAwM2VwbWtfbGVuKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChwbWtzYS1cdTAwM2Vzc2lkIFx1MDAyNlx1MDAyNiBwbWtzYS1cdTAwM2Vzc2lkX2xlbikge1xuJiM0MztcdFx0XHRtZW1jcHkocG1rW2ldLnNzaWQuU1NJRCwgcG1rc2EtXHUwMDNlc3NpZCwgcG1rc2EtXHUwMDNlc3NpZF9sZW4pO1xuJiM0MztcdFx0XHRwbWtbaV0uc3NpZC5TU0lEX2xlbiA9IHBta3NhLVx1MDAzZXNzaWRfbGVuO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0aWYgKHBta3NhLVx1MDAzZWZpbHNfY2FjaGVfaWQpXG4mIzQzO1x0XHRcdHBta1tpXS5maWxzX2NhY2hlX2lkID0gKnBta3NhLVx1MDAzZWZpbHNfY2FjaGVfaWQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgPT0gbnBtaylcbiYjNDM7XHRcdFx0bnBtayYjNDM7JiM0Mzs7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIERlbGV0ZTogZmluZCBieSBCU1NJRCBhbmQgY29tcGFjdCB0aGUgbGlzdC4gKi9cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wbWs7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRpZiAoIW1lbWNtcChwbWtzYS1cdTAwM2Vic3NpZCwgcG1rW2ldLmJzc2lkLCBFVEhfQUxFTikpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNlPSBucG1rKSB7XG4mIzQzO1x0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O1YyIFBNS1NBIGVudHJ5IG5vdCBmb3VuZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGZvciAoOyBpIFx1MDAzYyBucG1rIC0gMTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdG1lbWNweShcdTAwMjZwbWtbaV0sIFx1MDAyNnBta1tpICYjNDM7IDFdLCBzaXplb2YocG1rW2ldKSk7XG4mIzQzO1x0XHRtZW1zZXQoXHUwMDI2cG1rW25wbWsgLSAxXSwgMCwgc2l6ZW9mKHBta1tucG1rIC0gMV0pKTtcbiYjNDM7XHRcdG5wbWstLTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdyaXRlIHRoZSB1cGRhdGVkIGVudHJ5IGNvdW50IGJhY2sgdG8gc2hhZG93IEJFRk9SRSB3ZSBvdmVyd3JpdGVcbiYjNDM7XHQgKiBsaXN0LVx1MDAzZWxlbmd0aCB3aXRoIHRoZSB3aXJlLWZvcm1hdCBieXRlIGxlbmd0aCBhdCBzZW5kOi4gIElmIHdlXG4mIzQzO1x0ICogZG9uJiMzOTt0IGRvIHRoaXMgaGVyZSwgdGhlIG5leHQgY2FsbCB3aWxsIHJlYWQgYSBieXRlLWxlbmd0aCBiYWNrXG4mIzQzO1x0ICogYXMgYW4gZW50cnkgY291bnQgYW5kIHNpbGVudGx5IGNvcnJ1cHQgdGhlIGxpc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlzdC1cdTAwM2VsZW5ndGggPSBjcHVfdG9fbGUxNihucG1rKTtcbiYjNDM7XG4mIzQzO3NlbmQ6XG4mIzQzO1x0LyogQnVpbGQgdGhlIHdpcmUtZm9ybWF0IGJ5dGUgbGVuZ3RoIGFuZCBzZW5kIHRoZSBmdWxsIGxpc3QgdG8gZmlybXdhcmUuXG4mIzQzO1x0ICogUmVhZCBucG1rIGJhY2sgZnJvbSB0aGUgc2hhZG93IChoYW5kbGVzIHRoZSBmbHVzaCBwYXRoIHdoZXJlIG5wbWs9MCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0bnBtayA9IGxlMTZfdG9fY3B1KGxpc3QtXHUwMDNlbGVuZ3RoKTtcbiYjNDM7XHRsaXN0LVx1MDAzZXZlcnNpb24gPSBjcHVfdG9fbGUxNihCUkNNRl9QTUtTQV9WRVJfMik7XG4mIzQzO1x0bGlzdC1cdTAwM2VsZW5ndGggID0gY3B1X3RvX2xlMTYob2Zmc2V0b2Yoc3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlLCBwbWspICYjNDM7XG4mIzQzO1x0XHRcdFx0ICAgbnBtayAqIHNpemVvZihzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFwmIzM0O3Bta2lkX2luZm9cJiMzNDssIGxpc3QsIHNpemVvZigqbGlzdCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztcbiBzdGF0aWMgX191c2VkIHMzMlxuIGJyY21mX3VwZGF0ZV9wbWtsaXN0KHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuIHtcbkBAIC00NDAyLDggJiM0Mzs0NTAzLDggQEAgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxuIFx0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBwbWtzYSwgdHJ1ZSk7XG4tXG4tXHQvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi9cbiYjNDM7XHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXG4mIzQzO1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCB0cnVlKTtcbiBcbiBcdG5wbWsgPSBsZTMyX3RvX2NwdShjZmctXHUwMDNlcG1rX2xpc3QubnBtayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucG1rOyBpJiM0MzsmIzQzOylcbkBAIC00NDQ2LDggJiM0Mzs0NTQ3LDggQEAgYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxuIFx0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBwbWtzYSwgZmFsc2UpO1xuLVxuLVx0LyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovXG4mIzQzO1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxuJiM0MztcdFx0cmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBwbWtzYSwgZmFsc2UpO1xuIFxuIFx0bnBtayA9IGxlMzJfdG9fY3B1KGNmZy1cdTAwM2VwbWtfbGlzdC5ucG1rKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wbWs7IGkmIzQzOyYjNDM7KVxuQEAgLTQ0ODcsOCAmIzQzOzQ1ODgsOCBAQCBicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcbiBcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YzKSlcbiBcdFx0cmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgTlVMTCwgZmFsc2UpO1xuLVxuLVx0LyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovXG4mIzQzO1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxuJiM0MztcdFx0cmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBOVUxMLCBmYWxzZSk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2Y2ZnLVx1MDAzZXBta19saXN0LCAwLCBzaXplb2YoY2ZnLVx1MDAzZXBta19saXN0KSk7XG4gXHRlcnIgPSBicmNtZl91cGRhdGVfcG1rbGlzdChjZmcsIGlmcCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaFxuaW5kZXggNmNlYjMwMTQyOTA1NC4uNTcxNjdmZGU1YmExNSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaFxuQEAgLTM0NCw3ICYjNDM7MzQ0LDggQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX3dvd2wge1xuICAqIEBic3NfbGlzdDogYnNzX2xpc3QgaG9sZGluZyBzY2FubmVkIGFwIGluZm9ybWF0aW9uLlxuICAqIEBic3NfaW5mbzogYnNzIGluZm9ybWF0aW9uIGZvciBjZmc4MDIxMSBsYXllci5cbiAgKiBAY29ubl9pbmZvOiBhc3NvY2lhdGlvbiBpbmZvLlxuLSAqIEBwbWtfbGlzdDogd3BhMiBwbWsgbGlzdC5cbiYjNDM7ICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0IChWMSBmaXJtd2FyZSkuXG4mIzQzOyAqIEBwbWtfbGlzdF92Mjogd3BhMiBwbWsgbGlzdCBmb3IgVjIgZmlybXdhcmUgKEZJTFMtY2FwYWJsZSwgZmlybXdhcmUgcmV2IDEyKS5cbiAgKiBAc2Nhbl9zdGF0dXM6IHNjYW4gYWN0aXZpdHkgb24gdGhlIGRvbmdsZS5cbiAgKiBAcHViOiBjb21tb24gZHJpdmVyIGluZm9ybWF0aW9uLlxuICAqIEBjaGFubmVsOiBjdXJyZW50IGNoYW5uZWwuXG5AQCAtMzc2LDYgJiM0MzszNzcsNyBAQCBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyB7XG4gXHRzdHJ1Y3Qgd2xfY2ZnODAyMTFfYnNzX2luZm8gKmJzc19pbmZvO1xuIFx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyBjb25uX2luZm87XG4gXHRzdHJ1Y3QgYnJjbWZfcG1rX2xpc3RfbGUgcG1rX2xpc3Q7XG4mIzQzO1x0c3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlIHBta19saXN0X3YyO1xuIFx0dW5zaWduZWQgbG9uZyBzY2FuX3N0YXR1cztcbiBcdHN0cnVjdCBicmNtZl9wdWIgKnB1YjtcbiBcdHUzMiBjaGFubmVsO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXG5pbmRleCBlYzE3MDY0NzgwMGRhLi5lZWZjNDM3ZGQwNTUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1xuQEAgLTQzMSw0NSAmIzQzOzQzMSw1NSBAQCB2b2lkIGJyY21mX25ldGlmX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0bmV0aWZfcngoc2tiKTtcbiB9XG4gXG4mIzQzO3N0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvIHtcbiYjNDM7XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBoZHI7XG4mIzQzO1x0czggZGJtX2FudHNpZ25hbDtcbiYjNDM7fSBfX3BhY2tlZDtcbiYjNDM7XG4gdm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfUkFESU9UQVApKSB7XG4tXHRcdC8qIERvIG5vdGhpbmcgKi9cbiYjNDM7XHRcdC8qIEZpcm13YXJlIGFscmVhZHkgcHJvdmlkZWQgYSBmdWxsIHJhZGlvdGFwIGhlYWRlcjsgZG8gbm90aGluZyAqL1xuIFx0fSBlbHNlIGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX01PTklUT1JfRk1UX0hXX1JYX0hEUikpIHtcbiBcdFx0c3RydWN0IHdsY19kMTFyeGhkciAqd2xjX3J4aGRyID0gKHN0cnVjdCB3bGNfZDExcnhoZHIgKilza2ItXHUwMDNlZGF0YTtcbi1cdFx0c3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJhZGlvdGFwO1xuJiM0MztcdFx0c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8gKnJ0YXA7XG4gXHRcdHVuc2lnbmVkIGludCBvZmZzZXQ7XG4gXHRcdHUxNiBSeFN0YXR1czE7XG4mIzQzO1x0XHRzOCByc3NpO1xuIFxuIFx0XHRSeFN0YXR1czEgPSBsZTE2X3RvX2NwdSh3bGNfcnhoZHItXHUwMDNlcnhoZHIuUnhTdGF0dXMxKTtcbiYjNDM7XHRcdHJzc2kgPSB3bGNfcnhoZHItXHUwMDNlcnNzaTtcbiBcbiBcdFx0b2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB3bGNfZDExcnhoZHIpO1xuLVx0XHQvKiBNQUMgaW5zZXJ0cyAyIHBhZCBieXRlcyBmb3IgYTQgaGVhZGVycyBvciBRb1Mgb3IgQS1NU0RVXG4tXHRcdCAqIHN1YmZyYW1lc1xuLVx0XHQgKi9cbiYjNDM7XHRcdC8qIE1BQyBpbnNlcnRzIDIgcGFkIGJ5dGVzIGZvciBhNCBoZWFkZXJzIG9yIFFvUyBvciBBLU1TRFUgc3ViZnJhbWVzICovXG4gXHRcdGlmIChSeFN0YXR1czEgXHUwMDI2IFJYU19QQlBSRVMpXG4gXHRcdFx0b2Zmc2V0ICYjNDM7PSAyO1xuIFx0XHRvZmZzZXQgJiM0Mzs9IEQxMV9QSFlfSERSX0xFTjtcbiBcbiBcdFx0c2tiX3B1bGwoc2tiLCBvZmZzZXQpO1xuIFxuLVx0XHQvKiBUT0RPOiB1c2UgUlggaGVhZGVyIHRvIGZpbGwgc29tZSByYWRpb3RhcCBkYXRhICovXG4tXHRcdHJhZGlvdGFwID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnJhZGlvdGFwKSk7XG4tXHRcdG1lbXNldChyYWRpb3RhcCwgMCwgc2l6ZW9mKCpyYWRpb3RhcCkpO1xuLVx0XHRyYWRpb3RhcC1cdTAwM2VpdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJhZGlvdGFwKSk7XG4tXG4tXHRcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cbi1cdFx0c2tiLVx1MDAzZWxlbiAtPSA0O1xuJiM0MztcdFx0LyogSW5zZXJ0IG91ciByYWRpb3RhcCBoZWFkZXIgd2l0aCBSU1NJIGRhdGEgKi9cbiYjNDM7XHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKnJ0YXApKSlcbiYjNDM7XHRcdFx0Z290byBkcm9wO1xuJiM0MztcdFx0cnRhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpydGFwKSk7XG4mIzQzO1x0XHRtZW1zZXQocnRhcCwgMCwgc2l6ZW9mKCpydGFwKSk7XG4mIzQzO1x0XHRydGFwLVx1MDAzZWhkci5pdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJ0YXApKTtcbiYjNDM7XHRcdHJ0YXAtXHUwMDNlaGRyLml0X3ByZXNlbnQgPSBjcHVfdG9fbGUzMigxIFx1MDAzY1x1MDAzYyBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCk7XG4mIzQzO1x0XHRydGFwLVx1MDAzZWRibV9hbnRzaWduYWwgPSByc3NpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFN0cmlwIHRoZSA0LWJ5dGUgcmVjZWl2ZSBzdGF0dXMgLyBGQ1MgdGFpbCAqL1xuJiM0MztcdFx0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gNCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XG4gXG4tXHRcdC8qIFRPRE86IHVzZSBSWCBzdGF0dXMgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi9cbiYjNDM7XHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKnJhZGlvdGFwKSkpXG4mIzQzO1x0XHRcdGdvdG8gZHJvcDtcbiBcdFx0cmFkaW90YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcmFkaW90YXApKTtcbiBcdFx0bWVtc2V0KHJhZGlvdGFwLCAwLCBzaXplb2YoKnJhZGlvdGFwKSk7XG4gXHRcdHJhZGlvdGFwLVx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcbiBcbi1cdFx0LyogVE9ETzogNCBieXRlcyB3aXRoIHJlY2VpdmUgc3RhdHVzPyAqL1xuLVx0XHRza2ItXHUwMDNlbGVuIC09IDQ7XG4mIzQzO1x0XHQvKiBTdHJpcCB0aGUgNC1ieXRlIHJlY2VpdmUgc3RhdHVzIC8gRkNTIHRhaWwgKi9cbiYjNDM7XHRcdHNrYl90cmltKHNrYiwgc2tiLVx1MDAzZWxlbiAtIDQpO1xuIFx0fVxuIFxuIFx0c2tiLVx1MDAzZWRldiA9IGlmcC1cdTAwM2VuZGV2O1xuQEAgLTQ3OCw2ICYjNDM7NDg4LDEwIEBAIHZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpO1xuIFxuIFx0YnJjbWZfbmV0aWZfcngoaWZwLCBza2IpO1xuJiM0MztcdHJldHVybjtcbiYjNDM7XG4mIzQzO2Ryb3A6XG4mIzQzO1x0YnJjbXVfcGt0X2J1Zl9mcmVlX3NrYihza2IpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJyY21mX3J4X2hkcnB1bGwoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXG5pbmRleCAzNWNiY2VhMGFiYzlhLi5iOWM1MTg5MzlmNTA0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXG5AQCAtMTgyLDEwICYjNDM7MTgyLDggQEAgc3RhdGljIHZvaWQgYnJjbWZfZmxvd3JpbmdfYmxvY2soc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkLFxuIFx0c3RydWN0IGJyY21mX2J1cyAqYnVzX2lmO1xuIFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcbiBcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xuLVx0Ym9vbCBjdXJyZW50bHlfYmxvY2tlZDtcbi1cdGludCBpO1xuLVx0dTggaWZpZHg7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHU4IGlmaWR4O1xuIFxuIFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Zmxvdy1cdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XG4gXG5AQCAtMTk0LDIzICYjNDM7MTkyLDU0IEBAIHN0YXRpYyB2b2lkIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCxcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmbG93LVx1MDAzZWJsb2NrX2xvY2ssIGZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcbiBcbi1cdGN1cnJlbnRseV9ibG9ja2VkID0gZmFsc2U7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmbG93LVx1MDAzZW5yb2ZyaW5nczsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKChmbG93LVx1MDAzZXJpbmdzW2ldKSBcdTAwMjZcdTAwMjYgKGkgIT0gZmxvd2lkKSkge1xuLVx0XHRcdHJpbmcgPSBmbG93LVx1MDAzZXJpbmdzW2ldO1xuLVx0XHRcdGlmICgocmluZy1cdTAwM2VzdGF0dXMgPT0gUklOR19PUEVOKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAgKGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChmbG93LCBpKSA9PSBpZmlkeCkpIHtcbi1cdFx0XHRcdGlmIChyaW5nLVx1MDAzZWJsb2NrZWQpIHtcbi1cdFx0XHRcdFx0Y3VycmVudGx5X2Jsb2NrZWQgPSB0cnVlO1xuLVx0XHRcdFx0XHRicmVhaztcbi1cdFx0XHRcdH1cbi1cdFx0XHR9XG4mIzQzO1x0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcbiYjNDM7XHRyaW5nLVx1MDAzZWJsb2NrZWQgPSBibG9ja2VkO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE1haW50YWluIHRoZSBwZXItaW50ZXJmYWNlIGJsb2NrZWQtcmluZyBjb3VudGVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogV2UgdXNlIHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkIHJhdGhlciB0aGFuIGNoZWNraW5nXG4mIzQzO1x0ICogcmluZy1cdTAwM2VzdGF0dXMgaGVyZS4gIEEgcmluZyB0aGF0IGJlY2FtZSBibG9ja2VkIHdoaWxlXG4mIzQzO1x0ICogUklOR19PUEVOIGhhcyBhbHJlYWR5IGJlZW4gY291bnRlZCAoY291bnRlZF9pbl9ibG9ja2VkPXRydWUpLlxuJiM0MztcdCAqIEJ5IHRoZSB0aW1lIHdlIHVuYmxvY2sgaXQgZHVyaW5nIHRlYXJkb3duIGl0cyBzdGF0dXMgbWF5IGhhdmVcbiYjNDM7XHQgKiBhZHZhbmNlZCB0byBSSU5HX0NMT1NJTkcsIHNvIHRlc3RpbmcgUklOR19PUEVOIHdvdWxkIHdyb25nbHlcbiYjNDM7XHQgKiBza2lwIHRoZSBhdG9taWNfZGVjIGFuZCBwZXJtYW5lbnRseSBsZWFrIHRoZSBjb3VudGVyLCBsZWF2aW5nXG4mIzQzO1x0ICogdGhlIG5ldGlmIHF1ZXVlIHN0b3BwZWQgZm9yZXZlci5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFJ1bGU6XG4mIzQzO1x0ICogICBibG9jayB0cmFuc2l0aW9uICAodW5ibG9ja2Vk4oaSYmxvY2tlZCk6IGNvdW50IG9ubHkgaWYgUklOR19PUEVOLFxuJiM0MztcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGNvdW50ZWRfaW5fYmxvY2tlZC5cbiYjNDM7XHQgKiAgIHVuYmxvY2sgdHJhbnNpdGlvbiAoYmxvY2tlZOKGknVuYmxvY2tlZCk6IGRlY3JlbWVudCBvbmx5IGlmIHdlXG4mIzQzO1x0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGNvdW50ZWQgaXQsXG4mIzQzO1x0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhciBjb3VudGVkX2luX2Jsb2NrZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGJsb2NrZWQpIHtcbiYjNDM7XHRcdGlmIChyaW5nLVx1MDAzZXN0YXR1cyA9PSBSSU5HX09QRU4pIHtcbiYjNDM7XHRcdFx0YXRvbWljX2luYyhcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSk7XG4mIzQzO1x0XHRcdHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkID0gdHJ1ZTtcbiBcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAocmluZy1cdTAwM2Vjb3VudGVkX2luX2Jsb2NrZWQpIHtcbiYjNDM7XHRcdFx0YXRvbWljX2RlYyhcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSk7XG4mIzQzO1x0XHRcdHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkID0gZmFsc2U7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9ubHkgcHJvcGFnYXRlIGEgbmV0aWYgcXVldWUtc3RvcC93YWtlIHdoZW4gdGhlIGludGVyZmFjZVxuJiM0MztcdCAqIHRyYW5zaXRpb25zIGJldHdlZW4gZnVsbHktY2xlYXIgYW5kIGF0LWxlYXN0LW9uZS1ibG9ja2VkLlxuJiM0MztcdCAqIFJlYWRpbmcgdGhlIGF0b21pYyBpcyBzYWZlIGhlcmU6IHdlIGhvbGQgYmxvY2tfbG9jaywgc28gbm9cbiYjNDM7XHQgKiBjb25jdXJyZW50IGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FsbCBjYW4gcmFjZSB0aGUgdXBkYXRlXG4mIzQzO1x0ICogd2UganVzdCBtYWRlIGFib3ZlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChibG9ja2VkIFx1MDAyNlx1MDAyNiBhdG9taWNfcmVhZChcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSkgIT0gMSkge1xuJiM0MztcdFx0LyogQW5vdGhlciByaW5nIHdhcyBhbHJlYWR5IGJsb2NrZWQ7IG5vIG5ldyBxdWV1ZS1zdG9wIG5lZWRlZC4gKi9cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Zmxvdy1cdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRyZXR1cm47XG4gXHR9XG4tXHRmbG93LVx1MDAzZXJpbmdzW2Zsb3dpZF0tXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XG4tXHRpZiAoY3VycmVudGx5X2Jsb2NrZWQpIHtcbiYjNDM7XHRpZiAoIWJsb2NrZWQgXHUwMDI2XHUwMDI2IGF0b21pY19yZWFkKFx1MDAyNmZsb3ctXHUwMDNlaWZfYmxvY2tlZF9jbnRbaWZpZHhdKSAhPSAwKSB7XG4mIzQzO1x0XHQvKiBNb3JlIHJpbmdzIHN0aWxsIGJsb2NrZWQ7IGRvIG5vdCB3YWtlIHRoZSBxdWV1ZSB5ZXQuICovXG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Zmxvdy1cdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XG4gXHRcdHJldHVybjtcbiBcdH1cbkBAIC0zNjcsNiAmIzQzOzM5Niw4IEBAIHN0cnVjdCBicmNtZl9mbG93cmluZyAqYnJjbWZfZmxvd3JpbmdfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IG5yb2ZyaW5ncylcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Zmxvdy1cdTAwM2VibG9ja19sb2NrKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbG93LVx1MDAzZWFkZHJfbW9kZSk7IGkmIzQzOyYjNDM7KVxuIFx0XHRcdGZsb3ctXHUwMDNlYWRkcl9tb2RlW2ldID0gQUREUl9JTkRJUkVDVDtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudCk7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmZsb3ctXHUwMDNlaWZfYmxvY2tlZF9jbnRbaV0sIDApO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXHUwMDNlaGFzaCk7IGkmIzQzOyYjNDM7KVxuIFx0XHRcdGZsb3ctXHUwMDNlaGFzaFtpXS5pZmlkeCA9IEJSQ01GX0ZMT1dSSU5HX0lOVkFMSURfSUZJRFg7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaFxuaW5kZXggZjNkNTExZjlhM2M5YS4uYWZkZWE4YjNmOGFhNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaFxuQEAgLTUsNiAmIzQzOzUsOCBAQFxuICNpZm5kZWYgQlJDTUZNQUNfRkxPV1JJTkdfSFxuICNkZWZpbmUgQlJDTUZNQUNfRkxPV1JJTkdfSFxuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9hdG9taWMuaFx1MDAzZVxuJiM0MztcbiBcbiAjZGVmaW5lIEJSQ01GX0ZMT1dSSU5HX0hBU0hTSVpFXHRcdDUxMlx0XHQvKiBoYXMgdG8gYmUgMl54ICovXG4gI2RlZmluZSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lEXHQweEZGRkZGRkZGXG5AQCAtMjYsNiAmIzQzOzI4LDE2IEBAIGVudW0gcmluZ19zdGF0dXMge1xuIHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nIHtcbiBcdHUxNiBoYXNoX2lkO1xuIFx0Ym9vbCBibG9ja2VkO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVHJ1ZSB3aGVuIHRoaXMgcmluZyBoYXMgYmVlbiBjb3VudGVkIGluIHRoZSBwZXItaW50ZXJmYWNlXG4mIzQzO1x0ICogaWZfYmxvY2tlZF9jbnRbXS4gIFNldCB0byB0cnVlIHdoZW5ldmVyIHRoZSByaW5nIHRyYW5zaXRpb25zXG4mIzQzO1x0ICogdW5ibG9ja2Vk4oaSYmxvY2tlZCB3aGlsZSBSSU5HX09QRU47IGNsZWFyZWQgb24gdGhlIG1hdGNoaW5nXG4mIzQzO1x0ICogYmxvY2tlZOKGknVuYmxvY2tlZCB0cmFuc2l0aW9uLiAgTmVlZGVkIHNvIHRoYXQgYSByaW5nIHRoYXRcbiYjNDM7XHQgKiBiZWNvbWVzIGJsb2NrZWQgd2hpbGUgUklOR19PUEVOIGFuZCBpcyBsYXRlciBtb3ZlZCB0b1xuJiM0MztcdCAqIFJJTkdfQ0xPU0lORyBzdGlsbCBjb3JyZWN0bHkgZGVjcmVtZW50cyB0aGUgY291bnRlciBhdFxuJiM0MztcdCAqIHRlYXJkb3duLCBldmVuIHRob3VnaCBpdHMgc3RhdHVzIGlzIG5vIGxvbmdlciBSSU5HX09QRU4uXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBjb3VudGVkX2luX2Jsb2NrZWQ7XG4gXHRlbnVtIHJpbmdfc3RhdHVzIHN0YXR1cztcbiBcdHN0cnVjdCBza19idWZmX2hlYWQgc2tibGlzdDtcbiB9O1xuQEAgLTQwLDYgJiM0Mzs1MiwxMiBAQCBzdHJ1Y3QgYnJjbWZfZmxvd3Jpbmcge1xuIFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX2hhc2ggaGFzaFtCUkNNRl9GTE9XUklOR19IQVNIU0laRV07XG4gXHRzcGlubG9ja190IGJsb2NrX2xvY2s7XG4gXHRlbnVtIHByb3RvX2FkZHJfbW9kZSBhZGRyX21vZGVbQlJDTUZfTUFYX0lGU107XG4mIzQzO1x0LyogUGVyLWludGVyZmFjZSBjb3VudCBvZiBjdXJyZW50bHkgYmxvY2tlZCBvcGVuIHJpbmdzLlxuJiM0MztcdCAqIE1haW50YWluZWQgYXRvbWljYWxseSBzbyBicmNtZl9mbG93cmluZ19ibG9jaygpIGNhbiBjaGVja1xuJiM0MztcdCAqIHdoZXRoZXIgYW55IHNpYmxpbmcgcmluZyBpcyBhbHJlYWR5IGJsb2NrZWQgaW4gTygxKSB3aXRob3V0XG4mIzQzO1x0ICogaG9sZGluZyBibG9ja19sb2NrIGFjcm9zcyBhbiBPKG5yb2ZyaW5ncykgd2Fsay5cbiYjNDM7XHQgKi9cbiYjNDM7XHRhdG9taWNfdCBpZl9ibG9ja2VkX2NudFtCUkNNRl9NQVhfSUZTXTtcbiBcdHUxNiBucm9mcmluZ3M7XG4gXHRib29sIHRkbHNfYWN0aXZlO1xuIFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKnRkbHNfZW50cnk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuY1xuaW5kZXggYTQzZjFhMzhiMGUzMC4uM2MxY2EzNTVlOGVlYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuY1xuQEAgLTEwMzcsNyAmIzQzOzEwMzcsOSBAQCBpbnQgYnJjbWZfZndzX21hY2Rlc2NfaW5kaWNhdGUoc3RydWN0IGJyY21mX2Z3c19pbmZvICpmd3MsIHU4IHR5cGUsIHU4ICpkYXRhKVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCYjMzQ7dXNlIGV4aXN0aW5nXFxuXCYjMzQ7KTtcbiBcdFx0XHRXQVJOX09OKGVudHJ5LVx1MDAzZW1hY19oYW5kbGUgIT0gbWFjX2hhbmRsZSk7XG4tXHRcdFx0LyogVE9ETzogd2hhdCBzaG91bGQgd2UgZG8gaGVyZTogY29udGludWUsIHJlaW5pdCwgLi4gKi9cbiYjNDM7XHRcdFx0LyogRmlybXdhcmUgcmUtc2VudCBBREQgZm9yIHRoZSBzYW1lIE1BQyBoYW5kbGUuXG4mIzQzO1x0XHRcdCAqIE5vIGFjdGlvbiByZXF1aXJlZDsgaXQgaXMgYSBzYWZlIG5vLW9wLlxuJiM0MztcdFx0XHQgKi9cbiBcdFx0fVxuIFx0fVxuIFx0cmV0dXJuIDA7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG5pbmRleCBiYTFjZTE1NTJlMGY0Li44ZGI2MTY3MDcyZGEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcbkBAIC00OCw3ICYjNDM7NDgsMTkgQEBcbiAjZGVmaW5lIE1TR0JVRl9UWVBFX0xQQktfRE1BWEZFUlx0XHQweDEzXG4gI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJfQ01QTFRcdFx0MHgxNFxuIFxuLSNkZWZpbmUgTlJfVFhfUEtUSURTXHRcdFx0XHQyMDQ4XG4mIzQzOy8qXG4mIzQzOyAqIE5SX1RYX1BLVElEUzogbnVtYmVyIG9mIHNpbXVsdGFuZW91c2x5IGluLWZsaWdodCBUWCBwYWNrZXQgSURzLlxuJiM0MzsgKiBFYWNoIG91dHN0YW5kaW5nIFRYIGZyYW1lIGNvbnN1bWVzIG9uZSBJRCB1bnRpbCB0aGUgZG9uZ2xlIHJldHVybnNcbiYjNDM7ICogYSBUWC1zdGF0dXMgY29tcGxldGlvbi4gIFRoZSBvcmlnaW5hbCAyMDQ4LWVudHJ5IHBvb2wgZXhoYXVzdGVkIHVuZGVyXG4mIzQzOyAqIOKJpTQgY29uY3VycmVudCBpcGVyZjMgc3RyZWFtcyBvbiBXaS1GaSA1LzYgKDgwMi4xMWFjL2F4KSBkZXZpY2VzLFxuJiM0MzsgKiBjYXVzaW5nIFwmIzM0O05vIFBLVElEIGF2YWlsYWJsZVwmIzM0OyBkcm9wcyBhbmQgVENQIHJldHJhbnNtaXRzLiAgNDA5NiBnaXZlc1xuJiM0MzsgKiBoZWFkcm9vbSBmb3IgaGlnaC1hZ2dyZWdhdGlvbiBzY2VuYXJpb3Mgd2hpbGUgc3RpbGwgZml0dGluZyBpbiBhXG4mIzQzOyAqIG1vZGVzdCBhbW91bnQgb2YgaG9zdCBtZW1vcnkgKH40OCBLQiBmb3IgdGhlIHBrdGlkIHRhYmxlIGVudHJpZXMpLlxuJiM0MzsgKlxuJiM0MzsgKiBOUl9SWF9QS1RJRFM6IFJYIHBvc3QgYnVmZmVycyBwcmUtYWxsb2NhdGVkIHRvIHRoZSBkb25nbGUuICAxMDI0IGlzXG4mIzQzOyAqIHN1ZmZpY2llbnQgZm9yIGN1cnJlbnQgaGFyZHdhcmUgUlggcmluZyBkZXB0aHM7IGxlYXZlIHVuY2hhbmdlZC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTlJfVFhfUEtUSURTXHRcdFx0XHQ0MDk2XG4gI2RlZmluZSBOUl9SWF9QS1RJRFNcdFx0XHRcdDEwMjRcbiBcbiAjZGVmaW5lIEJSQ01GX0lPQ1RMX1JFUV9QS1RJRFx0XHRcdDB4RkZGRVxuQEAgLTY0LDggJiM0Mzs3NiwyOSBAQFxuICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19GUkFNRV9NQVNLXHQweDA3XG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfUEtUX0ZMQUdTX1BSSU9fU0hJRlRcdDVcbiBcbi0jZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQxXHRcdDMyXG4tI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMlx0XHQ5NlxuJiM0MzsvKlxuJiM0MzsgKiBUWCBmbHVzaCAvIGRvb3JiZWxsLXJpbmcgdGhyZXNob2xkcy5cbiYjNDM7ICpcbiYjNDM7ICogQ05UMSBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgZnJhbWVzIHRvIGFjY3VtdWxhdGUgaW4gdGhlIGNvbW1vbnJpbmdcbiYjNDM7ICogYmVmb3JlIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgd3JpdGVfY29tcGxldGUoKSAoZG9vcmJlbGwgcmluZykgaXNcbiYjNDM7ICogaXNzdWVkIG1pZC1iYXRjaC4gIENOVDIgaXMgdGhlIGhhcmQgZmx1c2ggaW50ZXJ2YWw6IGFmdGVyIHRoaXMgbWFueVxuJiM0MzsgKiBmcmFtZXMgaGF2ZSBiZWVuIHdyaXR0ZW4gc2luY2UgdGhlIGxhc3QgZmx1c2gsIHdlIHVuY29uZGl0aW9uYWxseVxuJiM0MzsgKiByaW5nIHRoZSBiZWxsIGFuZCByZXNldCB0aGUgY291bnRlci5cbiYjNDM7ICpcbiYjNDM7ICogUmFpc2luZyBib3RoIGZyb20gdGhlIG9yaWdpbmFsIDMyLzk2IHRvIDY0LzEyOCBkb3VibGVzIHRoZSBhdmVyYWdlXG4mIzQzOyAqIG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyBjb21taXR0ZWQgcGVyIE1NSU8gd3JpdGUsIGhhbHZpbmcgdGhlIFBDSWVcbiYjNDM7ICogZG9vcmJlbGwgcmF0ZSBvbiBzdXN0YWluZWQgdGhyb3VnaHB1dCB3b3JrbG9hZHMuICBUaGUgdHJhZGVvZmYgaXMgYVxuJiM0MzsgKiBtYXJnaW5hbGx5IGhpZ2hlciB3b3JzdC1jYXNlIGxhdGVuY3kgZm9yIHRoZSBsYXN0IGZyYW1lcyBpbiBhIGJ1cnN0LFxuJiM0MzsgKiB3aGljaCBpbiBwcmFjdGljZSBpcyBoaWRkZW4gYnkgdGhlIHRpbWUgdGhlIGRvbmdsZSBETUEgZW5naW5lIGRyYWluc1xuJiM0MzsgKiB0aGUgcHJldmlvdXMgYmF0Y2guXG4mIzQzOyAqXG4mIzQzOyAqIFRSSUNLTEVfVFhXT1JLRVJfVEhSUyBnb3Zlcm5zIGhvdyBvZnRlbiBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YSgpXG4mIzQzOyAqIGZvcmNlcyBhIHdvcmtxdWV1ZSBzY2hlZHVsZSB3aGVuIHRoZSBxdWV1ZSBkZXB0aCBpcyBub3QgYSBtdWx0aXBsZSBvZlxuJiM0MzsgKiB0aGlzIHZhbHVlLiAgS2VlcGluZyBpdCBhdCBoYWxmIG9mIENOVDEgKDMyKSBwcmVzZXJ2ZXMgcmVzcG9uc2l2ZW5lc3NcbiYjNDM7ICogZm9yIGxvdy1yYXRlIGZsb3dzIChlLmcuIFZvSVAsIElDTVApIHRoYXQgbmV2ZXIgYWNjdW11bGF0ZSA2NCBmcmFtZXMuXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQxXHRcdDY0XG4mIzQzOyNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDJcdFx0MTI4XG4gXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSU1x0OTZcbiAjZGVmaW5lIEJSQ01GX01TR0JVRl9UUklDS0xFX1RYV09SS0VSX1RIUlNcdDMyXG5AQCAtNzg3LDEwICYjNDM7ODIwLDMwIEBAIHN0YXRpYyBpbnQgYnJjbWZfbXNnYnVmX3NjaGVkdWxlX3R4ZGF0YShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHUzMiBmbG93aWQsXG4ge1xuIFx0c3RydWN0IGJyY21mX2NvbW1vbnJpbmcgKmNvbW1vbnJpbmc7XG4gXG4tXHRzZXRfYml0KGZsb3dpZCwgbXNnYnVmLVx1MDAzZWZsb3dfbWFwKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBiaXQgd2FzIGFscmVhZHkgc2V0LCBhIHR4Zmxvd193b3JrIGl0ZW0gaXMgYWxyZWFkeVxuJiM0MztcdCAqIHF1ZXVlZCBvciBydW5uaW5nIGZvciB0aGlzIHJpbmcuICBJbiB0aGF0IGNhc2UgdGhlIGV4aXN0aW5nXG4mIzQzO1x0ICogd29ya2VyIHdpbGwgZHJhaW4gb3VyIGZyZXNobHkgZW5xdWV1ZWQgZnJhbWUgd2hlbiBpdCBydW5zLFxuJiM0MztcdCAqIHNvIHdlIG9ubHkgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIHdvcmsgaXRlbSB3aGVuIHRoZVxuJiM0MztcdCAqIGZvcmNlIGZsYWcgaXMgc2V0IG9yIHRoZSByaW5nIGlzIGJlbG93IHRoZSBkZWxheSB0aHJlc2hvbGQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJZiB0aGUgYml0IHdhcyBOT1Qgc2V0ICh0ZXN0X2FuZF9zZXRfYml0IHJldHVybnMgZmFsc2UpLCBub1xuJiM0MztcdCAqIHdvcmtlciBpcyBwZW5kaW5nIGZvciB0aGlzIHJpbmcgYXQgYWxsLiAgV2UgTVVTVCBzY2hlZHVsZVxuJiM0MztcdCAqIG9uZSB1bmNvbmRpdGlvbmFsbHksIG90aGVyd2lzZSB0aGUgZnJhbWUgd2UganVzdCBlbnF1ZXVlZFxuJiM0MztcdCAqIHdpbGwgc2l0IGluIHRoZSBmbG93cmluZyB1bnNlbnQgdW50aWwgc29tZSB1bnJlbGF0ZWQgZXZlbnRcbiYjNDM7XHQgKiB0cmlnZ2VycyB0aGUgd29ya3F1ZXVlIOKAlCBjYXVzaW5nIHNpbGVudCBUWCBzdGFsbHMgdW5kZXJcbiYjNDM7XHQgKiBoaWdoIGxvYWQgd2hlbiBvdXRzdGFuZGluZ190eCBcdTAwM2U9IERFTEFZX1RYV09SS0VSX1RIUlMuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCF0ZXN0X2FuZF9zZXRfYml0KGZsb3dpZCwgbXNnYnVmLVx1MDAzZWZsb3dfbWFwKSkge1xuJiM0MztcdFx0LyogQml0IHdhcyBjbGVhcjogbm8gd29ya2VyIHBlbmRpbmcsIGFsd2F5cyBzY2hlZHVsZS4gKi9cbiYjNDM7XHRcdHF1ZXVlX3dvcmsobXNnYnVmLVx1MDAzZXR4Zmxvd193cSwgXHUwMDI2bXNnYnVmLVx1MDAzZXR4Zmxvd193b3JrKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQml0IHdhcyBhbHJlYWR5IHNldDogd29ya2VyIHBlbmRpbmcsIGFwcGx5IGNvYWxlc2NpbmcgaGV1cmlzdGljLiAqL1xuIFx0Y29tbW9ucmluZyA9IG1zZ2J1Zi1cdTAwM2VmbG93cmluZ3NbZmxvd2lkXTtcbi1cdGlmICgoZm9yY2UpIHx8IChhdG9taWNfcmVhZChcdTAwMjZjb21tb25yaW5nLVx1MDAzZW91dHN0YW5kaW5nX3R4KSBcdTAwM2Ncbi1cdFx0XHRCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSUykpXG4mIzQzO1x0aWYgKGZvcmNlIHx8IChhdG9taWNfcmVhZChcdTAwMjZjb21tb25yaW5nLVx1MDAzZW91dHN0YW5kaW5nX3R4KSBcdTAwM2NcbiYjNDM7XHRcdCAgICAgIEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSlcbiBcdFx0cXVldWVfd29yayhtc2didWYtXHUwMDNldHhmbG93X3dxLCBcdTAwMjZtc2didWYtXHUwMDNldHhmbG93X3dvcmspO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTYyMSwxMSAmIzQzOzE2NzQsMTEgQEAgaW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbiBcdGRvIHtcbiBcdFx0YnJjbWZfbXNnYnVmX3J4YnVmX2RhdGFfZmlsbChtc2didWYpO1xuIFx0XHRpZiAobXNnYnVmLVx1MDAzZW1heF9yeGJ1ZnBvc3QgIT0gbXNnYnVmLVx1MDAzZXJ4YnVmcG9zdClcbi1cdFx0XHRtc2xlZXAoMTApO1xuJiM0MztcdFx0XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXHRcdGVsc2VcbiBcdFx0XHRicmVhaztcbiBcdFx0Y291bnQmIzQzOyYjNDM7O1xuLVx0fSB3aGlsZSAoY291bnQgXHUwMDNjIDEwKTtcbiYjNDM7XHR9IHdoaWxlIChjb3VudCBcdTAwM2MgMTAwKTtcbiBcdGJyY21mX21zZ2J1Zl9yeGJ1Zl9ldmVudF9wb3N0KG1zZ2J1Zik7XG4gXHRicmNtZl9tc2didWZfcnhidWZfaW9jdGxyZXNwX3Bvc3QobXNnYnVmKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1xuaW5kZXggMTM2NjJhYTRiNGVhNi4uOTMzOGE1ZmFhMjYwYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcbkBAIC0yNjgsNiAmIzQzOzI2OCwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2Zpcm13YXJlX21hcHBpbmcgYnJjbWZfcGNpZV9md25hbWVzW10gPSB7XG4gXG4gI2RlZmluZSBCUkNNRl9QQ0lFX01CREFUQV9USU1FT1VUXHRcdG1zZWNzX3RvX2ppZmZpZXMoMjAwMClcbiBcbiYjNDM7LypcbiYjNDM7ICogSDJEIG1haWxib3ggcG9sbCB0aW1pbmcgcGFyYW1ldGVycy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGRvbmdsZSB0eXBpY2FsbHkgY2xlYXJzIHRoZSBIMkQgbWFpbGJveCByZWdpc3RlciB3aXRoaW4gYSBmZXdcbiYjNDM7ICogaHVuZHJlZCBtaWNyb3NlY29uZHMgYWZ0ZXIgdGhlIGRvb3JiZWxsIGludGVycnVwdCBmaXJlcy4gIFRoZVxuJiM0MzsgKiBvcmlnaW5hbCBjb2RlIHVzZWQgbXNsZWVwKDEwKSAqIDEwMCBpdGVyYXRpb25zLCBtZWFuaW5nIHRoZVxuJiM0MzsgKiBtaW5pbXVtIG9ic2VydmFibGUgbGF0ZW5jeSB3YXMgMTBtcyBldmVuIHdoZW4gdGhlIGRvbmdsZSB3YXMgZmFzdC5cbiYjNDM7ICpcbiYjNDM7ICogV2UgaW5zdGVhZCBzdGFydCB3aXRoIGEgc2hvcnQgc2xlZXAgYW5kIGRvdWJsZSBpdCBlYWNoIGl0ZXJhdGlvblxuJiM0MzsgKiAoZXhwb25lbnRpYWwgYmFja29mZikgdXAgdG8gQlJDTUZfUENJRV9NQl9QT0xMX01BWF9VUywgc3RheWluZ1xuJiM0MzsgKiB3aXRoaW4gdGhlIHNhbWUgMS1zZWNvbmQgYWJzb2x1dGUgdGltZW91dC5cbiYjNDM7ICpcbiYjNDM7ICogTUlOX1VTIC8gSU5JVElBTF9NQVhfVVMgOiB1c2xlZXBfcmFuZ2UgYm91bmRzIGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uLlxuJiM0MzsgKiBNQVhfVVMgICAgIDogY2FwIG9uIHRoZSBwZXItaXRlcmF0aW9uIHNsZWVwICjCtXMpLlxuJiM0MzsgKiBUSU1FT1VUX1VTIDogdG90YWwgYnVkZ2V0IGJlZm9yZSBnaXZpbmcgdXAgKDEgc2Vjb25kKS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX01JTl9VU1x0XHQ0MFxuJiM0MzsjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9JTklUSUFMX01BWF9VU1x0NTBcbiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTXHRcdDUwMDBcbiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VU1x0XHQxMDAwMDAwXG4mIzQzO1xuICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfU1RBVFVTX0NNRFx0XHQweDRcbiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX1BNX0NTUlx0XHQweDRDXG4gI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19NU0lfQ0FQXHRcdDB4NThcbkBAIC03NjYsNyAmIzQzOzc4Nyw4IEBAIGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBodG9kX21iX2RhdGEpXG4gXHRzdHJ1Y3QgYnJjbWZfY29yZSAqY29yZTtcbiBcdHUzMiBhZGRyO1xuIFx0dTMyIGN1cl9odG9kX21iX2RhdGE7XG4tXHR1MzIgaTtcbiYjNDM7XHR1MzIgZWxhcHNlZF91cyA9IDA7XG4mIzQzO1x0dTMyIHNsZWVwX3VzID0gQlJDTUZfUENJRV9NQl9QT0xMX0lOSVRJQUxfTUFYX1VTO1xuIFxuIFx0c2hhcmVkID0gXHUwMDI2ZGV2aW5mby1cdTAwM2VzaGFyZWQ7XG4gXHRhZGRyID0gc2hhcmVkLVx1MDAzZWh0b2RfbWJfZGF0YV9hZGRyO1xuQEAgLTc3NiwxMiAmIzQzOzc5OCw0MCBAQCBicmNtZl9wY2llX3NlbmRfbWJfZGF0YShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgaHRvZF9tYl9kYXRhKVxuIFx0XHRicmNtZl9kYmcoUENJRSwgXCYjMzQ7TUIgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBwZW5kaW5nIDB4JTA0eFxcblwmIzM0OyxcbiBcdFx0XHQgIGN1cl9odG9kX21iX2RhdGEpO1xuIFxuLVx0aSA9IDA7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXYWl0IGZvciB0aGUgZG9uZ2xlIHRvIGNvbnN1bWUgdGhlIHByZXZpb3VzIEgyRCBtYWlsYm94IG1lc3NhZ2UuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGVyZSBpcyBubyBpbnRlcnJ1cHQgdGhhdCBzaWduYWxzIHdoZW4gdGhlIGRvbmdsZSBjbGVhcnMgdGhpc1xuJiM0MztcdCAqIHJlZ2lzdGVyLCBzbyBwb2xsaW5nIGlzIHVuYXZvaWRhYmxlLiAgVGhlIG9yaWdpbmFsIGNvZGUgdXNlZFxuJiM0MztcdCAqIG1zbGVlcCgxMCkgcGVyIGl0ZXJhdGlvbiwgaW5jdXJyaW5nIGF0IGxlYXN0IDEwbXMgb2YgbGF0ZW5jeVxuJiM0MztcdCAqIGV2ZW4gd2hlbiB0aGUgZG9uZ2xlIHJlc3BvbmRlZCBpbiBtaWNyb3NlY29uZHMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXZSB1c2UgdXNsZWVwX3JhbmdlKCkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmIGluc3RlYWQ6XG4mIzQzO1x0ICogICAtIEZpcnN0IGl0ZXJhdGlvbiBzbGVlcHMgfjUwwrVzIChmYXN0IHBhdGggZm9yIHJlc3BvbnNpdmUgZG9uZ2xlKS5cbiYjNDM7XHQgKiAgIC0gRWFjaCBzdWJzZXF1ZW50IGl0ZXJhdGlvbiBkb3VibGVzIHRoZSBzbGVlcCwgY2FwcGVkIGF0IDVtcyxcbiYjNDM7XHQgKiAgICAgc28gbG9uZyB3YWl0cyBzdGlsbCB5aWVsZCB0aGUgQ1BVIHdpdGhvdXQgYnVzeS1zcGlubmluZy5cbiYjNDM7XHQgKiAgIC0gVG90YWwgdGltZW91dCBtYXRjaGVzIHRoZSBvcmlnaW5hbCAxLXNlY29uZCBsaW1pdC5cbiYjNDM7XHQgKiAgIC0gV2UgYmFpbCBlYXJseSBpZiB0aGUgZGV2aWNlIGhhcyBnb25lIGRvd24gc28gdGhhdCBhIGRlYWRcbiYjNDM7XHQgKiAgICAgZG9uZ2xlIGRvZXMgbm90IGhvbGQgdGhlIGNhbGxlciBmb3IgYSBmdWxsIHNlY29uZC5cbiYjNDM7XHQgKi9cbiBcdHdoaWxlIChjdXJfaHRvZF9tYl9kYXRhICE9IDApIHtcbi1cdFx0bXNsZWVwKDEwKTtcbi1cdFx0aSYjNDM7JiM0Mzs7XG4tXHRcdGlmIChpIFx1MDAzZSAxMDApXG4mIzQzO1x0XHRpZiAoZGV2aW5mby1cdTAwM2VzdGF0ZSA9PSBCUkNNRk1BQ19QQ0lFX1NUQVRFX0RPV04pIHtcbiYjNDM7XHRcdFx0YnJjbWZfZGJnKFBDSUUsIFwmIzM0O0RldmljZSBkb3duLCBhYm9ydGluZyBNQiBzZW5kXFxuXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoZWxhcHNlZF91cyBcdTAwM2U9IEJSQ01GX1BDSUVfTUJfUE9MTF9USU1FT1VUX1VTKSB7XG4mIzQzO1x0XHRcdGJyY21mX2VycihcJiMzNDtUaW1lb3V0IHdhaXRpbmcgZm9yIEgyRCBNQiBzbG90IGFmdGVyICV1IHVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgZWxhcHNlZF91cyk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHVzbGVlcF9yYW5nZShCUkNNRl9QQ0lFX01CX1BPTExfTUlOX1VTLCBzbGVlcF91cyk7XG4mIzQzO1x0XHRlbGFwc2VkX3VzICYjNDM7PSBzbGVlcF91cztcbiYjNDM7XG4mIzQzO1x0XHQvKiBFeHBvbmVudGlhbCBiYWNrb2ZmLCBjYXBwZWQgYXQgQlJDTUZfUENJRV9NQl9QT0xMX01BWF9VUyAqL1xuJiM0MztcdFx0c2xlZXBfdXMgPSBtaW4oc2xlZXBfdXMgKiAyLCAodTMyKUJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMpO1xuJiM0MztcbiBcdFx0Y3VyX2h0b2RfbWJfZGF0YSA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcbiBcdH1cbiBcbkBAIC0xMDAxLDEwICYjNDM7MTA1MSwxMCBAQCBzdGF0aWMgdm9pZCBicmNtZl9wY2llX3JlbGVhc2VfaXJxKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8pXG4gXHRmcmVlX2lycShwZGV2LVx1MDAzZWlycSwgZGV2aW5mbyk7XG4gXHRwY2lfZGlzYWJsZV9tc2kocGRldik7XG4gXG4tXHRtc2xlZXAoNTApO1xuJiM0MztcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbiBcdGNvdW50ID0gMDtcbi1cdHdoaWxlICgoZGV2aW5mby1cdTAwM2Vpbl9pcnEpIFx1MDAyNlx1MDAyNiAoY291bnQgXHUwMDNjIDIwKSkge1xuLVx0XHRtc2xlZXAoNTApO1xuJiM0MztcdHdoaWxlICgoZGV2aW5mby1cdTAwM2Vpbl9pcnEpIFx1MDAyNlx1MDAyNiAoY291bnQgXHUwMDNjIDEwMDApKSB7XG4mIzQzO1x0XHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXHRcdGNvdW50JiM0MzsmIzQzOztcbiBcdH1cbiBcdGlmIChkZXZpbmZvLVx1MDAzZWluX2lycSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uY1xuaW5kZXggYjcyNWM2NGU1YjVjNi4uNGU0MTQ0MDNkNzQ3MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcbkBAIC0xNjQ1LDM3ICYjNDM7MTY0NSw0MyBAQCBzdGF0aWMgdTggYnJjbWZfc2Rpb19yeGdsb20oc3RydWN0IGJyY21mX3NkaW8gKmJ1cywgdTggcnhzZXEpXG4gXG4gXHRcdHJkX25ldy5zZXFfbnVtID0gcnhzZXE7XG4gXHRcdHJkX25ldy5sZW4gPSBkbGVuO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBDbGFpbSB0aGUgaG9zdCBvbmNlIGZvciB0aGUgZW50aXJlIGhlYWRlci1wYXJzaW5nIHBoYXNlLlxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIGJyY21mX3NkaW9faGRwYXJzZSgpIG9wZXJhdGVzIG9uIGRhdGEgYWxyZWFkeSBpbiBob3N0XG4mIzQzO1x0XHQgKiBtZW1vcnksIGJ1dCBtYXkgY2FsbCBicmNtZl9zZGlvX3J4ZmFpbCgpIG9uIGVycm9yLCB3aGljaFxuJiM0MztcdFx0ICogd3JpdGVzIFNESU8gRnVuYzEgcmVnaXN0ZXJzIGFuZCB0aGVyZWZvcmUgcmVxdWlyZXMgdGhlXG4mIzQzO1x0XHQgKiBob3N0IHRvIGJlIGNsYWltZWQuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogc2tiX3B1bGwoKSBhbmQgdGhlIG51bSBjb3VudGVyIGFyZSBwdXJlIGhvc3QtbWVtb3J5XG4mIzQzO1x0XHQgKiBvcGVyYXRpb25zOyBrZWVwIHRoZW0gb3V0c2lkZSB0aGUgbG9jayB0byBtaW5pbWlzZSB0aGVcbiYjNDM7XHRcdCAqIGhvbGQgdGltZS4gIEJvdGggaGRwYXJzZSBjYWxscyAoc3VwZXJmcmFtZSBoZWFkZXIgYW5kXG4mIzQzO1x0XHQgKiBlYWNoIHN1YmZyYW1lIGhlYWRlcikgYXJlIGdyb3VwZWQgdW5kZXIgYSBzaW5nbGUgY2xhaW0vXG4mIzQzO1x0XHQgKiByZWxlYXNlLCByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIE4mIzQzOzEgc2VwYXJhdGUgcGFpcnMuXG4mIzQzO1x0XHQgKi9cbiBcdFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbiBcdFx0ZXJyY29kZSA9IGJyY21mX3NkaW9faGRwYXJzZShidXMsIHBmaXJzdC1cdTAwM2VkYXRhLCBcdTAwMjZyZF9uZXcsXG4gXHRcdFx0XHRcdCAgICAgQlJDTUZfU0RJT19GVF9TVVBFUik7XG4tXHRcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbi1cdFx0YnVzLVx1MDAzZWN1cl9yZWFkLmxlbiA9IHJkX25ldy5sZW5fbnh0ZnJtIFx1MDAzY1x1MDAzYyA0O1xuLVxuLVx0XHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xuLVx0XHRza2JfcHVsbChwZmlyc3QsIHJkX25ldy5kYXRfb2Zmc2V0KTtcbi1cdFx0bnVtID0gMDtcbi1cbi1cdFx0LyogVmFsaWRhdGUgYWxsIHRoZSBzdWJmcmFtZSBoZWFkZXJzICovXG4tXHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNmJ1cy1cdTAwM2VnbG9tLCBwbmV4dCkge1xuLVx0XHRcdC8qIGxlYXZlIHdoZW4gaW52YWxpZCBzdWJmcmFtZSBpcyBmb3VuZCAqL1xuLVx0XHRcdGlmIChlcnJjb2RlKVxuLVx0XHRcdFx0YnJlYWs7XG4gXG4tXHRcdFx0cmRfbmV3LmxlbiA9IHBuZXh0LVx1MDAzZWxlbjtcbi1cdFx0XHRyZF9uZXcuc2VxX251bSA9IHJ4c2VxJiM0MzsmIzQzOztcbi1cdFx0XHRzZGlvX2NsYWltX2hvc3QoYnVzLVx1MDAzZXNkaW9kZXYtXHUwMDNlZnVuYzEpO1xuLVx0XHRcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwbmV4dC1cdTAwM2VkYXRhLCBcdTAwMjZyZF9uZXcsXG4tXHRcdFx0XHRcdFx0ICAgICBCUkNNRl9TRElPX0ZUX1NVQik7XG4tXHRcdFx0c2Rpb19yZWxlYXNlX2hvc3QoYnVzLVx1MDAzZXNkaW9kZXYtXHUwMDNlZnVuYzEpO1xuLVx0XHRcdGJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksXG4tXHRcdFx0XHRcdCAgIHBuZXh0LVx1MDAzZWRhdGEsIDMyLCBcJiMzNDtzdWJmcmFtZTpcXG5cJiMzNDspO1xuLVxuLVx0XHRcdG51bSYjNDM7JiM0Mzs7XG4mIzQzO1x0XHQvKiBWYWxpZGF0ZSBhbGwgdGhlIHN1YmZyYW1lIGhlYWRlcnMgd2hpbGUgaG9zdCBpcyBjbGFpbWVkICovXG4mIzQzO1x0XHRpZiAoIWVycmNvZGUpIHtcbiYjNDM7XHRcdFx0c2tiX3F1ZXVlX3dhbGsoXHUwMDI2YnVzLVx1MDAzZWdsb20sIHBuZXh0KSB7XG4mIzQzO1x0XHRcdFx0cmRfbmV3LmxlbiA9IHBuZXh0LVx1MDAzZWxlbjtcbiYjNDM7XHRcdFx0XHRyZF9uZXcuc2VxX251bSA9IHJ4c2VxJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0XHRlcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtXHUwMDNlZGF0YSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIFx1MDAyNnJkX25ldyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VCKTtcbiYjNDM7XHRcdFx0XHRicmNtZl9kYmdfaGV4X2R1bXAoQlJDTUZfR0xPTV9PTigpLFxuJiM0MztcdFx0XHRcdFx0XHQgICBwbmV4dC1cdTAwM2VkYXRhLCAzMixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgXCYjMzQ7c3ViZnJhbWU6XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHRpZiAoZXJyY29kZSlcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVycmNvZGUpIHtcbi1cdFx0XHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IgKi9cbi1cdFx0XHRzZGlvX2NsYWltX2hvc3QoYnVzLVx1MDAzZXNkaW9kZXYtXHUwMDNlZnVuYzEpO1xuJiM0MztcdFx0XHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IsIHN0aWxsIGhvbGRpbmcgdGhlIGhvc3QgKi9cbiBcdFx0XHRicmNtZl9zZGlvX3J4ZmFpbChidXMsIHRydWUsIGZhbHNlKTtcbiBcdFx0XHRidXMtXHUwMDNlc2RjbnQucnhnbG9tZmFpbCYjNDM7JiM0Mzs7XG4gXHRcdFx0YnJjbWZfc2Rpb19mcmVlX2dsb20oYnVzKTtcbkBAIC0xNjgzLDYgJiM0MzsxNjg5LDE0IEBAIHN0YXRpYyB1OCBicmNtZl9zZGlvX3J4Z2xvbShzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzLCB1OCByeHNlcSlcbiBcdFx0XHRidXMtXHUwMDNlY3VyX3JlYWQubGVuID0gMDtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuJiM0MztcdFx0c2Rpb19yZWxlYXNlX2hvc3QoYnVzLVx1MDAzZXNkaW9kZXYtXHUwMDNlZnVuYzEpO1xuJiM0MztcbiYjNDM7XHRcdC8qIEhvc3QgcmVsZWFzZWQ7IG5vdyBkbyB0aGUgcHVyZS1tZW1vcnkgYm9va2tlZXBpbmcgKi9cbiYjNDM7XHRcdGJ1cy1cdTAwM2VjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSBcdTAwM2NcdTAwM2MgNDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xuJiM0MztcdFx0c2tiX3B1bGwocGZpcnN0LCByZF9uZXcuZGF0X29mZnNldCk7XG4mIzQzO1x0XHRudW0gPSAwO1xuIFxuIFx0XHQvKiBCYXNpYyBTRCBmcmFtaW5nIGxvb2tzIG9rIC0gcHJvY2VzcyBlYWNoIHBhY2tldCAoaGVhZGVyKSAqL1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmNcbmluZGV4IGZjN2E1ZGQyZTVkODYuLjNmZDhiZGJkMzVlNTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmNcbkBAIC01MTYsMTIgJiM0Mzs1MTYsMTEgQEAgaW50IGJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLFxuIFx0XHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBXZSBhcmVuJiMzOTt0IHJlYWxseSBvdXQgb2Ygc3BhY2UgaWYgdGhlIG5ldyBmcmFtZSBpcyBvZlxuLVx0XHQgKiBhIGRpZmZlcmVudCBwcmlvcml0eSwgYnV0IHdlIHdhbnQgdGhlIHNhbWUgYmVoYXZpb3VyXG4tXHRcdCAqIHNvIHJldHVybiAtRU5PU1BDIGFueXdheS5cbi1cdFx0ICpcbi1cdFx0ICogWFhYOiBUaGUgb2xkIEFNUERVIGNvZGUgZGlkIHRoaXMsIGJ1dCBpcyBpdCByZWFsbHlcbi1cdFx0ICogbmVjZXNzYXJ5P1xuJiM0MztcdFx0ICogSUVFRSA4MDIuMTFuIHN0YW5kYXJkIHJlcXVpcmVzIHRoYXQgYWxsIE1QRFVzIHdpdGhpbiBhblxuJiM0MztcdFx0ICogQS1NUERVIGJlbG9uZyB0byB0aGUgc2FtZSBUSUQgKFRyYWZmaWMgSWRlbnRpZmllcikuXG4mIzQzO1x0XHQgKiBTaW5jZSBwcmlvcml0eSBtYXBzIHRvIFRJRCwgYSBkaWZmZXJlbnQgcHJpb3JpdHkgbWVhbnNcbiYjNDM7XHRcdCAqIHdlIG11c3QgY2xvc2UgdGhlIGN1cnJlbnQgYWdncmVnYXRlIGFuZCBzdGFydCBhIG5ldyBvbmUsXG4mIzQzO1x0XHQgKiBzbyB3ZSByZXR1cm4gLUVOT1NQQyBoZXJlLlxuIFx0XHQgKi9cbiBcdFx0Zmlyc3QgPSBza2JfcGVlayhcdTAwMjZzZXNzaW9uLVx1MDAzZXNrYl9saXN0KTtcbiBcdFx0aWYgKHAtXHUwMDNlcHJpb3JpdHkgIT0gZmlyc3QtXHUwMDNlcHJpb3JpdHkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3Bta3NhX3YyX29wJiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9kZWxfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2EmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBjb21wb25lbnRzIG9mIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXJzLiBDaGFuZ2VzIHRvIFBDSWUgKG1zZ2J1Zi5jLCBmbG93cmluZy5jLCBwY2llLmMpIGFuZCBTRElPIChzZGlvLmMpIGFyZSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXMgdGhleSByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLiBIb3dldmVyLCB0aGUgYnJjbWZtYWMgZHJpdmVyIHN1cHBvcnRzIFVTQiwgd2hpY2ggY2FuIGJlIGVtdWxhdGVkIGJ5IHN5emthbGxlci4gVGhlIHBhdGNoIGFkZHMgYGJyY21mX3Bta3NhX3YyX29wYCBpbiB0aGUgc2hhcmVkIGNmZzgwMjExLmMgdG8gaGFuZGxlIFYyIFBNS1NBIGNhY2hlIHVwZGF0ZXMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBOTDgwMjExX0NNRF9TRVRfUE1LU0EpIGlmIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIHJlcG9ydHMgYSBmaXJtd2FyZSB2ZXJzaW9uIFx1MDAzZT0gMTIuIFRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBpcyBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ1MzY5ZTE0MzkyZTFmOTQyODQ0NjljMzg2NmRiN2UyMWNkYmM0YWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDAwOjQ2OjE2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYwppbmRleCAwYjU1ZDQ0NTg5NWYyLi4yMzc1YzJmOWQ5N2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYwpAQCAtMzk4OSwxMiAmIzQzOzM5ODksMTAgQEAgc3RhdGljIGludCBicmNtZl9jZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3Aoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJyY21mX2RlbGF5KHUzMiBtcykKIHsKLQlpZiAobXMgJmx0OyAxMDAwIC8gSFopIHsKLQkJY29uZF9yZXNjaGVkKCk7Ci0JCW1kZWxheShtcyk7Ci0JfSBlbHNlIHsKJiM0MzsJaWYgKG1zICZsdDs9IDIwKQomIzQzOwkJdXNsZWVwX3JhbmdlKG1zICogMTAwMCwgbXMgKiAxMDAwICYjNDM7IDEwMDApOwomIzQzOwllbHNlCiAJCW1zbGVlcChtcyk7Ci0JfQogfQogCiBzdGF0aWMgczMyIGJyY21mX2NvbmZpZ193b3dsX3BhdHRlcm4oc3RydWN0IGJyY21mX2lmICppZnAsIHU4IGNtZFs0XSwKQEAgLTQzNjQsNiAmIzQzOzQzNjIsMTA5IEBAIGJyY21mX3Bta3NhX3YzX29wKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBicmNtZl9wbWtzYV92Ml9vcCAtIHVwZGF0ZSBmaXJtd2FyZSBQTUtTQSBjYWNoZSB1c2luZyB0aGUgVjIgbGlzdCBpbnRlcmZhY2UuCiYjNDM7ICoKJiM0MzsgKiBWMiBmaXJtd2FyZSAocmV2aXNpb24gMTIpIHVzZXMgYSB2ZXJzaW9uZWQgZmxhdCBsaXN0IHN0cnVjdHVyZQomIzQzOyAqIChicmNtZl9wbWtfbGlzdF92Ml9sZSkgcmF0aGVyIHRoYW4gdGhlIHBlci1lbnRyeSBvcGVyYXRpb24gbW9kZWwgb2YgVjMuCiYjNDM7ICogRWFjaCBlbnRyeSBjYXJyaWVzIEZJTFMtc3BlY2lmaWMgZmllbGRzIChyYXcgUE1LIG1hdGVyaWFsLCBTU0lELCBhbmQKJiM0MzsgKiBmaWxzX2NhY2hlX2lkKSBpbiBhZGRpdGlvbiB0byB0aGUgYmFzaWMgQlNTSUQgJiM0MzsgUE1LSUQgcGFpciwgZW5hYmxpbmcKJiM0MzsgKiBGSUxTIGZhc3Qtcm9hbWluZyBvbiBkZXZpY2VzIHRoYXQgZG8gbm90IHN1cHBvcnQgVjMuCiYjNDM7ICoKJiM0MzsgKiBAY2ZnOiAgIGRyaXZlciBjb25maWcgc3RydWN0dXJlIGhvbGRpbmcgdGhlIHNoYWRvdyBWMiBQTUtTQSBsaXN0CiYjNDM7ICogQGlmcDogICBpbnRlcmZhY2UgcG9pbnRlcgomIzQzOyAqIEBwbWtzYTogdGhlIFBNS1NBIHRvIGFkZC9yZW1vdmUsIG9yIE5VTEwgZm9yIGEgZmx1c2gKJiM0MzsgKiBAYWxpdmU6IHRydWUgPSBhZGQgKHNldCB0aW1lX2xlZnQgdG8gbm8tZXhwaXJ5KSwgZmFsc2UgPSByZW1vdmUvZmx1c2gKJiM0MzsgKi8KJiM0MztzdGF0aWMgczMyCiYjNDM7YnJjbWZfcG1rc2FfdjJfb3Aoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywgc3RydWN0IGJyY21mX2lmICppZnAsCiYjNDM7CQkgIHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EsIGJvb2wgYWxpdmUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gY2ZnLSZndDtwdWI7CiYjNDM7CXN0cnVjdCBicmNtZl9wbWtfbGlzdF92Ml9sZSAqbGlzdCA9ICZhbXA7Y2ZnLSZndDtwbWtfbGlzdF92MjsKJiM0MzsJc3RydWN0IGJyY21mX3Bta3NhX3YyICpwbWsgPSBsaXN0LSZndDtwbWs7CiYjNDM7CXUzMiBucG1rID0gbGUxNl90b19jcHUobGlzdC0mZ3Q7bGVuZ3RoKTsKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CS8qIG5wbWsgaGVyZSBzdG9yZXMgdGhlIGNvdW50IG9mIHZhbGlkIGVudHJpZXMsIHJlcHVycG9zaW5nIHRoZQomIzQzOwkgKiBsZW5ndGggZmllbGQgb2YgdGhlIHNoYWRvdyBsaXN0IGFzIGEgY291bnRlci4gIFdlIGNvbnZlcnQgdG8KJiM0MzsJICogdGhlIHdpcmUgZm9ybWF0IChieXRlIGxlbmd0aCkgd2hlbiBzZW5kaW5nIHRvIGZpcm13YXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFwbWtzYSkgewomIzQzOwkJLyogRmx1c2g6IHplcm8gdGhlIHNoYWRvdyBsaXN0IGFuZCBwdXNoIGFuIGVtcHR5IFYyIGxpc3QuICovCiYjNDM7CQltZW1zZXQobGlzdCwgMCwgc2l6ZW9mKCpsaXN0KSk7CiYjNDM7CQlnb3RvIHNlbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGFsaXZlKSB7CiYjNDM7CQkvKiBTZXQ6IHNlYXJjaCBmb3IgZXhpc3RpbmcgQlNTSUQgbWF0Y2ggZmlyc3QuICovCiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnBtazsgaSYjNDM7JiM0MzspCiYjNDM7CQkJaWYgKCFtZW1jbXAocG1rc2EtJmd0O2Jzc2lkLCBwbWtbaV0uYnNzaWQsIEVUSF9BTEVOKSkKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CiYjNDM7CQlpZiAoaSAmZ3Q7PSBCUkNNRl9NQVhQTUtJRCkgewomIzQzOwkJCWJwaHlfZXJyKGRydnIsICYjMzQ7VjIgUE1LU0EgY2FjaGUgZnVsbCAoJWQgZW50cmllcylcbiYjMzQ7LAomIzQzOwkJCQkgbnBtayk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQltZW1zZXQoJmFtcDtwbWtbaV0sIDAsIHNpemVvZihwbWtbaV0pKTsKJiM0MzsJCXBta1tpXS5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IGJyY21mX3Bta3NhX3YyKSk7CiYjNDM7CQlpZiAocG1rc2EtJmd0O2Jzc2lkKQomIzQzOwkJCW1lbWNweShwbWtbaV0uYnNzaWQsIHBta3NhLSZndDtic3NpZCwgRVRIX0FMRU4pOwomIzQzOwkJaWYgKHBta3NhLSZndDtwbWtpZCkKJiM0MzsJCQltZW1jcHkocG1rW2ldLnBta2lkLCBwbWtzYS0mZ3Q7cG1raWQsIFdMQU5fUE1LSURfTEVOKTsKJiM0MzsJCWlmIChwbWtzYS0mZ3Q7cG1rICZhbXA7JmFtcDsgcG1rc2EtJmd0O3Bta19sZW4gJmFtcDsmYW1wOwomIzQzOwkJICAgIHBta3NhLSZndDtwbWtfbGVuICZsdDs9IFdMQU5fUE1LX0xFTl9TVUlURV9CXzE5MikgewomIzQzOwkJCW1lbWNweShwbWtbaV0ucG1rLCBwbWtzYS0mZ3Q7cG1rLCBwbWtzYS0mZ3Q7cG1rX2xlbik7CiYjNDM7CQkJcG1rW2ldLnBta19sZW4gPSBjcHVfdG9fbGUxNihwbWtzYS0mZ3Q7cG1rX2xlbik7CiYjNDM7CQl9CiYjNDM7CQlpZiAocG1rc2EtJmd0O3NzaWQgJmFtcDsmYW1wOyBwbWtzYS0mZ3Q7c3NpZF9sZW4pIHsKJiM0MzsJCQltZW1jcHkocG1rW2ldLnNzaWQuU1NJRCwgcG1rc2EtJmd0O3NzaWQsIHBta3NhLSZndDtzc2lkX2xlbik7CiYjNDM7CQkJcG1rW2ldLnNzaWQuU1NJRF9sZW4gPSBwbWtzYS0mZ3Q7c3NpZF9sZW47CiYjNDM7CQl9CiYjNDM7CQlpZiAocG1rc2EtJmd0O2ZpbHNfY2FjaGVfaWQpCiYjNDM7CQkJcG1rW2ldLmZpbHNfY2FjaGVfaWQgPSAqcG1rc2EtJmd0O2ZpbHNfY2FjaGVfaWQ7CiYjNDM7CiYjNDM7CQlpZiAoaSA9PSBucG1rKQomIzQzOwkJCW5wbWsmIzQzOyYjNDM7OwomIzQzOwl9IGVsc2UgewomIzQzOwkJLyogRGVsZXRlOiBmaW5kIGJ5IEJTU0lEIGFuZCBjb21wYWN0IHRoZSBsaXN0LiAqLwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG5wbWs7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWlmICghbWVtY21wKHBta3NhLSZndDtic3NpZCwgcG1rW2ldLmJzc2lkLCBFVEhfQUxFTikpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKGkgJmd0Oz0gbnBtaykgewomIzQzOwkJCWJwaHlfZXJyKGRydnIsICYjMzQ7VjIgUE1LU0EgZW50cnkgbm90IGZvdW5kXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlmb3IgKDsgaSAmbHQ7IG5wbWsgLSAxOyBpJiM0MzsmIzQzOykKJiM0MzsJCQltZW1jcHkoJmFtcDtwbWtbaV0sICZhbXA7cG1rW2kgJiM0MzsgMV0sIHNpemVvZihwbWtbaV0pKTsKJiM0MzsJCW1lbXNldCgmYW1wO3Bta1tucG1rIC0gMV0sIDAsIHNpemVvZihwbWtbbnBtayAtIDFdKSk7CiYjNDM7CQlucG1rLS07CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV3JpdGUgdGhlIHVwZGF0ZWQgZW50cnkgY291bnQgYmFjayB0byBzaGFkb3cgQkVGT1JFIHdlIG92ZXJ3cml0ZQomIzQzOwkgKiBsaXN0LSZndDtsZW5ndGggd2l0aCB0aGUgd2lyZS1mb3JtYXQgYnl0ZSBsZW5ndGggYXQgc2VuZDouICBJZiB3ZQomIzQzOwkgKiBkb24mIzM5O3QgZG8gdGhpcyBoZXJlLCB0aGUgbmV4dCBjYWxsIHdpbGwgcmVhZCBhIGJ5dGUtbGVuZ3RoIGJhY2sKJiM0MzsJICogYXMgYW4gZW50cnkgY291bnQgYW5kIHNpbGVudGx5IGNvcnJ1cHQgdGhlIGxpc3QuCiYjNDM7CSAqLwomIzQzOwlsaXN0LSZndDtsZW5ndGggPSBjcHVfdG9fbGUxNihucG1rKTsKJiM0MzsKJiM0MztzZW5kOgomIzQzOwkvKiBCdWlsZCB0aGUgd2lyZS1mb3JtYXQgYnl0ZSBsZW5ndGggYW5kIHNlbmQgdGhlIGZ1bGwgbGlzdCB0byBmaXJtd2FyZS4KJiM0MzsJICogUmVhZCBucG1rIGJhY2sgZnJvbSB0aGUgc2hhZG93IChoYW5kbGVzIHRoZSBmbHVzaCBwYXRoIHdoZXJlIG5wbWs9MCkuCiYjNDM7CSAqLwomIzQzOwlucG1rID0gbGUxNl90b19jcHUobGlzdC0mZ3Q7bGVuZ3RoKTsKJiM0MzsJbGlzdC0mZ3Q7dmVyc2lvbiA9IGNwdV90b19sZTE2KEJSQ01GX1BNS1NBX1ZFUl8yKTsKJiM0MzsJbGlzdC0mZ3Q7bGVuZ3RoICA9IGNwdV90b19sZTE2KG9mZnNldG9mKHN0cnVjdCBicmNtZl9wbWtfbGlzdF92Ml9sZSwgcG1rKSAmIzQzOwomIzQzOwkJCQkgICBucG1rICogc2l6ZW9mKHN0cnVjdCBicmNtZl9wbWtzYV92MikpOwomIzQzOwomIzQzOwlyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgJiMzNDtwbWtpZF9pbmZvJiMzNDssIGxpc3QsIHNpemVvZigqbGlzdCkpOwomIzQzO30KJiM0MzsKJiM0MzsKIHN0YXRpYyBfX3VzZWQgczMyCiBicmNtZl91cGRhdGVfcG1rbGlzdChzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnLCBzdHJ1Y3QgYnJjbWZfaWYgKmlmcCkKIHsKQEAgLTQ0MDIsOCAmIzQzOzQ1MDMsOCBAQCBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAKIAlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpCiAJCXJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCB0cnVlKTsKLQotCS8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqLwomIzQzOwlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpCiYjNDM7CQlyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCB0cnVlKTsKIAogCW5wbWsgPSBsZTMyX3RvX2NwdShjZmctJmd0O3Bta19saXN0Lm5wbWspOwogCWZvciAoaSA9IDA7IGkgJmx0OyBucG1rOyBpJiM0MzsmIzQzOykKQEAgLTQ0NDYsOCAmIzQzOzQ1NDcsOCBAQCBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAKIAlpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpCiAJCXJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCBmYWxzZSk7Ci0KLQkvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi8KJiM0MzsJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKQomIzQzOwkJcmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBwbWtzYSwgZmFsc2UpOwogCiAJbnBtayA9IGxlMzJfdG9fY3B1KGNmZy0mZ3Q7cG1rX2xpc3QubnBtayk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5wbWs7IGkmIzQzOyYjNDM7KQpAQCAtNDQ4Nyw4ICYjNDM7NDU4OCw4IEBAIGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCiAJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKQogCQlyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBOVUxMLCBmYWxzZSk7Ci0KLQkvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi8KJiM0MzsJaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKQomIzQzOwkJcmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBOVUxMLCBmYWxzZSk7CiAKIAltZW1zZXQoJmFtcDtjZmctJmd0O3Bta19saXN0LCAwLCBzaXplb2YoY2ZnLSZndDtwbWtfbGlzdCkpOwogCWVyciA9IGJyY21mX3VwZGF0ZV9wbWtsaXN0KGNmZywgaWZwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmgKaW5kZXggNmNlYjMwMTQyOTA1NC4uNTcxNjdmZGU1YmExNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmgKQEAgLTM0NCw3ICYjNDM7MzQ0LDggQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX3dvd2wgewogICogQGJzc19saXN0OiBic3NfbGlzdCBob2xkaW5nIHNjYW5uZWQgYXAgaW5mb3JtYXRpb24uCiAgKiBAYnNzX2luZm86IGJzcyBpbmZvcm1hdGlvbiBmb3IgY2ZnODAyMTEgbGF5ZXIuCiAgKiBAY29ubl9pbmZvOiBhc3NvY2lhdGlvbiBpbmZvLgotICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0LgomIzQzOyAqIEBwbWtfbGlzdDogd3BhMiBwbWsgbGlzdCAoVjEgZmlybXdhcmUpLgomIzQzOyAqIEBwbWtfbGlzdF92Mjogd3BhMiBwbWsgbGlzdCBmb3IgVjIgZmlybXdhcmUgKEZJTFMtY2FwYWJsZSwgZmlybXdhcmUgcmV2IDEyKS4KICAqIEBzY2FuX3N0YXR1czogc2NhbiBhY3Rpdml0eSBvbiB0aGUgZG9uZ2xlLgogICogQHB1YjogY29tbW9uIGRyaXZlciBpbmZvcm1hdGlvbi4KICAqIEBjaGFubmVsOiBjdXJyZW50IGNoYW5uZWwuCkBAIC0zNzYsNiAmIzQzOzM3Nyw3IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvIHsKIAlzdHJ1Y3Qgd2xfY2ZnODAyMTFfYnNzX2luZm8gKmJzc19pbmZvOwogCXN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gY29ubl9pbmZvOwogCXN0cnVjdCBicmNtZl9wbWtfbGlzdF9sZSBwbWtfbGlzdDsKJiM0MzsJc3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlIHBta19saXN0X3YyOwogCXVuc2lnbmVkIGxvbmcgc2Nhbl9zdGF0dXM7CiAJc3RydWN0IGJyY21mX3B1YiAqcHViOwogCXUzMiBjaGFubmVsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMKaW5kZXggZWMxNzA2NDc4MDBkYS4uZWVmYzQzN2RkMDU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jCkBAIC00MzEsNDUgJiM0Mzs0MzEsNTUgQEAgdm9pZCBicmNtZl9uZXRpZl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAluZXRpZl9yeChza2IpOwogfQogCiYjNDM7c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8gewomIzQzOwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBoZHI7CiYjNDM7CXM4IGRibV9hbnRzaWduYWw7CiYjNDM7fSBfX3BhY2tlZDsKJiM0MzsKIHZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX01PTklUT1JfRk1UX1JBRElPVEFQKSkgewotCQkvKiBEbyBub3RoaW5nICovCiYjNDM7CQkvKiBGaXJtd2FyZSBhbHJlYWR5IHByb3ZpZGVkIGEgZnVsbCByYWRpb3RhcCBoZWFkZXI7IGRvIG5vdGhpbmcgKi8KIAl9IGVsc2UgaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfSFdfUlhfSERSKSkgewogCQlzdHJ1Y3Qgd2xjX2QxMXJ4aGRyICp3bGNfcnhoZHIgPSAoc3RydWN0IHdsY19kMTFyeGhkciAqKXNrYi0mZ3Q7ZGF0YTsKLQkJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJhZGlvdGFwOwomIzQzOwkJc3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8gKnJ0YXA7CiAJCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJCXUxNiBSeFN0YXR1czE7CiYjNDM7CQlzOCByc3NpOwogCiAJCVJ4U3RhdHVzMSA9IGxlMTZfdG9fY3B1KHdsY19yeGhkci0mZ3Q7cnhoZHIuUnhTdGF0dXMxKTsKJiM0MzsJCXJzc2kgPSB3bGNfcnhoZHItJmd0O3Jzc2k7CiAKIAkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCB3bGNfZDExcnhoZHIpOwotCQkvKiBNQUMgaW5zZXJ0cyAyIHBhZCBieXRlcyBmb3IgYTQgaGVhZGVycyBvciBRb1Mgb3IgQS1NU0RVCi0JCSAqIHN1YmZyYW1lcwotCQkgKi8KJiM0MzsJCS8qIE1BQyBpbnNlcnRzIDIgcGFkIGJ5dGVzIGZvciBhNCBoZWFkZXJzIG9yIFFvUyBvciBBLU1TRFUgc3ViZnJhbWVzICovCiAJCWlmIChSeFN0YXR1czEgJmFtcDsgUlhTX1BCUFJFUykKIAkJCW9mZnNldCAmIzQzOz0gMjsKIAkJb2Zmc2V0ICYjNDM7PSBEMTFfUEhZX0hEUl9MRU47CiAKIAkJc2tiX3B1bGwoc2tiLCBvZmZzZXQpOwogCi0JCS8qIFRPRE86IHVzZSBSWCBoZWFkZXIgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi8KLQkJcmFkaW90YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcmFkaW90YXApKTsKLQkJbWVtc2V0KHJhZGlvdGFwLCAwLCBzaXplb2YoKnJhZGlvdGFwKSk7Ci0JCXJhZGlvdGFwLSZndDtpdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJhZGlvdGFwKSk7Ci0KLQkJLyogVE9ETzogNCBieXRlcyB3aXRoIHJlY2VpdmUgc3RhdHVzPyAqLwotCQlza2ItJmd0O2xlbiAtPSA0OwomIzQzOwkJLyogSW5zZXJ0IG91ciByYWRpb3RhcCBoZWFkZXIgd2l0aCBSU1NJIGRhdGEgKi8KJiM0MzsJCWlmIChza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKnJ0YXApKSkKJiM0MzsJCQlnb3RvIGRyb3A7CiYjNDM7CQlydGFwID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnJ0YXApKTsKJiM0MzsJCW1lbXNldChydGFwLCAwLCBzaXplb2YoKnJ0YXApKTsKJiM0MzsJCXJ0YXAtJmd0O2hkci5pdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJ0YXApKTsKJiM0MzsJCXJ0YXAtJmd0O2hkci5pdF9wcmVzZW50ID0gY3B1X3RvX2xlMzIoMSAmbHQ7Jmx0OyBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCk7CiYjNDM7CQlydGFwLSZndDtkYm1fYW50c2lnbmFsID0gcnNzaTsKJiM0MzsKJiM0MzsJCS8qIFN0cmlwIHRoZSA0LWJ5dGUgcmVjZWl2ZSBzdGF0dXMgLyBGQ1MgdGFpbCAqLwomIzQzOwkJc2tiX3RyaW0oc2tiLCBza2ItJmd0O2xlbiAtIDQpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpyYWRpb3RhcDsKIAotCQkvKiBUT0RPOiB1c2UgUlggc3RhdHVzIHRvIGZpbGwgc29tZSByYWRpb3RhcCBkYXRhICovCiYjNDM7CQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpKQomIzQzOwkJCWdvdG8gZHJvcDsKIAkJcmFkaW90YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcmFkaW90YXApKTsKIAkJbWVtc2V0KHJhZGlvdGFwLCAwLCBzaXplb2YoKnJhZGlvdGFwKSk7CiAJCXJhZGlvdGFwLSZndDtpdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJhZGlvdGFwKSk7CiAKLQkJLyogVE9ETzogNCBieXRlcyB3aXRoIHJlY2VpdmUgc3RhdHVzPyAqLwotCQlza2ItJmd0O2xlbiAtPSA0OwomIzQzOwkJLyogU3RyaXAgdGhlIDQtYnl0ZSByZWNlaXZlIHN0YXR1cyAvIEZDUyB0YWlsICovCiYjNDM7CQlza2JfdHJpbShza2IsIHNrYi0mZ3Q7bGVuIC0gNCk7CiAJfQogCiAJc2tiLSZndDtkZXYgPSBpZnAtJmd0O25kZXY7CkBAIC00NzgsNiAmIzQzOzQ4OCwxMCBAQCB2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlza2ItJmd0O3Byb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwogCiAJYnJjbWZfbmV0aWZfcngoaWZwLCBza2IpOwomIzQzOwlyZXR1cm47CiYjNDM7CiYjNDM7ZHJvcDoKJiM0MzsJYnJjbXVfcGt0X2J1Zl9mcmVlX3NrYihza2IpOwogfQogCiBzdGF0aWMgaW50IGJyY21mX3J4X2hkcnB1bGwoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMKaW5kZXggMzVjYmNlYTBhYmM5YS4uYjljNTE4OTM5ZjUwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMKQEAgLTE4MiwxMCAmIzQzOzE4Miw4IEBAIHN0YXRpYyB2b2lkIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCwKIAlzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWY7CiAJc3RydWN0IGJyY21mX3B1YiAqZHJ2cjsKIAlzdHJ1Y3QgYnJjbWZfaWYgKmlmcDsKLQlib29sIGN1cnJlbnRseV9ibG9ja2VkOwotCWludCBpOwotCXU4IGlmaWR4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXU4IGlmaWR4OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtmbG93LSZndDtibG9ja19sb2NrLCBmbGFncyk7CiAKQEAgLTE5NCwyMyAmIzQzOzE5Miw1NCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtmbG93LSZndDtibG9ja19sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9Ci0JaWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTsKIAotCWN1cnJlbnRseV9ibG9ja2VkID0gZmFsc2U7Ci0JZm9yIChpID0gMDsgaSAmbHQ7IGZsb3ctJmd0O25yb2ZyaW5nczsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKChmbG93LSZndDtyaW5nc1tpXSkgJmFtcDsmYW1wOyAoaSAhPSBmbG93aWQpKSB7Ci0JCQlyaW5nID0gZmxvdy0mZ3Q7cmluZ3NbaV07Ci0JCQlpZiAoKHJpbmctJmd0O3N0YXR1cyA9PSBSSU5HX09QRU4pICZhbXA7JmFtcDsKLQkJCSAgICAoYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGkpID09IGlmaWR4KSkgewotCQkJCWlmIChyaW5nLSZndDtibG9ja2VkKSB7Ci0JCQkJCWN1cnJlbnRseV9ibG9ja2VkID0gdHJ1ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQomIzQzOwlpZmlkeCA9IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChmbG93LCBmbG93aWQpOwomIzQzOwlyaW5nLSZndDtibG9ja2VkID0gYmxvY2tlZDsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogTWFpbnRhaW4gdGhlIHBlci1pbnRlcmZhY2UgYmxvY2tlZC1yaW5nIGNvdW50ZXIuCiYjNDM7CSAqCiYjNDM7CSAqIFdlIHVzZSByaW5nLSZndDtjb3VudGVkX2luX2Jsb2NrZWQgcmF0aGVyIHRoYW4gY2hlY2tpbmcKJiM0MzsJICogcmluZy0mZ3Q7c3RhdHVzIGhlcmUuICBBIHJpbmcgdGhhdCBiZWNhbWUgYmxvY2tlZCB3aGlsZQomIzQzOwkgKiBSSU5HX09QRU4gaGFzIGFscmVhZHkgYmVlbiBjb3VudGVkIChjb3VudGVkX2luX2Jsb2NrZWQ9dHJ1ZSkuCiYjNDM7CSAqIEJ5IHRoZSB0aW1lIHdlIHVuYmxvY2sgaXQgZHVyaW5nIHRlYXJkb3duIGl0cyBzdGF0dXMgbWF5IGhhdmUKJiM0MzsJICogYWR2YW5jZWQgdG8gUklOR19DTE9TSU5HLCBzbyB0ZXN0aW5nIFJJTkdfT1BFTiB3b3VsZCB3cm9uZ2x5CiYjNDM7CSAqIHNraXAgdGhlIGF0b21pY19kZWMgYW5kIHBlcm1hbmVudGx5IGxlYWsgdGhlIGNvdW50ZXIsIGxlYXZpbmcKJiM0MzsJICogdGhlIG5ldGlmIHF1ZXVlIHN0b3BwZWQgZm9yZXZlci4KJiM0MzsJICoKJiM0MzsJICogUnVsZToKJiM0MzsJICogICBibG9jayB0cmFuc2l0aW9uICAodW5ibG9ja2Vk4oaSYmxvY2tlZCk6IGNvdW50IG9ubHkgaWYgUklOR19PUEVOLAomIzQzOwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBjb3VudGVkX2luX2Jsb2NrZWQuCiYjNDM7CSAqICAgdW5ibG9jayB0cmFuc2l0aW9uIChibG9ja2Vk4oaSdW5ibG9ja2VkKTogZGVjcmVtZW50IG9ubHkgaWYgd2UKJiM0MzsJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGNvdW50ZWQgaXQsCiYjNDM7CSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgY291bnRlZF9pbl9ibG9ja2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKGJsb2NrZWQpIHsKJiM0MzsJCWlmIChyaW5nLSZndDtzdGF0dXMgPT0gUklOR19PUEVOKSB7CiYjNDM7CQkJYXRvbWljX2luYygmYW1wO2Zsb3ctJmd0O2lmX2Jsb2NrZWRfY250W2lmaWR4XSk7CiYjNDM7CQkJcmluZy0mZ3Q7Y291bnRlZF9pbl9ibG9ja2VkID0gdHJ1ZTsKIAkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJaWYgKHJpbmctJmd0O2NvdW50ZWRfaW5fYmxvY2tlZCkgewomIzQzOwkJCWF0b21pY19kZWMoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpZmlkeF0pOwomIzQzOwkJCXJpbmctJmd0O2NvdW50ZWRfaW5fYmxvY2tlZCA9IGZhbHNlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgcHJvcGFnYXRlIGEgbmV0aWYgcXVldWUtc3RvcC93YWtlIHdoZW4gdGhlIGludGVyZmFjZQomIzQzOwkgKiB0cmFuc2l0aW9ucyBiZXR3ZWVuIGZ1bGx5LWNsZWFyIGFuZCBhdC1sZWFzdC1vbmUtYmxvY2tlZC4KJiM0MzsJICogUmVhZGluZyB0aGUgYXRvbWljIGlzIHNhZmUgaGVyZTogd2UgaG9sZCBibG9ja19sb2NrLCBzbyBubwomIzQzOwkgKiBjb25jdXJyZW50IGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FsbCBjYW4gcmFjZSB0aGUgdXBkYXRlCiYjNDM7CSAqIHdlIGp1c3QgbWFkZSBhYm92ZS4KJiM0MzsJICovCiYjNDM7CWlmIChibG9ja2VkICZhbXA7JmFtcDsgYXRvbWljX3JlYWQoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDEpIHsKJiM0MzsJCS8qIEFub3RoZXIgcmluZyB3YXMgYWxyZWFkeSBibG9ja2VkOyBubyBuZXcgcXVldWUtc3RvcCBuZWVkZWQuICovCiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Zmxvdy0mZ3Q7YmxvY2tfbG9jaywgZmxhZ3MpOwomIzQzOwkJcmV0dXJuOwogCX0KLQlmbG93LSZndDtyaW5nc1tmbG93aWRdLSZndDtibG9ja2VkID0gYmxvY2tlZDsKLQlpZiAoY3VycmVudGx5X2Jsb2NrZWQpIHsKJiM0MzsJaWYgKCFibG9ja2VkICZhbXA7JmFtcDsgYXRvbWljX3JlYWQoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDApIHsKJiM0MzsJCS8qIE1vcmUgcmluZ3Mgc3RpbGwgYmxvY2tlZDsgZG8gbm90IHdha2UgdGhlIHF1ZXVlIHlldC4gKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2Zsb3ctJmd0O2Jsb2NrX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM2Nyw2ICYjNDM7Mzk2LDggQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nICpicmNtZl9mbG93cmluZ19hdHRhY2goc3RydWN0IGRldmljZSAqZGV2LCB1MTYgbnJvZnJpbmdzKQogCQlzcGluX2xvY2tfaW5pdCgmYW1wO2Zsb3ctJmd0O2Jsb2NrX2xvY2spOwogCQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShmbG93LSZndDthZGRyX21vZGUpOyBpJiM0MzsmIzQzOykKIAkJCWZsb3ctJmd0O2FkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShmbG93LSZndDtpZl9ibG9ja2VkX2NudCk7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWF0b21pY19zZXQoJmFtcDtmbG93LSZndDtpZl9ibG9ja2VkX2NudFtpXSwgMCk7CiAJCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKGZsb3ctJmd0O2hhc2gpOyBpJiM0MzsmIzQzOykKIAkJCWZsb3ctJmd0O2hhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgKaW5kZXggZjNkNTExZjlhM2M5YS4uYWZkZWE4YjNmOGFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgKQEAgLTUsNiAmIzQzOzUsOCBAQAogI2lmbmRlZiBCUkNNRk1BQ19GTE9XUklOR19ICiAjZGVmaW5lIEJSQ01GTUFDX0ZMT1dSSU5HX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9hdG9taWMuaCZndDsKJiM0MzsKIAogI2RlZmluZSBCUkNNRl9GTE9XUklOR19IQVNIU0laRQkJNTEyCQkvKiBoYXMgdG8gYmUgMl54ICovCiAjZGVmaW5lIEJSQ01GX0ZMT1dSSU5HX0lOVkFMSURfSUQJMHhGRkZGRkZGRgpAQCAtMjYsNiAmIzQzOzI4LDE2IEBAIGVudW0gcmluZ19zdGF0dXMgewogc3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgewogCXUxNiBoYXNoX2lkOwogCWJvb2wgYmxvY2tlZDsKJiM0MzsJLyoKJiM0MzsJICogVHJ1ZSB3aGVuIHRoaXMgcmluZyBoYXMgYmVlbiBjb3VudGVkIGluIHRoZSBwZXItaW50ZXJmYWNlCiYjNDM7CSAqIGlmX2Jsb2NrZWRfY250W10uICBTZXQgdG8gdHJ1ZSB3aGVuZXZlciB0aGUgcmluZyB0cmFuc2l0aW9ucwomIzQzOwkgKiB1bmJsb2NrZWTihpJibG9ja2VkIHdoaWxlIFJJTkdfT1BFTjsgY2xlYXJlZCBvbiB0aGUgbWF0Y2hpbmcKJiM0MzsJICogYmxvY2tlZOKGknVuYmxvY2tlZCB0cmFuc2l0aW9uLiAgTmVlZGVkIHNvIHRoYXQgYSByaW5nIHRoYXQKJiM0MzsJICogYmVjb21lcyBibG9ja2VkIHdoaWxlIFJJTkdfT1BFTiBhbmQgaXMgbGF0ZXIgbW92ZWQgdG8KJiM0MzsJICogUklOR19DTE9TSU5HIHN0aWxsIGNvcnJlY3RseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyIGF0CiYjNDM7CSAqIHRlYXJkb3duLCBldmVuIHRob3VnaCBpdHMgc3RhdHVzIGlzIG5vIGxvbmdlciBSSU5HX09QRU4uCiYjNDM7CSAqLwomIzQzOwlib29sIGNvdW50ZWRfaW5fYmxvY2tlZDsKIAllbnVtIHJpbmdfc3RhdHVzIHN0YXR1czsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHNrYmxpc3Q7CiB9OwpAQCAtNDAsNiAmIzQzOzUyLDEyIEBAIHN0cnVjdCBicmNtZl9mbG93cmluZyB7CiAJc3RydWN0IGJyY21mX2Zsb3dyaW5nX2hhc2ggaGFzaFtCUkNNRl9GTE9XUklOR19IQVNIU0laRV07CiAJc3BpbmxvY2tfdCBibG9ja19sb2NrOwogCWVudW0gcHJvdG9fYWRkcl9tb2RlIGFkZHJfbW9kZVtCUkNNRl9NQVhfSUZTXTsKJiM0MzsJLyogUGVyLWludGVyZmFjZSBjb3VudCBvZiBjdXJyZW50bHkgYmxvY2tlZCBvcGVuIHJpbmdzLgomIzQzOwkgKiBNYWludGFpbmVkIGF0b21pY2FsbHkgc28gYnJjbWZfZmxvd3JpbmdfYmxvY2soKSBjYW4gY2hlY2sKJiM0MzsJICogd2hldGhlciBhbnkgc2libGluZyByaW5nIGlzIGFscmVhZHkgYmxvY2tlZCBpbiBPKDEpIHdpdGhvdXQKJiM0MzsJICogaG9sZGluZyBibG9ja19sb2NrIGFjcm9zcyBhbiBPKG5yb2ZyaW5ncykgd2Fsay4KJiM0MzsJICovCiYjNDM7CWF0b21pY190IGlmX2Jsb2NrZWRfY250W0JSQ01GX01BWF9JRlNdOwogCXUxNiBucm9mcmluZ3M7CiAJYm9vbCB0ZGxzX2FjdGl2ZTsKIAlzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfdGRsc19lbnRyeSAqdGRsc19lbnRyeTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMKaW5kZXggYTQzZjFhMzhiMGUzMC4uM2MxY2EzNTVlOGVlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMKQEAgLTEwMzcsNyAmIzQzOzEwMzcsOSBAQCBpbnQgYnJjbWZfZndzX21hY2Rlc2NfaW5kaWNhdGUoc3RydWN0IGJyY21mX2Z3c19pbmZvICpmd3MsIHU4IHR5cGUsIHU4ICpkYXRhKQogCQl9IGVsc2UgewogCQkJYnJjbWZfZGJnKFRSQUNFLCAmIzM0O3VzZSBleGlzdGluZ1xuJiMzNDspOwogCQkJV0FSTl9PTihlbnRyeS0mZ3Q7bWFjX2hhbmRsZSAhPSBtYWNfaGFuZGxlKTsKLQkJCS8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovCiYjNDM7CQkJLyogRmlybXdhcmUgcmUtc2VudCBBREQgZm9yIHRoZSBzYW1lIE1BQyBoYW5kbGUuCiYjNDM7CQkJICogTm8gYWN0aW9uIHJlcXVpcmVkOyBpdCBpcyBhIHNhZmUgbm8tb3AuCiYjNDM7CQkJICovCiAJCX0KIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMKaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYwpAQCAtNDgsNyAmIzQzOzQ4LDE5IEBACiAjZGVmaW5lIE1TR0JVRl9UWVBFX0xQQktfRE1BWEZFUgkJMHgxMwogI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJfQ01QTFQJCTB4MTQKIAotI2RlZmluZSBOUl9UWF9QS1RJRFMJCQkJMjA0OAomIzQzOy8qCiYjNDM7ICogTlJfVFhfUEtUSURTOiBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzbHkgaW4tZmxpZ2h0IFRYIHBhY2tldCBJRHMuCiYjNDM7ICogRWFjaCBvdXRzdGFuZGluZyBUWCBmcmFtZSBjb25zdW1lcyBvbmUgSUQgdW50aWwgdGhlIGRvbmdsZSByZXR1cm5zCiYjNDM7ICogYSBUWC1zdGF0dXMgY29tcGxldGlvbi4gIFRoZSBvcmlnaW5hbCAyMDQ4LWVudHJ5IHBvb2wgZXhoYXVzdGVkIHVuZGVyCiYjNDM7ICog4omlNCBjb25jdXJyZW50IGlwZXJmMyBzdHJlYW1zIG9uIFdpLUZpIDUvNiAoODAyLjExYWMvYXgpIGRldmljZXMsCiYjNDM7ICogY2F1c2luZyAmIzM0O05vIFBLVElEIGF2YWlsYWJsZSYjMzQ7IGRyb3BzIGFuZCBUQ1AgcmV0cmFuc21pdHMuICA0MDk2IGdpdmVzCiYjNDM7ICogaGVhZHJvb20gZm9yIGhpZ2gtYWdncmVnYXRpb24gc2NlbmFyaW9zIHdoaWxlIHN0aWxsIGZpdHRpbmcgaW4gYQomIzQzOyAqIG1vZGVzdCBhbW91bnQgb2YgaG9zdCBtZW1vcnkgKH40OCBLQiBmb3IgdGhlIHBrdGlkIHRhYmxlIGVudHJpZXMpLgomIzQzOyAqCiYjNDM7ICogTlJfUlhfUEtUSURTOiBSWCBwb3N0IGJ1ZmZlcnMgcHJlLWFsbG9jYXRlZCB0byB0aGUgZG9uZ2xlLiAgMTAyNCBpcwomIzQzOyAqIHN1ZmZpY2llbnQgZm9yIGN1cnJlbnQgaGFyZHdhcmUgUlggcmluZyBkZXB0aHM7IGxlYXZlIHVuY2hhbmdlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIE5SX1RYX1BLVElEUwkJCQk0MDk2CiAjZGVmaW5lIE5SX1JYX1BLVElEUwkJCQkxMDI0CiAKICNkZWZpbmUgQlJDTUZfSU9DVExfUkVRX1BLVElECQkJMHhGRkZFCkBAIC02NCw4ICYjNDM7NzYsMjkgQEAKICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19GUkFNRV9NQVNLCTB4MDcKICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19QUklPX1NISUZUCTUKIAotI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMQkJMzIKLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDIJCTk2CiYjNDM7LyoKJiM0MzsgKiBUWCBmbHVzaCAvIGRvb3JiZWxsLXJpbmcgdGhyZXNob2xkcy4KJiM0MzsgKgomIzQzOyAqIENOVDEgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIGluIHRoZSBjb21tb25yaW5nCiYjNDM7ICogYmVmb3JlIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgd3JpdGVfY29tcGxldGUoKSAoZG9vcmJlbGwgcmluZykgaXMKJiM0MzsgKiBpc3N1ZWQgbWlkLWJhdGNoLiAgQ05UMiBpcyB0aGUgaGFyZCBmbHVzaCBpbnRlcnZhbDogYWZ0ZXIgdGhpcyBtYW55CiYjNDM7ICogZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuIHNpbmNlIHRoZSBsYXN0IGZsdXNoLCB3ZSB1bmNvbmRpdGlvbmFsbHkKJiM0MzsgKiByaW5nIHRoZSBiZWxsIGFuZCByZXNldCB0aGUgY291bnRlci4KJiM0MzsgKgomIzQzOyAqIFJhaXNpbmcgYm90aCBmcm9tIHRoZSBvcmlnaW5hbCAzMi85NiB0byA2NC8xMjggZG91YmxlcyB0aGUgYXZlcmFnZQomIzQzOyAqIG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyBjb21taXR0ZWQgcGVyIE1NSU8gd3JpdGUsIGhhbHZpbmcgdGhlIFBDSWUKJiM0MzsgKiBkb29yYmVsbCByYXRlIG9uIHN1c3RhaW5lZCB0aHJvdWdocHV0IHdvcmtsb2Fkcy4gIFRoZSB0cmFkZW9mZiBpcyBhCiYjNDM7ICogbWFyZ2luYWxseSBoaWdoZXIgd29yc3QtY2FzZSBsYXRlbmN5IGZvciB0aGUgbGFzdCBmcmFtZXMgaW4gYSBidXJzdCwKJiM0MzsgKiB3aGljaCBpbiBwcmFjdGljZSBpcyBoaWRkZW4gYnkgdGhlIHRpbWUgdGhlIGRvbmdsZSBETUEgZW5naW5lIGRyYWlucwomIzQzOyAqIHRoZSBwcmV2aW91cyBiYXRjaC4KJiM0MzsgKgomIzQzOyAqIFRSSUNLTEVfVFhXT1JLRVJfVEhSUyBnb3Zlcm5zIGhvdyBvZnRlbiBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YSgpCiYjNDM7ICogZm9yY2VzIGEgd29ya3F1ZXVlIHNjaGVkdWxlIHdoZW4gdGhlIHF1ZXVlIGRlcHRoIGlzIG5vdCBhIG11bHRpcGxlIG9mCiYjNDM7ICogdGhpcyB2YWx1ZS4gIEtlZXBpbmcgaXQgYXQgaGFsZiBvZiBDTlQxICgzMikgcHJlc2VydmVzIHJlc3BvbnNpdmVuZXNzCiYjNDM7ICogZm9yIGxvdy1yYXRlIGZsb3dzIChlLmcuIFZvSVAsIElDTVApIHRoYXQgbmV2ZXIgYWNjdW11bGF0ZSA2NCBmcmFtZXMuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMQkJNjQKJiM0MzsjZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQyCQkxMjgKIAogI2RlZmluZSBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSUwk5NgogI2RlZmluZSBCUkNNRl9NU0dCVUZfVFJJQ0tMRV9UWFdPUktFUl9USFJTCTMyCkBAIC03ODcsMTAgJiM0Mzs4MjAsMzAgQEAgc3RhdGljIGludCBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZiwgdTMyIGZsb3dpZCwKIHsKIAlzdHJ1Y3QgYnJjbWZfY29tbW9ucmluZyAqY29tbW9ucmluZzsKIAotCXNldF9iaXQoZmxvd2lkLCBtc2didWYtJmd0O2Zsb3dfbWFwKTsKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIGJpdCB3YXMgYWxyZWFkeSBzZXQsIGEgdHhmbG93X3dvcmsgaXRlbSBpcyBhbHJlYWR5CiYjNDM7CSAqIHF1ZXVlZCBvciBydW5uaW5nIGZvciB0aGlzIHJpbmcuICBJbiB0aGF0IGNhc2UgdGhlIGV4aXN0aW5nCiYjNDM7CSAqIHdvcmtlciB3aWxsIGRyYWluIG91ciBmcmVzaGx5IGVucXVldWVkIGZyYW1lIHdoZW4gaXQgcnVucywKJiM0MzsJICogc28gd2Ugb25seSBuZWVkIHRvIHNjaGVkdWxlIGFub3RoZXIgd29yayBpdGVtIHdoZW4gdGhlCiYjNDM7CSAqIGZvcmNlIGZsYWcgaXMgc2V0IG9yIHRoZSByaW5nIGlzIGJlbG93IHRoZSBkZWxheSB0aHJlc2hvbGQuCiYjNDM7CSAqCiYjNDM7CSAqIElmIHRoZSBiaXQgd2FzIE5PVCBzZXQgKHRlc3RfYW5kX3NldF9iaXQgcmV0dXJucyBmYWxzZSksIG5vCiYjNDM7CSAqIHdvcmtlciBpcyBwZW5kaW5nIGZvciB0aGlzIHJpbmcgYXQgYWxsLiAgV2UgTVVTVCBzY2hlZHVsZQomIzQzOwkgKiBvbmUgdW5jb25kaXRpb25hbGx5LCBvdGhlcndpc2UgdGhlIGZyYW1lIHdlIGp1c3QgZW5xdWV1ZWQKJiM0MzsJICogd2lsbCBzaXQgaW4gdGhlIGZsb3dyaW5nIHVuc2VudCB1bnRpbCBzb21lIHVucmVsYXRlZCBldmVudAomIzQzOwkgKiB0cmlnZ2VycyB0aGUgd29ya3F1ZXVlIOKAlCBjYXVzaW5nIHNpbGVudCBUWCBzdGFsbHMgdW5kZXIKJiM0MzsJICogaGlnaCBsb2FkIHdoZW4gb3V0c3RhbmRpbmdfdHggJmd0Oz0gREVMQVlfVFhXT1JLRVJfVEhSUy4KJiM0MzsJICovCiYjNDM7CWlmICghdGVzdF9hbmRfc2V0X2JpdChmbG93aWQsIG1zZ2J1Zi0mZ3Q7Zmxvd19tYXApKSB7CiYjNDM7CQkvKiBCaXQgd2FzIGNsZWFyOiBubyB3b3JrZXIgcGVuZGluZywgYWx3YXlzIHNjaGVkdWxlLiAqLwomIzQzOwkJcXVldWVfd29yayhtc2didWYtJmd0O3R4Zmxvd193cSwgJmFtcDttc2didWYtJmd0O3R4Zmxvd193b3JrKTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEJpdCB3YXMgYWxyZWFkeSBzZXQ6IHdvcmtlciBwZW5kaW5nLCBhcHBseSBjb2FsZXNjaW5nIGhldXJpc3RpYy4gKi8KIAljb21tb25yaW5nID0gbXNnYnVmLSZndDtmbG93cmluZ3NbZmxvd2lkXTsKLQlpZiAoKGZvcmNlKSB8fCAoYXRvbWljX3JlYWQoJmFtcDtjb21tb25yaW5nLSZndDtvdXRzdGFuZGluZ190eCkgJmx0OwotCQkJQlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlMpKQomIzQzOwlpZiAoZm9yY2UgfHwgKGF0b21pY19yZWFkKCZhbXA7Y29tbW9ucmluZy0mZ3Q7b3V0c3RhbmRpbmdfdHgpICZsdDsKJiM0MzsJCSAgICAgIEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSkKIAkJcXVldWVfd29yayhtc2didWYtJmd0O3R4Zmxvd193cSwgJmFtcDttc2didWYtJmd0O3R4Zmxvd193b3JrKTsKIAogCXJldHVybiAwOwpAQCAtMTYyMSwxMSAmIzQzOzE2NzQsMTEgQEAgaW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cikKIAlkbyB7CiAJCWJyY21mX21zZ2J1Zl9yeGJ1Zl9kYXRhX2ZpbGwobXNnYnVmKTsKIAkJaWYgKG1zZ2J1Zi0mZ3Q7bWF4X3J4YnVmcG9zdCAhPSBtc2didWYtJmd0O3J4YnVmcG9zdCkKLQkJCW1zbGVlcCgxMCk7CiYjNDM7CQkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwogCQllbHNlCiAJCQlicmVhazsKIAkJY291bnQmIzQzOyYjNDM7OwotCX0gd2hpbGUgKGNvdW50ICZsdDsgMTApOwomIzQzOwl9IHdoaWxlIChjb3VudCAmbHQ7IDEwMCk7CiAJYnJjbWZfbXNnYnVmX3J4YnVmX2V2ZW50X3Bvc3QobXNnYnVmKTsKIAlicmNtZl9tc2didWZfcnhidWZfaW9jdGxyZXNwX3Bvc3QobXNnYnVmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMKaW5kZXggMTM2NjJhYTRiNGVhNi4uOTMzOGE1ZmFhMjYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jCkBAIC0yNjgsNiAmIzQzOzI2OCwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2Zpcm13YXJlX21hcHBpbmcgYnJjbWZfcGNpZV9md25hbWVzW10gPSB7CiAKICNkZWZpbmUgQlJDTUZfUENJRV9NQkRBVEFfVElNRU9VVAkJbXNlY3NfdG9famlmZmllcygyMDAwKQogCiYjNDM7LyoKJiM0MzsgKiBIMkQgbWFpbGJveCBwb2xsIHRpbWluZyBwYXJhbWV0ZXJzLgomIzQzOyAqCiYjNDM7ICogVGhlIGRvbmdsZSB0eXBpY2FsbHkgY2xlYXJzIHRoZSBIMkQgbWFpbGJveCByZWdpc3RlciB3aXRoaW4gYSBmZXcKJiM0MzsgKiBodW5kcmVkIG1pY3Jvc2Vjb25kcyBhZnRlciB0aGUgZG9vcmJlbGwgaW50ZXJydXB0IGZpcmVzLiAgVGhlCiYjNDM7ICogb3JpZ2luYWwgY29kZSB1c2VkIG1zbGVlcCgxMCkgKiAxMDAgaXRlcmF0aW9ucywgbWVhbmluZyB0aGUKJiM0MzsgKiBtaW5pbXVtIG9ic2VydmFibGUgbGF0ZW5jeSB3YXMgMTBtcyBldmVuIHdoZW4gdGhlIGRvbmdsZSB3YXMgZmFzdC4KJiM0MzsgKgomIzQzOyAqIFdlIGluc3RlYWQgc3RhcnQgd2l0aCBhIHNob3J0IHNsZWVwIGFuZCBkb3VibGUgaXQgZWFjaCBpdGVyYXRpb24KJiM0MzsgKiAoZXhwb25lbnRpYWwgYmFja29mZikgdXAgdG8gQlJDTUZfUENJRV9NQl9QT0xMX01BWF9VUywgc3RheWluZwomIzQzOyAqIHdpdGhpbiB0aGUgc2FtZSAxLXNlY29uZCBhYnNvbHV0ZSB0aW1lb3V0LgomIzQzOyAqCiYjNDM7ICogTUlOX1VTIC8gSU5JVElBTF9NQVhfVVMgOiB1c2xlZXBfcmFuZ2UgYm91bmRzIGZvciB0aGUgZmlyc3QgaXRlcmF0aW9uLgomIzQzOyAqIE1BWF9VUyAgICAgOiBjYXAgb24gdGhlIHBlci1pdGVyYXRpb24gc2xlZXAgKMK1cykuCiYjNDM7ICogVElNRU9VVF9VUyA6IHRvdGFsIGJ1ZGdldCBiZWZvcmUgZ2l2aW5nIHVwICgxIHNlY29uZCkuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfTUlOX1VTCQk0MAomIzQzOyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX0lOSVRJQUxfTUFYX1VTCTUwCiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTCQk1MDAwCiYjNDM7I2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUwkJMTAwMDAwMAomIzQzOwogI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19TVEFUVVNfQ01ECQkweDQKICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfUE1fQ1NSCQkweDRDCiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX01TSV9DQVAJCTB4NTgKQEAgLTc2Niw3ICYjNDM7Nzg3LDggQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSkKIAlzdHJ1Y3QgYnJjbWZfY29yZSAqY29yZTsKIAl1MzIgYWRkcjsKIAl1MzIgY3VyX2h0b2RfbWJfZGF0YTsKLQl1MzIgaTsKJiM0MzsJdTMyIGVsYXBzZWRfdXMgPSAwOwomIzQzOwl1MzIgc2xlZXBfdXMgPSBCUkNNRl9QQ0lFX01CX1BPTExfSU5JVElBTF9NQVhfVVM7CiAKIAlzaGFyZWQgPSAmYW1wO2RldmluZm8tJmd0O3NoYXJlZDsKIAlhZGRyID0gc2hhcmVkLSZndDtodG9kX21iX2RhdGFfYWRkcjsKQEAgLTc3NiwxMiAmIzQzOzc5OCw0MCBAQCBicmNtZl9wY2llX3NlbmRfbWJfZGF0YShzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvLCB1MzIgaHRvZF9tYl9kYXRhKQogCQlicmNtZl9kYmcoUENJRSwgJiMzNDtNQiB0cmFuc2FjdGlvbiBpcyBhbHJlYWR5IHBlbmRpbmcgMHglMDR4XG4mIzM0OywKIAkJCSAgY3VyX2h0b2RfbWJfZGF0YSk7CiAKLQlpID0gMDsKJiM0MzsJLyoKJiM0MzsJICogV2FpdCBmb3IgdGhlIGRvbmdsZSB0byBjb25zdW1lIHRoZSBwcmV2aW91cyBIMkQgbWFpbGJveCBtZXNzYWdlLgomIzQzOwkgKgomIzQzOwkgKiBUaGVyZSBpcyBubyBpbnRlcnJ1cHQgdGhhdCBzaWduYWxzIHdoZW4gdGhlIGRvbmdsZSBjbGVhcnMgdGhpcwomIzQzOwkgKiByZWdpc3Rlciwgc28gcG9sbGluZyBpcyB1bmF2b2lkYWJsZS4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQKJiM0MzsJICogbXNsZWVwKDEwKSBwZXIgaXRlcmF0aW9uLCBpbmN1cnJpbmcgYXQgbGVhc3QgMTBtcyBvZiBsYXRlbmN5CiYjNDM7CSAqIGV2ZW4gd2hlbiB0aGUgZG9uZ2xlIHJlc3BvbmRlZCBpbiBtaWNyb3NlY29uZHMuCiYjNDM7CSAqCiYjNDM7CSAqIFdlIHVzZSB1c2xlZXBfcmFuZ2UoKSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYgaW5zdGVhZDoKJiM0MzsJICogICAtIEZpcnN0IGl0ZXJhdGlvbiBzbGVlcHMgfjUwwrVzIChmYXN0IHBhdGggZm9yIHJlc3BvbnNpdmUgZG9uZ2xlKS4KJiM0MzsJICogICAtIEVhY2ggc3Vic2VxdWVudCBpdGVyYXRpb24gZG91YmxlcyB0aGUgc2xlZXAsIGNhcHBlZCBhdCA1bXMsCiYjNDM7CSAqICAgICBzbyBsb25nIHdhaXRzIHN0aWxsIHlpZWxkIHRoZSBDUFUgd2l0aG91dCBidXN5LXNwaW5uaW5nLgomIzQzOwkgKiAgIC0gVG90YWwgdGltZW91dCBtYXRjaGVzIHRoZSBvcmlnaW5hbCAxLXNlY29uZCBsaW1pdC4KJiM0MzsJICogICAtIFdlIGJhaWwgZWFybHkgaWYgdGhlIGRldmljZSBoYXMgZ29uZSBkb3duIHNvIHRoYXQgYSBkZWFkCiYjNDM7CSAqICAgICBkb25nbGUgZG9lcyBub3QgaG9sZCB0aGUgY2FsbGVyIGZvciBhIGZ1bGwgc2Vjb25kLgomIzQzOwkgKi8KIAl3aGlsZSAoY3VyX2h0b2RfbWJfZGF0YSAhPSAwKSB7Ci0JCW1zbGVlcCgxMCk7Ci0JCWkmIzQzOyYjNDM7OwotCQlpZiAoaSAmZ3Q7IDEwMCkKJiM0MzsJCWlmIChkZXZpbmZvLSZndDtzdGF0ZSA9PSBCUkNNRk1BQ19QQ0lFX1NUQVRFX0RPV04pIHsKJiM0MzsJCQlicmNtZl9kYmcoUENJRSwgJiMzNDtEZXZpY2UgZG93biwgYWJvcnRpbmcgTUIgc2VuZFxuJiMzNDspOwogCQkJcmV0dXJuIC1FSU87CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpZiAoZWxhcHNlZF91cyAmZ3Q7PSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUykgewomIzQzOwkJCWJyY21mX2VycigmIzM0O1RpbWVvdXQgd2FpdGluZyBmb3IgSDJEIE1CIHNsb3QgYWZ0ZXIgJXUgdXNcbiYjMzQ7LAomIzQzOwkJCQkgIGVsYXBzZWRfdXMpOwomIzQzOwkJCXJldHVybiAtRUlPOwomIzQzOwkJfQomIzQzOwomIzQzOwkJdXNsZWVwX3JhbmdlKEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVMsIHNsZWVwX3VzKTsKJiM0MzsJCWVsYXBzZWRfdXMgJiM0Mzs9IHNsZWVwX3VzOwomIzQzOwomIzQzOwkJLyogRXhwb25lbnRpYWwgYmFja29mZiwgY2FwcGVkIGF0IEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMgKi8KJiM0MzsJCXNsZWVwX3VzID0gbWluKHNsZWVwX3VzICogMiwgKHUzMilCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTKTsKJiM0MzsKIAkJY3VyX2h0b2RfbWJfZGF0YSA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTsKIAl9CiAKQEAgLTEwMDEsMTAgJiM0MzsxMDUxLDEwIEBAIHN0YXRpYyB2b2lkIGJyY21mX3BjaWVfcmVsZWFzZV9pcnEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbykKIAlmcmVlX2lycShwZGV2LSZndDtpcnEsIGRldmluZm8pOwogCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKIAotCW1zbGVlcCg1MCk7CiYjNDM7CXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAljb3VudCA9IDA7Ci0Jd2hpbGUgKChkZXZpbmZvLSZndDtpbl9pcnEpICZhbXA7JmFtcDsgKGNvdW50ICZsdDsgMjApKSB7Ci0JCW1zbGVlcCg1MCk7CiYjNDM7CXdoaWxlICgoZGV2aW5mby0mZ3Q7aW5faXJxKSAmYW1wOyZhbXA7IChjb3VudCAmbHQ7IDEwMDApKSB7CiYjNDM7CQl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7CiAJCWNvdW50JiM0MzsmIzQzOzsKIAl9CiAJaWYgKGRldmluZm8tJmd0O2luX2lycSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jCmluZGV4IGI3MjVjNjRlNWI1YzYuLjRlNDE0NDAzZDc0NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYwpAQCAtMTY0NSwzNyAmIzQzOzE2NDUsNDMgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKQogCiAJCXJkX25ldy5zZXFfbnVtID0gcnhzZXE7CiAJCXJkX25ldy5sZW4gPSBkbGVuOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIENsYWltIHRoZSBob3N0IG9uY2UgZm9yIHRoZSBlbnRpcmUgaGVhZGVyLXBhcnNpbmcgcGhhc2UuCiYjNDM7CQkgKgomIzQzOwkJICogYnJjbWZfc2Rpb19oZHBhcnNlKCkgb3BlcmF0ZXMgb24gZGF0YSBhbHJlYWR5IGluIGhvc3QKJiM0MzsJCSAqIG1lbW9yeSwgYnV0IG1heSBjYWxsIGJyY21mX3NkaW9fcnhmYWlsKCkgb24gZXJyb3IsIHdoaWNoCiYjNDM7CQkgKiB3cml0ZXMgU0RJTyBGdW5jMSByZWdpc3RlcnMgYW5kIHRoZXJlZm9yZSByZXF1aXJlcyB0aGUKJiM0MzsJCSAqIGhvc3QgdG8gYmUgY2xhaW1lZC4KJiM0MzsJCSAqCiYjNDM7CQkgKiBza2JfcHVsbCgpIGFuZCB0aGUgbnVtIGNvdW50ZXIgYXJlIHB1cmUgaG9zdC1tZW1vcnkKJiM0MzsJCSAqIG9wZXJhdGlvbnM7IGtlZXAgdGhlbSBvdXRzaWRlIHRoZSBsb2NrIHRvIG1pbmltaXNlIHRoZQomIzQzOwkJICogaG9sZCB0aW1lLiAgQm90aCBoZHBhcnNlIGNhbGxzIChzdXBlcmZyYW1lIGhlYWRlciBhbmQKJiM0MzsJCSAqIGVhY2ggc3ViZnJhbWUgaGVhZGVyKSBhcmUgZ3JvdXBlZCB1bmRlciBhIHNpbmdsZSBjbGFpbS8KJiM0MzsJCSAqIHJlbGVhc2UsIHJlcGxhY2luZyB0aGUgb3JpZ2luYWwgTiYjNDM7MSBzZXBhcmF0ZSBwYWlycy4KJiM0MzsJCSAqLwogCQlzZGlvX2NsYWltX2hvc3QoYnVzLSZndDtzZGlvZGV2LSZndDtmdW5jMSk7CiAJCWVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtJmd0O2RhdGEsICZhbXA7cmRfbmV3LAogCQkJCQkgICAgIEJSQ01GX1NESU9fRlRfU1VQRVIpOwotCQlzZGlvX3JlbGVhc2VfaG9zdChidXMtJmd0O3NkaW9kZXYtJmd0O2Z1bmMxKTsKLQkJYnVzLSZndDtjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSAmbHQ7Jmx0OyA0OwotCi0JCS8qIFJlbW92ZSBzdXBlcmZyYW1lIGhlYWRlciwgcmVtZW1iZXIgb2Zmc2V0ICovCi0JCXNrYl9wdWxsKHBmaXJzdCwgcmRfbmV3LmRhdF9vZmZzZXQpOwotCQludW0gPSAwOwotCi0JCS8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqLwotCQlza2JfcXVldWVfd2FsaygmYW1wO2J1cy0mZ3Q7Z2xvbSwgcG5leHQpIHsKLQkJCS8qIGxlYXZlIHdoZW4gaW52YWxpZCBzdWJmcmFtZSBpcyBmb3VuZCAqLwotCQkJaWYgKGVycmNvZGUpCi0JCQkJYnJlYWs7CiAKLQkJCXJkX25ldy5sZW4gPSBwbmV4dC0mZ3Q7bGVuOwotCQkJcmRfbmV3LnNlcV9udW0gPSByeHNlcSYjNDM7JiM0Mzs7Ci0JCQlzZGlvX2NsYWltX2hvc3QoYnVzLSZndDtzZGlvZGV2LSZndDtmdW5jMSk7Ci0JCQllcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtJmd0O2RhdGEsICZhbXA7cmRfbmV3LAotCQkJCQkJICAgICBCUkNNRl9TRElPX0ZUX1NVQik7Ci0JCQlzZGlvX3JlbGVhc2VfaG9zdChidXMtJmd0O3NkaW9kZXYtJmd0O2Z1bmMxKTsKLQkJCWJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksCi0JCQkJCSAgIHBuZXh0LSZndDtkYXRhLCAzMiwgJiMzNDtzdWJmcmFtZTpcbiYjMzQ7KTsKLQotCQkJbnVtJiM0MzsmIzQzOzsKJiM0MzsJCS8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyB3aGlsZSBob3N0IGlzIGNsYWltZWQgKi8KJiM0MzsJCWlmICghZXJyY29kZSkgewomIzQzOwkJCXNrYl9xdWV1ZV93YWxrKCZhbXA7YnVzLSZndDtnbG9tLCBwbmV4dCkgewomIzQzOwkJCQlyZF9uZXcubGVuID0gcG5leHQtJmd0O2xlbjsKJiM0MzsJCQkJcmRfbmV3LnNlcV9udW0gPSByeHNlcSYjNDM7JiM0Mzs7CiYjNDM7CQkJCWVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwbmV4dC0mZ3Q7ZGF0YSwKJiM0MzsJCQkJCQkJICAgICAmYW1wO3JkX25ldywKJiM0MzsJCQkJCQkJICAgICBCUkNNRl9TRElPX0ZUX1NVQik7CiYjNDM7CQkJCWJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksCiYjNDM7CQkJCQkJICAgcG5leHQtJmd0O2RhdGEsIDMyLAomIzQzOwkJCQkJCSAgICYjMzQ7c3ViZnJhbWU6XG4mIzM0Oyk7CiYjNDM7CQkJCWlmIChlcnJjb2RlKQomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJfQogCQl9CiAKIAkJaWYgKGVycmNvZGUpIHsKLQkJCS8qIFRlcm1pbmF0ZSBmcmFtZSBvbiBlcnJvciAqLwotCQkJc2Rpb19jbGFpbV9ob3N0KGJ1cy0mZ3Q7c2Rpb2Rldi0mZ3Q7ZnVuYzEpOwomIzQzOwkJCS8qIFRlcm1pbmF0ZSBmcmFtZSBvbiBlcnJvciwgc3RpbGwgaG9sZGluZyB0aGUgaG9zdCAqLwogCQkJYnJjbWZfc2Rpb19yeGZhaWwoYnVzLCB0cnVlLCBmYWxzZSk7CiAJCQlidXMtJmd0O3NkY250LnJ4Z2xvbWZhaWwmIzQzOyYjNDM7OwogCQkJYnJjbWZfc2Rpb19mcmVlX2dsb20oYnVzKTsKQEAgLTE2ODMsNiAmIzQzOzE2ODksMTQgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKQogCQkJYnVzLSZndDtjdXJfcmVhZC5sZW4gPSAwOwogCQkJcmV0dXJuIDA7CiAJCX0KJiM0MzsJCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0mZ3Q7c2Rpb2Rldi0mZ3Q7ZnVuYzEpOwomIzQzOwomIzQzOwkJLyogSG9zdCByZWxlYXNlZDsgbm93IGRvIHRoZSBwdXJlLW1lbW9yeSBib29ra2VlcGluZyAqLwomIzQzOwkJYnVzLSZndDtjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSAmbHQ7Jmx0OyA0OwomIzQzOwomIzQzOwkJLyogUmVtb3ZlIHN1cGVyZnJhbWUgaGVhZGVyLCByZW1lbWJlciBvZmZzZXQgKi8KJiM0MzsJCXNrYl9wdWxsKHBmaXJzdCwgcmRfbmV3LmRhdF9vZmZzZXQpOwomIzQzOwkJbnVtID0gMDsKIAogCQkvKiBCYXNpYyBTRCBmcmFtaW5nIGxvb2tzIG9rIC0gcHJvY2VzcyBlYWNoIHBhY2tldCAoaGVhZGVyKSAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jCmluZGV4IGZjN2E1ZGQyZTVkODYuLjNmZDhiZGJkMzVlNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jCkBAIC01MTYsMTIgJiM0Mzs1MTYsMTEgQEAgaW50IGJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLAogCQkJcmV0dXJuIC1FTk9TUEM7CiAKIAkJLyoKLQkJICogV2UgYXJlbiYjMzk7dCByZWFsbHkgb3V0IG9mIHNwYWNlIGlmIHRoZSBuZXcgZnJhbWUgaXMgb2YKLQkJICogYSBkaWZmZXJlbnQgcHJpb3JpdHksIGJ1dCB3ZSB3YW50IHRoZSBzYW1lIGJlaGF2aW91cgotCQkgKiBzbyByZXR1cm4gLUVOT1NQQyBhbnl3YXkuCi0JCSAqCi0JCSAqIFhYWDogVGhlIG9sZCBBTVBEVSBjb2RlIGRpZCB0aGlzLCBidXQgaXMgaXQgcmVhbGx5Ci0JCSAqIG5lY2Vzc2FyeT8KJiM0MzsJCSAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW4KJiM0MzsJCSAqIEEtTVBEVSBiZWxvbmcgdG8gdGhlIHNhbWUgVElEIChUcmFmZmljIElkZW50aWZpZXIpLgomIzQzOwkJICogU2luY2UgcHJpb3JpdHkgbWFwcyB0byBUSUQsIGEgZGlmZmVyZW50IHByaW9yaXR5IG1lYW5zCiYjNDM7CQkgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLAomIzQzOwkJICogc28gd2UgcmV0dXJuIC1FTk9TUEMgaGVyZS4KIAkJICovCiAJCWZpcnN0ID0gc2tiX3BlZWsoJmFtcDtzZXNzaW9uLSZndDtza2JfbGlzdCk7CiAJCWlmIChwLSZndDtwcmlvcml0eSAhPSBmaXJzdC0mZ3Q7cHJpb3JpdHkpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjA2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBicmNtZm1hYy9icmNtc21hYyBLZXJuZWwgUGF0Y2hlcyoqCgpPa2F5LCBzbyBJIGhhdmUgYSBwYXRjaCBzZXJpZXMgYXBwbGllZCB0byB0aGUga2VybmVsIHRhcmdldGluZyB0aGUgYGJyY21mbWFjYCBhbmQgYGJyY21zbWFjYCBkcml2ZXJzIHdpdGhpbiB0aGUgQnJvYWRjb20gODAyMTEgd2lyZWxlc3Mgc3RhY2suIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgbmV3IGZ1bmN0aW9uYWwgYmVoYXZpb3IgdGhhdCBuZWNlc3NpdGF0ZXMgZnV6emluZy4gTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246CgpGaXJzdCwgZXhhbWluaW5nIHRoZSBjaGFuZ2VzIGluIGBicmNtZm1hYy9jZmc4MDIxMS5jYCwgSSBzZWUgYSBzaGlmdCBmcm9tIGBtZGVsYXlgL2Btc2xlZXBgIHRvIGB1c2xlZXBfcmFuZ2VgLCB3aGljaCBpcyBjb21tb24uIFRoZSBhZGRpdGlvbiBvZiBgYnJjbWZfcG1rc2FfdjJfb3BgIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byBQTUtTQSBvcGVyYXRpb25zIGlzIG5vdGV3b3J0aHksIGVzcGVjaWFsbHkgaWYgYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIGVuYWJsZWQuIFRoYXQgYWRkcyBhIG5ldyBjb2RlIHBhdGguIFRoaXMgYWxzbyB0b3VjaGVzIHRoZSBoZWFkZXIgaW4gYGNmZzgwMjExLmhgLgoKSW4gYGJyY21mbWFjL2NvcmUuY2AsIHRoZSBoYW5kbGluZyBvZiBgQlJDTUZfRkVBVF9NT05JVE9SX0ZNVF9IV19SWF9IRFJgIHRvIGluc2VydCBhIHJhZGlvdGFwIGhlYWRlciBpcyBhIHNpZ25pZmljYW50IGFkZGl0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBtb25pdG9yIG1vZGUuIFRoaXMgaW50cm9kdWNlcyBuZXcgZGF0YSBwcm9jZXNzaW5nIGFuZCBjb250cm9sIGZsb3csIHdoaWNoIGRlZmluaXRlbHkgd2FycmFudHMgYSBjbG9zZXIgbG9vay4KCmBicmNtZm1hYy9mbG93cmluZy5jYCBpbnRyb2R1Y2VzIGFuIGF0b21pYyBjb3VudGVyIHRvIHRyYWNrIGJsb2NrZWQgcmluZ3MsIHRoYXQgc2VlbXMgbGlrZSBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgdGhvdWdoIEkmIzM5O2xsIHNlZSBob3cgaXQgY2FuIGJlIGF0dGFja2VkLgoKVGhlIGNoYW5nZXMgaW4gYGJyY21mbWFjL21zZ2J1Zi5jYCBhcmUgaW50ZXJlc3RpbmcuIEluY3JlYXNpbmcgYE5SX1RYX1BLVElEU2AgYW5kIGFsdGVyaW5nIHRoZSBgbXNsZWVwYCBjYWxscywgYWxvbmcgd2l0aCB0aGUgbW9kaWZpY2F0aW9uIHRvIGBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhYCwgYXJlIGxpa2VseSByZWxhdGVkIHRvIHBhY2tldCB0cmFuc21pc3Npb24gYW5kIGJ1ZmZlciBtYW5hZ2VtZW50LiBUaGlzIGlzIGRlZmluaXRlbHkgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuCgpUaGUgYGJyY21mbWFjL3BjaWUuY2AgY2hhbmdlcywgcGFydGljdWxhcmx5IHRoZSBgdXNsZWVwX3JhbmdlYCBiYWNrb2ZmIGluIGBicmNtZl9wY2llX3NlbmRfbWJfZGF0YWAgYW5kIHRoZSBzbGVlcCBjaGFuZ2VzIGluIGBicmNtZl9wY2llX3JlbGVhc2VfaXJxYCwgc3VnZ2VzdHMgb3B0aW1pemF0aW9uIGFuZCBlcnJvciBoYW5kbGluZy4gVGhpcyBtYXkgYmUgb2YgaW50ZXJlc3QgZm9yIFBDSWUtc3BlY2lmaWMgZnV6emluZy4gVGhlIGNoYW5nZXMgdG8gYHNkaW8uY2AgbG9vayBsaWtlIGEgYmFzaWMgbG9ja2luZyByZW9yZGVyaW5nLCBzbyBwcm9iYWJseSBub3RoaW5nIHRvIHdvcnJ5IGFib3V0LiBUaGUgY2hhbmdlIGluIGBhbXBkdS5jYCBpcyBvbmx5IGEgY29tbWVudC4KClRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aGVzZSBjaGFuZ2VzIGZ1enphYmxlIGluIGEgcHJhY3RpY2FsIGVudmlyb25tZW50PyBCcm9hZGNvbSBkcml2ZXJzIGFyZSB0eXBpY2FsbHkgdGllZCB0byBwaHlzaWNhbCBoYXJkd2FyZSAoUENJZSwgU0RJTywgVVNCKS4gQnV0IHdhaXQsIGBicmNtZm1hY2Agc3VwcG9ydHMgVVNCLiBDYW4gd2UgZW11bGF0ZSBhIFVTQiBkZXZpY2U/IFN5emthbGxlciBoYXMgYHN5el91c2JfY29ubmVjdGAhIFRoYXTigJlzIGEgZ2FtZSBjaGFuZ2VyLiBMZXQgbWUgY2hlY2sgaWYgYGJyY21mbWFjYCBoYXMgYSBVU0IgZHJpdmVyLi4uIFllcywgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuY2AuCgpPa2F5LCB0aGUgcGF0Y2ggdG91Y2hlcyBgY2ZnODAyMTEuY2AsIGBjb3JlLmNgLCBgZmxvd3JpbmcuY2AsIGBtc2didWYuY2AsIGBwY2llLmNgLCBhbmQgYHNkaW8uY2AuIGBjZmc4MDIxMS5jYCwgYGNvcmUuY2AsIGBmbG93cmluZy5jYCwgYW5kIGBtc2didWYuY2AgYXJlIGNvcmUgcGFydHMgb2YgYGJyY21mbWFjYCBhbmQgKmNvdWxkKiBiZSByZWFjaGFibGUgdGhyb3VnaCBVU0IsIFNESU8sIG9yIFBDSWUuIEluIHBhcnRpY3VsYXIsIGBtc2didWYuY2AgaXMgdXNlZCBieSBQQ0llLiBBbmQgYGZsb3dyaW5nLmNgIGlzIHVzZWQgYnkgUENJZSBhbmQgcG9zc2libHkgb3RoZXJzLiBUaW1lIHRvIGNoZWNrIGhvdyB0aGUgYGJyY21mbWFjYCBVU0IgZHJpdmVyIGludGVyYWN0cyB3aXRoIGBmbG93cmluZ2AgYW5kIGBtc2didWZgIC0gdGhhdCBjb3VsZCBiZSB0aGUga2V5IHRvIHRyaWdnZXJpbmcgdGhlc2UgY2hhbmdlcyB0aHJvdWdoIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfZmxvd3JpbmcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6Mjg6c3RhdGljIGNvbnN0IHU4IGJyY21mX2Zsb3dyaW5nX3ByaW8yZmlmb1tdID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjktXHQwLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jPTQyPXN0YXRpYyBib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo0MzpicmNtZl9mbG93cmluZ19pc190ZGxzX21hYyhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHU4IG1hY1tFVEhfQUxFTl0pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy00NC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo0NTpcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICpzZWFyY2g7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy00Ni1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy01OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjU5OnUzMiBicmNtZl9mbG93cmluZ19sb29rdXAoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1OCBkYVtFVEhfQUxFTl0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy02MC1cdFx0XHQgIHU4IHByaW8sIHU4IGlmaWR4KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNjEte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6NjI6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfaGFzaCAqaGFzaDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTYzLVx0dTE2IGhhc2hfaWR4O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTY5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6NzA6XHRmaWZvID0gYnJjbWZfZmxvd3JpbmdfcHJpbzJmaWZvW3ByaW9dO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNzEtXHRzdGEgPSAoZmxvdy1cdTAwM2VhZGRyX21vZGVbaWZpZHhdID09IEFERFJfSU5ESVJFQ1QpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTc3LVx0aWYgKChzdGEpIFx1MDAyNlx1MDAyNiAoZmxvdy1cdTAwM2V0ZGxzX2FjdGl2ZSkgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo3ODpcdCAgICAoYnJjbWZfZmxvd3JpbmdfaXNfdGRsc19tYWMoZmxvdywgZGEpKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNzktXHRcdHN0YSA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTEwMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjEwMzp1MzIgYnJjbWZfZmxvd3JpbmdfY3JlYXRlKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTggZGFbRVRIX0FMRU5dLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTA0LVx0XHRcdCAgdTggcHJpbywgdTggaWZpZHgpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0xMDUte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MTA2Olx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgKnJpbmc7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoxMDc6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfaGFzaCAqaGFzaDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTEwOC1cdHUxNiBoYXNoX2lkeDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0xMTQtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoxMTU6XHRmaWZvID0gYnJjbWZfZmxvd3JpbmdfcHJpbzJmaWZvW3ByaW9dO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTE2LVx0c3RhID0gKGZsb3ctXHUwMDNlYWRkcl9tb2RlW2lmaWR4XSA9PSBBRERSX0lORElSRUNUKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0xMjItXHRpZiAoKHN0YSkgXHUwMDI2XHUwMDI2IChmbG93LVx1MDAzZXRkbHNfYWN0aXZlKSBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjEyMzpcdCAgICAoYnJjbWZfZmxvd3JpbmdfaXNfdGRsc19tYWMoZmxvdywgZGEpKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTI0LVx0XHRzdGEgPSBmYWxzZTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0xNjctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoxNjg6dTggYnJjbWZfZmxvd3JpbmdfdGlkKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTE2OS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoxNzA6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfcmluZyAqcmluZztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTE3MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0xNzctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoxNzg6c3RhdGljIHZvaWQgYnJjbWZfZmxvd3JpbmdfYmxvY2soc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTc5LVx0XHRcdFx0IGJvb2wgYmxvY2tlZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTE4MC17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoxODE6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfcmluZyAqcmluZztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTE4Mi1cdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0xOTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoxOTY6XHRpZmlkeCA9IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChmbG93LCBmbG93aWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTk3LVx0cmluZy1cdTAwM2VibG9ja2VkID0gYmxvY2tlZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yMzItXHQgKiBSZWFkaW5nIHRoZSBhdG9taWMgaXMgc2FmZSBoZXJlOiB3ZSBob2xkIGJsb2NrX2xvY2ssIHNvIG5vXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoyMzM6XHQgKiBjb25jdXJyZW50IGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FsbCBjYW4gcmFjZSB0aGUgdXBkYXRlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yMzQtXHQgKiB3ZSBqdXN0IG1hZGUgYWJvdmUuXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjU1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MjU2OnZvaWQgYnJjbWZfZmxvd3JpbmdfZGVsZXRlKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTI1Ny17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yNTgtXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkZXZfZ2V0X2RydmRhdGEoZmxvdy1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MjU5Olx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgKnJpbmc7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yNjAtXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yNjgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoyNjk6XHRpZmlkeCA9IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChmbG93LCBmbG93aWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjcwLVx0aWZwID0gYnJjbWZfZ2V0X2lmcChidXNfaWYtXHUwMDNlZHJ2ciwgaWZpZHgpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjcxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MjcyOlx0YnJjbWZfZmxvd3JpbmdfYmxvY2soZmxvdywgZmxvd2lkLCBmYWxzZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yNzMtXHRoYXNoX2lkeCA9IHJpbmctXHUwMDNlaGFzaF9pZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yODctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoyODg6dTMyIGJyY21mX2Zsb3dyaW5nX2VucXVldWUoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjg5LVx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yOTAte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MjkxOlx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgKnJpbmc7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yOTItXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjk4LVx0ICAgIChza2JfcXVldWVfbGVuKFx1MDAyNnJpbmctXHUwMDNlc2tibGlzdCkgXHUwMDNlIEJSQ01GX0ZMT1dSSU5HX0hJR0gpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoyOTk6XHRcdGJyY21mX2Zsb3dyaW5nX2Jsb2NrKGZsb3csIGZsb3dpZCwgdHJ1ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0zMDAtXHRcdGJyY21mX2RiZyhNU0dCVUYsIFwmIzM0O0Zsb3djb250cm9sOiBCTE9DSyBmb3IgcmluZyAlZFxcblwmIzM0OywgZmxvd2lkKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0zMDctXHRcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnJpbmctXHUwMDNlc2tibGlzdCkgXHUwMDNjIEJSQ01GX0ZMT1dSSU5HX0xPVylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjMwODpcdFx0XHRicmNtZl9mbG93cmluZ19ibG9jayhmbG93LCBmbG93aWQsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTMwOS1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0zMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzozMTQ6c3RydWN0IHNrX2J1ZmYgKmJyY21mX2Zsb3dyaW5nX2RlcXVldWUoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzE1LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjMxNjpcdHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nICpyaW5nO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzE3LVx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0zMjYtXHQgICAgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2cmluZy1cdTAwM2Vza2JsaXN0KSBcdTAwM2MgQlJDTUZfRkxPV1JJTkdfTE9XKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MzI3Olx0XHRicmNtZl9mbG93cmluZ19ibG9jayhmbG93LCBmbG93aWQsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTMyOC1cdFx0YnJjbWZfZGJnKE1TR0JVRiwgXCYjMzQ7Rmxvd2NvbnRyb2w6IE9QRU4gZm9yIHJpbmcgJWRcXG5cJiMzNDssIGZsb3dpZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzM0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MzM1OnZvaWQgYnJjbWZfZmxvd3JpbmdfcmVpbnNlcnQoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzM2LVx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTMzNy17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzozMzg6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfcmluZyAqcmluZztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTMzOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0zNDUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzozNDY6dTMyIGJyY21mX2Zsb3dyaW5nX3FsZW4oc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzQ3LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjM0ODpcdHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nICpyaW5nO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzQ5LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTM2MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjM2MTp2b2lkIGJyY21mX2Zsb3dyaW5nX29wZW4oc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzYyLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjM2MzpcdHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nICpyaW5nO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzY0LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTM3NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjM3NTp1OCBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzc2LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjM3NzpcdHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nICpyaW5nO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzc4LVx0dTE2IGhhc2hfaWR4O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTM4Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjM4NzpzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmJyY21mX2Zsb3dyaW5nX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUxNiBucm9mcmluZ3MpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0zODgte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6Mzg5Olx0c3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzkwLVx0dTMyIGk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNDA4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6NDA5OnZvaWQgYnJjbWZfZmxvd3JpbmdfZGV0YWNoKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTQxMC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNDEyLVx0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGJ1c19pZi1cdTAwM2VkcnZyO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6NDEzOlx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKnNlYXJjaDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjQxNDpcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICpyZW1vdmU7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy00MTUtXHR1MTYgZmxvd2lkO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTQzMS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjQzMjp2b2lkIGJyY21mX2Zsb3dyaW5nX2NvbmZpZ3VyZV9hZGRyX21vZGUoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCBpbnQgaWZpZHgsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy00MzMtXHRcdFx0XHRcdGVudW0gcHJvdG9fYWRkcl9tb2RlIGFkZHJfbW9kZSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy00NTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo0NTQ6dm9pZCBicmNtZl9mbG93cmluZ19kZWxldGVfcGVlcihzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIGludCBpZmlkeCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTQ1NS1cdFx0XHRcdHU4IHBlZXJbRVRIX0FMRU5dKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTQ1OC1cdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBidXNfaWYtXHUwMDNlZHJ2cjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjQ1OTpcdHN0cnVjdCBicmNtZl9mbG93cmluZ19oYXNoICpoYXNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6NDYwOlx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKnByZXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo0NjE6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfdGRsc19lbnRyeSAqc2VhcmNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNDYyLVx0dTMyIGk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNTAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6NTAxOnZvaWQgYnJjbWZfZmxvd3JpbmdfYWRkX3RkbHNfcGVlcihzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIGludCBpZmlkeCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTUwMi1cdFx0XHRcdCAgdTggcGVlcltFVEhfQUxFTl0pXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy01MDMte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6NTA0Olx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKnRkbHNfZW50cnk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo1MDU6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfdGRsc19lbnRyeSAqc2VhcmNoO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNTA2LVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTE0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6MTU6c3RydWN0IGJyY21mX2Zsb3dyaW5nX2hhc2gge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtMTYtXHR1OCBtYWNbRVRIX0FMRU5dO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oPTIyPWVudW0gcmluZ19zdGF0dXMge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTI3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6Mjg6c3RydWN0IGJyY21mX2Zsb3dyaW5nX3Jpbmcge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtMjktXHR1MTYgaGFzaF9pZDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC00NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjQ1OnN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTQ2LVx0dTggbWFjW0VUSF9BTEVOXTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjQ3Olx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKm5leHQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC00OC19O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo1MDpzdHJ1Y3QgYnJjbWZfZmxvd3Jpbmcge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNTEtXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo1MjpcdHN0cnVjdCBicmNtZl9mbG93cmluZ19oYXNoIGhhc2hbQlJDTUZfRkxPV1JJTkdfSEFTSFNJWkVdO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNTMtXHRzcGlubG9ja190IGJsb2NrX2xvY2s7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNTUtXHQvKiBQZXItaW50ZXJmYWNlIGNvdW50IG9mIGN1cnJlbnRseSBibG9ja2VkIG9wZW4gcmluZ3MuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo1NjpcdCAqIE1haW50YWluZWQgYXRvbWljYWxseSBzbyBicmNtZl9mbG93cmluZ19ibG9jaygpIGNhbiBjaGVja1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNTctXHQgKiB3aGV0aGVyIGFueSBzaWJsaW5nIHJpbmcgaXMgYWxyZWFkeSBibG9ja2VkIGluIE8oMSkgd2l0aG91dFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTYyLVx0Ym9vbCB0ZGxzX2FjdGl2ZTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjYzOlx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKnRkbHNfZW50cnk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo2NDpcdHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nICpyaW5nc1tdIF9fY291bnRlZF9ieShucm9mcmluZ3MpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNjUtfTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC02Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjY4OnUzMiBicmNtZl9mbG93cmluZ19sb29rdXAoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1OCBkYVtFVEhfQUxFTl0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC02OS1cdFx0XHQgIHU4IHByaW8sIHU4IGlmaWR4KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjcwOnUzMiBicmNtZl9mbG93cmluZ19jcmVhdGUoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1OCBkYVtFVEhfQUxFTl0sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC03MS1cdFx0XHQgIHU4IHByaW8sIHU4IGlmaWR4KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjcyOnZvaWQgYnJjbWZfZmxvd3JpbmdfZGVsZXRlKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo3Mzp2b2lkIGJyY21mX2Zsb3dyaW5nX29wZW4oc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjc0OnU4IGJyY21mX2Zsb3dyaW5nX3RpZChzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6NzU6dTMyIGJyY21mX2Zsb3dyaW5nX2VucXVldWUoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNzYtXHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo3NzpzdHJ1Y3Qgc2tfYnVmZiAqYnJjbWZfZmxvd3JpbmdfZGVxdWV1ZShzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6Nzg6dm9pZCBicmNtZl9mbG93cmluZ19yZWluc2VydChzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC03OS1cdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6ODA6dTMyIGJyY21mX2Zsb3dyaW5nX3FsZW4oc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjgxOnU4IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6ODI6c3RydWN0IGJyY21mX2Zsb3dyaW5nICpicmNtZl9mbG93cmluZ19hdHRhY2goc3RydWN0IGRldmljZSAqZGV2LCB1MTYgbnJvZnJpbmdzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjgzOnZvaWQgYnJjbWZfZmxvd3JpbmdfZGV0YWNoKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo4NDp2b2lkIGJyY21mX2Zsb3dyaW5nX2NvbmZpZ3VyZV9hZGRyX21vZGUoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCBpbnQgaWZpZHgsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC04NS1cdFx0XHRcdFx0ZW51bSBwcm90b19hZGRyX21vZGUgYWRkcl9tb2RlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjg2OnZvaWQgYnJjbWZfZmxvd3JpbmdfZGVsZXRlX3BlZXIoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCBpbnQgaWZpZHgsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC04Ny1cdFx0XHRcdHU4IHBlZXJbRVRIX0FMRU5dKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjg4OnZvaWQgYnJjbWZfZmxvd3JpbmdfYWRkX3RkbHNfcGVlcihzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIGludCBpZmlkeCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTg5LVx0XHRcdFx0ICB1OCBwZWVyW0VUSF9BTEVOXSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTI2Mj1zdHJ1Y3QgYnJjbWZfbXNnYnVmIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMjk4LVx0c3RydWN0IGJyY21mX21zZ2J1Zl9wa3RpZHMgKnJ4X3BrdGlkcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoyOTk6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3c7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMzAwLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz01ODE9YnJjbWZfbXNnYnVmX3JlbW92ZV9mbG93cmluZyhzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHUxNiBmbG93aWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTU5Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo1OTM6XHRicmNtZl9mbG93cmluZ19kZWxldGUobXNnYnVmLVx1MDAzZWZsb3csIGZsb3dpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNTk0LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9NjE2PWJyY21mX21zZ2J1Zl9mbG93cmluZ19jcmVhdGVfd29ya2VyKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1Zixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNjM1LVx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtkbWFfYWxsb2NfY29oZXJlbnQgZmFpbGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo2MzY6XHRcdGJyY21mX2Zsb3dyaW5nX2RlbGV0ZShtc2didWYtXHUwMDNlZmxvdywgZmxvd2lkKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy02MzctXHRcdHJldHVybiBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lEO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy02NTctXHRjcmVhdGUtXHUwMDNlbXNnLnJlcXVlc3RfaWQgPSAwO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjY1ODpcdGNyZWF0ZS1cdTAwM2V0aWQgPSBicmNtZl9mbG93cmluZ190aWQobXNnYnVmLVx1MDAzZWZsb3csIGZsb3dpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNjU5LVx0Y3JlYXRlLVx1MDAzZWZsb3dfcmluZ19pZCA9IGNwdV90b19sZTE2KGZsb3dpZCAmIzQzO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz02OTg9c3RhdGljIHUzMiBicmNtZl9tc2didWZfZmxvd3JpbmdfY3JlYXRlKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZiwgaW50IGlmaWR4LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy03MDktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6NzEwOlx0Zmxvd2lkID0gYnJjbWZfZmxvd3JpbmdfY3JlYXRlKG1zZ2J1Zi1cdTAwM2VmbG93LCBlaC1cdTAwM2VoX2Rlc3QsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNzExLVx0XHRcdFx0ICAgICAgIHNrYi1cdTAwM2Vwcmlvcml0eSwgaWZpZHgpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz03MzE9c3RhdGljIHZvaWQgYnJjbWZfbXNnYnVmX3R4ZmxvdyhzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHUxNiBmbG93aWQpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNzMyLXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo3MzM6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3cgPSBtc2didWYtXHUwMDNlZmxvdztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy03MzQtXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gbXNnYnVmLVx1MDAzZWRydnI7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTc1MC1cdGNvdW50ID0gQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDIgLSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo3NTE6XHR3aGlsZSAoYnJjbWZfZmxvd3JpbmdfcWxlbihmbG93LCBmbG93aWQpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6NzUyOlx0XHRza2IgPSBicmNtZl9mbG93cmluZ19kZXF1ZXVlKGZsb3csIGZsb3dpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNzUzLVx0XHRpZiAoc2tiID09IE5VTEwpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy03NTQtXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7Tm8gU0tCLCBidXQgcWxlbiAlZFxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo3NTU6XHRcdFx0XHQgYnJjbWZfZmxvd3JpbmdfcWxlbihmbG93LCBmbG93aWQpKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy03NTYtXHRcdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTc2MS1cdFx0XHRcdFx0ICAgICBcdTAwMjZwaHlzYWRkciwgXHUwMDI2cGt0aWQpKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6NzYyOlx0XHRcdGJyY21mX2Zsb3dyaW5nX3JlaW5zZXJ0KGZsb3csIGZsb3dpZCwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy03NjMtXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7Tm8gUEtUSUQgYXZhaWxhYmxlICEhXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNzY5LVx0XHRcdFx0XHQgICAgICAgbXNnYnVmLVx1MDAzZXR4X3BrdGlkcywgcGt0aWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjc3MDpcdFx0XHRicmNtZl9mbG93cmluZ19yZWluc2VydChmbG93LCBmbG93aWQsIHNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNzcxLVx0XHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy03NzgtXHRcdHR4X21zZ2hkci1cdTAwM2Vtc2cucmVxdWVzdF9pZCA9IGNwdV90b19sZTMyKHBrdGlkICYjNDM7IDEpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjc3OTpcdFx0dHhfbXNnaGRyLVx1MDAzZW1zZy5pZmlkeCA9IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChmbG93LCBmbG93aWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTc4MC1cdFx0dHhfbXNnaGRyLVx1MDAzZWZsYWdzID0gQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19GUkFNRV84MDJfMztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9ODUzPXN0YXRpYyBpbnQgYnJjbWZfbXNnYnVmX3R4X3F1ZXVlX2RhdGEoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgaW50IGlmaWR4LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy04NTYtXHRzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYgPSAoc3RydWN0IGJyY21mX21zZ2J1ZiAqKWRydnItXHUwMDNlcHJvdG8tXHUwMDNlcGQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6ODU3Olx0c3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93ID0gbXNnYnVmLVx1MDAzZWZsb3c7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtODU4LVx0c3RydWN0IGV0aGhkciAqZWggPSAoc3RydWN0IGV0aGhkciAqKShza2ItXHUwMDNlZGF0YSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTg2Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo4NjM6XHRmbG93aWQgPSBicmNtZl9mbG93cmluZ19sb29rdXAoZmxvdywgZWgtXHUwMDNlaF9kZXN0LCBza2ItXHUwMDNlcHJpb3JpdHksIGlmaWR4KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy04NjQtXHRpZiAoZmxvd2lkID09IEJSQ01GX0ZMT1dSSU5HX0lOVkFMSURfSUQpIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtODY4LVx0XHR9IGVsc2Uge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjg2OTpcdFx0XHRicmNtZl9mbG93cmluZ19lbnF1ZXVlKGZsb3csIGZsb3dpZCwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy04NzAtXHRcdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTg3Mi1cdH1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo4NzM6XHRxdWV1ZV9jb3VudCA9IGJyY21mX2Zsb3dyaW5nX2VucXVldWUoZmxvdywgZmxvd2lkLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTg3NC1cdGZvcmNlID0gKChxdWV1ZV9jb3VudCAlIEJSQ01GX01TR0JVRl9UUklDS0xFX1RYV09SS0VSX1RIUlMpID09IDApO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz04ODI9YnJjbWZfbXNnYnVmX2NvbmZpZ3VyZV9hZGRyX21vZGUoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgaW50IGlmaWR4LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy04ODYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6ODg3Olx0YnJjbWZfZmxvd3JpbmdfY29uZmlndXJlX2FkZHJfbW9kZShtc2didWYtXHUwMDNlZmxvdywgaWZpZHgsIGFkZHJfbW9kZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtODg4LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9ODkyPWJyY21mX21zZ2J1Zl9kZWxldGVfcGVlcihzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBpbnQgaWZpZHgsIHU4IHBlZXJbRVRIX0FMRU5dKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy04OTUtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6ODk2Olx0YnJjbWZfZmxvd3JpbmdfZGVsZXRlX3BlZXIobXNnYnVmLVx1MDAzZWZsb3csIGlmaWR4LCBwZWVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy04OTctfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz05MDE9YnJjbWZfbXNnYnVmX2FkZF90ZGxzX3BlZXIoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgaW50IGlmaWR4LCB1OCBwZWVyW0VUSF9BTEVOXSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtOTA0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjkwNTpcdGJyY21mX2Zsb3dyaW5nX2FkZF90ZGxzX3BlZXIobXNnYnVmLVx1MDAzZWZsb3csIGlmaWR4LCBwZWVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy05MDYtfVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xMjg2PWJyY21mX21zZ2J1Zl9wcm9jZXNzX2Zsb3dfcmluZ19jcmVhdGVfcmVzcG9uc2Uoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMzA3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEzMDg6XHRicmNtZl9mbG93cmluZ19vcGVuKG1zZ2J1Zi1cdTAwM2VmbG93LCBmbG93aWQpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEzMDktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTEzMTU9YnJjbWZfbXNnYnVmX3Byb2Nlc3NfZmxvd19yaW5nX2RlbGV0ZV9yZXNwb25zZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEzMzAtXHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O0Zsb3dyaW5nIGRlbGV0aW9uIGZhaWxlZCwgY29kZSAlZFxcblwmIzM0Oywgc3RhdHVzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMzMxOlx0XHRicmNtZl9mbG93cmluZ19kZWxldGUobXNnYnVmLVx1MDAzZWZsb3csIGZsb3dpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTMzMi1cdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xNDIyPWludCBicmNtZl9wcm90b19tc2didWZfcnhfdHJpZ2dlcihzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE0NDItXHRcdGNvbW1vbnJpbmcgPSBtc2didWYtXHUwMDNlZmxvd3JpbmdzW2Zsb3dpZF07XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTQ0MzpcdFx0cWxlbiA9IGJyY21mX2Zsb3dyaW5nX3FsZW4obXNnYnVmLVx1MDAzZWZsb3csIGZsb3dpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTQ0NC1cdFx0aWYgKChxbGVuIFx1MDAzZSBCUkNNRl9NU0dCVUZfVFJJQ0tMRV9UWFdPUktFUl9USFJTKSB8fFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xNDU0PXZvaWQgYnJjbWZfbXNnYnVmX2RlbGV0ZV9mbG93cmluZyhzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCB1MTYgZmxvd2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNDU5LVx0c3RydWN0IGJyY21mX2NvbW1vbnJpbmcgKmNvbW1vbnJpbmdfZGVsID0gbXNnYnVmLVx1MDAzZWZsb3dyaW5nc1tmbG93aWRdO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE0NjA6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3cgPSBtc2didWYtXHUwMDNlZmxvdztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNDYxLVx0dm9pZCAqcmV0X3B0cjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTQ5OS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNTAwOlx0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQobXNnYnVmLVx1MDAzZWZsb3csIGZsb3dpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTUwMS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTUyMj1zdGF0aWMgaW50IGJyY21mX21zZ2J1Zl9zdGF0c19yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTI4LVx0dTE2IGk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTUyOTpcdHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nICpyaW5nO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE1MzA6XHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfaGFzaCAqaGFzaDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTMxLVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xNTgwPWludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2NjMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTY2NDpcdG1zZ2J1Zi1cdTAwM2VmbG93ID0gYnJjbWZfZmxvd3JpbmdfYXR0YWNoKGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjY1LVx0XHRcdFx0XHQgICAgIGlmX21zZ2J1Zi1cdTAwM2VtYXhfZmxvd3JpbmdzKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTcxMD12b2lkIGJyY21mX3Byb3RvX21zZ2J1Zl9kZXRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTczMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxNzMxOlx0XHRicmNtZl9mbG93cmluZ19kZXRhY2gobXNnYnVmLVx1MDAzZWZsb3cpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE3MzItXHRcdGRtYV9mcmVlX2NvaGVyZW50KGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZWRldixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE5OQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgYG1zZ2J1Zi5jYCBVc2FnZSoqCgpPa2F5LCBzbyBgbXNnYnVmLmNgIGlzIGRlZmluaXRlbHkgdGllZCB0byB0aGUgUENJZSBkcml2ZXIsIHRoYXQmIzM5O3MgbXkgc3RhcnRpbmcgcG9pbnQuIE5vdywgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgY29udGV4dCwgSSBuZWVkIHRvIHNlZSAqaG93KiBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IGRyaXZlciBmYW1pbHkuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgYnJjbWZtYWNgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBkcmlsbCBkb3duIGludG8gYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNgIOKAkyB0aGF0JiMzOTtzIGEgbmF0dXJhbCBjYW5kaWRhdGUgZ2l2ZW4gdGhlIGluaXRpYWwgaGludC4gSSYjMzk7bGwgYWxzbyBnbGFuY2UgYXQgYHVzYi5jYCB3aGlsZSBJJiMzOTttIGF0IGl0LCBqdXN0IHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgY3Jvc3MtcG9sbGluYXRpb24gb3Igb3ZlcmxhcCBpbiBob3cgdGhlc2UgQnJvYWRjb20gd2lyZWxlc3MgZHJpdmVycyBhcmUgc3RydWN0dXJlZC4gSXQmIzM5O3Mgbm90IHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIGEgY29ubmVjdGlvbiwgYnV0IGl0JiMzOTtzIHdvcnRoIGEgcXVpY2sgbG9vayB0byBydWxlIGl0IG91dCDigJMgSSBzaG91bGQgaGF2ZSBhIGNsZWFyIGFuc3dlciBvbiB3aGV0aGVyIGB1c2IuY2AgaW50ZXJhY3RzIHdpdGggYG1zZ2J1Zi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21zZ2J1ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1NDYKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBXb3J0aCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHRvdWNoZXMgYG1zZ2J1Zi5jYCBhbmQgYGZsb3dyaW5nLmNgLiBUaG9zZSBmaWxlcyBzY3JlYW0gJiMzNDtQQ0llJiMzNDsgdG8gbWUsIHJpZ2h0PyBCdXQgdGhlbiBJIHJlbWVtYmVyIGBicmNtZm1hY2AuIE5vdywgdGhlIHByb21wdCBzcGVjaWZpY2FsbHkgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgbGlrZSBgbWx4c3dgLCBgcWVkYCwgYGFtZGdwdWAsIGV0Yy4g4oCTIGRyaXZlcnMgdGhhdCAqbmVlZCogYWN0dWFsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBJcyBgYnJjbWZtYWNgIG9uZSBvZiB0aG9zZT8KCkhhbmcgb24gYSBzZWNvbmTigKYgaXNuJiMzOTt0IGBicmNtZm1hY2AgYSBXaS1GaSBkcml2ZXI/IFllYWgsIGl0IGlzLiBBbmQgU3l6a2FsbGVyIGhhcyBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaS4gQnV0IGBicmNtZm1hY2AgaXMgYSBGdWxsTUFDIGRyaXZlciwgd2hpY2ggY29tcGxpY2F0ZXMgdGhpbmdzIGEgYml0LiBEb2VzIFN5emthbGxlciBmdXp6ICp0aGlzKiBzcGVjaWZpYyBkcml2ZXI/IEkmIzM5O20gbm90IGVudGlyZWx5IHN1cmUuCgpUaGVuIEkgcmVtZW1iZXIgU3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6aW5nIGNhcGFiaWxpdGllcywgd2hpY2ggKmNvdWxkKiBwb3RlbnRpYWxseSBjb3ZlciB0aGUgVVNCIHNpZGUgb2YgYGJyY21mbWFjYC4gVGhhdCBzYWlkLCB0aGUgZmFjdCB0aGF0IHRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYGZsb3dyaW5nLmNgIGFuZCBgbXNnYnVmLmNgIOKAkyB3aGljaCBhcmUgcHJldHR5IG11Y2ggUENJZSBzcGVjaWZpYyDigJMgdGhyb3dzIGEgd3JlbmNoIGluIHRoZSB3b3Jrcy4KCldhaXTigKYgZG9lcyBgc2Rpby5jYCB1dGlsaXplIGBtc2didWYuY2A/IFRoYXQgd291bGQgY2hhbmdlIHRoaW5ncyBpZiB0aGlzIGlzIHVzZWQgYnkgU0RJTyBhcyB3ZWxsLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGFjdHVhbGx5IGNoZWNrIHRoZSBjcm9zcy1yZWZlcmVuY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXNnYnVmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkxOTUKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgRHJpdmVyIEZ1bmN0aW9ucyB2aWEgVVNCKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHRvIHRoZSBkcml2ZXIgbGFuZHNjYXBlLiBJIHNlZSBjaGFuZ2VzIGluIGBtc2didWYuY2AgYW5kIGBmbG93cmluZy5jYCwgd2hpY2ggSSBrbm93IGFyZSBwcmV0dHkgbXVjaCBQQ0llLXNwZWNpZmljLiBCdXQgdGhlbiB0aGVyZSYjMzk7cyBgY2ZnODAyMTEuY2AsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFRoYXQgb25lJiMzOTtzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgaW50ZXJmYWNlcyDigJMgVVNCLCBTRElPLCBhbmQgUENJZSwgbWFraW5nIGl0IGEgcG90ZW50aWFsIHRhcmdldC4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGJyY21mX3Bta3NhX3YyX29wYCBpbiBgY2ZnODAyMTEuY2AsIHdoaWNoIGlzIGNvbmNlcm5pbmcgYXMgaXQgaXMgYSBjZW50cmFsIGZ1bmN0aW9uLiBJdCBhbHNvIHRvdWNoZXMgYGJyY21mX25ldGlmX21vbl9yeGAgaW4gYGNvcmUuY2AgYW5kIGBicmNtZl9zZGlvX3J4Z2xvbWAgaW4gYHNkaW8uY2AuCgpOb3csIHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogQ2FuIHN5emthbGxlciBldmVuIHRvdWNoIHRoZXNlIFNESU8gZHJpdmVycyBlZmZlY3RpdmVseT8gSSBrbm93IGl0IGRvZXNuJiMzOTt0IGhhdmUgYSBkZWRpY2F0ZWQgZ2VuZXJpYyBTRElPIGZ1enplci4gVGhhdCBzYWlkLCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgaWYgdGhlcmUmIzM5O3MgYSBwb3NzaWJsZSBwYXRoLiBIYW5nIG9uLCB0aGUgcHJvbXB0IHNheXMgdGhlIGNvZGUgcGF0aHMgc2hvdWxkIGJlIGFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCYjMzk7cyBhIGdvb2QgZmlsdGVyLiBJdCBleHBsaWNpdGx5IG1lbnRpb25zIHRoZSBkaWZmaWN1bHR5IGluIHJlYWNoaW5nIGNvZGUgcGF0aHMgdGhhdCByZWx5IG9uIHZlcnkgc3BlY2lmaWMsIGVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgVVNCIGdhZGdldCBvciBtYWM4MDIxMV9od3NpbS4KClNvLCB0aGUgbmV4dCBvYnZpb3VzIHN0ZXAgaXMgdG8gZmlndXJlIG91dCBpZiBgYnJjbWZtYWNgIGlzIGV2ZW4gcmVhY2hhYmxlIHZpYSBVU0IuIEx1Y2tpbHksIEkga25vdyB0aGVyZSYjMzk7cyBhIFVTQiBkcml2ZXIgZm9yIGl0LCBzbyB0aGVyZSYjMzk7cyBhIGdvb2QgY2hhbmNlLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gVGhlIHJlYWwgdGVzdCBpcyB3aGV0aGVyIHRoZSBmdW5jdGlvbnMgYmVpbmcgbW9kaWZpZWQsIGBicmNtZl9wbWtzYV92Ml9vcGAgYW5kIGBicmNtZl9uZXRpZl9tb25fcnhgLCBhcmUgaW5kZWVkIHJlYWNoYWJsZSB2aWEgVVNCLgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBJIHJlY2FsbCB0aGF0IGBicmNtZl9uZXRpZl9tb25fcnhgIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9yeF9mcmFtZWAgaW4gYGNvcmUuY2AuIFRoZSBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgYGJyY21mX3J4X2ZyYW1lYCBpcyBjYWxsZWQgYnkgdGhlIFVTQiBkcml2ZXIuIElmIHNvLCB0aGF0JiMzOTtzIG15IGVudHJ5IHBvaW50IGZvciBmdXp6aW5nIHRoZXNlIGNydWNpYWwgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9yeF9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTI3OT1zdGF0aWMgaW5saW5lIHZvaWQgYnJjbWZfYnVzX3JlbW92ZShzdHJ1Y3QgYnJjbWZfYnVzICpidXMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTI5My0vKiBSZWNlaXZlIGZyYW1lIGZvciBkZWxpdmVyeSB0byBPUy4gIENhbGxlZSBkaXNwb3NlcyBvZiByeHAuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6Mjk0OnZvaWQgYnJjbWZfcnhfZnJhbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqcnhwLCBib29sIGhhbmRsZV9ldmVudCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0yOTUtXHRcdCAgICBib29sIGluaXJxKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTQ5Nz1zdGF0aWMgaW50IGJyY21mX3J4X2hkcnB1bGwoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTUxNS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6NTE2OnZvaWQgYnJjbWZfcnhfZnJhbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGhhbmRsZV9ldmVudCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNTE3LVx0XHQgICAgYm9vbCBpbmlycSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jPTE1MTQ9c3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtMTczMS1cdFx0XHRlbHNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jOjE3MzI6XHRcdFx0XHRicmNtZl9yeF9mcmFtZShidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VkZXYsIHBmaXJzdCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtMTczMy1cdFx0XHRcdFx0ICAgICAgIGZhbHNlLCBmYWxzZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYz0xODcwPXN0YXRpYyB1aW50IGJyY21mX3NkaW9fcmVhZGZyYW1lcyhzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzLCB1aW50IG1heGZyYW1lcylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTIwNjUtXHRcdGVsc2VcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6MjA2NjpcdFx0XHRicmNtZl9yeF9mcmFtZShidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VkZXYsIHBrdCxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtMjA2Ny1cdFx0XHRcdCAgICAgICBmYWxzZSwgZmFsc2UpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz01MDc9c3RhdGljIHZvaWQgYnJjbWZfdXNiX3J4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNTI3LVx0XHRza2JfcHV0KHNrYiwgdXJiLVx1MDAzZWFjdHVhbF9sZW5ndGgpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjUyODpcdFx0YnJjbWZfcnhfZnJhbWUoZGV2aW5mby1cdTAwM2VkZXYsIHNrYiwgdHJ1ZSwgdHJ1ZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNTI5LVx0XHRicmNtZl91c2JfcnhfcmVmaWxsKGRldmluZm8sIHJlcSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMDE0CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgQlJDTUYgUnggUGF0aCoqCgpSaWdodCwgc28gSSYjMzk7bSB0cmFjaW5nIHRoZSBkYXRhIGZsb3cgaW4gdGhpcyBCUkNNRiBkcml2ZXIuIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZywgY29uZmlybWVkIGJ5IG15IGNvZGUgcmVhZGluZywgaXMgdGhhdCBgYnJjbWZfcnhfZnJhbWVgIGlzIGluZGVlZCB0aGUgZW50cnkgcG9pbnQgdGhhdCYjMzk7cyBjYWxsZWQgd2hlbiBkYXRhIGlzIHJlY2VpdmVkIG92ZXIgVVNCLCBhcyBgdXNiLmNgIGNsZWFybHkgaW5kaWNhdGVzLiBJbnRlcmVzdGluZy4gTm93LCBpZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGluIG1vbml0b3IgbW9kZSwgYGJyY21mX25ldGlmX21vbl9yeGAgc2VlbXMgdG8gZ2V0IGludm9rZWQgZnJvbSB3aXRoaW4gYGJyY21mX3J4X2ZyYW1lYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gSSByZW1lbWJlciB0aGF0IGludGVyYWN0aW9uLiBCdXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRoZXNlIGFzc3VtcHRpb25zLi4uSnVzdCB0byBiZSB0aG9yb3VnaCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBicmNtZl9uZXRpZl9tb25fcnhgIGlzICphY3R1YWxseSogY2FsbGVkIGZyb20gYGJyY21mX3J4X2ZyYW1lYC4gVGltZSB0byBqdW1wIGludG8gYGNvcmUuY2AgYW5kIGNvbmZpcm0gdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24mIzM5O3Mgb3JpZ2luLiBTaG91bGRuJiMzOTt0IHRha2UgbG9uZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfbmV0aWZfbW9uX3J4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTQzND1zdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00MzgtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjQzOTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNDQwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE1NjQKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgYXMgaWYgdGhlc2Ugd2VyZSBteSBpbnRlcm5hbCB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyB0aGUgYGJyY21mX25ldGlmX21vbl9yeGAgQ2FsbGVycyoqCgpBbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaGVyZSBpcyB0byBwaW5wb2ludCBleGFjdGx5ICp3aGVyZSogYGJyY21mX25ldGlmX21vbl9yeGAgaXMgYmVpbmcgaW52b2tlZC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBncmFwaCBpcyBjcnVjaWFsIGZvciBjb21wcmVoZW5kaW5nIGl0cyByb2xlIGluIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ug4oCTIGlkZW50aWZ5IGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IG9wZXJhdGVzLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgZXhwb3NlIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFuZCBhbnkgc2V0dXAgdGhhdCBpcyBoYXBwZW5pbmcgYmVmb3JlIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFdpdGggdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gYW5hbHl6ZSBwb3RlbnRpYWwgaXNzdWVzLCB1bmRlcnN0YW5kIHRoZSBmbG93LCBhbmQgcXVpY2tseSBhc3Nlc3MgYW55IGFyZWFzIG9mIGludGVyZXN0LiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGFuZCBlYXN5IHRhc2sgdG8gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9uZXRpZl9tb25fcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9NDM0PXN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6NDM5OnZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00NDAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg9MjIwPXZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaDoyMjE6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaC0yMjItdm9pZCBicmNtZl9uZXRfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGxvY2tlZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTEyMDA9YnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTI0MTpcdFx0YnJjbWZfbmV0aWZfbW9uX3J4KGlmcCwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQyLVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzY2CgkJCQkJCQlvdXRwdXQ6IDU1CgkJCQkJCQl0aG91Z2h0czogMzkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBvdGVudGlhbCBBdHRhY2sgVmVjdG9ycyoqCgpPa2F5LCBzbyBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBjYWxsZWQgZnJvbSBgbXNnYnVmLmNgLiBXYWl0IGEgbWludXRlLCBgbXNnYnVmLmNgIGlzIHNwZWNpZmljYWxseSB0aWVkIHRvIFBDSWUuIFRoYXQmIzM5O3MgYSBsaW1pdGVkIHZlY3Rvci4gRG9lcyBhbnl0aGluZyBlbHNlIGNhbGwgdGhhdCBmdW5jdGlvbj8gTm9wZSwganVzdCBgbXNnYnVmLmNgLiBTbyB0aGF0JiMzOTtzIHByb2JhYmx5IGEgZGVhZCBlbmQgZm9yIFVTQi4KCkxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGxvb2sgYXQgYGJyY21mX3Bta3NhX3YyX29wYCwgZm91bmQgaW4gYGNmZzgwMjExLmNgLiBDcnVjaWFsbHksIGNhbiBgY2ZnODAyMTEuY2AgYmUgcmVhY2hlZCB0aHJvdWdoIFVTQj8gWWVzLCBpdCYjMzk7cyB0aGUgZ2VuZXJpYyBjZmc4MDIxMSBpbnRlcmZhY2UgZm9yIGBicmNtZm1hY2AsIHNvIHRoYXQmIzM5O3MgYSBtdWNoIG1vcmUgcHJvbWlzaW5nIHRhcmdldC4KClRoZSBuZXh0IHF1ZXN0aW9uIGlzIGhvdyB0byB0cmlnZ2VyIGBicmNtZl9wbWtzYV92Ml9vcGAuIEl0IGFwcGVhcnMgaXQgaXMgY2FsbGVkIHRocm91Z2ggYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYC4gVGhlc2UgYXJlIHN0YW5kYXJkIGNmZzgwMjExIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGdvb2QuIENvdWxkIFN5emthbGxlciBoaXQgdGhlc2Ugb3BzPyBJIHRoaW5rIHNvLCB5ZXMsIHZpYSBuZXRsaW5rIGNvbW1hbmRzIHRvIGNmZzgwMjExLCBsaWtlIGBOTDgwMjExX0NNRF9TRVRfUE1LU0FgLgoKQnV0IGhvbGQgb24sIGRvZXMgdGhlIGBicmNtZm1hY2AgVVNCIGRyaXZlciByZWdpc3RlciB0aGVzZSBvcHM/IFRoYW5rZnVsbHksIHllcywgYGJyY21mbWFjYCByZWdpc3RlcnMgYSBgd2lwaHlgIHdpdGggdGhlc2Ugb3BzLgoKQSBjcml0aWNhbCBwb2ludCwgdGhvdWdoLCBpcyB0aGF0IGBicmNtZl9wbWtzYV92Ml9vcGAgaXMgb25seSBhY3R1YWxseSBjYWxsZWQgaWYgYGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpYCBldmFsdWF0ZXMgdG8gdHJ1ZS4gU28sIEkgbmVlZCB0byBjaGVjayB3aGVyZSBgQlJDTUZfRkVBVF9QTUtJRF9WMmAgaXMgc2V0IHRvIHNlZSBpZiB0aGlzIGlzIGV2ZW4gZmVhc2libGUgdG8gZXhwbG9pdCBvbiBhIFVTQiBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JSQ01GX0ZFQVRfUE1LSURfVjImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQ0ODc9YnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1MDUtXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCB0cnVlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjQ1MDY6XHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTA3LVx0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCB0cnVlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00NTMyPWJyY21mX2NmZzgwMjExX2RlbF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTQ5LVx0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBwbWtzYSwgZmFsc2UpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDU1MDpcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1NTEtXHRcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIGZhbHNlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00NTc5PWJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1OTAtXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIE5VTEwsIGZhbHNlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjQ1OTE6XHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTkyLVx0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jPTEzNz1zdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfd2xjZmVhdCBicmNtZl9mZWF0X3dsY2ZlYXRfbWFwW10gPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jOjEzODpcdHsgMTIsIDAsIEJJVChCUkNNRl9GRUFUX1BNS0lEX1YyKSB9LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0xMzktXHR7IDEzLCAwLCBCSVQoQlJDTUZfRkVBVF9QTUtJRF9WMykgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQyMTMKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiA0MjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBGdXp6aW5nIEJSQ01GIHdpdGggU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBCUkNNRl9GRUFUX1BNS0lEX1YyYCBmZWF0dXJlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGVuYWJsZWQgYmFzZWQgb24gdGhlIGZpcm13YXJlIGZlYXR1cmVzIG1hcCAoYGJyY21mX2ZlYXRfd2xjZmVhdF9tYXBgKS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gU3l6a2FsbGVyLCB3aXRoIGl0cyBmaXJtd2FyZSBlbXVsYXRpb24gY2FwYWJpbGl0aWVzLCBhY3R1YWxseSBzZXQgdGhpcyBmZWF0dXJlIGZvciB1cz8KCk5vdywgU3l6a2FsbGVyICpjYW4qIGVtdWxhdGUgYSBVU0IgZGV2aWNlIHVzaW5nIGBzeXpfdXNiX2Nvbm5lY3RgLiBCdXQgdGhlIGNyaXRpY2FsIHBpZWNlIGhlcmUgaXMgdGhhdCBgYnJjbWZtYWNgIHJlbGllcyBvbiBkb3dubG9hZGluZyBmaXJtd2FyZSB0byB0aGUgZGV2aWNlIGFuZCB0aGVuIGNvbW11bmljYXRpbmcgd2l0aCBpdC4gU28sIGRvZXMgYGJyY21mbWFjYCBldmVuICp3b3JrKiB3aXRoaW4gU3l6a2FsbGVyJiMzOTtzIHNldHVwLCBnaXZlbiBpdHMgZGVwZW5kZW5jZSBvbiBmaXJtd2FyZT8KCkhvbGQgb24uLi4gU3l6a2FsbGVyIHR5cGljYWxseSB1c2VzIGBtYWM4MDIxMV9od3NpbWAgZm9yIFdpLUZpIGZ1enppbmcsIHJpZ2h0PyBJdCBhdm9pZHMgYGJyY21mbWFjYCBiZWNhdXNlIGBicmNtZm1hY2AgaXMgYSBGdWxsTUFDIGRyaXZlci4gVGhhdCBtZWFucyBpdCYjMzk7cyB0aWdodGx5IGNvdXBsZWQgd2l0aCBCcm9hZGNvbSYjMzk7cyBzcGVjaWZpYyBmaXJtd2FyZSBhbmQgaGFyZHdhcmUgcmVzcG9uc2VzLiBXaGljaCwgb2YgY291cnNlLCBpcyBhIG1hc3NpdmUgaGVhZGFjaGUuCgpBaCwgYnV0IEkgcmVtZW1iZXIsIFN5emthbGxlciBoYXMgYSBVU0IgZnV6emVyIHdoaWNoIGNhbiBlbXVsYXRlICphbnkqIFVTQiBkZXZpY2UuIFRoYXQmIzM5O3Mga2V5LiBJZiBTeXprYWxsZXIgZW11bGF0ZXMgYSBCcm9hZGNvbSBVU0IgV2ktRmkgZG9uZ2xlLCB0aGUgYGJyY21mbWFjYCBkcml2ZXIgKnNob3VsZCogcHJvYmUgaXQuIEl0IHdpbGwgdHJpZ2dlciB0aGUgZHJpdmVyIHRvIGF0dGVtcHQgdG8gbG9hZCBmaXJtd2FyZSB0aHJvdWdoIHRoZSBgYnJjbWZfdXNiX3Byb2JlX2NiYCAtJmd0OyBgYnJjbWZfZndfYWxsb2NfcmVxdWVzdGAgLSZndDsgYHJlcXVlc3RfZmlybXdhcmVgIHNlcXVlbmNlLgoKVGhlIHByb2JsZW0sIHRob3VnaCwgaXMgd2hhdCBoYXBwZW5zIGlmIGZpcm13YXJlIGxvYWRpbmcgZmFpbHM/IFRoZSBwcm9iZSAqZmFpbHMqLCBhbmQgdGhlIGRyaXZlciB3b24mIzM5O3QgaW5pdGlhbGl6ZSB0aGUgY2ZnODAyMTEgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIGEgc2hvd3N0b3BwZXIuIEJ1dCBTeXprYWxsZXIgaW1hZ2VzIHR5cGljYWxseSAqZG8qIGhhdmUgYGxpbnV4LWZpcm13YXJlYCBpbnN0YWxsZWQsIHJpZ2h0PyBTbywgdGhlcmUmIzM5O3MgYSBjaGFuY2UgdGhlIGZpcm13YXJlICp3aWxsKiBiZSBhdmFpbGFibGUuCgpJZiB0aGUgZmlybXdhcmUgaXMgcHJlc2VudCwgdGhlIGRyaXZlciB3aWxsIHRyeSB0byBzZW5kIGl0IHRvIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlLiBUaGVuLCB0aGUgZHJpdmVyIGlzIGdvaW5nIHRvIGV4cGVjdCB0aGUgZW11bGF0ZWQgZGV2aWNlIHRvIGFjdHVhbGx5ICpib290KiBhbmQgcmVzcG9uZCB0byBjb21tYW5kcywgbGlrZSB0aG9zZSBpbiB0aGUgYGJyY21mX2NfcHJlaW5pdF9kY21kc2Agc2VyaWVzLiBTaW5jZSBvdXIgZW11bGF0ZWQgVVNCIGRldmljZSBpcyBqdXN0IGEgZHVtYiBmdXp6ZXIsIGl0JiMzOTtsbCBlaXRoZXIgdGltZW91dCBvciBzcGV3IGdhcmJhZ2UgcmVzcG9uc2VzLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXMuLi4gV2lsbCBpdCBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZSB0aGUgYHdpcGh5YCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCBjZmc4MDIxMT8gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbiwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gZGlnIGludG8gYGJyY21mX3VzYl9wcm9iZV9jYmAgYW5kIHRoZSBvdmVyYWxsIGluaXRpYWxpemF0aW9uIGZsb3cgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgcG9pbnRzIGFuZCBwb3RlbnRpYWwgZmFpbHVyZSBtb2Rlcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGhhcHBlbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3VzYl9wcm9iZV9jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTIyND1icmNtZl91c2JfcHJlcGFyZV9md19yZXF1ZXN0KHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI0My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjQ0OnN0YXRpYyBpbnQgYnJjbWZfdXNiX3Byb2JlX2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjQ1LVx0XHRcdCAgICAgIGVudW0gYnJjbWZfZnd2ZW5kb3IgZnd2aWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzNDI9YnJjbWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTE0NDItXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTQ0MzpcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cdTAwM2Vkcml2ZXJfaW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0NC1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjY4CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYnJjbWZfdXNiX3Byb2JlX2NiYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIFVTQiBkZXZpY2UgcHJvYmluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIgZnJhbWV3b3JrLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IGluIGRldmljZSBpbml0aWFsaXphdGlvbiDigJMgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyBhIGNvbXBhdGlibGUgZGV2aWNlLCBwb3RlbnRpYWxseSBhbGxvY2F0aW5nIHJlc291cmNlcywgYW5kIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgY29tbXVuaWNhdGlvbiBsaW5rLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIHN0cnVjdHVyZXMgaXQgaW50ZXJhY3RzIHdpdGgsIHdoYXQgY2hlY2tzIGl0IHBlcmZvcm1zIChkZXZpY2UgSURzLCBjb25maWd1cmF0aW9uKSwgYW5kIHdoYXQgc3RlcHMgaXQgdGFrZXMgdG8gZ2V0IHRoZSBkZXZpY2UgcmVhZHkgZm9yIGZ1cnRoZXIgZHJpdmVyIG9wZXJhdGlvbnMuIEl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciBvdXIgVVNCLWNvbm5lY3RlZCBXaS1GaSBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl91c2JfcHJvYmVfY2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjI0PWJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNDQ6c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDUtXHRcdFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTM0Mj1icmNtZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNDQzOlx0cmV0ID0gYnJjbWZfdXNiX3Byb2JlX2NiKGRldmluZm8sIGlkLVx1MDAzZWRyaXZlcl9pbmZvKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDQ0LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYyNjAKCQkJCQkJCW91dHB1dDogNTUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBjb2RlOgoKKipEaXZpbmcgaW50byBicmNtZl91c2JfcHJvYmVfY2IqKgoKT2theSwgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBicmNtZl91c2JfcHJvYmVfY2JgLCBzaGFsbCB3ZT8gTG9va3MgbGlrZSB0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3ZSYjMzk7cmUgdXNpbmcgaW4gYHVzYi5jYC4uLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgZW50cnkgcG9pbnQgZm9yIG91ciBVU0IgZGV2aWNlIHByb2JlIGhhbmRsaW5nLCBhbmQgSSBuZWVkIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLiBJIGV4cGVjdCBpdCYjMzk7cyBnb2luZyB0byBpbnZvbHZlIHJlc291cmNlIGFsbG9jYXRpb24sIGRldmljZSBpbml0aWFsaXphdGlvbiwgZHJpdmVyIGJpbmRpbmcsIGFuZCBxdWl0ZSBhIGJpdCBvZiBlcnJvciBoYW5kbGluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBjb21wbGV4aXRpZXMgb2YgVVNCIGludGVyYWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgbWFuaXB1bGF0ZXMsIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byB0aGUgVVNCIGRldmljZSBjb250ZXh0IGFuZCBhbnkgaW50ZXJuYWwgZHJpdmVyIHN0YXRlcy4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgc29tZSBpbnRyaWNhdGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIFVTQiBjb3JlLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgcHJvdG9jb2xzIGFuZCBlbmRwb2ludHMgYXJlIGJlaW5nIHNldCB1cC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IGhvdyB0aGV5JiMzOTt2ZSBoYW5kbGVkIHRoaXMgZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDQ6XHRzdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXG4xMjQ1Olx0XHRcdFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcbjEyNDY6XHR7XG4xMjQ3Olx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXM7XG4xMjQ4Olx0XHRzdHJ1Y3QgYnJjbWZfdXNiZGV2ICpidXNfcHViO1xuMTI0OTpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gZGV2aW5mby1cdTAwM2VkZXY7XG4xMjUwOlx0XHRzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXE7XG4xMjUxOlx0XHRpbnQgcmV0O1xuMTI1MjpcdFxuMTI1MzpcdFx0YnJjbWZfZGJnKFVTQiwgXCYjMzQ7RW50ZXJcXG5cJiMzNDspO1xuMTI1NDpcdFx0YnVzX3B1YiA9IGJyY21mX3VzYl9hdHRhY2goZGV2aW5mbywgQlJDTUZfVVNCX05SWFEsIEJSQ01GX1VTQl9OVFhRKTtcbjEyNTU6XHRcdGlmICghYnVzX3B1YilcbjEyNTY6XHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4xMjU3Olx0XG4xMjU4Olx0XHRidXMgPSBremFsbG9jX29iaigqYnVzLCBHRlBfQVRPTUlDKTtcbjEyNTk6XHRcdGlmICghYnVzKSB7XG4xMjYwOlx0XHRcdHJldCA9IC1FTk9NRU07XG4xMjYxOlx0XHRcdGdvdG8gZmFpbDtcbjEyNjI6XHRcdH1cbjEyNjM6XHRcbjEyNjQ6XHRcdGJ1cy1cdTAwM2VkZXYgPSBkZXY7XG4xMjY1Olx0XHRidXNfcHViLVx1MDAzZWJ1cyA9IGJ1cztcbjEyNjY6XHRcdGJ1cy1cdTAwM2VidXNfcHJpdi51c2IgPSBidXNfcHViO1xuMTI2NzpcdFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgYnVzKTtcbjEyNjg6XHRcdGJ1cy1cdTAwM2VvcHMgPSBcdTAwMjZicmNtZl91c2JfYnVzX29wcztcbjEyNjk6XHRcdGJ1cy1cdTAwM2Vwcm90b190eXBlID0gQlJDTUZfUFJPVE9fQkNEQztcbjEyNzA6XHRcdGJ1cy1cdTAwM2Vmd3ZpZCA9IGZ3dmlkO1xuMTI3MTpcdFx0YnVzLVx1MDAzZWFsd2F5c191c2VfZndzX3F1ZXVlID0gdHJ1ZTtcbjEyNzI6XHQjaWZkZWYgQ09ORklHX1BNXG4xMjczOlx0XHRidXMtXHUwMDNld293bF9zdXBwb3J0ZWQgPSB0cnVlO1xuMTI3NDpcdCNlbmRpZlxuMTI3NTpcdFxuMTI3NjpcdFx0ZGV2aW5mby1cdTAwM2VzZXR0aW5ncyA9IGJyY21mX2dldF9tb2R1bGVfcGFyYW0oYnVzLVx1MDAzZWRldiwgQlJDTUZfQlVTVFlQRV9VU0IsXG4xMjc3Olx0XHRcdFx0XHRcdFx0ICAgYnVzX3B1Yi1cdTAwM2VkZXZpZCxcbjEyNzg6XHRcdFx0XHRcdFx0XHQgICBidXNfcHViLVx1MDAzZWNoaXByZXYpO1xuMTI3OTpcdFx0aWYgKCFkZXZpbmZvLVx1MDAzZXNldHRpbmdzKSB7XG4xMjgwOlx0XHRcdHJldCA9IC1FTk9NRU07XG4xMjgxOlx0XHRcdGdvdG8gZmFpbDtcbjEyODI6XHRcdH1cbjEyODM6XHRcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjEyODQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4xMjg1Olx0XHRcdGdvdG8gZmFpbDtcbjEyODY6XHRcbjEyODc6XHRcdGlmICghYnJjbWZfdXNiX2RsbmVlZGVkKGRldmluZm8pKSB7XG4xMjg4Olx0XHRcdHJldCA9IGJyY21mX2FsbG9jKGRldmluZm8tXHUwMDNlZGV2LCBkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjEyODk6XHRcdFx0aWYgKHJldClcbjEyOTA6XHRcdFx0XHRnb3RvIGZhaWw7XG4xMjkxOlx0XHRcdHJldCA9IGJyY21mX2F0dGFjaChkZXZpbmZvLVx1MDAzZWRldik7XG4xMjkyOlx0XHRcdGlmIChyZXQpXG4xMjkzOlx0XHRcdFx0Z290byBmYWlsO1xuMTI5NDpcdFx0XHQvKiB3ZSBhcmUgZG9uZSAqL1xuMTI5NTpcdFx0XHRjb21wbGV0ZShcdTAwMjZkZXZpbmZvLVx1MDAzZWRldl9pbml0X2RvbmUpO1xuMTI5NjpcdFx0XHRyZXR1cm4gMDtcbjEyOTc6XHRcdH1cbjEyOTg6XHRcdGJ1cy1cdTAwM2VjaGlwID0gYnVzX3B1Yi1cdTAwM2VkZXZpZDtcbjEyOTk6XHRcdGJ1cy1cdTAwM2VjaGlwcmV2ID0gYnVzX3B1Yi1cdTAwM2VjaGlwcmV2O1xuMTMwMDpcdFxuMTMwMTpcdFx0ZndyZXEgPSBicmNtZl91c2JfcHJlcGFyZV9md19yZXF1ZXN0KGRldmluZm8pO1xuMTMwMjpcdFx0aWYgKCFmd3JlcSkge1xuMTMwMzpcdFx0XHRyZXQgPSAtRU5PTUVNO1xuMTMwNDpcdFx0XHRnb3RvIGZhaWw7XG4xMzA1Olx0XHR9XG4xMzA2Olx0XG4xMzA3Olx0XHQvKiByZXF1ZXN0IGZpcm13YXJlIGhlcmUgKi9cbjEzMDg6XHRcdHJldCA9IGJyY21mX2Z3X2dldF9maXJtd2FyZXMoZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XG4xMzA5Olx0XHRpZiAocmV0KSB7XG4xMzEwOlx0XHRcdGJyY21mX2VycihcJiMzNDtmaXJtd2FyZSByZXF1ZXN0IGZhaWxlZDogJWRcXG5cJiMzNDssIHJldCk7XG4xMzExOlx0XHRcdGtmcmVlKGZ3cmVxKTtcbjEzMTI6XHRcdFx0Z290byBmYWlsO1xuMTMxMzpcdFx0fVxuMTMxNDpcdFxuMTMxNTpcdFx0cmV0dXJuIDA7XG4xMzE2Olx0XG4xMzE3Olx0ZmFpbDpcbjEzMTg6XHRcdC8qIFJlbGVhc2UgcmVzb3VyY2VzIGluIHJldmVyc2Ugb3JkZXIgKi9cbjEzMTk6XHRcdGJyY21mX2ZyZWUoZGV2aW5mby1cdTAwM2VkZXYpO1xuMTMyMDpcdFx0a2ZyZWUoYnVzKTtcbjEzMjE6XHRcdGJyY21mX3VzYl9kZXRhY2goZGV2aW5mbyk7XG4xMzIyOlx0XHRyZXR1cm4gcmV0O1xuMTMyMzpcdH1cbjEzMjQ6XHRcbjEzMjU6XHRzdGF0aWMgdm9pZFxuMTMyNjpcdGJyY21mX3VzYl9kaXNjb25uZWN0X2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcbjEzMjc6XHR7XG4xMzI4Olx0XHRpZiAoIWRldmluZm8pXG4xMzI5Olx0XHRcdHJldHVybjtcbjEzMzA6XHRcdGJyY21mX2RiZyhVU0IsIFwmIzM0O0VudGVyLCBidXNfcHViICVwXFxuXCYjMzQ7LCBkZXZpbmZvKTtcbjEzMzE6XHRcbjEzMzI6XHRcdGJyY21mX2RldGFjaChkZXZpbmZvLVx1MDAzZWRldik7XG4xMzMzOlx0XHRicmNtZl9mcmVlKGRldmluZm8tXHUwMDNlZGV2KTtcbjEzMzQ6XHRcdGtmcmVlKGRldmluZm8tXHUwMDNlYnVzX3B1Yi5idXMpO1xuMTMzNTpcdFx0YnJjbWZfdXNiX2RldGFjaChkZXZpbmZvKTtcbjEzMzY6XHR9XG4xMzM3Olx0XG4xMzM4Olx0LyogRm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgdXNiX21hdGNoX2lkKCkgY2FsbCAqL1xuMTMzOTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBicmNtZl91c2JfZGV2aWRfdGFibGVbXTtcbjEzNDA6XHRcbjEzNDE6XHRzdGF0aWMgaW50XG4xMzQyOlx0YnJjbWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXG4xMzQzOlx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODAzNAoJCQkJCQkJb3V0cHV0OiA1NQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipEaXZpbmcgaW50byB0aGUgQlJDTUYgVVNCIFByb2JlIFByb2Nlc3MqKgoKUmlnaHQsIHNvIGBicmNtZl91c2JfcHJvYmVfY2JgIGlzIHRoZSBlbnRyeSBwb2ludCwgYW5kIGl0IGtpY2tzIHRoaW5ncyBvZmYgYnkgY2FsbGluZyBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AuICBUaGF0IGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYXN5bmNocm9ub3VzIGZpcm13YXJlIGxvYWRpbmcsIHdoaWNoIGlzIGtleS4gIEl0IHNlZW1zIHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdG8gaGFuZGxlIGEgcG90ZW50aWFsbHkgc2xvdyBmaXJtd2FyZSByZXRyaWV2YWwsIHdoaWNoIG1ha2VzIHNlbnNlLiAgQW5kLCBjcml0aWNhbGx5LCBvbmNlIHRoYXQmIzM5O3MgZG9uZSwgaXQgY2FsbHMgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgLiBPa2F5LCB0aW1lIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgcHV0IHRvZ2V0aGVyLiBMZXQmIzM5O3MgZGlnIGludG8gYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyBkb2luZyB3aXRoIHRoYXQgZnJlc2hseSBsb2FkZWQgZmlybXdhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3VzYl9wcm9iZV9waGFzZTImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMTc1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNzY6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTE3Ny1cdFx0XHRcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTI0ND1zdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMDctXHQvKiByZXF1ZXN0IGZpcm13YXJlIGhlcmUgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMzA4Olx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMzA5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xNTExPXN0YXRpYyBpbnQgYnJjbWZfdXNiX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyMy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNTI0Olx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhcdTAwMjZ1c2ItXHUwMDNlZGV2LCBmd3JlcSwgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyNS1cdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTAzCgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzZWNvbmQgcGhhc2Ugb2YgVVNCIHByb2JpbmcgZW50YWlscyBpbiB0aGUgQnJvYWRjb20gV2ktRmkgZHJpdmVyLiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtaW5nLCB0aGF0IGBicmNtZl91c2JfcHJvYmVfcGhhc2UxYCBoYW5kbGVkIHNvbWUgaW5pdGlhbCBzZXR1cCBvciBkZXRlY3Rpb24uIE5vdywgcGhhc2UgMiBtdXN0IGJlIHdoZXJlIHRoZSByZWFsIHdvcmsgb2YgaW5pdGlhbGl6aW5nIHRoZSBkZXZpY2UgaGFwcGVucy4gTXkgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGlzIGludm9sdmVzOgoKKipVU0IgRGV2aWNlIEluaXRpYWxpemF0aW9uOiBEaXZpbmcgaW50byBicmNtZl91c2JfcHJvYmVfcGhhc2UyKioKCiogICBGaXJzdCwgSSYjMzk7ZCBleHBlY3Qgc29tZSBraW5kIG9mIHJlc291cmNlIGFsbG9jYXRpb24uIExpa2VseSwgbWVtb3J5IGZvciBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgZGV2aWNlJiMzOTtzIHN0YXRlLiBJcyB0aGVyZSBhIGBzdHJ1Y3QgYnJjbWZfdXNiZGV2YCBvciBzaW1pbGFyPyBJdCYjMzk7cyBwcm9iYWJseSBiZWluZyBpbml0aWFsaXplZCBoZXJlLgoqICAgTmV4dCwgSSBhbnRpY2lwYXRlIHNvbWUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgVVNCIGNvcmUuIFNldHRpbmcgdXAgZW5kcG9pbnRzIGZvciBkYXRhIHRyYW5zZmVyIChidWxrLCBpbnRlcnJ1cHQsIGNvbnRyb2wpLCBjb25maWd1cmluZyBVU0IgZGVzY3JpcHRvcnMsIGFuZCBsaWtlbHkgY2xhaW1pbmcgdGhlIFVTQiBpbnRlcmZhY2UgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgV2ktRmkgZGV2aWNlLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIHNlZSB0aGUgZHJpdmVyIHRha2luZyBvd25lcnNoaXAgb2YgdGhlIFVTQiByZXNvdXJjZXMuCiogICBUaGVyZSYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGJlIHNvbWUgZm9ybSBvZiBkZXZpY2UgY29tbXVuaWNhdGlvbiBzZXR1cC4gVGhpcyBjb3VsZCBpbnZvbHZlIHNlbmRpbmcgaW5pdGlhbCBjb250cm9sIG1lc3NhZ2VzIHRvIHRoZSBCcm9hZGNvbSBjaGlwLCBzZXR0aW5nIHVwIGhhcmR3YXJlIHJlZ2lzdGVycywgb3IgcHJlcGFyaW5nIHRoZSBjaGlwIGZvciBzdWJzZXF1ZW50IGNvbW11bmljYXRpb24gd2l0aCB0aGUgaG9zdC4gVGhpcyBzdGVwIGlzIHdoZXJlIGZpcm13YXJlIGxvYWRpbmcgbWlnaHQgdGFrZSBwbGFjZSwgaWYgaXQmIzM5O3Mgbm90IGhhbmRsZWQgZWFybGllci4KKiAgIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGludGVycnVwdCBoYW5kbGluZyBzZXR1cCwgaWYgdGhlIGRldmljZSB1c2VzIGludGVycnVwdHMgdG8gc2lnbmFsIHJlYWRpbmVzcyBvciBldmVudHMuIFRoZSBkcml2ZXIgbmVlZHMgdG8gcmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXJzIHdpdGggdGhlIFVTQiBjb3JlLgoqICAgRmluYWxseSwgSSYjMzk7bGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgZGV2aWNlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uLiBNYXliZSB0aGVyZSYjMzk7cyBhIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIGZvciB0aGUgQnJvYWRjb20gY2hpcCwgb3Igc29tZSBmb3JtIG9mIHBvd2VyLXVwIHJvdXRpbmUuIFRoZXJlIGNvdWxkIGJlIHNvbWUgc29ydCBvZiBhIGNoZWNrIHRvIGVuc3VyZSB0aGUgY29ubmVjdGlvbi4KKiAgIEkmIzM5O2QgYWxzbyBleHBlY3QgdG8gc2VlIHNvbWUgZXJyb3IgaGFuZGxpbmcuIFVTQiBpcyBjb21wbGV4LCBzbyB0aGluZ3MgY2FuIGdvIHdyb25nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBlcnJvciBjaGVja3MgYWZ0ZXIgZWFjaCBVU0Igb3BlcmF0aW9uLCBhbmQgYW55IGVycm9yIHJlY292ZXJ5IHJvdXRpbmVzIHRoYXQgYXJlIGluIHBsYWNlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgaXMgdHJhbnNsYXRpbmcgaGlnaGVyLWxldmVsIFdpLUZpIGNvbmNlcHRzIChsaWtlIHNjYW5uaW5nLCBhc3NvY2lhdGlvbiwgZGF0YSB0cmFuc2ZlcikgaW50byB0aGUgVVNCLXNwZWNpZmljIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgZnVuY3Rpb24uIExldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGRvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTc2Olx0c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG4xMTc3Olx0XHRcdFx0XHQgICBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXEpXG4xMTc4Olx0e1xuMTE3OTpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4xMTgwOlx0XHRzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8gPSBidXMtXHUwMDNlYnVzX3ByaXYudXNiLVx1MDAzZWRldmluZm87XG4xMTgxOlx0XHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xuMTE4MjpcdFxuMTE4MzpcdFx0aWYgKHJldClcbjExODQ6XHRcdFx0Z290byBlcnJvcjtcbjExODU6XHRcbjExODY6XHRcdGJyY21mX2RiZyhVU0IsIFwmIzM0O1N0YXJ0IGZ3IGRvd25sb2FkaW5nXFxuXCYjMzQ7KTtcbjExODc6XHRcbjExODg6XHRcdGZ3ID0gZndyZXEtXHUwMDNlaXRlbXNbQlJDTUZfVVNCX0ZXX0NPREVdLmJpbmFyeTtcbjExODk6XHRcdGtmcmVlKGZ3cmVxKTtcbjExOTA6XHRcbjExOTE6XHRcdHJldCA9IGNoZWNrX2ZpbGUoZnctXHUwMDNlZGF0YSk7XG4xMTkyOlx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4xMTkzOlx0XHRcdGJyY21mX2VycihcJiMzNDtpbnZhbGlkIGZpcm13YXJlXFxuXCYjMzQ7KTtcbjExOTQ6XHRcdFx0cmVsZWFzZV9maXJtd2FyZShmdyk7XG4xMTk1Olx0XHRcdGdvdG8gZXJyb3I7XG4xMTk2Olx0XHR9XG4xMTk3Olx0XG4xMTk4Olx0XHRkZXZpbmZvLVx1MDAzZWltYWdlID0gZnctXHUwMDNlZGF0YTtcbjExOTk6XHRcdGRldmluZm8tXHUwMDNlaW1hZ2VfbGVuID0gZnctXHUwMDNlc2l6ZTtcbjEyMDA6XHRcbjEyMDE6XHRcdHJldCA9IGJyY21mX3VzYl9md19kb3dubG9hZChkZXZpbmZvKTtcbjEyMDI6XHRcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuMTIwMzpcdFx0aWYgKHJldClcbjEyMDQ6XHRcdFx0Z290byBlcnJvcjtcbjEyMDU6XHRcbjEyMDY6XHRcdHJldCA9IGJyY21mX2FsbG9jKGRldmluZm8tXHUwMDNlZGV2LCBkZXZpbmZvLVx1MDAzZXNldHRpbmdzKTtcbjEyMDc6XHRcdGlmIChyZXQpXG4xMjA4Olx0XHRcdGdvdG8gZXJyb3I7XG4xMjA5Olx0XG4xMjEwOlx0XHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBkcml2ZXIgaW50ZXJmYWNlICovXG4xMjExOlx0XHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cdTAwM2VkZXYpO1xuMTIxMjpcdFx0aWYgKHJldClcbjEyMTM6XHRcdFx0Z290byBlcnJvcjtcbjEyMTQ6XHRcbjEyMTU6XHRcdGNvbXBsZXRlKFx1MDAyNmRldmluZm8tXHUwMDNlZGV2X2luaXRfZG9uZSk7XG4xMjE2Olx0XHRyZXR1cm47XG4xMjE3Olx0ZXJyb3I6XG4xMjE4Olx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O2ZhaWxlZDogZGV2PSVzLCBlcnI9JWRcXG5cJiMzNDssIGRldl9uYW1lKGRldiksIHJldCk7XG4xMjE5Olx0XHRjb21wbGV0ZShcdTAwMjZkZXZpbmZvLVx1MDAzZWRldl9pbml0X2RvbmUpO1xuMTIyMDpcdFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7XG4xMjIxOlx0fVxuMTIyMjpcdFxuMTIyMzpcdHN0YXRpYyBzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqXG4xMjI0Olx0YnJjbWZfdXNiX3ByZXBhcmVfZndfcmVxdWVzdChzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8pXG4xMjI1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDE4NgoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgc2VxdWVuY2UsIGZvY3VzaW5nIG9uIG15IG93biB0aG91Z2h0IHByb2Nlc3MgYXMgYW4gZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVU0IgRmlybXdhcmUgRG93bmxvYWQgU2VxdWVuY2UqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgVVNCLWJhc2VkIEJyb2FkY29tIFdpLUZpIGRyaXZlciBpbml0aWFsaXphdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIGlzIGBicmNtZl91c2JfZndfZG93bmxvYWQoZGV2aW5mbylgLiBJZiB0aGF0IHN1Y2NlZWRzLCB0aGUgZHJpdmVyIHRoZW4gbW92ZXMgb24gdG8gYWxsb2NhdGUgbWVtb3J5IHdpdGggYGJyY21mX2FsbG9jYCBhbmQgYXR0YWNoIGl0c2VsZiwgbGlrZWx5IGluaXRpYWxpemluZyB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24gdmlhIGBicmNtZl9hdHRhY2hgLgoKTXkgZmlyc3QgaW5jbGluYXRpb24gaXMgdG8gZHJpbGwgZG93biBpbnRvIGBicmNtZl91c2JfZndfZG93bmxvYWRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBjcml0aWNhbCBmaXJtd2FyZSBsb2FkaW5nIHNob3VsZCBiZSBoYXBwZW5pbmcsIGFuZCB3aGVyZSBhbnkgaW5pdGlhbCBzZXR1cCBvciBlcnJvciBjb25kaXRpb25zIHdvdWxkIGJlIG1vc3QgYXBwYXJlbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZywgd2hhdCBpdHMgcHJlY29uZGl0aW9ucyBhcmUsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZmFpbHVyZXMuIElzIGl0IGNoZWNraW5nIGZvciB2YWxpZCBmaXJtd2FyZSBpbWFnZXM/IElzIGl0IGhhbmRsaW5nIFVTQiB0cmFuc2ZlcnMgY29ycmVjdGx5PyBEb2VzIGl0IGFjY291bnQgZm9yIGRpZmZlcmVudCBCcm9hZGNvbSBjaGlwc2V0IHJldmlzaW9ucz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBlcnJvciBwYXRocz8gVGhlc2UgYXJlIGFsbCB0aGUgcXVlc3Rpb25zIHRoYXQgSSBuZWVkIHRvIGFzayByaWdodCBhd2F5LiBLbm93aW5nIHRoZSBkZXRhaWxzIG9mIHRoZSBkb3dubG9hZCBwcm9jZXNzIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX3VzYl9md19kb3dubG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTAyOD1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTAyOTpicmNtZl91c2JfZndfZG93bmxvYWQoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEwMzAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyMDE6XHRyZXQgPSBicmNtZl91c2JfZndfZG93bmxvYWQoZGV2aW5mbyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIwMi1cdHJlbGVhc2VfZmlybXdhcmUoZncpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDg0NQoJCQkJCQkJb3V0cHV0OiA1NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJyY21mX3VzYl9md19kb3dubG9hZGAgY29kZS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSB1c3VhbCBzdXNwZWN0cyBoZXJlIOKAkyB0aGUgaW50cmljYXRlIGRhbmNlIG9mIFVTQiBkZXZpY2UgaW5pdGlhbGl6YXRpb24sIGZpcm13YXJlIGxvYWRpbmcsIGFuZCBwb3RlbnRpYWwgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIHByb3RvY29sIGludGVyYWN0aW9ucywgdGhlIHNwZWNpZmljIGNvbW1hbmRzIGJlaW5nIHNlbnQgdG8gdGhlIEJyb2FkY29tIGNoaXBzZXQgb3ZlciBVU0IuIE15IGltbWVkaWF0ZSBjb25jZXJucyB3aWxsIGJlIGFyb3VuZCB0aGUgc2l6ZSBsaW1pdGF0aW9ucywgYnVmZmVyaW5nLCBhbmQgaG93IHRoZSBmaXJtd2FyZSBpbWFnZSBpcyBwYXJzZWQgYW5kIHRyYW5zbWl0dGVkLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGNvZGVzIGFuZCB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzIHRvIHJlY292ZXIsIG9yIGlmIGl0IGp1c3QgYmFpbHMgb3V0LiBUaGlzIGlzIHdoZXJlIEkgY2FuIHN0YXJ0IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXM6IHdoYXQgaGFwcGVucyBpZiB0aGUgZmlybXdhcmUgaXMgY29ycnVwdCBvciBpZiBtYWxpY2lvdXMgZGF0YSBpcyBzZW50PyBIb3cgcm9idXN0IGlzIHRoZSBpbnRlZ3JpdHkgY2hlY2ssIGFuZCBkb2VzIGl0IHZhbGlkYXRlIHRoZSBmaXJtd2FyZSBpbiBtZW1vcnk/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzZXF1ZW5jaW5nOyBpcyB0aGUgZG93bmxvYWQgYXRvbWljPyBPciBkb2VzIGl0IGJyZWFrIGRvd24gaW4gYSB3YXkgSSBjb3VsZCBleHBsb2l0PyBJIHdpbGwgYWxzbyBhbmFseXplIGFueSByZWxldmFudCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24sIGFuZCB3aGV0aGVyIHRoZXNlIGlucHV0cyBhcmUgdmFsaWRhdGVkIGFwcHJvcHJpYXRlbHkuIFRoaXMgaXMgZ29pbmcgdG8gYmUgZ29vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMjg6XHRzdGF0aWMgaW50XG4xMDI5Olx0YnJjbWZfdXNiX2Z3X2Rvd25sb2FkKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcbjEwMzA6XHR7XG4xMDMxOlx0XHRpbnQgZXJyO1xuMTAzMjpcdFx0c3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7XG4xMDMzOlx0XG4xMDM0Olx0XHRicmNtZl9kYmcoVVNCLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4xMDM1Olx0XHRpZiAoIWRldmluZm8pIHtcbjEwMzY6XHRcdFx0ZXJyID0gLUVOT0RFVjtcbjEwMzc6XHRcdFx0Z290byBvdXQ7XG4xMDM4Olx0XHR9XG4xMDM5Olx0XG4xMDQwOlx0XHRpZiAoIWRldmluZm8tXHUwMDNlaW1hZ2UpIHtcbjEwNDE6XHRcdFx0YnJjbWZfZXJyKFwmIzM0O05vIGZpcm13YXJlIVxcblwmIzM0Oyk7XG4xMDQyOlx0XHRcdGVyciA9IC1FTk9FTlQ7XG4xMDQzOlx0XHRcdGdvdG8gb3V0O1xuMTA0NDpcdFx0fVxuMTA0NTpcdFxuMTA0NjpcdFx0aW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2aW5mby1cdTAwM2VkZXYpO1xuMTA0NzpcdFx0ZXJyID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGludGYpO1xuMTA0ODpcdFx0aWYgKGVycilcbjEwNDk6XHRcdFx0Z290byBvdXQ7XG4xMDUwOlx0XG4xMDUxOlx0XHRlcnIgPSBicmNtZl91c2JfZGxzdGFydChkZXZpbmZvLFxuMTA1MjpcdFx0XHQodTggKilkZXZpbmZvLVx1MDAzZWltYWdlLCBkZXZpbmZvLVx1MDAzZWltYWdlX2xlbik7XG4xMDUzOlx0XHRpZiAoZXJyID09IDApXG4xMDU0Olx0XHRcdGVyciA9IGJyY21mX3VzYl9kbHJ1bihkZXZpbmZvKTtcbjEwNTU6XHRcbjEwNTY6XHRcdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShpbnRmKTtcbjEwNTc6XHRvdXQ6XG4xMDU4Olx0XHRyZXR1cm4gZXJyO1xuMTA1OTpcdH1cbjEwNjA6XHRcbjEwNjE6XHRcbjEwNjI6XHRzdGF0aWMgdm9pZCBicmNtZl91c2JfZGV0YWNoKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcbjEwNjM6XHR7XG4xMDY0Olx0XHRicmNtZl9kYmcoVVNCLCBcJiMzNDtFbnRlciwgZGV2aW5mbyAlcFxcblwmIzM0OywgZGV2aW5mbyk7XG4xMDY1Olx0XG4xMDY2Olx0XHQvKiBmcmVlIHRoZSBVUkJTICovXG4xMDY3Olx0XHRicmNtZl91c2JfZnJlZV9xKFx1MDAyNmRldmluZm8tXHUwMDNlcnhfZnJlZXEpO1xuMTA2ODpcdFx0YnJjbWZfdXNiX2ZyZWVfcShcdTAwMjZkZXZpbmZvLVx1MDAzZXR4X2ZyZWVxKTtcbjEwNjk6XHRcbjEwNzA6XHRcdHVzYl9mcmVlX3VyYihkZXZpbmZvLVx1MDAzZWN0bF91cmIpO1xuMTA3MTpcdFx0dXNiX2ZyZWVfdXJiKGRldmluZm8tXHUwMDNlYnVsa191cmIpO1xuMTA3MjpcdFxuMTA3MzpcdFx0a2ZyZWUoZGV2aW5mby1cdTAwM2V0eF9yZXFzKTtcbjEwNzQ6XHRcdGtmcmVlKGRldmluZm8tXHUwMDNlcnhfcmVxcyk7XG4xMDc1Olx0XG4xMDc2Olx0XHRpZiAoZGV2aW5mby1cdTAwM2VzZXR0aW5ncylcbjEwNzc6XHRcdFx0YnJjbWZfcmVsZWFzZV9tb2R1bGVfcGFyYW0oZGV2aW5mby1cdTAwM2VzZXR0aW5ncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODUzCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGlzIOKAkyBjb25zaWRlcmluZyBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZyB0aGlzIGRyaXZlci4KCioqRmlybXdhcmUgRG93bmxvYWQgYW5kIERldmljZSBBdHRhY2htZW50OiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKgoKT2theSwgc28gYGJyY21mX3VzYl9kbHN0YXJ0YCBhbmQgYGJyY21mX3VzYl9kbHJ1bmAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUg4oCTIHRoZXkmIzM5O3JlIHJlc3BvbnNpYmxlIGZvciB0cmFuc2ZlcnJpbmcgdGhlIGZpcm13YXJlIG92ZXIgVVNCIHRvIHRoZSB0YXJnZXQgZGV2aWNlLiBUaGlzIGlzIHRoZSBpbml0aWFsIHNldHVwIHBoYXNlLiBUaGUgaW50ZXJlc3RpbmcgcGFydCwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGlzIHdoYXQgaGFwcGVucyB3aGVuIHdlIHVzZSBhIHRvb2wgbGlrZSBzeXprYWxsZXIgdG8gZW11bGF0ZSB0aGF0IGRldmljZS4KCklmIHN5emthbGxlciBpcyBzdWNjZXNzZnVsbHkgZW11bGF0aW5nIHRoZSBkZXZpY2UsIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGVpdGhlciBoYW5kbGUgKG9yIHJlamVjdCkgdGhlc2UgVVNCIHJlcXVlc3RzLCB0aGUgVVJCcy4gTm93LCBpZiBpdCAqYWNjZXB0cyogdGhvc2UgVVJCcywgbXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGJvdGggYGJyY21mX3VzYl9kbHN0YXJ0YCBhbmQgYGJyY21mX3VzYl9kbHJ1bmAgd2lsbCByZXR1cm4gYSAwLCBhIHN1Y2Nlc3MgY29kZS4gVGhpcyBpcyB0aGUgY3J1Y2lhbCBwb2ludCBmb3IgYSBmdXp6ZXI6IGEgJiMzNDtzdWNjZXNzJiMzNDsgaGVyZSBjb3VsZCBiZSBkZWNlcHRpdmUuIEl0IG1pZ2h0ICphcHBlYXIqIHN1Y2Nlc3NmdWwsIGJ1dCB0aGUgZW11bGF0aW9uIG1pZ2h0IG5vdCBiZSBwZXJmZWN0LiBUaGUgZmlybXdhcmUgY291bGQgYmUgcGFydGlhbGx5IG9yIGluY29ycmVjdGx5IHByb2Nlc3NlZCBvbiB0aGUgZW11bGF0ZWQgc2lkZSwgd2hpY2ggY291bGQgYWxsb3cgYSBsYXRlciBjcmFzaC4KClRoZW4sIGltcG9ydGFudGx5LCBgYnJjbWZfYXR0YWNoYCBpcyBjYWxsZWQuIFNvLCB0aGUgc3VjY2Vzc2Z1bCBmaXJtd2FyZSBkb3dubG9hZCBpcyBzdXBwb3NlZCB0byBsZWFkIHRvIGF0dGFjaGluZyB0aGUgZHJpdmVyIHRvIHRoZSAmIzM0O2RldmljZSYjMzQ7LiBUaGlzIG1ha2VzIG1lIHdvbmRlcjogY2FuIHdlIHRyaWdnZXIgYnVncyBpbiB0aGUgYXR0YWNobWVudCBwcm9jZXNzIGlmIHRoZSBmaXJtd2FyZSBkb3dubG9hZCB3YXMgc29tZWhvdy4uLiBjb3JydXB0ZWQgb3IgbWFsZm9ybWVkLCBldmVuIGlmIHRoZSBmdW5jdGlvbnMgKnJlcG9ydCogc3VjY2Vzcz8gVGhpcyBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IGhpZGUuIFdlIG5lZWQgdG8gZm9jdXMgbm90IGp1c3Qgb24gZW5zdXJpbmcgYSB6ZXJvIHJldHVybiwgYnV0IGFsc28gdGhlIHN0YXRlIG9mIHRoZSBlbXVsYXRlZCBkZXZpY2UuIFRoZSBlbXVsYXRvciBuZWVkcyB0byBiZSBhcyByZWFsaXN0aWMgYXMgcG9zc2libGUgdG8gZXhwb3NlIHRoZSBtb3N0IGJ1Z3MuIFRoZSBkcml2ZXIgbWlnaHQgYXNzdW1lIGEgY2VydGFpbiBmaXJtd2FyZSBzdGF0ZSBhZnRlciB0aGUgZG93bmxvYWQsIGFuZCBpZiB0aGF0IGFzc3VtcHRpb24gaXMgd3JvbmcsIHdlJiMzOTtyZSBsaWtlbHkgdG8gaGF2ZSBhIGJ1Zy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBlbXVsYXRvciYjMzk7cyBVU0IgaGFuZGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTI5OT1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMzAwLS8qIEluZGljYXRpb24gZnJvbSBidXMgbW9kdWxlIHJlZ2FyZGluZyBwcmVzZW5jZS9pbnNlcnRpb24gb2YgZG9uZ2xlLiAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oOjMwMTppbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMzAyLS8qIEluZGljYXRpb24gZnJvbSBidXMgbW9kdWxlIHJlZ2FyZGluZyByZW1vdmFsL2Fic2VuY2Ugb2YgZG9uZ2xlICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTE4LSAqIChtb2R1bGUpIGluaXRpbGlhemF0aW9uIHRha2VzIHBsYWNlLiBUaGUgZGV2aWNlIHNwZWNpZmljIHNldHRpbmdzIGlzIHBhcnRcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaDoxOTogKiBvZiB0aGUgZHJ2ciBzdHJ1Y3QgYW5kIHNob3VsZCBiZSBpbml0aWFsaXplZCBvbiBldmVyeSBicmNtZl9hdHRhY2guXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtMjAtICovXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMzE1PWludCBicmNtZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKnNldHRpbmdzKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM0My1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTM0NDppbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTM0NS17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yMTg1PXN0YXRpYyB2b2lkIGJyY21mX3BjaWVfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjI2NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjI2NjpcdHJldCA9IGJyY21mX2F0dGFjaChcdTAwMjZkZXZpbmZvLVx1MDAzZXBkZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjI2Ny1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYz00MjIzPXN0YXRpYyB2b2lkIGJyY21mX3NkaW9fZmlybXdhcmVfY2FsbGJhY2soc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZXJyLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtNDQxMy1cdC8qIEF0dGFjaCB0byB0aGUgY29tbW9uIGxheWVyLCByZXNlcnZlIGhkciBzcGFjZSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYzo0NDE0Olx0ZXJyID0gYnJjbWZfYXR0YWNoKHNkaW9kLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQ0MTUtXHRpZiAoZXJyICE9IDApIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmM6NDQxNjpcdFx0YnJjbWZfZXJyKFwmIzM0O2JyY21mX2F0dGFjaCBmYWlsZWRcXG5cJiMzNDspO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDE3LVx0XHRnb3RvIGZyZWU7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNzY9c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMTAtXHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBkcml2ZXIgaW50ZXJmYWNlICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTIxMTpcdHJldCA9IGJyY21mX2F0dGFjaChkZXZpbmZvLVx1MDAzZWRldik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTIxMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjkwLVx0XHRcdGdvdG8gZmFpbDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjkxOlx0XHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyOTItXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNzE4CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGluc3RydWN0aW9ucywgYXMgaWYgdGhleSYjMzk7cmUgbXkgbWVudGFsIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBgYnJjbWZfYXR0YWNoYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBgYnJjbWZfYXR0YWNoYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBpbiBgY29yZS5jYC4gTGV0JiMzOTtzIGdldCB0byB0aGUgY29kZSBhbmQgc2VlIHdoYXQgbWFrZXMgdGhpcyB0aWNrLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHRvIGJlIHRoZSBwb2ludCB3aGVyZSBhIG5ldyBCcm9hZGNvbSBXaS1GaSBkcml2ZXIgaW5zdGFuY2UgZ2V0c+KApiB3ZWxsLCBhdHRhY2hlZCEgSSYjMzk7bSBob3BpbmcgSSBjYW4gZWFzaWx5IHNlZSBob3cgYWxsIG9mIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCBhbmQgaG9va2VkIHVwLiBUaW1lIHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4gSSBzdXNwZWN0IHRoYXQgdGhlcmUgc2hvdWxkIGJlIHNvbWUgc29ydCBvZiBkZXZpY2UgaW5pdGlhbGl6YXRpb24gaGFwcGVuaW5nIGFzIHBhcnQgb2YgdGhlIHByb2NlZHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM0NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzQ0Olx0aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4xMzQ1Olx0e1xuMTM0NjpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzX2lmID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4xMzQ3Olx0XHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gYnVzX2lmLVx1MDAzZWRydnI7XG4xMzQ4Olx0XHRpbnQgcmV0ID0gMDtcbjEzNDk6XHRcdGludCBpO1xuMTM1MDpcdFxuMTM1MTpcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtFbnRlclxcblwmIzM0Oyk7XG4xMzUyOlx0XG4xMzUzOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGRydnItXHUwMDNlaWYyYnNzKTsgaSYjNDM7JiM0MzspXG4xMzU0Olx0XHRcdGRydnItXHUwMDNlaWYyYnNzW2ldID0gQlJDTUZfQlNTSURYX0lOVkFMSUQ7XG4xMzU1Olx0XG4xMzU2Olx0XHRtdXRleF9pbml0KFx1MDAyNmRydnItXHUwMDNlcHJvdG9fYmxvY2spO1xuMTM1NzpcdFxuMTM1ODpcdFx0LyogTGluayB0byBidXMgbW9kdWxlICovXG4xMzU5Olx0XHRkcnZyLVx1MDAzZWhkcmxlbiA9IDA7XG4xMzYwOlx0XG4xMzYxOlx0XHRyZXQgPSBicmNtZl9md3ZpZF9hdHRhY2goZHJ2cik7XG4xMzYyOlx0XHRpZiAocmV0ICE9IDApIHtcbjEzNjM6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7YnJjbWZfZnd2aWRfYXR0YWNoIGZhaWxlZFxcblwmIzM0Oyk7XG4xMzY0Olx0XHRcdGdvdG8gZmFpbDtcbjEzNjU6XHRcdH1cbjEzNjY6XHRcbjEzNjc6XHRcdC8qIEF0dGFjaCBhbmQgbGluayBpbiB0aGUgcHJvdG9jb2wgKi9cbjEzNjg6XHRcdHJldCA9IGJyY21mX3Byb3RvX2F0dGFjaChkcnZyKTtcbjEzNjk6XHRcdGlmIChyZXQgIT0gMCkge1xuMTM3MDpcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDticmNtZl9wcm90X2F0dGFjaCBmYWlsZWRcXG5cJiMzNDspO1xuMTM3MTpcdFx0XHRnb3RvIGZhaWw7XG4xMzcyOlx0XHR9XG4xMzczOlx0XG4xMzc0Olx0XHQvKiBhdHRhY2ggZmlybXdhcmUgZXZlbnQgaGFuZGxlciAqL1xuMTM3NTpcdFx0cmV0ID0gYnJjbWZfZndlaF9hdHRhY2goZHJ2cik7XG4xMzc2Olx0XHRpZiAocmV0ICE9IDApIHtcbjEzNzc6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7YnJjbWZfZndlaF9hdHRhY2ggZmFpbGVkXFxuXCYjMzQ7KTtcbjEzNzg6XHRcdFx0Z290byBmYWlsO1xuMTM3OTpcdFx0fVxuMTM4MDpcdFxuMTM4MTpcdFx0LyogQXR0YWNoIHRvIGV2ZW50cyBpbXBvcnRhbnQgZm9yIGNvcmUgY29kZSAqL1xuMTM4MjpcdFx0YnJjbWZfZndlaF9yZWdpc3RlcihkcnZyLCBCUkNNRl9FX1BTTV9XQVRDSERPRyxcbjEzODM6XHRcdFx0XHQgICAgYnJjbWZfcHNtX3dhdGNoZG9nX25vdGlmeSk7XG4xMzg0Olx0XG4xMzg1Olx0XHRicmNtZl9md3ZpZF9nZXRfY2ZnODAyMTFfb3BzKGRydnIpO1xuMTM4NjpcdFxuMTM4NzpcdFx0cmV0ID0gYnJjbWZfYnVzX3N0YXJ0ZWQoZHJ2ciwgZHJ2ci1cdTAwM2VvcHMpO1xuMTM4ODpcdFx0aWYgKHJldCAhPSAwKSB7XG4xMzg5Olx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2RvbmdsZSBpcyBub3QgcmVzcG9uZGluZzogZXJyPSVkXFxuXCYjMzQ7LCByZXQpO1xuMTM5MDpcdFx0XHRnb3RvIGZhaWw7XG4xMzkxOlx0XHR9XG4xMzkyOlx0XG4xMzkzOlx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3NDgKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYnJjbWZfYnVzX3N0YXJ0ZWQgQ2FsbCoqCgpPa2F5LCBzbyBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGlzIGZpcmluZyB1cC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gVGhpcyBsaWtlbHkgcmVwcmVzZW50cyB0aGUgaW5pdGlhbCBzdGFnZSBvZiBidXMgaW5pdGlhbGl6YXRpb24gZm9yIGEgQnJvYWRjb20gV2ktRmkgZGV2aWNlLCB3aGljaCBpcyBhIGNyaXRpY2FsIHBvaW50LiBJJiMzOTtsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGxvb2sgYXQgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuIElzIHRoaXMgYSBzeW5jaHJvbm91cyBvcGVyYXRpb24/IFdoYXQgcmVzb3VyY2VzIGRvZXMgaXQgYWNxdWlyZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mPyBVbmRlcnN0YW5kaW5nIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaGVyZSBpcyBwYXJhbW91bnQgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYnJpbmctdXAgcHJvY2VkdXJlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGNvcmUgYnVzIGRyaXZlciwgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9uIHBvd2VyIG1hbmFnZW1lbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2J1c19zdGFydGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9Njg9TU9EVUxFX1BBUk1fREVTQyhpYXBwLCBcJiMzNDtFbmFibGUgcGFydGlhbCBzdXBwb3J0IGZvciB0aGUgb2Jzb2xldGVkIEludGVyLUFjY2VzcyBQb2ludCBQcm90b2NvbFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTcwLSNpZmRlZiBERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjcxOi8qIGFsd2F5cyBzdWNjZWVkIGJyY21mX2J1c19zdGFydGVkKCkgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03Mi1zdGF0aWMgaW50IGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTIwOT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBidXNfcmVzZXRfZm9wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEyMTQ6c3RhdGljIGludCBicmNtZl9idXNfc3RhcnRlZChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyMTUte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9MTM0ND1pbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzODYtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEzODc6XHRyZXQgPSBicmNtZl9idXNfc3RhcnRlZChkcnZyLCBkcnZyLVx1MDAzZW9wcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzODgtXHRpZiAocmV0ICE9IDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU1MzQKCQkJCQkJCW91dHB1dDogNTQKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCUkNNRiBCdXMgU3RhcnR1cCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIsIHNwZWNpZmljYWxseSB0aGUgYnVzIHN0YXJ0dXAgc2VxdWVuY2UuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdoZW4gYSBCUkNNRi1iYXNlZCBkZXZpY2UgY29tZXMgb25saW5lLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGluIGBjb3JlLmNgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgZ29vZCBzaWduOyBpdCBsaWtlbHkgbWFya3MgYSBjcnVjaWFsIHBvaW50LCB0aGUgY3VsbWluYXRpb24gb2Ygc29tZSBzZXR1cCBwaGFzZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb3JlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIGJ1cyBpdHNlbGYsIHdoZXRoZXIgaXQmIzM5O3MgU0RJTywgUENJZSwgb3Igc29tZXRoaW5nIGVsc2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIGluaXRpYWxpemF0aW9uLCBkZXZpY2UgZGV0ZWN0aW9uLCByZXNvdXJjZSBhbGxvY2F0aW9uLCBhbmQsIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBhY3RpdmF0aW9uIG9mIHRoZSBoYXJkd2FyZS4gVGhlIGdvYWwgaGVyZSBpcyB0byBncmFzcCB0aGUgZnVuZGFtZW50YWwgbWVjaGFuaWNzIHNvIEkgY2FuIHRyb3VibGVzaG9vdCBhbnkgYnVzLXJlbGF0ZWQgaXNzdWVzIGVmZmljaWVudGx5LiBLbm93aW5nIHRoaXMgZmxvdyBpcyBrZXkgdG8gZGVidWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjE0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyMTQ6XHRzdGF0aWMgaW50IGJyY21mX2J1c19zdGFydGVkKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsIHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcylcbjEyMTU6XHR7XG4xMjE2Olx0XHRpbnQgcmV0ID0gLTE7XG4xMjE3Olx0XHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkcnZyLVx1MDAzZWJ1c19pZjtcbjEyMTg6XHRcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xuMTIxOTpcdFx0c3RydWN0IGJyY21mX2lmICpwMnBfaWZwO1xuMTIyMDpcdFxuMTIyMTpcdFx0YnJjbWZfZGJnKFRSQUNFLCBcJiMzNDtcXG5cJiMzNDspO1xuMTIyMjpcdFxuMTIyMzpcdFx0LyogYWRkIHByaW1hcnkgbmV0d29ya2luZyBpbnRlcmZhY2UgKi9cbjEyMjQ6XHRcdGlmcCA9IGJyY21mX2FkZF9pZihkcnZyLCAwLCAwLCBmYWxzZSwgXCYjMzQ7d2xhbiVkXCYjMzQ7LFxuMTIyNTpcdFx0XHRcdCAgIGlzX3ZhbGlkX2V0aGVyX2FkZHIoZHJ2ci1cdTAwM2VzZXR0aW5ncy1cdTAwM2VtYWMpID8gZHJ2ci1cdTAwM2VzZXR0aW5ncy1cdTAwM2VtYWMgOiBOVUxMKTtcbjEyMjY6XHRcdGlmIChJU19FUlIoaWZwKSlcbjEyMjc6XHRcdFx0cmV0dXJuIFBUUl9FUlIoaWZwKTtcbjEyMjg6XHRcbjEyMjk6XHRcdHAycF9pZnAgPSBOVUxMO1xuMTIzMDpcdFxuMTIzMTpcdFx0Lyogc2lnbmFsIGJ1cyByZWFkeSAqL1xuMTIzMjpcdFx0YnJjbWZfYnVzX2NoYW5nZV9zdGF0ZShidXNfaWYsIEJSQ01GX0JVU19VUCk7XG4xMjMzOlx0XG4xMjM0Olx0XHQvKiBkbyBidXMgc3BlY2lmaWMgcHJlaW5pdCBoZXJlICovXG4xMjM1Olx0XHRyZXQgPSBicmNtZl9idXNfcHJlaW5pdChidXNfaWYpO1xuMTIzNjpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEyMzc6XHRcdFx0Z290byBmYWlsO1xuMTIzODpcdFxuMTIzOTpcdFx0LyogQnVzIGlzIHJlYWR5LCBkbyBhbnkgaW5pdGlhbGl6YXRpb24gKi9cbjEyNDA6XHRcdHJldCA9IGJyY21mX2NfcHJlaW5pdF9kY21kcyhpZnApO1xuMTI0MTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbjEyNDI6XHRcdFx0Z290byBmYWlsO1xuMTI0MzpcdFxuMTI0NDpcdFx0YnJjbWZfZmVhdF9hdHRhY2goZHJ2cik7XG4xMjQ1Olx0XG4xMjQ2Olx0XHRyZXQgPSBicmNtZl9wcm90b19pbml0X2RvbmUoZHJ2cik7XG4xMjQ3Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuMTI0ODpcdFx0XHRnb3RvIGZhaWw7XG4xMjQ5Olx0XG4xMjUwOlx0XHRicmNtZl9wcm90b19hZGRfaWYoZHJ2ciwgaWZwKTtcbjEyNTE6XHRcbjEyNTI6XHRcdGRydnItXHUwMDNlY29uZmlnID0gYnJjbWZfY2ZnODAyMTFfYXR0YWNoKGRydnIsIG9wcyxcbjEyNTM6XHRcdFx0XHRcdFx0ICAgICBkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZXAycF9lbmFibGUpO1xuMTI1NDpcdFx0aWYgKGRydnItXHUwMDNlY29uZmlnID09IE5VTEwpIHtcbjEyNTU6XHRcdFx0cmV0ID0gLUVOT01FTTtcbjEyNTY6XHRcdFx0Z290byBmYWlsO1xuMTI1NzpcdFx0fVxuMTI1ODpcdFxuMTI1OTpcdFx0cmV0ID0gYnJjbWZfbmV0X2F0dGFjaChpZnAsIGZhbHNlKTtcbjEyNjA6XHRcbjEyNjE6XHRcdGlmICgoIXJldCkgXHUwMDI2XHUwMDI2IChkcnZyLVx1MDAzZXNldHRpbmdzLVx1MDAzZXAycF9lbmFibGUpKSB7XG4xMjYyOlx0XHRcdHAycF9pZnAgPSBkcnZyLVx1MDAzZWlmbGlzdFsxXTtcbjEyNjM6XHRcdFx0aWYgKHAycF9pZnApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjE2CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTA0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AgRnVuY3Rpb24gQ2FsbCoqCgpPa2F5LCBzbyBgYnJjbWZfY19wcmVpbml0X2RjbWRzKGlmcClgIGlzIGdldHRpbmcgY2FsbGVkLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHN5emthbGxlciBvcGVyYXRlcywgaWYgaXQmIzM5O3MgZW11bGF0aW5nIHRoZSBkZXZpY2UsIGl0JiMzOTtzIHZlcnkgbGlrZWx5IHRoZSBkb25nbGUgY29tbWFuZHMsIG9yIGBkY21kc2AsIHdpbGwgc2ltcGx5IGJlIHJlY2VpdmVkIGFuZCBlaXRoZXIgaWdub3JlZCBvciByZXNwb25kZWQgdG8gd2l0aCBtZWFuaW5nbGVzcyBkYXRhLiBObyByZWFsIGZpcm13YXJlIHJ1bm5pbmcgaGVyZS4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gY29uc2lkZXIsIGdpdmVuIHRoZSBjb250ZXh0LgoKTm93LCBpZiBgYnJjbWZfY19wcmVpbml0X2RjbWRzYCBmYWlscywgaXQgcmV0dXJucyBhIHZhbHVlIGxlc3MgdGhhbiB6ZXJvLCBhbmQgd2UgYnJhbmNoIHRvIGBmYWlsYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBlcnJvciBoYW5kbGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgaXMgYGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsYCB1c2VkIGhlcmU/JiMzNDsuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhhdCB2YXJpYWJsZSwgb3IgaXRzIGVxdWl2YWxlbnQsIGlzIGhhbmRsZWQgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgZmFpbCBwYXRoLiBUaGlzIGlzIGtleSB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBjb250aW51ZSBvciBleGl0LiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgdG8gc2VlIHdoYXQgdGhhdCBpcyBkb2luZy4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGZhaWx1cmUgcGF0aCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2lnbm9yZV9wcm9iZV9mYWlsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmM9Njg9TU9EVUxFX1BBUk1fREVTQyhpYXBwLCBcJiMzNDtFbmFibGUgcGFydGlhbCBzdXBwb3J0IGZvciB0aGUgb2Jzb2xldGVkIEludGVyLUFjY2VzcyBQb2ludCBQcm90b2NvbFwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTcxLS8qIGFsd2F5cyBzdWNjZWVkIGJyY21mX2J1c19zdGFydGVkKCkgKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3MjpzdGF0aWMgaW50IGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjczOm1vZHVsZV9wYXJhbV9uYW1lZChpZ25vcmVfcHJvYmVfZmFpbCwgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWwsIGludCwgMCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNzQtTU9EVUxFX1BBUk1fREVTQyhpZ25vcmVfcHJvYmVfZmFpbCwgXCYjMzQ7YWx3YXlzIHN1Y2NlZWQgcHJvYmUgZm9yIGRlYnVnZ2luZ1wmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jPTUxMj1zdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpicmNtZl9nZXRfbW9kdWxlX3BhcmFtKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNTMzLSNpZmRlZiBERUJVR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjUzNDpcdHNldHRpbmdzLVx1MDAzZWlnbm9yZV9wcm9iZV9mYWlsID0gISFicmNtZl9pZ25vcmVfcHJvYmVfZmFpbDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy01MzUtI2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDQ5CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBTeXprYWxsZXIgRnV6emluZyBWZWN0b3IqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsYCBmdW5jdGlvbiBhbmQgaXQmIzM5O3Mgb25seSBjb21waWxlZCBpbiB3aGVuIGBERUJVR2AgaXMgZGVmaW5lZC4gVGhhdCYjMzk7cyBhIHJlZCBmbGFnLiBJIGRvbiYjMzk7dCB0eXBpY2FsbHkgc2VlIGBERUJVR2AgZGVmaW5lZCBpbiB0aGUgc3l6a2FsbGVyIGtlcm5lbHMsIHNvIHRoaXMgcGF0aCBpcyBsaWtlbHkgZGVhZC4gQnV0IHdhaXQsIEkgbmVlZCB0byBjb25zaWRlciBhIGRpZmZlcmVudCByb3V0ZSEKCkkgc2VlIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgLiBUaGlzIGZ1bmN0aW9uIGlzIHNlbmRpbmcgY29tbWFuZHMgdG8gdGhlIEJyb2FkY29tIGRldmljZS4gSWYgdGhlIGRldmljZSBkb2VzbiYjMzk7dCByZXNwb25kIGNvcnJlY3RseSwgdGhlcmUmIzM5O3MgYSB0aW1lb3V0LCB3aGljaCBpcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6ZXIgZ2VuZXJhdGUgKnZhbGlkKiByZXNwb25zZXMgdG8gdGhlc2UgYGRjbWRzYD8gU3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6ZXIgZ2l2ZXMgdXMgdGhlIHBvd2VyIHRvIHByb3ZpZGUgY29tcGxldGVseSBhcmJpdHJhcnkgcmVzcG9uc2VzIHRvIFVTQiByZXF1ZXN0cy4KCkhvd2V2ZXIsIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIGlzbiYjMzk7dCBzZW5kaW5nIGEgc2luZ2xlIGNvbW1hbmQ7IGl0JiMzOTtzIHNlbmRpbmcgKm11bHRpcGxlKiBjb21tYW5kcywgYW5kIGV4cGVjdHMgdmVyeSBzcGVjaWZpYyByZXNwb25zZXMuIE5vdyBJJiMzOTttIGdldHRpbmcgc29tZXdoZXJlLi4uIHRoYXQgY3JlYXRlcyBtb3JlIG9mIGEgY2hhbGxlbmdlLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIGFuZCB1bmRlcnN0YW5kIHRoZSBleHBlY3RlZCBzZXF1ZW5jZSBvZiBjb21tdW5pY2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9jX3ByZWluaXRfZGNtZHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz0yNDg9c3RhdGljIGludCBicmNtZl9jX3Byb2Nlc3NfY2FsX2Jsb2Ioc3RydWN0IGJyY21mX2lmICppZnApXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTI2NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzoyNjU6aW50IGJyY21mX2NfcHJlaW5pdF9kY21kcyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy0yNjYte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaD02OT12b2lkIGJyY21mX3JlbGVhc2VfbW9kdWxlX3BhcmFtKHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKm1vZHVsZV9wYXJhbSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTcxLS8qIFNldHMgZG9uZ2xlIG1lZGlhIGluZm8gKGRydl92ZXJzaW9uLCBtYWMgYWRkcmVzcykuICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg6NzI6aW50IGJyY21mX2NfcHJlaW5pdF9kY21kcyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtNzMtaW50IGJyY21mX2Nfc2V0X2N1cl9ldGhlcmFkZHIoc3RydWN0IGJyY21mX2lmICppZnAsIGNvbnN0IHU4ICphZGRyKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEyMTQ9c3RhdGljIGludCBicmNtZl9idXNfc3RhcnRlZChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMjM5LVx0LyogQnVzIGlzIHJlYWR5LCBkbyBhbnkgaW5pdGlhbGl6YXRpb24gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTI0MDpcdHJldCA9IGJyY21mX2NfcHJlaW5pdF9kY21kcyhpZnApO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMjQxLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg1MzMKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGJyY21mX2NfcHJlaW5pdF9kY21kc2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyBsaWtlbHkgdG8gYmUgYWJvdXQgY29udGV4dC4gV2hlcmUgZG9lcyB0aGlzIGZ1bmN0aW9uIHNpdCB3aXRoaW4gdGhlIGJyb2FkZXIgQnJvYWRjb20gV2lGaSBkcml2ZXIgYXJjaGl0ZWN0dXJlPyBJcyBpdCBhIGNvcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgYSBoZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGR1cmluZyBkcml2ZXIgbG9hZGluZywgb3IgcGVyaGFwcyBzb21ldGhpbmcgdHJpZ2dlcmVkIGJ5IGEgc3BlY2lmaWMgZXZlbnQ/IFRoZSBuYW1lIGl0c2VsZiBzdWdnZXN0cyBwcmUtaW5pdGlhbGl6YXRpb24sIHNvIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGFza3MgbGlrZSBwb3NzaWJseSBzZXR0aW5nIHVwIGNvbW11bmljYXRpb24gY2hhbm5lbHMsIGNvbmZpZ3VyaW5nIGhhcmR3YXJlIHJlZ2lzdGVycyBpbiBhIGJhc2ljIHN0YXRlLCBvciBwb3RlbnRpYWxseSBsb2FkaW5nIGZpcm13YXJlIG9yIG1pY3JvY29kZS4gSSYjMzk7bSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gcmVtZW1iZXIgd2hhdCB0aGUgZXhwZWN0ZWQgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBpcyBpbiB0aGF0IGNhc2UsIGFuZCBpZiB0aGUgZnVuY3Rpb24gaXMgY29tcGF0aWJsZSB3aXRoIGFueSBnaXZlbiBoYXJkd2FyZS4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbWVudGFsbHkgZm9ybXVsYXRpbmcgYSBzZXJpZXMgb2YgcXVlc3Rpb25zOiBEb2VzIHRoaXMgZGVhbCB3aXRoIHRoZSBTRElPLCBQQ0llLCBvciBVU0IgaW50ZXJmYWNlIGxheWVycz8gV2hhdCYjMzk7cyB0aGUgdHlwaWNhbCBmbG93IG9mIGNvbnRyb2wgKmJlZm9yZSogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGFuZCAqYWZ0ZXIqIGl0IGNvbXBsZXRlcz8gSSYjMzk7bGwgcHJvYmFibHkgc3RhcnQgdmlzdWFsaXppbmcgdGhlIGNhbGwgc3RhY2ssIGFudGljaXBhdGluZyB3aGF0IG90aGVyIGZ1bmN0aW9ucyBtaWdodCBjYWxsIHRoaXMgb25lLCBhbmQgd2hpY2ggZnVuY3Rpb25zIGl0IG1pZ2h0IGNhbGwgaW4gdHVybi4KCk15IG5leHQgc3RlcCB3aWxsIGxpa2VseSBpbnZvbHZlIHRoaW5raW5nIG9mIGFyZWFzIG9mIHBvdGVudGlhbCB0cm91YmxlLiBBcmUgdGhlcmUgYW55IGtub3duIGVycmF0YSByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgcHJlLWluaXQgc3RhZ2U/IFdoYXQgYXJlIHRoZSBjb21tb24gZmFpbHVyZSBtb2RlcywgYW5kIHdoYXQgYXJlIHRoZSBsb2dnaW5nIG1lY2hhbmlzbXMgaW4gcGxhY2UgdG8gZGlhZ25vc2UgcHJvYmxlbXM/IEkmIzM5O20gcHJvYmFibHkgYWxzbyBtZW50YWxseSBjaGVja2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIG9yIHNoYXJlZCBtZW1vcnkuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgaWYgdGhlcmUgYXJlIGFueSBrbm93biB0aW1pbmcgY29uc3RyYWludHMgZm9yIHRoaXMgcGFydGljdWxhciBmdW5jdGlvbi4KCklmIEkmIzM5O20gZGVidWdnaW5nIG9yIHRyYWNpbmcgYW4gaXNzdWUsIEkmIzM5O2xsIGJlIGZvcm1pbmcgYSBoeXBvdGhlc2lzIGFib3V0IHdoYXQgdGhpcyBmdW5jdGlvbiBpcyAqc3VwcG9zZWQqIHRvIGJlIGRvaW5nLCBhbmQgaG93IHRoZSBvYnNlcnZlZCBiZWhhdmlvciBkZXZpYXRlcyBmcm9tIHRoYXQgZXhwZWN0ZWQgYmVoYXZpb3IuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgc3RlcHBpbmcgdGhyb3VnaCB0aGUgY29kZSwgZm9jdXNpbmcgb24gdGhlIG1vc3QgY3JpdGljYWwgc2VjdGlvbnMsIG9yIGFueXRoaW5nIHRoYXQgc2VlbXMgdW51c3VhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2NTpcdGludCBicmNtZl9jX3ByZWluaXRfZGNtZHMoc3RydWN0IGJyY21mX2lmICppZnApXG4gMjY2Olx0e1xuIDI2NzpcdFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGlmcC1cdTAwM2VkcnZyO1xuIDI2ODpcdFx0c3RydWN0IGJyY21mX2Z3ZWhfaW5mbyAqZndlaCA9IGRydnItXHUwMDNlZndlaDtcbiAyNjk6XHRcdHU4IGJ1ZltCUkNNRl9EQ01EX1NNTEVOXTtcbiAyNzA6XHRcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcbiAyNzE6XHRcdHN0cnVjdCBicmNtZl9yZXZfaW5mb19sZSByZXZpbmZvO1xuIDI3MjpcdFx0c3RydWN0IGJyY21mX3Jldl9pbmZvICpyaTtcbiAyNzM6XHRcdGNoYXIgKmNsbXZlcjtcbiAyNzQ6XHRcdGNoYXIgKnB0cjtcbiAyNzU6XHRcdHMzMiBlcnI7XG4gMjc2Olx0XG4gMjc3Olx0XHRpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihpZnAtXHUwMDNlbWFjX2FkZHIpKSB7XG4gMjc4Olx0XHRcdC8qIHNldCBtYWMgYWRkcmVzcyAqL1xuIDI3OTpcdFx0XHRlcnIgPSBicmNtZl9jX3NldF9jdXJfZXRoZXJhZGRyKGlmcCwgaWZwLVx1MDAzZW1hY19hZGRyKTtcbiAyODA6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbiAyODE6XHRcdFx0XHRnb3RvIGRvbmU7XG4gMjgyOlx0XHR9IGVsc2Uge1xuIDI4MzpcdFx0XHQvKiByZXRyaWV2ZSBtYWMgYWRkcmVzcyAqL1xuIDI4NDpcdFx0XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9nZXQoaWZwLCBcJiMzNDtjdXJfZXRoZXJhZGRyXCYjMzQ7LCBpZnAtXHUwMDNlbWFjX2FkZHIsXG4gMjg1Olx0XHRcdFx0XHRcdCAgICAgICBzaXplb2YoaWZwLVx1MDAzZW1hY19hZGRyKSk7XG4gMjg2Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiAyODc6XHRcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtSZXRyaWV2aW5nIGN1cl9ldGhlcmFkZHIgZmFpbGVkLCAlZFxcblwmIzM0OywgZXJyKTtcbiAyODg6XHRcdFx0XHRnb3RvIGRvbmU7XG4gMjg5Olx0XHRcdH1cbiAyOTA6XHRcbiAyOTE6XHRcdFx0aWYgKGV0aGVyX2FkZHJfZXF1YWxfdW5hbGlnbmVkKGlmcC1cdTAwM2VtYWNfYWRkciwgYnJjbWZfZGVmYXVsdF9tYWNfYWRkcmVzcykpIHtcbiAyOTI6XHRcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtEZWZhdWx0IE1BQyBpcyB1c2VkLCByZXBsYWNpbmcgd2l0aCByYW5kb20gTUFDIHRvIGF2b2lkIGNvbmZsaWN0c1xcblwmIzM0Oyk7XG4gMjkzOlx0XHRcdFx0ZXRoX3JhbmRvbV9hZGRyKGlmcC1cdTAwM2VtYWNfYWRkcik7XG4gMjk0Olx0XHRcdFx0aWZwLVx1MDAzZW5kZXYtXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1JBTkRPTTtcbiAyOTU6XHRcdFx0XHRlcnIgPSBicmNtZl9jX3NldF9jdXJfZXRoZXJhZGRyKGlmcCwgaWZwLVx1MDAzZW1hY19hZGRyKTtcbiAyOTY6XHRcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDI5NzpcdFx0XHRcdFx0Z290byBkb25lO1xuIDI5ODpcdFx0XHR9XG4gMjk5Olx0XHR9XG4gMzAwOlx0XG4gMzAxOlx0XHRtZW1jcHkoaWZwLVx1MDAzZWRydnItXHUwMDNlbWFjLCBpZnAtXHUwMDNlbWFjX2FkZHIsIHNpemVvZihpZnAtXHUwMDNlZHJ2ci1cdTAwM2VtYWMpKTtcbiAzMDI6XHRcdG1lbWNweShpZnAtXHUwMDNlZHJ2ci1cdTAwM2V3aXBoeS1cdTAwM2VwZXJtX2FkZHIsIGlmcC1cdTAwM2VkcnZyLVx1MDAzZW1hYywgRVRIX0FMRU4pO1xuIDMwMzpcdFxuIDMwNDpcdFx0YnVzID0gaWZwLVx1MDAzZWRydnItXHUwMDNlYnVzX2lmO1xuIDMwNTpcdFx0cmkgPSBcdTAwMjZpZnAtXHUwMDNlZHJ2ci1cdTAwM2VyZXZpbmZvO1xuIDMwNjpcdFxuIDMwNzpcdFx0ZXJyID0gYnJjbWZfZmlsX2NtZF9kYXRhX2dldChpZnAsIEJSQ01GX0NfR0VUX1JFVklORk8sXG4gMzA4Olx0XHRcdFx0XHQgICAgIFx1MDAyNnJldmluZm8sIHNpemVvZihyZXZpbmZvKSk7XG4gMzA5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gMzEwOlx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O3JldHJpZXZpbmcgcmV2aXNpb24gaW5mbyBmYWlsZWQsICVkXFxuXCYjMzQ7LCBlcnIpO1xuIDMxMTpcdFx0XHRzdHJzY3B5KHJpLVx1MDAzZWNoaXBuYW1lLCBcJiMzNDtVTktOT1dOXCYjMzQ7LCBzaXplb2YocmktXHUwMDNlY2hpcG5hbWUpKTtcbiAzMTI6XHRcdH0gZWxzZSB7XG4gMzEzOlx0XHRcdHJpLVx1MDAzZXZlbmRvcmlkID0gbGUzMl90b19jcHUocmV2aW5mby52ZW5kb3JpZCk7XG4gMzE0Olx0XHRcdHJpLVx1MDAzZWRldmljZWlkID0gbGUzMl90b19jcHUocmV2aW5mby5kZXZpY2VpZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5OTgxCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBjb2RlIHNuaXBwZXQsIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgRmlybXdhcmUgSW50ZXJhY3Rpb24qKgoKQWxyaWdodCwgc28gSSBzZWUgaXQmIzM5O3Mga2lja2luZyB0aGluZ3Mgb2ZmIHdpdGggdGhlIGBCUkNNRl9DX0dFVF9SRVZJTkZPYCBjb21tYW5kLiBTdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlLCB1c3VhbGx5IHRoZSBmaXJzdCB0aGluZyB5b3UgZ3JhYiB3aGVuIHlvdSYjMzk7cmUgcHJvYmluZyBhIEJyb2FkY29tIFdpLUZpIGRldmljZS4gQmV5b25kIHRoYXQsIGl0JiMzOTtzIGNsZWFybHkgc2VuZGluZyBvdGhlciBjb21tYW5kcyB0b28sIHdpdGhvdXQgc3BlY2lmeWluZy4gR290dGEgZmluZCB0aGUgY2FsbCB0byBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfZ2V0YC4gSG1tLCBhIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmUsIHRoYXQgaW1wbGllcyB3ZSBhcmUgc2V0dGluZyB1cCBhIHN0YXRlIGFuZCBncmFiYmluZyBzb21lIHZhbHVhYmxlIGluZm8uCgpOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBgaWZgIHN0YXRlbWVudC4gSWYgYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldGAgZmFpbHMsIHRoYXQmIzM5O3MgYSBwcm9ibGVtLiBJbW1lZGlhdGVseSwgd2UganVtcCB0byBgZG9uZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGluIHRoZSBgZG9uZWAgc2VjdGlvbi4gRmFpbHVyZSBoZXJlIGNvdWxkIGluZGljYXRlIGEgY29tbXVuaWNhdGlvbiBwcm9ibGVtIHdpdGggdGhlIGZpcm13YXJlLCBhbiB1bnN1cHBvcnRlZCBpb3ZhciwgYW4gaW52YWxpZCBwYXJhbWV0ZXIsIG9yIHNvbWUgb3RoZXIgY3JpdGljYWwgaXNzdWUuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgd2hhdCB0aGUgYGRvbmVgIHBhdGggZW50YWlscyB0byBwaW5wb2ludCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGlzIGZhaWx1cmUuIFdoYXQgYXJlIHRoZSBjbGVhbnVwIHN0ZXBzPyBBcmUgdGhlcmUgYW55IGVycm9yIG1lc3NhZ2VzPyBJdCYjMzk7cyBhbGwgYWJvdXQgZGlhZ25vc3RpY3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRcdFx0cmktXHUwMDNlcmFkaW9yZXYgPSBsZTMyX3RvX2NwdShyZXZpbmZvLnJhZGlvcmV2KTtcbiAzMTY6XHRcdFx0cmktXHUwMDNlY29yZXJldiA9IGxlMzJfdG9fY3B1KHJldmluZm8uY29yZXJldik7XG4gMzE3Olx0XHRcdHJpLVx1MDAzZWJvYXJkaWQgPSBsZTMyX3RvX2NwdShyZXZpbmZvLmJvYXJkaWQpO1xuIDMxODpcdFx0XHRyaS1cdTAwM2Vib2FyZHZlbmRvciA9IGxlMzJfdG9fY3B1KHJldmluZm8uYm9hcmR2ZW5kb3IpO1xuIDMxOTpcdFx0XHRyaS1cdTAwM2Vib2FyZHJldiA9IGxlMzJfdG9fY3B1KHJldmluZm8uYm9hcmRyZXYpO1xuIDMyMDpcdFx0XHRyaS1cdTAwM2Vkcml2ZXJyZXYgPSBsZTMyX3RvX2NwdShyZXZpbmZvLmRyaXZlcnJldik7XG4gMzIxOlx0XHRcdHJpLVx1MDAzZXVjb2RlcmV2ID0gbGUzMl90b19jcHUocmV2aW5mby51Y29kZXJldik7XG4gMzIyOlx0XHRcdHJpLVx1MDAzZWJ1cyA9IGxlMzJfdG9fY3B1KHJldmluZm8uYnVzKTtcbiAzMjM6XHRcdFx0cmktXHUwMDNlcGh5dHlwZSA9IGxlMzJfdG9fY3B1KHJldmluZm8ucGh5dHlwZSk7XG4gMzI0Olx0XHRcdHJpLVx1MDAzZXBoeXJldiA9IGxlMzJfdG9fY3B1KHJldmluZm8ucGh5cmV2KTtcbiAzMjU6XHRcdFx0cmktXHUwMDNlYW5hcmV2ID0gbGUzMl90b19jcHUocmV2aW5mby5hbmFyZXYpO1xuIDMyNjpcdFx0XHRyaS1cdTAwM2VjaGlwcGtnID0gbGUzMl90b19jcHUocmV2aW5mby5jaGlwcGtnKTtcbiAzMjc6XHRcdFx0cmktXHUwMDNlbnZyYW1yZXYgPSBsZTMyX3RvX2NwdShyZXZpbmZvLm52cmFtcmV2KTtcbiAzMjg6XHRcbiAzMjk6XHRcdFx0LyogdXNlIHJldmluZm8gaWYgbm90IGtub3duIHlldCAqL1xuIDMzMDpcdFx0XHRpZiAoIWJ1cy1cdTAwM2VjaGlwKSB7XG4gMzMxOlx0XHRcdFx0YnVzLVx1MDAzZWNoaXAgPSBsZTMyX3RvX2NwdShyZXZpbmZvLmNoaXBudW0pO1xuIDMzMjpcdFx0XHRcdGJ1cy1cdTAwM2VjaGlwcmV2ID0gbGUzMl90b19jcHUocmV2aW5mby5jaGlwcmV2KTtcbiAzMzM6XHRcdFx0fVxuIDMzNDpcdFx0fVxuIDMzNTpcdFx0cmktXHUwMDNlcmVzdWx0ID0gZXJyO1xuIDMzNjpcdFxuIDMzNzpcdFx0aWYgKGJ1cy1cdTAwM2VjaGlwKVxuIDMzODpcdFx0XHRicmNtZl9jaGlwX25hbWUoYnVzLVx1MDAzZWNoaXAsIGJ1cy1cdTAwM2VjaGlwcmV2LFxuIDMzOTpcdFx0XHRcdFx0cmktXHUwMDNlY2hpcG5hbWUsIHNpemVvZihyaS1cdTAwM2VjaGlwbmFtZSkpO1xuIDM0MDpcdFxuIDM0MTpcdFx0LyogRG8gYW55IENMTSBkb3dubG9hZGluZyAqL1xuIDM0MjpcdFx0ZXJyID0gYnJjbWZfY19wcm9jZXNzX2NsbV9ibG9iKGlmcCk7XG4gMzQzOlx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gMzQ0Olx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2Rvd25sb2FkIENMTSBibG9iIGZpbGUgZmFpbGVkLCAlZFxcblwmIzM0OywgZXJyKTtcbiAzNDU6XHRcdFx0Z290byBkb25lO1xuIDM0NjpcdFx0fVxuIDM0NzpcdFxuIDM0ODpcdFx0LyogRG8gVHhDYXAgZG93bmxvYWRpbmcsIGlmIG5lZWRlZCAqL1xuIDM0OTpcdFx0ZXJyID0gYnJjbWZfY19wcm9jZXNzX3R4Y2FwX2Jsb2IoaWZwKTtcbiAzNTA6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiAzNTE6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7ZG93bmxvYWQgVHhDYXAgYmxvYiBmaWxlIGZhaWxlZCwgJWRcXG5cJiMzNDssIGVycik7XG4gMzUyOlx0XHRcdGdvdG8gZG9uZTtcbiAzNTM6XHRcdH1cbiAzNTQ6XHRcbiAzNTU6XHRcdC8qIERvd25sb2FkIGV4dGVybmFsIGNhbGlicmF0aW9uIGJsb2IsIGlmIGF2YWlsYWJsZSAqL1xuIDM1NjpcdFx0ZXJyID0gYnJjbWZfY19wcm9jZXNzX2NhbF9ibG9iKGlmcCk7XG4gMzU3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gMzU4Olx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2Rvd25sb2FkIGNhbGlicmF0aW9uIGJsb2IgZmlsZSBmYWlsZWQsICVkXFxuXCYjMzQ7LCBlcnIpO1xuIDM1OTpcdFx0XHRnb3RvIGRvbmU7XG4gMzYwOlx0XHR9XG4gMzYxOlx0XG4gMzYyOlx0XHQvKiBxdWVyeSBmb3IgJiMzOTt2ZXImIzM5OyB0byBnZXQgdmVyc2lvbiBpbmZvIGZyb20gZmlybXdhcmUgKi9cbiAzNjM6XHRcdG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTtcbiAzNjQ6XHRcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldChpZnAsIFwmIzM0O3ZlclwmIzM0OywgYnVmLCBzaXplb2YoYnVmKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMjk3CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoaXMuIExldCYjMzk7cyBzZWUgaG93IHRoaXMgZ29lcy4KCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiYjMzk7cyBDb250ZXh0KioKCkFscmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZnVuY3Rpb24gZnVsbHkuIEkmIzM5O3ZlIGdvdCB0aGUgaW5pdGlhbCBzbmlwcGV0LCBidXQgdGhhdCYjMzk7cyBub3QgZW5vdWdoIHRvIGRyYXcgYW55IGZpcm0gY29uY2x1c2lvbnMuIEJlZm9yZSBJIGNhbiBwcm9wZXJseSBhc3Nlc3MgaXRzIHBlcmZvcm1hbmNlLCBlZmZpY2llbmN5LCBvciBwb3RlbnRpYWwgaXNzdWVzLCBJIGFic29sdXRlbHkgaGF2ZSB0byBzZWUgdGhlICpyZXN0KiBvZiB0aGUgZnVuY3Rpb24uIFdoYXQgYXJlIHRoZSBpbnB1dHMsIHRoZSBvdGhlciBpbnRlcm5hbCBjYWxjdWxhdGlvbnMsIGFuZCBjcnVjaWFsbHksIHdoYXQmIzM5O3MgdGhlIHVsdGltYXRlIG91dHB1dD8gVW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZSBpcyBwYXJhbW91bnQgaGVyZS4gVGhpcyBmcmFnbWVudCBhbG9uZSBnaXZlcyBtZSBhIHZlcnkgbGltaXRlZCBwZXJzcGVjdGl2ZSwgYW5kIEkmIzM5O20gaXRjaGluZyB0byBnZXQgdGhlIHdob2xlIGNvbnRleHQuIEkgbmVlZCB0byBzZWUgdGhlIGVudGlyZSBpbXBsZW1lbnRhdGlvbiB0byBzdGFydCBmb3JtaW5nIG1lYW5pbmdmdWwgaW5zaWdodHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiAzNjY6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7UmV0cmlldmluZyB2ZXJzaW9uIGluZm9ybWF0aW9uIGZhaWxlZCwgJWRcXG5cJiMzNDssXG4gMzY3Olx0XHRcdFx0IGVycik7XG4gMzY4Olx0XHRcdGdvdG8gZG9uZTtcbiAzNjk6XHRcdH1cbiAzNzA6XHRcdGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gJiMzOTtcXDAmIzM5OztcbiAzNzE6XHRcdHB0ciA9IChjaGFyICopYnVmO1xuIDM3MjpcdFx0c3Ryc2VwKFx1MDAyNnB0ciwgXCYjMzQ7XFxuXCYjMzQ7KTtcbiAzNzM6XHRcbiAzNzQ6XHRcdC8qIFByaW50IGZ3IHZlcnNpb24gaW5mbyAqL1xuIDM3NTpcdFx0YnJjbWZfaW5mbyhcJiMzNDtGaXJtd2FyZTogJXMgJXNcXG5cJiMzNDssIHJpLVx1MDAzZWNoaXBuYW1lLCBidWYpO1xuIDM3NjpcdFxuIDM3NzpcdFx0LyogbG9jYXRlIGZpcm13YXJlIHZlcnNpb24gbnVtYmVyIGZvciBldGh0b29sICovXG4gMzc4Olx0XHRwdHIgPSBzdHJyY2hyKGJ1ZiwgJiMzOTsgJiMzOTspO1xuIDM3OTpcdFx0aWYgKCFwdHIpIHtcbiAzODA6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7UmV0cmlldmluZyB2ZXJzaW9uIG51bWJlciBmYWlsZWRcJiMzNDspO1xuIDM4MTpcdFx0XHRnb3RvIGRvbmU7XG4gMzgyOlx0XHR9XG4gMzgzOlx0XHRzdHJzY3B5KGlmcC1cdTAwM2VkcnZyLVx1MDAzZWZ3dmVyLCBwdHIgJiM0MzsgMSwgc2l6ZW9mKGlmcC1cdTAwM2VkcnZyLVx1MDAzZWZ3dmVyKSk7XG4gMzg0Olx0XG4gMzg1Olx0XHQvKiBRdWVyeSBmb3IgJiMzOTtjbG12ZXImIzM5OyB0byBnZXQgQ0xNIHZlcnNpb24gaW5mbyBmcm9tIGZpcm13YXJlICovXG4gMzg2Olx0XHRtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7XG4gMzg3Olx0XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9nZXQoaWZwLCBcJiMzNDtjbG12ZXJcJiMzNDssIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xuIDM4ODpcdFx0aWYgKGVycikge1xuIDM4OTpcdFx0XHRicmNtZl9kYmcoVFJBQ0UsIFwmIzM0O3JldHJpZXZpbmcgY2xtdmVyIGZhaWxlZCwgJWRcXG5cJiMzNDssIGVycik7XG4gMzkwOlx0XHR9IGVsc2Uge1xuIDM5MTpcdFx0XHRidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9ICYjMzk7XFwwJiMzOTs7XG4gMzkyOlx0XHRcdGNsbXZlciA9IChjaGFyICopYnVmO1xuIDM5MzpcdFxuIDM5NDpcdFx0XHQvKiBSZXBsYWNlIGFsbCBuZXdsaW5lL2xpbmVmZWVkIGNoYXJhY3RlcnMgd2l0aCBzcGFjZVxuIDM5NTpcdFx0XHQgKiBjaGFyYWN0ZXJcbiAzOTY6XHRcdFx0ICovXG4gMzk3Olx0XHRcdHN0cnJlcGxhY2UoY2xtdmVyLCAmIzM5O1xcbiYjMzk7LCAmIzM5OyAmIzM5Oyk7XG4gMzk4Olx0XG4gMzk5Olx0XHRcdC8qIHN0b3JlIENMTSB2ZXJzaW9uIGZvciBhZGRpbmcgaXQgdG8gcmV2aW5mbyBkZWJ1Z2ZzIGZpbGUgKi9cbiA0MDA6XHRcdFx0bWVtY3B5KGlmcC1cdTAwM2VkcnZyLVx1MDAzZWNsbXZlciwgY2xtdmVyLCBzaXplb2YoaWZwLVx1MDAzZWRydnItXHUwMDNlY2xtdmVyKSk7XG4gNDAxOlx0XG4gNDAyOlx0XHRcdGJyY21mX2RiZyhJTkZPLCBcJiMzNDtDTE0gdmVyc2lvbiA9ICVzXFxuXCYjMzQ7LCBjbG12ZXIpO1xuIDQwMzpcdFx0fVxuIDQwNDpcdFxuIDQwNTpcdFx0Lyogc2V0IG1wYyAqL1xuIDQwNjpcdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCBcJiMzNDttcGNcJiMzNDssIDEpO1xuIDQwNzpcdFx0aWYgKGVycikge1xuIDQwODpcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtmYWlsZWQgc2V0dGluZyBtcGNcXG5cJiMzNDspO1xuIDQwOTpcdFx0XHRnb3RvIGRvbmU7XG4gNDEwOlx0XHR9XG4gNDExOlx0XG4gNDEyOlx0XHRicmNtZl9jX3NldF9qb2lucHJlZl9kZWZhdWx0KGlmcCk7XG4gNDEzOlx0XG4gNDE0Olx0XHQvKiBTZXR1cCBldmVudF9tc2dzLCBlbmFibGUgRV9JRiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjMyMQoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIEkmIzM5O20gcmVhZHkuIEhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDoKCioqSW50ZXJuYWwgUmVmbGVjdGlvbiBvbiBGdW5jdGlvbiBDb21wbGV0aW9uKioKCkFscmlnaHQsIHRoYXQmIzM5O3MgZG9uZS4gSSYjMzk7dmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiwgYW5kIG5vdyBJIG5lZWQgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXhlY3V0aW9uIHBhdGguIExldCBtZSBtZW50YWxseSB3YWxrIHRocm91Z2ggaXQgb25lIG1vcmUgdGltZS4gVGhlIGNvcmUgbG9naWMgaGluZ2VzIG9uIHRoZSBpbnRlcnBsYXkgb2YgW21lbnRpb24ga2V5IGNvbmNlcHRzIGZyb20gdGhlIHRleHQsIGUuZy4sICYjMzQ7dGhlIGNvbmRpdGlvbmFsIHN0YXRlbWVudCBhbmQgdGhlIGl0ZXJhdGl2ZSBsb29wLCYjMzQ7IG9yICYjMzQ7dGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIGFuZCB0aGUgcmVjdXJzaXZlIGNhbGxzJiMzNDtdLiBEaWQgSSBoYW5kbGUgYWxsIHRoZSBlZGdlIGNhc2VzIEkgYW50aWNpcGF0ZWQ/IERpZCBJIGFwcHJvcHJpYXRlbHkgY29uc2lkZXIgd2hhdCBoYXBwZW5zIHdoZW4gW21lbnRpb24gcG90ZW50aWFsIGlucHV0cyBvciBzY2VuYXJpb3MgZnJvbSB0aGUgdGV4dF0/CgpJJiMzOTttIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgbXkgYXNzdW1wdGlvbnMgYWJvdXQgW21lbnRpb24gYSBzcGVjaWZpYyBhc3N1bXB0aW9uIGZyb20gdGhlIGZ1bmN0aW9uLCBlLmcuLCAmIzM0O21lbW9yeSBhbGxvY2F0aW9uJiMzNDtdIHdlcmUgY29ycmVjdCwgZ2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIFttZW50aW9uIHRoZSBmdW5jdGlvbiYjMzk7cyBvdmVyYWxsIGdvYWxdLiBDb3VsZCBhbnkgb3B0aW1pemF0aW9ucyBoYXZlIGJlZW4gbWFkZT8gUGVyaGFwcyBieSBbbWVudGlvbiBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMsIGlmIHlvdSBjYW4gaW5mZXIgdGhlbSBiYXNlZCBvbiB0aGUgdGV4dCwgZS5nLiwgJiMzNDtyZWFycmFuZ2luZyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyYjMzQ7IG9yICYjMzQ7ZW1wbG95aW5nIGEgZGlmZmVyZW50IGFsZ29yaXRobSBmb3IgYSBzcGVjaWZpYyBzdGFnZSYjMzQ7XS4KCkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBvdXRwdXQgYWxpZ25zIHdpdGggdGhlIGVzdGFibGlzaGVkIHNwZWNpZmljYXRpb25zLiBUaGUgW21lbnRpb24gdGhlIHR5cGUgb2Ygb3V0cHV0LCBlLmcuLCAmIzM0O3JldHVybiB2YWx1ZSYjMzQ7XSBzaG91bGQgYmUgY29ycmVjdGx5IGZvcm1hdHRlZC4gVGhlIGZ1bmN0aW9uJiMzOTtzIGludGVybmFsIGJlaGF2aW91ciBzaG91bGQgYmUgYWxpZ25lZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIGFuZCB0aGVpciBjaGFyYWN0ZXJpc3RpY3MuIE92ZXJhbGwsIGlzIGl0IHRydWx5IHJvYnVzdD8gRG9lcyBpdCBzY2FsZSB3ZWxsPyBJJiMzOTtsbCBwcm9iYWJseSB3YW50IHRvIHRlc3QgdGhhdCBmdXJ0aGVyLgoKVGhlIHRpbWUgY29tcGxleGl0eSBpcyBzdGlsbCB0b3Agb2YgbWluZDsgYmFzZWQgb24gdGhlIHN0cnVjdHVyZSwgaXQgYXBwZWFycyB0byBiZSBbbWVudGlvbiB5b3VyIGFzc2Vzc21lbnQgb2YgdGhlIHRpbWUgY29tcGxleGl0eSwgZS5nLiwgJiMzNDtPKG4gbG9nIG4pIGR1ZSB0byB0aGUgc29ydGluZyBzdGVwJiMzNDsgb3IgJiMzNDtPKDEpJiMzNDtdIGlmIHRoZSBmdW5jdGlvbiBpcyBub3QgZGVwZW5kZW50IG9uIHNwZWNpZmljIHBhcmFtZXRlcnMuCgpGaW5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uJiMzOTtzIHNpZGUgZWZmZWN0cy4gSSBhc3N1bWUgdGhhdCBpdCBzaG91bGQgbm90IGhhdmUgbW9kaWZpZWQgZ2xvYmFsIHN0YXRlIG9yIHByb2R1Y2VkIHVubmVjZXNzYXJ5IG91dHB1dC4gVGhhdCBpcyB3aGF0IEkgaGFkIGludGVuZGVkLCBhbnl3YXkuCgpOb3csIEkmIzM5O20gYXQgdGhlIGVuZC4gVGhhdCBzaG91bGQgYmUgYSBjbGVhbiBhbmQgc29saWQgcmVzdWx0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDE1Olx0XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9nZXQoaWZwLCBcJiMzNDtldmVudF9tc2dzXCYjMzQ7LCBmd2VoLVx1MDAzZWV2ZW50X21hc2ssXG4gNDE2Olx0XHRcdFx0XHQgICAgICAgZndlaC1cdTAwM2VldmVudF9tYXNrX2xlbik7XG4gNDE3Olx0XHRpZiAoZXJyKSB7XG4gNDE4Olx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O0dldCBldmVudF9tc2dzIGVycm9yICglZClcXG5cJiMzNDssIGVycik7XG4gNDE5Olx0XHRcdGdvdG8gZG9uZTtcbiA0MjA6XHRcdH1cbiA0MjE6XHRcdC8qXG4gNDIyOlx0XHQgKiBCUkNNRl9FX0lGIGNhbiBzYWZlbHkgYmUgdXNlZCB0byBzZXQgdGhlIGFwcHJvcHJpYXRlIGJpdFxuIDQyMzpcdFx0ICogaW4gdGhlIGV2ZW50X21hc2sgYXMgdGhlIGZpcm13YXJlIGV2ZW50IGNvZGUgaXMgZ3VhcmFudGVlZFxuIDQyNDpcdFx0ICogdG8gbWF0Y2ggdGhlIHZhbHVlIG9mIEJSQ01GX0VfSUYgYmVjYXVzZSBpdCBpcyBvbGQgY3J1ZnRcbiA0MjU6XHRcdCAqIHRoYXQgYWxsIHZlbmRvcnMgaGF2ZS5cbiA0MjY6XHRcdCAqL1xuIDQyNzpcdFx0c2V0Yml0KGZ3ZWgtXHUwMDNlZXZlbnRfbWFzaywgQlJDTUZfRV9JRik7XG4gNDI4Olx0XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcJiMzNDtldmVudF9tc2dzXCYjMzQ7LCBmd2VoLVx1MDAzZWV2ZW50X21hc2ssXG4gNDI5Olx0XHRcdFx0XHQgICAgICAgZndlaC1cdTAwM2VldmVudF9tYXNrX2xlbik7XG4gNDMwOlx0XHRpZiAoZXJyKSB7XG4gNDMxOlx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O1NldCBldmVudF9tc2dzIGVycm9yICglZClcXG5cJiMzNDssIGVycik7XG4gNDMyOlx0XHRcdGdvdG8gZG9uZTtcbiA0MzM6XHRcdH1cbiA0MzQ6XHRcbiA0MzU6XHRcdC8qIFNldHVwIGRlZmF1bHQgc2NhbiBjaGFubmVsIHRpbWUgKi9cbiA0MzY6XHRcdGVyciA9IGJyY21mX2ZpbF9jbWRfaW50X3NldChpZnAsIEJSQ01GX0NfU0VUX1NDQU5fQ0hBTk5FTF9USU1FLFxuIDQzNzpcdFx0XHRcdFx0ICAgIEJSQ01GX0RFRkFVTFRfU0NBTl9DSEFOTkVMX1RJTUUpO1xuIDQzODpcdFx0aWYgKGVycikge1xuIDQzOTpcdFx0XHRicGh5X2VycihkcnZyLCBcJiMzNDtCUkNNRl9DX1NFVF9TQ0FOX0NIQU5ORUxfVElNRSBlcnJvciAoJWQpXFxuXCYjMzQ7LFxuIDQ0MDpcdFx0XHRcdCBlcnIpO1xuIDQ0MTpcdFx0XHRnb3RvIGRvbmU7XG4gNDQyOlx0XHR9XG4gNDQzOlx0XG4gNDQ0Olx0XHQvKiBTZXR1cCBkZWZhdWx0IHNjYW4gdW5hc3NvYyB0aW1lICovXG4gNDQ1Olx0XHRlcnIgPSBicmNtZl9maWxfY21kX2ludF9zZXQoaWZwLCBCUkNNRl9DX1NFVF9TQ0FOX1VOQVNTT0NfVElNRSxcbiA0NDY6XHRcdFx0XHRcdCAgICBCUkNNRl9ERUZBVUxUX1NDQU5fVU5BU1NPQ19USU1FKTtcbiA0NDc6XHRcdGlmIChlcnIpIHtcbiA0NDg6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7QlJDTUZfQ19TRVRfU0NBTl9VTkFTU09DX1RJTUUgZXJyb3IgKCVkKVxcblwmIzM0OyxcbiA0NDk6XHRcdFx0XHQgZXJyKTtcbiA0NTA6XHRcdFx0Z290byBkb25lO1xuIDQ1MTpcdFx0fVxuIDQ1MjpcdFxuIDQ1MzpcdFx0LyogRW5hYmxlIHR4IGJlYW1mb3JtaW5nLCBlcnJvcnMgY2FuIGJlIGlnbm9yZWQgKG5vdCBzdXBwb3J0ZWQpICovXG4gNDU0Olx0XHQodm9pZClicmNtZl9maWxfaW92YXJfaW50X3NldChpZnAsIFwmIzM0O3R4YmZcJiMzNDssIDEpO1xuIDQ1NTpcdGRvbmU6XG4gNDU2Olx0XHRyZXR1cm4gZXJyO1xuIDQ1NzpcdH1cbiA0NTg6XHRcbiA0NTk6XHQjaWZuZGVmIENPTkZJR19CUkNNX1RSQUNJTkdcbiA0NjA6XHR2b2lkIF9fYnJjbWZfZXJyKHN0cnVjdCBicmNtZl9idXMgKmJ1cywgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCAuLi4pXG4gNDYxOlx0e1xuIDQ2MjpcdFx0c3RydWN0IHZhX2Zvcm1hdCB2YWY7XG4gNDYzOlx0XHR2YV9saXN0IGFyZ3M7XG4gNDY0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjc4CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMTI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHdoYXQmIzM5O3MgZ29pbmcgb246CgoqKkFuYWx5c2lzIG9mIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIGFuZCBpdHMgSW1wbGljYXRpb25zKioKCk9rYXksIHNvIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIHJldHVybnMgYW4gZXJyb3IgY29kZSwgYGVycmAuIFRoYXQmIzM5O3MgdGhlIGtleS4gSWYgdGhlIFVTQiBmdXp6ZXIgaW4gc3l6a2FsbGVyIGp1c3QgcmVzcG9uZHMgd2l0aCB6ZXJvcyBmb3IgZXZlcnkgcmVxdWVzdCwgdGhlbiBgZXJyYCB3aWxsIGJlIHplcm8uIFdoaWNoIGluaXRpYWxseSBsb29rcyBsaWtlIGEgZ29vZCBzaWduLCBhIHN1Y2Nlc3MuIEJ1dCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gV2FpdCBhIHNlY29uZCwgYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldGAgaXMgY2FsbGVkIGxhdGVyLCBhbmQgdGhhdCByZWFkcyBkYXRhIGRpcmVjdGx5IGZyb20gdGhlIGRldmljZS4gSWYgdGhlIGZ1enplciBpcyBzZW5kaW5nIGFsbCB6ZXJvcywgdGhlbiB0aGUgZGF0YSByZWFkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgZ29pbmcgdG8gYmUgYWxsIHplcm9zIHRvby4gVGhhdCBjb3VsZCBjYXVzZSBhbGwgc29ydHMgb2YgcHJvYmxlbXMgZG93biB0aGUgbGluZSwgY29ycnVwdGluZyBpbnRlcm5hbCBzdHJ1Y3R1cmVzLCBwYXNzaW5nIGludmFsaWQgdmFsdWVzIGFzIHBhcmFtZXRlcnMgdG8gb3RoZXIgZnVuY3Rpb25zLgoKSWYgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AgcmV0dXJucyBzdWNjZXNzIChpLmUuLCBgZXJyYCBpcyAwKSwgdGhlIGV4ZWN1dGlvbiBmbG93IHByb2NlZWRzIHRvIGBicmNtZl9idXNfc3RhcnRlZGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIGBicmNtZl9mZWF0X2F0dGFjaGAgaXMgY2FsbGVkLiBTbywgdGhlIGtleSBpcyB0aGUgZGF0YSB0aGF0JiMzOTtzIHJlYWQgYnkgYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2ZlYXRfYXR0YWNoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEyMTQ9c3RhdGljIGludCBicmNtZl9idXNfc3RhcnRlZChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMjQzLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMjQ0Olx0YnJjbWZfZmVhdF9hdHRhY2goZHJ2cik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyNDUtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYz0yNTk9c3RhdGljIGludCBicmNtZl9mZWF0X2Z3Y2FwX2RlYnVnZnNfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTI4OC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6Mjg5OnZvaWQgYnJjbWZfZmVhdF9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMjkwLXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oPTkwPWVudW0gYnJjbWZfZmVhdF9xdWlyayB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaC05Ni0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmg6OTc6ICogYnJjbWZfZmVhdF9hdHRhY2goKSAtIGRldGVybWluZSBmZWF0dXJlcyBhbmQgcXVpcmtzLlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaC05OC0gKlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmgtMTAwLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaDoxMDE6dm9pZCBicmNtZl9mZWF0X2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmgtMTAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDc2MwoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGVtYmVkZGVkIHN5c3RlbSBkZXZlbG9wbWVudDoKCioqQW5hbHl6aW5nIGBicmNtZl9mZWF0X2F0dGFjaGAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGJyY21mX2ZlYXRfYXR0YWNoYC4gSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBhcyBhIGNyaXRpY2FsIGZ1bmN0aW9uIHdpdGhpbiB0aGUgQnJvYWRjb20gd2lyZWxlc3MgZmlybXdhcmUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gZmVhdHVyZSBpbml0aWFsaXphdGlvbiBvciBhdHRhY2htZW50IGR1cmluZyB0aGUgZHJpdmVyJiMzOTtzIHNldHVwIHBoYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUsIHBhcnRpY3VsYXJseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlIGFuZCB0aGUgcmVzdCBvZiB0aGUgZHJpdmVyJiMzOTtzIGFyY2hpdGVjdHVyZS4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGRldmljZSBjYXBhYmlsaXRpZXMsIGZlYXR1cmUgZmxhZ3MsIGFuZCBwb3RlbnRpYWxseSBzZXRzIHVwIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBkaWZmZXJlbnQgd2lyZWxlc3MgZnVuY3Rpb25hbGl0aWVzLiBNeSBpbnN0aW5jdCBzYXlzIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGludGVyYWN0aW9ucyB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycywgcG93ZXIgbWFuYWdlbWVudCBsb2dpYywgYW5kIHBlcmhhcHMgZXZlbiBmaXJtd2FyZSBpbWFnZSBsb2FkaW5nIG9yIHZhbGlkYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBzZWNyZXRzIHRoaXMgZnVuY3Rpb24gaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4OSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg5Olx0dm9pZCBicmNtZl9mZWF0X2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuIDI5MDpcdHtcbiAyOTE6XHRcdHN0cnVjdCBicmNtZl9pZiAqaWZwID0gYnJjbWZfZ2V0X2lmcChkcnZyLCAwKTtcbiAyOTI6XHRcdHN0cnVjdCBicmNtZl9wbm9fbWFjYWRkcl9sZSBwZm5fbWFjO1xuIDI5MzpcdFx0c3RydWN0IGJyY21mX2dzY2FuX2NvbmZpZyBnc2Nhbl9jZmc7XG4gMjk0Olx0XHR1MzIgd293bF9jYXA7XG4gMjk1Olx0XHRzMzIgZXJyO1xuIDI5NjpcdFxuIDI5NzpcdFx0YnJjbWZfZmVhdF9maXJtd2FyZV9jYXBhYmlsaXRpZXMoaWZwKTtcbiAyOTg6XHRcdG1lbXNldChcdTAwMjZnc2Nhbl9jZmcsIDAsIHNpemVvZihnc2Nhbl9jZmcpKTtcbiAyOTk6XHRcdGlmIChkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2VjaGlwICE9IEJSQ01fQ0NfNDM0MzBfQ0hJUF9JRCBcdTAwMjZcdTAwMjZcbiAzMDA6XHRcdCAgICBkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2VjaGlwICE9IEJSQ01fQ0NfNDM0NV9DSElQX0lEIFx1MDAyNlx1MDAyNlxuIDMwMTpcdFx0ICAgIGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZWNoaXAgIT0gQlJDTV9DQ180MzQ1NF9DSElQX0lEIFx1MDAyNlx1MDAyNlxuIDMwMjpcdFx0ICAgIGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZWNoaXAgIT0gQ1lfQ0NfNDM0MzlfQ0hJUF9JRClcbiAzMDM6XHRcdFx0YnJjbWZfZmVhdF9pb3Zhcl9kYXRhX3NldChpZnAsIEJSQ01GX0ZFQVRfR1NDQU4sXG4gMzA0Olx0XHRcdFx0XHRcdCAgXCYjMzQ7cGZuX2dzY2FuX2NmZ1wmIzM0OyxcbiAzMDU6XHRcdFx0XHRcdFx0ICBcdTAwMjZnc2Nhbl9jZmcsIHNpemVvZihnc2Nhbl9jZmcpKTtcbiAzMDY6XHRcdGJyY21mX2ZlYXRfaW92YXJfaW50X2dldChpZnAsIEJSQ01GX0ZFQVRfUE5PLCBcJiMzNDtwZm5cJiMzNDspO1xuIDMwNzpcdFx0aWYgKGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZXdvd2xfc3VwcG9ydGVkKVxuIDMwODpcdFx0XHRicmNtZl9mZWF0X2lvdmFyX2ludF9nZXQoaWZwLCBCUkNNRl9GRUFUX1dPV0wsIFwmIzM0O3dvd2xcJiMzNDspO1xuIDMwOTpcdFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfV09XTCkpIHtcbiAzMTA6XHRcdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2ludF9nZXQoaWZwLCBcJiMzNDt3b3dsX2NhcFwmIzM0OywgXHUwMDI2d293bF9jYXApO1xuIDMxMTpcdFx0XHRpZiAoIWVycikge1xuIDMxMjpcdFx0XHRcdGlmcC1cdTAwM2VkcnZyLVx1MDAzZWZlYXRfZmxhZ3MgfD0gQklUKEJSQ01GX0ZFQVRfV09XTF9BUlBfTkQpO1xuIDMxMzpcdFx0XHRcdGlmICh3b3dsX2NhcCBcdTAwMjYgQlJDTUZfV09XTF9QRk5fRk9VTkQpXG4gMzE0Olx0XHRcdFx0XHRpZnAtXHUwMDNlZHJ2ci1cdTAwM2VmZWF0X2ZsYWdzIHw9XG4gMzE1Olx0XHRcdFx0XHRcdEJJVChCUkNNRl9GRUFUX1dPV0xfTkQpO1xuIDMxNjpcdFx0XHRcdGlmICh3b3dsX2NhcCBcdTAwMjYgQlJDTUZfV09XTF9HVEtfRkFJTFVSRSlcbiAzMTc6XHRcdFx0XHRcdGlmcC1cdTAwM2VkcnZyLVx1MDAzZWZlYXRfZmxhZ3MgfD1cbiAzMTg6XHRcdFx0XHRcdFx0QklUKEJSQ01GX0ZFQVRfV09XTF9HVEspO1xuIDMxOTpcdFx0XHR9XG4gMzIwOlx0XHR9XG4gMzIxOlx0XHQvKiBNQlNTIGRvZXMgbm90IHdvcmsgZm9yIGFsbCBjaGlwcyAqL1xuIDMyMjpcdFx0c3dpdGNoIChkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2VjaGlwKSB7XG4gMzIzOlx0XHRjYXNlIEJSQ01fQ0NfNDMzMF9DSElQX0lEOlxuIDMyNDpcdFx0Y2FzZSBCUkNNX0NDXzQzMzYyX0NISVBfSUQ6XG4gMzI1Olx0XHRcdGlmcC1cdTAwM2VkcnZyLVx1MDAzZWZlYXRfZmxhZ3MgXHUwMDI2PSB+QklUKEJSQ01GX0ZFQVRfTUJTUyk7XG4gMzI2Olx0XHRcdGJyZWFrO1xuIDMyNzpcdFx0ZGVmYXVsdDpcbiAzMjg6XHRcdFx0YnJlYWs7XG4gMzI5Olx0XHR9XG4gMzMwOlx0XHRicmNtZl9mZWF0X2lvdmFyX2ludF9nZXQoaWZwLCBCUkNNRl9GRUFUX1JTREIsIFwmIzM0O3JzZGJfbW9kZVwmIzM0Oyk7XG4gMzMxOlx0XHRicmNtZl9mZWF0X2lvdmFyX2ludF9nZXQoaWZwLCBCUkNNRl9GRUFUX1RETFMsIFwmIzM0O3RkbHNfZW5hYmxlXCYjMzQ7KTtcbiAzMzI6XHRcdGJyY21mX2ZlYXRfaW92YXJfaW50X2dldChpZnAsIEJSQ01GX0ZFQVRfTUZQLCBcJiMzNDttZnBcJiMzNDspO1xuIDMzMzpcdFx0YnJjbWZfZmVhdF9pb3Zhcl9pbnRfZ2V0KGlmcCwgQlJDTUZfRkVBVF9EVU1QX09CU1MsIFwmIzM0O2R1bXBfb2Jzc1wmIzM0Oyk7XG4gMzM0Olx0XG4gMzM1Olx0XHRwZm5fbWFjLnZlcnNpb24gPSBCUkNNRl9QRk5fTUFDQUREUl9DRkdfVkVSO1xuIDMzNjpcdFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfZ2V0KGlmcCwgXCYjMzQ7cGZuX21hY2FkZHJcJiMzNDssIFx1MDAyNnBmbl9tYWMsXG4gMzM3Olx0XHRcdFx0XHQgICAgICAgc2l6ZW9mKHBmbl9tYWMpKTtcbiAzMzg6XHRcdGlmICghZXJyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjE2OAoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBicmNtZl9mZWF0X2Zpcm13YXJlX2NhcGFiaWxpdGllc2AqKgoKT2theSwgc28gSSBzZWUgYSBjYWxsIHRvIGBicmNtZl9mZWF0X2Zpcm13YXJlX2NhcGFiaWxpdGllc2AuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyBvYnZpb3VzbHkgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIGJlIGNhbGxlZCwgc28gbGV0JiMzOTtzIHN0YXJ0IGJ5IGZpZ3VyaW5nIG91dCBwcmVjaXNlbHkgd2hhdCBpdHMgcHVycG9zZSBpcy4gV2hhdCBkYXRhIGRvZXMgaXQgaGFuZGxlPyBXaGF0IGFyZSB0aGUgaW5wdXRzPyBXaGF0IGFyZSB0aGUgb3V0cHV0cz8gSSYjMzk7bGwgcHJvYmFibHkgYmUgbG9va2luZyBhdCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBmaXJtd2FyZSwgYW5kIHdoYXQgc3BlY2lmaWMgY2FwYWJpbGl0aWVzIGl0JiMzOTtzIGF0dGVtcHRpbmcgdG8gZGlzY292ZXIgb3IgZW5hYmxlLiBUaGlzIGZlZWxzIGxpa2UgYSBjb3JlIHBpZWNlIG9mIHRoZSBpbml0aWFsaXphdGlvbiBvciBmZWF0dXJlIGRpc2NvdmVyeSBwcm9jZXNzLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIGJyb2FkZXIgc3lzdGVtIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9mZWF0X2Zpcm13YXJlX2NhcGFiaWxpdGllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYz0yMDY9c3RhdGljIHZvaWQgYnJjbWZfZmVhdF9pb3Zhcl9kYXRhX3NldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTIyNy0jZGVmaW5lIE1BWF9DQVBTX0JVRkZFUl9TSVpFXHQ3NjhcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjI4OnN0YXRpYyB2b2lkIGJyY21mX2ZlYXRfZmlybXdhcmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0yMjkte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM9Mjg5PXZvaWQgYnJjbWZfZmVhdF9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTI5Ni1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6Mjk3Olx0YnJjbWZfZmVhdF9maXJtd2FyZV9jYXBhYmlsaXRpZXMoaWZwKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMjk4LVx0bWVtc2V0KFx1MDAyNmdzY2FuX2NmZywgMCwgc2l6ZW9mKGdzY2FuX2NmZykpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Njc4NAoJCQkJCQkJb3V0cHV0OiA1MwoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgRmlybXdhcmUgQ2FwYWJpbGl0aWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIGBicmNtZl9mZWF0X2Zpcm13YXJlX2NhcGFiaWxpdGllc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtb2R1bGUgaXMgYWxsIGFib3V0LiBCYXNlZCBvbiB0aGUgbmFtZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgdGhpcyBpcyB3aGVyZSB0aGUgY29kZSB0aGF0IGRlYWxzIHdpdGggZGV0ZXJtaW5pbmcgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGUgZmlybXdhcmUgaXMgbG9jYXRlZC4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpdCYjMzk7cyBsaWtlbHkgZGVhbGluZyB3aXRoIEJyb2FkY29tJiMzOTtzIFdpRmkgZmlybXdhcmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBza2ltIHRoZSBoZWFkZXIgZmlsZSBmb3IgZGVmaW5pdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBmaXJzdC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgZXNzZW50aWFsIGVsZW1lbnRzOiBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBiaXRmaWVsZCwgYSBtb3JlIGNvbXBsZXggc3RydWN0dXJlLCBvciBtYXliZSBldmVuIGFuIG9wYXF1ZSBibG9iIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGludGVycHJldD8gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgc2Vuc2Ugb2YgaG93IHRoZXNlIGNhcGFiaWxpdGllcyBhcmUgcmVwcmVzZW50ZWQgYmVmb3JlIEkgZGlnIGludG8gYW55IG9mIHRoZSBwYXJzaW5nIG9yIGludGVycHJldGF0aW9uIGxvZ2ljLiBUaGVuIEkmIzM5O2xsIGZvY3VzIG9uIGhvdyB0aGUgZmlybXdhcmUgY2FwYWJpbGl0aWVzIGFyZSBiZWluZyByZWFkLCBob3cgdGhlIGRhdGEgaXMgYmVpbmcgc3RvcmVkIGludGVybmFsbHksIGFuZCBob3cgdGhlIGRyaXZlciBzdWJzZXF1ZW50bHkgdXNlcyB0aGlzIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBleHBlY3QgdG8gc2VlIHRoaXMgaW5mb3JtYXRpb24gYmVpbmcgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGZlYXR1cmVzIHRoZSBkcml2ZXIgZW5hYmxlcy4gSSBhbSBhbHNvIGdvaW5nIHRvIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIG92ZXJsb29rZWQgb3IgcGF0Y2hlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMjg6XHRzdGF0aWMgdm9pZCBicmNtZl9mZWF0X2Zpcm13YXJlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcbiAyMjk6XHR7XG4gMjMwOlx0XHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gaWZwLVx1MDAzZWRydnI7XG4gMjMxOlx0XHRjaGFyIGNhcHNbTUFYX0NBUFNfQlVGRkVSX1NJWkVdO1xuIDIzMjpcdFx0ZW51bSBicmNtZl9mZWF0X2lkIGlkO1xuIDIzMzpcdFx0aW50IGksIGVycjtcbiAyMzQ6XHRcbiAyMzU6XHRcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldChpZnAsIFwmIzM0O2NhcFwmIzM0OywgY2Fwcywgc2l6ZW9mKGNhcHMpKTtcbiAyMzY6XHRcdGlmIChlcnIpIHtcbiAyMzc6XHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCYjMzQ7Y291bGQgbm90IGdldCBmaXJtd2FyZSBjYXAgKCVkKVxcblwmIzM0OywgZXJyKTtcbiAyMzg6XHRcdFx0cmV0dXJuO1xuIDIzOTpcdFx0fVxuIDI0MDpcdFxuIDI0MTpcdFx0YnJjbWZfZGJnKElORk8sIFwmIzM0O1sgJXNdXFxuXCYjMzQ7LCBjYXBzKTtcbiAyNDI6XHRcbiAyNDM6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoYnJjbWZfZndjYXBfbWFwKTsgaSYjNDM7JiM0MzspIHtcbiAyNDQ6XHRcdFx0aWYgKHN0cm5zdHIoY2FwcywgYnJjbWZfZndjYXBfbWFwW2ldLmZ3Y2FwX2lkLCBzaXplb2YoY2FwcykpKSB7XG4gMjQ1Olx0XHRcdFx0aWQgPSBicmNtZl9md2NhcF9tYXBbaV0uZmVhdHVyZTtcbiAyNDY6XHRcdFx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7ZW5hYmxpbmcgZmVhdHVyZTogJXNcXG5cJiMzNDssXG4gMjQ3Olx0XHRcdFx0XHQgIGJyY21mX2ZlYXRfbmFtZXNbaWRdKTtcbiAyNDg6XHRcdFx0XHRpZnAtXHUwMDNlZHJ2ci1cdTAwM2VmZWF0X2ZsYWdzIHw9IEJJVChpZCk7XG4gMjQ5Olx0XHRcdH1cbiAyNTA6XHRcdH1cbiAyNTE6XHR9XG4gMjUyOlx0XG4gMjUzOlx0LyoqXG4gMjU0Olx0ICogYnJjbWZfZmVhdF9md2NhcF9kZWJ1Z2ZzX3JlYWQoKSAtIGV4cG9zZSBmaXJtd2FyZSBjYXBhYmlsaXRpZXMgdG8gZGVidWdmcy5cbiAyNTU6XHQgKlxuIDI1NjpcdCAqIEBzZXE6IHNlcXVlbmNlIGZvciBkZWJ1Z2ZzIGVudHJ5LlxuIDI1NzpcdCAqIEBkYXRhOiByYXcgZGF0YSBwb2ludGVyLlxuIDI1ODpcdCAqL1xuIDI1OTpcdHN0YXRpYyBpbnQgYnJjbWZfZmVhdF9md2NhcF9kZWJ1Z2ZzX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKmRhdGEpXG4gMjYwOlx0e1xuIDI2MTpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzX2lmID0gZGV2X2dldF9kcnZkYXRhKHNlcS1cdTAwM2Vwcml2YXRlKTtcbiAyNjI6XHRcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBidXNfaWYtXHUwMDNlZHJ2cjtcbiAyNjM6XHRcdHN0cnVjdCBicmNtZl9pZiAqaWZwID0gYnJjbWZfZ2V0X2lmcChkcnZyLCAwKTtcbiAyNjQ6XHRcdGNoYXIgY2Fwc1tNQVhfQ0FQU19CVUZGRVJfU0laRSAmIzQzOyAxXSA9IHsgfTtcbiAyNjU6XHRcdGNoYXIgKnRtcDtcbiAyNjY6XHRcdGludCBlcnI7XG4gMjY3Olx0XG4gMjY4Olx0XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9nZXQoaWZwLCBcJiMzNDtjYXBcJiMzNDssIGNhcHMsIHNpemVvZihjYXBzKSk7XG4gMjY5Olx0XHRpZiAoZXJyKSB7XG4gMjcwOlx0XHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O2NvdWxkIG5vdCBnZXQgZmlybXdhcmUgY2FwICglZClcXG5cJiMzNDssIGVycik7XG4gMjcxOlx0XHRcdHJldHVybiBlcnI7XG4gMjcyOlx0XHR9XG4gMjczOlx0XG4gMjc0Olx0XHQvKiBQdXQgZXZlcnkgY2FwYWJpbGl0eSBpbiBhIG5ldyBsaW5lICovXG4gMjc1Olx0XHRmb3IgKHRtcCA9IGNhcHM7ICp0bXA7IHRtcCYjNDM7JiM0MzspIHtcbiAyNzY6XHRcdFx0aWYgKCp0bXAgPT0gJiMzOTsgJiMzOTspXG4gMjc3Olx0XHRcdFx0KnRtcCA9ICYjMzk7XFxuJiMzOTs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3OTc4CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlY29kaW5nIEZpcm13YXJlIENhcGFiaWxpdGllcyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBzeXN0ZW0gZGV0ZXJtaW5lcyB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoaXMgQnJvYWRjb20gV2ktRmkgZGV2aWNlLiBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBgYnJjbWZfZmVhdF9maXJtd2FyZV9jYXBhYmlsaXRpZXNgIGlzIHRoZSBvbmUgcmVhZGluZyB0aGUgJiMzNDtjYXAmIzM0OyBkYXRhIGRpcmVjdGx5IGZyb20gdGhlIGRldmljZS4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCBhdCBmaXJzdCBnbGFuY2UuIEJ1dCwgaG9sZCBvbiBhIHNlY29uZC4uLgoKSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGBCUkNNRl9GRUFUX1BNS0lEX1YyYC4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBmZWF0dXJlIGZsYWdnZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgaGFuZGxlZCBpbiByZWxhdGlvbiB0byB0aGUgZ2VuZXJhbCBjYXBhYmlsaXR5IHJlYWRpbmcuIAoKVGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgZnVydGhlciwgaXMgdG8gZ28gYmFjayBhbmQgY2hlY2sgdGhlIGBicmNtZl9mZWF0X3dsY2ZlYXRfbWFwYCBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7dmUgZW5jb3VudGVyZWQgdGhpcyBvbmUgcHJldmlvdXNseSwgc28gaXQgc2hvdWxkIGJlIGEga2V5IHBhcnQgb2YgdGhlIG1hcHBpbmcgYmV0d2VlbiBkZXZpY2UgZmVhdHVyZXMgYW5kIHRoZWlyIGludGVybmFsIHJlcHJlc2VudGF0aW9ucy4gVGhhdCBtYXBwaW5nIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCB2aWV3IG9mIHRoZSBmZWF0dXJlIGVuYWJsZW1lbnQgcHJvY2Vzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgbWFwcyByZWxhdGUgdG8gd2hhdCBgYnJjbWZfZmVhdF9maXJtd2FyZV9jYXBhYmlsaXRpZXNgIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9mZWF0X3dsY2ZlYXRfbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jPTEzMT1zdHJ1Y3QgYnJjbWZfZmVhdF93bGNmZWF0IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTEzNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MTM3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfZmVhdF93bGNmZWF0IGJyY21mX2ZlYXRfd2xjZmVhdF9tYXBbXSA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMTM4LVx0eyAxMiwgMCwgQklUKEJSQ01GX0ZFQVRfUE1LSURfVjIpIH0sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYz0xNDI9c3RhdGljIHZvaWQgYnJjbWZfZmVhdF93bGNfdmVyc2lvbl9vdmVycmlkZXMoc3RydWN0IGJyY21mX3B1YiAqZHJ2KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMTU4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYzoxNTk6XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGJyY21mX2ZlYXRfd2xjZmVhdF9tYXApOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYzoxNjA6XHRcdGUgPSBcdTAwMjZicmNtZl9mZWF0X3dsY2ZlYXRfbWFwW2ldO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0xNjEtXHRcdGlmIChtYWpvciBcdTAwM2UgZS1cdTAwM2VtaW5fdmVyX21ham9yIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4Nzc2CgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gdGhlIHN1YmplY3QgbWF0dGVyOgoKKipEaXZpbmcgaW50byBgYnJjbWZfZmVhdF93bGNfdmVyc2lvbl9vdmVycmlkZXNgKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBzcGVjaWZpYyBmaWxlOiBgYnJjbWZfZmVhdF93bGNfdmVyc2lvbl9vdmVycmlkZXNgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIHBhcnQgb2YgdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlciwgbGlrZWx5IHJlbGF0ZWQgdG8gZmVhdHVyZSBuZWdvdGlhdGlvbiBvciBjb21wYXRpYmlsaXR5IGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBCcm9hZGNvbSBXaXJlbGVzcyBMQU4gQ29udHJvbGxlciAoV0xDKSBmaXJtd2FyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBsb2dpYyBoZXJlIOKAkyBwZXJoYXBzIGEgc2VyaWVzIG9mIG1hY3JvcywgbG9va3Vwcywgb3IgZnVuY3Rpb24gcG9pbnRlcnMg4oCTIHRoYXQgYWxsb3dzIHRoZSBkcml2ZXIgdG8gYWRhcHQgaXRzIGJlaGF2aW9yIGRlcGVuZGluZyBvbiB0aGUgY2FwYWJpbGl0aWVzIG9yIHJldmlzaW9uIGxldmVsIG9mIHRoZSBXTEMgaXQmIzM5O3MgaW50ZXJhY3Rpbmcgd2l0aC4gVGhpcyBjb3VsZCByYW5nZSBmcm9tIGVuYWJsaW5nIHNwZWNpZmljIGZlYXR1cmVzIG9ubHkgYXZhaWxhYmxlIG9uIG5ld2VyIGZpcm13YXJlIHZlcnNpb25zLCB0byBpbXBsZW1lbnRpbmcgd29ya2Fyb3VuZHMgZm9yIGtub3duIGJ1Z3Mgb3IgbGltaXRhdGlvbnMgaW4gb2xkZXIgdmVyc2lvbnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3ZlcnJpZGVzIGFyZSBpbXBsZW1lbnRlZCBhbmQgbWFuYWdlZC4gU3BlY2lmaWMgYXJlYXMgb2YgZm9jdXMgd2lsbCBiZSB2ZXJzaW9uIGNoZWNrcywgZnVuY3Rpb24gcG9pbnRlciB0YWJsZXMsIGFuZCBhbnkgZmVhdHVyZSBmbGFnIGRlZmluaXRpb25zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkcml2ZXIgZGV0ZXJtaW5lcyB0aGUgV0xDIHZlcnNpb24sIGFuZCB3aGF0IGFjdGlvbnMgaXQgdGFrZXMgYmFzZWQgb24gdGhhdCBkZXRlcm1pbmF0aW9uLiBUaGlzIGlzIGxpa2VseSBhIGNyaXRpY2FsIGFyZWEgZm9yIG1haW50YWluaW5nIGNvbXBhdGliaWxpdHkgYW5kIG1heGltaXppbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHdpcmVsZXNzIGludGVyZmFjZSBhY3Jvc3MgYSByYW5nZSBvZiBXTEMgZmlybXdhcmUgcmVsZWFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQyOlx0c3RhdGljIHZvaWQgYnJjbWZfZmVhdF93bGNfdmVyc2lvbl9vdmVycmlkZXMoc3RydWN0IGJyY21mX3B1YiAqZHJ2KVxuIDE0MzpcdHtcbiAxNDQ6XHRcdHN0cnVjdCBicmNtZl9pZiAqaWZwID0gYnJjbWZfZ2V0X2lmcChkcnYsIDApO1xuIDE0NTpcdFx0Y29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfd2xjZmVhdCAqZTtcbiAxNDY6XHRcdHN0cnVjdCBicmNtZl93bGNfdmVyc2lvbl9sZSB2ZXI7XG4gMTQ3Olx0XHR1MzIgZmVhdF9mbGFncyA9IDA7XG4gMTQ4Olx0XHRpbnQgaSwgZXJyLCBtYWpvciwgbWlub3I7XG4gMTQ5Olx0XG4gMTUwOlx0XHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9nZXQoaWZwLCBcJiMzNDt3bGNfdmVyXCYjMzQ7LCBcdTAwMjZ2ZXIsIHNpemVvZih2ZXIpKTtcbiAxNTE6XHRcdGlmIChlcnIpXG4gMTUyOlx0XHRcdHJldHVybjtcbiAxNTM6XHRcbiAxNTQ6XHRcdG1ham9yID0gbGUxNl90b19jcHUodmVyLndsY192ZXJfbWFqb3IpO1xuIDE1NTpcdFx0bWlub3IgPSBsZTE2X3RvX2NwdSh2ZXIud2xjX3Zlcl9taW5vcik7XG4gMTU2Olx0XG4gMTU3Olx0XHRicmNtZl9kYmcoSU5GTywgXCYjMzQ7V0xDIHZlcnNpb246ICVkLiVkXFxuXCYjMzQ7LCBtYWpvciwgbWlub3IpO1xuIDE1ODpcdFxuIDE1OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShicmNtZl9mZWF0X3dsY2ZlYXRfbWFwKTsgaSYjNDM7JiM0MzspIHtcbiAxNjA6XHRcdFx0ZSA9IFx1MDAyNmJyY21mX2ZlYXRfd2xjZmVhdF9tYXBbaV07XG4gMTYxOlx0XHRcdGlmIChtYWpvciBcdTAwM2UgZS1cdTAwM2VtaW5fdmVyX21ham9yIHx8XG4gMTYyOlx0XHRcdCAgICAobWFqb3IgPT0gZS1cdTAwM2VtaW5fdmVyX21ham9yIFx1MDAyNlx1MDAyNlxuIDE2MzpcdFx0XHQgICAgIG1pbm9yIFx1MDAzZT0gZS1cdTAwM2VtaW5fdmVyX21pbm9yKSkge1xuIDE2NDpcdFx0XHRcdGZlYXRfZmxhZ3MgfD0gZS1cdTAwM2VmZWF0X2ZsYWdzO1xuIDE2NTpcdFx0XHR9XG4gMTY2Olx0XHR9XG4gMTY3Olx0XG4gMTY4Olx0XHRpZiAoIWZlYXRfZmxhZ3MpXG4gMTY5Olx0XHRcdHJldHVybjtcbiAxNzA6XHRcbiAxNzE6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEJSQ01GX0ZFQVRfTEFTVDsgaSYjNDM7JiM0MzspXG4gMTcyOlx0XHRcdGlmIChmZWF0X2ZsYWdzIFx1MDAyNiBCSVQoaSkpXG4gMTczOlx0XHRcdFx0YnJjbWZfZGJnKElORk8sIFwmIzM0O2VuYWJsaW5nIGZpcm13YXJlIGZlYXR1cmU6ICVzXFxuXCYjMzQ7LFxuIDE3NDpcdFx0XHRcdFx0ICBicmNtZl9mZWF0X25hbWVzW2ldKTtcbiAxNzU6XHRcdGRydi1cdTAwM2VmZWF0X2ZsYWdzIHw9IGZlYXRfZmxhZ3M7XG4gMTc2Olx0fVxuIDE3NzpcdFxuIDE3ODpcdC8qKlxuIDE3OTpcdCAqIGJyY21mX2ZlYXRfaW92YXJfaW50X2dldCgpIC0gZGV0ZXJtaW5lIGZlYXR1cmUgdGhyb3VnaCBpb3ZhciBxdWVyeS5cbiAxODA6XHQgKlxuIDE4MTpcdCAqIEBpZnA6IGludGVyZmFjZSB0byBxdWVyeS5cbiAxODI6XHQgKiBAaWQ6IGZlYXR1cmUgaWQuXG4gMTgzOlx0ICogQG5hbWU6IGlvdmFyIG5hbWUuXG4gMTg0Olx0ICovXG4gMTg1Olx0c3RhdGljIHZvaWQgYnJjbWZfZmVhdF9pb3Zhcl9pbnRfZ2V0KHN0cnVjdCBicmNtZl9pZiAqaWZwLFxuIDE4NjpcdFx0XHRcdFx0ICAgICBlbnVtIGJyY21mX2ZlYXRfaWQgaWQsIGNoYXIgKm5hbWUpXG4gMTg3Olx0e1xuIDE4ODpcdFx0dTMyIGRhdGE7XG4gMTg5Olx0XHRpbnQgZXJyO1xuIDE5MDpcdFxuIDE5MTpcdFx0Lyogd2UgbmVlZCB0byBrbm93IGZpcm13YXJlIGVycm9yICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5OTYxCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmVhc2liaWxpdHkgb2YgUmVhY2hpbmcgYGJyY21mX3Bta3NhX3YyX29wYCB2aWEgU3l6a2FsbGVyIFVTQiBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgQlJDTUZfRkVBVF9QTUtJRF9WMmAgaXMgY29udGluZ2VudCBvbiB0aGUgZmlybXdhcmUmIzM5O3MgcmVzcG9uc2UgdG8gYHdsY192ZXJgLiBTcGVjaWZpY2FsbHksIGlmIHRoZSBtYWpvciB2ZXJzaW9uIHJlcG9ydGVkIGluIHRoYXQgcmVzcG9uc2UgaXMgMTIgb3IgZ3JlYXRlciwgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gSSwgd2l0aCBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enplciwgbWFuaXB1bGF0ZSB0aGlzIGB3bGNfdmVyYCByZXNwb25zZSB0byB0cmlnZ2VyIHRoZSBhY3RpdmF0aW9uIG9mIHRoaXMgZmVhdHVyZT8gSWYgSSBjYW4sIHRoZW4gSSBjYW4gcG90ZW50aWFsbHkgcmVhY2ggdGhlIGBicmNtZl9wbWtzYV92Ml9vcGAgZnVuY3Rpb24gdGhyb3VnaCBjZmc4MDIxMSBvcGVyYXRpb25zLgoKTXkgZmlyc3QgdGhvdWdodCB3YXMsIGNhbiBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enplciBldmVuIGluaXRpYWxpemUgdGhlIGBicmNtZm1hY2AgZHJpdmVyPyBUaGUgZHJpdmVyIGluaXRpYXRlcyBieSBzZW5kaW5nIG11bHRpcGxlIGNvbW1hbmRzOyBgQlJDTUZfQ19HRVRfUkVWSU5GT2AsIGB2ZXJgLCBgY2xtdmVyYCwgYG1wY2AsIGBldmVudF9tc2dzYCwgYEJSQ01GX0NfU0VUX1NDQU5fQ0hBTk5FTF9USU1FYCwgYEJSQ01GX0NfU0VUX1NDQU5fVU5BU1NPQ19USU1FYCwgYHR4YmZgLCBgY2FwYCwgYW5kIGB3bGNfdmVyYC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCBpZiB0aGUgZnV6emVyIHNpbXBseSByZXR1cm5lZCAwIGZvciBhbGwgb2YgdGhlc2UsIHRoZSBkcml2ZXIgbWlnaHQgcHJvY2VlZC4gSG93ZXZlciwgSSBoYXZlIHRvIGFjY291bnQgZm9yIGVycm9yIGhhbmRsaW5nIGluIGZ1bmN0aW9ucyBzdWNoIGFzIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIHRoYXQgY2FuIGNoZWNrIHRoZSBlcnJvciB2YWx1ZSAoYGVycmApLiBJZiBteSBmdXp6ZXIgcmV0dXJucyAwLCB0aGUgZXJyb3IgY2hlY2sgd2lsbCBzZWUgMC4KClRoZW4gSSByZWFsaXplZCB0aGF0IGBicmNtZl9mZWF0X3dsY192ZXJzaW9uX292ZXJyaWRlc2AgcmVhZHMgdGhlIGB3bGNfdmVyYCByZXNwb25zZS4gSWYgbXkgZnV6emVyIHJlc3BvbmRzIHdpdGggMCwgdGhlbiB0aGUgYG1ham9yYCBhbmQgYG1pbm9yYCB2ZXJzaW9uIG51bWJlcnMgd2lsbCBhbHNvIGJlIDAuIFRodXMsIHNpbmNlIEkgbmVlZCBgbWFqb3IgJmd0Oz0gMTJgIHRvIGVuYWJsZSBgQlJDTUZfRkVBVF9QTUtJRF9WMmAsIHRoaXMgYXBwcm9hY2ggd291bGQgZmFpbC4KCkEgY3J1Y2lhbCBwb2ludCBJIG5lZWQgdG8gY29uc2lkZXIgaXMgd2hldGhlciB0aGUgZnV6emVyIGNhbiByZXR1cm4gKm5vbi16ZXJvKiBkYXRhLiBUaGUgZ29vZCBuZXdzIGlzLCBJIGtub3cgdGhhdCBzeXprYWxsZXImIzM5O3MgVVNCIGZ1enplciBjYW4gaW5kZWVkIHJldHVybiBhcmJpdHJhcnkgZGF0YSBmb3IgYm90aCBVU0IgY29udHJvbCBhbmQgYnVsayB0cmFuc2ZlcnMuIEkgY2FuIHVzZSB0aGUgYHN5el91c2JfY29ubmVjdGAgY2FsbCB0byBkZXNjcmliZSB0aGUgVVNCIGRldmljZSwgYW5kIHRoZW4gc3l6a2FsbGVyIGxldHMgbWUgaW5qZWN0IGFueSBkYXRhIEkgd2FudCBpbiByZXNwb25zZSB0byBVU0IgUmVxdWVzdCBCbG9ja3MgKFVSQnMpLgoKVGhlcmVmb3JlLCBpdCYjMzk7cyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIHRvIGNyYWZ0IGEgYHdsY192ZXJgIHJlc3BvbnNlIHdoZXJlIHRoZSBtYWpvciB2ZXJzaW9uIGlzIDEyIG9yIGdyZWF0ZXIuIENvbnNlcXVlbnRseSwgSSBjYW4gYWN0aXZhdGUgYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGFuZCByZWFjaCBgYnJjbWZfcG1rc2FfdjJfb3BgLgoKSSBoYXZlIHRvIGNvbnNpZGVyIG90aGVyIGFzcGVjdHMgdGhvdWdoLCBsaWtlIGBicmNtZl9uZXRpZl9tb25fcnhgLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIGBicmNtZl9yeF9mcmFtZWAgaWYgdGhlIGludGVyZmFjZSBpcyBpbiBtb25pdG9yIG1vZGUuIEl0IHNlZW1zIGxpa2UgdGhlIGNyaXRpY2FsIHBhdGggaXMgYGJyY21mX3J4X2ZyYW1lYCBzbyBJIHdpbGwgZm9jdXMgb24gdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTE2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1MTY6XHR2b2lkIGJyY21mX3J4X2ZyYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBoYW5kbGVfZXZlbnQsXG4gNTE3Olx0XHRcdCAgICBib29sIGluaXJxKVxuIDUxODpcdHtcbiA1MTk6XHRcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xuIDUyMDpcdFx0c3RydWN0IGJyY21mX2J1cyAqYnVzX2lmID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gNTIxOlx0XHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gYnVzX2lmLVx1MDAzZWRydnI7XG4gNTIyOlx0XG4gNTIzOlx0XHRicmNtZl9kYmcoREFUQSwgXCYjMzQ7RW50ZXI6ICVzOiByeHA9JXBcXG5cJiMzNDssIGRldl9uYW1lKGRldiksIHNrYik7XG4gNTI0Olx0XG4gNTI1Olx0XHRpZiAoYnJjbWZfcnhfaGRycHVsbChkcnZyLCBza2IsIFx1MDAyNmlmcCkpXG4gNTI2Olx0XHRcdHJldHVybjtcbiA1Mjc6XHRcbiA1Mjg6XHRcdGlmIChicmNtZl9wcm90b19pc19yZW9yZGVyX3NrYihza2IpKSB7XG4gNTI5Olx0XHRcdGJyY21mX3Byb3RvX3J4cmVvcmRlcihpZnAsIHNrYik7XG4gNTMwOlx0XHR9IGVsc2Uge1xuIDUzMTpcdFx0XHQvKiBQcm9jZXNzIHNwZWNpYWwgZXZlbnQgcGFja2V0cyAqL1xuIDUzMjpcdFx0XHRpZiAoaGFuZGxlX2V2ZW50KSB7XG4gNTMzOlx0XHRcdFx0Z2ZwX3QgZ2ZwID0gaW5pcnEgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTDtcbiA1MzQ6XHRcbiA1MzU6XHRcdFx0XHRicmNtZl9md2VoX3Byb2Nlc3Nfc2tiKGlmcC1cdTAwM2VkcnZyLCBza2IsXG4gNTM2Olx0XHRcdFx0XHRcdCAgICAgICBCQ01JTENQX1NVQlRZUEVfVkVORE9SX0xPTkcsIGdmcCk7XG4gNTM3Olx0XHRcdH1cbiA1Mzg6XHRcdFx0YnJjbWZfbmV0aWZfcngoaWZwLCBza2IpO1xuIDUzOTpcdFx0fVxuIDU0MDpcdH1cbiA1NDE6XHRcbiA1NDI6XHR2b2lkIGJyY21mX3J4X2V2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiA1NDM6XHR7XG4gNTQ0Olx0XHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcbiA1NDU6XHRcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuIDU0NjpcdFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGJ1c19pZi1cdTAwM2VkcnZyO1xuIDU0NzpcdFxuIDU0ODpcdFx0YnJjbWZfZGJnKEVWRU5ULCBcJiMzNDtFbnRlcjogJXM6IHJ4cD0lcFxcblwmIzM0OywgZGV2X25hbWUoZGV2KSwgc2tiKTtcbiA1NDk6XHRcbiA1NTA6XHRcdGlmIChicmNtZl9yeF9oZHJwdWxsKGRydnIsIHNrYiwgXHUwMDI2aWZwKSlcbiA1NTE6XHRcdFx0cmV0dXJuO1xuIDU1MjpcdFxuIDU1MzpcdFx0YnJjbWZfZndlaF9wcm9jZXNzX3NrYihpZnAtXHUwMDNlZHJ2ciwgc2tiLCAwLCBHRlBfS0VSTkVMKTtcbiA1NTQ6XHRcdGJyY211X3BrdF9idWZfZnJlZV9za2Ioc2tiKTtcbiA1NTU6XHR9XG4gNTU2Olx0XG4gNTU3Olx0dm9pZCBicmNtZl90eGZpbmFsaXplKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqdHhwLCBib29sIHN1Y2Nlc3MpXG4gNTU4Olx0e1xuIDU1OTpcdFx0c3RydWN0IGV0aGhkciAqZWg7XG4gNTYwOlx0XHR1MTYgdHlwZTtcbiA1NjE6XHRcbiA1NjI6XHRcdGlmICghaWZwKSB7XG4gNTYzOlx0XHRcdGJyY211X3BrdF9idWZfZnJlZV9za2IodHhwKTtcbiA1NjQ6XHRcdFx0cmV0dXJuO1xuIDU2NTpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjEwNwoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEJSQ00gV2lGaSBEcml2ZXIgUmVjZWl2ZSBQYXRoKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYGJyY21mX3J4X2ZyYW1lYCB3YXMgY2FsbGluZyBgYnJjbWZfbmV0aWZfbW9uX3J4YCwgYnV0IHRoYXQgZG9lc24mIzM5O3Qgc2VlbSByaWdodC4gTG9va2luZyBiYWNrIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFjdHVhbGx5IGNhbGxpbmcgYGJyY21mX25ldGlmX3J4YC4gVGhhdCYjMzk7cyBhIGtleSBkaXN0aW5jdGlvbi4gTm93LCB3aGVyZSBpcyBgYnJjbWZfbmV0aWZfbW9uX3J4YCBhY3R1YWxseSBiZWluZyBpbnZva2VkPyBJIHRob3VnaHQgSSBoYWQgaWRlbnRpZmllZCBpdHMgY2FsbCBzaXRlIGVhcmxpZXIgd2l0aGluIGBtc2didWYuY2AuIExldCBtZSBkb3VibGUtY2hlY2sgdGhhdCBsb2NhdGlvbiBhZ2FpbiBhbmQgZW5zdXJlIHRoYXQgbXkgcHJpb3IgYW5hbHlzaXMgd2FzIGNvcnJlY3QuIEkgbmVlZCB0byBiZSBzdXJlIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX25ldGlmX21vbl9yeCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz00MzQ9c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNDM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzo0Mzk6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQ0MC17XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaD0yMjA9dm9pZCBicmNtZl9uZXRpZl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oOjIyMTp2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oLTIyMi12b2lkIGJyY21mX25ldF9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGJvb2wgbG9ja2VkKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTIwMD1icmNtZl9tc2didWZfcHJvY2Vzc19yeF9jb21wbGV0ZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHZvaWQgKmJ1Zilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTI0MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzoxMjQxOlx0XHRicmNtZl9uZXRpZl9tb25fcngoaWZwLCBza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDItXHRcdHJldHVybjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI5MTkKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipOYXJyb3dpbmcgRG93biB0aGUgYGJyY21mX25ldGlmX21vbl9yeGAgQ2FsbGVycyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBjYWxsIHRvIGBicmNtZl9uZXRpZl9tb25fcnhgLiBGcm9tIHdoYXQgSSYjMzk7dmUgdHJhY2VkLCBpdCAqc2VlbXMqIGxpa2UgaXQmIzM5O3MgZXhjbHVzaXZlbHkgY2FsbGVkIGZyb20gYG1zZ2J1Zi5jYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBjbHVlLiBBbmQsIGlmIG15IG1lbW9yeSBzZXJ2ZXMgbWUgY29ycmVjdGx5LCBgbXNnYnVmLmNgIGlzICpwcmltYXJpbHkqIGFzc29jaWF0ZWQgd2l0aCB0aGUgUENJZSBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGVyZSBhbnkgY2hhbmNlIHRoZSBVU0IgZHJpdmVyLCBwYXJ0aWN1bGFybHkgaW4gaXRzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9yIGVkZ2UgY2FzZXMsIHV0aWxpemVzIGBtc2didWYuY2AgYXMgd2VsbD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24gYmVmb3JlIEkgcHJvY2VlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgcG90ZW50aWFsIGF0dGFjaG1lbnQgcG9pbnRzIGJ5IGxvb2tpbmcgYXQgdGhlIGNhbGxzIHRvIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYC4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGlzIGxpbmUgb2YgdGhvdWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTE1NzU9c3RhdGljIHZvaWQgYnJjbWZfbXNnYnVmX2RlYnVnZnNfY3JlYXRlKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE1NzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTU4MDppbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE1ODEte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaD0zMj12b2lkIGJyY21mX21zZ2J1Zl9kZWxldGVfZmxvd3Jpbmcoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgdTE2IGZsb3dpZCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmg6MzM6aW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmgtMzQtdm9pZCBicmNtZl9wcm90b19tc2didWZfZGV0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oLTM1LSNlbHNlXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmg6MzY6c3RhdGljIGlubGluZSBpbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oLTM3LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYz0yMD1pbnQgYnJjbWZfcHJvdG9fYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzUtXHR9IGVsc2UgaWYgKGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZXByb3RvX3R5cGUgPT0gQlJDTUZfUFJPVE9fTVNHQlVGKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzozNjpcdFx0aWYgKGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goZHJ2cikpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNy1cdFx0XHRnb3RvIGZhaWw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzOTA0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhpbmtpbmcgdGhpcyB0aHJvdWdoOgoKKipJbnZlc3RpZ2F0aW5nIGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2ggYW5kIGl0cyBDb250ZXh0KioKClJpZ2h0LCBzbyBgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaGAgZ2V0cyBjYWxsZWQgZnJvbSBgYnJjbWZfcHJvdG9fYXR0YWNoYC4gVGhlIGNvbmRpdGlvbmFsIGlzIGJhc2VkIG9uIGBwcm90b190eXBlYCwgc3BlY2lmaWNhbGx5IHdoZW4gYHByb3RvX3R5cGVgIGlzIHNldCB0byBgQlJDTUZfUFJPVE9fTVNHQlVGYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyBjcnlzdGFsIGNsZWFyOiBJIG5lZWQgdG8gdHJhY2UgYmFjayBhbmQgdW5kZXJzdGFuZCBob3cgYW5kIHdoZXJlIGBwcm90b190eXBlYCBpcyBhY3R1YWxseSBzZXQuIFRoYXQmIzM5O3MgdGhlIGtleSB2YXJpYWJsZSBoZXJlLiBLbm93aW5nIGl0cyBvcmlnaW4gaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRoIHRoYXQgbGVhZHMgdG8gYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGJlaW5nIGNhbGxlZCwgYW5kIHdoeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyBgcHJvdG9fdHlwZWAgaXMgYmVpbmcgYXNzaWduZWQgYSB2YWx1ZSBzbyB0aGF0IEkgY2FuIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm90b190eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9MTA0MD1zdGF0aWMgaW50IGJyY21mX29wc19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEwODUtXHRidXNfaWYtXHUwMDNlYnVzX3ByaXYuc2RpbyA9IHNkaW9kZXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM6MTA4NjpcdGJ1c19pZi1cdTAwM2Vwcm90b190eXBlID0gQlJDTUZfUFJPVE9fQkNEQztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xMDg3LVx0YnVzX2lmLVx1MDAzZWZ3dmlkID0gaWQtXHUwMDNlZHJpdmVyX2RhdGE7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTE0MT1zdHJ1Y3QgYnJjbWZfYnVzX3N0YXRzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMTQ5LSAqIEBidXNfcHJpdjogcG9pbnRlciB0byBwcml2YXRlIGJ1cyBkZXZpY2UuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MTUwOiAqIEBwcm90b190eXBlOiBwcm90b2NvbCB0eXBlLCBiY2RjIG9yIG1zZ2J1ZlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE1MS0gKiBAZGV2OiBkZXZpY2UgcG9pbnRlciBvZiBidXMgZGV2aWNlLlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0xNjU9c3RydWN0IGJyY21mX2J1cyB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE3MC1cdH0gYnVzX3ByaXY7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MTcxOlx0ZW51bSBicmNtZl9idXNfcHJvdG9jb2xfdHlwZSBwcm90b190eXBlO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE3Mi1cdHN0cnVjdCBkZXZpY2UgKmRldjtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jPTI0ODk9YnJjbWZfcGNpZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjU2NC1cdGJ1cy1cdTAwM2VvcHMgPSBcdTAwMjZicmNtZl9wY2llX2J1c19vcHM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jOjI1NjU6XHRidXMtXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX01TR0JVRjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjU2Ni1cdGJ1cy1cdTAwM2VjaGlwID0gZGV2aW5mby1cdTAwM2Vjb3JlaWQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM9MjA9aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTMxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MzI6XHRpZiAoZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19CQ0RDKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zMy1cdFx0aWYgKGJyY21mX3Byb3RvX2JjZGNfYXR0YWNoKGRydnIpKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzQtXHRcdFx0Z290byBmYWlsO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MzU6XHR9IGVsc2UgaWYgKGRydnItXHUwMDNlYnVzX2lmLVx1MDAzZXByb3RvX3R5cGUgPT0gQlJDTUZfUFJPVE9fTVNHQlVGKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNi1cdFx0aWYgKGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goZHJ2cikpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzktXHRcdGJwaHlfZXJyKGRydnIsIFwmIzM0O1Vuc3VwcG9ydGVkIHByb3RvIHR5cGUgJWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzo0MDpcdFx0XHQgZHJ2ci1cdTAwM2VidXNfaWYtXHUwMDNlcHJvdG9fdHlwZSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy00MS1cdFx0Z290byBmYWlsO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jPTU5PXZvaWQgYnJjbWZfcHJvdG9fZGV0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtNjMtXHRpZiAoZHJ2ci1cdTAwM2Vwcm90bykge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6NjQ6XHRcdGlmIChkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX0JDREMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy02NS1cdFx0XHRicmNtZl9wcm90b19iY2RjX2RldGFjaChkcnZyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jOjY2Olx0XHRlbHNlIGlmIChkcnZyLVx1MDAzZWJ1c19pZi1cdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX01TR0JVRilcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTY3LVx0XHRcdGJyY21mX3Byb3RvX21zZ2J1Zl9kZXRhY2goZHJ2cik7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjY4LVx0YnVzLVx1MDAzZW9wcyA9IFx1MDAyNmJyY21mX3VzYl9idXNfb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNjk6XHRidXMtXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX0JDREM7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI3MC1cdGJ1cy1cdTAwM2Vmd3ZpZCA9IGZ3dmlkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTkwMQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDc5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBicmNtZl9wbWtzYV92Ml9vcCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZXNlIEJyb2FkY29tIFdpLUZpIGRyaXZlciBjaGFuZ2VzIGFuZCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggYXJlIGFjdHVhbGx5IGZ1enphYmxlLiBGaXJzdCwgaXQgbG9va3MgbGlrZSBgQlJDTUZfUFJPVE9fTVNHQlVGYCBpcyBzdHJpY3RseSBQQ0llLCBtZWFuaW5nIGBtc2didWYuY2AgYW5kIGBmbG93cmluZy5jYCBhcmUgb3V0LCBnaXZlbiB0aGF0IHN5emthbGxlciBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBQQ0llIEJyb2FkY29tIGNhcmRzLiBUaG9zZSBhcmUgZGVhZCBlbmRzLiBCdXQgd2hhdCBhYm91dCBgYnJjbWZfcG1rc2FfdjJfb3BgIGluIGBjZmc4MDIxMS5jYD8gVGhhdCBzZWVtcyBtb3JlIHByb21pc2luZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQmIzM5O3MgcmVhY2hhYmxlIHZpYSBVU0IuCgpUaGUgY3J1Y2lhbCBwb2ludCBoZXJlIGlzIHRoYXQgaXQgcmVxdWlyZXMgaW5pdGlhbGl6YXRpb24gYW5kIGEgYHdsY192ZXJgIG9mIDEyIG9yIGdyZWF0ZXIuIElzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZT8gWWVzLCBpdCBzdXBwb3J0cyBWMiBQTUtTQSBjYWNoZSB1cGRhdGVzLCBzbyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4gSXMgaXQgd29ydGggdGhlIGVmZm9ydD8gSWYgcmVhY2hhYmxlIHRocm91Z2ggVVNCLCBhYnNvbHV0ZWx5LgoKV2FpdCwgbGV0IG1lIHRoaW5rLiBUaGUgcHJvbXB0IG1lbnRpb25lZCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggaGFyZHdhcmUgZW11bGF0aW9uLiBDYW4gc3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6ZXIgKmFjdHVhbGx5KiBpbml0aWFsaXplIGBicmNtZm1hY2A/CgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZHJpdmVyIG5lZWRzIGZpcm13YXJlLiBUaGUgVVNCIGZ1enplciB0cmlnZ2VycyBgYnJjbWZfdXNiX3Byb2JlYCwgd2hpY2ggcmVxdWVzdHMgdGhlIGZpcm13YXJlLiBJZiB0aGUgZmlybXdhcmUgaXMgcHJlc2VudCAoYXMgaXQgdXN1YWxseSBpcyBpbiBzeXprYWxsZXIgaW1hZ2VzKSwgaXQgZ2V0cyBsb2FkZWQsIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UsIGFuZCB0aGUgZnV6emVyIGFjY2VwdHMgdGhlIFVSQnMuIFRoZW4gY29tZXMgYGJyY21mX2F0dGFjaGAuIFRoYXQgdGhlbiBjYWxscyBgYnJjbWZfYnVzX3N0YXJ0ZWRgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgLiBJbnNpZGUgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AsIHRoZSBjb2RlIHNlbmRzIGNvbW1hbmRzIGxpa2UgYEJSQ01GX0NfR0VUX1JFVklORk9gIHRocm91Z2ggYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldGAgdXNpbmcgQkNEQyBwcm90b2NvbCBvdmVyIFVTQi4KClRoZSBmdXp6ZXIgY2FuIHN1cHBseSBhcmJpdHJhcnkgZGF0YSBiYWNrIHRvIHRoZXNlIFVTQiBidWxrIHRyYW5zZmVycy4gSWYgaXQgcHJvdmlkZXMgc29tZXRoaW5nIHJlYXNvbmFibGUgKG9yIGV2ZW4ganVzdCB6ZXJvcywgaWYgdGhlIGRyaXZlciBpc24mIzM5O3Qgc3VwZXIgc3RyaWN0KSwgdGhlIGluaXRpYWxpemF0aW9uIG1pZ2h0IHdvcmsuIEhhbmcgb24sIGRvZXMgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AgY2hlY2sgZm9yIGVycm9ycz8gWWVzLCBpdCBkb2VzLiBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfZ2V0YCBzZW5kcyBhIGNvbW1hbmQgYW5kIHdhaXRzIGZvciBhIHJlcGx5LiBJZiB0aGUgZnV6emVyIHByb3ZpZGVzIGEgQkNEQyBoZWFkZXIgYW5kIHNvbWUgZGF0YSwgdGhlbiBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfZ2V0YCB3aWxsIHJldHVybiAwIHdoaWNoIGlzIHN1Y2Nlc3MhIFNvLCB5ZXMsIGl0IHNlZW1zIEkgKmNhbiogc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemUgdGhlIGRyaXZlciEKClRoYXQgbWVhbnMgdGhlIGZ1enplciBjb3VsZCB0aGVuIHByb3ZpZGUgYSBgd2xjX3ZlcmAgb2YgJmd0Oz0gMTIsIGVuYWJsaW5nIGBCUkNNRl9GRUFUX1BNS0lEX1YyYC4gVGhlbiwgdGhyb3VnaCBuZXRsaW5rLCBJIGNhbiBzZW5kIGBOTDgwMjExX0NNRF9TRVRfUE1LU0FgLCB3aGljaCBjYWxscyBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCwgd2hpY2ggKnRoZW4qIGNhbGxzIGBicmNtZl9wbWtzYV92Ml9vcGAuIEJyaWxsaWFudCEgU28sIGBicmNtZl9wbWtzYV92Ml9vcGAgSVMgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nLgoKTm93LCB3aGF0IGFib3V0IHRoYXQgb3RoZXIgY2hhbmdlIEkgc2F3IGluIGBicmNtc21hYy9hbXBkdS5jYD8gR290dGEgaW52ZXN0aWdhdGUgdGhhdCBvbmUuLi4gbGV0JiMzOTtzIGNoZWNrIHRoZSBkaWZmLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtc19jX2FtcGR1X2FkZF9mcmFtZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmM9NDY5PXZvaWQgYnJjbXNfY19hbXBkdV9yZXNldF9zZXNzaW9uKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jLTQ4NC0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jOjQ4NTppbnQgYnJjbXNfY19hbXBkdV9hZGRfZnJhbWUoc3RydWN0IGJyY21zX2FtcGR1X3Nlc3Npb24gKnNlc3Npb24sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYy00ODYtXHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpwKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5oPTQwPXZvaWQgYnJjbXNfY19hbXBkdV9yZXNldF9zZXNzaW9uKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmgtNDEtXHRcdFx0XHQgc3RydWN0IGJyY21zX2NfaW5mbyAqd2xjKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5oOjQyOmludCBicmNtc19jX2FtcGR1X2FkZF9mcmFtZShzdHJ1Y3QgYnJjbXNfYW1wZHVfc2Vzc2lvbiAqc2Vzc2lvbixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5oLTQzLVx0XHRcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RtYS5jPTEzNDM9c3RhdGljIHZvaWQgcHJlcF9hbXBkdV9mcmFtZShzdHJ1Y3QgZG1hX2luZm8gKmRpLCBzdHJ1Y3Qgc2tfYnVmZiAqcClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZG1hLmMtMTM0Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kbWEuYzoxMzQ4Olx0cmV0ID0gYnJjbXNfY19hbXBkdV9hZGRfZnJhbWUoc2Vzc2lvbiwgcCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZG1hLmMtMTM0OS1cdGlmIChyZXQgPT0gLUVOT1NQQykge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kbWEuYy0xMzU0LVx0XHRhbXBkdV9maW5hbGl6ZShkaSk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZG1hLmM6MTM1NTpcdFx0cmV0ID0gYnJjbXNfY19hbXBkdV9hZGRfZnJhbWUoc2Vzc2lvbiwgcCk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvZG1hLmMtMTM1Ni1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgxNzcKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA1MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJlY2VudCBDaGFuZ2VzIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHJldmlld2luZyB0aGlzIGRpZmYgYW5kIGhlcmUmIzM5O3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZzogdGhlIGNvbW1lbnQgdXBkYXRlIGluIGBicmNtc21hYy9hbXBkdS5jYCBpcyBqdXN0IHRoYXQgLSBhIGNvbW1lbnQuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHdvcnJ5IGFib3V0LCBhbmQgaXQmIzM5O3MgYSBjbGFyaWZpY2F0aW9uIHJlYWxseS4KCk1vdmluZyBvbiwgYGJyY21mX3NkaW9fcnhnbG9tYCBpbiBgc2Rpby5jYCBsb29rcyBpbnRlcmVzdGluZyBidXQgdW5mb3J0dW5hdGVseSwgaXQgZG9lc24mIzM5O3Qgc2VlbSBkaXJlY3RseSBmdXp6YWJsZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IFN5emthbGxlciwgd2hpbGUgcG93ZXJmdWwsIGRvZXNuJiMzOTt0IGhhdmUgYW4gU0RJTyBmdXp6ZXIuIEl0JiMzOTtzIGdvdCBVU0IsIFBDSSAod2l0aCBsaW1pdGF0aW9ucyBvbiB2ZW5kb3Itc3BlY2lmaWMgcGh5c2ljYWwgY2FyZHMpLCBhbmQgdmhjaSBmb3IgQmx1ZXRvb3RoLCBidXQgbm90IFNESU8sIHdoaWNoIG1lYW5zIHRoaXMgY29kZSBwYXRoIGlzIGxpa2VseSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4KCk5vdywgdGhhdCBicmluZ3MgbWUgdG8gYGJyY21mX2RlbGF5YCBpbiBgY2ZnODAyMTEuY2AuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgc3RyYWlnaHRmb3J3YXJkIGFsdGVyYXRpb24gb2YgYSBkZWxheSBmdW5jdGlvbiwgcmVhbGx5LiBOb3RoaW5nIHRlcnJpYmx5IGNvbXBsZXgsIGV2ZW4gdGhvdWdoIGl0JiMzOTtzIGEgY2hhbmdlIHRvIHRoZSBleGlzdGluZyBjb2RlLgoKVGhlcmVmb3JlLCB0aGUgbW9zdCBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgZnV6ei13b3J0aHkgdGFyZ2V0IEkmIzM5O3ZlIGZvdW5kIHNvIGZhciBpcyBgYnJjbWZfcG1rc2FfdjJfb3BgLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGZvY3VzIG15IGVmZm9ydHMuIFRvIGRldGVybWluZSByZWFjaGFiaWxpdHksIEkgbmVlZCB0byBjb25maXJtIGl0cyBleGlzdGVuY2Ugd2l0aGluIHRoZSBgYnJjbWZtYWNgIGRyaXZlciwgYW5kIGRldGVybWluZSB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIExldCYjMzk7cyBkaWcgaW50byBLY29uZmlnIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJDTUZNQUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yLVx0dHJpc3RhdGUgXCYjMzQ7QnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTE6Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEyLVx0Ym9vbFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoxNDpjb25maWcgQlJDTUZNQUNfUFJPVE9fTVNHQlVGXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cdGJvb2xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTE4LVx0Ym9vbCBcJiMzNDtTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjI5OmNvbmZpZyBCUkNNRk1BQ19VU0JcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtVU0IgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTM5LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6NDA6Y29uZmlnIEJSQ01GTUFDX1BDSUVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVx0Ym9vbCBcJiMzNDtQQ0lFIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2NTcKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXI6CgoqKkRlbHZpbmcgaW50byB0aGUgYnJjbWZtYWMgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGhlIGhlYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBicmNtZm1hYyB3aXJlbGVzcyBkcml2ZXIuIEdpdmVuIHRoZSBwYXRoLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgYWxsIHRoZSBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb25zLCBkZXBlbmRlbmNpZXMsIGFuZCBhbnkgZGV2aWNlLXNwZWNpZmljIHNldHRpbmdzIGRlZmluZWQgaGVyZS4gVGhpcyBLY29uZmlnIGZpbGUgd2lsbCBiZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGRyaXZlciBpcyBwYXJhbWV0ZXJpemVkLCB3aGF0IGZlYXR1cmVzIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwgYnVpbGQgc3lzdGVtLiBJ4oCZbSB0aGlua2luZyBJIHdpbGwgZmluZCBvcHRpb25zIGZvciB2YXJpb3VzIEJyb2FkY29tIFdpLUZpIGNoaXBzZXRzLCBwb3dlciBtYW5hZ2VtZW50IHNldHRpbmdzLCBkZWJ1ZyBmbGFncywgYW5kIG1heWJlIGV2ZW4gZmlybXdhcmUgc2VsZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSB0aGUgZHJpdmVyIGZvciB0aGUgdGFyZ2V0IHBsYXRmb3JtIEkmIzM5O20gd29ya2luZyB3aXRoIGFuZCBzZWUgd2hhdCBzb3J0IG9mIGZsZXhpYmlsaXR5IHRoaXMgZHJpdmVyIG9mZmVycyBtZS4gTGV04oCZcyBnZXQgdG8gaXQgYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGluIHRoZXJlLiBJJiMzOTttIGhvcGluZyBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvY3VtZW50ZWQsIGJlY2F1c2UgdGhlc2UgQnJvYWRjb20gZHJpdmVycyBjYW4gc29tZXRpbWVzIGJlIGEgYml0IGRlbnNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Y29uZmlnIEJSQ01GTUFDXG4gICAyOlx0XHR0cmlzdGF0ZSBcJiMzNDtCcm9hZGNvbSBGdWxsTUFDIFdMQU4gZHJpdmVyXCYjMzQ7XG4gICAzOlx0XHRkZXBlbmRzIG9uIENGRzgwMjExXG4gICA0Olx0XHRzZWxlY3QgQlJDTVVUSUxcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBtb2R1bGUgYWRkcyBzdXBwb3J0IGZvciB3aXJlbGVzcyBhZGFwdGVycyBiYXNlZCBvbiBCcm9hZGNvbVxuICAgNzpcdFx0ICBGdWxsTUFDIGNoaXBzZXRzLiBJdCBoYXMgdG8gd29yayB3aXRoIGF0IGxlYXN0IG9uZSBvZiB0aGUgYnVzXG4gICA4Olx0XHQgIGludGVyZmFjZSBzdXBwb3J0LiBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCYjMzk7bGwgYmUgY2FsbGVkXG4gICA5Olx0XHQgIGJyY21mbWFjLmtvLlxuICAxMDpcdFxuICAxMTpcdGNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXG4gIDEyOlx0XHRib29sXG4gIDEzOlx0XG4gIDE0Olx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxuICAxNTpcdFx0Ym9vbFxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBCUkNNRk1BQ19TRElPXG4gIDE4Olx0XHRib29sIFwmIzM0O1NESU8gYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuICAxOTpcdFx0ZGVwZW5kcyBvbiAoTU1DID0geSB8fCBNTUMgPSBCUkNNRk1BQylcbiAgMjA6XHRcdGRlcGVuZHMgb24gQlJDTUZNQUNcbiAgMjE6XHRcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19CQ0RDXG4gIDIyOlx0XHRzZWxlY3QgRldfTE9BREVSXG4gIDIzOlx0XHRkZWZhdWx0IHlcbiAgMjQ6XHRcdGhlbHBcbiAgMjU6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXG4gIDI2Olx0XHQgIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXG4gIDI3Olx0XHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhIFNESU8gd2lyZWxlc3MgY2FyZC5cbiAgMjg6XHRcbiAgMjk6XHRjb25maWcgQlJDTUZNQUNfVVNCXG4gIDMwOlx0XHRib29sIFwmIzM0O1VTQiBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXCYjMzQ7XG4gIDMxOlx0XHRkZXBlbmRzIG9uIChVU0IgPSB5IHx8IFVTQiA9IEJSQ01GTUFDKVxuICAzMjpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICAzMzpcdFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX0JDRENcbiAgMzQ6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgMzU6XHRcdGhlbHBcbiAgMzY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cbiAgMzc6XHRcdCAgSUVFRTgwMi4xMW4gZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cbiAgMzg6XHRcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFVTQiB3aXJlbGVzcyBjYXJkLlxuICAzOTpcdFxuICA0MDpcdGNvbmZpZyBCUkNNRk1BQ19QQ0lFXG4gIDQxOlx0XHRib29sIFwmIzM0O1BDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclwmIzM0O1xuICA0MjpcdFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgNDQ6XHRcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19NU0dCVUZcbiAgNDU6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXG4gIDQ4Olx0XHQgIElFRUU4MDIuMTFhYyBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xuICA0OTpcdFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYW4gUENJRSB3aXJlbGVzcyBjYXJkLlxuICA1MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY5OAoJCQkJCQkJb3V0cHV0OiA1NwoJCQkJCQkJdGhvdWdodHM6IDE0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyBmb3IgQlJDTUZNQUMgRHJpdmVyKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciBmdXp6aW5nIGBCUkNNRk1BQ2AgYW5kIHNwZWNpZmljYWxseSB0aGUgYEJSQ01GTUFDX1VTQmAgY29uZmlndXJhdGlvbnMgaXMgd29ydGh3aGlsZSwgZ2l2ZW4gdGhlIGNoYW5nZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25zaWRlciBgYnJjbWZfcG1rc2FfdjJfb3BgLiBJcyBpdCBhY3R1YWxseSByZWFjaGFibGU/IFN5emthbGxlciYjMzk7cyBVU0IgZnV6emVyIG9mZmVycyBhcmJpdHJhcnkgVVNCIHJlc3BvbnNlcy4gSG93ZXZlciwgdGhlIGRyaXZlciBuZWVkcyB0aGUgZmlybXdhcmUgbG9hZGVkIGZpcnN0IHZpYSBgYnJjbWZfdXNiX3Byb2JlYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AuIFRoZSBzeXprYWxsZXIgaW1hZ2UgaGFzIHRvIGhhdmUgdGhlIHJlbGV2YW50IGZpcm13YXJlLiBBIG1pbmltYWwgRGViaWFuIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGBmaXJtd2FyZS1icmNtODAyMTFgIGluc3RhbGxlZC4gSWYgbm90LCBpbml0aWFsaXphdGlvbiBmYWlscy4gSWYgcHJlc2VudCwgdGhlIGRyaXZlciBkb3dubG9hZHMgZmlybXdhcmUgYW5kIHNlbmRzIGBkY21kc2AuIFRoZSBmdXp6ZXIgbmVlZHMgdG8gcHJvdmlkZSByZXNwb25zZXMgdG8gdGhlc2UgYGRjbWRzYCB3aXRob3V0IHRyaWdnZXJpbmcgZXJyb3JzIGluIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgLiBJZiB0aGUgZnV6emVyIHJldHVybnMgMCBmb3IgYSBVU0IgdHJhbnNmZXIsIGBicmNtZl9maWxfaW92YXJfZGF0YV9nZXRgIHdpbGwgcmV0dXJuIDAsIHdoaWNoIGxlYWRzIHRvIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIHN1Y2NlZWRpbmcuIFRoZW4gYGJyY21mX2ZlYXRfYXR0YWNoYCB3aWxsIGJlIGNhbGxlZCwgd2hpY2ggcmVhZHMgYHdsY192ZXJgLiBUaGUgZnV6emVyIGNhbiBnZW5lcmF0ZSByYW5kb20gZGF0YSwgbWVhbmluZyB0aGUgZHJpdmVyIGNvdWxkIHNlZSBhIGBtYWpvciAmZ3Q7PSAxMmAsIGVuYWJsaW5nIGBCUkNNRl9GRUFUX1BNS0lEX1YyYC4gVGhpcyAqbWlnaHQqIHdvcmsgdGhyb3VnaCBhIHNlcXVlbmNlIG9mIHN1Y2Nlc3NmdWwgVVNCIHRyYW5zZmVycyBmb2xsb3dlZCBieSBhIG5ldGxpbmsgY29tbWFuZCB0byByZWFjaCBgYnJjbWZfcG1rc2FfdjJfb3BgLiBUaG91Z2ggdW5saWtlbHksIGl0JiMzOTtzIHBvc3NpYmxlIHdpdGggc3l6a2FsbGVyJiMzOTtzIGNvdmVyYWdlLWd1aWRlZCBhcHByb2FjaC4KClRoZSBwcm9tcHQgc3RpcHVsYXRlcyB0byByZXR1cm4gJiMzNDtXb3J0aEZ1enppbmc9ZmFsc2UmIzM0OyBpZiBjZXJ0YWluIGNvbmRpdGlvbnMgYXJlIG1ldCwgbmFtZWx5IGNvZGUgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gV2hpbGUgQnJvYWRjb20gUENJZSBXaS1GaSBjYXJkcyBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUsIHRoZSBVU0IgcGF0aCBhcHBlYXJzIHZpYWJsZS4gVGhlIFBDSWUtc3BlY2lmaWMgY2hhbmdlcyAoYG1zZ2J1Zi5jYCwgYGZsb3dyaW5nLmNgLCBgcGNpZS5jYCkgYXJlIG5vdCByZWFjaGFibGUgc2luY2UgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIHRoZSBuZWNlc3NhcnkgaGFyZHdhcmUuIFNpbWlsYXJseSwgU0RJTyBjaGFuZ2VzIChgc2Rpby5jYCkgYXJlIG91dCBhcyBzeXprYWxsZXIgaGFzIG5vIFNESU8gZnV6emVyLiBIb3dldmVyLCBgY2ZnODAyMTEuY2AgaXMgcmVhY2hhYmxlIHZpYSBVU0IuIEdpdmVuIHRoYXQgdGhlIG9ubHkgbWVhbmluZ2Z1bCBjaGFuZ2Ugd2l0aGluIHRoYXQgZmlsZSAoYXNpZGUgZnJvbSBgYnJjbWZfZGVsYXlgKSBpcyBgYnJjbWZfcG1rc2FfdjJfb3BgLCBpdCYjMzk7cyBzdGlsbCB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIG5ldyBmdW5jdGlvbiB0aGF0IGRvZXMgc29tZXRoaW5nIGZ1bmN0aW9uYWwsIHBhcnNpbmcgYW5kIGZvcm1hdHRpbmcgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBmaXJtd2FyZS4gQ2hlY2tpbmcgdGhlIGNvZGUgYWdhaW4sIGBicmNtZl9wbWtzYV92Ml9vcGAgc2VlbXMgY29ycmVjdCwgYW5kIGl0IHRha2VzIGBwbWtzYWAgZGF0YSBmcm9tIGNmZzgwMjExIGFuZCB1cGRhdGVzIHRoZSBkcml2ZXImIzM5O3MgaW50ZXJuYWwgVjIgUE1LU0EgbGlzdCBiZWZvcmUgc2VuZGluZyBpdCB0byB0aGUgZmlybXdhcmUgdmlhIGBicmNtZl9maWxfaW92YXJfZGF0YV9zZXRgLiBJJiMzOTtsbCBmb2N1cyBvbiBgYnJjbWZfcG1rc2FfdjJfb3BgLiBGaW5hbGx5LCBzeXprYWxsZXIgZG9lcyBvZmZlciBgc3l6X3VzYl9jb25uZWN0YCBjYWxscyB3aGljaCBlbmFibGUgYW55IFVTQiBkZXZpY2UgdG8gYmUgZW11bGF0ZWQuCgpMb29raW5nIGF0IHRoZSBjb2RlIGFnYWluLCBgYnJjbWZfcG1rc2FfdjJfb3BgIGlzIHN0YXRpYywgYW5kIGlzIG9ubHkgY2FsbGVkIGJ5IG90aGVyIHN0YXRpYyBmdW5jdGlvbnMuIFRoZSBwcm9tcHQgcmVjb21tZW5kcyBwcmVmZXJyaW5nIG5vbi1zdGF0aWMgQVBJIGVudHJ5IHBvaW50cywgYnV0IHRoZSBmdW5jdGlvbnMgY2FsbGluZyB0aGlzIG9uZSBhcmUgYWxzbyBzdGF0aWMsIGFsdGhvdWdoIGFzc2lnbmVkIHRvIGBjZmc4MDIxMV9vcHNgLCB0aGVyZWZvcmUsIHN0aWxsIHdvcnRoIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDQ4Nj1zdGF0aWMgczMyXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NDg3OmJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ0ODgtXHRcdFx0IHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NjA4Mz1zdGF0aWMgc3RydWN0IGNmZzgwMjExX29wcyBicmNtZl9jZmc4MDIxMV9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjEwNC1cdC5yZXN1bWUgPSBicmNtZl9jZmc4MDIxMV9yZXN1bWUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo2MTA1Olx0LnNldF9wbWtzYSA9IGJyY21mX2NmZzgwMjExX3NldF9wbWtzYSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTYxMDYtXHQuZGVsX3Bta3NhID0gYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjc5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzM3NwoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgUG90ZW50aWFsIEZ1bmN0aW9ucyBmb3IgRnVydGhlciBFeGFtaW5hdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0byBkaWcgaW50byBkZWVwZXIuIFRoZSBpbml0aWFsIGxpc3QgaXMgcHJldHR5IHNwYXJzZSBiZWNhdXNlLCB3ZWxsLCBtb3N0IG9mIHRoZSBmdW5jdGlvbnMgYXJlIHN0YXRpYy4gKmJyY21mX2NmZzgwMjExX2F0dGFjaCogaXMgdGhlIGZpcnN0IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjb21lcyB0byBtaW5kLCBidXQgdGhhdCYjMzk7cyBqdXN0IHRoZSBhdHRhY2ggZnVuY3Rpb24uIE5vdCByZWFsbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBpbnZlc3RpZ2F0aW9uLCBJIHRoaW5rLgoKVGhlIG5leHQgdGhpbmcgSSYjMzk7bSBjb25zaWRlcmluZyBpcyAqYnJjbWZfcG1rc2FfdjJfb3AqLiBJdCYjMzk7cyAqcG90ZW50aWFsbHkqIHN0YXRpYywgYnV0IHRoYXQmIzM5O3MgYSBnb29kIHRoaW5nLiBJZiBpdCAqaXMqIHN0YXRpYywgSSBjYW4ganVzdCBmb2N1cyBvbiBpdC4gQnV0IEkgc2hvdWxkIGNoZWNrIHRoZSBjb21waWxlciBiZWhhdmlvciwgZ2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIHNpemUuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNvbXBpbGVyIG1pZ2h0IG5vdCBpbmxpbmUgaXQgYmVjYXVzZSBpdCYjMzk7cyBwcmV0dHkgbGFyZ2UsIGFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSB0aHJlZSBkaWZmZXJlbnQgbG9jYXRpb25zLiBMZXQmIzM5O3MgdmVyaWZ5OiAqYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhKiwgKmJyY21mX2NmZzgwMjExX2RlbF9wbWtzYSosIGFuZCAqYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2EqLiBPa2F5LCBpdCYjMzk7cyBhYm91dCA4MCBsaW5lcyDigJMgZGVmaW5pdGVseSBsYXJnZSBlbm91Z2ggdG8gbWFrZSB0aGUgY29tcGlsZXIgaGVzaXRhbnQgdG8gaW5saW5lIGl0IGV2ZXJ5d2hlcmUuIFNvICpicmNtZl9wbWtzYV92Ml9vcCogbG9va3MgbGlrZSBhIHNvbGlkIGZvY3VzLgoKSGFuZyBvbiwgd2hhdCBhYm91dCAqYnJjbWZfbmV0aWZfbW9uX3J4Kj8gTGV0IG1lIGdldCBiYWNrIHRvIHRoYXQgb25lLgoKT2theSwgKmJyY21mX25ldGlmX21vbl9yeCogaXMgbm9uLXN0YXRpYzogYHZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAuIEJ1dCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tICptc2didWYuYyosIHdoaWNoIGlzIFBDSWUgb25seS4gQW5kIHNpbmNlIFBDSWUgaXNuJiMzOTt0IGVhc2lseSBmdXp6YWJsZSwgaXQmIzM5O3MgcHJvYmFibHkgdW5yZWFjaGFibGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWFraW5nIGFzc3VtcHRpb25zLCB0aG91Z2guIExldCBtZSBjaGVjayBpZiAqYmNkYy5jKiAod2hpY2ggaGFuZGxlcyBVU0IgYW5kIFNESU8pIGNhbGxzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticmNtZl9uZXRpZl9tb25fcngmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9NDM0PXN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTQzOC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6NDM5OnZvaWQgYnJjbWZfbmV0aWZfbW9uX3J4KHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00NDAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmg9MjIwPXZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaDoyMjE6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaC0yMjItdm9pZCBicmNtZl9uZXRfZGV0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBib29sIGxvY2tlZCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTEyMDA9YnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEyNDAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTI0MTpcdFx0YnJjbWZfbmV0aWZfbW9uX3J4KGlmcCwgc2tiKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQyLVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+ODEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDAwOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzU1CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQb3RlbnRpYWwgVVNCIFJlYWNoYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBVU0IgaW50ZXJmYWNlIGluIHRoaXMgQnJvYWRjb20gZHJpdmVyIGNvZGUuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgY2hlY2tlZCBgbXNnYnVmLmNgIGFuZCBmb3VuZCB0aGF0IGBicmNtZl9uZXRpZl9tb25fcnhgIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiB0aGF0IGZpbGUuIFJpZ2h0LCBzbyB0aGF0IG1lYW5zIGl0JiMzOTtzIG5vdCByZWFjaGFibGUgdmlhIFVTQiBkaXJlY3RseS4KCk5leHQsIGxldCYjMzk7cyBsb29rIGF0IGBicmNtZl9mbG93cmluZ19ibG9ja2AuIFRoYXQmIzM5O3MgZGVmaW5lZCBpbiBgZmxvd3JpbmcuY2AsIGJ1dCBpdCYjMzk7cyAqb25seSogdXNlZCBieSBgbXNnYnVmLmNgLiBTbywgdGhhdCYjMzk7cyBhbm90aGVyIG9uZSB0aGF0JiMzOTtzIG9mZiB0aGUgdGFibGUgZm9yIFVTQiBhY2Nlc3MuCgpBbHJpZ2h0LCB3aGF0IGFib3V0IGBicmNtZl9zZGlvX3J4Z2xvbWA/IFRoYXQgZnVuY3Rpb24gaXMgaW4gYHNkaW8uY2AsIGFuZCB0aGF0IHNjcmVhbXMgU0RJTy1zcGVjaWZpYy4gRGVmaW5pdGVseSBub3QgcmVhY2hhYmxlIHZpYSBVU0IuCgpNb3Zpbmcgb24sIHRoZXJlJiMzOTtzIGBicmNtZl9wY2llX3NlbmRfbWJfZGF0YWAuIENsZWFybHksIHRoYXQmIzM5O3MgaW4gYHBjaWUuY2AuIFRoYXQmIzM5O3MgUENJZSwgc28gdGhhdCBmdW5jdGlvbiBpc24mIzM5O3QgcmVhY2hhYmxlIHRocm91Z2ggYSBVU0IgcGF0aCBlaXRoZXIuCgpOb3csIHRoZSBmaW5hbCBvbmUgb24gbXkgbGlzdCBpcyBgYnJjbWZfZndzX21hY2Rlc2NfaW5kaWNhdGVgIGluIGBmd3NpZ25hbC5jYC4gVGhlIHF1ZXN0aW9uIGhlcmUgaXMuLi4gZG9lcyBgZndzaWduYWwuY2AgKmV2ZXIqIGdldCB1c2VkIGJ5IHRoZSBVU0IgaW1wbGVtZW50YXRpb24/IFRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZGV0ZXJtaW5lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAwMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmd3NpZ25hbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlPTI5PWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDX1BST1RPX0JDREMpICYjNDM7PSBcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTMwLVx0XHRiY2RjLm8gXFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZTozMTpcdFx0ZndzaWduYWwub1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTMyLWJyY21mbWFjLSQoQ09ORklHX0JSQ01GTUFDX1BST1RPX01TR0JVRikgJiM0Mzs9IFxcXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjZGMuYy0xOC0jaW5jbHVkZSBcJiMzNDtidXMuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjZGMuYzoxOTojaW5jbHVkZSBcJiMzNDtmd3NpZ25hbC5oXCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNkYy5jLTIwLSNpbmNsdWRlIFwmIzM0O2RlYnVnLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MTQxPXN0cnVjdCBicmNtZl9idXNfc3RhdHMge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0xNTgtICogQGZ3dmlkOiBmaXJtd2FyZSB2ZW5kb3Itc3VwcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBkZXZpY2UuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MTU5OiAqIEBhbHdheXNfdXNlX2Z3c19xdWV1ZTogYnVzIHdhbnRzIHVzZSBxdWV1ZSBhbHNvIHdoZW4gZndzaWduYWwgaXMgaW5hY3RpdmUuXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMTYwLSAqIEB3b3dsX3N1cHBvcnRlZDogaXMgd293bCBzdXBwb3J0ZWQgYnkgYnVzIGRyaXZlci5cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yNi0jaW5jbHVkZSBcJiMzNDtwbm8uaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Mjc6I2luY2x1ZGUgXCYjMzQ7ZndzaWduYWwuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjgtI2luY2x1ZGUgXCYjMzQ7Y2ZnODAyMTEuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jLTIzLSNpbmNsdWRlIFwmIzM0O2Z3ZWguaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmM6MjQ6I2luY2x1ZGUgXCYjMzQ7ZndzaWduYWwuaFwmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmMtMjUtI2luY2x1ZGUgXCYjMzQ7cDJwLmhcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYwMTcKCQkJCQkJCW91dHB1dDogMjgzCgkJCQkJCQl0aG91Z2h0czogMTQxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFN0cmF0ZWd5IGZvciBCcm9hZGNvbSBXaUZpIERyaXZlciAoVVNCKSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBjaGFuZ2VzIGluIHRoZSBCcm9hZGNvbSBXaUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IHJlYWNoYWJsZSBmdW5jdGlvbmFsaXR5IHZpYSBVU0IuIEl0IHNlZW1zIGBmd3NpZ25hbC5jYCBoYXMgYSBjb21tZW50IHVwZGF0ZSwgbm90aGluZyBhY3Rpb25hYmxlIHRoZXJlLiBTaW1pbGFybHksIHRoZSBjaGFuZ2VzIGluIGBicmNtZl9uZXRpZl9tb25fcnhgLCBgYnJjbWZfZmxvd3JpbmdfYmxvY2tgLCBgYnJjbWZfbXNnYnVmX3NjaGVkdWxlX3R4ZGF0YWAsIGBicmNtZl9wY2llX3NlbmRfbWJfZGF0YWAsIGFuZCBgYnJjbWZfc2Rpb19yeGdsb21gIGFyZSBhbGwgUENJZSBvciBTRElPIHNwZWNpZmljOyBub3QgcmVsZXZhbnQgZm9yIG91ciBVU0IgZm9jdXMuIFdlIGhhdmUgYSBzaW1pbGFyIHNpdHVhdGlvbiB3aXRoIGBicmNtc19jX2FtcGR1X2FkZF9mcmFtZWAuIEFuZCB3ZSBjYW4gYWxzbyBkaXNtaXNzIGBicmNtZl9kZWxheWAgZm9yIGZ1enppbmcgZWZmb3J0cywgYXMgaXTigJlzIGEgbWlub3IgdGltaW5nIGNoYW5nZS4KClRoZSBvbmx5ICpyZWFsKiBmdW5jdGlvbmFsIGNoYW5nZSBpcyBgYnJjbWZfcG1rc2FfdjJfb3BgLiBUaGlzIGlzIGEgbmV3IFYyIFBNS1NBIGNhY2hlIHVwZGF0ZSBpbXBsZW1lbnRhdGlvbjsgc291bmRzIGxpa2UgYSBnb29kIHRhcmdldC4gSXQgdGFrZXMgYHBta3NhYCBmaWVsZHMgYW5kIHBvcHVsYXRlcyBhIHN0cnVjdCBzZW50IHRvIHRoZSBmaXJtd2FyZSBhbmQgY2FuIGJlIHJlYWNoZWQgdmlhIGBOTDgwMjExX0NNRF9TRVRfUE1LU0FgLgoKVG8gcmVhY2ggdGhpcywgd2UgbmVlZCBgQlJDTUZNQUNgIGFuZCBgQlJDTUZNQUNfVVNCYCBlbmFibGVkLiBgQlJDTUZNQUNfVVNCYCBkZXBlbmRzIG9uIGBVU0JgLCBzbyB0aGF0JiMzOTtzIGltcGxpY2l0bHkgZW5hYmxlZC4gV2UgYWxzbyBuZWVkIGBDRkc4MDIxMWAgZW5hYmxlZC4gU3l6a2FsbGVyJiMzOTtzIGBzeXpfdXNiX2Nvbm5lY3RgIGNhbiBlbXVsYXRlIHRoZSBVU0IgZGV2aWNlLiBUaGUgZHJpdmVyIHdpbGwgc2VuZCBgZGNtZHNgLiBJZiB0aGUgZnV6emVyIHJlcGxpZXMgd2l0aCBgd2xjX3ZlcmAgJmd0Oz0gMTIsIHRoZW4gYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIGVuYWJsZWQuIFRoZW4gYE5MODAyMTFfQ01EX1NFVF9QTUtTQWAgdHJpZ2dlcnMgYGJyY21mX3Bta3NhX3YyX29wYC4gU28sIHRoYXQmIzM5O3Mgb3VyIHJlYWNoYWJsZSBwYXRoLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYCBhbGwgY2FsbCBgYnJjbWZfcG1rc2FfdjJfb3BgLiBFdmVuIHRob3VnaCB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYywgdGhleSBoYXZlIGFkZHJlc3MgdGFrZW4gaW4gYGNmZzgwMjExX29wc2AsIHNvIHRoZXkgYXJlIGFsc28gYWN0aW9uYWJsZS4KClNvLCBoZXJlJiMzOTtzIHRoZSBwbGFuOgoKKiAgICoqV29ydGhGdXp6aW5nID0gdHJ1ZSoqCiogICAqKkZvY3VzU3ltYm9sczoqKiBgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhYCwgYGJyY21mX2NmZzgwMjExX2RlbF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYWAsIGBicmNtZl9wbWtzYV92Ml9vcGAKKiAgICoqRW5hYmxlQ29uZmlnczoqKiBgQlJDTUZNQUNgLCBgQlJDTUZNQUNfVVNCYCAod2hpY2ggY292ZXJzIHdoYXQgd2UgbmVlZCkKCldlIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGlzIHJ1bm5pbmcgaW4gUUVNVSB3aXRoIHN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMDA6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JSQ01GTUFDJiMzNDssCiAgICAmIzM0O0JSQ01GTUFDX1VTQiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyY21mX3Bta3NhX3YyX29wJiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX3NldF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9kZWxfcG1rc2EmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2EmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBjb21wb25lbnRzIG9mIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXJzLiBDaGFuZ2VzIHRvIFBDSWUgKG1zZ2J1Zi5jLCBmbG93cmluZy5jLCBwY2llLmMpIGFuZCBTRElPIChzZGlvLmMpIGFyZSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXMgdGhleSByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLiBIb3dldmVyLCB0aGUgYnJjbWZtYWMgZHJpdmVyIHN1cHBvcnRzIFVTQiwgd2hpY2ggY2FuIGJlIGVtdWxhdGVkIGJ5IHN5emthbGxlci4gVGhlIHBhdGNoIGFkZHMgYGJyY21mX3Bta3NhX3YyX29wYCBpbiB0aGUgc2hhcmVkIGNmZzgwMjExLmMgdG8gaGFuZGxlIFYyIFBNS1NBIGNhY2hlIHVwZGF0ZXMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBOTDgwMjExX0NNRF9TRVRfUE1LU0EpIGlmIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIHJlcG9ydHMgYSBmaXJtd2FyZSB2ZXJzaW9uIFx1MDAzZT0gMTIuIFRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBpcyBmdXp6YWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlJDTUZNQUMmIzM0OywKICAgICYjMzQ7QlJDTUZNQUNfVVNCJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJjbWZfcG1rc2FfdjJfb3AmIzM0OywKICAgICYjMzQ7YnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhJiMzNDssCiAgICAmIzM0O2JyY21mX2NmZzgwMjExX2RlbF9wbWtzYSYjMzQ7LAogICAgJiMzNDticmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGNvbXBvbmVudHMgb2YgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlcnMuIENoYW5nZXMgdG8gUENJZSAobXNnYnVmLmMsIGZsb3dyaW5nLmMsIHBjaWUuYykgYW5kIFNESU8gKHNkaW8uYykgYXJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcyB0aGV5IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUuIEhvd2V2ZXIsIHRoZSBicmNtZm1hYyBkcml2ZXIgc3VwcG9ydHMgVVNCLCB3aGljaCBjYW4gYmUgZW11bGF0ZWQgYnkgc3l6a2FsbGVyLiBUaGUgcGF0Y2ggYWRkcyBgYnJjbWZfcG1rc2FfdjJfb3BgIGluIHRoZSBzaGFyZWQgY2ZnODAyMTEuYyB0byBoYW5kbGUgVjIgUE1LU0EgY2FjaGUgdXBkYXRlcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGNmZzgwMjExIG5ldGxpbmsgY29tbWFuZHMgKGUuZy4sIE5MODAyMTFfQ01EX1NFVF9QTUtTQSkgaWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgcmVwb3J0cyBhIGZpcm13YXJlIHZlcnNpb24gXHUwMDNlPSAxMi4gVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGlzIGZ1enphYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDY6MTcuNjQzOTg4MDY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDEwOTA2NDYxMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9wbWtzYV92Ml9vcFwiLFxuICAgIFwiYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhXCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBjb21wb25lbnRzIG9mIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXJzLiBDaGFuZ2VzIHRvIFBDSWUgKG1zZ2J1Zi5jLCBmbG93cmluZy5jLCBwY2llLmMpIGFuZCBTRElPIChzZGlvLmMpIGFyZSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXMgdGhleSByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLiBIb3dldmVyLCB0aGUgYnJjbWZtYWMgZHJpdmVyIHN1cHBvcnRzIFVTQiwgd2hpY2ggY2FuIGJlIGVtdWxhdGVkIGJ5IHN5emthbGxlci4gVGhlIHBhdGNoIGFkZHMgYGJyY21mX3Bta3NhX3YyX29wYCBpbiB0aGUgc2hhcmVkIGNmZzgwMjExLmMgdG8gaGFuZGxlIFYyIFBNS1NBIGNhY2hlIHVwZGF0ZXMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBOTDgwMjExX0NNRF9TRVRfUE1LU0EpIGlmIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIHJlcG9ydHMgYSBmaXJtd2FyZSB2ZXJzaW9uIFxcdTAwM2U9IDEyLiBUaGVyZWZvcmUsIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgZnV6emFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjE3LjY0Mzk5NDYyNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcwNzY4NzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDUzNjllMTQzOTJlMWY5NDI4NDQ2OWMzODY2ZGI3ZTIxY2RiYzRhZVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyIDAwOjQ2OjE2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG5pbmRleCAwYjU1ZDQ0NTg5NWYyLi4yMzc1YzJmOWQ5N2EyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcXG5AQCAtMzk4OSwxMiArMzk4OSwxMCBAQCBzdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxcbiBcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGJyY21mX2RlbGF5KHUzMiBtcylcXG4ge1xcbi1cXHRpZiAobXMgXFx1MDAzYyAxMDAwIC8gSFopIHtcXG4tXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuLVxcdFxcdG1kZWxheShtcyk7XFxuLVxcdH0gZWxzZSB7XFxuK1xcdGlmIChtcyBcXHUwMDNjPSAyMClcXG4rXFx0XFx0dXNsZWVwX3JhbmdlKG1zICogMTAwMCwgbXMgKiAxMDAwICsgMTAwMCk7XFxuK1xcdGVsc2VcXG4gXFx0XFx0bXNsZWVwKG1zKTtcXG4tXFx0fVxcbiB9XFxuIFxcbiBzdGF0aWMgczMyIGJyY21mX2NvbmZpZ193b3dsX3BhdHRlcm4oc3RydWN0IGJyY21mX2lmICppZnAsIHU4IGNtZFs0XSxcXG5AQCAtNDM2NCw2ICs0MzYyLDEwOSBAQCBicmNtZl9wbWtzYV92M19vcChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IGNmZzgwMjExX3Bta3NhICpwbWtzYSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJyY21mX3Bta3NhX3YyX29wIC0gdXBkYXRlIGZpcm13YXJlIFBNS1NBIGNhY2hlIHVzaW5nIHRoZSBWMiBsaXN0IGludGVyZmFjZS5cXG4rICpcXG4rICogVjIgZmlybXdhcmUgKHJldmlzaW9uIDEyKSB1c2VzIGEgdmVyc2lvbmVkIGZsYXQgbGlzdCBzdHJ1Y3R1cmVcXG4rICogKGJyY21mX3Bta19saXN0X3YyX2xlKSByYXRoZXIgdGhhbiB0aGUgcGVyLWVudHJ5IG9wZXJhdGlvbiBtb2RlbCBvZiBWMy5cXG4rICogRWFjaCBlbnRyeSBjYXJyaWVzIEZJTFMtc3BlY2lmaWMgZmllbGRzIChyYXcgUE1LIG1hdGVyaWFsLCBTU0lELCBhbmRcXG4rICogZmlsc19jYWNoZV9pZCkgaW4gYWRkaXRpb24gdG8gdGhlIGJhc2ljIEJTU0lEICsgUE1LSUQgcGFpciwgZW5hYmxpbmdcXG4rICogRklMUyBmYXN0LXJvYW1pbmcgb24gZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFYzLlxcbisgKlxcbisgKiBAY2ZnOiAgIGRyaXZlciBjb25maWcgc3RydWN0dXJlIGhvbGRpbmcgdGhlIHNoYWRvdyBWMiBQTUtTQSBsaXN0XFxuKyAqIEBpZnA6ICAgaW50ZXJmYWNlIHBvaW50ZXJcXG4rICogQHBta3NhOiB0aGUgUE1LU0EgdG8gYWRkL3JlbW92ZSwgb3IgTlVMTCBmb3IgYSBmbHVzaFxcbisgKiBAYWxpdmU6IHRydWUgPSBhZGQgKHNldCB0aW1lX2xlZnQgdG8gbm8tZXhwaXJ5KSwgZmFsc2UgPSByZW1vdmUvZmx1c2hcXG4rICovXFxuK3N0YXRpYyBzMzJcXG4rYnJjbWZfcG1rc2FfdjJfb3Aoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywgc3RydWN0IGJyY21mX2lmICppZnAsXFxuK1xcdFxcdCAgc3RydWN0IGNmZzgwMjExX3Bta3NhICpwbWtzYSwgYm9vbCBhbGl2ZSlcXG4re1xcbitcXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gY2ZnLVxcdTAwM2VwdWI7XFxuK1xcdHN0cnVjdCBicmNtZl9wbWtfbGlzdF92Ml9sZSAqbGlzdCA9IFxcdTAwMjZjZmctXFx1MDAzZXBta19saXN0X3YyO1xcbitcXHRzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIgKnBtayA9IGxpc3QtXFx1MDAzZXBtaztcXG4rXFx0dTMyIG5wbWsgPSBsZTE2X3RvX2NwdShsaXN0LVxcdTAwM2VsZW5ndGgpO1xcbitcXHR1MzIgaTtcXG4rXFxuK1xcdC8qIG5wbWsgaGVyZSBzdG9yZXMgdGhlIGNvdW50IG9mIHZhbGlkIGVudHJpZXMsIHJlcHVycG9zaW5nIHRoZVxcbitcXHQgKiBsZW5ndGggZmllbGQgb2YgdGhlIHNoYWRvdyBsaXN0IGFzIGEgY291bnRlci4gIFdlIGNvbnZlcnQgdG9cXG4rXFx0ICogdGhlIHdpcmUgZm9ybWF0IChieXRlIGxlbmd0aCkgd2hlbiBzZW5kaW5nIHRvIGZpcm13YXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFwbWtzYSkge1xcbitcXHRcXHQvKiBGbHVzaDogemVybyB0aGUgc2hhZG93IGxpc3QgYW5kIHB1c2ggYW4gZW1wdHkgVjIgbGlzdC4gKi9cXG4rXFx0XFx0bWVtc2V0KGxpc3QsIDAsIHNpemVvZigqbGlzdCkpO1xcbitcXHRcXHRnb3RvIHNlbmQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChhbGl2ZSkge1xcbitcXHRcXHQvKiBTZXQ6IHNlYXJjaCBmb3IgZXhpc3RpbmcgQlNTSUQgbWF0Y2ggZmlyc3QuICovXFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucG1rOyBpKyspXFxuK1xcdFxcdFxcdGlmICghbWVtY21wKHBta3NhLVxcdTAwM2Vic3NpZCwgcG1rW2ldLmJzc2lkLCBFVEhfQUxFTikpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKGkgXFx1MDAzZT0gQlJDTUZfTUFYUE1LSUQpIHtcXG4rXFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcIlYyIFBNS1NBIGNhY2hlIGZ1bGwgKCVkIGVudHJpZXMpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgbnBtayk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRtZW1zZXQoXFx1MDAyNnBta1tpXSwgMCwgc2l6ZW9mKHBta1tpXSkpO1xcbitcXHRcXHRwbWtbaV0ubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBicmNtZl9wbWtzYV92MikpO1xcbitcXHRcXHRpZiAocG1rc2EtXFx1MDAzZWJzc2lkKVxcbitcXHRcXHRcXHRtZW1jcHkocG1rW2ldLmJzc2lkLCBwbWtzYS1cXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcXG4rXFx0XFx0aWYgKHBta3NhLVxcdTAwM2VwbWtpZClcXG4rXFx0XFx0XFx0bWVtY3B5KHBta1tpXS5wbWtpZCwgcG1rc2EtXFx1MDAzZXBta2lkLCBXTEFOX1BNS0lEX0xFTik7XFxuK1xcdFxcdGlmIChwbWtzYS1cXHUwMDNlcG1rIFxcdTAwMjZcXHUwMDI2IHBta3NhLVxcdTAwM2VwbWtfbGVuIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBwbWtzYS1cXHUwMDNlcG1rX2xlbiBcXHUwMDNjPSBXTEFOX1BNS19MRU5fU1VJVEVfQl8xOTIpIHtcXG4rXFx0XFx0XFx0bWVtY3B5KHBta1tpXS5wbWssIHBta3NhLVxcdTAwM2VwbWssIHBta3NhLVxcdTAwM2VwbWtfbGVuKTtcXG4rXFx0XFx0XFx0cG1rW2ldLnBta19sZW4gPSBjcHVfdG9fbGUxNihwbWtzYS1cXHUwMDNlcG1rX2xlbik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0aWYgKHBta3NhLVxcdTAwM2Vzc2lkIFxcdTAwMjZcXHUwMDI2IHBta3NhLVxcdTAwM2Vzc2lkX2xlbikge1xcbitcXHRcXHRcXHRtZW1jcHkocG1rW2ldLnNzaWQuU1NJRCwgcG1rc2EtXFx1MDAzZXNzaWQsIHBta3NhLVxcdTAwM2Vzc2lkX2xlbik7XFxuK1xcdFxcdFxcdHBta1tpXS5zc2lkLlNTSURfbGVuID0gcG1rc2EtXFx1MDAzZXNzaWRfbGVuO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChwbWtzYS1cXHUwMDNlZmlsc19jYWNoZV9pZClcXG4rXFx0XFx0XFx0cG1rW2ldLmZpbHNfY2FjaGVfaWQgPSAqcG1rc2EtXFx1MDAzZWZpbHNfY2FjaGVfaWQ7XFxuK1xcbitcXHRcXHRpZiAoaSA9PSBucG1rKVxcbitcXHRcXHRcXHRucG1rKys7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIERlbGV0ZTogZmluZCBieSBCU1NJRCBhbmQgY29tcGFjdCB0aGUgbGlzdC4gKi9cXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wbWs7IGkrKylcXG4rXFx0XFx0XFx0aWYgKCFtZW1jbXAocG1rc2EtXFx1MDAzZWJzc2lkLCBwbWtbaV0uYnNzaWQsIEVUSF9BTEVOKSlcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRpZiAoaSBcXHUwMDNlPSBucG1rKSB7XFxuK1xcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJWMiBQTUtTQSBlbnRyeSBub3QgZm91bmRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBucG1rIC0gMTsgaSsrKVxcbitcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNnBta1tpXSwgXFx1MDAyNnBta1tpICsgMV0sIHNpemVvZihwbWtbaV0pKTtcXG4rXFx0XFx0bWVtc2V0KFxcdTAwMjZwbWtbbnBtayAtIDFdLCAwLCBzaXplb2YocG1rW25wbWsgLSAxXSkpO1xcbitcXHRcXHRucG1rLS07XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFdyaXRlIHRoZSB1cGRhdGVkIGVudHJ5IGNvdW50IGJhY2sgdG8gc2hhZG93IEJFRk9SRSB3ZSBvdmVyd3JpdGVcXG4rXFx0ICogbGlzdC1cXHUwMDNlbGVuZ3RoIHdpdGggdGhlIHdpcmUtZm9ybWF0IGJ5dGUgbGVuZ3RoIGF0IHNlbmQ6LiAgSWYgd2VcXG4rXFx0ICogZG9uJ3QgZG8gdGhpcyBoZXJlLCB0aGUgbmV4dCBjYWxsIHdpbGwgcmVhZCBhIGJ5dGUtbGVuZ3RoIGJhY2tcXG4rXFx0ICogYXMgYW4gZW50cnkgY291bnQgYW5kIHNpbGVudGx5IGNvcnJ1cHQgdGhlIGxpc3QuXFxuK1xcdCAqL1xcbitcXHRsaXN0LVxcdTAwM2VsZW5ndGggPSBjcHVfdG9fbGUxNihucG1rKTtcXG4rXFxuK3NlbmQ6XFxuK1xcdC8qIEJ1aWxkIHRoZSB3aXJlLWZvcm1hdCBieXRlIGxlbmd0aCBhbmQgc2VuZCB0aGUgZnVsbCBsaXN0IHRvIGZpcm13YXJlLlxcbitcXHQgKiBSZWFkIG5wbWsgYmFjayBmcm9tIHRoZSBzaGFkb3cgKGhhbmRsZXMgdGhlIGZsdXNoIHBhdGggd2hlcmUgbnBtaz0wKS5cXG4rXFx0ICovXFxuK1xcdG5wbWsgPSBsZTE2X3RvX2NwdShsaXN0LVxcdTAwM2VsZW5ndGgpO1xcbitcXHRsaXN0LVxcdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMTYoQlJDTUZfUE1LU0FfVkVSXzIpO1xcbitcXHRsaXN0LVxcdTAwM2VsZW5ndGggID0gY3B1X3RvX2xlMTYob2Zmc2V0b2Yoc3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlLCBwbWspICtcXG4rXFx0XFx0XFx0XFx0ICAgbnBtayAqIHNpemVvZihzdHJ1Y3QgYnJjbWZfcG1rc2FfdjIpKTtcXG4rXFxuK1xcdHJldHVybiBicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCBcXFwicG1raWRfaW5mb1xcXCIsIGxpc3QsIHNpemVvZigqbGlzdCkpO1xcbit9XFxuK1xcbitcXG4gc3RhdGljIF9fdXNlZCBzMzJcXG4gYnJjbWZfdXBkYXRlX3Bta2xpc3Qoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywgc3RydWN0IGJyY21mX2lmICppZnApXFxuIHtcXG5AQCAtNDQwMiw4ICs0NTAzLDggQEAgYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbiBcXG4gXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxcbiBcXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBwbWtzYSwgdHJ1ZSk7XFxuLVxcbi1cXHQvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi9cXG4rXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxcbitcXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCB0cnVlKTtcXG4gXFxuIFxcdG5wbWsgPSBsZTMyX3RvX2NwdShjZmctXFx1MDAzZXBta19saXN0Lm5wbWspO1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnBtazsgaSsrKVxcbkBAIC00NDQ2LDggKzQ1NDcsOCBAQCBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcbiBcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXFxuIFxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCBmYWxzZSk7XFxuLVxcbi1cXHQvKiBUT0RPOiBpbXBsZW1lbnQgUE1LSURfVjIgKi9cXG4rXFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxcbitcXHRcXHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCBmYWxzZSk7XFxuIFxcbiBcXHRucG1rID0gbGUzMl90b19jcHUoY2ZnLVxcdTAwM2VwbWtfbGlzdC5ucG1rKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5wbWs7IGkrKylcXG5AQCAtNDQ4Nyw4ICs0NTg4LDggQEAgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcbiBcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXFxuIFxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIE5VTEwsIGZhbHNlKTtcXG4tXFxuLVxcdC8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqL1xcbitcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXFxuK1xcdFxcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgTlVMTCwgZmFsc2UpO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZjZmctXFx1MDAzZXBta19saXN0LCAwLCBzaXplb2YoY2ZnLVxcdTAwM2VwbWtfbGlzdCkpO1xcbiBcXHRlcnIgPSBicmNtZl91cGRhdGVfcG1rbGlzdChjZmcsIGlmcCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcXG5pbmRleCA2Y2ViMzAxNDI5MDU0Li41NzE2N2ZkZTViYTE1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcXG5AQCAtMzQ0LDcgKzM0NCw4IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV93b3dsIHtcXG4gICogQGJzc19saXN0OiBic3NfbGlzdCBob2xkaW5nIHNjYW5uZWQgYXAgaW5mb3JtYXRpb24uXFxuICAqIEBic3NfaW5mbzogYnNzIGluZm9ybWF0aW9uIGZvciBjZmc4MDIxMSBsYXllci5cXG4gICogQGNvbm5faW5mbzogYXNzb2NpYXRpb24gaW5mby5cXG4tICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0LlxcbisgKiBAcG1rX2xpc3Q6IHdwYTIgcG1rIGxpc3QgKFYxIGZpcm13YXJlKS5cXG4rICogQHBta19saXN0X3YyOiB3cGEyIHBtayBsaXN0IGZvciBWMiBmaXJtd2FyZSAoRklMUy1jYXBhYmxlLCBmaXJtd2FyZSByZXYgMTIpLlxcbiAgKiBAc2Nhbl9zdGF0dXM6IHNjYW4gYWN0aXZpdHkgb24gdGhlIGRvbmdsZS5cXG4gICogQHB1YjogY29tbW9uIGRyaXZlciBpbmZvcm1hdGlvbi5cXG4gICogQGNoYW5uZWw6IGN1cnJlbnQgY2hhbm5lbC5cXG5AQCAtMzc2LDYgKzM3Nyw3IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvIHtcXG4gXFx0c3RydWN0IHdsX2NmZzgwMjExX2Jzc19pbmZvICpic3NfaW5mbztcXG4gXFx0c3RydWN0IGJyY21mX2NmZzgwMjExX2Nvbm5lY3RfaW5mbyBjb25uX2luZm87XFxuIFxcdHN0cnVjdCBicmNtZl9wbWtfbGlzdF9sZSBwbWtfbGlzdDtcXG4rXFx0c3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlIHBta19saXN0X3YyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNjYW5fc3RhdHVzO1xcbiBcXHRzdHJ1Y3QgYnJjbWZfcHViICpwdWI7XFxuIFxcdHUzMiBjaGFubmVsO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1xcbmluZGV4IGVjMTcwNjQ3ODAwZGEuLmVlZmM0MzdkZDA1NTAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcXG5AQCAtNDMxLDQ1ICs0MzEsNTUgQEAgdm9pZCBicmNtZl9uZXRpZl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0bmV0aWZfcngoc2tiKTtcXG4gfVxcbiBcXG4rc3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8ge1xcbitcXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBoZHI7XFxuK1xcdHM4IGRibV9hbnRzaWduYWw7XFxuK30gX19wYWNrZWQ7XFxuK1xcbiB2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9NT05JVE9SX0ZNVF9SQURJT1RBUCkpIHtcXG4tXFx0XFx0LyogRG8gbm90aGluZyAqL1xcbitcXHRcXHQvKiBGaXJtd2FyZSBhbHJlYWR5IHByb3ZpZGVkIGEgZnVsbCByYWRpb3RhcCBoZWFkZXI7IGRvIG5vdGhpbmcgKi9cXG4gXFx0fSBlbHNlIGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX01PTklUT1JfRk1UX0hXX1JYX0hEUikpIHtcXG4gXFx0XFx0c3RydWN0IHdsY19kMTFyeGhkciAqd2xjX3J4aGRyID0gKHN0cnVjdCB3bGNfZDExcnhoZHIgKilza2ItXFx1MDAzZWRhdGE7XFxuLVxcdFxcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpyYWRpb3RhcDtcXG4rXFx0XFx0c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8gKnJ0YXA7XFxuIFxcdFxcdHVuc2lnbmVkIGludCBvZmZzZXQ7XFxuIFxcdFxcdHUxNiBSeFN0YXR1czE7XFxuK1xcdFxcdHM4IHJzc2k7XFxuIFxcbiBcXHRcXHRSeFN0YXR1czEgPSBsZTE2X3RvX2NwdSh3bGNfcnhoZHItXFx1MDAzZXJ4aGRyLlJ4U3RhdHVzMSk7XFxuK1xcdFxcdHJzc2kgPSB3bGNfcnhoZHItXFx1MDAzZXJzc2k7XFxuIFxcbiBcXHRcXHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHdsY19kMTFyeGhkcik7XFxuLVxcdFxcdC8qIE1BQyBpbnNlcnRzIDIgcGFkIGJ5dGVzIGZvciBhNCBoZWFkZXJzIG9yIFFvUyBvciBBLU1TRFVcXG4tXFx0XFx0ICogc3ViZnJhbWVzXFxuLVxcdFxcdCAqL1xcbitcXHRcXHQvKiBNQUMgaW5zZXJ0cyAyIHBhZCBieXRlcyBmb3IgYTQgaGVhZGVycyBvciBRb1Mgb3IgQS1NU0RVIHN1YmZyYW1lcyAqL1xcbiBcXHRcXHRpZiAoUnhTdGF0dXMxIFxcdTAwMjYgUlhTX1BCUFJFUylcXG4gXFx0XFx0XFx0b2Zmc2V0ICs9IDI7XFxuIFxcdFxcdG9mZnNldCArPSBEMTFfUEhZX0hEUl9MRU47XFxuIFxcbiBcXHRcXHRza2JfcHVsbChza2IsIG9mZnNldCk7XFxuIFxcbi1cXHRcXHQvKiBUT0RPOiB1c2UgUlggaGVhZGVyIHRvIGZpbGwgc29tZSByYWRpb3RhcCBkYXRhICovXFxuLVxcdFxcdHJhZGlvdGFwID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnJhZGlvdGFwKSk7XFxuLVxcdFxcdG1lbXNldChyYWRpb3RhcCwgMCwgc2l6ZW9mKCpyYWRpb3RhcCkpO1xcbi1cXHRcXHRyYWRpb3RhcC1cXHUwMDNlaXRfbGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpyYWRpb3RhcCkpO1xcbi1cXG4tXFx0XFx0LyogVE9ETzogNCBieXRlcyB3aXRoIHJlY2VpdmUgc3RhdHVzPyAqL1xcbi1cXHRcXHRza2ItXFx1MDAzZWxlbiAtPSA0O1xcbitcXHRcXHQvKiBJbnNlcnQgb3VyIHJhZGlvdGFwIGhlYWRlciB3aXRoIFJTU0kgZGF0YSAqL1xcbitcXHRcXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKCpydGFwKSkpXFxuK1xcdFxcdFxcdGdvdG8gZHJvcDtcXG4rXFx0XFx0cnRhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpydGFwKSk7XFxuK1xcdFxcdG1lbXNldChydGFwLCAwLCBzaXplb2YoKnJ0YXApKTtcXG4rXFx0XFx0cnRhcC1cXHUwMDNlaGRyLml0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcnRhcCkpO1xcbitcXHRcXHRydGFwLVxcdTAwM2VoZHIuaXRfcHJlc2VudCA9IGNwdV90b19sZTMyKDEgXFx1MDAzY1xcdTAwM2MgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUwpO1xcbitcXHRcXHRydGFwLVxcdTAwM2VkYm1fYW50c2lnbmFsID0gcnNzaTtcXG4rXFxuK1xcdFxcdC8qIFN0cmlwIHRoZSA0LWJ5dGUgcmVjZWl2ZSBzdGF0dXMgLyBGQ1MgdGFpbCAqL1xcbitcXHRcXHRza2JfdHJpbShza2IsIHNrYi1cXHUwMDNlbGVuIC0gNCk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpyYWRpb3RhcDtcXG4gXFxuLVxcdFxcdC8qIFRPRE86IHVzZSBSWCBzdGF0dXMgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi9cXG4rXFx0XFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqcmFkaW90YXApKSlcXG4rXFx0XFx0XFx0Z290byBkcm9wO1xcbiBcXHRcXHRyYWRpb3RhcCA9IHNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyYWRpb3RhcCkpO1xcbiBcXHRcXHRtZW1zZXQocmFkaW90YXAsIDAsIHNpemVvZigqcmFkaW90YXApKTtcXG4gXFx0XFx0cmFkaW90YXAtXFx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcXG4gXFxuLVxcdFxcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cXG4tXFx0XFx0c2tiLVxcdTAwM2VsZW4gLT0gNDtcXG4rXFx0XFx0LyogU3RyaXAgdGhlIDQtYnl0ZSByZWNlaXZlIHN0YXR1cyAvIEZDUyB0YWlsICovXFxuK1xcdFxcdHNrYl90cmltKHNrYiwgc2tiLVxcdTAwM2VsZW4gLSA0KTtcXG4gXFx0fVxcbiBcXG4gXFx0c2tiLVxcdTAwM2VkZXYgPSBpZnAtXFx1MDAzZW5kZXY7XFxuQEAgLTQ3OCw2ICs0ODgsMTAgQEAgdm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7XFxuIFxcbiBcXHRicmNtZl9uZXRpZl9yeChpZnAsIHNrYik7XFxuK1xcdHJldHVybjtcXG4rXFxuK2Ryb3A6XFxuK1xcdGJyY211X3BrdF9idWZfZnJlZV9za2Ioc2tiKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBicmNtZl9yeF9oZHJwdWxsKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsIHN0cnVjdCBza19idWZmICpza2IsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmNcXG5pbmRleCAzNWNiY2VhMGFiYzlhLi5iOWM1MTg5MzlmNTA0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmNcXG5AQCAtMTgyLDEwICsxODIsOCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXFxuIFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZjtcXG4gXFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2cjtcXG4gXFx0c3RydWN0IGJyY21mX2lmICppZnA7XFxuLVxcdGJvb2wgY3VycmVudGx5X2Jsb2NrZWQ7XFxuLVxcdGludCBpO1xcbi1cXHR1OCBpZmlkeDtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTggaWZpZHg7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Zmxvdy1cXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xcbiBcXG5AQCAtMTk0LDIzICsxOTIsNTQgQEAgc3RhdGljIHZvaWQgYnJjbWZfZmxvd3JpbmdfYmxvY2soc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkLFxcbiBcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZmbG93LVxcdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRpZmlkeCA9IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChmbG93LCBmbG93aWQpO1xcbiBcXG4tXFx0Y3VycmVudGx5X2Jsb2NrZWQgPSBmYWxzZTtcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZsb3ctXFx1MDAzZW5yb2ZyaW5nczsgaSsrKSB7XFxuLVxcdFxcdGlmICgoZmxvdy1cXHUwMDNlcmluZ3NbaV0pIFxcdTAwMjZcXHUwMDI2IChpICE9IGZsb3dpZCkpIHtcXG4tXFx0XFx0XFx0cmluZyA9IGZsb3ctXFx1MDAzZXJpbmdzW2ldO1xcbi1cXHRcXHRcXHRpZiAoKHJpbmctXFx1MDAzZXN0YXR1cyA9PSBSSU5HX09QRU4pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgICAoYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGkpID09IGlmaWR4KSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocmluZy1cXHUwMDNlYmxvY2tlZCkge1xcbi1cXHRcXHRcXHRcXHRcXHRjdXJyZW50bHlfYmxvY2tlZCA9IHRydWU7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXHRcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdH1cXG4rXFx0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcXG4rXFx0cmluZy1cXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBNYWludGFpbiB0aGUgcGVyLWludGVyZmFjZSBibG9ja2VkLXJpbmcgY291bnRlci5cXG4rXFx0ICpcXG4rXFx0ICogV2UgdXNlIHJpbmctXFx1MDAzZWNvdW50ZWRfaW5fYmxvY2tlZCByYXRoZXIgdGhhbiBjaGVja2luZ1xcbitcXHQgKiByaW5nLVxcdTAwM2VzdGF0dXMgaGVyZS4gIEEgcmluZyB0aGF0IGJlY2FtZSBibG9ja2VkIHdoaWxlXFxuK1xcdCAqIFJJTkdfT1BFTiBoYXMgYWxyZWFkeSBiZWVuIGNvdW50ZWQgKGNvdW50ZWRfaW5fYmxvY2tlZD10cnVlKS5cXG4rXFx0ICogQnkgdGhlIHRpbWUgd2UgdW5ibG9jayBpdCBkdXJpbmcgdGVhcmRvd24gaXRzIHN0YXR1cyBtYXkgaGF2ZVxcbitcXHQgKiBhZHZhbmNlZCB0byBSSU5HX0NMT1NJTkcsIHNvIHRlc3RpbmcgUklOR19PUEVOIHdvdWxkIHdyb25nbHlcXG4rXFx0ICogc2tpcCB0aGUgYXRvbWljX2RlYyBhbmQgcGVybWFuZW50bHkgbGVhayB0aGUgY291bnRlciwgbGVhdmluZ1xcbitcXHQgKiB0aGUgbmV0aWYgcXVldWUgc3RvcHBlZCBmb3JldmVyLlxcbitcXHQgKlxcbitcXHQgKiBSdWxlOlxcbitcXHQgKiAgIGJsb2NrIHRyYW5zaXRpb24gICh1bmJsb2NrZWTihpJibG9ja2VkKTogY291bnQgb25seSBpZiBSSU5HX09QRU4sXFxuK1xcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGNvdW50ZWRfaW5fYmxvY2tlZC5cXG4rXFx0ICogICB1bmJsb2NrIHRyYW5zaXRpb24gKGJsb2NrZWTihpJ1bmJsb2NrZWQpOiBkZWNyZW1lbnQgb25seSBpZiB3ZVxcbitcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzbHkgY291bnRlZCBpdCxcXG4rXFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhciBjb3VudGVkX2luX2Jsb2NrZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoYmxvY2tlZCkge1xcbitcXHRcXHRpZiAocmluZy1cXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikge1xcbitcXHRcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZmbG93LVxcdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pO1xcbitcXHRcXHRcXHRyaW5nLVxcdTAwM2Vjb3VudGVkX2luX2Jsb2NrZWQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChyaW5nLVxcdTAwM2Vjb3VudGVkX2luX2Jsb2NrZWQpIHtcXG4rXFx0XFx0XFx0YXRvbWljX2RlYyhcXHUwMDI2Zmxvdy1cXHUwMDNlaWZfYmxvY2tlZF9jbnRbaWZpZHhdKTtcXG4rXFx0XFx0XFx0cmluZy1cXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkID0gZmFsc2U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogT25seSBwcm9wYWdhdGUgYSBuZXRpZiBxdWV1ZS1zdG9wL3dha2Ugd2hlbiB0aGUgaW50ZXJmYWNlXFxuK1xcdCAqIHRyYW5zaXRpb25zIGJldHdlZW4gZnVsbHktY2xlYXIgYW5kIGF0LWxlYXN0LW9uZS1ibG9ja2VkLlxcbitcXHQgKiBSZWFkaW5nIHRoZSBhdG9taWMgaXMgc2FmZSBoZXJlOiB3ZSBob2xkIGJsb2NrX2xvY2ssIHNvIG5vXFxuK1xcdCAqIGNvbmN1cnJlbnQgYnJjbWZfZmxvd3JpbmdfYmxvY2soKSBjYWxsIGNhbiByYWNlIHRoZSB1cGRhdGVcXG4rXFx0ICogd2UganVzdCBtYWRlIGFib3ZlLlxcbitcXHQgKi9cXG4rXFx0aWYgKGJsb2NrZWQgXFx1MDAyNlxcdTAwMjYgYXRvbWljX3JlYWQoXFx1MDAyNmZsb3ctXFx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSkgIT0gMSkge1xcbitcXHRcXHQvKiBBbm90aGVyIHJpbmcgd2FzIGFscmVhZHkgYmxvY2tlZDsgbm8gbmV3IHF1ZXVlLXN0b3AgbmVlZGVkLiAqL1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZmbG93LVxcdTAwM2VibG9ja19sb2NrLCBmbGFncyk7XFxuK1xcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRmbG93LVxcdTAwM2VyaW5nc1tmbG93aWRdLVxcdTAwM2VibG9ja2VkID0gYmxvY2tlZDtcXG4tXFx0aWYgKGN1cnJlbnRseV9ibG9ja2VkKSB7XFxuK1xcdGlmICghYmxvY2tlZCBcXHUwMDI2XFx1MDAyNiBhdG9taWNfcmVhZChcXHUwMDI2Zmxvdy1cXHUwMDNlaWZfYmxvY2tlZF9jbnRbaWZpZHhdKSAhPSAwKSB7XFxuK1xcdFxcdC8qIE1vcmUgcmluZ3Mgc3RpbGwgYmxvY2tlZDsgZG8gbm90IHdha2UgdGhlIHF1ZXVlIHlldC4gKi9cXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Zmxvdy1cXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG5AQCAtMzY3LDYgKzM5Niw4IEBAIHN0cnVjdCBicmNtZl9mbG93cmluZyAqYnJjbWZfZmxvd3JpbmdfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IG5yb2ZyaW5ncylcXG4gXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmZsb3ctXFx1MDAzZWJsb2NrX2xvY2spO1xcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShmbG93LVxcdTAwM2VhZGRyX21vZGUpOyBpKyspXFxuIFxcdFxcdFxcdGZsb3ctXFx1MDAzZWFkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXFx1MDAzZWlmX2Jsb2NrZWRfY250KTsgaSsrKVxcbitcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZmbG93LVxcdTAwM2VpZl9ibG9ja2VkX2NudFtpXSwgMCk7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXFx1MDAzZWhhc2gpOyBpKyspXFxuIFxcdFxcdFxcdGZsb3ctXFx1MDAzZWhhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcXG5pbmRleCBmM2Q1MTFmOWEzYzlhLi5hZmRlYThiM2Y4YWE3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcXG5AQCAtNSw2ICs1LDggQEBcXG4gI2lmbmRlZiBCUkNNRk1BQ19GTE9XUklOR19IXFxuICNkZWZpbmUgQlJDTUZNQUNfRkxPV1JJTkdfSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2F0b21pYy5oXFx1MDAzZVxcbitcXG4gXFxuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSEFTSFNJWkVcXHRcXHQ1MTJcXHRcXHQvKiBoYXMgdG8gYmUgMl54ICovXFxuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSU5WQUxJRF9JRFxcdDB4RkZGRkZGRkZcXG5AQCAtMjYsNiArMjgsMTYgQEAgZW51bSByaW5nX3N0YXR1cyB7XFxuIHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nIHtcXG4gXFx0dTE2IGhhc2hfaWQ7XFxuIFxcdGJvb2wgYmxvY2tlZDtcXG4rXFx0LypcXG4rXFx0ICogVHJ1ZSB3aGVuIHRoaXMgcmluZyBoYXMgYmVlbiBjb3VudGVkIGluIHRoZSBwZXItaW50ZXJmYWNlXFxuK1xcdCAqIGlmX2Jsb2NrZWRfY250W10uICBTZXQgdG8gdHJ1ZSB3aGVuZXZlciB0aGUgcmluZyB0cmFuc2l0aW9uc1xcbitcXHQgKiB1bmJsb2NrZWTihpJibG9ja2VkIHdoaWxlIFJJTkdfT1BFTjsgY2xlYXJlZCBvbiB0aGUgbWF0Y2hpbmdcXG4rXFx0ICogYmxvY2tlZOKGknVuYmxvY2tlZCB0cmFuc2l0aW9uLiAgTmVlZGVkIHNvIHRoYXQgYSByaW5nIHRoYXRcXG4rXFx0ICogYmVjb21lcyBibG9ja2VkIHdoaWxlIFJJTkdfT1BFTiBhbmQgaXMgbGF0ZXIgbW92ZWQgdG9cXG4rXFx0ICogUklOR19DTE9TSU5HIHN0aWxsIGNvcnJlY3RseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyIGF0XFxuK1xcdCAqIHRlYXJkb3duLCBldmVuIHRob3VnaCBpdHMgc3RhdHVzIGlzIG5vIGxvbmdlciBSSU5HX09QRU4uXFxuK1xcdCAqL1xcbitcXHRib29sIGNvdW50ZWRfaW5fYmxvY2tlZDtcXG4gXFx0ZW51bSByaW5nX3N0YXR1cyBzdGF0dXM7XFxuIFxcdHN0cnVjdCBza19idWZmX2hlYWQgc2tibGlzdDtcXG4gfTtcXG5AQCAtNDAsNiArNTIsMTIgQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nIHtcXG4gXFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX2hhc2ggaGFzaFtCUkNNRl9GTE9XUklOR19IQVNIU0laRV07XFxuIFxcdHNwaW5sb2NrX3QgYmxvY2tfbG9jaztcXG4gXFx0ZW51bSBwcm90b19hZGRyX21vZGUgYWRkcl9tb2RlW0JSQ01GX01BWF9JRlNdO1xcbitcXHQvKiBQZXItaW50ZXJmYWNlIGNvdW50IG9mIGN1cnJlbnRseSBibG9ja2VkIG9wZW4gcmluZ3MuXFxuK1xcdCAqIE1haW50YWluZWQgYXRvbWljYWxseSBzbyBicmNtZl9mbG93cmluZ19ibG9jaygpIGNhbiBjaGVja1xcbitcXHQgKiB3aGV0aGVyIGFueSBzaWJsaW5nIHJpbmcgaXMgYWxyZWFkeSBibG9ja2VkIGluIE8oMSkgd2l0aG91dFxcbitcXHQgKiBob2xkaW5nIGJsb2NrX2xvY2sgYWNyb3NzIGFuIE8obnJvZnJpbmdzKSB3YWxrLlxcbitcXHQgKi9cXG4rXFx0YXRvbWljX3QgaWZfYmxvY2tlZF9jbnRbQlJDTUZfTUFYX0lGU107XFxuIFxcdHUxNiBucm9mcmluZ3M7XFxuIFxcdGJvb2wgdGRsc19hY3RpdmU7XFxuIFxcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICp0ZGxzX2VudHJ5O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jXFxuaW5kZXggYTQzZjFhMzhiMGUzMC4uM2MxY2EzNTVlOGVlYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jXFxuQEAgLTEwMzcsNyArMTAzNyw5IEBAIGludCBicmNtZl9md3NfbWFjZGVzY19pbmRpY2F0ZShzdHJ1Y3QgYnJjbWZfZndzX2luZm8gKmZ3cywgdTggdHlwZSwgdTggKmRhdGEpXFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcInVzZSBleGlzdGluZ1xcXFxuXFxcIik7XFxuIFxcdFxcdFxcdFdBUk5fT04oZW50cnktXFx1MDAzZW1hY19oYW5kbGUgIT0gbWFjX2hhbmRsZSk7XFxuLVxcdFxcdFxcdC8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovXFxuK1xcdFxcdFxcdC8qIEZpcm13YXJlIHJlLXNlbnQgQUREIGZvciB0aGUgc2FtZSBNQUMgaGFuZGxlLlxcbitcXHRcXHRcXHQgKiBObyBhY3Rpb24gcmVxdWlyZWQ7IGl0IGlzIGEgc2FmZSBuby1vcC5cXG4rXFx0XFx0XFx0ICovXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXFxuaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmNcXG5AQCAtNDgsNyArNDgsMTkgQEBcXG4gI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJcXHRcXHQweDEzXFxuICNkZWZpbmUgTVNHQlVGX1RZUEVfTFBCS19ETUFYRkVSX0NNUExUXFx0XFx0MHgxNFxcbiBcXG4tI2RlZmluZSBOUl9UWF9QS1RJRFNcXHRcXHRcXHRcXHQyMDQ4XFxuKy8qXFxuKyAqIE5SX1RYX1BLVElEUzogbnVtYmVyIG9mIHNpbXVsdGFuZW91c2x5IGluLWZsaWdodCBUWCBwYWNrZXQgSURzLlxcbisgKiBFYWNoIG91dHN0YW5kaW5nIFRYIGZyYW1lIGNvbnN1bWVzIG9uZSBJRCB1bnRpbCB0aGUgZG9uZ2xlIHJldHVybnNcXG4rICogYSBUWC1zdGF0dXMgY29tcGxldGlvbi4gIFRoZSBvcmlnaW5hbCAyMDQ4LWVudHJ5IHBvb2wgZXhoYXVzdGVkIHVuZGVyXFxuKyAqIOKJpTQgY29uY3VycmVudCBpcGVyZjMgc3RyZWFtcyBvbiBXaS1GaSA1LzYgKDgwMi4xMWFjL2F4KSBkZXZpY2VzLFxcbisgKiBjYXVzaW5nIFxcXCJObyBQS1RJRCBhdmFpbGFibGVcXFwiIGRyb3BzIGFuZCBUQ1AgcmV0cmFuc21pdHMuICA0MDk2IGdpdmVzXFxuKyAqIGhlYWRyb29tIGZvciBoaWdoLWFnZ3JlZ2F0aW9uIHNjZW5hcmlvcyB3aGlsZSBzdGlsbCBmaXR0aW5nIGluIGFcXG4rICogbW9kZXN0IGFtb3VudCBvZiBob3N0IG1lbW9yeSAofjQ4IEtCIGZvciB0aGUgcGt0aWQgdGFibGUgZW50cmllcykuXFxuKyAqXFxuKyAqIE5SX1JYX1BLVElEUzogUlggcG9zdCBidWZmZXJzIHByZS1hbGxvY2F0ZWQgdG8gdGhlIGRvbmdsZS4gIDEwMjQgaXNcXG4rICogc3VmZmljaWVudCBmb3IgY3VycmVudCBoYXJkd2FyZSBSWCByaW5nIGRlcHRoczsgbGVhdmUgdW5jaGFuZ2VkLlxcbisgKi9cXG4rI2RlZmluZSBOUl9UWF9QS1RJRFNcXHRcXHRcXHRcXHQ0MDk2XFxuICNkZWZpbmUgTlJfUlhfUEtUSURTXFx0XFx0XFx0XFx0MTAyNFxcbiBcXG4gI2RlZmluZSBCUkNNRl9JT0NUTF9SRVFfUEtUSURcXHRcXHRcXHQweEZGRkVcXG5AQCAtNjQsOCArNzYsMjkgQEBcXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfUEtUX0ZMQUdTX0ZSQU1FX01BU0tcXHQweDA3XFxuICNkZWZpbmUgQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19QUklPX1NISUZUXFx0NVxcbiBcXG4tI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMVxcdFxcdDMyXFxuLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDJcXHRcXHQ5NlxcbisvKlxcbisgKiBUWCBmbHVzaCAvIGRvb3JiZWxsLXJpbmcgdGhyZXNob2xkcy5cXG4rICpcXG4rICogQ05UMSBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgZnJhbWVzIHRvIGFjY3VtdWxhdGUgaW4gdGhlIGNvbW1vbnJpbmdcXG4rICogYmVmb3JlIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgd3JpdGVfY29tcGxldGUoKSAoZG9vcmJlbGwgcmluZykgaXNcXG4rICogaXNzdWVkIG1pZC1iYXRjaC4gIENOVDIgaXMgdGhlIGhhcmQgZmx1c2ggaW50ZXJ2YWw6IGFmdGVyIHRoaXMgbWFueVxcbisgKiBmcmFtZXMgaGF2ZSBiZWVuIHdyaXR0ZW4gc2luY2UgdGhlIGxhc3QgZmx1c2gsIHdlIHVuY29uZGl0aW9uYWxseVxcbisgKiByaW5nIHRoZSBiZWxsIGFuZCByZXNldCB0aGUgY291bnRlci5cXG4rICpcXG4rICogUmFpc2luZyBib3RoIGZyb20gdGhlIG9yaWdpbmFsIDMyLzk2IHRvIDY0LzEyOCBkb3VibGVzIHRoZSBhdmVyYWdlXFxuKyAqIG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyBjb21taXR0ZWQgcGVyIE1NSU8gd3JpdGUsIGhhbHZpbmcgdGhlIFBDSWVcXG4rICogZG9vcmJlbGwgcmF0ZSBvbiBzdXN0YWluZWQgdGhyb3VnaHB1dCB3b3JrbG9hZHMuICBUaGUgdHJhZGVvZmYgaXMgYVxcbisgKiBtYXJnaW5hbGx5IGhpZ2hlciB3b3JzdC1jYXNlIGxhdGVuY3kgZm9yIHRoZSBsYXN0IGZyYW1lcyBpbiBhIGJ1cnN0LFxcbisgKiB3aGljaCBpbiBwcmFjdGljZSBpcyBoaWRkZW4gYnkgdGhlIHRpbWUgdGhlIGRvbmdsZSBETUEgZW5naW5lIGRyYWluc1xcbisgKiB0aGUgcHJldmlvdXMgYmF0Y2guXFxuKyAqXFxuKyAqIFRSSUNLTEVfVFhXT1JLRVJfVEhSUyBnb3Zlcm5zIGhvdyBvZnRlbiBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YSgpXFxuKyAqIGZvcmNlcyBhIHdvcmtxdWV1ZSBzY2hlZHVsZSB3aGVuIHRoZSBxdWV1ZSBkZXB0aCBpcyBub3QgYSBtdWx0aXBsZSBvZlxcbisgKiB0aGlzIHZhbHVlLiAgS2VlcGluZyBpdCBhdCBoYWxmIG9mIENOVDEgKDMyKSBwcmVzZXJ2ZXMgcmVzcG9uc2l2ZW5lc3NcXG4rICogZm9yIGxvdy1yYXRlIGZsb3dzIChlLmcuIFZvSVAsIElDTVApIHRoYXQgbmV2ZXIgYWNjdW11bGF0ZSA2NCBmcmFtZXMuXFxuKyAqL1xcbisjZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQxXFx0XFx0NjRcXG4rI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMlxcdFxcdDEyOFxcbiBcXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSU1xcdDk2XFxuICNkZWZpbmUgQlJDTUZfTVNHQlVGX1RSSUNLTEVfVFhXT1JLRVJfVEhSU1xcdDMyXFxuQEAgLTc4NywxMCArODIwLDMwIEBAIHN0YXRpYyBpbnQgYnJjbWZfbXNnYnVmX3NjaGVkdWxlX3R4ZGF0YShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHUzMiBmbG93aWQsXFxuIHtcXG4gXFx0c3RydWN0IGJyY21mX2NvbW1vbnJpbmcgKmNvbW1vbnJpbmc7XFxuIFxcbi1cXHRzZXRfYml0KGZsb3dpZCwgbXNnYnVmLVxcdTAwM2VmbG93X21hcCk7XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBiaXQgd2FzIGFscmVhZHkgc2V0LCBhIHR4Zmxvd193b3JrIGl0ZW0gaXMgYWxyZWFkeVxcbitcXHQgKiBxdWV1ZWQgb3IgcnVubmluZyBmb3IgdGhpcyByaW5nLiAgSW4gdGhhdCBjYXNlIHRoZSBleGlzdGluZ1xcbitcXHQgKiB3b3JrZXIgd2lsbCBkcmFpbiBvdXIgZnJlc2hseSBlbnF1ZXVlZCBmcmFtZSB3aGVuIGl0IHJ1bnMsXFxuK1xcdCAqIHNvIHdlIG9ubHkgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIHdvcmsgaXRlbSB3aGVuIHRoZVxcbitcXHQgKiBmb3JjZSBmbGFnIGlzIHNldCBvciB0aGUgcmluZyBpcyBiZWxvdyB0aGUgZGVsYXkgdGhyZXNob2xkLlxcbitcXHQgKlxcbitcXHQgKiBJZiB0aGUgYml0IHdhcyBOT1Qgc2V0ICh0ZXN0X2FuZF9zZXRfYml0IHJldHVybnMgZmFsc2UpLCBub1xcbitcXHQgKiB3b3JrZXIgaXMgcGVuZGluZyBmb3IgdGhpcyByaW5nIGF0IGFsbC4gIFdlIE1VU1Qgc2NoZWR1bGVcXG4rXFx0ICogb25lIHVuY29uZGl0aW9uYWxseSwgb3RoZXJ3aXNlIHRoZSBmcmFtZSB3ZSBqdXN0IGVucXVldWVkXFxuK1xcdCAqIHdpbGwgc2l0IGluIHRoZSBmbG93cmluZyB1bnNlbnQgdW50aWwgc29tZSB1bnJlbGF0ZWQgZXZlbnRcXG4rXFx0ICogdHJpZ2dlcnMgdGhlIHdvcmtxdWV1ZSDigJQgY2F1c2luZyBzaWxlbnQgVFggc3RhbGxzIHVuZGVyXFxuK1xcdCAqIGhpZ2ggbG9hZCB3aGVuIG91dHN0YW5kaW5nX3R4IFxcdTAwM2U9IERFTEFZX1RYV09SS0VSX1RIUlMuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoZmxvd2lkLCBtc2didWYtXFx1MDAzZWZsb3dfbWFwKSkge1xcbitcXHRcXHQvKiBCaXQgd2FzIGNsZWFyOiBubyB3b3JrZXIgcGVuZGluZywgYWx3YXlzIHNjaGVkdWxlLiAqL1xcbitcXHRcXHRxdWV1ZV93b3JrKG1zZ2J1Zi1cXHUwMDNldHhmbG93X3dxLCBcXHUwMDI2bXNnYnVmLVxcdTAwM2V0eGZsb3dfd29yayk7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBCaXQgd2FzIGFscmVhZHkgc2V0OiB3b3JrZXIgcGVuZGluZywgYXBwbHkgY29hbGVzY2luZyBoZXVyaXN0aWMuICovXFxuIFxcdGNvbW1vbnJpbmcgPSBtc2didWYtXFx1MDAzZWZsb3dyaW5nc1tmbG93aWRdO1xcbi1cXHRpZiAoKGZvcmNlKSB8fCAoYXRvbWljX3JlYWQoXFx1MDAyNmNvbW1vbnJpbmctXFx1MDAzZW91dHN0YW5kaW5nX3R4KSBcXHUwMDNjXFxuLVxcdFxcdFxcdEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSlcXG4rXFx0aWYgKGZvcmNlIHx8IChhdG9taWNfcmVhZChcXHUwMDI2Y29tbW9ucmluZy1cXHUwMDNlb3V0c3RhbmRpbmdfdHgpIFxcdTAwM2NcXG4rXFx0XFx0ICAgICAgQlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlMpKVxcbiBcXHRcXHRxdWV1ZV93b3JrKG1zZ2J1Zi1cXHUwMDNldHhmbG93X3dxLCBcXHUwMDI2bXNnYnVmLVxcdTAwM2V0eGZsb3dfd29yayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMTYyMSwxMSArMTY3NCwxMSBAQCBpbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbiBcXHRkbyB7XFxuIFxcdFxcdGJyY21mX21zZ2J1Zl9yeGJ1Zl9kYXRhX2ZpbGwobXNnYnVmKTtcXG4gXFx0XFx0aWYgKG1zZ2J1Zi1cXHUwMDNlbWF4X3J4YnVmcG9zdCAhPSBtc2didWYtXFx1MDAzZXJ4YnVmcG9zdClcXG4tXFx0XFx0XFx0bXNsZWVwKDEwKTtcXG4rXFx0XFx0XFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRjb3VudCsrO1xcbi1cXHR9IHdoaWxlIChjb3VudCBcXHUwMDNjIDEwKTtcXG4rXFx0fSB3aGlsZSAoY291bnQgXFx1MDAzYyAxMDApO1xcbiBcXHRicmNtZl9tc2didWZfcnhidWZfZXZlbnRfcG9zdChtc2didWYpO1xcbiBcXHRicmNtZl9tc2didWZfcnhidWZfaW9jdGxyZXNwX3Bvc3QobXNnYnVmKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXFxuaW5kZXggMTM2NjJhYTRiNGVhNi4uOTMzOGE1ZmFhMjYwYSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY1xcbkBAIC0yNjgsNiArMjY4LDI3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnJjbWZfZmlybXdhcmVfbWFwcGluZyBicmNtZl9wY2llX2Z3bmFtZXNbXSA9IHtcXG4gXFxuICNkZWZpbmUgQlJDTUZfUENJRV9NQkRBVEFfVElNRU9VVFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoMjAwMClcXG4gXFxuKy8qXFxuKyAqIEgyRCBtYWlsYm94IHBvbGwgdGltaW5nIHBhcmFtZXRlcnMuXFxuKyAqXFxuKyAqIFRoZSBkb25nbGUgdHlwaWNhbGx5IGNsZWFycyB0aGUgSDJEIG1haWxib3ggcmVnaXN0ZXIgd2l0aGluIGEgZmV3XFxuKyAqIGh1bmRyZWQgbWljcm9zZWNvbmRzIGFmdGVyIHRoZSBkb29yYmVsbCBpbnRlcnJ1cHQgZmlyZXMuICBUaGVcXG4rICogb3JpZ2luYWwgY29kZSB1c2VkIG1zbGVlcCgxMCkgKiAxMDAgaXRlcmF0aW9ucywgbWVhbmluZyB0aGVcXG4rICogbWluaW11bSBvYnNlcnZhYmxlIGxhdGVuY3kgd2FzIDEwbXMgZXZlbiB3aGVuIHRoZSBkb25nbGUgd2FzIGZhc3QuXFxuKyAqXFxuKyAqIFdlIGluc3RlYWQgc3RhcnQgd2l0aCBhIHNob3J0IHNsZWVwIGFuZCBkb3VibGUgaXQgZWFjaCBpdGVyYXRpb25cXG4rICogKGV4cG9uZW50aWFsIGJhY2tvZmYpIHVwIHRvIEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMsIHN0YXlpbmdcXG4rICogd2l0aGluIHRoZSBzYW1lIDEtc2Vjb25kIGFic29sdXRlIHRpbWVvdXQuXFxuKyAqXFxuKyAqIE1JTl9VUyAvIElOSVRJQUxfTUFYX1VTIDogdXNsZWVwX3JhbmdlIGJvdW5kcyBmb3IgdGhlIGZpcnN0IGl0ZXJhdGlvbi5cXG4rICogTUFYX1VTICAgICA6IGNhcCBvbiB0aGUgcGVyLWl0ZXJhdGlvbiBzbGVlcCAowrVzKS5cXG4rICogVElNRU9VVF9VUyA6IHRvdGFsIGJ1ZGdldCBiZWZvcmUgZ2l2aW5nIHVwICgxIHNlY29uZCkuXFxuKyAqL1xcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVNcXHRcXHQ0MFxcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9JTklUSUFMX01BWF9VU1xcdDUwXFxuKyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX01BWF9VU1xcdFxcdDUwMDBcXG4rI2RlZmluZSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VU1xcdFxcdDEwMDAwMDBcXG4rXFxuICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfU1RBVFVTX0NNRFxcdFxcdDB4NFxcbiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX1BNX0NTUlxcdFxcdDB4NENcXG4gI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19NU0lfQ0FQXFx0XFx0MHg1OFxcbkBAIC03NjYsNyArNzg3LDggQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSlcXG4gXFx0c3RydWN0IGJyY21mX2NvcmUgKmNvcmU7XFxuIFxcdHUzMiBhZGRyO1xcbiBcXHR1MzIgY3VyX2h0b2RfbWJfZGF0YTtcXG4tXFx0dTMyIGk7XFxuK1xcdHUzMiBlbGFwc2VkX3VzID0gMDtcXG4rXFx0dTMyIHNsZWVwX3VzID0gQlJDTUZfUENJRV9NQl9QT0xMX0lOSVRJQUxfTUFYX1VTO1xcbiBcXG4gXFx0c2hhcmVkID0gXFx1MDAyNmRldmluZm8tXFx1MDAzZXNoYXJlZDtcXG4gXFx0YWRkciA9IHNoYXJlZC1cXHUwMDNlaHRvZF9tYl9kYXRhX2FkZHI7XFxuQEAgLTc3NiwxMiArNzk4LDQwIEBAIGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBodG9kX21iX2RhdGEpXFxuIFxcdFxcdGJyY21mX2RiZyhQQ0lFLCBcXFwiTUIgdHJhbnNhY3Rpb24gaXMgYWxyZWFkeSBwZW5kaW5nIDB4JTA0eFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICBjdXJfaHRvZF9tYl9kYXRhKTtcXG4gXFxuLVxcdGkgPSAwO1xcbitcXHQvKlxcbitcXHQgKiBXYWl0IGZvciB0aGUgZG9uZ2xlIHRvIGNvbnN1bWUgdGhlIHByZXZpb3VzIEgyRCBtYWlsYm94IG1lc3NhZ2UuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZXJlIGlzIG5vIGludGVycnVwdCB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZG9uZ2xlIGNsZWFycyB0aGlzXFxuK1xcdCAqIHJlZ2lzdGVyLCBzbyBwb2xsaW5nIGlzIHVuYXZvaWRhYmxlLiAgVGhlIG9yaWdpbmFsIGNvZGUgdXNlZFxcbitcXHQgKiBtc2xlZXAoMTApIHBlciBpdGVyYXRpb24sIGluY3VycmluZyBhdCBsZWFzdCAxMG1zIG9mIGxhdGVuY3lcXG4rXFx0ICogZXZlbiB3aGVuIHRoZSBkb25nbGUgcmVzcG9uZGVkIGluIG1pY3Jvc2Vjb25kcy5cXG4rXFx0ICpcXG4rXFx0ICogV2UgdXNlIHVzbGVlcF9yYW5nZSgpIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiBpbnN0ZWFkOlxcbitcXHQgKiAgIC0gRmlyc3QgaXRlcmF0aW9uIHNsZWVwcyB+NTDCtXMgKGZhc3QgcGF0aCBmb3IgcmVzcG9uc2l2ZSBkb25nbGUpLlxcbitcXHQgKiAgIC0gRWFjaCBzdWJzZXF1ZW50IGl0ZXJhdGlvbiBkb3VibGVzIHRoZSBzbGVlcCwgY2FwcGVkIGF0IDVtcyxcXG4rXFx0ICogICAgIHNvIGxvbmcgd2FpdHMgc3RpbGwgeWllbGQgdGhlIENQVSB3aXRob3V0IGJ1c3ktc3Bpbm5pbmcuXFxuK1xcdCAqICAgLSBUb3RhbCB0aW1lb3V0IG1hdGNoZXMgdGhlIG9yaWdpbmFsIDEtc2Vjb25kIGxpbWl0LlxcbitcXHQgKiAgIC0gV2UgYmFpbCBlYXJseSBpZiB0aGUgZGV2aWNlIGhhcyBnb25lIGRvd24gc28gdGhhdCBhIGRlYWRcXG4rXFx0ICogICAgIGRvbmdsZSBkb2VzIG5vdCBob2xkIHRoZSBjYWxsZXIgZm9yIGEgZnVsbCBzZWNvbmQuXFxuK1xcdCAqL1xcbiBcXHR3aGlsZSAoY3VyX2h0b2RfbWJfZGF0YSAhPSAwKSB7XFxuLVxcdFxcdG1zbGVlcCgxMCk7XFxuLVxcdFxcdGkrKztcXG4tXFx0XFx0aWYgKGkgXFx1MDAzZSAxMDApXFxuK1xcdFxcdGlmIChkZXZpbmZvLVxcdTAwM2VzdGF0ZSA9PSBCUkNNRk1BQ19QQ0lFX1NUQVRFX0RPV04pIHtcXG4rXFx0XFx0XFx0YnJjbWZfZGJnKFBDSUUsIFxcXCJEZXZpY2UgZG93biwgYWJvcnRpbmcgTUIgc2VuZFxcXFxuXFxcIik7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpZiAoZWxhcHNlZF91cyBcXHUwMDNlPSBCUkNNRl9QQ0lFX01CX1BPTExfVElNRU9VVF9VUykge1xcbitcXHRcXHRcXHRicmNtZl9lcnIoXFxcIlRpbWVvdXQgd2FpdGluZyBmb3IgSDJEIE1CIHNsb3QgYWZ0ZXIgJXUgdXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgZWxhcHNlZF91cyk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoQlJDTUZfUENJRV9NQl9QT0xMX01JTl9VUywgc2xlZXBfdXMpO1xcbitcXHRcXHRlbGFwc2VkX3VzICs9IHNsZWVwX3VzO1xcbitcXG4rXFx0XFx0LyogRXhwb25lbnRpYWwgYmFja29mZiwgY2FwcGVkIGF0IEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMgKi9cXG4rXFx0XFx0c2xlZXBfdXMgPSBtaW4oc2xlZXBfdXMgKiAyLCAodTMyKUJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVMpO1xcbitcXG4gXFx0XFx0Y3VyX2h0b2RfbWJfZGF0YSA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcXG4gXFx0fVxcbiBcXG5AQCAtMTAwMSwxMCArMTA1MSwxMCBAQCBzdGF0aWMgdm9pZCBicmNtZl9wY2llX3JlbGVhc2VfaXJxKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8pXFxuIFxcdGZyZWVfaXJxKHBkZXYtXFx1MDAzZWlycSwgZGV2aW5mbyk7XFxuIFxcdHBjaV9kaXNhYmxlX21zaShwZGV2KTtcXG4gXFxuLVxcdG1zbGVlcCg1MCk7XFxuK1xcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcXG4gXFx0Y291bnQgPSAwO1xcbi1cXHR3aGlsZSAoKGRldmluZm8tXFx1MDAzZWluX2lycSkgXFx1MDAyNlxcdTAwMjYgKGNvdW50IFxcdTAwM2MgMjApKSB7XFxuLVxcdFxcdG1zbGVlcCg1MCk7XFxuK1xcdHdoaWxlICgoZGV2aW5mby1cXHUwMDNlaW5faXJxKSBcXHUwMDI2XFx1MDAyNiAoY291bnQgXFx1MDAzYyAxMDAwKSkge1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuIFxcdFxcdGNvdW50Kys7XFxuIFxcdH1cXG4gXFx0aWYgKGRldmluZm8tXFx1MDAzZWluX2lycSlcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcXG5pbmRleCBiNzI1YzY0ZTViNWM2Li40ZTQxNDQwM2Q3NDcxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jXFxuQEAgLTE2NDUsMzcgKzE2NDUsNDMgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKVxcbiBcXG4gXFx0XFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcTtcXG4gXFx0XFx0cmRfbmV3LmxlbiA9IGRsZW47XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBDbGFpbSB0aGUgaG9zdCBvbmNlIGZvciB0aGUgZW50aXJlIGhlYWRlci1wYXJzaW5nIHBoYXNlLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBicmNtZl9zZGlvX2hkcGFyc2UoKSBvcGVyYXRlcyBvbiBkYXRhIGFscmVhZHkgaW4gaG9zdFxcbitcXHRcXHQgKiBtZW1vcnksIGJ1dCBtYXkgY2FsbCBicmNtZl9zZGlvX3J4ZmFpbCgpIG9uIGVycm9yLCB3aGljaFxcbitcXHRcXHQgKiB3cml0ZXMgU0RJTyBGdW5jMSByZWdpc3RlcnMgYW5kIHRoZXJlZm9yZSByZXF1aXJlcyB0aGVcXG4rXFx0XFx0ICogaG9zdCB0byBiZSBjbGFpbWVkLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBza2JfcHVsbCgpIGFuZCB0aGUgbnVtIGNvdW50ZXIgYXJlIHB1cmUgaG9zdC1tZW1vcnlcXG4rXFx0XFx0ICogb3BlcmF0aW9uczsga2VlcCB0aGVtIG91dHNpZGUgdGhlIGxvY2sgdG8gbWluaW1pc2UgdGhlXFxuK1xcdFxcdCAqIGhvbGQgdGltZS4gIEJvdGggaGRwYXJzZSBjYWxscyAoc3VwZXJmcmFtZSBoZWFkZXIgYW5kXFxuK1xcdFxcdCAqIGVhY2ggc3ViZnJhbWUgaGVhZGVyKSBhcmUgZ3JvdXBlZCB1bmRlciBhIHNpbmdsZSBjbGFpbS9cXG4rXFx0XFx0ICogcmVsZWFzZSwgcmVwbGFjaW5nIHRoZSBvcmlnaW5hbCBOKzEgc2VwYXJhdGUgcGFpcnMuXFxuK1xcdFxcdCAqL1xcbiBcXHRcXHRzZGlvX2NsYWltX2hvc3QoYnVzLVxcdTAwM2VzZGlvZGV2LVxcdTAwM2VmdW5jMSk7XFxuIFxcdFxcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtXFx1MDAzZWRhdGEsIFxcdTAwMjZyZF9uZXcsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgQlJDTUZfU0RJT19GVF9TVVBFUik7XFxuLVxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbi1cXHRcXHRidXMtXFx1MDAzZWN1cl9yZWFkLmxlbiA9IHJkX25ldy5sZW5fbnh0ZnJtIFxcdTAwM2NcXHUwMDNjIDQ7XFxuLVxcbi1cXHRcXHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xcbi1cXHRcXHRza2JfcHVsbChwZmlyc3QsIHJkX25ldy5kYXRfb2Zmc2V0KTtcXG4tXFx0XFx0bnVtID0gMDtcXG4tXFxuLVxcdFxcdC8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqL1xcbi1cXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2YnVzLVxcdTAwM2VnbG9tLCBwbmV4dCkge1xcbi1cXHRcXHRcXHQvKiBsZWF2ZSB3aGVuIGludmFsaWQgc3ViZnJhbWUgaXMgZm91bmQgKi9cXG4tXFx0XFx0XFx0aWYgKGVycmNvZGUpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0XFx0cmRfbmV3LmxlbiA9IHBuZXh0LVxcdTAwM2VsZW47XFxuLVxcdFxcdFxcdHJkX25ldy5zZXFfbnVtID0gcnhzZXErKztcXG4tXFx0XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbi1cXHRcXHRcXHRlcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtXFx1MDAzZWRhdGEsIFxcdTAwMjZyZF9uZXcsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQlJDTUZfU0RJT19GVF9TVUIpO1xcbi1cXHRcXHRcXHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXFx1MDAzZXNkaW9kZXYtXFx1MDAzZWZ1bmMxKTtcXG4tXFx0XFx0XFx0YnJjbWZfZGJnX2hleF9kdW1wKEJSQ01GX0dMT01fT04oKSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgcG5leHQtXFx1MDAzZWRhdGEsIDMyLCBcXFwic3ViZnJhbWU6XFxcXG5cXFwiKTtcXG4tXFxuLVxcdFxcdFxcdG51bSsrO1xcbitcXHRcXHQvKiBWYWxpZGF0ZSBhbGwgdGhlIHN1YmZyYW1lIGhlYWRlcnMgd2hpbGUgaG9zdCBpcyBjbGFpbWVkICovXFxuK1xcdFxcdGlmICghZXJyY29kZSkge1xcbitcXHRcXHRcXHRza2JfcXVldWVfd2FsayhcXHUwMDI2YnVzLVxcdTAwM2VnbG9tLCBwbmV4dCkge1xcbitcXHRcXHRcXHRcXHRyZF9uZXcubGVuID0gcG5leHQtXFx1MDAzZWxlbjtcXG4rXFx0XFx0XFx0XFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcSsrO1xcbitcXHRcXHRcXHRcXHRlcnJjb2RlID0gYnJjbWZfc2Rpb19oZHBhcnNlKGJ1cywgcG5leHQtXFx1MDAzZWRhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJkX25ldyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBCUkNNRl9TRElPX0ZUX1NVQik7XFxuK1xcdFxcdFxcdFxcdGJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIHBuZXh0LVxcdTAwM2VkYXRhLCAzMixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcInN1YmZyYW1lOlxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdGlmIChlcnJjb2RlKVxcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoZXJyY29kZSkge1xcbi1cXHRcXHRcXHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IgKi9cXG4tXFx0XFx0XFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbitcXHRcXHRcXHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IsIHN0aWxsIGhvbGRpbmcgdGhlIGhvc3QgKi9cXG4gXFx0XFx0XFx0YnJjbWZfc2Rpb19yeGZhaWwoYnVzLCB0cnVlLCBmYWxzZSk7XFxuIFxcdFxcdFxcdGJ1cy1cXHUwMDNlc2RjbnQucnhnbG9tZmFpbCsrO1xcbiBcXHRcXHRcXHRicmNtZl9zZGlvX2ZyZWVfZ2xvbShidXMpO1xcbkBAIC0xNjgzLDYgKzE2ODksMTQgQEAgc3RhdGljIHU4IGJyY21mX3NkaW9fcnhnbG9tKHN0cnVjdCBicmNtZl9zZGlvICpidXMsIHU4IHJ4c2VxKVxcbiBcXHRcXHRcXHRidXMtXFx1MDAzZWN1cl9yZWFkLmxlbiA9IDA7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZnVuYzEpO1xcbitcXG4rXFx0XFx0LyogSG9zdCByZWxlYXNlZDsgbm93IGRvIHRoZSBwdXJlLW1lbW9yeSBib29ra2VlcGluZyAqL1xcbitcXHRcXHRidXMtXFx1MDAzZWN1cl9yZWFkLmxlbiA9IHJkX25ldy5sZW5fbnh0ZnJtIFxcdTAwM2NcXHUwMDNjIDQ7XFxuK1xcbitcXHRcXHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xcbitcXHRcXHRza2JfcHVsbChwZmlyc3QsIHJkX25ldy5kYXRfb2Zmc2V0KTtcXG4rXFx0XFx0bnVtID0gMDtcXG4gXFxuIFxcdFxcdC8qIEJhc2ljIFNEIGZyYW1pbmcgbG9va3Mgb2sgLSBwcm9jZXNzIGVhY2ggcGFja2V0IChoZWFkZXIpICovXFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXFxuaW5kZXggZmM3YTVkZDJlNWQ4Ni4uM2ZkOGJkYmQzNWU1OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXFxuQEAgLTUxNiwxMiArNTE2LDExIEBAIGludCBicmNtc19jX2FtcGR1X2FkZF9mcmFtZShzdHJ1Y3QgYnJjbXNfYW1wZHVfc2Vzc2lvbiAqc2Vzc2lvbixcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9TUEM7XFxuIFxcbiBcXHRcXHQvKlxcbi1cXHRcXHQgKiBXZSBhcmVuJ3QgcmVhbGx5IG91dCBvZiBzcGFjZSBpZiB0aGUgbmV3IGZyYW1lIGlzIG9mXFxuLVxcdFxcdCAqIGEgZGlmZmVyZW50IHByaW9yaXR5LCBidXQgd2Ugd2FudCB0aGUgc2FtZSBiZWhhdmlvdXJcXG4tXFx0XFx0ICogc28gcmV0dXJuIC1FTk9TUEMgYW55d2F5Llxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBYWFg6IFRoZSBvbGQgQU1QRFUgY29kZSBkaWQgdGhpcywgYnV0IGlzIGl0IHJlYWxseVxcbi1cXHRcXHQgKiBuZWNlc3Nhcnk/XFxuK1xcdFxcdCAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW5cXG4rXFx0XFx0ICogQS1NUERVIGJlbG9uZyB0byB0aGUgc2FtZSBUSUQgKFRyYWZmaWMgSWRlbnRpZmllcikuXFxuK1xcdFxcdCAqIFNpbmNlIHByaW9yaXR5IG1hcHMgdG8gVElELCBhIGRpZmZlcmVudCBwcmlvcml0eSBtZWFuc1xcbitcXHRcXHQgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLFxcbitcXHRcXHQgKiBzbyB3ZSByZXR1cm4gLUVOT1NQQyBoZXJlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0Zmlyc3QgPSBza2JfcGVlayhcXHUwMDI2c2Vzc2lvbi1cXHUwMDNlc2tiX2xpc3QpO1xcbiBcXHRcXHRpZiAocC1cXHUwMDNlcHJpb3JpdHkgIT0gZmlyc3QtXFx1MDAzZXByaW9yaXR5KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NjoxOC4zMTU2NTAzNTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MTAyMzQ3ODkyNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX3Bta3NhX3YyX29wXCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2RlbF9wbWtzYVwiLFxuICAgIFwiYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGNvbXBvbmVudHMgb2YgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlcnMuIENoYW5nZXMgdG8gUENJZSAobXNnYnVmLmMsIGZsb3dyaW5nLmMsIHBjaWUuYykgYW5kIFNESU8gKHNkaW8uYykgYXJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcyB0aGV5IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUuIEhvd2V2ZXIsIHRoZSBicmNtZm1hYyBkcml2ZXIgc3VwcG9ydHMgVVNCLCB3aGljaCBjYW4gYmUgZW11bGF0ZWQgYnkgc3l6a2FsbGVyLiBUaGUgcGF0Y2ggYWRkcyBgYnJjbWZfcG1rc2FfdjJfb3BgIGluIHRoZSBzaGFyZWQgY2ZnODAyMTEuYyB0byBoYW5kbGUgVjIgUE1LU0EgY2FjaGUgdXBkYXRlcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGNmZzgwMjExIG5ldGxpbmsgY29tbWFuZHMgKGUuZy4sIE5MODAyMTFfQ01EX1NFVF9QTUtTQSkgaWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgcmVwb3J0cyBhIGZpcm13YXJlIHZlcnNpb24gXFx1MDAzZT0gMTIuIFRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBpcyBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDUzNjllMTQzOTJlMWY5NDI4NDQ2OWMzODY2ZGI3ZTIxY2RiYzRhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIgMDA6NDY6MTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5pbmRleCAwYjU1ZDQ0NTg5NWYyLi4yMzc1YzJmOWQ5N2EyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jXG5AQCAtMzk4OSwxMiArMzk4OSwxMCBAQCBzdGF0aWMgaW50IGJyY21mX2NmZzgwMjExX3NjaGVkX3NjYW5fc3RvcChzdHJ1Y3Qgd2lwaHkgKndpcGh5LFxuIFxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBicmNtZl9kZWxheSh1MzIgbXMpXG4ge1xuLVx0aWYgKG1zIFx1MDAzYyAxMDAwIC8gSFopIHtcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHRcdG1kZWxheShtcyk7XG4tXHR9IGVsc2Uge1xuK1x0aWYgKG1zIFx1MDAzYz0gMjApXG4rXHRcdHVzbGVlcF9yYW5nZShtcyAqIDEwMDAsIG1zICogMTAwMCArIDEwMDApO1xuK1x0ZWxzZVxuIFx0XHRtc2xlZXAobXMpO1xuLVx0fVxuIH1cbiBcbiBzdGF0aWMgczMyIGJyY21mX2NvbmZpZ193b3dsX3BhdHRlcm4oc3RydWN0IGJyY21mX2lmICppZnAsIHU4IGNtZFs0XSxcbkBAIC00MzY0LDYgKzQzNjIsMTA5IEBAIGJyY21mX3Bta3NhX3YzX29wKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBzdHJ1Y3QgY2ZnODAyMTFfcG1rc2EgKnBta3NhLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogYnJjbWZfcG1rc2FfdjJfb3AgLSB1cGRhdGUgZmlybXdhcmUgUE1LU0EgY2FjaGUgdXNpbmcgdGhlIFYyIGxpc3QgaW50ZXJmYWNlLlxuKyAqXG4rICogVjIgZmlybXdhcmUgKHJldmlzaW9uIDEyKSB1c2VzIGEgdmVyc2lvbmVkIGZsYXQgbGlzdCBzdHJ1Y3R1cmVcbisgKiAoYnJjbWZfcG1rX2xpc3RfdjJfbGUpIHJhdGhlciB0aGFuIHRoZSBwZXItZW50cnkgb3BlcmF0aW9uIG1vZGVsIG9mIFYzLlxuKyAqIEVhY2ggZW50cnkgY2FycmllcyBGSUxTLXNwZWNpZmljIGZpZWxkcyAocmF3IFBNSyBtYXRlcmlhbCwgU1NJRCwgYW5kXG4rICogZmlsc19jYWNoZV9pZCkgaW4gYWRkaXRpb24gdG8gdGhlIGJhc2ljIEJTU0lEICsgUE1LSUQgcGFpciwgZW5hYmxpbmdcbisgKiBGSUxTIGZhc3Qtcm9hbWluZyBvbiBkZXZpY2VzIHRoYXQgZG8gbm90IHN1cHBvcnQgVjMuXG4rICpcbisgKiBAY2ZnOiAgIGRyaXZlciBjb25maWcgc3RydWN0dXJlIGhvbGRpbmcgdGhlIHNoYWRvdyBWMiBQTUtTQSBsaXN0XG4rICogQGlmcDogICBpbnRlcmZhY2UgcG9pbnRlclxuKyAqIEBwbWtzYTogdGhlIFBNS1NBIHRvIGFkZC9yZW1vdmUsIG9yIE5VTEwgZm9yIGEgZmx1c2hcbisgKiBAYWxpdmU6IHRydWUgPSBhZGQgKHNldCB0aW1lX2xlZnQgdG8gbm8tZXhwaXJ5KSwgZmFsc2UgPSByZW1vdmUvZmx1c2hcbisgKi9cbitzdGF0aWMgczMyXG4rYnJjbWZfcG1rc2FfdjJfb3Aoc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8gKmNmZywgc3RydWN0IGJyY21mX2lmICppZnAsXG4rXHRcdCAgc3RydWN0IGNmZzgwMjExX3Bta3NhICpwbWtzYSwgYm9vbCBhbGl2ZSlcbit7XG4rXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gY2ZnLVx1MDAzZXB1YjtcbitcdHN0cnVjdCBicmNtZl9wbWtfbGlzdF92Ml9sZSAqbGlzdCA9IFx1MDAyNmNmZy1cdTAwM2VwbWtfbGlzdF92MjtcbitcdHN0cnVjdCBicmNtZl9wbWtzYV92MiAqcG1rID0gbGlzdC1cdTAwM2VwbWs7XG4rXHR1MzIgbnBtayA9IGxlMTZfdG9fY3B1KGxpc3QtXHUwMDNlbGVuZ3RoKTtcbitcdHUzMiBpO1xuK1xuK1x0LyogbnBtayBoZXJlIHN0b3JlcyB0aGUgY291bnQgb2YgdmFsaWQgZW50cmllcywgcmVwdXJwb3NpbmcgdGhlXG4rXHQgKiBsZW5ndGggZmllbGQgb2YgdGhlIHNoYWRvdyBsaXN0IGFzIGEgY291bnRlci4gIFdlIGNvbnZlcnQgdG9cbitcdCAqIHRoZSB3aXJlIGZvcm1hdCAoYnl0ZSBsZW5ndGgpIHdoZW4gc2VuZGluZyB0byBmaXJtd2FyZS5cbitcdCAqL1xuK1x0aWYgKCFwbWtzYSkge1xuK1x0XHQvKiBGbHVzaDogemVybyB0aGUgc2hhZG93IGxpc3QgYW5kIHB1c2ggYW4gZW1wdHkgVjIgbGlzdC4gKi9cbitcdFx0bWVtc2V0KGxpc3QsIDAsIHNpemVvZigqbGlzdCkpO1xuK1x0XHRnb3RvIHNlbmQ7XG4rXHR9XG4rXG4rXHRpZiAoYWxpdmUpIHtcbitcdFx0LyogU2V0OiBzZWFyY2ggZm9yIGV4aXN0aW5nIEJTU0lEIG1hdGNoIGZpcnN0LiAqL1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucG1rOyBpKyspXG4rXHRcdFx0aWYgKCFtZW1jbXAocG1rc2EtXHUwMDNlYnNzaWQsIHBta1tpXS5ic3NpZCwgRVRIX0FMRU4pKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdGlmIChpIFx1MDAzZT0gQlJDTUZfTUFYUE1LSUQpIHtcbitcdFx0XHRicGh5X2VycihkcnZyLCBcIlYyIFBNS1NBIGNhY2hlIGZ1bGwgKCVkIGVudHJpZXMpXFxuXCIsXG4rXHRcdFx0XHQgbnBtayk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0bWVtc2V0KFx1MDAyNnBta1tpXSwgMCwgc2l6ZW9mKHBta1tpXSkpO1xuK1x0XHRwbWtbaV0ubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHN0cnVjdCBicmNtZl9wbWtzYV92MikpO1xuK1x0XHRpZiAocG1rc2EtXHUwMDNlYnNzaWQpXG4rXHRcdFx0bWVtY3B5KHBta1tpXS5ic3NpZCwgcG1rc2EtXHUwMDNlYnNzaWQsIEVUSF9BTEVOKTtcbitcdFx0aWYgKHBta3NhLVx1MDAzZXBta2lkKVxuK1x0XHRcdG1lbWNweShwbWtbaV0ucG1raWQsIHBta3NhLVx1MDAzZXBta2lkLCBXTEFOX1BNS0lEX0xFTik7XG4rXHRcdGlmIChwbWtzYS1cdTAwM2VwbWsgXHUwMDI2XHUwMDI2IHBta3NhLVx1MDAzZXBta19sZW4gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBwbWtzYS1cdTAwM2VwbWtfbGVuIFx1MDAzYz0gV0xBTl9QTUtfTEVOX1NVSVRFX0JfMTkyKSB7XG4rXHRcdFx0bWVtY3B5KHBta1tpXS5wbWssIHBta3NhLVx1MDAzZXBtaywgcG1rc2EtXHUwMDNlcG1rX2xlbik7XG4rXHRcdFx0cG1rW2ldLnBta19sZW4gPSBjcHVfdG9fbGUxNihwbWtzYS1cdTAwM2VwbWtfbGVuKTtcbitcdFx0fVxuK1x0XHRpZiAocG1rc2EtXHUwMDNlc3NpZCBcdTAwMjZcdTAwMjYgcG1rc2EtXHUwMDNlc3NpZF9sZW4pIHtcbitcdFx0XHRtZW1jcHkocG1rW2ldLnNzaWQuU1NJRCwgcG1rc2EtXHUwMDNlc3NpZCwgcG1rc2EtXHUwMDNlc3NpZF9sZW4pO1xuK1x0XHRcdHBta1tpXS5zc2lkLlNTSURfbGVuID0gcG1rc2EtXHUwMDNlc3NpZF9sZW47XG4rXHRcdH1cbitcdFx0aWYgKHBta3NhLVx1MDAzZWZpbHNfY2FjaGVfaWQpXG4rXHRcdFx0cG1rW2ldLmZpbHNfY2FjaGVfaWQgPSAqcG1rc2EtXHUwMDNlZmlsc19jYWNoZV9pZDtcbitcbitcdFx0aWYgKGkgPT0gbnBtaylcbitcdFx0XHRucG1rKys7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBEZWxldGU6IGZpbmQgYnkgQlNTSUQgYW5kIGNvbXBhY3QgdGhlIGxpc3QuICovXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5wbWs7IGkrKylcbitcdFx0XHRpZiAoIW1lbWNtcChwbWtzYS1cdTAwM2Vic3NpZCwgcG1rW2ldLmJzc2lkLCBFVEhfQUxFTikpXG4rXHRcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKGkgXHUwMDNlPSBucG1rKSB7XG4rXHRcdFx0YnBoeV9lcnIoZHJ2ciwgXCJWMiBQTUtTQSBlbnRyeSBub3QgZm91bmRcXG5cIik7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0Zm9yICg7IGkgXHUwMDNjIG5wbWsgLSAxOyBpKyspXG4rXHRcdFx0bWVtY3B5KFx1MDAyNnBta1tpXSwgXHUwMDI2cG1rW2kgKyAxXSwgc2l6ZW9mKHBta1tpXSkpO1xuK1x0XHRtZW1zZXQoXHUwMDI2cG1rW25wbWsgLSAxXSwgMCwgc2l6ZW9mKHBta1tucG1rIC0gMV0pKTtcbitcdFx0bnBtay0tO1xuK1x0fVxuK1xuK1x0LyogV3JpdGUgdGhlIHVwZGF0ZWQgZW50cnkgY291bnQgYmFjayB0byBzaGFkb3cgQkVGT1JFIHdlIG92ZXJ3cml0ZVxuK1x0ICogbGlzdC1cdTAwM2VsZW5ndGggd2l0aCB0aGUgd2lyZS1mb3JtYXQgYnl0ZSBsZW5ndGggYXQgc2VuZDouICBJZiB3ZVxuK1x0ICogZG9uJ3QgZG8gdGhpcyBoZXJlLCB0aGUgbmV4dCBjYWxsIHdpbGwgcmVhZCBhIGJ5dGUtbGVuZ3RoIGJhY2tcbitcdCAqIGFzIGFuIGVudHJ5IGNvdW50IGFuZCBzaWxlbnRseSBjb3JydXB0IHRoZSBsaXN0LlxuK1x0ICovXG4rXHRsaXN0LVx1MDAzZWxlbmd0aCA9IGNwdV90b19sZTE2KG5wbWspO1xuK1xuK3NlbmQ6XG4rXHQvKiBCdWlsZCB0aGUgd2lyZS1mb3JtYXQgYnl0ZSBsZW5ndGggYW5kIHNlbmQgdGhlIGZ1bGwgbGlzdCB0byBmaXJtd2FyZS5cbitcdCAqIFJlYWQgbnBtayBiYWNrIGZyb20gdGhlIHNoYWRvdyAoaGFuZGxlcyB0aGUgZmx1c2ggcGF0aCB3aGVyZSBucG1rPTApLlxuK1x0ICovXG4rXHRucG1rID0gbGUxNl90b19jcHUobGlzdC1cdTAwM2VsZW5ndGgpO1xuK1x0bGlzdC1cdTAwM2V2ZXJzaW9uID0gY3B1X3RvX2xlMTYoQlJDTUZfUE1LU0FfVkVSXzIpO1xuK1x0bGlzdC1cdTAwM2VsZW5ndGggID0gY3B1X3RvX2xlMTYob2Zmc2V0b2Yoc3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlLCBwbWspICtcbitcdFx0XHRcdCAgIG5wbWsgKiBzaXplb2Yoc3RydWN0IGJyY21mX3Bta3NhX3YyKSk7XG4rXG4rXHRyZXR1cm4gYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0KGlmcCwgXCJwbWtpZF9pbmZvXCIsIGxpc3QsIHNpemVvZigqbGlzdCkpO1xuK31cbitcbitcbiBzdGF0aWMgX191c2VkIHMzMlxuIGJyY21mX3VwZGF0ZV9wbWtsaXN0KHN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcsIHN0cnVjdCBicmNtZl9pZiAqaWZwKVxuIHtcbkBAIC00NDAyLDggKzQ1MDMsOCBAQCBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXG4gXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIHBta3NhLCB0cnVlKTtcbi1cbi1cdC8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqL1xuK1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxuK1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIHBta3NhLCB0cnVlKTtcbiBcbiBcdG5wbWsgPSBsZTMyX3RvX2NwdShjZmctXHUwMDNlcG1rX2xpc3QubnBtayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucG1rOyBpKyspXG5AQCAtNDQ0Niw4ICs0NTQ3LDggQEAgYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuIFxuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjMpKVxuIFx0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjNfb3AoaWZwLCBwbWtzYSwgZmFsc2UpO1xuLVxuLVx0LyogVE9ETzogaW1wbGVtZW50IFBNS0lEX1YyICovXG4rXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMikpXG4rXHRcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIGZhbHNlKTtcbiBcbiBcdG5wbWsgPSBsZTMyX3RvX2NwdShjZmctXHUwMDNlcG1rX2xpc3QubnBtayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucG1rOyBpKyspXG5AQCAtNDQ4Nyw4ICs0NTg4LDggQEAgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXG4gXHRpZiAoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9QTUtJRF9WMykpXG4gXHRcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIE5VTEwsIGZhbHNlKTtcbi1cbi1cdC8qIFRPRE86IGltcGxlbWVudCBQTUtJRF9WMiAqL1xuK1x0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxuK1x0XHRyZXR1cm4gYnJjbWZfcG1rc2FfdjJfb3AoY2ZnLCBpZnAsIE5VTEwsIGZhbHNlKTtcbiBcbiBcdG1lbXNldChcdTAwMjZjZmctXHUwMDNlcG1rX2xpc3QsIDAsIHNpemVvZihjZmctXHUwMDNlcG1rX2xpc3QpKTtcbiBcdGVyciA9IGJyY21mX3VwZGF0ZV9wbWtsaXN0KGNmZywgaWZwKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5pbmRleCA2Y2ViMzAxNDI5MDU0Li41NzE2N2ZkZTViYTE1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmhcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oXG5AQCAtMzQ0LDcgKzM0NCw4IEBAIHN0cnVjdCBicmNtZl9jZmc4MDIxMV93b3dsIHtcbiAgKiBAYnNzX2xpc3Q6IGJzc19saXN0IGhvbGRpbmcgc2Nhbm5lZCBhcCBpbmZvcm1hdGlvbi5cbiAgKiBAYnNzX2luZm86IGJzcyBpbmZvcm1hdGlvbiBmb3IgY2ZnODAyMTEgbGF5ZXIuXG4gICogQGNvbm5faW5mbzogYXNzb2NpYXRpb24gaW5mby5cbi0gKiBAcG1rX2xpc3Q6IHdwYTIgcG1rIGxpc3QuXG4rICogQHBta19saXN0OiB3cGEyIHBtayBsaXN0IChWMSBmaXJtd2FyZSkuXG4rICogQHBta19saXN0X3YyOiB3cGEyIHBtayBsaXN0IGZvciBWMiBmaXJtd2FyZSAoRklMUy1jYXBhYmxlLCBmaXJtd2FyZSByZXYgMTIpLlxuICAqIEBzY2FuX3N0YXR1czogc2NhbiBhY3Rpdml0eSBvbiB0aGUgZG9uZ2xlLlxuICAqIEBwdWI6IGNvbW1vbiBkcml2ZXIgaW5mb3JtYXRpb24uXG4gICogQGNoYW5uZWw6IGN1cnJlbnQgY2hhbm5lbC5cbkBAIC0zNzYsNiArMzc3LDcgQEAgc3RydWN0IGJyY21mX2NmZzgwMjExX2luZm8ge1xuIFx0c3RydWN0IHdsX2NmZzgwMjExX2Jzc19pbmZvICpic3NfaW5mbztcbiBcdHN0cnVjdCBicmNtZl9jZmc4MDIxMV9jb25uZWN0X2luZm8gY29ubl9pbmZvO1xuIFx0c3RydWN0IGJyY21mX3Bta19saXN0X2xlIHBta19saXN0O1xuK1x0c3RydWN0IGJyY21mX3Bta19saXN0X3YyX2xlIHBta19saXN0X3YyO1xuIFx0dW5zaWduZWQgbG9uZyBzY2FuX3N0YXR1cztcbiBcdHN0cnVjdCBicmNtZl9wdWIgKnB1YjtcbiBcdHUzMiBjaGFubmVsO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXG5pbmRleCBlYzE3MDY0NzgwMGRhLi5lZWZjNDM3ZGQwNTUwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1xuQEAgLTQzMSw0NSArNDMxLDU1IEBAIHZvaWQgYnJjbWZfbmV0aWZfcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRuZXRpZl9yeChza2IpO1xuIH1cbiBcbitzdHJ1Y3QgYnJjbWZfcmFkaW90YXBfaW5mbyB7XG4rXHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciBoZHI7XG4rXHRzOCBkYm1fYW50c2lnbmFsO1xuK30gX19wYWNrZWQ7XG4rXG4gdm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfUkFESU9UQVApKSB7XG4tXHRcdC8qIERvIG5vdGhpbmcgKi9cbitcdFx0LyogRmlybXdhcmUgYWxyZWFkeSBwcm92aWRlZCBhIGZ1bGwgcmFkaW90YXAgaGVhZGVyOyBkbyBub3RoaW5nICovXG4gXHR9IGVsc2UgaWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfTU9OSVRPUl9GTVRfSFdfUlhfSERSKSkge1xuIFx0XHRzdHJ1Y3Qgd2xjX2QxMXJ4aGRyICp3bGNfcnhoZHIgPSAoc3RydWN0IHdsY19kMTFyeGhkciAqKXNrYi1cdTAwM2VkYXRhO1xuLVx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XG4rXHRcdHN0cnVjdCBicmNtZl9yYWRpb3RhcF9pbmZvICpydGFwO1xuIFx0XHR1bnNpZ25lZCBpbnQgb2Zmc2V0O1xuIFx0XHR1MTYgUnhTdGF0dXMxO1xuK1x0XHRzOCByc3NpO1xuIFxuIFx0XHRSeFN0YXR1czEgPSBsZTE2X3RvX2NwdSh3bGNfcnhoZHItXHUwMDNlcnhoZHIuUnhTdGF0dXMxKTtcbitcdFx0cnNzaSA9IHdsY19yeGhkci1cdTAwM2Vyc3NpO1xuIFxuIFx0XHRvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHdsY19kMTFyeGhkcik7XG4tXHRcdC8qIE1BQyBpbnNlcnRzIDIgcGFkIGJ5dGVzIGZvciBhNCBoZWFkZXJzIG9yIFFvUyBvciBBLU1TRFVcbi1cdFx0ICogc3ViZnJhbWVzXG4tXHRcdCAqL1xuK1x0XHQvKiBNQUMgaW5zZXJ0cyAyIHBhZCBieXRlcyBmb3IgYTQgaGVhZGVycyBvciBRb1Mgb3IgQS1NU0RVIHN1YmZyYW1lcyAqL1xuIFx0XHRpZiAoUnhTdGF0dXMxIFx1MDAyNiBSWFNfUEJQUkVTKVxuIFx0XHRcdG9mZnNldCArPSAyO1xuIFx0XHRvZmZzZXQgKz0gRDExX1BIWV9IRFJfTEVOO1xuIFxuIFx0XHRza2JfcHVsbChza2IsIG9mZnNldCk7XG4gXG4tXHRcdC8qIFRPRE86IHVzZSBSWCBoZWFkZXIgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi9cbi1cdFx0cmFkaW90YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcmFkaW90YXApKTtcbi1cdFx0bWVtc2V0KHJhZGlvdGFwLCAwLCBzaXplb2YoKnJhZGlvdGFwKSk7XG4tXHRcdHJhZGlvdGFwLVx1MDAzZWl0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcmFkaW90YXApKTtcbi1cbi1cdFx0LyogVE9ETzogNCBieXRlcyB3aXRoIHJlY2VpdmUgc3RhdHVzPyAqL1xuLVx0XHRza2ItXHUwMDNlbGVuIC09IDQ7XG4rXHRcdC8qIEluc2VydCBvdXIgcmFkaW90YXAgaGVhZGVyIHdpdGggUlNTSSBkYXRhICovXG4rXHRcdGlmIChza2JfY293X2hlYWQoc2tiLCBzaXplb2YoKnJ0YXApKSlcbitcdFx0XHRnb3RvIGRyb3A7XG4rXHRcdHJ0YXAgPSBza2JfcHVzaChza2IsIHNpemVvZigqcnRhcCkpO1xuK1x0XHRtZW1zZXQocnRhcCwgMCwgc2l6ZW9mKCpydGFwKSk7XG4rXHRcdHJ0YXAtXHUwMDNlaGRyLml0X2xlbiA9IGNwdV90b19sZTE2KHNpemVvZigqcnRhcCkpO1xuK1x0XHRydGFwLVx1MDAzZWhkci5pdF9wcmVzZW50ID0gY3B1X3RvX2xlMzIoMSBcdTAwM2NcdTAwM2MgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUwpO1xuK1x0XHRydGFwLVx1MDAzZWRibV9hbnRzaWduYWwgPSByc3NpO1xuK1xuK1x0XHQvKiBTdHJpcCB0aGUgNC1ieXRlIHJlY2VpdmUgc3RhdHVzIC8gRkNTIHRhaWwgKi9cbitcdFx0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gNCk7XG4gXHR9IGVsc2Uge1xuIFx0XHRzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXA7XG4gXG4tXHRcdC8qIFRPRE86IHVzZSBSWCBzdGF0dXMgdG8gZmlsbCBzb21lIHJhZGlvdGFwIGRhdGEgKi9cbitcdFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIHNpemVvZigqcmFkaW90YXApKSlcbitcdFx0XHRnb3RvIGRyb3A7XG4gXHRcdHJhZGlvdGFwID0gc2tiX3B1c2goc2tiLCBzaXplb2YoKnJhZGlvdGFwKSk7XG4gXHRcdG1lbXNldChyYWRpb3RhcCwgMCwgc2l6ZW9mKCpyYWRpb3RhcCkpO1xuIFx0XHRyYWRpb3RhcC1cdTAwM2VpdF9sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoKnJhZGlvdGFwKSk7XG4gXG4tXHRcdC8qIFRPRE86IDQgYnl0ZXMgd2l0aCByZWNlaXZlIHN0YXR1cz8gKi9cbi1cdFx0c2tiLVx1MDAzZWxlbiAtPSA0O1xuK1x0XHQvKiBTdHJpcCB0aGUgNC1ieXRlIHJlY2VpdmUgc3RhdHVzIC8gRkNTIHRhaWwgKi9cbitcdFx0c2tiX3RyaW0oc2tiLCBza2ItXHUwMDNlbGVuIC0gNCk7XG4gXHR9XG4gXG4gXHRza2ItXHUwMDNlZGV2ID0gaWZwLVx1MDAzZW5kZXY7XG5AQCAtNDc4LDYgKzQ4OCwxMCBAQCB2b2lkIGJyY21mX25ldGlmX21vbl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTtcbiBcbiBcdGJyY21mX25ldGlmX3J4KGlmcCwgc2tiKTtcbitcdHJldHVybjtcbitcbitkcm9wOlxuK1x0YnJjbXVfcGt0X2J1Zl9mcmVlX3NrYihza2IpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGJyY21mX3J4X2hkcnB1bGwoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXG5pbmRleCAzNWNiY2VhMGFiYzlhLi5iOWM1MTg5MzlmNTA0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jXG5AQCAtMTgyLDEwICsxODIsOCBAQCBzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXG4gXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWY7XG4gXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyO1xuIFx0c3RydWN0IGJyY21mX2lmICppZnA7XG4tXHRib29sIGN1cnJlbnRseV9ibG9ja2VkO1xuLVx0aW50IGk7XG4tXHR1OCBpZmlkeDtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1OCBpZmlkeDtcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuIFxuQEAgLTE5NCwyMyArMTkyLDU0IEBAIHN0YXRpYyB2b2lkIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCxcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZmbG93LVx1MDAzZWJsb2NrX2xvY2ssIGZsYWdzKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuLVx0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcbiBcbi1cdGN1cnJlbnRseV9ibG9ja2VkID0gZmFsc2U7XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmbG93LVx1MDAzZW5yb2ZyaW5nczsgaSsrKSB7XG4tXHRcdGlmICgoZmxvdy1cdTAwM2VyaW5nc1tpXSkgXHUwMDI2XHUwMDI2IChpICE9IGZsb3dpZCkpIHtcbi1cdFx0XHRyaW5nID0gZmxvdy1cdTAwM2VyaW5nc1tpXTtcbi1cdFx0XHRpZiAoKHJpbmctXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikgXHUwMDI2XHUwMDI2XG4tXHRcdFx0ICAgIChicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgaSkgPT0gaWZpZHgpKSB7XG4tXHRcdFx0XHRpZiAocmluZy1cdTAwM2VibG9ja2VkKSB7XG4tXHRcdFx0XHRcdGN1cnJlbnRseV9ibG9ja2VkID0gdHJ1ZTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4tXHRcdFx0XHR9XG4tXHRcdFx0fVxuK1x0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcbitcdHJpbmctXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XG4rXG4rXHQvKlxuK1x0ICogTWFpbnRhaW4gdGhlIHBlci1pbnRlcmZhY2UgYmxvY2tlZC1yaW5nIGNvdW50ZXIuXG4rXHQgKlxuK1x0ICogV2UgdXNlIHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkIHJhdGhlciB0aGFuIGNoZWNraW5nXG4rXHQgKiByaW5nLVx1MDAzZXN0YXR1cyBoZXJlLiAgQSByaW5nIHRoYXQgYmVjYW1lIGJsb2NrZWQgd2hpbGVcbitcdCAqIFJJTkdfT1BFTiBoYXMgYWxyZWFkeSBiZWVuIGNvdW50ZWQgKGNvdW50ZWRfaW5fYmxvY2tlZD10cnVlKS5cbitcdCAqIEJ5IHRoZSB0aW1lIHdlIHVuYmxvY2sgaXQgZHVyaW5nIHRlYXJkb3duIGl0cyBzdGF0dXMgbWF5IGhhdmVcbitcdCAqIGFkdmFuY2VkIHRvIFJJTkdfQ0xPU0lORywgc28gdGVzdGluZyBSSU5HX09QRU4gd291bGQgd3JvbmdseVxuK1x0ICogc2tpcCB0aGUgYXRvbWljX2RlYyBhbmQgcGVybWFuZW50bHkgbGVhayB0aGUgY291bnRlciwgbGVhdmluZ1xuK1x0ICogdGhlIG5ldGlmIHF1ZXVlIHN0b3BwZWQgZm9yZXZlci5cbitcdCAqXG4rXHQgKiBSdWxlOlxuK1x0ICogICBibG9jayB0cmFuc2l0aW9uICAodW5ibG9ja2Vk4oaSYmxvY2tlZCk6IGNvdW50IG9ubHkgaWYgUklOR19PUEVOLFxuK1x0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgY291bnRlZF9pbl9ibG9ja2VkLlxuK1x0ICogICB1bmJsb2NrIHRyYW5zaXRpb24gKGJsb2NrZWTihpJ1bmJsb2NrZWQpOiBkZWNyZW1lbnQgb25seSBpZiB3ZVxuK1x0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IGNvdW50ZWQgaXQsXG4rXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyIGNvdW50ZWRfaW5fYmxvY2tlZC5cbitcdCAqL1xuK1x0aWYgKGJsb2NrZWQpIHtcbitcdFx0aWYgKHJpbmctXHUwMDNlc3RhdHVzID09IFJJTkdfT1BFTikge1xuK1x0XHRcdGF0b21pY19pbmMoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pO1xuK1x0XHRcdHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkID0gdHJ1ZTtcbiBcdFx0fVxuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHJpbmctXHUwMDNlY291bnRlZF9pbl9ibG9ja2VkKSB7XG4rXHRcdFx0YXRvbWljX2RlYyhcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSk7XG4rXHRcdFx0cmluZy1cdTAwM2Vjb3VudGVkX2luX2Jsb2NrZWQgPSBmYWxzZTtcbitcdFx0fVxuK1x0fVxuK1xuK1x0LypcbitcdCAqIE9ubHkgcHJvcGFnYXRlIGEgbmV0aWYgcXVldWUtc3RvcC93YWtlIHdoZW4gdGhlIGludGVyZmFjZVxuK1x0ICogdHJhbnNpdGlvbnMgYmV0d2VlbiBmdWxseS1jbGVhciBhbmQgYXQtbGVhc3Qtb25lLWJsb2NrZWQuXG4rXHQgKiBSZWFkaW5nIHRoZSBhdG9taWMgaXMgc2FmZSBoZXJlOiB3ZSBob2xkIGJsb2NrX2xvY2ssIHNvIG5vXG4rXHQgKiBjb25jdXJyZW50IGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FsbCBjYW4gcmFjZSB0aGUgdXBkYXRlXG4rXHQgKiB3ZSBqdXN0IG1hZGUgYWJvdmUuXG4rXHQgKi9cbitcdGlmIChibG9ja2VkIFx1MDAyNlx1MDAyNiBhdG9taWNfcmVhZChcdTAwMjZmbG93LVx1MDAzZWlmX2Jsb2NrZWRfY250W2lmaWR4XSkgIT0gMSkge1xuK1x0XHQvKiBBbm90aGVyIHJpbmcgd2FzIGFscmVhZHkgYmxvY2tlZDsgbm8gbmV3IHF1ZXVlLXN0b3AgbmVlZGVkLiAqL1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuK1x0XHRyZXR1cm47XG4gXHR9XG4tXHRmbG93LVx1MDAzZXJpbmdzW2Zsb3dpZF0tXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XG4tXHRpZiAoY3VycmVudGx5X2Jsb2NrZWQpIHtcbitcdGlmICghYmxvY2tlZCBcdTAwMjZcdTAwMjYgYXRvbWljX3JlYWQoXHUwMDI2Zmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudFtpZmlkeF0pICE9IDApIHtcbitcdFx0LyogTW9yZSByaW5ncyBzdGlsbCBibG9ja2VkOyBkbyBub3Qgd2FrZSB0aGUgcXVldWUgeWV0LiAqL1xuIFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmZsb3ctXHUwMDNlYmxvY2tfbG9jaywgZmxhZ3MpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5AQCAtMzY3LDYgKzM5Niw4IEBAIHN0cnVjdCBicmNtZl9mbG93cmluZyAqYnJjbWZfZmxvd3JpbmdfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IG5yb2ZyaW5ncylcbiBcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Zmxvdy1cdTAwM2VibG9ja19sb2NrKTtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShmbG93LVx1MDAzZWFkZHJfbW9kZSk7IGkrKylcbiBcdFx0XHRmbG93LVx1MDAzZWFkZHJfbW9kZVtpXSA9IEFERFJfSU5ESVJFQ1Q7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoZmxvdy1cdTAwM2VpZl9ibG9ja2VkX2NudCk7IGkrKylcbitcdFx0XHRhdG9taWNfc2V0KFx1MDAyNmZsb3ctXHUwMDNlaWZfYmxvY2tlZF9jbnRbaV0sIDApO1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKGZsb3ctXHUwMDNlaGFzaCk7IGkrKylcbiBcdFx0XHRmbG93LVx1MDAzZWhhc2hbaV0uaWZpZHggPSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcbmluZGV4IGYzZDUxMWY5YTNjOWEuLmFmZGVhOGIzZjhhYTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmhcbkBAIC01LDYgKzUsOCBAQFxuICNpZm5kZWYgQlJDTUZNQUNfRkxPV1JJTkdfSFxuICNkZWZpbmUgQlJDTUZNQUNfRkxPV1JJTkdfSFxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2F0b21pYy5oXHUwMDNlXG4rXG4gXG4gI2RlZmluZSBCUkNNRl9GTE9XUklOR19IQVNIU0laRVx0XHQ1MTJcdFx0LyogaGFzIHRvIGJlIDJeeCAqL1xuICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSU5WQUxJRF9JRFx0MHhGRkZGRkZGRlxuQEAgLTI2LDYgKzI4LDE2IEBAIGVudW0gcmluZ19zdGF0dXMge1xuIHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nIHtcbiBcdHUxNiBoYXNoX2lkO1xuIFx0Ym9vbCBibG9ja2VkO1xuK1x0LypcbitcdCAqIFRydWUgd2hlbiB0aGlzIHJpbmcgaGFzIGJlZW4gY291bnRlZCBpbiB0aGUgcGVyLWludGVyZmFjZVxuK1x0ICogaWZfYmxvY2tlZF9jbnRbXS4gIFNldCB0byB0cnVlIHdoZW5ldmVyIHRoZSByaW5nIHRyYW5zaXRpb25zXG4rXHQgKiB1bmJsb2NrZWTihpJibG9ja2VkIHdoaWxlIFJJTkdfT1BFTjsgY2xlYXJlZCBvbiB0aGUgbWF0Y2hpbmdcbitcdCAqIGJsb2NrZWTihpJ1bmJsb2NrZWQgdHJhbnNpdGlvbi4gIE5lZWRlZCBzbyB0aGF0IGEgcmluZyB0aGF0XG4rXHQgKiBiZWNvbWVzIGJsb2NrZWQgd2hpbGUgUklOR19PUEVOIGFuZCBpcyBsYXRlciBtb3ZlZCB0b1xuK1x0ICogUklOR19DTE9TSU5HIHN0aWxsIGNvcnJlY3RseSBkZWNyZW1lbnRzIHRoZSBjb3VudGVyIGF0XG4rXHQgKiB0ZWFyZG93biwgZXZlbiB0aG91Z2ggaXRzIHN0YXR1cyBpcyBubyBsb25nZXIgUklOR19PUEVOLlxuK1x0ICovXG4rXHRib29sIGNvdW50ZWRfaW5fYmxvY2tlZDtcbiBcdGVudW0gcmluZ19zdGF0dXMgc3RhdHVzO1xuIFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBza2JsaXN0O1xuIH07XG5AQCAtNDAsNiArNTIsMTIgQEAgc3RydWN0IGJyY21mX2Zsb3dyaW5nIHtcbiBcdHN0cnVjdCBicmNtZl9mbG93cmluZ19oYXNoIGhhc2hbQlJDTUZfRkxPV1JJTkdfSEFTSFNJWkVdO1xuIFx0c3BpbmxvY2tfdCBibG9ja19sb2NrO1xuIFx0ZW51bSBwcm90b19hZGRyX21vZGUgYWRkcl9tb2RlW0JSQ01GX01BWF9JRlNdO1xuK1x0LyogUGVyLWludGVyZmFjZSBjb3VudCBvZiBjdXJyZW50bHkgYmxvY2tlZCBvcGVuIHJpbmdzLlxuK1x0ICogTWFpbnRhaW5lZCBhdG9taWNhbGx5IHNvIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FuIGNoZWNrXG4rXHQgKiB3aGV0aGVyIGFueSBzaWJsaW5nIHJpbmcgaXMgYWxyZWFkeSBibG9ja2VkIGluIE8oMSkgd2l0aG91dFxuK1x0ICogaG9sZGluZyBibG9ja19sb2NrIGFjcm9zcyBhbiBPKG5yb2ZyaW5ncykgd2Fsay5cbitcdCAqL1xuK1x0YXRvbWljX3QgaWZfYmxvY2tlZF9jbnRbQlJDTUZfTUFYX0lGU107XG4gXHR1MTYgbnJvZnJpbmdzO1xuIFx0Ym9vbCB0ZGxzX2FjdGl2ZTtcbiBcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICp0ZGxzX2VudHJ5O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmNcbmluZGV4IGE0M2YxYTM4YjBlMzAuLjNjMWNhMzU1ZThlZWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Z3c2lnbmFsLmNcbkBAIC0xMDM3LDcgKzEwMzcsOSBAQCBpbnQgYnJjbWZfZndzX21hY2Rlc2NfaW5kaWNhdGUoc3RydWN0IGJyY21mX2Z3c19pbmZvICpmd3MsIHU4IHR5cGUsIHU4ICpkYXRhKVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJyY21mX2RiZyhUUkFDRSwgXCJ1c2UgZXhpc3RpbmdcXG5cIik7XG4gXHRcdFx0V0FSTl9PTihlbnRyeS1cdTAwM2VtYWNfaGFuZGxlICE9IG1hY19oYW5kbGUpO1xuLVx0XHRcdC8qIFRPRE86IHdoYXQgc2hvdWxkIHdlIGRvIGhlcmU6IGNvbnRpbnVlLCByZWluaXQsIC4uICovXG4rXHRcdFx0LyogRmlybXdhcmUgcmUtc2VudCBBREQgZm9yIHRoZSBzYW1lIE1BQyBoYW5kbGUuXG4rXHRcdFx0ICogTm8gYWN0aW9uIHJlcXVpcmVkOyBpdCBpcyBhIHNhZmUgbm8tb3AuXG4rXHRcdFx0ICovXG4gXHRcdH1cbiBcdH1cbiBcdHJldHVybiAwO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuaW5kZXggYmExY2UxNTUyZTBmNC4uOGRiNjE2NzA3MmRhMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuY1xuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jXG5AQCAtNDgsNyArNDgsMTkgQEBcbiAjZGVmaW5lIE1TR0JVRl9UWVBFX0xQQktfRE1BWEZFUlx0XHQweDEzXG4gI2RlZmluZSBNU0dCVUZfVFlQRV9MUEJLX0RNQVhGRVJfQ01QTFRcdFx0MHgxNFxuIFxuLSNkZWZpbmUgTlJfVFhfUEtUSURTXHRcdFx0XHQyMDQ4XG4rLypcbisgKiBOUl9UWF9QS1RJRFM6IG51bWJlciBvZiBzaW11bHRhbmVvdXNseSBpbi1mbGlnaHQgVFggcGFja2V0IElEcy5cbisgKiBFYWNoIG91dHN0YW5kaW5nIFRYIGZyYW1lIGNvbnN1bWVzIG9uZSBJRCB1bnRpbCB0aGUgZG9uZ2xlIHJldHVybnNcbisgKiBhIFRYLXN0YXR1cyBjb21wbGV0aW9uLiAgVGhlIG9yaWdpbmFsIDIwNDgtZW50cnkgcG9vbCBleGhhdXN0ZWQgdW5kZXJcbisgKiDiiaU0IGNvbmN1cnJlbnQgaXBlcmYzIHN0cmVhbXMgb24gV2ktRmkgNS82ICg4MDIuMTFhYy9heCkgZGV2aWNlcyxcbisgKiBjYXVzaW5nIFwiTm8gUEtUSUQgYXZhaWxhYmxlXCIgZHJvcHMgYW5kIFRDUCByZXRyYW5zbWl0cy4gIDQwOTYgZ2l2ZXNcbisgKiBoZWFkcm9vbSBmb3IgaGlnaC1hZ2dyZWdhdGlvbiBzY2VuYXJpb3Mgd2hpbGUgc3RpbGwgZml0dGluZyBpbiBhXG4rICogbW9kZXN0IGFtb3VudCBvZiBob3N0IG1lbW9yeSAofjQ4IEtCIGZvciB0aGUgcGt0aWQgdGFibGUgZW50cmllcykuXG4rICpcbisgKiBOUl9SWF9QS1RJRFM6IFJYIHBvc3QgYnVmZmVycyBwcmUtYWxsb2NhdGVkIHRvIHRoZSBkb25nbGUuICAxMDI0IGlzXG4rICogc3VmZmljaWVudCBmb3IgY3VycmVudCBoYXJkd2FyZSBSWCByaW5nIGRlcHRoczsgbGVhdmUgdW5jaGFuZ2VkLlxuKyAqL1xuKyNkZWZpbmUgTlJfVFhfUEtUSURTXHRcdFx0XHQ0MDk2XG4gI2RlZmluZSBOUl9SWF9QS1RJRFNcdFx0XHRcdDEwMjRcbiBcbiAjZGVmaW5lIEJSQ01GX0lPQ1RMX1JFUV9QS1RJRFx0XHRcdDB4RkZGRVxuQEAgLTY0LDggKzc2LDI5IEBAXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfUEtUX0ZMQUdTX0ZSQU1FX01BU0tcdDB4MDdcbiAjZGVmaW5lIEJSQ01GX01TR0JVRl9QS1RfRkxBR1NfUFJJT19TSElGVFx0NVxuIFxuLSNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDFcdFx0MzJcbi0jZGVmaW5lIEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQyXHRcdDk2XG4rLypcbisgKiBUWCBmbHVzaCAvIGRvb3JiZWxsLXJpbmcgdGhyZXNob2xkcy5cbisgKlxuKyAqIENOVDEgaXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGZyYW1lcyB0byBhY2N1bXVsYXRlIGluIHRoZSBjb21tb25yaW5nXG4rICogYmVmb3JlIHRoZSBmaXJzdCBpbnRlcm1lZGlhdGUgd3JpdGVfY29tcGxldGUoKSAoZG9vcmJlbGwgcmluZykgaXNcbisgKiBpc3N1ZWQgbWlkLWJhdGNoLiAgQ05UMiBpcyB0aGUgaGFyZCBmbHVzaCBpbnRlcnZhbDogYWZ0ZXIgdGhpcyBtYW55XG4rICogZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuIHNpbmNlIHRoZSBsYXN0IGZsdXNoLCB3ZSB1bmNvbmRpdGlvbmFsbHlcbisgKiByaW5nIHRoZSBiZWxsIGFuZCByZXNldCB0aGUgY291bnRlci5cbisgKlxuKyAqIFJhaXNpbmcgYm90aCBmcm9tIHRoZSBvcmlnaW5hbCAzMi85NiB0byA2NC8xMjggZG91YmxlcyB0aGUgYXZlcmFnZVxuKyAqIG51bWJlciBvZiBUWCBkZXNjcmlwdG9ycyBjb21taXR0ZWQgcGVyIE1NSU8gd3JpdGUsIGhhbHZpbmcgdGhlIFBDSWVcbisgKiBkb29yYmVsbCByYXRlIG9uIHN1c3RhaW5lZCB0aHJvdWdocHV0IHdvcmtsb2Fkcy4gIFRoZSB0cmFkZW9mZiBpcyBhXG4rICogbWFyZ2luYWxseSBoaWdoZXIgd29yc3QtY2FzZSBsYXRlbmN5IGZvciB0aGUgbGFzdCBmcmFtZXMgaW4gYSBidXJzdCxcbisgKiB3aGljaCBpbiBwcmFjdGljZSBpcyBoaWRkZW4gYnkgdGhlIHRpbWUgdGhlIGRvbmdsZSBETUEgZW5naW5lIGRyYWluc1xuKyAqIHRoZSBwcmV2aW91cyBiYXRjaC5cbisgKlxuKyAqIFRSSUNLTEVfVFhXT1JLRVJfVEhSUyBnb3Zlcm5zIGhvdyBvZnRlbiBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YSgpXG4rICogZm9yY2VzIGEgd29ya3F1ZXVlIHNjaGVkdWxlIHdoZW4gdGhlIHF1ZXVlIGRlcHRoIGlzIG5vdCBhIG11bHRpcGxlIG9mXG4rICogdGhpcyB2YWx1ZS4gIEtlZXBpbmcgaXQgYXQgaGFsZiBvZiBDTlQxICgzMikgcHJlc2VydmVzIHJlc3BvbnNpdmVuZXNzXG4rICogZm9yIGxvdy1yYXRlIGZsb3dzIChlLmcuIFZvSVAsIElDTVApIHRoYXQgbmV2ZXIgYWNjdW11bGF0ZSA2NCBmcmFtZXMuXG4rICovXG4rI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMVx0XHQ2NFxuKyNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDJcdFx0MTI4XG4gXG4gI2RlZmluZSBCUkNNRl9NU0dCVUZfREVMQVlfVFhXT1JLRVJfVEhSU1x0OTZcbiAjZGVmaW5lIEJSQ01GX01TR0JVRl9UUklDS0xFX1RYV09SS0VSX1RIUlNcdDMyXG5AQCAtNzg3LDEwICs4MjAsMzAgQEAgc3RhdGljIGludCBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZiwgdTMyIGZsb3dpZCxcbiB7XG4gXHRzdHJ1Y3QgYnJjbWZfY29tbW9ucmluZyAqY29tbW9ucmluZztcbiBcbi1cdHNldF9iaXQoZmxvd2lkLCBtc2didWYtXHUwMDNlZmxvd19tYXApO1xuK1x0LypcbitcdCAqIElmIHRoZSBiaXQgd2FzIGFscmVhZHkgc2V0LCBhIHR4Zmxvd193b3JrIGl0ZW0gaXMgYWxyZWFkeVxuK1x0ICogcXVldWVkIG9yIHJ1bm5pbmcgZm9yIHRoaXMgcmluZy4gIEluIHRoYXQgY2FzZSB0aGUgZXhpc3RpbmdcbitcdCAqIHdvcmtlciB3aWxsIGRyYWluIG91ciBmcmVzaGx5IGVucXVldWVkIGZyYW1lIHdoZW4gaXQgcnVucyxcbitcdCAqIHNvIHdlIG9ubHkgbmVlZCB0byBzY2hlZHVsZSBhbm90aGVyIHdvcmsgaXRlbSB3aGVuIHRoZVxuK1x0ICogZm9yY2UgZmxhZyBpcyBzZXQgb3IgdGhlIHJpbmcgaXMgYmVsb3cgdGhlIGRlbGF5IHRocmVzaG9sZC5cbitcdCAqXG4rXHQgKiBJZiB0aGUgYml0IHdhcyBOT1Qgc2V0ICh0ZXN0X2FuZF9zZXRfYml0IHJldHVybnMgZmFsc2UpLCBub1xuK1x0ICogd29ya2VyIGlzIHBlbmRpbmcgZm9yIHRoaXMgcmluZyBhdCBhbGwuICBXZSBNVVNUIHNjaGVkdWxlXG4rXHQgKiBvbmUgdW5jb25kaXRpb25hbGx5LCBvdGhlcndpc2UgdGhlIGZyYW1lIHdlIGp1c3QgZW5xdWV1ZWRcbitcdCAqIHdpbGwgc2l0IGluIHRoZSBmbG93cmluZyB1bnNlbnQgdW50aWwgc29tZSB1bnJlbGF0ZWQgZXZlbnRcbitcdCAqIHRyaWdnZXJzIHRoZSB3b3JrcXVldWUg4oCUIGNhdXNpbmcgc2lsZW50IFRYIHN0YWxscyB1bmRlclxuK1x0ICogaGlnaCBsb2FkIHdoZW4gb3V0c3RhbmRpbmdfdHggXHUwMDNlPSBERUxBWV9UWFdPUktFUl9USFJTLlxuK1x0ICovXG4rXHRpZiAoIXRlc3RfYW5kX3NldF9iaXQoZmxvd2lkLCBtc2didWYtXHUwMDNlZmxvd19tYXApKSB7XG4rXHRcdC8qIEJpdCB3YXMgY2xlYXI6IG5vIHdvcmtlciBwZW5kaW5nLCBhbHdheXMgc2NoZWR1bGUuICovXG4rXHRcdHF1ZXVlX3dvcmsobXNnYnVmLVx1MDAzZXR4Zmxvd193cSwgXHUwMDI2bXNnYnVmLVx1MDAzZXR4Zmxvd193b3JrKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHQvKiBCaXQgd2FzIGFscmVhZHkgc2V0OiB3b3JrZXIgcGVuZGluZywgYXBwbHkgY29hbGVzY2luZyBoZXVyaXN0aWMuICovXG4gXHRjb21tb25yaW5nID0gbXNnYnVmLVx1MDAzZWZsb3dyaW5nc1tmbG93aWRdO1xuLVx0aWYgKChmb3JjZSkgfHwgKGF0b21pY19yZWFkKFx1MDAyNmNvbW1vbnJpbmctXHUwMDNlb3V0c3RhbmRpbmdfdHgpIFx1MDAzY1xuLVx0XHRcdEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSlcbitcdGlmIChmb3JjZSB8fCAoYXRvbWljX3JlYWQoXHUwMDI2Y29tbW9ucmluZy1cdTAwM2VvdXRzdGFuZGluZ190eCkgXHUwMDNjXG4rXHRcdCAgICAgIEJSQ01GX01TR0JVRl9ERUxBWV9UWFdPUktFUl9USFJTKSlcbiBcdFx0cXVldWVfd29yayhtc2didWYtXHUwMDNldHhmbG93X3dxLCBcdTAwMjZtc2didWYtXHUwMDNldHhmbG93X3dvcmspO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMTYyMSwxMSArMTY3NCwxMSBAQCBpbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxuIFx0ZG8ge1xuIFx0XHRicmNtZl9tc2didWZfcnhidWZfZGF0YV9maWxsKG1zZ2J1Zik7XG4gXHRcdGlmIChtc2didWYtXHUwMDNlbWF4X3J4YnVmcG9zdCAhPSBtc2didWYtXHUwMDNlcnhidWZwb3N0KVxuLVx0XHRcdG1zbGVlcCgxMCk7XG4rXHRcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuIFx0XHRlbHNlXG4gXHRcdFx0YnJlYWs7XG4gXHRcdGNvdW50Kys7XG4tXHR9IHdoaWxlIChjb3VudCBcdTAwM2MgMTApO1xuK1x0fSB3aGlsZSAoY291bnQgXHUwMDNjIDEwMCk7XG4gXHRicmNtZl9tc2didWZfcnhidWZfZXZlbnRfcG9zdChtc2didWYpO1xuIFx0YnJjbWZfbXNnYnVmX3J4YnVmX2lvY3RscmVzcF9wb3N0KG1zZ2J1Zik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmNcbmluZGV4IDEzNjYyYWE0YjRlYTYuLjkzMzhhNWZhYTI2MGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jXG5AQCAtMjY4LDYgKzI2OCwyNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJyY21mX2Zpcm13YXJlX21hcHBpbmcgYnJjbWZfcGNpZV9md25hbWVzW10gPSB7XG4gXG4gI2RlZmluZSBCUkNNRl9QQ0lFX01CREFUQV9USU1FT1VUXHRcdG1zZWNzX3RvX2ppZmZpZXMoMjAwMClcbiBcbisvKlxuKyAqIEgyRCBtYWlsYm94IHBvbGwgdGltaW5nIHBhcmFtZXRlcnMuXG4rICpcbisgKiBUaGUgZG9uZ2xlIHR5cGljYWxseSBjbGVhcnMgdGhlIEgyRCBtYWlsYm94IHJlZ2lzdGVyIHdpdGhpbiBhIGZld1xuKyAqIGh1bmRyZWQgbWljcm9zZWNvbmRzIGFmdGVyIHRoZSBkb29yYmVsbCBpbnRlcnJ1cHQgZmlyZXMuICBUaGVcbisgKiBvcmlnaW5hbCBjb2RlIHVzZWQgbXNsZWVwKDEwKSAqIDEwMCBpdGVyYXRpb25zLCBtZWFuaW5nIHRoZVxuKyAqIG1pbmltdW0gb2JzZXJ2YWJsZSBsYXRlbmN5IHdhcyAxMG1zIGV2ZW4gd2hlbiB0aGUgZG9uZ2xlIHdhcyBmYXN0LlxuKyAqXG4rICogV2UgaW5zdGVhZCBzdGFydCB3aXRoIGEgc2hvcnQgc2xlZXAgYW5kIGRvdWJsZSBpdCBlYWNoIGl0ZXJhdGlvblxuKyAqIChleHBvbmVudGlhbCBiYWNrb2ZmKSB1cCB0byBCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTLCBzdGF5aW5nXG4rICogd2l0aGluIHRoZSBzYW1lIDEtc2Vjb25kIGFic29sdXRlIHRpbWVvdXQuXG4rICpcbisgKiBNSU5fVVMgLyBJTklUSUFMX01BWF9VUyA6IHVzbGVlcF9yYW5nZSBib3VuZHMgZm9yIHRoZSBmaXJzdCBpdGVyYXRpb24uXG4rICogTUFYX1VTICAgICA6IGNhcCBvbiB0aGUgcGVyLWl0ZXJhdGlvbiBzbGVlcCAowrVzKS5cbisgKiBUSU1FT1VUX1VTIDogdG90YWwgYnVkZ2V0IGJlZm9yZSBnaXZpbmcgdXAgKDEgc2Vjb25kKS5cbisgKi9cbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NSU5fVVNcdFx0NDBcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9JTklUSUFMX01BWF9VU1x0NTBcbisjZGVmaW5lIEJSQ01GX1BDSUVfTUJfUE9MTF9NQVhfVVNcdFx0NTAwMFxuKyNkZWZpbmUgQlJDTUZfUENJRV9NQl9QT0xMX1RJTUVPVVRfVVNcdFx0MTAwMDAwMFxuK1xuICNkZWZpbmUgQlJDTUZfUENJRV9DRkdSRUdfU1RBVFVTX0NNRFx0XHQweDRcbiAjZGVmaW5lIEJSQ01GX1BDSUVfQ0ZHUkVHX1BNX0NTUlx0XHQweDRDXG4gI2RlZmluZSBCUkNNRl9QQ0lFX0NGR1JFR19NU0lfQ0FQXHRcdDB4NThcbkBAIC03NjYsNyArNzg3LDggQEAgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbywgdTMyIGh0b2RfbWJfZGF0YSlcbiBcdHN0cnVjdCBicmNtZl9jb3JlICpjb3JlO1xuIFx0dTMyIGFkZHI7XG4gXHR1MzIgY3VyX2h0b2RfbWJfZGF0YTtcbi1cdHUzMiBpO1xuK1x0dTMyIGVsYXBzZWRfdXMgPSAwO1xuK1x0dTMyIHNsZWVwX3VzID0gQlJDTUZfUENJRV9NQl9QT0xMX0lOSVRJQUxfTUFYX1VTO1xuIFxuIFx0c2hhcmVkID0gXHUwMDI2ZGV2aW5mby1cdTAwM2VzaGFyZWQ7XG4gXHRhZGRyID0gc2hhcmVkLVx1MDAzZWh0b2RfbWJfZGF0YV9hZGRyO1xuQEAgLTc3NiwxMiArNzk4LDQwIEBAIGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhKHN0cnVjdCBicmNtZl9wY2llZGV2X2luZm8gKmRldmluZm8sIHUzMiBodG9kX21iX2RhdGEpXG4gXHRcdGJyY21mX2RiZyhQQ0lFLCBcIk1CIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgcGVuZGluZyAweCUwNHhcXG5cIixcbiBcdFx0XHQgIGN1cl9odG9kX21iX2RhdGEpO1xuIFxuLVx0aSA9IDA7XG4rXHQvKlxuK1x0ICogV2FpdCBmb3IgdGhlIGRvbmdsZSB0byBjb25zdW1lIHRoZSBwcmV2aW91cyBIMkQgbWFpbGJveCBtZXNzYWdlLlxuK1x0ICpcbitcdCAqIFRoZXJlIGlzIG5vIGludGVycnVwdCB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZG9uZ2xlIGNsZWFycyB0aGlzXG4rXHQgKiByZWdpc3Rlciwgc28gcG9sbGluZyBpcyB1bmF2b2lkYWJsZS4gIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWRcbitcdCAqIG1zbGVlcCgxMCkgcGVyIGl0ZXJhdGlvbiwgaW5jdXJyaW5nIGF0IGxlYXN0IDEwbXMgb2YgbGF0ZW5jeVxuK1x0ICogZXZlbiB3aGVuIHRoZSBkb25nbGUgcmVzcG9uZGVkIGluIG1pY3Jvc2Vjb25kcy5cbitcdCAqXG4rXHQgKiBXZSB1c2UgdXNsZWVwX3JhbmdlKCkgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmIGluc3RlYWQ6XG4rXHQgKiAgIC0gRmlyc3QgaXRlcmF0aW9uIHNsZWVwcyB+NTDCtXMgKGZhc3QgcGF0aCBmb3IgcmVzcG9uc2l2ZSBkb25nbGUpLlxuK1x0ICogICAtIEVhY2ggc3Vic2VxdWVudCBpdGVyYXRpb24gZG91YmxlcyB0aGUgc2xlZXAsIGNhcHBlZCBhdCA1bXMsXG4rXHQgKiAgICAgc28gbG9uZyB3YWl0cyBzdGlsbCB5aWVsZCB0aGUgQ1BVIHdpdGhvdXQgYnVzeS1zcGlubmluZy5cbitcdCAqICAgLSBUb3RhbCB0aW1lb3V0IG1hdGNoZXMgdGhlIG9yaWdpbmFsIDEtc2Vjb25kIGxpbWl0LlxuK1x0ICogICAtIFdlIGJhaWwgZWFybHkgaWYgdGhlIGRldmljZSBoYXMgZ29uZSBkb3duIHNvIHRoYXQgYSBkZWFkXG4rXHQgKiAgICAgZG9uZ2xlIGRvZXMgbm90IGhvbGQgdGhlIGNhbGxlciBmb3IgYSBmdWxsIHNlY29uZC5cbitcdCAqL1xuIFx0d2hpbGUgKGN1cl9odG9kX21iX2RhdGEgIT0gMCkge1xuLVx0XHRtc2xlZXAoMTApO1xuLVx0XHRpKys7XG4tXHRcdGlmIChpIFx1MDAzZSAxMDApXG4rXHRcdGlmIChkZXZpbmZvLVx1MDAzZXN0YXRlID09IEJSQ01GTUFDX1BDSUVfU1RBVEVfRE9XTikge1xuK1x0XHRcdGJyY21mX2RiZyhQQ0lFLCBcIkRldmljZSBkb3duLCBhYm9ydGluZyBNQiBzZW5kXFxuXCIpO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuK1x0XHR9XG4rXG4rXHRcdGlmIChlbGFwc2VkX3VzIFx1MDAzZT0gQlJDTUZfUENJRV9NQl9QT0xMX1RJTUVPVVRfVVMpIHtcbitcdFx0XHRicmNtZl9lcnIoXCJUaW1lb3V0IHdhaXRpbmcgZm9yIEgyRCBNQiBzbG90IGFmdGVyICV1IHVzXFxuXCIsXG4rXHRcdFx0XHQgIGVsYXBzZWRfdXMpO1xuK1x0XHRcdHJldHVybiAtRUlPO1xuK1x0XHR9XG4rXG4rXHRcdHVzbGVlcF9yYW5nZShCUkNNRl9QQ0lFX01CX1BPTExfTUlOX1VTLCBzbGVlcF91cyk7XG4rXHRcdGVsYXBzZWRfdXMgKz0gc2xlZXBfdXM7XG4rXG4rXHRcdC8qIEV4cG9uZW50aWFsIGJhY2tvZmYsIGNhcHBlZCBhdCBCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTICovXG4rXHRcdHNsZWVwX3VzID0gbWluKHNsZWVwX3VzICogMiwgKHUzMilCUkNNRl9QQ0lFX01CX1BPTExfTUFYX1VTKTtcbitcbiBcdFx0Y3VyX2h0b2RfbWJfZGF0YSA9IGJyY21mX3BjaWVfcmVhZF90Y20zMihkZXZpbmZvLCBhZGRyKTtcbiBcdH1cbiBcbkBAIC0xMDAxLDEwICsxMDUxLDEwIEBAIHN0YXRpYyB2b2lkIGJyY21mX3BjaWVfcmVsZWFzZV9pcnEoc3RydWN0IGJyY21mX3BjaWVkZXZfaW5mbyAqZGV2aW5mbylcbiBcdGZyZWVfaXJxKHBkZXYtXHUwMDNlaXJxLCBkZXZpbmZvKTtcbiBcdHBjaV9kaXNhYmxlX21zaShwZGV2KTtcbiBcbi1cdG1zbGVlcCg1MCk7XG4rXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XG4gXHRjb3VudCA9IDA7XG4tXHR3aGlsZSAoKGRldmluZm8tXHUwMDNlaW5faXJxKSBcdTAwMjZcdTAwMjYgKGNvdW50IFx1MDAzYyAyMCkpIHtcbi1cdFx0bXNsZWVwKDUwKTtcbitcdHdoaWxlICgoZGV2aW5mby1cdTAwM2Vpbl9pcnEpIFx1MDAyNlx1MDAyNiAoY291bnQgXHUwMDNjIDEwMDApKSB7XG4rXHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbiBcdFx0Y291bnQrKztcbiBcdH1cbiBcdGlmIChkZXZpbmZvLVx1MDAzZWluX2lycSlcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uY1xuaW5kZXggYjcyNWM2NGU1YjVjNi4uNGU0MTQ0MDNkNzQ3MSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmNcbkBAIC0xNjQ1LDM3ICsxNjQ1LDQzIEBAIHN0YXRpYyB1OCBicmNtZl9zZGlvX3J4Z2xvbShzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzLCB1OCByeHNlcSlcbiBcbiBcdFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcTtcbiBcdFx0cmRfbmV3LmxlbiA9IGRsZW47XG4rXG4rXHRcdC8qXG4rXHRcdCAqIENsYWltIHRoZSBob3N0IG9uY2UgZm9yIHRoZSBlbnRpcmUgaGVhZGVyLXBhcnNpbmcgcGhhc2UuXG4rXHRcdCAqXG4rXHRcdCAqIGJyY21mX3NkaW9faGRwYXJzZSgpIG9wZXJhdGVzIG9uIGRhdGEgYWxyZWFkeSBpbiBob3N0XG4rXHRcdCAqIG1lbW9yeSwgYnV0IG1heSBjYWxsIGJyY21mX3NkaW9fcnhmYWlsKCkgb24gZXJyb3IsIHdoaWNoXG4rXHRcdCAqIHdyaXRlcyBTRElPIEZ1bmMxIHJlZ2lzdGVycyBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIHRoZVxuK1x0XHQgKiBob3N0IHRvIGJlIGNsYWltZWQuXG4rXHRcdCAqXG4rXHRcdCAqIHNrYl9wdWxsKCkgYW5kIHRoZSBudW0gY291bnRlciBhcmUgcHVyZSBob3N0LW1lbW9yeVxuK1x0XHQgKiBvcGVyYXRpb25zOyBrZWVwIHRoZW0gb3V0c2lkZSB0aGUgbG9jayB0byBtaW5pbWlzZSB0aGVcbitcdFx0ICogaG9sZCB0aW1lLiAgQm90aCBoZHBhcnNlIGNhbGxzIChzdXBlcmZyYW1lIGhlYWRlciBhbmRcbitcdFx0ICogZWFjaCBzdWJmcmFtZSBoZWFkZXIpIGFyZSBncm91cGVkIHVuZGVyIGEgc2luZ2xlIGNsYWltL1xuK1x0XHQgKiByZWxlYXNlLCByZXBsYWNpbmcgdGhlIG9yaWdpbmFsIE4rMSBzZXBhcmF0ZSBwYWlycy5cbitcdFx0ICovXG4gXHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4gXHRcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwZmlyc3QtXHUwMDNlZGF0YSwgXHUwMDI2cmRfbmV3LFxuIFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VQRVIpO1xuLVx0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdGJ1cy1cdTAwM2VjdXJfcmVhZC5sZW4gPSByZF9uZXcubGVuX254dGZybSBcdTAwM2NcdTAwM2MgNDtcbi1cbi1cdFx0LyogUmVtb3ZlIHN1cGVyZnJhbWUgaGVhZGVyLCByZW1lbWJlciBvZmZzZXQgKi9cbi1cdFx0c2tiX3B1bGwocGZpcnN0LCByZF9uZXcuZGF0X29mZnNldCk7XG4tXHRcdG51bSA9IDA7XG4tXG4tXHRcdC8qIFZhbGlkYXRlIGFsbCB0aGUgc3ViZnJhbWUgaGVhZGVycyAqL1xuLVx0XHRza2JfcXVldWVfd2FsayhcdTAwMjZidXMtXHUwMDNlZ2xvbSwgcG5leHQpIHtcbi1cdFx0XHQvKiBsZWF2ZSB3aGVuIGludmFsaWQgc3ViZnJhbWUgaXMgZm91bmQgKi9cbi1cdFx0XHRpZiAoZXJyY29kZSlcbi1cdFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRcdHJkX25ldy5sZW4gPSBwbmV4dC1cdTAwM2VsZW47XG4tXHRcdFx0cmRfbmV3LnNlcV9udW0gPSByeHNlcSsrO1xuLVx0XHRcdHNkaW9fY2xhaW1faG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdFx0ZXJyY29kZSA9IGJyY21mX3NkaW9faGRwYXJzZShidXMsIHBuZXh0LVx1MDAzZWRhdGEsIFx1MDAyNnJkX25ldyxcbi1cdFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VCKTtcbi1cdFx0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4tXHRcdFx0YnJjbWZfZGJnX2hleF9kdW1wKEJSQ01GX0dMT01fT04oKSxcbi1cdFx0XHRcdFx0ICAgcG5leHQtXHUwMDNlZGF0YSwgMzIsIFwic3ViZnJhbWU6XFxuXCIpO1xuLVxuLVx0XHRcdG51bSsrO1xuK1x0XHQvKiBWYWxpZGF0ZSBhbGwgdGhlIHN1YmZyYW1lIGhlYWRlcnMgd2hpbGUgaG9zdCBpcyBjbGFpbWVkICovXG4rXHRcdGlmICghZXJyY29kZSkge1xuK1x0XHRcdHNrYl9xdWV1ZV93YWxrKFx1MDAyNmJ1cy1cdTAwM2VnbG9tLCBwbmV4dCkge1xuK1x0XHRcdFx0cmRfbmV3LmxlbiA9IHBuZXh0LVx1MDAzZWxlbjtcbitcdFx0XHRcdHJkX25ldy5zZXFfbnVtID0gcnhzZXErKztcbitcdFx0XHRcdGVycmNvZGUgPSBicmNtZl9zZGlvX2hkcGFyc2UoYnVzLCBwbmV4dC1cdTAwM2VkYXRhLFxuK1x0XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZyZF9uZXcsXG4rXHRcdFx0XHRcdFx0XHQgICAgIEJSQ01GX1NESU9fRlRfU1VCKTtcbitcdFx0XHRcdGJyY21mX2RiZ19oZXhfZHVtcChCUkNNRl9HTE9NX09OKCksXG4rXHRcdFx0XHRcdFx0ICAgcG5leHQtXHUwMDNlZGF0YSwgMzIsXG4rXHRcdFx0XHRcdFx0ICAgXCJzdWJmcmFtZTpcXG5cIik7XG4rXHRcdFx0XHRpZiAoZXJyY29kZSlcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuIFx0XHR9XG4gXG4gXHRcdGlmIChlcnJjb2RlKSB7XG4tXHRcdFx0LyogVGVybWluYXRlIGZyYW1lIG9uIGVycm9yICovXG4tXHRcdFx0c2Rpb19jbGFpbV9ob3N0KGJ1cy1cdTAwM2VzZGlvZGV2LVx1MDAzZWZ1bmMxKTtcbitcdFx0XHQvKiBUZXJtaW5hdGUgZnJhbWUgb24gZXJyb3IsIHN0aWxsIGhvbGRpbmcgdGhlIGhvc3QgKi9cbiBcdFx0XHRicmNtZl9zZGlvX3J4ZmFpbChidXMsIHRydWUsIGZhbHNlKTtcbiBcdFx0XHRidXMtXHUwMDNlc2RjbnQucnhnbG9tZmFpbCsrO1xuIFx0XHRcdGJyY21mX3NkaW9fZnJlZV9nbG9tKGJ1cyk7XG5AQCAtMTY4Myw2ICsxNjg5LDE0IEBAIHN0YXRpYyB1OCBicmNtZl9zZGlvX3J4Z2xvbShzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzLCB1OCByeHNlcSlcbiBcdFx0XHRidXMtXHUwMDNlY3VyX3JlYWQubGVuID0gMDtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuK1x0XHRzZGlvX3JlbGVhc2VfaG9zdChidXMtXHUwMDNlc2Rpb2Rldi1cdTAwM2VmdW5jMSk7XG4rXG4rXHRcdC8qIEhvc3QgcmVsZWFzZWQ7IG5vdyBkbyB0aGUgcHVyZS1tZW1vcnkgYm9va2tlZXBpbmcgKi9cbitcdFx0YnVzLVx1MDAzZWN1cl9yZWFkLmxlbiA9IHJkX25ldy5sZW5fbnh0ZnJtIFx1MDAzY1x1MDAzYyA0O1xuK1xuK1x0XHQvKiBSZW1vdmUgc3VwZXJmcmFtZSBoZWFkZXIsIHJlbWVtYmVyIG9mZnNldCAqL1xuK1x0XHRza2JfcHVsbChwZmlyc3QsIHJkX25ldy5kYXRfb2Zmc2V0KTtcbitcdFx0bnVtID0gMDtcbiBcbiBcdFx0LyogQmFzaWMgU0QgZnJhbWluZyBsb29rcyBvayAtIHByb2Nlc3MgZWFjaCBwYWNrZXQgKGhlYWRlcikgKi9cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXG5pbmRleCBmYzdhNWRkMmU1ZDg2Li4zZmQ4YmRiZDM1ZTU4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jXG5AQCAtNTE2LDEyICs1MTYsMTEgQEAgaW50IGJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLFxuIFx0XHRcdHJldHVybiAtRU5PU1BDO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBXZSBhcmVuJ3QgcmVhbGx5IG91dCBvZiBzcGFjZSBpZiB0aGUgbmV3IGZyYW1lIGlzIG9mXG4tXHRcdCAqIGEgZGlmZmVyZW50IHByaW9yaXR5LCBidXQgd2Ugd2FudCB0aGUgc2FtZSBiZWhhdmlvdXJcbi1cdFx0ICogc28gcmV0dXJuIC1FTk9TUEMgYW55d2F5LlxuLVx0XHQgKlxuLVx0XHQgKiBYWFg6IFRoZSBvbGQgQU1QRFUgY29kZSBkaWQgdGhpcywgYnV0IGlzIGl0IHJlYWxseVxuLVx0XHQgKiBuZWNlc3Nhcnk/XG4rXHRcdCAqIElFRUUgODAyLjExbiBzdGFuZGFyZCByZXF1aXJlcyB0aGF0IGFsbCBNUERVcyB3aXRoaW4gYW5cbitcdFx0ICogQS1NUERVIGJlbG9uZyB0byB0aGUgc2FtZSBUSUQgKFRyYWZmaWMgSWRlbnRpZmllcikuXG4rXHRcdCAqIFNpbmNlIHByaW9yaXR5IG1hcHMgdG8gVElELCBhIGRpZmZlcmVudCBwcmlvcml0eSBtZWFuc1xuK1x0XHQgKiB3ZSBtdXN0IGNsb3NlIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZSBhbmQgc3RhcnQgYSBuZXcgb25lLFxuK1x0XHQgKiBzbyB3ZSByZXR1cm4gLUVOT1NQQyBoZXJlLlxuIFx0XHQgKi9cbiBcdFx0Zmlyc3QgPSBza2JfcGVlayhcdTAwMjZzZXNzaW9uLVx1MDAzZXNrYl9saXN0KTtcbiBcdFx0aWYgKHAtXHUwMDNlcHJpb3JpdHkgIT0gZmlyc3QtXHUwMDNlcHJpb3JpdHkpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0NjoxOC4zMTU2NTI4NjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIwODg1MTc0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBicmNtZm1hYy9icmNtc21hYyBLZXJuZWwgUGF0Y2hlcyoqXG5cbk9rYXksIHNvIEkgaGF2ZSBhIHBhdGNoIHNlcmllcyBhcHBsaWVkIHRvIHRoZSBrZXJuZWwgdGFyZ2V0aW5nIHRoZSBgYnJjbWZtYWNgIGFuZCBgYnJjbXNtYWNgIGRyaXZlcnMgd2l0aGluIHRoZSBCcm9hZGNvbSA4MDIxMSB3aXJlbGVzcyBzdGFjay4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGVzZSBjaGFuZ2VzIGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbCBiZWhhdmlvciB0aGF0IG5lY2Vzc2l0YXRlcyBmdXp6aW5nLiBMZXQncyBicmVhayBpdCBkb3duOlxuXG5GaXJzdCwgZXhhbWluaW5nIHRoZSBjaGFuZ2VzIGluIGBicmNtZm1hYy9jZmc4MDIxMS5jYCwgSSBzZWUgYSBzaGlmdCBmcm9tIGBtZGVsYXlgL2Btc2xlZXBgIHRvIGB1c2xlZXBfcmFuZ2VgLCB3aGljaCBpcyBjb21tb24uIFRoZSBhZGRpdGlvbiBvZiBgYnJjbWZfcG1rc2FfdjJfb3BgIGFuZCBpdHMgaW50ZWdyYXRpb24gaW50byBQTUtTQSBvcGVyYXRpb25zIGlzIG5vdGV3b3J0aHksIGVzcGVjaWFsbHkgaWYgYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIGVuYWJsZWQuIFRoYXQgYWRkcyBhIG5ldyBjb2RlIHBhdGguIFRoaXMgYWxzbyB0b3VjaGVzIHRoZSBoZWFkZXIgaW4gYGNmZzgwMjExLmhgLlxuXG5JbiBgYnJjbWZtYWMvY29yZS5jYCwgdGhlIGhhbmRsaW5nIG9mIGBCUkNNRl9GRUFUX01PTklUT1JfRk1UX0hXX1JYX0hEUmAgdG8gaW5zZXJ0IGEgcmFkaW90YXAgaGVhZGVyIGlzIGEgc2lnbmlmaWNhbnQgYWRkaXRpb24sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIG1vbml0b3IgbW9kZS4gVGhpcyBpbnRyb2R1Y2VzIG5ldyBkYXRhIHByb2Nlc3NpbmcgYW5kIGNvbnRyb2wgZmxvdywgd2hpY2ggZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rLlxuXG5gYnJjbWZtYWMvZmxvd3JpbmcuY2AgaW50cm9kdWNlcyBhbiBhdG9taWMgY291bnRlciB0byB0cmFjayBibG9ja2VkIHJpbmdzLCB0aGF0IHNlZW1zIGxpa2UgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIHRob3VnaCBJJ2xsIHNlZSBob3cgaXQgY2FuIGJlIGF0dGFja2VkLlxuXG5UaGUgY2hhbmdlcyBpbiBgYnJjbWZtYWMvbXNnYnVmLmNgIGFyZSBpbnRlcmVzdGluZy4gSW5jcmVhc2luZyBgTlJfVFhfUEtUSURTYCBhbmQgYWx0ZXJpbmcgdGhlIGBtc2xlZXBgIGNhbGxzLCBhbG9uZyB3aXRoIHRoZSBtb2RpZmljYXRpb24gdG8gYGJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGFgLCBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gcGFja2V0IHRyYW5zbWlzc2lvbiBhbmQgYnVmZmVyIG1hbmFnZW1lbnQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS5cblxuVGhlIGBicmNtZm1hYy9wY2llLmNgIGNoYW5nZXMsIHBhcnRpY3VsYXJseSB0aGUgYHVzbGVlcF9yYW5nZWAgYmFja29mZiBpbiBgYnJjbWZfcGNpZV9zZW5kX21iX2RhdGFgIGFuZCB0aGUgc2xlZXAgY2hhbmdlcyBpbiBgYnJjbWZfcGNpZV9yZWxlYXNlX2lycWAsIHN1Z2dlc3RzIG9wdGltaXphdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmcuIFRoaXMgbWF5IGJlIG9mIGludGVyZXN0IGZvciBQQ0llLXNwZWNpZmljIGZ1enppbmcuIFRoZSBjaGFuZ2VzIHRvIGBzZGlvLmNgIGxvb2sgbGlrZSBhIGJhc2ljIGxvY2tpbmcgcmVvcmRlcmluZywgc28gcHJvYmFibHkgbm90aGluZyB0byB3b3JyeSBhYm91dC4gVGhlIGNoYW5nZSBpbiBgYW1wZHUuY2AgaXMgb25seSBhIGNvbW1lbnQuXG5cblRoZSBjcml0aWNhbCBxdWVzdGlvbiBub3cgaXMsIGFyZSB0aGVzZSBjaGFuZ2VzIGZ1enphYmxlIGluIGEgcHJhY3RpY2FsIGVudmlyb25tZW50PyBCcm9hZGNvbSBkcml2ZXJzIGFyZSB0eXBpY2FsbHkgdGllZCB0byBwaHlzaWNhbCBoYXJkd2FyZSAoUENJZSwgU0RJTywgVVNCKS4gQnV0IHdhaXQsIGBicmNtZm1hY2Agc3VwcG9ydHMgVVNCLiBDYW4gd2UgZW11bGF0ZSBhIFVTQiBkZXZpY2U/IFN5emthbGxlciBoYXMgYHN5el91c2JfY29ubmVjdGAhIFRoYXTigJlzIGEgZ2FtZSBjaGFuZ2VyLiBMZXQgbWUgY2hlY2sgaWYgYGJyY21mbWFjYCBoYXMgYSBVU0IgZHJpdmVyLi4uIFllcywgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuY2AuXG5cbk9rYXksIHRoZSBwYXRjaCB0b3VjaGVzIGBjZmc4MDIxMS5jYCwgYGNvcmUuY2AsIGBmbG93cmluZy5jYCwgYG1zZ2J1Zi5jYCwgYHBjaWUuY2AsIGFuZCBgc2Rpby5jYC4gYGNmZzgwMjExLmNgLCBgY29yZS5jYCwgYGZsb3dyaW5nLmNgLCBhbmQgYG1zZ2J1Zi5jYCBhcmUgY29yZSBwYXJ0cyBvZiBgYnJjbWZtYWNgIGFuZCAqY291bGQqIGJlIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiwgU0RJTywgb3IgUENJZS4gSW4gcGFydGljdWxhciwgYG1zZ2J1Zi5jYCBpcyB1c2VkIGJ5IFBDSWUuIEFuZCBgZmxvd3JpbmcuY2AgaXMgdXNlZCBieSBQQ0llIGFuZCBwb3NzaWJseSBvdGhlcnMuIFRpbWUgdG8gY2hlY2sgaG93IHRoZSBgYnJjbWZtYWNgIFVTQiBkcml2ZXIgaW50ZXJhY3RzIHdpdGggYGZsb3dyaW5nYCBhbmQgYG1zZ2J1ZmAgLSB0aGF0IGNvdWxkIGJlIHRoZSBrZXkgdG8gdHJpZ2dlcmluZyB0aGVzZSBjaGFuZ2VzIHRocm91Z2ggYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MDYsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDY6MzAuNTI0NTA3NjExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDQ3MDAyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9mbG93cmluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTI3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjI4OnN0YXRpYyBjb25zdCB1OCBicmNtZl9mbG93cmluZ19wcmlvMmZpZm9bXSA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yOS1cXHQwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM9NDI9c3RhdGljIGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo0MzpicmNtZl9mbG93cmluZ19pc190ZGxzX21hYyhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHU4IG1hY1tFVEhfQUxFTl0pXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNDQte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjQ1OlxcdHN0cnVjdCBicmNtZl9mbG93cmluZ190ZGxzX2VudHJ5ICpzZWFyY2g7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNDYtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy01OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo1OTp1MzIgYnJjbWZfZmxvd3JpbmdfbG9va3VwKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTggZGFbRVRIX0FMRU5dLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTYwLVxcdFxcdFxcdCAgdTggcHJpbywgdTggaWZpZHgpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNjEte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjYyOlxcdHN0cnVjdCBicmNtZl9mbG93cmluZ19oYXNoICpoYXNoO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTYzLVxcdHUxNiBoYXNoX2lkeDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTY5LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjcwOlxcdGZpZm8gPSBicmNtZl9mbG93cmluZ19wcmlvMmZpZm9bcHJpb107XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNzEtXFx0c3RhID0gKGZsb3ctXFx1MDAzZWFkZHJfbW9kZVtpZmlkeF0gPT0gQUREUl9JTkRJUkVDVCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy03Ny1cXHRpZiAoKHN0YSkgXFx1MDAyNlxcdTAwMjYgKGZsb3ctXFx1MDAzZXRkbHNfYWN0aXZlKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjc4OlxcdCAgICAoYnJjbWZfZmxvd3JpbmdfaXNfdGRsc19tYWMoZmxvdywgZGEpKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTc5LVxcdFxcdHN0YSA9IGZhbHNlO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTAyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjEwMzp1MzIgYnJjbWZfZmxvd3JpbmdfY3JlYXRlKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTggZGFbRVRIX0FMRU5dLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTEwNC1cXHRcXHRcXHQgIHU4IHByaW8sIHU4IGlmaWR4KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTEwNS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MTA2OlxcdHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nICpyaW5nO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjEwNzpcXHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfaGFzaCAqaGFzaDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0xMDgtXFx0dTE2IGhhc2hfaWR4O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTE0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjExNTpcXHRmaWZvID0gYnJjbWZfZmxvd3JpbmdfcHJpbzJmaWZvW3ByaW9dO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTExNi1cXHRzdGEgPSAoZmxvdy1cXHUwMDNlYWRkcl9tb2RlW2lmaWR4XSA9PSBBRERSX0lORElSRUNUKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTEyMi1cXHRpZiAoKHN0YSkgXFx1MDAyNlxcdTAwMjYgKGZsb3ctXFx1MDAzZXRkbHNfYWN0aXZlKSBcXHUwMDI2XFx1MDAyNlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjEyMzpcXHQgICAgKGJyY21mX2Zsb3dyaW5nX2lzX3RkbHNfbWFjKGZsb3csIGRhKSkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0xMjQtXFx0XFx0c3RhID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0xNjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MTY4OnU4IGJyY21mX2Zsb3dyaW5nX3RpZChzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTY5LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoxNzA6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTcxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTc3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjE3ODpzdGF0aWMgdm9pZCBicmNtZl9mbG93cmluZ19ibG9jayhzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTc5LVxcdFxcdFxcdFxcdCBib29sIGJsb2NrZWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTgwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoxODE6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMTgyLVxcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTE5NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoxOTY6XFx0aWZpZHggPSBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoZmxvdywgZmxvd2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0xOTctXFx0cmluZy1cXHUwMDNlYmxvY2tlZCA9IGJsb2NrZWQ7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yMzItXFx0ICogUmVhZGluZyB0aGUgYXRvbWljIGlzIHNhZmUgaGVyZTogd2UgaG9sZCBibG9ja19sb2NrLCBzbyBub1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjIzMzpcXHQgKiBjb25jdXJyZW50IGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FsbCBjYW4gcmFjZSB0aGUgdXBkYXRlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjM0LVxcdCAqIHdlIGp1c3QgbWFkZSBhYm92ZS5cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTI1NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoyNTY6dm9pZCBicmNtZl9mbG93cmluZ19kZWxldGUoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTI1Ny17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjU4LVxcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZiA9IGRldl9nZXRfZHJ2ZGF0YShmbG93LVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjI1OTpcXHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfcmluZyAqcmluZztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yNjAtXFx0c3RydWN0IGJyY21mX2lmICppZnA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yNjgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MjY5OlxcdGlmaWR4ID0gYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGZsb3dpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjcwLVxcdGlmcCA9IGJyY21mX2dldF9pZnAoYnVzX2lmLVxcdTAwM2VkcnZyLCBpZmlkeCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjcxLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjI3MjpcXHRicmNtZl9mbG93cmluZ19ibG9jayhmbG93LCBmbG93aWQsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0yNzMtXFx0aGFzaF9pZHggPSByaW5nLVxcdTAwM2VoYXNoX2lkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjg3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjI4ODp1MzIgYnJjbWZfZmxvd3JpbmdfZW5xdWV1ZShzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjg5LVxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjkwLXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzoyOTE6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjkyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMjk4LVxcdCAgICAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2cmluZy1cXHUwMDNlc2tibGlzdCkgXFx1MDAzZSBCUkNNRl9GTE9XUklOR19ISUdIKSkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjI5OTpcXHRcXHRicmNtZl9mbG93cmluZ19ibG9jayhmbG93LCBmbG93aWQsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTMwMC1cXHRcXHRicmNtZl9kYmcoTVNHQlVGLCBcXFwiRmxvd2NvbnRyb2w6IEJMT0NLIGZvciByaW5nICVkXFxcXG5cXFwiLCBmbG93aWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzA3LVxcdFxcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZyaW5nLVxcdTAwM2Vza2JsaXN0KSBcXHUwMDNjIEJSQ01GX0ZMT1dSSU5HX0xPVylcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzozMDg6XFx0XFx0XFx0YnJjbWZfZmxvd3JpbmdfYmxvY2soZmxvdywgZmxvd2lkLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzA5LVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTMxMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzozMTQ6c3RydWN0IHNrX2J1ZmYgKmJyY21mX2Zsb3dyaW5nX2RlcXVldWUoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTMxNS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MzE2OlxcdHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nICpyaW5nO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTMxNy1cXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzI2LVxcdCAgICAoc2tiX3F1ZXVlX2xlbihcXHUwMDI2cmluZy1cXHUwMDNlc2tibGlzdCkgXFx1MDAzYyBCUkNNRl9GTE9XUklOR19MT1cpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MzI3OlxcdFxcdGJyY21mX2Zsb3dyaW5nX2Jsb2NrKGZsb3csIGZsb3dpZCwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTMyOC1cXHRcXHRicmNtZl9kYmcoTVNHQlVGLCBcXFwiRmxvd2NvbnRyb2w6IE9QRU4gZm9yIHJpbmcgJWRcXFxcblxcXCIsIGZsb3dpZCk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0zMzQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MzM1OnZvaWQgYnJjbWZfZmxvd3JpbmdfcmVpbnNlcnQoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTMzNi1cXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzM3LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzozMzg6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzM5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzQ1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjM0Njp1MzIgYnJjbWZfZmxvd3JpbmdfcWxlbihzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzQ3LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzozNDg6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzQ5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzYwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjM2MTp2b2lkIGJyY21mX2Zsb3dyaW5nX29wZW4oc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTM2Mi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6MzYzOlxcdHN0cnVjdCBicmNtZl9mbG93cmluZ19yaW5nICpyaW5nO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTM2NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTM3NC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzozNzU6dTggYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0zNzYte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjM3NzpcXHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfcmluZyAqcmluZztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy0zNzgtXFx0dTE2IGhhc2hfaWR4O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzg2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjM4NzpzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmJyY21mX2Zsb3dyaW5nX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUxNiBucm9mcmluZ3MpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtMzg4LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzozODk6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTM5MC1cXHR1MzIgaTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTQwOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo0MDk6dm9pZCBicmNtZl9mbG93cmluZ19kZXRhY2goc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTQxMC17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy00MTItXFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGJ1c19pZi1cXHUwMDNlZHJ2cjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo0MTM6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKnNlYXJjaDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo0MTQ6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKnJlbW92ZTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy00MTUtXFx0dTE2IGZsb3dpZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTQzMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo0MzI6dm9pZCBicmNtZl9mbG93cmluZ19jb25maWd1cmVfYWRkcl9tb2RlKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgaW50IGlmaWR4LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jLTQzMy1cXHRcXHRcXHRcXHRcXHRlbnVtIHByb3RvX2FkZHJfbW9kZSBhZGRyX21vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy00NTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6NDU0OnZvaWQgYnJjbWZfZmxvd3JpbmdfZGVsZXRlX3BlZXIoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCBpbnQgaWZpZHgsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNDU1LVxcdFxcdFxcdFxcdHU4IHBlZXJbRVRIX0FMRU5dKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmMtNDU4LVxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBidXNfaWYtXFx1MDAzZWRydnI7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6NDU5OlxcdHN0cnVjdCBicmNtZl9mbG93cmluZ19oYXNoICpoYXNoO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjQ2MDpcXHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfdGRsc19lbnRyeSAqcHJldjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo0NjE6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKnNlYXJjaDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy00NjItXFx0dTMyIGk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy01MDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmM6NTAxOnZvaWQgYnJjbWZfZmxvd3JpbmdfYWRkX3RkbHNfcGVlcihzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIGludCBpZmlkeCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy01MDItXFx0XFx0XFx0XFx0ICB1OCBwZWVyW0VUSF9BTEVOXSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy01MDMte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jOjUwNDpcXHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfdGRsc19lbnRyeSAqdGRsc19lbnRyeTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYzo1MDU6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKnNlYXJjaDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYy01MDYtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC0xNC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDoxNTpzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfaGFzaCB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtMTYtXFx0dTggbWFjW0VUSF9BTEVOXTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oPTIyPWVudW0gcmluZ19zdGF0dXMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtMjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6Mjg6c3RydWN0IGJyY21mX2Zsb3dyaW5nX3Jpbmcge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTI5LVxcdHUxNiBoYXNoX2lkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6NDU6c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTQ2LVxcdHU4IG1hY1tFVEhfQUxFTl07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6NDc6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKm5leHQ7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNDgtfTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC00OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo1MDpzdHJ1Y3QgYnJjbWZfZmxvd3Jpbmcge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTUxLVxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo1MjpcXHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmdfaGFzaCBoYXNoW0JSQ01GX0ZMT1dSSU5HX0hBU0hTSVpFXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC01My1cXHRzcGlubG9ja190IGJsb2NrX2xvY2s7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC01NS1cXHQvKiBQZXItaW50ZXJmYWNlIGNvdW50IG9mIGN1cnJlbnRseSBibG9ja2VkIG9wZW4gcmluZ3MuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6NTY6XFx0ICogTWFpbnRhaW5lZCBhdG9taWNhbGx5IHNvIGJyY21mX2Zsb3dyaW5nX2Jsb2NrKCkgY2FuIGNoZWNrXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNTctXFx0ICogd2hldGhlciBhbnkgc2libGluZyByaW5nIGlzIGFscmVhZHkgYmxvY2tlZCBpbiBPKDEpIHdpdGhvdXRcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTYyLVxcdGJvb2wgdGRsc19hY3RpdmU7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6NjM6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3RkbHNfZW50cnkgKnRkbHNfZW50cnk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6NjQ6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgKnJpbmdzW10gX19jb3VudGVkX2J5KG5yb2ZyaW5ncyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNjUtfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTY3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjY4OnUzMiBicmNtZl9mbG93cmluZ19sb29rdXAoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1OCBkYVtFVEhfQUxFTl0sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmgtNjktXFx0XFx0XFx0ICB1OCBwcmlvLCB1OCBpZmlkeCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6NzA6dTMyIGJyY21mX2Zsb3dyaW5nX2NyZWF0ZShzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHU4IGRhW0VUSF9BTEVOXSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC03MS1cXHRcXHRcXHQgIHU4IHByaW8sIHU4IGlmaWR4KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo3Mjp2b2lkIGJyY21mX2Zsb3dyaW5nX2RlbGV0ZShzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjczOnZvaWQgYnJjbWZfZmxvd3Jpbmdfb3BlbihzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjc0OnU4IGJyY21mX2Zsb3dyaW5nX3RpZChzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjc1OnUzMiBicmNtZl9mbG93cmluZ19lbnF1ZXVlKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgdTE2IGZsb3dpZCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC03Ni1cXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo3NzpzdHJ1Y3Qgc2tfYnVmZiAqYnJjbWZfZmxvd3JpbmdfZGVxdWV1ZShzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIHUxNiBmbG93aWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjc4OnZvaWQgYnJjbWZfZmxvd3JpbmdfcmVpbnNlcnQoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTc5LVxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6ODA6dTMyIGJyY21mX2Zsb3dyaW5nX3FsZW4oc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo4MTp1OCBicmNtZl9mbG93cmluZ19pZmlkeF9nZXQoc3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93LCB1MTYgZmxvd2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaDo4MjpzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmJyY21mX2Zsb3dyaW5nX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUxNiBucm9mcmluZ3MpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oOjgzOnZvaWQgYnJjbWZfZmxvd3JpbmdfZGV0YWNoKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6ODQ6dm9pZCBicmNtZl9mbG93cmluZ19jb25maWd1cmVfYWRkcl9tb2RlKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgaW50IGlmaWR4LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTg1LVxcdFxcdFxcdFxcdFxcdGVudW0gcHJvdG9fYWRkcl9tb2RlIGFkZHJfbW9kZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6ODY6dm9pZCBicmNtZl9mbG93cmluZ19kZWxldGVfcGVlcihzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3csIGludCBpZmlkeCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuaC04Ny1cXHRcXHRcXHRcXHR1OCBwZWVyW0VUSF9BTEVOXSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2Zsb3dyaW5nLmg6ODg6dm9pZCBicmNtZl9mbG93cmluZ19hZGRfdGRsc19wZWVyKHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdywgaW50IGlmaWR4LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5oLTg5LVxcdFxcdFxcdFxcdCAgdTggcGVlcltFVEhfQUxFTl0pO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTI2Mj1zdHJ1Y3QgYnJjbWZfbXNnYnVmIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0yOTgtXFx0c3RydWN0IGJyY21mX21zZ2J1Zl9wa3RpZHMgKnJ4X3BrdGlkcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6Mjk5OlxcdHN0cnVjdCBicmNtZl9mbG93cmluZyAqZmxvdztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMzAwLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTU4MT1icmNtZl9tc2didWZfcmVtb3ZlX2Zsb3dyaW5nKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZiwgdTE2IGZsb3dpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy01OTItXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjU5MzpcXHRicmNtZl9mbG93cmluZ19kZWxldGUobXNnYnVmLVxcdTAwM2VmbG93LCBmbG93aWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy01OTQtfVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTYxNj1icmNtZl9tc2didWZfZmxvd3JpbmdfY3JlYXRlX3dvcmtlcihzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNjM1LVxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJkbWFfYWxsb2NfY29oZXJlbnQgZmFpbGVkXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6NjM2OlxcdFxcdGJyY21mX2Zsb3dyaW5nX2RlbGV0ZShtc2didWYtXFx1MDAzZWZsb3csIGZsb3dpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTYzNy1cXHRcXHRyZXR1cm4gQlJDTUZfRkxPV1JJTkdfSU5WQUxJRF9JRDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy02NTctXFx0Y3JlYXRlLVxcdTAwM2Vtc2cucmVxdWVzdF9pZCA9IDA7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjY1ODpcXHRjcmVhdGUtXFx1MDAzZXRpZCA9IGJyY21mX2Zsb3dyaW5nX3RpZChtc2didWYtXFx1MDAzZWZsb3csIGZsb3dpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTY1OS1cXHRjcmVhdGUtXFx1MDAzZWZsb3dfcmluZ19pZCA9IGNwdV90b19sZTE2KGZsb3dpZCArXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9Njk4PXN0YXRpYyB1MzIgYnJjbWZfbXNnYnVmX2Zsb3dyaW5nX2NyZWF0ZShzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIGludCBpZmlkeCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy03MDktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjcxMDpcXHRmbG93aWQgPSBicmNtZl9mbG93cmluZ19jcmVhdGUobXNnYnVmLVxcdTAwM2VmbG93LCBlaC1cXHUwMDNlaF9kZXN0LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy03MTEtXFx0XFx0XFx0XFx0ICAgICAgIHNrYi1cXHUwMDNlcHJpb3JpdHksIGlmaWR4KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz03MzE9c3RhdGljIHZvaWQgYnJjbWZfbXNnYnVmX3R4ZmxvdyhzdHJ1Y3QgYnJjbWZfbXNnYnVmICptc2didWYsIHUxNiBmbG93aWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTczMi17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjczMzpcXHRzdHJ1Y3QgYnJjbWZfZmxvd3JpbmcgKmZsb3cgPSBtc2didWYtXFx1MDAzZWZsb3c7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTczNC1cXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gbXNnYnVmLVxcdTAwM2VkcnZyO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTc1MC1cXHRjb3VudCA9IEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQyIC0gQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDE7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjc1MTpcXHR3aGlsZSAoYnJjbWZfZmxvd3JpbmdfcWxlbihmbG93LCBmbG93aWQpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjc1MjpcXHRcXHRza2IgPSBicmNtZl9mbG93cmluZ19kZXF1ZXVlKGZsb3csIGZsb3dpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTc1My1cXHRcXHRpZiAoc2tiID09IE5VTEwpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNzU0LVxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJObyBTS0IsIGJ1dCBxbGVuICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo3NTU6XFx0XFx0XFx0XFx0IGJyY21mX2Zsb3dyaW5nX3FsZW4oZmxvdywgZmxvd2lkKSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTc1Ni1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy03NjEtXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cGh5c2FkZHIsIFxcdTAwMjZwa3RpZCkpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6NzYyOlxcdFxcdFxcdGJyY21mX2Zsb3dyaW5nX3JlaW5zZXJ0KGZsb3csIGZsb3dpZCwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNzYzLVxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJObyBQS1RJRCBhdmFpbGFibGUgISFcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTc2OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgbXNnYnVmLVxcdTAwM2V0eF9wa3RpZHMsIHBrdGlkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6NzcwOlxcdFxcdFxcdGJyY21mX2Zsb3dyaW5nX3JlaW5zZXJ0KGZsb3csIGZsb3dpZCwgc2tiKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtNzcxLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTc3OC1cXHRcXHR0eF9tc2doZHItXFx1MDAzZW1zZy5yZXF1ZXN0X2lkID0gY3B1X3RvX2xlMzIocGt0aWQgKyAxKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6Nzc5OlxcdFxcdHR4X21zZ2hkci1cXHUwMDNlbXNnLmlmaWR4ID0gYnJjbWZfZmxvd3JpbmdfaWZpZHhfZ2V0KGZsb3csIGZsb3dpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTc4MC1cXHRcXHR0eF9tc2doZHItXFx1MDAzZWZsYWdzID0gQlJDTUZfTVNHQlVGX1BLVF9GTEFHU19GUkFNRV84MDJfMztcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz04NTM9c3RhdGljIGludCBicmNtZl9tc2didWZfdHhfcXVldWVfZGF0YShzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBpbnQgaWZpZHgsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtODU2LVxcdHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZiA9IChzdHJ1Y3QgYnJjbWZfbXNnYnVmICopZHJ2ci1cXHUwMDNlcHJvdG8tXFx1MDAzZXBkO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo4NTc6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93ID0gbXNnYnVmLVxcdTAwM2VmbG93O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy04NTgtXFx0c3RydWN0IGV0aGhkciAqZWggPSAoc3RydWN0IGV0aGhkciAqKShza2ItXFx1MDAzZWRhdGEpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTg2Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6ODYzOlxcdGZsb3dpZCA9IGJyY21mX2Zsb3dyaW5nX2xvb2t1cChmbG93LCBlaC1cXHUwMDNlaF9kZXN0LCBza2ItXFx1MDAzZXByaW9yaXR5LCBpZmlkeCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTg2NC1cXHRpZiAoZmxvd2lkID09IEJSQ01GX0ZMT1dSSU5HX0lOVkFMSURfSUQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy04NjgtXFx0XFx0fSBlbHNlIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6ODY5OlxcdFxcdFxcdGJyY21mX2Zsb3dyaW5nX2VucXVldWUoZmxvdywgZmxvd2lkLCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy04NzAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtODcyLVxcdH1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6ODczOlxcdHF1ZXVlX2NvdW50ID0gYnJjbWZfZmxvd3JpbmdfZW5xdWV1ZShmbG93LCBmbG93aWQsIHNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTg3NC1cXHRmb3JjZSA9ICgocXVldWVfY291bnQgJSBCUkNNRl9NU0dCVUZfVFJJQ0tMRV9UWFdPUktFUl9USFJTKSA9PSAwKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz04ODI9YnJjbWZfbXNnYnVmX2NvbmZpZ3VyZV9hZGRyX21vZGUoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgaW50IGlmaWR4LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTg4Ni1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6ODg3OlxcdGJyY21mX2Zsb3dyaW5nX2NvbmZpZ3VyZV9hZGRyX21vZGUobXNnYnVmLVxcdTAwM2VmbG93LCBpZmlkeCwgYWRkcl9tb2RlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtODg4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz04OTI9YnJjbWZfbXNnYnVmX2RlbGV0ZV9wZWVyKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsIGludCBpZmlkeCwgdTggcGVlcltFVEhfQUxFTl0pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtODk1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo4OTY6XFx0YnJjbWZfZmxvd3JpbmdfZGVsZXRlX3BlZXIobXNnYnVmLVxcdTAwM2VmbG93LCBpZmlkeCwgcGVlcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTg5Ny19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9OTAxPWJyY21mX21zZ2J1Zl9hZGRfdGRsc19wZWVyKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsIGludCBpZmlkeCwgdTggcGVlcltFVEhfQUxFTl0pXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtOTA0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYzo5MDU6XFx0YnJjbWZfZmxvd3JpbmdfYWRkX3RkbHNfcGVlcihtc2didWYtXFx1MDAzZWZsb3csIGlmaWR4LCBwZWVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtOTA2LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xMjg2PWJyY21mX21zZ2J1Zl9wcm9jZXNzX2Zsb3dfcmluZ19jcmVhdGVfcmVzcG9uc2Uoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEzMDctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEzMDg6XFx0YnJjbWZfZmxvd3Jpbmdfb3Blbihtc2didWYtXFx1MDAzZWZsb3csIGZsb3dpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTEzMDktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTMxNT1icmNtZl9tc2didWZfcHJvY2Vzc19mbG93X3JpbmdfZGVsZXRlX3Jlc3BvbnNlKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMzMwLVxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJGbG93cmluZyBkZWxldGlvbiBmYWlsZWQsIGNvZGUgJWRcXFxcblxcXCIsIHN0YXR1cyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjEzMzE6XFx0XFx0YnJjbWZfZmxvd3JpbmdfZGVsZXRlKG1zZ2J1Zi1cXHUwMDNlZmxvdywgZmxvd2lkKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTMzMi1cXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTQyMj1pbnQgYnJjbWZfcHJvdG9fbXNnYnVmX3J4X3RyaWdnZXIoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE0NDItXFx0XFx0Y29tbW9ucmluZyA9IG1zZ2J1Zi1cXHUwMDNlZmxvd3JpbmdzW2Zsb3dpZF07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE0NDM6XFx0XFx0cWxlbiA9IGJyY21mX2Zsb3dyaW5nX3FsZW4obXNnYnVmLVxcdTAwM2VmbG93LCBmbG93aWQpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNDQ0LVxcdFxcdGlmICgocWxlbiBcXHUwMDNlIEJSQ01GX01TR0JVRl9UUklDS0xFX1RYV09SS0VSX1RIUlMpIHx8XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTQ1ND12b2lkIGJyY21mX21zZ2J1Zl9kZWxldGVfZmxvd3Jpbmcoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgdTE2IGZsb3dpZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNDU5LVxcdHN0cnVjdCBicmNtZl9jb21tb25yaW5nICpjb21tb25yaW5nX2RlbCA9IG1zZ2J1Zi1cXHUwMDNlZmxvd3JpbmdzW2Zsb3dpZF07XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE0NjA6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nICpmbG93ID0gbXNnYnVmLVxcdTAwM2VmbG93O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNDYxLVxcdHZvaWQgKnJldF9wdHI7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTQ5OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTUwMDpcXHRpZmlkeCA9IGJyY21mX2Zsb3dyaW5nX2lmaWR4X2dldChtc2didWYtXFx1MDAzZWZsb3csIGZsb3dpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE1MDEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTUyMj1zdGF0aWMgaW50IGJyY21mX21zZ2J1Zl9zdGF0c19yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE1MjgtXFx0dTE2IGk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE1Mjk6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX3JpbmcgKnJpbmc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE1MzA6XFx0c3RydWN0IGJyY21mX2Zsb3dyaW5nX2hhc2ggKmhhc2g7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE1MzEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM9MTU4MD1pbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE2NjMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE2NjQ6XFx0bXNnYnVmLVxcdTAwM2VmbG93ID0gYnJjbWZfZmxvd3JpbmdfYXR0YWNoKGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNjY1LVxcdFxcdFxcdFxcdFxcdCAgICAgaWZfbXNnYnVmLVxcdTAwM2VtYXhfZmxvd3JpbmdzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYz0xNzEwPXZvaWQgYnJjbWZfcHJvdG9fbXNnYnVmX2RldGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE3MzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jOjE3MzE6XFx0XFx0YnJjbWZfZmxvd3JpbmdfZGV0YWNoKG1zZ2J1Zi1cXHUwMDNlZmxvdyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jLTE3MzItXFx0XFx0ZG1hX2ZyZWVfY29oZXJlbnQoZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2VkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ2OjMwLjc0ODk4MjkwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzgyOTY1MzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgYG1zZ2J1Zi5jYCBVc2FnZSoqXG5cbk9rYXksIHNvIGBtc2didWYuY2AgaXMgZGVmaW5pdGVseSB0aWVkIHRvIHRoZSBQQ0llIGRyaXZlciwgdGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIGNvbnRleHQsIEkgbmVlZCB0byBzZWUgKmhvdyogaXQncyBiZWluZyB1c2VkIHdpdGhpbiB0aGF0IGRyaXZlciBmYW1pbHkuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgYnJjbWZtYWNgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGRyaWxsIGRvd24gaW50byBgZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuY2Ag4oCTIHRoYXQncyBhIG5hdHVyYWwgY2FuZGlkYXRlIGdpdmVuIHRoZSBpbml0aWFsIGhpbnQuIEknbGwgYWxzbyBnbGFuY2UgYXQgYHVzYi5jYCB3aGlsZSBJJ20gYXQgaXQsIGp1c3QgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGNyb3NzLXBvbGxpbmF0aW9uIG9yIG92ZXJsYXAgaW4gaG93IHRoZXNlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlcnMgYXJlIHN0cnVjdHVyZWQuIEl0J3Mgbm90IHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIGEgY29ubmVjdGlvbiwgYnV0IGl0J3Mgd29ydGggYSBxdWljayBsb29rIHRvIHJ1bGUgaXQgb3V0IOKAkyBJIHNob3VsZCBoYXZlIGEgY2xlYXIgYW5zd2VyIG9uIHdoZXRoZXIgYHVzYi5jYCBpbnRlcmFjdHMgd2l0aCBgbXNnYnVmLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE5OSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ3OjM0LjUzMTk1MTE3OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Nzk1NjE3NjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1zZ2J1ZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ3OjM1LjExMTUyMjY0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzODA5ODk4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCdzIFdvcnRoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gdGhpcyBwYXRjaCB0b3VjaGVzIGBtc2didWYuY2AgYW5kIGBmbG93cmluZy5jYC4gVGhvc2UgZmlsZXMgc2NyZWFtIFwiUENJZVwiIHRvIG1lLCByaWdodD8gQnV0IHRoZW4gSSByZW1lbWJlciBgYnJjbWZtYWNgLiBOb3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIGxpa2UgYG1seHN3YCwgYHFlZGAsIGBhbWRncHVgLCBldGMuIOKAkyBkcml2ZXJzIHRoYXQgKm5lZWQqIGFjdHVhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gSXMgYGJyY21mbWFjYCBvbmUgb2YgdGhvc2U/XG5cbkhhbmcgb24gYSBzZWNvbmTigKYgaXNuJ3QgYGJyY21mbWFjYCBhIFdpLUZpIGRyaXZlcj8gWWVhaCwgaXQgaXMuIEFuZCBTeXprYWxsZXIgaGFzIGBtYWM4MDIxMV9od3NpbWAgZm9yIFdpLUZpLiBCdXQgYGJyY21mbWFjYCBpcyBhIEZ1bGxNQUMgZHJpdmVyLCB3aGljaCBjb21wbGljYXRlcyB0aGluZ3MgYSBiaXQuIERvZXMgU3l6a2FsbGVyIGZ1enogKnRoaXMqIHNwZWNpZmljIGRyaXZlcj8gSSdtIG5vdCBlbnRpcmVseSBzdXJlLlxuXG5UaGVuIEkgcmVtZW1iZXIgU3l6a2FsbGVyJ3MgVVNCIGZ1enppbmcgY2FwYWJpbGl0aWVzLCB3aGljaCAqY291bGQqIHBvdGVudGlhbGx5IGNvdmVyIHRoZSBVU0Igc2lkZSBvZiBgYnJjbWZtYWNgLiBUaGF0IHNhaWQsIHRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgZmxvd3JpbmcuY2AgYW5kIGBtc2didWYuY2Ag4oCTIHdoaWNoIGFyZSBwcmV0dHkgbXVjaCBQQ0llIHNwZWNpZmljIOKAkyB0aHJvd3MgYSB3cmVuY2ggaW4gdGhlIHdvcmtzLlxuXG5XYWl04oCmIGRvZXMgYHNkaW8uY2AgdXRpbGl6ZSBgbXNnYnVmLmNgPyBUaGF0IHdvdWxkIGNoYW5nZSB0aGluZ3MgaWYgdGhpcyBpcyB1c2VkIGJ5IFNESU8gYXMgd2VsbC4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIGFjdHVhbGx5IGNoZWNrIHRoZSBjcm9zcy1yZWZlcmVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODU0NiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Nzo0MC40OTI1MTUzMDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMzE3MDA4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtc2didWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDc6NDAuNjQ0ODQxMjUxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MDQ1NzU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBEcml2ZXIgRnVuY3Rpb25zIHZpYSBVU0IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGV5ZSBnb2VzIHRvIHRoZSBkcml2ZXIgbGFuZHNjYXBlLiBJIHNlZSBjaGFuZ2VzIGluIGBtc2didWYuY2AgYW5kIGBmbG93cmluZy5jYCwgd2hpY2ggSSBrbm93IGFyZSBwcmV0dHkgbXVjaCBQQ0llLXNwZWNpZmljLiBCdXQgdGhlbiB0aGVyZSdzIGBjZmc4MDIxMS5jYCwgYW5kIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBUaGF0IG9uZSdzIHNoYXJlZCBhY3Jvc3MgbXVsdGlwbGUgaW50ZXJmYWNlcyDigJMgVVNCLCBTRElPLCBhbmQgUENJZSwgbWFraW5nIGl0IGEgcG90ZW50aWFsIHRhcmdldC4gVGhpcyBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYGJyY21mX3Bta3NhX3YyX29wYCBpbiBgY2ZnODAyMTEuY2AsIHdoaWNoIGlzIGNvbmNlcm5pbmcgYXMgaXQgaXMgYSBjZW50cmFsIGZ1bmN0aW9uLiBJdCBhbHNvIHRvdWNoZXMgYGJyY21mX25ldGlmX21vbl9yeGAgaW4gYGNvcmUuY2AgYW5kIGBicmNtZl9zZGlvX3J4Z2xvbWAgaW4gYHNkaW8uY2AuXG5cbk5vdywgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhlc2UgU0RJTyBkcml2ZXJzIGVmZmVjdGl2ZWx5PyBJIGtub3cgaXQgZG9lc24ndCBoYXZlIGEgZGVkaWNhdGVkIGdlbmVyaWMgU0RJTyBmdXp6ZXIuIFRoYXQgc2FpZCwgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlmIHRoZXJlJ3MgYSBwb3NzaWJsZSBwYXRoLiBIYW5nIG9uLCB0aGUgcHJvbXB0IHNheXMgdGhlIGNvZGUgcGF0aHMgc2hvdWxkIGJlIGFjY2Vzc2libGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhhdCdzIGEgZ29vZCBmaWx0ZXIuIEl0IGV4cGxpY2l0bHkgbWVudGlvbnMgdGhlIGRpZmZpY3VsdHkgaW4gcmVhY2hpbmcgY29kZSBwYXRocyB0aGF0IHJlbHkgb24gdmVyeSBzcGVjaWZpYywgZW11bGF0ZWQgaGFyZHdhcmUgbGlrZSBVU0IgZ2FkZ2V0IG9yIG1hYzgwMjExX2h3c2ltLlxuXG5TbywgdGhlIG5leHQgb2J2aW91cyBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgaWYgYGJyY21mbWFjYCBpcyBldmVuIHJlYWNoYWJsZSB2aWEgVVNCLiBMdWNraWx5LCBJIGtub3cgdGhlcmUncyBhIFVTQiBkcml2ZXIgZm9yIGl0LCBzbyB0aGVyZSdzIGEgZ29vZCBjaGFuY2UuIExldCdzIGRpZyBkZWVwZXIuIFRoZSByZWFsIHRlc3QgaXMgd2hldGhlciB0aGUgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkLCBgYnJjbWZfcG1rc2FfdjJfb3BgIGFuZCBgYnJjbWZfbmV0aWZfbW9uX3J4YCwgYXJlIGluZGVlZCByZWFjaGFibGUgdmlhIFVTQi5cblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBJIHJlY2FsbCB0aGF0IGBicmNtZl9uZXRpZl9tb25fcnhgIGlzIGNhbGxlZCBmcm9tIGBicmNtZl9yeF9mcmFtZWAgaW4gYGNvcmUuY2AuIFRoZSBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgYGJyY21mX3J4X2ZyYW1lYCBpcyBjYWxsZWQgYnkgdGhlIFVTQiBkcml2ZXIuIElmIHNvLCB0aGF0J3MgbXkgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcgdGhlc2UgY3J1Y2lhbCBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MTk1LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ3OjQ2LjYyNTMwNDg4NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNDgyNjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX3J4X2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTI3OT1zdGF0aWMgaW5saW5lIHZvaWQgYnJjbWZfYnVzX3JlbW92ZShzdHJ1Y3QgYnJjbWZfYnVzICpidXMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMjkzLS8qIFJlY2VpdmUgZnJhbWUgZm9yIGRlbGl2ZXJ5IHRvIE9TLiAgQ2FsbGVlIGRpc3Bvc2VzIG9mIHJ4cC4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6Mjk0OnZvaWQgYnJjbWZfcnhfZnJhbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqcnhwLCBib29sIGhhbmRsZV9ldmVudCxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMjk1LVxcdFxcdCAgICBib29sIGluaXJxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM9NDk3PXN0YXRpYyBpbnQgYnJjbWZfcnhfaGRycHVsbChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy01MTUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzo1MTY6dm9pZCBicmNtZl9yeF9mcmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgaGFuZGxlX2V2ZW50LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtNTE3LVxcdFxcdCAgICBib29sIGluaXJxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYz0xNTE0PXN0YXRpYyB1OCBicmNtZl9zZGlvX3J4Z2xvbShzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzLCB1OCByeHNlcSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtMTczMS1cXHRcXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYzoxNzMyOlxcdFxcdFxcdFxcdGJyY21mX3J4X2ZyYW1lKGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZGV2LCBwZmlyc3QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy0xNzMzLVxcdFxcdFxcdFxcdFxcdCAgICAgICBmYWxzZSwgZmFsc2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYz0xODcwPXN0YXRpYyB1aW50IGJyY21mX3NkaW9fcmVhZGZyYW1lcyhzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzLCB1aW50IG1heGZyYW1lcylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMtMjA2NS1cXHRcXHRlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYzoyMDY2OlxcdFxcdFxcdGJyY21mX3J4X2ZyYW1lKGJ1cy1cXHUwMDNlc2Rpb2Rldi1cXHUwMDNlZGV2LCBwa3QsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy0yMDY3LVxcdFxcdFxcdFxcdCAgICAgICBmYWxzZSwgZmFsc2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTUwNz1zdGF0aWMgdm9pZCBicmNtZl91c2JfcnhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTUyNy1cXHRcXHRza2JfcHV0KHNrYiwgdXJiLVxcdTAwM2VhY3R1YWxfbGVuZ3RoKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6NTI4OlxcdFxcdGJyY21mX3J4X2ZyYW1lKGRldmluZm8tXFx1MDAzZWRldiwgc2tiLCB0cnVlLCB0cnVlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtNTI5LVxcdFxcdGJyY21mX3VzYl9yeF9yZWZpbGwoZGV2aW5mbywgcmVxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDc6NDYuODQ4Nzk1MzE4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MDU4NzgzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgQlJDTUYgUnggUGF0aCoqXG5cblJpZ2h0LCBzbyBJJ20gdHJhY2luZyB0aGUgZGF0YSBmbG93IGluIHRoaXMgQlJDTUYgZHJpdmVyLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcsIGNvbmZpcm1lZCBieSBteSBjb2RlIHJlYWRpbmcsIGlzIHRoYXQgYGJyY21mX3J4X2ZyYW1lYCBpcyBpbmRlZWQgdGhlIGVudHJ5IHBvaW50IHRoYXQncyBjYWxsZWQgd2hlbiBkYXRhIGlzIHJlY2VpdmVkIG92ZXIgVVNCLCBhcyBgdXNiLmNgIGNsZWFybHkgaW5kaWNhdGVzLiBJbnRlcmVzdGluZy4gTm93LCBpZiB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGluIG1vbml0b3IgbW9kZSwgYGJyY21mX25ldGlmX21vbl9yeGAgc2VlbXMgdG8gZ2V0IGludm9rZWQgZnJvbSB3aXRoaW4gYGJyY21mX3J4X2ZyYW1lYCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gSSByZW1lbWJlciB0aGF0IGludGVyYWN0aW9uLiBCdXQgaXQncyBhbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgYXNzdW1wdGlvbnMuLi5KdXN0IHRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgdGhhdCBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyAqYWN0dWFsbHkqIGNhbGxlZCBmcm9tIGBicmNtZl9yeF9mcmFtZWAuIFRpbWUgdG8ganVtcCBpbnRvIGBjb3JlLmNgIGFuZCBjb25maXJtIHRoYXQncyB0aGUgZnVuY3Rpb24ncyBvcmlnaW4uIFNob3VsZG4ndCB0YWtlIGxvbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMDE0LCJPdXRwdXRUb2tlbnMiOjU1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDc6NTAuNTU0Njc2OTc1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUwNjg5NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfbmV0aWZfbW9uX3J4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz00MzQ9c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00MzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzo0Mzk6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00NDAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0Nzo1MC43NDk3NTIxN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDA5Mjg3NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBicmNtZl9uZXRpZl9tb25fcnhgIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaGVyZSBpcyB0byBwaW5wb2ludCBleGFjdGx5ICp3aGVyZSogYGJyY21mX25ldGlmX21vbl9yeGAgaXMgYmVpbmcgaW52b2tlZC4gVW5kZXJzdGFuZGluZyBpdHMgY2FsbCBncmFwaCBpcyBjcnVjaWFsIGZvciBjb21wcmVoZW5kaW5nIGl0cyByb2xlIGluIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2Ug4oCTIGlkZW50aWZ5IGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYWxsIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGdyYXNwIG9mIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IG9wZXJhdGVzLiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgZXhwb3NlIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFuZCBhbnkgc2V0dXAgdGhhdCBpcyBoYXBwZW5pbmcgYmVmb3JlIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFdpdGggdGhpcyBpbmZvcm1hdGlvbiwgSSBjYW4gYW5hbHl6ZSBwb3RlbnRpYWwgaXNzdWVzLCB1bmRlcnN0YW5kIHRoZSBmbG93LCBhbmQgcXVpY2tseSBhc3Nlc3MgYW55IGFyZWFzIG9mIGludGVyZXN0LiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGFuZCBlYXN5IHRhc2sgdG8gZ2F0aGVyIHRoaXMgaW5mb3JtYXRpb24uIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxNTY0LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDc6NTQuMTU5MDQyODIyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI3MTIxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfbmV0aWZfbW9uX3J4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz00MzQ9c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00MzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzo0Mzk6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00NDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaD0yMjA9dm9pZCBicmNtZl9uZXRpZl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaDoyMjE6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmgtMjIyLXZvaWQgYnJjbWZfbmV0X2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBsb2NrZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTEyMDA9YnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTI0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTI0MTpcXHRcXHRicmNtZl9uZXRpZl9tb25fcngoaWZwLCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQyLVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDc6NTQuMjgxNzYwODc0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4MjYwNzE0ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEF0dGFjayBWZWN0b3JzKipcblxuT2theSwgc28gYGJyY21mX25ldGlmX21vbl9yeGAgaXMgY2FsbGVkIGZyb20gYG1zZ2J1Zi5jYC4gV2FpdCBhIG1pbnV0ZSwgYG1zZ2J1Zi5jYCBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBQQ0llLiBUaGF0J3MgYSBsaW1pdGVkIHZlY3Rvci4gRG9lcyBhbnl0aGluZyBlbHNlIGNhbGwgdGhhdCBmdW5jdGlvbj8gTm9wZSwganVzdCBgbXNnYnVmLmNgLiBTbyB0aGF0J3MgcHJvYmFibHkgYSBkZWFkIGVuZCBmb3IgVVNCLlxuXG5MZXQncyBzd2l0Y2ggZ2VhcnMgYW5kIGxvb2sgYXQgYGJyY21mX3Bta3NhX3YyX29wYCwgZm91bmQgaW4gYGNmZzgwMjExLmNgLiBDcnVjaWFsbHksIGNhbiBgY2ZnODAyMTEuY2AgYmUgcmVhY2hlZCB0aHJvdWdoIFVTQj8gWWVzLCBpdCdzIHRoZSBnZW5lcmljIGNmZzgwMjExIGludGVyZmFjZSBmb3IgYGJyY21mbWFjYCwgc28gdGhhdCdzIGEgbXVjaCBtb3JlIHByb21pc2luZyB0YXJnZXQuXG5cblRoZSBuZXh0IHF1ZXN0aW9uIGlzIGhvdyB0byB0cmlnZ2VyIGBicmNtZl9wbWtzYV92Ml9vcGAuIEl0IGFwcGVhcnMgaXQgaXMgY2FsbGVkIHRocm91Z2ggYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYC4gVGhlc2UgYXJlIHN0YW5kYXJkIGNmZzgwMjExIG9wZXJhdGlvbnMsIHdoaWNoIGlzIGdvb2QuIENvdWxkIFN5emthbGxlciBoaXQgdGhlc2Ugb3BzPyBJIHRoaW5rIHNvLCB5ZXMsIHZpYSBuZXRsaW5rIGNvbW1hbmRzIHRvIGNmZzgwMjExLCBsaWtlIGBOTDgwMjExX0NNRF9TRVRfUE1LU0FgLlxuXG5CdXQgaG9sZCBvbiwgZG9lcyB0aGUgYGJyY21mbWFjYCBVU0IgZHJpdmVyIHJlZ2lzdGVyIHRoZXNlIG9wcz8gVGhhbmtmdWxseSwgeWVzLCBgYnJjbWZtYWNgIHJlZ2lzdGVycyBhIGB3aXBoeWAgd2l0aCB0aGVzZSBvcHMuXG5cbkEgY3JpdGljYWwgcG9pbnQsIHRob3VnaCwgaXMgdGhhdCBgYnJjbWZfcG1rc2FfdjJfb3BgIGlzIG9ubHkgYWN0dWFsbHkgY2FsbGVkIGlmIGBicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKWAgZXZhbHVhdGVzIHRvIHRydWUuIFNvLCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIHNldCB0byBzZWUgaWYgdGhpcyBpcyBldmVuIGZlYXNpYmxlIHRvIGV4cGxvaXQgb24gYSBVU0Igc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM2NiwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODowMS4xMDc4MzU1NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MzIxODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJSQ01GX0ZFQVRfUE1LSURfVjJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00NDg3PWJyY21mX2NmZzgwMjExX3NldF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1MDUtXFx0XFx0cmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgcG1rc2EsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjQ1MDY6XFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfUE1LSURfVjIpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1MDctXFx0XFx0cmV0dXJuIGJyY21mX3Bta3NhX3YyX29wKGNmZywgaWZwLCBwbWtzYSwgdHJ1ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYz00NTMyPWJyY21mX2NmZzgwMjExX2RlbF9wbWtzYShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jLTQ1NDktXFx0XFx0cmV0dXJuIGJyY21mX3Bta3NhX3YzX29wKGlmcCwgcG1rc2EsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NTUwOlxcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTUxLVxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgcG1rc2EsIGZhbHNlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTQ1Nzk9YnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTkwLVxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92M19vcChpZnAsIE5VTEwsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYzo0NTkxOlxcdGlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX1BNS0lEX1YyKSlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy00NTkyLVxcdFxcdHJldHVybiBicmNtZl9wbWtzYV92Ml9vcChjZmcsIGlmcCwgTlVMTCwgZmFsc2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYz0xMzc9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9mZWF0X3dsY2ZlYXQgYnJjbWZfZmVhdF93bGNmZWF0X21hcFtdID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MTM4OlxcdHsgMTIsIDAsIEJJVChCUkNNRl9GRUFUX1BNS0lEX1YyKSB9LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMTM5LVxcdHsgMTMsIDAsIEJJVChCUkNNRl9GRUFUX1BNS0lEX1YzKSB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODowMS4yMjcxNjMxMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODAyOTM3MDQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZlYXNpYmlsaXR5IG9mIEZ1enppbmcgQlJDTUYgd2l0aCBTeXprYWxsZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBCUkNNRl9GRUFUX1BNS0lEX1YyYCBmZWF0dXJlLiBJdCBsb29rcyBsaWtlIGl0J3MgZW5hYmxlZCBiYXNlZCBvbiB0aGUgZmlybXdhcmUgZmVhdHVyZXMgbWFwIChgYnJjbWZfZmVhdF93bGNmZWF0X21hcGApLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBTeXprYWxsZXIsIHdpdGggaXRzIGZpcm13YXJlIGVtdWxhdGlvbiBjYXBhYmlsaXRpZXMsIGFjdHVhbGx5IHNldCB0aGlzIGZlYXR1cmUgZm9yIHVzP1xuXG5Ob3csIFN5emthbGxlciAqY2FuKiBlbXVsYXRlIGEgVVNCIGRldmljZSB1c2luZyBgc3l6X3VzYl9jb25uZWN0YC4gQnV0IHRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRoYXQgYGJyY21mbWFjYCByZWxpZXMgb24gZG93bmxvYWRpbmcgZmlybXdhcmUgdG8gdGhlIGRldmljZSBhbmQgdGhlbiBjb21tdW5pY2F0aW5nIHdpdGggaXQuIFNvLCBkb2VzIGBicmNtZm1hY2AgZXZlbiAqd29yayogd2l0aGluIFN5emthbGxlcidzIHNldHVwLCBnaXZlbiBpdHMgZGVwZW5kZW5jZSBvbiBmaXJtd2FyZT9cblxuSG9sZCBvbi4uLiBTeXprYWxsZXIgdHlwaWNhbGx5IHVzZXMgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmkgZnV6emluZywgcmlnaHQ/IEl0IGF2b2lkcyBgYnJjbWZtYWNgIGJlY2F1c2UgYGJyY21mbWFjYCBpcyBhIEZ1bGxNQUMgZHJpdmVyLiBUaGF0IG1lYW5zIGl0J3MgdGlnaHRseSBjb3VwbGVkIHdpdGggQnJvYWRjb20ncyBzcGVjaWZpYyBmaXJtd2FyZSBhbmQgaGFyZHdhcmUgcmVzcG9uc2VzLiBXaGljaCwgb2YgY291cnNlLCBpcyBhIG1hc3NpdmUgaGVhZGFjaGUuXG5cbkFoLCBidXQgSSByZW1lbWJlciwgU3l6a2FsbGVyIGhhcyBhIFVTQiBmdXp6ZXIgd2hpY2ggY2FuIGVtdWxhdGUgKmFueSogVVNCIGRldmljZS4gVGhhdCdzIGtleS4gSWYgU3l6a2FsbGVyIGVtdWxhdGVzIGEgQnJvYWRjb20gVVNCIFdpLUZpIGRvbmdsZSwgdGhlIGBicmNtZm1hY2AgZHJpdmVyICpzaG91bGQqIHByb2JlIGl0LiBJdCB3aWxsIHRyaWdnZXIgdGhlIGRyaXZlciB0byBhdHRlbXB0IHRvIGxvYWQgZmlybXdhcmUgdGhyb3VnaCB0aGUgYGJyY21mX3VzYl9wcm9iZV9jYmAgLVx1MDAzZSBgYnJjbWZfZndfYWxsb2NfcmVxdWVzdGAgLVx1MDAzZSBgcmVxdWVzdF9maXJtd2FyZWAgc2VxdWVuY2UuXG5cblRoZSBwcm9ibGVtLCB0aG91Z2gsIGlzIHdoYXQgaGFwcGVucyBpZiBmaXJtd2FyZSBsb2FkaW5nIGZhaWxzPyBUaGUgcHJvYmUgKmZhaWxzKiwgYW5kIHRoZSBkcml2ZXIgd29uJ3QgaW5pdGlhbGl6ZSB0aGUgY2ZnODAyMTEgaW50ZXJmYWNlLiBUaGF0J3MgYSBzaG93c3RvcHBlci4gQnV0IFN5emthbGxlciBpbWFnZXMgdHlwaWNhbGx5ICpkbyogaGF2ZSBgbGludXgtZmlybXdhcmVgIGluc3RhbGxlZCwgcmlnaHQ/IFNvLCB0aGVyZSdzIGEgY2hhbmNlIHRoZSBmaXJtd2FyZSAqd2lsbCogYmUgYXZhaWxhYmxlLlxuXG5JZiB0aGUgZmlybXdhcmUgaXMgcHJlc2VudCwgdGhlIGRyaXZlciB3aWxsIHRyeSB0byBzZW5kIGl0IHRvIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlLiBUaGVuLCB0aGUgZHJpdmVyIGlzIGdvaW5nIHRvIGV4cGVjdCB0aGUgZW11bGF0ZWQgZGV2aWNlIHRvIGFjdHVhbGx5ICpib290KiBhbmQgcmVzcG9uZCB0byBjb21tYW5kcywgbGlrZSB0aG9zZSBpbiB0aGUgYGJyY21mX2NfcHJlaW5pdF9kY21kc2Agc2VyaWVzLiBTaW5jZSBvdXIgZW11bGF0ZWQgVVNCIGRldmljZSBpcyBqdXN0IGEgZHVtYiBmdXp6ZXIsIGl0J2xsIGVpdGhlciB0aW1lb3V0IG9yIHNwZXcgZ2FyYmFnZSByZXNwb25zZXMuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLi4uIFdpbGwgaXQgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemUgdGhlIGB3aXBoeWAgYW5kIHJlZ2lzdGVyIGl0IHdpdGggY2ZnODAyMTE/IFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiwgaXNuJ3QgaXQ/IEkgbmVlZCB0byBkaWcgaW50byBgYnJjbWZfdXNiX3Byb2JlX2NiYCBhbmQgdGhlIG92ZXJhbGwgaW5pdGlhbGl6YXRpb24gZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBwb2ludHMgYW5kIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzLiBMZXQncyBzZWUgd2hhdCBoYXBwZW5zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDIxMywiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODowOS4yNTY1Mzc3ODVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzIzOTQ3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl91c2JfcHJvYmVfY2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMjI0PWJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNDMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNDQ6c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjQ1LVxcdFxcdFxcdCAgICAgIGVudW0gYnJjbWZfZnd2ZW5kb3IgZnd2aWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTM0Mj1icmNtZl91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDQyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxNDQzOlxcdHJldCA9IGJyY21mX3VzYl9wcm9iZV9jYihkZXZpbmZvLCBpZC1cXHUwMDNlZHJpdmVyX2luZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNDQ0LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ4OjA5LjM2Mzc4MzYzOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTEzMzM1OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnJjbWZfdXNiX3Byb2JlX2NiYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIFVTQiBkZXZpY2UgcHJvYmluZyBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIgZnJhbWV3b3JrLiBJIGtub3cgdGhpcyBpcyBhIGNyaXRpY2FsIHBvaW50IGluIGRldmljZSBpbml0aWFsaXphdGlvbiDigJMgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGRldGVjdGluZyBhIGNvbXBhdGlibGUgZGV2aWNlLCBwb3RlbnRpYWxseSBhbGxvY2F0aW5nIHJlc291cmNlcywgYW5kIHNldHRpbmcgdXAgdGhlIGluaXRpYWwgY29tbXVuaWNhdGlvbiBsaW5rLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aCwgd2hhdCBjaGVja3MgaXQgcGVyZm9ybXMgKGRldmljZSBJRHMsIGNvbmZpZ3VyYXRpb24pLCBhbmQgd2hhdCBzdGVwcyBpdCB0YWtlcyB0byBnZXQgdGhlIGRldmljZSByZWFkeSBmb3IgZnVydGhlciBkcml2ZXIgb3BlcmF0aW9ucy4gSXQncyB0aGUgZ2F0ZXdheSBmb3Igb3VyIFVTQi1jb25uZWN0ZWQgV2ktRmkgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU2NjgsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODoxMi4yNzcxMjI2MTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTY1OTIyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl91c2JfcHJvYmVfY2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTIyND1icmNtZl91c2JfcHJlcGFyZV9md19yZXF1ZXN0KHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjQ0OnN0YXRpYyBpbnQgYnJjbWZfdXNiX3Byb2JlX2NiKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI0NS1cXHRcXHRcXHQgICAgICBlbnVtIGJyY21mX2Z3dmVuZG9yIGZ3dmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEzNDI9YnJjbWZfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0Mi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTQ0MzpcXHRyZXQgPSBicmNtZl91c2JfcHJvYmVfY2IoZGV2aW5mbywgaWQtXFx1MDAzZWRyaXZlcl9pbmZvKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTQ0NC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODoxMi4zOTI3ODY4NloiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgyNjgyNDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSByZWFkaW5nIGFuZCBwcm9jZXNzaW5nIHRoZSBjb2RlOlxuXG4qKkRpdmluZyBpbnRvIGJyY21mX3VzYl9wcm9iZV9jYioqXG5cbk9rYXksIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIGBicmNtZl91c2JfcHJvYmVfY2JgLCBzaGFsbCB3ZT8gTG9va3MgbGlrZSB0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3ZSdyZSB1c2luZyBpbiBgdXNiLmNgLi4uIEl0J3MgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50IGZvciBvdXIgVVNCIGRldmljZSBwcm9iZSBoYW5kbGluZywgYW5kIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbi4gSSBleHBlY3QgaXQncyBnb2luZyB0byBpbnZvbHZlIHJlc291cmNlIGFsbG9jYXRpb24sIGRldmljZSBpbml0aWFsaXphdGlvbiwgZHJpdmVyIGJpbmRpbmcsIGFuZCBxdWl0ZSBhIGJpdCBvZiBlcnJvciBoYW5kbGluZywgZ2l2ZW4gdGhlIHBvdGVudGlhbCBjb21wbGV4aXRpZXMgb2YgVVNCIGludGVyYWN0aW9ucy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBtYW5pcHVsYXRlcywgZXNwZWNpYWxseSB0aG9zZSByZWxhdGVkIHRvIHRoZSBVU0IgZGV2aWNlIGNvbnRleHQgYW5kIGFueSBpbnRlcm5hbCBkcml2ZXIgc3RhdGVzLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50cmljYXRlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBVU0IgY29yZSwgYW5kIEknbGwgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgcHJvdG9jb2xzIGFuZCBlbmRwb2ludHMgYXJlIGJlaW5nIHNldCB1cC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhpcyBkcml2ZXIncyBpbml0aWFsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYyNjAsIk91dHB1dFRva2VucyI6NTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODoxNS44NzU0NzIzNjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyMzM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI0NCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNDQ6XFx0c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbjEyNDU6XFx0XFx0XFx0XFx0ICAgICAgZW51bSBicmNtZl9md3ZlbmRvciBmd3ZpZClcXG4xMjQ2OlxcdHtcXG4xMjQ3OlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cztcXG4xMjQ4OlxcdFxcdHN0cnVjdCBicmNtZl91c2JkZXYgKmJ1c19wdWI7XFxuMTI0OTpcXHRcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkZXZpbmZvLVxcdTAwM2VkZXY7XFxuMTI1MDpcXHRcXHRzdHJ1Y3QgYnJjbWZfZndfcmVxdWVzdCAqZndyZXE7XFxuMTI1MTpcXHRcXHRpbnQgcmV0O1xcbjEyNTI6XFx0XFxuMTI1MzpcXHRcXHRicmNtZl9kYmcoVVNCLCBcXFwiRW50ZXJcXFxcblxcXCIpO1xcbjEyNTQ6XFx0XFx0YnVzX3B1YiA9IGJyY21mX3VzYl9hdHRhY2goZGV2aW5mbywgQlJDTUZfVVNCX05SWFEsIEJSQ01GX1VTQl9OVFhRKTtcXG4xMjU1OlxcdFxcdGlmICghYnVzX3B1YilcXG4xMjU2OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbjEyNTc6XFx0XFxuMTI1ODpcXHRcXHRidXMgPSBremFsbG9jX29iaigqYnVzLCBHRlBfQVRPTUlDKTtcXG4xMjU5OlxcdFxcdGlmICghYnVzKSB7XFxuMTI2MDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbjEyNjE6XFx0XFx0XFx0Z290byBmYWlsO1xcbjEyNjI6XFx0XFx0fVxcbjEyNjM6XFx0XFxuMTI2NDpcXHRcXHRidXMtXFx1MDAzZWRldiA9IGRldjtcXG4xMjY1OlxcdFxcdGJ1c19wdWItXFx1MDAzZWJ1cyA9IGJ1cztcXG4xMjY2OlxcdFxcdGJ1cy1cXHUwMDNlYnVzX3ByaXYudXNiID0gYnVzX3B1YjtcXG4xMjY3OlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIGJ1cyk7XFxuMTI2ODpcXHRcXHRidXMtXFx1MDAzZW9wcyA9IFxcdTAwMjZicmNtZl91c2JfYnVzX29wcztcXG4xMjY5OlxcdFxcdGJ1cy1cXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX0JDREM7XFxuMTI3MDpcXHRcXHRidXMtXFx1MDAzZWZ3dmlkID0gZnd2aWQ7XFxuMTI3MTpcXHRcXHRidXMtXFx1MDAzZWFsd2F5c191c2VfZndzX3F1ZXVlID0gdHJ1ZTtcXG4xMjcyOlxcdCNpZmRlZiBDT05GSUdfUE1cXG4xMjczOlxcdFxcdGJ1cy1cXHUwMDNld293bF9zdXBwb3J0ZWQgPSB0cnVlO1xcbjEyNzQ6XFx0I2VuZGlmXFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdGRldmluZm8tXFx1MDAzZXNldHRpbmdzID0gYnJjbWZfZ2V0X21vZHVsZV9wYXJhbShidXMtXFx1MDAzZWRldiwgQlJDTUZfQlVTVFlQRV9VU0IsXFxuMTI3NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBidXNfcHViLVxcdTAwM2VkZXZpZCxcXG4xMjc4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJ1c19wdWItXFx1MDAzZWNoaXByZXYpO1xcbjEyNzk6XFx0XFx0aWYgKCFkZXZpbmZvLVxcdTAwM2VzZXR0aW5ncykge1xcbjEyODA6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xMjgxOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xMjgyOlxcdFxcdH1cXG4xMjgzOlxcdFxcdHJldCA9IFBUUl9FUlJfT1JfWkVSTyhkZXZpbmZvLVxcdTAwM2VzZXR0aW5ncyk7XFxuMTI4NDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjg1OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xMjg2OlxcdFxcbjEyODc6XFx0XFx0aWYgKCFicmNtZl91c2JfZGxuZWVkZWQoZGV2aW5mbykpIHtcXG4xMjg4OlxcdFxcdFxcdHJldCA9IGJyY21mX2FsbG9jKGRldmluZm8tXFx1MDAzZWRldiwgZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpO1xcbjEyODk6XFx0XFx0XFx0aWYgKHJldClcXG4xMjkwOlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xMjkxOlxcdFxcdFxcdHJldCA9IGJyY21mX2F0dGFjaChkZXZpbmZvLVxcdTAwM2VkZXYpO1xcbjEyOTI6XFx0XFx0XFx0aWYgKHJldClcXG4xMjkzOlxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xMjk0OlxcdFxcdFxcdC8qIHdlIGFyZSBkb25lICovXFxuMTI5NTpcXHRcXHRcXHRjb21wbGV0ZShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlZGV2X2luaXRfZG9uZSk7XFxuMTI5NjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMjk3OlxcdFxcdH1cXG4xMjk4OlxcdFxcdGJ1cy1cXHUwMDNlY2hpcCA9IGJ1c19wdWItXFx1MDAzZWRldmlkO1xcbjEyOTk6XFx0XFx0YnVzLVxcdTAwM2VjaGlwcmV2ID0gYnVzX3B1Yi1cXHUwMDNlY2hpcHJldjtcXG4xMzAwOlxcdFxcbjEzMDE6XFx0XFx0ZndyZXEgPSBicmNtZl91c2JfcHJlcGFyZV9md19yZXF1ZXN0KGRldmluZm8pO1xcbjEzMDI6XFx0XFx0aWYgKCFmd3JlcSkge1xcbjEzMDM6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xMzA0OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xMzA1OlxcdFxcdH1cXG4xMzA2OlxcdFxcbjEzMDc6XFx0XFx0LyogcmVxdWVzdCBmaXJtd2FyZSBoZXJlICovXFxuMTMwODpcXHRcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKGRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbjEzMDk6XFx0XFx0aWYgKHJldCkge1xcbjEzMTA6XFx0XFx0XFx0YnJjbWZfZXJyKFxcXCJmaXJtd2FyZSByZXF1ZXN0IGZhaWxlZDogJWRcXFxcblxcXCIsIHJldCk7XFxuMTMxMTpcXHRcXHRcXHRrZnJlZShmd3JlcSk7XFxuMTMxMjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTMxMzpcXHRcXHR9XFxuMTMxNDpcXHRcXG4xMzE1OlxcdFxcdHJldHVybiAwO1xcbjEzMTY6XFx0XFxuMTMxNzpcXHRmYWlsOlxcbjEzMTg6XFx0XFx0LyogUmVsZWFzZSByZXNvdXJjZXMgaW4gcmV2ZXJzZSBvcmRlciAqL1xcbjEzMTk6XFx0XFx0YnJjbWZfZnJlZShkZXZpbmZvLVxcdTAwM2VkZXYpO1xcbjEzMjA6XFx0XFx0a2ZyZWUoYnVzKTtcXG4xMzIxOlxcdFxcdGJyY21mX3VzYl9kZXRhY2goZGV2aW5mbyk7XFxuMTMyMjpcXHRcXHRyZXR1cm4gcmV0O1xcbjEzMjM6XFx0fVxcbjEzMjQ6XFx0XFxuMTMyNTpcXHRzdGF0aWMgdm9pZFxcbjEzMjY6XFx0YnJjbWZfdXNiX2Rpc2Nvbm5lY3RfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxcbjEzMjc6XFx0e1xcbjEzMjg6XFx0XFx0aWYgKCFkZXZpbmZvKVxcbjEzMjk6XFx0XFx0XFx0cmV0dXJuO1xcbjEzMzA6XFx0XFx0YnJjbWZfZGJnKFVTQiwgXFxcIkVudGVyLCBidXNfcHViICVwXFxcXG5cXFwiLCBkZXZpbmZvKTtcXG4xMzMxOlxcdFxcbjEzMzI6XFx0XFx0YnJjbWZfZGV0YWNoKGRldmluZm8tXFx1MDAzZWRldik7XFxuMTMzMzpcXHRcXHRicmNtZl9mcmVlKGRldmluZm8tXFx1MDAzZWRldik7XFxuMTMzNDpcXHRcXHRrZnJlZShkZXZpbmZvLVxcdTAwM2VidXNfcHViLmJ1cyk7XFxuMTMzNTpcXHRcXHRicmNtZl91c2JfZGV0YWNoKGRldmluZm8pO1xcbjEzMzY6XFx0fVxcbjEzMzc6XFx0XFxuMTMzODpcXHQvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIGZvciB1c2JfbWF0Y2hfaWQoKSBjYWxsICovXFxuMTMzOTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYnJjbWZfdXNiX2RldmlkX3RhYmxlW107XFxuMTM0MDpcXHRcXG4xMzQxOlxcdHN0YXRpYyBpbnRcXG4xMzQyOlxcdGJyY21mX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbjEzNDM6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODoxNS44NzY2OTg5ODNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ4OTE2NjAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUkNNRiBVU0IgUHJvYmUgUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBgYnJjbWZfdXNiX3Byb2JlX2NiYCBpcyB0aGUgZW50cnkgcG9pbnQsIGFuZCBpdCBraWNrcyB0aGluZ3Mgb2ZmIGJ5IGNhbGxpbmcgYGJyY21mX2Z3X2dldF9maXJtd2FyZXNgLiAgVGhhdCBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBsb2FkaW5nLCB3aGljaCBpcyBrZXkuICBJdCBzZWVtcyB0aGUgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIGhhbmRsZSBhIHBvdGVudGlhbGx5IHNsb3cgZmlybXdhcmUgcmV0cmlldmFsLCB3aGljaCBtYWtlcyBzZW5zZS4gIEFuZCwgY3JpdGljYWxseSwgb25jZSB0aGF0J3MgZG9uZSwgaXQgY2FsbHMgYGJyY21mX3VzYl9wcm9iZV9waGFzZTJgLiBPa2F5LCB0aW1lIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gaXMgcHV0IHRvZ2V0aGVyLiBMZXQncyBkaWcgaW50byBgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMmAgYW5kIHNlZSB3aGF0IGl0J3MgZG9pbmcgd2l0aCB0aGF0IGZyZXNobHkgbG9hZGVkIGZpcm13YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODAzNCwiT3V0cHV0VG9rZW5zIjo1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDg6MTkuMzY1ODY4MTM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwMTU1MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfdXNiX3Byb2JlX3BoYXNlMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTExNjU9c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9idXNfb3BzIGJyY21mX3VzYl9idXNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzUtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjExNzY6c3RhdGljIHZvaWQgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCByZXQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTExNzctXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJyY21mX2Z3X3JlcXVlc3QgKmZ3cmVxKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEzMDctXFx0LyogcmVxdWVzdCBmaXJtd2FyZSBoZXJlICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEzMDg6XFx0cmV0ID0gYnJjbWZfZndfZ2V0X2Zpcm13YXJlcyhkZXYsIGZ3cmVxLCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTMwOS1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTUxMT1zdGF0aWMgaW50IGJyY21mX3VzYl9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTUyMy1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTUyNDpcXHRyZXQgPSBicmNtZl9md19nZXRfZmlybXdhcmVzKFxcdTAwMjZ1c2ItXFx1MDAzZWRldiwgZndyZXEsIGJyY21mX3VzYl9wcm9iZV9waGFzZTIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xNTI1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODoxOS40ODQ4ODg3MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUzNjQxNjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnJjbWZfdXNiX3Byb2JlX3BoYXNlMmAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBzZWNvbmQgcGhhc2Ugb2YgVVNCIHByb2JpbmcgZW50YWlscyBpbiB0aGUgQnJvYWRjb20gV2ktRmkgZHJpdmVyLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1pbmcsIHRoYXQgYGJyY21mX3VzYl9wcm9iZV9waGFzZTFgIGhhbmRsZWQgc29tZSBpbml0aWFsIHNldHVwIG9yIGRldGVjdGlvbi4gTm93LCBwaGFzZSAyIG11c3QgYmUgd2hlcmUgdGhlIHJlYWwgd29yayBvZiBpbml0aWFsaXppbmcgdGhlIGRldmljZSBoYXBwZW5zLiBNeSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoaXMgaW52b2x2ZXM6XG5cbioqVVNCIERldmljZSBJbml0aWFsaXphdGlvbjogRGl2aW5nIGludG8gYnJjbWZfdXNiX3Byb2JlX3BoYXNlMioqXG5cbiogICBGaXJzdCwgSSdkIGV4cGVjdCBzb21lIGtpbmQgb2YgcmVzb3VyY2UgYWxsb2NhdGlvbi4gTGlrZWx5LCBtZW1vcnkgZm9yIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyByZWxhdGVkIHRvIHRoZSBkZXZpY2UncyBzdGF0ZS4gSXMgdGhlcmUgYSBgc3RydWN0IGJyY21mX3VzYmRldmAgb3Igc2ltaWxhcj8gSXQncyBwcm9iYWJseSBiZWluZyBpbml0aWFsaXplZCBoZXJlLlxuKiAgIE5leHQsIEkgYW50aWNpcGF0ZSBzb21lIGludGVyYWN0aW9uIHdpdGggdGhlIFVTQiBjb3JlLiBTZXR0aW5nIHVwIGVuZHBvaW50cyBmb3IgZGF0YSB0cmFuc2ZlciAoYnVsaywgaW50ZXJydXB0LCBjb250cm9sKSwgY29uZmlndXJpbmcgVVNCIGRlc2NyaXB0b3JzLCBhbmQgbGlrZWx5IGNsYWltaW5nIHRoZSBVU0IgaW50ZXJmYWNlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIFdpLUZpIGRldmljZS4gVGhpcyBpcyB3aGVyZSBJJ2xsIHNlZSB0aGUgZHJpdmVyIHRha2luZyBvd25lcnNoaXAgb2YgdGhlIFVTQiByZXNvdXJjZXMuXG4qICAgVGhlcmUncyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGJlIHNvbWUgZm9ybSBvZiBkZXZpY2UgY29tbXVuaWNhdGlvbiBzZXR1cC4gVGhpcyBjb3VsZCBpbnZvbHZlIHNlbmRpbmcgaW5pdGlhbCBjb250cm9sIG1lc3NhZ2VzIHRvIHRoZSBCcm9hZGNvbSBjaGlwLCBzZXR0aW5nIHVwIGhhcmR3YXJlIHJlZ2lzdGVycywgb3IgcHJlcGFyaW5nIHRoZSBjaGlwIGZvciBzdWJzZXF1ZW50IGNvbW11bmljYXRpb24gd2l0aCB0aGUgaG9zdC4gVGhpcyBzdGVwIGlzIHdoZXJlIGZpcm13YXJlIGxvYWRpbmcgbWlnaHQgdGFrZSBwbGFjZSwgaWYgaXQncyBub3QgaGFuZGxlZCBlYXJsaWVyLlxuKiAgIEknbGwgYmUgbG9va2luZyBmb3IgaW50ZXJydXB0IGhhbmRsaW5nIHNldHVwLCBpZiB0aGUgZGV2aWNlIHVzZXMgaW50ZXJydXB0cyB0byBzaWduYWwgcmVhZGluZXNzIG9yIGV2ZW50cy4gVGhlIGRyaXZlciBuZWVkcyB0byByZWdpc3RlciBpbnRlcnJ1cHQgaGFuZGxlcnMgd2l0aCB0aGUgVVNCIGNvcmUuXG4qICAgRmluYWxseSwgSSdsbCBiZSBzZWFyY2hpbmcgZm9yIGFueSBkZXZpY2Utc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uIE1heWJlIHRoZXJlJ3MgYSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgdGhlIEJyb2FkY29tIGNoaXAsIG9yIHNvbWUgZm9ybSBvZiBwb3dlci11cCByb3V0aW5lLiBUaGVyZSBjb3VsZCBiZSBzb21lIHNvcnQgb2YgYSBjaGVjayB0byBlbnN1cmUgdGhlIGNvbm5lY3Rpb24uXG4qICAgSSdkIGFsc28gZXhwZWN0IHRvIHNlZSBzb21lIGVycm9yIGhhbmRsaW5nLiBVU0IgaXMgY29tcGxleCwgc28gdGhpbmdzIGNhbiBnbyB3cm9uZy4gSSdsbCBiZSBsb29raW5nIGZvciBlcnJvciBjaGVja3MgYWZ0ZXIgZWFjaCBVU0Igb3BlcmF0aW9uLCBhbmQgYW55IGVycm9yIHJlY292ZXJ5IHJvdXRpbmVzIHRoYXQgYXJlIGluIHBsYWNlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBpcyB0cmFuc2xhdGluZyBoaWdoZXItbGV2ZWwgV2ktRmkgY29uY2VwdHMgKGxpa2Ugc2Nhbm5pbmcsIGFzc29jaWF0aW9uLCBkYXRhIHRyYW5zZmVyKSBpbnRvIHRoZSBVU0Itc3BlY2lmaWMgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBmdW5jdGlvbi4gTGV0J3Mgc2VlIGhvdyBpdCdzIGRvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTAzLCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDg6MjQuNjM4NTM0MDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE3NixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE3NjpcXHRzdGF0aWMgdm9pZCBicmNtZl91c2JfcHJvYmVfcGhhc2UyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJldCxcXG4xMTc3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpmd3JlcSlcXG4xMTc4OlxcdHtcXG4xMTc5OlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbjExODA6XFx0XFx0c3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvID0gYnVzLVxcdTAwM2VidXNfcHJpdi51c2ItXFx1MDAzZWRldmluZm87XFxuMTE4MTpcXHRcXHRjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3O1xcbjExODI6XFx0XFxuMTE4MzpcXHRcXHRpZiAocmV0KVxcbjExODQ6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTg1OlxcdFxcbjExODY6XFx0XFx0YnJjbWZfZGJnKFVTQiwgXFxcIlN0YXJ0IGZ3IGRvd25sb2FkaW5nXFxcXG5cXFwiKTtcXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0ZncgPSBmd3JlcS1cXHUwMDNlaXRlbXNbQlJDTUZfVVNCX0ZXX0NPREVdLmJpbmFyeTtcXG4xMTg5OlxcdFxcdGtmcmVlKGZ3cmVxKTtcXG4xMTkwOlxcdFxcbjExOTE6XFx0XFx0cmV0ID0gY2hlY2tfZmlsZShmdy1cXHUwMDNlZGF0YSk7XFxuMTE5MjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbjExOTM6XFx0XFx0XFx0YnJjbWZfZXJyKFxcXCJpbnZhbGlkIGZpcm13YXJlXFxcXG5cXFwiKTtcXG4xMTk0OlxcdFxcdFxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcbjExOTU6XFx0XFx0XFx0Z290byBlcnJvcjtcXG4xMTk2OlxcdFxcdH1cXG4xMTk3OlxcdFxcbjExOTg6XFx0XFx0ZGV2aW5mby1cXHUwMDNlaW1hZ2UgPSBmdy1cXHUwMDNlZGF0YTtcXG4xMTk5OlxcdFxcdGRldmluZm8tXFx1MDAzZWltYWdlX2xlbiA9IGZ3LVxcdTAwM2VzaXplO1xcbjEyMDA6XFx0XFxuMTIwMTpcXHRcXHRyZXQgPSBicmNtZl91c2JfZndfZG93bmxvYWQoZGV2aW5mbyk7XFxuMTIwMjpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKGZ3KTtcXG4xMjAzOlxcdFxcdGlmIChyZXQpXFxuMTIwNDpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMDU6XFx0XFxuMTIwNjpcXHRcXHRyZXQgPSBicmNtZl9hbGxvYyhkZXZpbmZvLVxcdTAwM2VkZXYsIGRldmluZm8tXFx1MDAzZXNldHRpbmdzKTtcXG4xMjA3OlxcdFxcdGlmIChyZXQpXFxuMTIwODpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMDk6XFx0XFxuMTIxMDpcXHRcXHQvKiBBdHRhY2ggdG8gdGhlIGNvbW1vbiBkcml2ZXIgaW50ZXJmYWNlICovXFxuMTIxMTpcXHRcXHRyZXQgPSBicmNtZl9hdHRhY2goZGV2aW5mby1cXHUwMDNlZGV2KTtcXG4xMjEyOlxcdFxcdGlmIChyZXQpXFxuMTIxMzpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbjEyMTQ6XFx0XFxuMTIxNTpcXHRcXHRjb21wbGV0ZShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlZGV2X2luaXRfZG9uZSk7XFxuMTIxNjpcXHRcXHRyZXR1cm47XFxuMTIxNzpcXHRlcnJvcjpcXG4xMjE4OlxcdFxcdGJyY21mX2RiZyhUUkFDRSwgXFxcImZhaWxlZDogZGV2PSVzLCBlcnI9JWRcXFxcblxcXCIsIGRldl9uYW1lKGRldiksIHJldCk7XFxuMTIxOTpcXHRcXHRjb21wbGV0ZShcXHUwMDI2ZGV2aW5mby1cXHUwMDNlZGV2X2luaXRfZG9uZSk7XFxuMTIyMDpcXHRcXHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2KTtcXG4xMjIxOlxcdH1cXG4xMjIyOlxcdFxcbjEyMjM6XFx0c3RhdGljIHN0cnVjdCBicmNtZl9md19yZXF1ZXN0ICpcXG4xMjI0OlxcdGJyY21mX3VzYl9wcmVwYXJlX2Z3X3JlcXVlc3Qoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxcbjEyMjU6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODoyNC42Mzk3MzI4MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTYzNjQ5NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBzZXF1ZW5jZSwgZm9jdXNpbmcgb24gbXkgb3duIHRob3VnaHQgcHJvY2VzcyBhcyBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVVNCIEZpcm13YXJlIERvd25sb2FkIFNlcXVlbmNlKipcblxuUmlnaHQsIHNvIHdlJ3JlIGxvb2tpbmcgYXQgYSBVU0ItYmFzZWQgQnJvYWRjb20gV2ktRmkgZHJpdmVyIGluaXRpYWxpemF0aW9uLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUgaXMgYGJyY21mX3VzYl9md19kb3dubG9hZChkZXZpbmZvKWAuIElmIHRoYXQgc3VjY2VlZHMsIHRoZSBkcml2ZXIgdGhlbiBtb3ZlcyBvbiB0byBhbGxvY2F0ZSBtZW1vcnkgd2l0aCBgYnJjbWZfYWxsb2NgIGFuZCBhdHRhY2ggaXRzZWxmLCBsaWtlbHkgaW5pdGlhbGl6aW5nIHRoZSBoYXJkd2FyZSBpbnRlcmFjdGlvbiB2aWEgYGJyY21mX2F0dGFjaGAuXG5cbk15IGZpcnN0IGluY2xpbmF0aW9uIGlzIHRvIGRyaWxsIGRvd24gaW50byBgYnJjbWZfdXNiX2Z3X2Rvd25sb2FkYC4gVGhhdCdzIHdoZXJlIHRoZSBjcml0aWNhbCBmaXJtd2FyZSBsb2FkaW5nIHNob3VsZCBiZSBoYXBwZW5pbmcsIGFuZCB3aGVyZSBhbnkgaW5pdGlhbCBzZXR1cCBvciBlcnJvciBjb25kaXRpb25zIHdvdWxkIGJlIG1vc3QgYXBwYXJlbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBmdW5jdGlvbiBpcyBkb2luZywgd2hhdCBpdHMgcHJlY29uZGl0aW9ucyBhcmUsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZmFpbHVyZXMuIElzIGl0IGNoZWNraW5nIGZvciB2YWxpZCBmaXJtd2FyZSBpbWFnZXM/IElzIGl0IGhhbmRsaW5nIFVTQiB0cmFuc2ZlcnMgY29ycmVjdGx5PyBEb2VzIGl0IGFjY291bnQgZm9yIGRpZmZlcmVudCBCcm9hZGNvbSBjaGlwc2V0IHJldmlzaW9ucz8gV2hhdCBhcmUgdGhlIHBvdGVudGlhbCBlcnJvciBwYXRocz8gVGhlc2UgYXJlIGFsbCB0aGUgcXVlc3Rpb25zIHRoYXQgSSBuZWVkIHRvIGFzayByaWdodCBhd2F5LiBLbm93aW5nIHRoZSBkZXRhaWxzIG9mIHRoZSBkb3dubG9hZCBwcm9jZXNzIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMTg2LCJPdXRwdXRUb2tlbnMiOjU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODoyOC42MDMzODUzMDRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMTUwNjgyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl91c2JfZndfZG93bmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMDI4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM6MTAyOTpicmNtZl91c2JfZndfZG93bmxvYWQoc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMDMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMDAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyMDE6XFx0cmV0ID0gYnJjbWZfdXNiX2Z3X2Rvd25sb2FkKGRldmluZm8pO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjAyLVxcdHJlbGVhc2VfZmlybXdhcmUoZncpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODoyOC44MjQ4OTc2MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI3NDc1NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYnJjbWZfdXNiX2Z3X2Rvd25sb2FkYCBjb2RlLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgdXN1YWwgc3VzcGVjdHMgaGVyZSDigJMgdGhlIGludHJpY2F0ZSBkYW5jZSBvZiBVU0IgZGV2aWNlIGluaXRpYWxpemF0aW9uLCBmaXJtd2FyZSBsb2FkaW5nLCBhbmQgcG90ZW50aWFsIGVycm9yIGhhbmRsaW5nLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgdGhlIHN0YW5kYXJkIHByb3RvY29sIGludGVyYWN0aW9ucywgdGhlIHNwZWNpZmljIGNvbW1hbmRzIGJlaW5nIHNlbnQgdG8gdGhlIEJyb2FkY29tIGNoaXBzZXQgb3ZlciBVU0IuIE15IGltbWVkaWF0ZSBjb25jZXJucyB3aWxsIGJlIGFyb3VuZCB0aGUgc2l6ZSBsaW1pdGF0aW9ucywgYnVmZmVyaW5nLCBhbmQgaG93IHRoZSBmaXJtd2FyZSBpbWFnZSBpcyBwYXJzZWQgYW5kIHRyYW5zbWl0dGVkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZXJyb3IgY29kZXMgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMgdG8gcmVjb3Zlciwgb3IgaWYgaXQganVzdCBiYWlscyBvdXQuIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllczogd2hhdCBoYXBwZW5zIGlmIHRoZSBmaXJtd2FyZSBpcyBjb3JydXB0IG9yIGlmIG1hbGljaW91cyBkYXRhIGlzIHNlbnQ/IEhvdyByb2J1c3QgaXMgdGhlIGludGVncml0eSBjaGVjaywgYW5kIGRvZXMgaXQgdmFsaWRhdGUgdGhlIGZpcm13YXJlIGluIG1lbW9yeT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNlcXVlbmNpbmc7IGlzIHRoZSBkb3dubG9hZCBhdG9taWM/IE9yIGRvZXMgaXQgYnJlYWsgZG93biBpbiBhIHdheSBJIGNvdWxkIGV4cGxvaXQ/IEkgd2lsbCBhbHNvIGFuYWx5emUgYW55IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiwgYW5kIHdoZXRoZXIgdGhlc2UgaW5wdXRzIGFyZSB2YWxpZGF0ZWQgYXBwcm9wcmlhdGVseS4gVGhpcyBpcyBnb2luZyB0byBiZSBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDg0NSwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ4OjMyLjU1MjM3NjczOFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMjgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjg6XFx0c3RhdGljIGludFxcbjEwMjk6XFx0YnJjbWZfdXNiX2Z3X2Rvd25sb2FkKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcXG4xMDMwOlxcdHtcXG4xMDMxOlxcdFxcdGludCBlcnI7XFxuMTAzMjpcXHRcXHRzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjtcXG4xMDMzOlxcdFxcbjEwMzQ6XFx0XFx0YnJjbWZfZGJnKFVTQiwgXFxcIkVudGVyXFxcXG5cXFwiKTtcXG4xMDM1OlxcdFxcdGlmICghZGV2aW5mbykge1xcbjEwMzY6XFx0XFx0XFx0ZXJyID0gLUVOT0RFVjtcXG4xMDM3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjEwMzg6XFx0XFx0fVxcbjEwMzk6XFx0XFxuMTA0MDpcXHRcXHRpZiAoIWRldmluZm8tXFx1MDAzZWltYWdlKSB7XFxuMTA0MTpcXHRcXHRcXHRicmNtZl9lcnIoXFxcIk5vIGZpcm13YXJlIVxcXFxuXFxcIik7XFxuMTA0MjpcXHRcXHRcXHRlcnIgPSAtRU5PRU5UO1xcbjEwNDM6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTA0NDpcXHRcXHR9XFxuMTA0NTpcXHRcXG4xMDQ2OlxcdFxcdGludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldmluZm8tXFx1MDAzZWRldik7XFxuMTA0NzpcXHRcXHRlcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoaW50Zik7XFxuMTA0ODpcXHRcXHRpZiAoZXJyKVxcbjEwNDk6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTA1MDpcXHRcXG4xMDUxOlxcdFxcdGVyciA9IGJyY21mX3VzYl9kbHN0YXJ0KGRldmluZm8sXFxuMTA1MjpcXHRcXHRcXHQodTggKilkZXZpbmZvLVxcdTAwM2VpbWFnZSwgZGV2aW5mby1cXHUwMDNlaW1hZ2VfbGVuKTtcXG4xMDUzOlxcdFxcdGlmIChlcnIgPT0gMClcXG4xMDU0OlxcdFxcdFxcdGVyciA9IGJyY21mX3VzYl9kbHJ1bihkZXZpbmZvKTtcXG4xMDU1OlxcdFxcbjEwNTY6XFx0XFx0dXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGludGYpO1xcbjEwNTc6XFx0b3V0OlxcbjEwNTg6XFx0XFx0cmV0dXJuIGVycjtcXG4xMDU5OlxcdH1cXG4xMDYwOlxcdFxcbjEwNjE6XFx0XFxuMTA2MjpcXHRzdGF0aWMgdm9pZCBicmNtZl91c2JfZGV0YWNoKHN0cnVjdCBicmNtZl91c2JkZXZfaW5mbyAqZGV2aW5mbylcXG4xMDYzOlxcdHtcXG4xMDY0OlxcdFxcdGJyY21mX2RiZyhVU0IsIFxcXCJFbnRlciwgZGV2aW5mbyAlcFxcXFxuXFxcIiwgZGV2aW5mbyk7XFxuMTA2NTpcXHRcXG4xMDY2OlxcdFxcdC8qIGZyZWUgdGhlIFVSQlMgKi9cXG4xMDY3OlxcdFxcdGJyY21mX3VzYl9mcmVlX3EoXFx1MDAyNmRldmluZm8tXFx1MDAzZXJ4X2ZyZWVxKTtcXG4xMDY4OlxcdFxcdGJyY21mX3VzYl9mcmVlX3EoXFx1MDAyNmRldmluZm8tXFx1MDAzZXR4X2ZyZWVxKTtcXG4xMDY5OlxcdFxcbjEwNzA6XFx0XFx0dXNiX2ZyZWVfdXJiKGRldmluZm8tXFx1MDAzZWN0bF91cmIpO1xcbjEwNzE6XFx0XFx0dXNiX2ZyZWVfdXJiKGRldmluZm8tXFx1MDAzZWJ1bGtfdXJiKTtcXG4xMDcyOlxcdFxcbjEwNzM6XFx0XFx0a2ZyZWUoZGV2aW5mby1cXHUwMDNldHhfcmVxcyk7XFxuMTA3NDpcXHRcXHRrZnJlZShkZXZpbmZvLVxcdTAwM2VyeF9yZXFzKTtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0aWYgKGRldmluZm8tXFx1MDAzZXNldHRpbmdzKVxcbjEwNzc6XFx0XFx0XFx0YnJjbWZfcmVsZWFzZV9tb2R1bGVfcGFyYW0oZGV2aW5mby1cXHUwMDNlc2V0dGluZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODozMi41NTI1NTEwNjhaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2NTEyNDkxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhpcyDigJMgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlLCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnV6emluZyB0aGlzIGRyaXZlci5cblxuKipGaXJtd2FyZSBEb3dubG9hZCBhbmQgRGV2aWNlIEF0dGFjaG1lbnQ6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIHNvIGBicmNtZl91c2JfZGxzdGFydGAgYW5kIGBicmNtZl91c2JfZGxydW5gIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyBoZXJlIOKAkyB0aGV5J3JlIHJlc3BvbnNpYmxlIGZvciB0cmFuc2ZlcnJpbmcgdGhlIGZpcm13YXJlIG92ZXIgVVNCIHRvIHRoZSB0YXJnZXQgZGV2aWNlLiBUaGlzIGlzIHRoZSBpbml0aWFsIHNldHVwIHBoYXNlLiBUaGUgaW50ZXJlc3RpbmcgcGFydCwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGlzIHdoYXQgaGFwcGVucyB3aGVuIHdlIHVzZSBhIHRvb2wgbGlrZSBzeXprYWxsZXIgdG8gZW11bGF0ZSB0aGF0IGRldmljZS5cblxuSWYgc3l6a2FsbGVyIGlzIHN1Y2Nlc3NmdWxseSBlbXVsYXRpbmcgdGhlIGRldmljZSwgaXQncyBkZXNpZ25lZCB0byBlaXRoZXIgaGFuZGxlIChvciByZWplY3QpIHRoZXNlIFVTQiByZXF1ZXN0cywgdGhlIFVSQnMuIE5vdywgaWYgaXQgKmFjY2VwdHMqIHRob3NlIFVSQnMsIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBib3RoIGBicmNtZl91c2JfZGxzdGFydGAgYW5kIGBicmNtZl91c2JfZGxydW5gIHdpbGwgcmV0dXJuIGEgMCwgYSBzdWNjZXNzIGNvZGUuIFRoaXMgaXMgdGhlIGNydWNpYWwgcG9pbnQgZm9yIGEgZnV6emVyOiBhIFwic3VjY2Vzc1wiIGhlcmUgY291bGQgYmUgZGVjZXB0aXZlLiBJdCBtaWdodCAqYXBwZWFyKiBzdWNjZXNzZnVsLCBidXQgdGhlIGVtdWxhdGlvbiBtaWdodCBub3QgYmUgcGVyZmVjdC4gVGhlIGZpcm13YXJlIGNvdWxkIGJlIHBhcnRpYWxseSBvciBpbmNvcnJlY3RseSBwcm9jZXNzZWQgb24gdGhlIGVtdWxhdGVkIHNpZGUsIHdoaWNoIGNvdWxkIGFsbG93IGEgbGF0ZXIgY3Jhc2guXG5cblRoZW4sIGltcG9ydGFudGx5LCBgYnJjbWZfYXR0YWNoYCBpcyBjYWxsZWQuIFNvLCB0aGUgc3VjY2Vzc2Z1bCBmaXJtd2FyZSBkb3dubG9hZCBpcyBzdXBwb3NlZCB0byBsZWFkIHRvIGF0dGFjaGluZyB0aGUgZHJpdmVyIHRvIHRoZSBcImRldmljZVwiLiBUaGlzIG1ha2VzIG1lIHdvbmRlcjogY2FuIHdlIHRyaWdnZXIgYnVncyBpbiB0aGUgYXR0YWNobWVudCBwcm9jZXNzIGlmIHRoZSBmaXJtd2FyZSBkb3dubG9hZCB3YXMgc29tZWhvdy4uLiBjb3JydXB0ZWQgb3IgbWFsZm9ybWVkLCBldmVuIGlmIHRoZSBmdW5jdGlvbnMgKnJlcG9ydCogc3VjY2Vzcz8gVGhpcyBpcyB3aGVyZSB0aGUgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IGhpZGUuIFdlIG5lZWQgdG8gZm9jdXMgbm90IGp1c3Qgb24gZW5zdXJpbmcgYSB6ZXJvIHJldHVybiwgYnV0IGFsc28gdGhlIHN0YXRlIG9mIHRoZSBlbXVsYXRlZCBkZXZpY2UuIFRoZSBlbXVsYXRvciBuZWVkcyB0byBiZSBhcyByZWFsaXN0aWMgYXMgcG9zc2libGUgdG8gZXhwb3NlIHRoZSBtb3N0IGJ1Z3MuIFRoZSBkcml2ZXIgbWlnaHQgYXNzdW1lIGEgY2VydGFpbiBmaXJtd2FyZSBzdGF0ZSBhZnRlciB0aGUgZG93bmxvYWQsIGFuZCBpZiB0aGF0IGFzc3VtcHRpb24gaXMgd3JvbmcsIHdlJ3JlIGxpa2VseSB0byBoYXZlIGEgYnVnLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgYXQgdGhlIGVtdWxhdG9yJ3MgVVNCIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg1MywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDg6MzcuMzE3NjgwNzUyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDI0ODE2OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oPTI5OT1pbnQgYnJjbWZfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpzZXR0aW5ncyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTMwMC0vKiBJbmRpY2F0aW9uIGZyb20gYnVzIG1vZHVsZSByZWdhcmRpbmcgcHJlc2VuY2UvaW5zZXJ0aW9uIG9mIGRvbmdsZS4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MzAxOmludCBicmNtZl9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMzAyLS8qIEluZGljYXRpb24gZnJvbSBidXMgbW9kdWxlIHJlZ2FyZGluZyByZW1vdmFsL2Fic2VuY2Ugb2YgZG9uZ2xlICovXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtMTgtICogKG1vZHVsZSkgaW5pdGlsaWF6YXRpb24gdGFrZXMgcGxhY2UuIFRoZSBkZXZpY2Ugc3BlY2lmaWMgc2V0dGluZ3MgaXMgcGFydFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaDoxOTogKiBvZiB0aGUgZHJ2ciBzdHJ1Y3QgYW5kIHNob3VsZCBiZSBpbml0aWFsaXplZCBvbiBldmVyeSBicmNtZl9hdHRhY2guXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTIwLSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMzE1PWludCBicmNtZl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKnNldHRpbmdzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTM0NDppbnQgYnJjbWZfYXR0YWNoKHN0cnVjdCBkZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzNDUte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yMTg1PXN0YXRpYyB2b2lkIGJyY21mX3BjaWVfc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yMjY1LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmM6MjI2NjpcXHRyZXQgPSBicmNtZl9hdHRhY2goXFx1MDAyNmRldmluZm8tXFx1MDAzZXBkZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYy0yMjY3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jPTQyMjM9c3RhdGljIHZvaWQgYnJjbWZfc2Rpb19maXJtd2FyZV9jYWxsYmFjayhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBlcnIsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQ0MTMtXFx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gbGF5ZXIsIHJlc2VydmUgaGRyIHNwYWNlICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYzo0NDE0OlxcdGVyciA9IGJyY21mX2F0dGFjaChzZGlvZC1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jLTQ0MTUtXFx0aWYgKGVyciAhPSAwKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYzo0NDE2OlxcdFxcdGJyY21mX2VycihcXFwiYnJjbWZfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYy00NDE3LVxcdFxcdGdvdG8gZnJlZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYz0xMTc2PXN0YXRpYyB2b2lkIGJyY21mX3VzYl9wcm9iZV9waGFzZTIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcmV0LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyMTAtXFx0LyogQXR0YWNoIHRvIHRoZSBjb21tb24gZHJpdmVyIGludGVyZmFjZSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYzoxMjExOlxcdHJldCA9IGJyY21mX2F0dGFjaChkZXZpbmZvLVxcdTAwM2VkZXYpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy91c2IuYy0xMjEyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmM9MTI0ND1zdGF0aWMgaW50IGJyY21mX3VzYl9wcm9iZV9jYihzdHJ1Y3QgYnJjbWZfdXNiZGV2X2luZm8gKmRldmluZm8sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI5MC1cXHRcXHRcXHRnb3RvIGZhaWw7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyOTE6XFx0XFx0cmV0ID0gYnJjbWZfYXR0YWNoKGRldmluZm8tXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyOTItXFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDg6MzcuODYwMTY3ODU5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDQ4NzUyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBpbnN0cnVjdGlvbnMsIGFzIGlmIHRoZXkncmUgbXkgbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIGBicmNtZl9hdHRhY2hgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIHRoZSBwbGFjZSB0byBzdGFydCBpcyB0aGUgYGJyY21mX2F0dGFjaGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQncyBpbiBgY29yZS5jYC4gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBtYWtlcyB0aGlzIHRpY2suIEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSB0aGUgcG9pbnQgd2hlcmUgYSBuZXcgQnJvYWRjb20gV2ktRmkgZHJpdmVyIGluc3RhbmNlIGdldHPigKYgd2VsbCwgYXR0YWNoZWQhIEknbSBob3BpbmcgSSBjYW4gZWFzaWx5IHNlZSBob3cgYWxsIG9mIHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmVzIGFyZSBpbml0aWFsaXplZCBhbmQgaG9va2VkIHVwLiBUaW1lIHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHVuZGVyIHRoZSBob29kLiBJIHN1c3BlY3QgdGhhdCB0aGVyZSBzaG91bGQgYmUgc29tZSBzb3J0IG9mIGRldmljZSBpbml0aWFsaXphdGlvbiBoYXBwZW5pbmcgYXMgcGFydCBvZiB0aGUgcHJvY2VkdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzcxOCwiT3V0cHV0VG9rZW5zIjo1NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ4OjQxLjcwNTA0NjExWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MjM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNDQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNDQ6XFx0aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuMTM0NTpcXHR7XFxuMTM0NjpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcXG4xMzQ3OlxcdFxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBidXNfaWYtXFx1MDAzZWRydnI7XFxuMTM0ODpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xMzQ5OlxcdFxcdGludCBpO1xcbjEzNTA6XFx0XFxuMTM1MTpcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJFbnRlclxcXFxuXFxcIik7XFxuMTM1MjpcXHRcXG4xMzUzOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRydnItXFx1MDAzZWlmMmJzcyk7IGkrKylcXG4xMzU0OlxcdFxcdFxcdGRydnItXFx1MDAzZWlmMmJzc1tpXSA9IEJSQ01GX0JTU0lEWF9JTlZBTElEO1xcbjEzNTU6XFx0XFxuMTM1NjpcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZkcnZyLVxcdTAwM2Vwcm90b19ibG9jayk7XFxuMTM1NzpcXHRcXG4xMzU4OlxcdFxcdC8qIExpbmsgdG8gYnVzIG1vZHVsZSAqL1xcbjEzNTk6XFx0XFx0ZHJ2ci1cXHUwMDNlaGRybGVuID0gMDtcXG4xMzYwOlxcdFxcbjEzNjE6XFx0XFx0cmV0ID0gYnJjbWZfZnd2aWRfYXR0YWNoKGRydnIpO1xcbjEzNjI6XFx0XFx0aWYgKHJldCAhPSAwKSB7XFxuMTM2MzpcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiYnJjbWZfZnd2aWRfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuMTM2NDpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTM2NTpcXHRcXHR9XFxuMTM2NjpcXHRcXG4xMzY3OlxcdFxcdC8qIEF0dGFjaCBhbmQgbGluayBpbiB0aGUgcHJvdG9jb2wgKi9cXG4xMzY4OlxcdFxcdHJldCA9IGJyY21mX3Byb3RvX2F0dGFjaChkcnZyKTtcXG4xMzY5OlxcdFxcdGlmIChyZXQgIT0gMCkge1xcbjEzNzA6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImJyY21mX3Byb3RfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuMTM3MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTM3MjpcXHRcXHR9XFxuMTM3MzpcXHRcXG4xMzc0OlxcdFxcdC8qIGF0dGFjaCBmaXJtd2FyZSBldmVudCBoYW5kbGVyICovXFxuMTM3NTpcXHRcXHRyZXQgPSBicmNtZl9md2VoX2F0dGFjaChkcnZyKTtcXG4xMzc2OlxcdFxcdGlmIChyZXQgIT0gMCkge1xcbjEzNzc6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImJyY21mX2Z3ZWhfYXR0YWNoIGZhaWxlZFxcXFxuXFxcIik7XFxuMTM3ODpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTM3OTpcXHRcXHR9XFxuMTM4MDpcXHRcXG4xMzgxOlxcdFxcdC8qIEF0dGFjaCB0byBldmVudHMgaW1wb3J0YW50IGZvciBjb3JlIGNvZGUgKi9cXG4xMzgyOlxcdFxcdGJyY21mX2Z3ZWhfcmVnaXN0ZXIoZHJ2ciwgQlJDTUZfRV9QU01fV0FUQ0hET0csXFxuMTM4MzpcXHRcXHRcXHRcXHQgICAgYnJjbWZfcHNtX3dhdGNoZG9nX25vdGlmeSk7XFxuMTM4NDpcXHRcXG4xMzg1OlxcdFxcdGJyY21mX2Z3dmlkX2dldF9jZmc4MDIxMV9vcHMoZHJ2cik7XFxuMTM4NjpcXHRcXG4xMzg3OlxcdFxcdHJldCA9IGJyY21mX2J1c19zdGFydGVkKGRydnIsIGRydnItXFx1MDAzZW9wcyk7XFxuMTM4ODpcXHRcXHRpZiAocmV0ICE9IDApIHtcXG4xMzg5OlxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJkb25nbGUgaXMgbm90IHJlc3BvbmRpbmc6IGVycj0lZFxcXFxuXFxcIiwgcmV0KTtcXG4xMzkwOlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xMzkxOlxcdFxcdH1cXG4xMzkyOlxcdFxcbjEzOTM6XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ4OjQxLjcwNTIzMjY5WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDgyODE2NjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBicmNtZl9idXNfc3RhcnRlZCBDYWxsKipcblxuT2theSwgc28gYGJyY21mX2J1c19zdGFydGVkYCBpcyBmaXJpbmcgdXAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uIFRoaXMgbGlrZWx5IHJlcHJlc2VudHMgdGhlIGluaXRpYWwgc3RhZ2Ugb2YgYnVzIGluaXRpYWxpemF0aW9uIGZvciBhIEJyb2FkY29tIFdpLUZpIGRldmljZSwgd2hpY2ggaXMgYSBjcml0aWNhbCBwb2ludC4gSSdsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGxvb2sgYXQgd2hhdCB0aGUgZnVuY3Rpb24gZG9lcywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCByZWxhdGVzIHRvIHRoZSBicm9hZGVyIHN5c3RlbSBhcmNoaXRlY3R1cmUuIElzIHRoaXMgYSBzeW5jaHJvbm91cyBvcGVyYXRpb24/IFdoYXQgcmVzb3VyY2VzIGRvZXMgaXQgYWNxdWlyZT8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgc2hvdWxkIGJlIGltbWVkaWF0ZWx5IGF3YXJlIG9mPyBVbmRlcnN0YW5kaW5nIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMgaGVyZSBpcyBwYXJhbW91bnQgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgYnJpbmctdXAgcHJvY2VkdXJlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGNvcmUgYnVzIGRyaXZlciwgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9uIHBvd2VyIG1hbmFnZW1lbnQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NzQ4LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODo0NS4wNTM1MTczMDJaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTA0MDk5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9idXNfc3RhcnRlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz02OD1NT0RVTEVfUEFSTV9ERVNDKGlhcHAsIFxcXCJFbmFibGUgcGFydGlhbCBzdXBwb3J0IGZvciB0aGUgb2Jzb2xldGVkIEludGVyLUFjY2VzcyBQb2ludCBQcm90b2NvbFxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTcwLSNpZmRlZiBERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3MTovKiBhbHdheXMgc3VjY2VlZCBicmNtZl9idXNfc3RhcnRlZCgpICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jLTcyLXN0YXRpYyBpbnQgYnJjbWZfaWdub3JlX3Byb2JlX2ZhaWw7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEyMDk9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnVzX3Jlc2V0X2ZvcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyMTMtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMjE0OnN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMtMTIxNS17XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEzNDQ9aW50IGJyY21mX2F0dGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEzODYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzoxMzg3OlxcdHJldCA9IGJyY21mX2J1c19zdGFydGVkKGRydnIsIGRydnItXFx1MDAzZW9wcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMzg4LVxcdGlmIChyZXQgIT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODo0NS4xNzQ1NjY5MzVaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4NjI2ODEzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgYW5kIHRoaXMgaXMgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCUkNNRiBCdXMgU3RhcnR1cCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBidXMgc3RhcnR1cCBzZXF1ZW5jZS4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyB3aGVuIGEgQlJDTUYtYmFzZWQgZGV2aWNlIGNvbWVzIG9ubGluZS4gTGV0J3Mgc3RhcnQgd2l0aCBgYnJjbWZfYnVzX3N0YXJ0ZWRgIGluIGBjb3JlLmNgLiBUaGF0IGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgZ29vZCBzaWduOyBpdCBsaWtlbHkgbWFya3MgYSBjcnVjaWFsIHBvaW50LCB0aGUgY3VsbWluYXRpb24gb2Ygc29tZSBzZXR1cCBwaGFzZS4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb3JlIGRyaXZlciBpbnRlcmZhY2VzIHdpdGggdGhlIGJ1cyBpdHNlbGYsIHdoZXRoZXIgaXQncyBTRElPLCBQQ0llLCBvciBzb21ldGhpbmcgZWxzZS4gSSdsbCBiZSBsb29raW5nIGZvciBob3cgaXQgaGFuZGxlcyBpbml0aWFsaXphdGlvbiwgZGV2aWNlIGRldGVjdGlvbiwgcmVzb3VyY2UgYWxsb2NhdGlvbiwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBhY3R1YWwgYWN0aXZhdGlvbiBvZiB0aGUgaGFyZHdhcmUuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ3Jhc3AgdGhlIGZ1bmRhbWVudGFsIG1lY2hhbmljcyBzbyBJIGNhbiB0cm91Ymxlc2hvb3QgYW55IGJ1cy1yZWxhdGVkIGlzc3VlcyBlZmZpY2llbnRseS4gS25vd2luZyB0aGlzIGZsb3cgaXMga2V5IHRvIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU1MzQsIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODo0OS4zNjA4MzgzNzVaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIxNCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIxNDpcXHRzdGF0aWMgaW50IGJyY21mX2J1c19zdGFydGVkKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsIHN0cnVjdCBjZmc4MDIxMV9vcHMgKm9wcylcXG4xMjE1OlxcdHtcXG4xMjE2OlxcdFxcdGludCByZXQgPSAtMTtcXG4xMjE3OlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZiA9IGRydnItXFx1MDAzZWJ1c19pZjtcXG4xMjE4OlxcdFxcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xcbjEyMTk6XFx0XFx0c3RydWN0IGJyY21mX2lmICpwMnBfaWZwO1xcbjEyMjA6XFx0XFxuMTIyMTpcXHRcXHRicmNtZl9kYmcoVFJBQ0UsIFxcXCJcXFxcblxcXCIpO1xcbjEyMjI6XFx0XFxuMTIyMzpcXHRcXHQvKiBhZGQgcHJpbWFyeSBuZXR3b3JraW5nIGludGVyZmFjZSAqL1xcbjEyMjQ6XFx0XFx0aWZwID0gYnJjbWZfYWRkX2lmKGRydnIsIDAsIDAsIGZhbHNlLCBcXFwid2xhbiVkXFxcIixcXG4xMjI1OlxcdFxcdFxcdFxcdCAgIGlzX3ZhbGlkX2V0aGVyX2FkZHIoZHJ2ci1cXHUwMDNlc2V0dGluZ3MtXFx1MDAzZW1hYykgPyBkcnZyLVxcdTAwM2VzZXR0aW5ncy1cXHUwMDNlbWFjIDogTlVMTCk7XFxuMTIyNjpcXHRcXHRpZiAoSVNfRVJSKGlmcCkpXFxuMTIyNzpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihpZnApO1xcbjEyMjg6XFx0XFxuMTIyOTpcXHRcXHRwMnBfaWZwID0gTlVMTDtcXG4xMjMwOlxcdFxcbjEyMzE6XFx0XFx0Lyogc2lnbmFsIGJ1cyByZWFkeSAqL1xcbjEyMzI6XFx0XFx0YnJjbWZfYnVzX2NoYW5nZV9zdGF0ZShidXNfaWYsIEJSQ01GX0JVU19VUCk7XFxuMTIzMzpcXHRcXG4xMjM0OlxcdFxcdC8qIGRvIGJ1cyBzcGVjaWZpYyBwcmVpbml0IGhlcmUgKi9cXG4xMjM1OlxcdFxcdHJldCA9IGJyY21mX2J1c19wcmVpbml0KGJ1c19pZik7XFxuMTIzNjpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjM3OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xMjM4OlxcdFxcbjEyMzk6XFx0XFx0LyogQnVzIGlzIHJlYWR5LCBkbyBhbnkgaW5pdGlhbGl6YXRpb24gKi9cXG4xMjQwOlxcdFxcdHJldCA9IGJyY21mX2NfcHJlaW5pdF9kY21kcyhpZnApO1xcbjEyNDE6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuMTI0MjpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuMTI0MzpcXHRcXG4xMjQ0OlxcdFxcdGJyY21mX2ZlYXRfYXR0YWNoKGRydnIpO1xcbjEyNDU6XFx0XFxuMTI0NjpcXHRcXHRyZXQgPSBicmNtZl9wcm90b19pbml0X2RvbmUoZHJ2cik7XFxuMTI0NzpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4xMjQ4OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xMjQ5OlxcdFxcbjEyNTA6XFx0XFx0YnJjbWZfcHJvdG9fYWRkX2lmKGRydnIsIGlmcCk7XFxuMTI1MTpcXHRcXG4xMjUyOlxcdFxcdGRydnItXFx1MDAzZWNvbmZpZyA9IGJyY21mX2NmZzgwMjExX2F0dGFjaChkcnZyLCBvcHMsXFxuMTI1MzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGRydnItXFx1MDAzZXNldHRpbmdzLVxcdTAwM2VwMnBfZW5hYmxlKTtcXG4xMjU0OlxcdFxcdGlmIChkcnZyLVxcdTAwM2Vjb25maWcgPT0gTlVMTCkge1xcbjEyNTU6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xMjU2OlxcdFxcdFxcdGdvdG8gZmFpbDtcXG4xMjU3OlxcdFxcdH1cXG4xMjU4OlxcdFxcbjEyNTk6XFx0XFx0cmV0ID0gYnJjbWZfbmV0X2F0dGFjaChpZnAsIGZhbHNlKTtcXG4xMjYwOlxcdFxcbjEyNjE6XFx0XFx0aWYgKCghcmV0KSBcXHUwMDI2XFx1MDAyNiAoZHJ2ci1cXHUwMDNlc2V0dGluZ3MtXFx1MDAzZXAycF9lbmFibGUpKSB7XFxuMTI2MjpcXHRcXHRcXHRwMnBfaWZwID0gZHJ2ci1cXHUwMDNlaWZsaXN0WzFdO1xcbjEyNjM6XFx0XFx0XFx0aWYgKHAycF9pZnApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ4OjQ5LjM2MTAxODU0NVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkyOTE1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AgRnVuY3Rpb24gQ2FsbCoqXG5cbk9rYXksIHNvIGBicmNtZl9jX3ByZWluaXRfZGNtZHMoaWZwKWAgaXMgZ2V0dGluZyBjYWxsZWQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgc3l6a2FsbGVyIG9wZXJhdGVzLCBpZiBpdCdzIGVtdWxhdGluZyB0aGUgZGV2aWNlLCBpdCdzIHZlcnkgbGlrZWx5IHRoZSBkb25nbGUgY29tbWFuZHMsIG9yIGBkY21kc2AsIHdpbGwgc2ltcGx5IGJlIHJlY2VpdmVkIGFuZCBlaXRoZXIgaWdub3JlZCBvciByZXNwb25kZWQgdG8gd2l0aCBtZWFuaW5nbGVzcyBkYXRhLiBObyByZWFsIGZpcm13YXJlIHJ1bm5pbmcgaGVyZS4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyB0byBjb25zaWRlciwgZ2l2ZW4gdGhlIGNvbnRleHQuXG5cbk5vdywgaWYgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AgZmFpbHMsIGl0IHJldHVybnMgYSB2YWx1ZSBsZXNzIHRoYW4gemVybywgYW5kIHdlIGJyYW5jaCB0byBgZmFpbGAuIFRoYXQncyBzdGFuZGFyZCBlcnJvciBoYW5kbGluZy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgaXMgYGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsYCB1c2VkIGhlcmU/XCIuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aGF0IHZhcmlhYmxlLCBvciBpdHMgZXF1aXZhbGVudCwgaXMgaGFuZGxlZCB0byB0cnVseSB1bmRlcnN0YW5kIHRoZSBmYWlsIHBhdGguIFRoaXMgaXMga2V5IHRvIGRldGVybWluZSB3aGV0aGVyIHdlIGNvbnRpbnVlIG9yIGV4aXQuIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSB0byBzZWUgd2hhdCB0aGF0IGlzIGRvaW5nLiBJJ2xsIGZvY3VzIG9uIHRoZSBmYWlsdXJlIHBhdGggbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjYxNiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ4OjU0LjE1MzkzODk3N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1NDU4OTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2lnbm9yZV9wcm9iZV9mYWlsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jPTY4PU1PRFVMRV9QQVJNX0RFU0MoaWFwcCwgXFxcIkVuYWJsZSBwYXJ0aWFsIHN1cHBvcnQgZm9yIHRoZSBvYnNvbGV0ZWQgSW50ZXItQWNjZXNzIFBvaW50IFByb3RvY29sXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtNzEtLyogYWx3YXlzIHN1Y2NlZWQgYnJjbWZfYnVzX3N0YXJ0ZWQoKSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3MjpzdGF0aWMgaW50IGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzo3Mzptb2R1bGVfcGFyYW1fbmFtZWQoaWdub3JlX3Byb2JlX2ZhaWwsIGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsLCBpbnQsIDApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy03NC1NT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9wcm9iZV9mYWlsLCBcXFwiYWx3YXlzIHN1Y2NlZWQgcHJvYmUgZm9yIGRlYnVnZ2luZ1xcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jPTUxMj1zdHJ1Y3QgYnJjbWZfbXBfZGV2aWNlICpicmNtZl9nZXRfbW9kdWxlX3BhcmFtKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy01MzMtI2lmZGVmIERFQlVHXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jOjUzNDpcXHRzZXR0aW5ncy1cXHUwMDNlaWdub3JlX3Byb2JlX2ZhaWwgPSAhIWJyY21mX2lnbm9yZV9wcm9iZV9mYWlsO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYy01MzUtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ4OjU0LjI1OTQwNTA2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NzA1MzM5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFN5emthbGxlciBGdXp6aW5nIFZlY3RvcioqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IHRoaXMgYGJyY21mX2lnbm9yZV9wcm9iZV9mYWlsYCBmdW5jdGlvbiBhbmQgaXQncyBvbmx5IGNvbXBpbGVkIGluIHdoZW4gYERFQlVHYCBpcyBkZWZpbmVkLiBUaGF0J3MgYSByZWQgZmxhZy4gSSBkb24ndCB0eXBpY2FsbHkgc2VlIGBERUJVR2AgZGVmaW5lZCBpbiB0aGUgc3l6a2FsbGVyIGtlcm5lbHMsIHNvIHRoaXMgcGF0aCBpcyBsaWtlbHkgZGVhZC4gQnV0IHdhaXQsIEkgbmVlZCB0byBjb25zaWRlciBhIGRpZmZlcmVudCByb3V0ZSFcblxuSSBzZWUgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AuIFRoaXMgZnVuY3Rpb24gaXMgc2VuZGluZyBjb21tYW5kcyB0byB0aGUgQnJvYWRjb20gZGV2aWNlLiBJZiB0aGUgZGV2aWNlIGRvZXNuJ3QgcmVzcG9uZCBjb3JyZWN0bHksIHRoZXJlJ3MgYSB0aW1lb3V0LCB3aGljaCBpcyBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gVGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyJ3MgVVNCIGZ1enplciBnZW5lcmF0ZSAqdmFsaWQqIHJlc3BvbnNlcyB0byB0aGVzZSBgZGNtZHNgPyBTeXprYWxsZXIncyBVU0IgZnV6emVyIGdpdmVzIHVzIHRoZSBwb3dlciB0byBwcm92aWRlIGNvbXBsZXRlbHkgYXJiaXRyYXJ5IHJlc3BvbnNlcyB0byBVU0IgcmVxdWVzdHMuXG5cbkhvd2V2ZXIsIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIGlzbid0IHNlbmRpbmcgYSBzaW5nbGUgY29tbWFuZDsgaXQncyBzZW5kaW5nICptdWx0aXBsZSogY29tbWFuZHMsIGFuZCBleHBlY3RzIHZlcnkgc3BlY2lmaWMgcmVzcG9uc2VzLiBOb3cgSSdtIGdldHRpbmcgc29tZXdoZXJlLi4uIHRoYXQgY3JlYXRlcyBtb3JlIG9mIGEgY2hhbGxlbmdlLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIGFuZCB1bmRlcnN0YW5kIHRoZSBleHBlY3RlZCBzZXF1ZW5jZSBvZiBjb21tdW5pY2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQ0OSwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODo1OC43Mjk5NDI2N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI4ODczMDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2NfcHJlaW5pdF9kY21kc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYz0yNDg9c3RhdGljIGludCBicmNtZl9jX3Byb2Nlc3NfY2FsX2Jsb2Ioc3RydWN0IGJyY21mX2lmICppZnApXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtMjY0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYzoyNjU6aW50IGJyY21mX2NfcHJlaW5pdF9kY21kcyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMtMjY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaD02OT12b2lkIGJyY21mX3JlbGVhc2VfbW9kdWxlX3BhcmFtKHN0cnVjdCBicmNtZl9tcF9kZXZpY2UgKm1vZHVsZV9wYXJhbSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmgtNzEtLyogU2V0cyBkb25nbGUgbWVkaWEgaW5mbyAoZHJ2X3ZlcnNpb24sIG1hYyBhZGRyZXNzKS4gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmg6NzI6aW50IGJyY21mX2NfcHJlaW5pdF9kY21kcyhzdHJ1Y3QgYnJjbWZfaWYgKmlmcCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oLTczLWludCBicmNtZl9jX3NldF9jdXJfZXRoZXJhZGRyKHN0cnVjdCBicmNtZl9pZiAqaWZwLCBjb25zdCB1OCAqYWRkcik7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jPTEyMTQ9c3RhdGljIGludCBicmNtZl9idXNfc3RhcnRlZChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyLCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyMzktXFx0LyogQnVzIGlzIHJlYWR5LCBkbyBhbnkgaW5pdGlhbGl6YXRpb24gKi9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jOjEyNDA6XFx0cmV0ID0gYnJjbWZfY19wcmVpbml0X2RjbWRzKGlmcCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMjQxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0ODo1OC44NTg4MjEwMjJaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2NDQwNjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBgYnJjbWZfY19wcmVpbml0X2RjbWRzYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byBgYnJjbWZfY19wcmVpbml0X2RjbWRzYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGxpa2VseSB0byBiZSBhYm91dCBjb250ZXh0LiBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gc2l0IHdpdGhpbiB0aGUgYnJvYWRlciBCcm9hZGNvbSBXaUZpIGRyaXZlciBhcmNoaXRlY3R1cmU/IElzIGl0IGEgY29yZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBhIGhlbHBlciBmdW5jdGlvbiBjYWxsZWQgZHVyaW5nIGRyaXZlciBsb2FkaW5nLCBvciBwZXJoYXBzIHNvbWV0aGluZyB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBldmVudD8gVGhlIG5hbWUgaXRzZWxmIHN1Z2dlc3RzIHByZS1pbml0aWFsaXphdGlvbiwgc28gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRhc2tzIGxpa2UgcG9zc2libHkgc2V0dGluZyB1cCBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLCBjb25maWd1cmluZyBoYXJkd2FyZSByZWdpc3RlcnMgaW4gYSBiYXNpYyBzdGF0ZSwgb3IgcG90ZW50aWFsbHkgbG9hZGluZyBmaXJtd2FyZSBvciBtaWNyb2NvZGUuIEknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gcmVtZW1iZXIgd2hhdCB0aGUgZXhwZWN0ZWQgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBpcyBpbiB0aGF0IGNhc2UsIGFuZCBpZiB0aGUgZnVuY3Rpb24gaXMgY29tcGF0aWJsZSB3aXRoIGFueSBnaXZlbiBoYXJkd2FyZS5cblxuSSdtIHByb2JhYmx5IGdvaW5nIHRvIGJlIG1lbnRhbGx5IGZvcm11bGF0aW5nIGEgc2VyaWVzIG9mIHF1ZXN0aW9uczogRG9lcyB0aGlzIGRlYWwgd2l0aCB0aGUgU0RJTywgUENJZSwgb3IgVVNCIGludGVyZmFjZSBsYXllcnM/IFdoYXQncyB0aGUgdHlwaWNhbCBmbG93IG9mIGNvbnRyb2wgKmJlZm9yZSogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGFuZCAqYWZ0ZXIqIGl0IGNvbXBsZXRlcz8gSSdsbCBwcm9iYWJseSBzdGFydCB2aXN1YWxpemluZyB0aGUgY2FsbCBzdGFjaywgYW50aWNpcGF0aW5nIHdoYXQgb3RoZXIgZnVuY3Rpb25zIG1pZ2h0IGNhbGwgdGhpcyBvbmUsIGFuZCB3aGljaCBmdW5jdGlvbnMgaXQgbWlnaHQgY2FsbCBpbiB0dXJuLlxuXG5NeSBuZXh0IHN0ZXAgd2lsbCBsaWtlbHkgaW52b2x2ZSB0aGlua2luZyBvZiBhcmVhcyBvZiBwb3RlbnRpYWwgdHJvdWJsZS4gQXJlIHRoZXJlIGFueSBrbm93biBlcnJhdGEgcmVsYXRlZCB0byB0aGlzIHNwZWNpZmljIHByZS1pbml0IHN0YWdlPyBXaGF0IGFyZSB0aGUgY29tbW9uIGZhaWx1cmUgbW9kZXMsIGFuZCB3aGF0IGFyZSB0aGUgbG9nZ2luZyBtZWNoYW5pc21zIGluIHBsYWNlIHRvIGRpYWdub3NlIHByb2JsZW1zPyBJJ20gcHJvYmFibHkgYWxzbyBtZW50YWxseSBjaGVja2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBlc3BlY2lhbGx5IGlmIHRoaXMgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggaGFyZHdhcmUgcmVnaXN0ZXJzIG9yIHNoYXJlZCBtZW1vcnkuIEknbGwgbmVlZCB0byByZW1lbWJlciBpZiB0aGVyZSBhcmUgYW55IGtub3duIHRpbWluZyBjb25zdHJhaW50cyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLlxuXG5JZiBJJ20gZGVidWdnaW5nIG9yIHRyYWNpbmcgYW4gaXNzdWUsIEknbGwgYmUgZm9ybWluZyBhIGh5cG90aGVzaXMgYWJvdXQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzICpzdXBwb3NlZCogdG8gYmUgZG9pbmcsIGFuZCBob3cgdGhlIG9ic2VydmVkIGJlaGF2aW9yIGRldmlhdGVzIGZyb20gdGhhdCBleHBlY3RlZCBiZWhhdmlvci4gSSdtIGdvaW5nIHRvIHN0YXJ0IG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggdGhlIGNvZGUsIGZvY3VzaW5nIG9uIHRoZSBtb3N0IGNyaXRpY2FsIHNlY3Rpb25zLCBvciBhbnl0aGluZyB0aGF0IHNlZW1zIHVudXN1YWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4NTMzLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDk6MDMuMjIzMjMwNjU4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjY1OlxcdGludCBicmNtZl9jX3ByZWluaXRfZGNtZHMoc3RydWN0IGJyY21mX2lmICppZnApXFxuIDI2NjpcXHR7XFxuIDI2NzpcXHRcXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gaWZwLVxcdTAwM2VkcnZyO1xcbiAyNjg6XFx0XFx0c3RydWN0IGJyY21mX2Z3ZWhfaW5mbyAqZndlaCA9IGRydnItXFx1MDAzZWZ3ZWg7XFxuIDI2OTpcXHRcXHR1OCBidWZbQlJDTUZfRENNRF9TTUxFTl07XFxuIDI3MDpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXM7XFxuIDI3MTpcXHRcXHRzdHJ1Y3QgYnJjbWZfcmV2X2luZm9fbGUgcmV2aW5mbztcXG4gMjcyOlxcdFxcdHN0cnVjdCBicmNtZl9yZXZfaW5mbyAqcmk7XFxuIDI3MzpcXHRcXHRjaGFyICpjbG12ZXI7XFxuIDI3NDpcXHRcXHRjaGFyICpwdHI7XFxuIDI3NTpcXHRcXHRzMzIgZXJyO1xcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHRpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihpZnAtXFx1MDAzZW1hY19hZGRyKSkge1xcbiAyNzg6XFx0XFx0XFx0Lyogc2V0IG1hYyBhZGRyZXNzICovXFxuIDI3OTpcXHRcXHRcXHRlcnIgPSBicmNtZl9jX3NldF9jdXJfZXRoZXJhZGRyKGlmcCwgaWZwLVxcdTAwM2VtYWNfYWRkcik7XFxuIDI4MDpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMjgxOlxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gMjgyOlxcdFxcdH0gZWxzZSB7XFxuIDI4MzpcXHRcXHRcXHQvKiByZXRyaWV2ZSBtYWMgYWRkcmVzcyAqL1xcbiAyODQ6XFx0XFx0XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfZ2V0KGlmcCwgXFxcImN1cl9ldGhlcmFkZHJcXFwiLCBpZnAtXFx1MDAzZW1hY19hZGRyLFxcbiAyODU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihpZnAtXFx1MDAzZW1hY19hZGRyKSk7XFxuIDI4NjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAyODc6XFx0XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcIlJldHJpZXZpbmcgY3VyX2V0aGVyYWRkciBmYWlsZWQsICVkXFxcXG5cXFwiLCBlcnIpO1xcbiAyODg6XFx0XFx0XFx0XFx0Z290byBkb25lO1xcbiAyODk6XFx0XFx0XFx0fVxcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHRcXHRpZiAoZXRoZXJfYWRkcl9lcXVhbF91bmFsaWduZWQoaWZwLVxcdTAwM2VtYWNfYWRkciwgYnJjbWZfZGVmYXVsdF9tYWNfYWRkcmVzcykpIHtcXG4gMjkyOlxcdFxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJEZWZhdWx0IE1BQyBpcyB1c2VkLCByZXBsYWNpbmcgd2l0aCByYW5kb20gTUFDIHRvIGF2b2lkIGNvbmZsaWN0c1xcXFxuXFxcIik7XFxuIDI5MzpcXHRcXHRcXHRcXHRldGhfcmFuZG9tX2FkZHIoaWZwLVxcdTAwM2VtYWNfYWRkcik7XFxuIDI5NDpcXHRcXHRcXHRcXHRpZnAtXFx1MDAzZW5kZXYtXFx1MDAzZWFkZHJfYXNzaWduX3R5cGUgPSBORVRfQUREUl9SQU5ET007XFxuIDI5NTpcXHRcXHRcXHRcXHRlcnIgPSBicmNtZl9jX3NldF9jdXJfZXRoZXJhZGRyKGlmcCwgaWZwLVxcdTAwM2VtYWNfYWRkcik7XFxuIDI5NjpcXHRcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMjk3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gMjk4OlxcdFxcdFxcdH1cXG4gMjk5OlxcdFxcdH1cXG4gMzAwOlxcdFxcbiAzMDE6XFx0XFx0bWVtY3B5KGlmcC1cXHUwMDNlZHJ2ci1cXHUwMDNlbWFjLCBpZnAtXFx1MDAzZW1hY19hZGRyLCBzaXplb2YoaWZwLVxcdTAwM2VkcnZyLVxcdTAwM2VtYWMpKTtcXG4gMzAyOlxcdFxcdG1lbWNweShpZnAtXFx1MDAzZWRydnItXFx1MDAzZXdpcGh5LVxcdTAwM2VwZXJtX2FkZHIsIGlmcC1cXHUwMDNlZHJ2ci1cXHUwMDNlbWFjLCBFVEhfQUxFTik7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdGJ1cyA9IGlmcC1cXHUwMDNlZHJ2ci1cXHUwMDNlYnVzX2lmO1xcbiAzMDU6XFx0XFx0cmkgPSBcXHUwMDI2aWZwLVxcdTAwM2VkcnZyLVxcdTAwM2VyZXZpbmZvO1xcbiAzMDY6XFx0XFxuIDMwNzpcXHRcXHRlcnIgPSBicmNtZl9maWxfY21kX2RhdGFfZ2V0KGlmcCwgQlJDTUZfQ19HRVRfUkVWSU5GTyxcXG4gMzA4OlxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnJldmluZm8sIHNpemVvZihyZXZpbmZvKSk7XFxuIDMwOTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAzMTA6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcInJldHJpZXZpbmcgcmV2aXNpb24gaW5mbyBmYWlsZWQsICVkXFxcXG5cXFwiLCBlcnIpO1xcbiAzMTE6XFx0XFx0XFx0c3Ryc2NweShyaS1cXHUwMDNlY2hpcG5hbWUsIFxcXCJVTktOT1dOXFxcIiwgc2l6ZW9mKHJpLVxcdTAwM2VjaGlwbmFtZSkpO1xcbiAzMTI6XFx0XFx0fSBlbHNlIHtcXG4gMzEzOlxcdFxcdFxcdHJpLVxcdTAwM2V2ZW5kb3JpZCA9IGxlMzJfdG9fY3B1KHJldmluZm8udmVuZG9yaWQpO1xcbiAzMTQ6XFx0XFx0XFx0cmktXFx1MDAzZWRldmljZWlkID0gbGUzMl90b19jcHUocmV2aW5mby5kZXZpY2VpZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ5OjAzLjIyMzQ2ODE5OFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg1Mjk3NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBjb2RlIHNuaXBwZXQsIHByZXNlbnRlZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBJbnRlcmFjdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgc2VlIGl0J3Mga2lja2luZyB0aGluZ3Mgb2ZmIHdpdGggdGhlIGBCUkNNRl9DX0dFVF9SRVZJTkZPYCBjb21tYW5kLiBTdGFuZGFyZCBvcGVyYXRpbmcgcHJvY2VkdXJlLCB1c3VhbGx5IHRoZSBmaXJzdCB0aGluZyB5b3UgZ3JhYiB3aGVuIHlvdSdyZSBwcm9iaW5nIGEgQnJvYWRjb20gV2ktRmkgZGV2aWNlLiBCZXlvbmQgdGhhdCwgaXQncyBjbGVhcmx5IHNlbmRpbmcgb3RoZXIgY29tbWFuZHMgdG9vLCB3aXRob3V0IHNwZWNpZnlpbmcuIEdvdHRhIGZpbmQgdGhlIGNhbGwgdG8gYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldGAuIEhtbSwgYSBjcml0aWNhbCBmdW5jdGlvbiBoZXJlLCB0aGF0IGltcGxpZXMgd2UgYXJlIHNldHRpbmcgdXAgYSBzdGF0ZSBhbmQgZ3JhYmJpbmcgc29tZSB2YWx1YWJsZSBpbmZvLlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoZSBgaWZgIHN0YXRlbWVudC4gSWYgYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldGAgZmFpbHMsIHRoYXQncyBhIHByb2JsZW0uIEltbWVkaWF0ZWx5LCB3ZSBqdW1wIHRvIGBkb25lYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBpbiB0aGUgYGRvbmVgIHNlY3Rpb24uIEZhaWx1cmUgaGVyZSBjb3VsZCBpbmRpY2F0ZSBhIGNvbW11bmljYXRpb24gcHJvYmxlbSB3aXRoIHRoZSBmaXJtd2FyZSwgYW4gdW5zdXBwb3J0ZWQgaW92YXIsIGFuIGludmFsaWQgcGFyYW1ldGVyLCBvciBzb21lIG90aGVyIGNyaXRpY2FsIGlzc3VlLiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHdoYXQgdGhlIGBkb25lYCBwYXRoIGVudGFpbHMgdG8gcGlucG9pbnQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBmYWlsdXJlLiBXaGF0IGFyZSB0aGUgY2xlYW51cCBzdGVwcz8gQXJlIHRoZXJlIGFueSBlcnJvciBtZXNzYWdlcz8gSXQncyBhbGwgYWJvdXQgZGlhZ25vc3RpY3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5OTgxLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo0OTowNy40MDg3NjkzNzZaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0XFx0XFx0cmktXFx1MDAzZXJhZGlvcmV2ID0gbGUzMl90b19jcHUocmV2aW5mby5yYWRpb3Jldik7XFxuIDMxNjpcXHRcXHRcXHRyaS1cXHUwMDNlY29yZXJldiA9IGxlMzJfdG9fY3B1KHJldmluZm8uY29yZXJldik7XFxuIDMxNzpcXHRcXHRcXHRyaS1cXHUwMDNlYm9hcmRpZCA9IGxlMzJfdG9fY3B1KHJldmluZm8uYm9hcmRpZCk7XFxuIDMxODpcXHRcXHRcXHRyaS1cXHUwMDNlYm9hcmR2ZW5kb3IgPSBsZTMyX3RvX2NwdShyZXZpbmZvLmJvYXJkdmVuZG9yKTtcXG4gMzE5OlxcdFxcdFxcdHJpLVxcdTAwM2Vib2FyZHJldiA9IGxlMzJfdG9fY3B1KHJldmluZm8uYm9hcmRyZXYpO1xcbiAzMjA6XFx0XFx0XFx0cmktXFx1MDAzZWRyaXZlcnJldiA9IGxlMzJfdG9fY3B1KHJldmluZm8uZHJpdmVycmV2KTtcXG4gMzIxOlxcdFxcdFxcdHJpLVxcdTAwM2V1Y29kZXJldiA9IGxlMzJfdG9fY3B1KHJldmluZm8udWNvZGVyZXYpO1xcbiAzMjI6XFx0XFx0XFx0cmktXFx1MDAzZWJ1cyA9IGxlMzJfdG9fY3B1KHJldmluZm8uYnVzKTtcXG4gMzIzOlxcdFxcdFxcdHJpLVxcdTAwM2VwaHl0eXBlID0gbGUzMl90b19jcHUocmV2aW5mby5waHl0eXBlKTtcXG4gMzI0OlxcdFxcdFxcdHJpLVxcdTAwM2VwaHlyZXYgPSBsZTMyX3RvX2NwdShyZXZpbmZvLnBoeXJldik7XFxuIDMyNTpcXHRcXHRcXHRyaS1cXHUwMDNlYW5hcmV2ID0gbGUzMl90b19jcHUocmV2aW5mby5hbmFyZXYpO1xcbiAzMjY6XFx0XFx0XFx0cmktXFx1MDAzZWNoaXBwa2cgPSBsZTMyX3RvX2NwdShyZXZpbmZvLmNoaXBwa2cpO1xcbiAzMjc6XFx0XFx0XFx0cmktXFx1MDAzZW52cmFtcmV2ID0gbGUzMl90b19jcHUocmV2aW5mby5udnJhbXJldik7XFxuIDMyODpcXHRcXG4gMzI5OlxcdFxcdFxcdC8qIHVzZSByZXZpbmZvIGlmIG5vdCBrbm93biB5ZXQgKi9cXG4gMzMwOlxcdFxcdFxcdGlmICghYnVzLVxcdTAwM2VjaGlwKSB7XFxuIDMzMTpcXHRcXHRcXHRcXHRidXMtXFx1MDAzZWNoaXAgPSBsZTMyX3RvX2NwdShyZXZpbmZvLmNoaXBudW0pO1xcbiAzMzI6XFx0XFx0XFx0XFx0YnVzLVxcdTAwM2VjaGlwcmV2ID0gbGUzMl90b19jcHUocmV2aW5mby5jaGlwcmV2KTtcXG4gMzMzOlxcdFxcdFxcdH1cXG4gMzM0OlxcdFxcdH1cXG4gMzM1OlxcdFxcdHJpLVxcdTAwM2VyZXN1bHQgPSBlcnI7XFxuIDMzNjpcXHRcXG4gMzM3OlxcdFxcdGlmIChidXMtXFx1MDAzZWNoaXApXFxuIDMzODpcXHRcXHRcXHRicmNtZl9jaGlwX25hbWUoYnVzLVxcdTAwM2VjaGlwLCBidXMtXFx1MDAzZWNoaXByZXYsXFxuIDMzOTpcXHRcXHRcXHRcXHRcXHRyaS1cXHUwMDNlY2hpcG5hbWUsIHNpemVvZihyaS1cXHUwMDNlY2hpcG5hbWUpKTtcXG4gMzQwOlxcdFxcbiAzNDE6XFx0XFx0LyogRG8gYW55IENMTSBkb3dubG9hZGluZyAqL1xcbiAzNDI6XFx0XFx0ZXJyID0gYnJjbWZfY19wcm9jZXNzX2NsbV9ibG9iKGlmcCk7XFxuIDM0MzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAzNDQ6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImRvd25sb2FkIENMTSBibG9iIGZpbGUgZmFpbGVkLCAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gMzQ1OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gMzQ2OlxcdFxcdH1cXG4gMzQ3OlxcdFxcbiAzNDg6XFx0XFx0LyogRG8gVHhDYXAgZG93bmxvYWRpbmcsIGlmIG5lZWRlZCAqL1xcbiAzNDk6XFx0XFx0ZXJyID0gYnJjbWZfY19wcm9jZXNzX3R4Y2FwX2Jsb2IoaWZwKTtcXG4gMzUwOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIDM1MTpcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiZG93bmxvYWQgVHhDYXAgYmxvYiBmaWxlIGZhaWxlZCwgJWRcXFxcblxcXCIsIGVycik7XFxuIDM1MjpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDM1MzpcXHRcXHR9XFxuIDM1NDpcXHRcXG4gMzU1OlxcdFxcdC8qIERvd25sb2FkIGV4dGVybmFsIGNhbGlicmF0aW9uIGJsb2IsIGlmIGF2YWlsYWJsZSAqL1xcbiAzNTY6XFx0XFx0ZXJyID0gYnJjbWZfY19wcm9jZXNzX2NhbF9ibG9iKGlmcCk7XFxuIDM1NzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiAzNTg6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImRvd25sb2FkIGNhbGlicmF0aW9uIGJsb2IgZmlsZSBmYWlsZWQsICVkXFxcXG5cXFwiLCBlcnIpO1xcbiAzNTk6XFx0XFx0XFx0Z290byBkb25lO1xcbiAzNjA6XFx0XFx0fVxcbiAzNjE6XFx0XFxuIDM2MjpcXHRcXHQvKiBxdWVyeSBmb3IgJ3ZlcicgdG8gZ2V0IHZlcnNpb24gaW5mbyBmcm9tIGZpcm13YXJlICovXFxuIDM2MzpcXHRcXHRtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7XFxuIDM2NDpcXHRcXHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9nZXQoaWZwLCBcXFwidmVyXFxcIiwgYnVmLCBzaXplb2YoYnVmKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjQ5OjA3LjQwODkwMDc3NloiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYxNzExNDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoaXMuIExldCdzIHNlZSBob3cgdGhpcyBnb2VzLlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24ncyBDb250ZXh0KipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiBmdWxseS4gSSd2ZSBnb3QgdGhlIGluaXRpYWwgc25pcHBldCwgYnV0IHRoYXQncyBub3QgZW5vdWdoIHRvIGRyYXcgYW55IGZpcm0gY29uY2x1c2lvbnMuIEJlZm9yZSBJIGNhbiBwcm9wZXJseSBhc3Nlc3MgaXRzIHBlcmZvcm1hbmNlLCBlZmZpY2llbmN5LCBvciBwb3RlbnRpYWwgaXNzdWVzLCBJIGFic29sdXRlbHkgaGF2ZSB0byBzZWUgdGhlICpyZXN0KiBvZiB0aGUgZnVuY3Rpb24uIFdoYXQgYXJlIHRoZSBpbnB1dHMsIHRoZSBvdGhlciBpbnRlcm5hbCBjYWxjdWxhdGlvbnMsIGFuZCBjcnVjaWFsbHksIHdoYXQncyB0aGUgdWx0aW1hdGUgb3V0cHV0PyBVbmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlIGlzIHBhcmFtb3VudCBoZXJlLiBUaGlzIGZyYWdtZW50IGFsb25lIGdpdmVzIG1lIGEgdmVyeSBsaW1pdGVkIHBlcnNwZWN0aXZlLCBhbmQgSSdtIGl0Y2hpbmcgdG8gZ2V0IHRoZSB3aG9sZSBjb250ZXh0LiBJIG5lZWQgdG8gc2VlIHRoZSBlbnRpcmUgaW1wbGVtZW50YXRpb24gdG8gc3RhcnQgZm9ybWluZyBtZWFuaW5nZnVsIGluc2lnaHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTI5NywiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDk6MTAuNTcwNjE2ODA4WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzY1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzY1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuIDM2NjpcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiUmV0cmlldmluZyB2ZXJzaW9uIGluZm9ybWF0aW9uIGZhaWxlZCwgJWRcXFxcblxcXCIsXFxuIDM2NzpcXHRcXHRcXHRcXHQgZXJyKTtcXG4gMzY4OlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gMzY5OlxcdFxcdH1cXG4gMzcwOlxcdFxcdGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gJ1xcXFwwJztcXG4gMzcxOlxcdFxcdHB0ciA9IChjaGFyICopYnVmO1xcbiAzNzI6XFx0XFx0c3Ryc2VwKFxcdTAwMjZwdHIsIFxcXCJcXFxcblxcXCIpO1xcbiAzNzM6XFx0XFxuIDM3NDpcXHRcXHQvKiBQcmludCBmdyB2ZXJzaW9uIGluZm8gKi9cXG4gMzc1OlxcdFxcdGJyY21mX2luZm8oXFxcIkZpcm13YXJlOiAlcyAlc1xcXFxuXFxcIiwgcmktXFx1MDAzZWNoaXBuYW1lLCBidWYpO1xcbiAzNzY6XFx0XFxuIDM3NzpcXHRcXHQvKiBsb2NhdGUgZmlybXdhcmUgdmVyc2lvbiBudW1iZXIgZm9yIGV0aHRvb2wgKi9cXG4gMzc4OlxcdFxcdHB0ciA9IHN0cnJjaHIoYnVmLCAnICcpO1xcbiAzNzk6XFx0XFx0aWYgKCFwdHIpIHtcXG4gMzgwOlxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJSZXRyaWV2aW5nIHZlcnNpb24gbnVtYmVyIGZhaWxlZFxcXCIpO1xcbiAzODE6XFx0XFx0XFx0Z290byBkb25lO1xcbiAzODI6XFx0XFx0fVxcbiAzODM6XFx0XFx0c3Ryc2NweShpZnAtXFx1MDAzZWRydnItXFx1MDAzZWZ3dmVyLCBwdHIgKyAxLCBzaXplb2YoaWZwLVxcdTAwM2VkcnZyLVxcdTAwM2Vmd3ZlcikpO1xcbiAzODQ6XFx0XFxuIDM4NTpcXHRcXHQvKiBRdWVyeSBmb3IgJ2NsbXZlcicgdG8gZ2V0IENMTSB2ZXJzaW9uIGluZm8gZnJvbSBmaXJtd2FyZSAqL1xcbiAzODY6XFx0XFx0bWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpO1xcbiAzODc6XFx0XFx0ZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfZ2V0KGlmcCwgXFxcImNsbXZlclxcXCIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpO1xcbiAzODg6XFx0XFx0aWYgKGVycikge1xcbiAzODk6XFx0XFx0XFx0YnJjbWZfZGJnKFRSQUNFLCBcXFwicmV0cmlldmluZyBjbG12ZXIgZmFpbGVkLCAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gMzkwOlxcdFxcdH0gZWxzZSB7XFxuIDM5MTpcXHRcXHRcXHRidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9ICdcXFxcMCc7XFxuIDM5MjpcXHRcXHRcXHRjbG12ZXIgPSAoY2hhciAqKWJ1ZjtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0XFx0LyogUmVwbGFjZSBhbGwgbmV3bGluZS9saW5lZmVlZCBjaGFyYWN0ZXJzIHdpdGggc3BhY2VcXG4gMzk1OlxcdFxcdFxcdCAqIGNoYXJhY3RlclxcbiAzOTY6XFx0XFx0XFx0ICovXFxuIDM5NzpcXHRcXHRcXHRzdHJyZXBsYWNlKGNsbXZlciwgJ1xcXFxuJywgJyAnKTtcXG4gMzk4OlxcdFxcbiAzOTk6XFx0XFx0XFx0Lyogc3RvcmUgQ0xNIHZlcnNpb24gZm9yIGFkZGluZyBpdCB0byByZXZpbmZvIGRlYnVnZnMgZmlsZSAqL1xcbiA0MDA6XFx0XFx0XFx0bWVtY3B5KGlmcC1cXHUwMDNlZHJ2ci1cXHUwMDNlY2xtdmVyLCBjbG12ZXIsIHNpemVvZihpZnAtXFx1MDAzZWRydnItXFx1MDAzZWNsbXZlcikpO1xcbiA0MDE6XFx0XFxuIDQwMjpcXHRcXHRcXHRicmNtZl9kYmcoSU5GTywgXFxcIkNMTSB2ZXJzaW9uID0gJXNcXFxcblxcXCIsIGNsbXZlcik7XFxuIDQwMzpcXHRcXHR9XFxuIDQwNDpcXHRcXG4gNDA1OlxcdFxcdC8qIHNldCBtcGMgKi9cXG4gNDA2OlxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9pbnRfc2V0KGlmcCwgXFxcIm1wY1xcXCIsIDEpO1xcbiA0MDc6XFx0XFx0aWYgKGVycikge1xcbiA0MDg6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImZhaWxlZCBzZXR0aW5nIG1wY1xcXFxuXFxcIik7XFxuIDQwOTpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDQxMDpcXHRcXHR9XFxuIDQxMTpcXHRcXG4gNDEyOlxcdFxcdGJyY21mX2Nfc2V0X2pvaW5wcmVmX2RlZmF1bHQoaWZwKTtcXG4gNDEzOlxcdFxcbiA0MTQ6XFx0XFx0LyogU2V0dXAgZXZlbnRfbXNncywgZW5hYmxlIEVfSUYgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDk6MTAuNTcwODIwOTI4WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3Mzk4NTI3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeS4gSGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBteSBpbnRlcm5hbCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZDpcblxuKipJbnRlcm5hbCBSZWZsZWN0aW9uIG9uIEZ1bmN0aW9uIENvbXBsZXRpb24qKlxuXG5BbHJpZ2h0LCB0aGF0J3MgZG9uZS4gSSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCBhbmQgbm93IEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBleGVjdXRpb24gcGF0aC4gTGV0IG1lIG1lbnRhbGx5IHdhbGsgdGhyb3VnaCBpdCBvbmUgbW9yZSB0aW1lLiBUaGUgY29yZSBsb2dpYyBoaW5nZXMgb24gdGhlIGludGVycGxheSBvZiBbbWVudGlvbiBrZXkgY29uY2VwdHMgZnJvbSB0aGUgdGV4dCwgZS5nLiwgXCJ0aGUgY29uZGl0aW9uYWwgc3RhdGVtZW50IGFuZCB0aGUgaXRlcmF0aXZlIGxvb3AsXCIgb3IgXCJ0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYW5kIHRoZSByZWN1cnNpdmUgY2FsbHNcIl0uIERpZCBJIGhhbmRsZSBhbGwgdGhlIGVkZ2UgY2FzZXMgSSBhbnRpY2lwYXRlZD8gRGlkIEkgYXBwcm9wcmlhdGVseSBjb25zaWRlciB3aGF0IGhhcHBlbnMgd2hlbiBbbWVudGlvbiBwb3RlbnRpYWwgaW5wdXRzIG9yIHNjZW5hcmlvcyBmcm9tIHRoZSB0ZXh0XT9cblxuSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgbXkgYXNzdW1wdGlvbnMgYWJvdXQgW21lbnRpb24gYSBzcGVjaWZpYyBhc3N1bXB0aW9uIGZyb20gdGhlIGZ1bmN0aW9uLCBlLmcuLCBcIm1lbW9yeSBhbGxvY2F0aW9uXCJdIHdlcmUgY29ycmVjdCwgZ2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgW21lbnRpb24gdGhlIGZ1bmN0aW9uJ3Mgb3ZlcmFsbCBnb2FsXS4gQ291bGQgYW55IG9wdGltaXphdGlvbnMgaGF2ZSBiZWVuIG1hZGU/IFBlcmhhcHMgYnkgW21lbnRpb24gcG90ZW50aWFsIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzLCBpZiB5b3UgY2FuIGluZmVyIHRoZW0gYmFzZWQgb24gdGhlIHRleHQsIGUuZy4sIFwicmVhcnJhbmdpbmcgdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnNcIiBvciBcImVtcGxveWluZyBhIGRpZmZlcmVudCBhbGdvcml0aG0gZm9yIGEgc3BlY2lmaWMgc3RhZ2VcIl0uXG5cbkkgYWxzbyBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBmdW5jdGlvbidzIG91dHB1dCBhbGlnbnMgd2l0aCB0aGUgZXN0YWJsaXNoZWQgc3BlY2lmaWNhdGlvbnMuIFRoZSBbbWVudGlvbiB0aGUgdHlwZSBvZiBvdXRwdXQsIGUuZy4sIFwicmV0dXJuIHZhbHVlXCJdIHNob3VsZCBiZSBjb3JyZWN0bHkgZm9ybWF0dGVkLiBUaGUgZnVuY3Rpb24ncyBpbnRlcm5hbCBiZWhhdmlvdXIgc2hvdWxkIGJlIGFsaWduZWQgd2l0aCB0aGUgcGFyYW1ldGVycyBhbmQgdGhlaXIgY2hhcmFjdGVyaXN0aWNzLiBPdmVyYWxsLCBpcyBpdCB0cnVseSByb2J1c3Q/IERvZXMgaXQgc2NhbGUgd2VsbD8gSSdsbCBwcm9iYWJseSB3YW50IHRvIHRlc3QgdGhhdCBmdXJ0aGVyLlxuXG5UaGUgdGltZSBjb21wbGV4aXR5IGlzIHN0aWxsIHRvcCBvZiBtaW5kOyBiYXNlZCBvbiB0aGUgc3RydWN0dXJlLCBpdCBhcHBlYXJzIHRvIGJlIFttZW50aW9uIHlvdXIgYXNzZXNzbWVudCBvZiB0aGUgdGltZSBjb21wbGV4aXR5LCBlLmcuLCBcIk8obiBsb2cgbikgZHVlIHRvIHRoZSBzb3J0aW5nIHN0ZXBcIiBvciBcIk8oMSlcIl0gaWYgdGhlIGZ1bmN0aW9uIGlzIG5vdCBkZXBlbmRlbnQgb24gc3BlY2lmaWMgcGFyYW1ldGVycy5cblxuRmluYWxseSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbidzIHNpZGUgZWZmZWN0cy4gSSBhc3N1bWUgdGhhdCBpdCBzaG91bGQgbm90IGhhdmUgbW9kaWZpZWQgZ2xvYmFsIHN0YXRlIG9yIHByb2R1Y2VkIHVubmVjZXNzYXJ5IG91dHB1dC4gVGhhdCBpcyB3aGF0IEkgaGFkIGludGVuZGVkLCBhbnl3YXkuXG5cbk5vdywgSSdtIGF0IHRoZSBlbmQuIFRoYXQgc2hvdWxkIGJlIGEgY2xlYW4gYW5kIHNvbGlkIHJlc3VsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTIzMjEsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDk6MTUuMzEwNjc3MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxNSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxNTpcXHRcXHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9nZXQoaWZwLCBcXFwiZXZlbnRfbXNnc1xcXCIsIGZ3ZWgtXFx1MDAzZWV2ZW50X21hc2ssXFxuIDQxNjpcXHRcXHRcXHRcXHRcXHQgICAgICAgZndlaC1cXHUwMDNlZXZlbnRfbWFza19sZW4pO1xcbiA0MTc6XFx0XFx0aWYgKGVycikge1xcbiA0MTg6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcIkdldCBldmVudF9tc2dzIGVycm9yICglZClcXFxcblxcXCIsIGVycik7XFxuIDQxOTpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDQyMDpcXHRcXHR9XFxuIDQyMTpcXHRcXHQvKlxcbiA0MjI6XFx0XFx0ICogQlJDTUZfRV9JRiBjYW4gc2FmZWx5IGJlIHVzZWQgdG8gc2V0IHRoZSBhcHByb3ByaWF0ZSBiaXRcXG4gNDIzOlxcdFxcdCAqIGluIHRoZSBldmVudF9tYXNrIGFzIHRoZSBmaXJtd2FyZSBldmVudCBjb2RlIGlzIGd1YXJhbnRlZWRcXG4gNDI0OlxcdFxcdCAqIHRvIG1hdGNoIHRoZSB2YWx1ZSBvZiBCUkNNRl9FX0lGIGJlY2F1c2UgaXQgaXMgb2xkIGNydWZ0XFxuIDQyNTpcXHRcXHQgKiB0aGF0IGFsbCB2ZW5kb3JzIGhhdmUuXFxuIDQyNjpcXHRcXHQgKi9cXG4gNDI3OlxcdFxcdHNldGJpdChmd2VoLVxcdTAwM2VldmVudF9tYXNrLCBCUkNNRl9FX0lGKTtcXG4gNDI4OlxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX3NldChpZnAsIFxcXCJldmVudF9tc2dzXFxcIiwgZndlaC1cXHUwMDNlZXZlbnRfbWFzayxcXG4gNDI5OlxcdFxcdFxcdFxcdFxcdCAgICAgICBmd2VoLVxcdTAwM2VldmVudF9tYXNrX2xlbik7XFxuIDQzMDpcXHRcXHRpZiAoZXJyKSB7XFxuIDQzMTpcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiU2V0IGV2ZW50X21zZ3MgZXJyb3IgKCVkKVxcXFxuXFxcIiwgZXJyKTtcXG4gNDMyOlxcdFxcdFxcdGdvdG8gZG9uZTtcXG4gNDMzOlxcdFxcdH1cXG4gNDM0OlxcdFxcbiA0MzU6XFx0XFx0LyogU2V0dXAgZGVmYXVsdCBzY2FuIGNoYW5uZWwgdGltZSAqL1xcbiA0MzY6XFx0XFx0ZXJyID0gYnJjbWZfZmlsX2NtZF9pbnRfc2V0KGlmcCwgQlJDTUZfQ19TRVRfU0NBTl9DSEFOTkVMX1RJTUUsXFxuIDQzNzpcXHRcXHRcXHRcXHRcXHQgICAgQlJDTUZfREVGQVVMVF9TQ0FOX0NIQU5ORUxfVElNRSk7XFxuIDQzODpcXHRcXHRpZiAoZXJyKSB7XFxuIDQzOTpcXHRcXHRcXHRicGh5X2VycihkcnZyLCBcXFwiQlJDTUZfQ19TRVRfU0NBTl9DSEFOTkVMX1RJTUUgZXJyb3IgKCVkKVxcXFxuXFxcIixcXG4gNDQwOlxcdFxcdFxcdFxcdCBlcnIpO1xcbiA0NDE6XFx0XFx0XFx0Z290byBkb25lO1xcbiA0NDI6XFx0XFx0fVxcbiA0NDM6XFx0XFxuIDQ0NDpcXHRcXHQvKiBTZXR1cCBkZWZhdWx0IHNjYW4gdW5hc3NvYyB0aW1lICovXFxuIDQ0NTpcXHRcXHRlcnIgPSBicmNtZl9maWxfY21kX2ludF9zZXQoaWZwLCBCUkNNRl9DX1NFVF9TQ0FOX1VOQVNTT0NfVElNRSxcXG4gNDQ2OlxcdFxcdFxcdFxcdFxcdCAgICBCUkNNRl9ERUZBVUxUX1NDQU5fVU5BU1NPQ19USU1FKTtcXG4gNDQ3OlxcdFxcdGlmIChlcnIpIHtcXG4gNDQ4OlxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJCUkNNRl9DX1NFVF9TQ0FOX1VOQVNTT0NfVElNRSBlcnJvciAoJWQpXFxcXG5cXFwiLFxcbiA0NDk6XFx0XFx0XFx0XFx0IGVycik7XFxuIDQ1MDpcXHRcXHRcXHRnb3RvIGRvbmU7XFxuIDQ1MTpcXHRcXHR9XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdFxcdC8qIEVuYWJsZSB0eCBiZWFtZm9ybWluZywgZXJyb3JzIGNhbiBiZSBpZ25vcmVkIChub3Qgc3VwcG9ydGVkKSAqL1xcbiA0NTQ6XFx0XFx0KHZvaWQpYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCBcXFwidHhiZlxcXCIsIDEpO1xcbiA0NTU6XFx0ZG9uZTpcXG4gNDU2OlxcdFxcdHJldHVybiBlcnI7XFxuIDQ1NzpcXHR9XFxuIDQ1ODpcXHRcXG4gNDU5OlxcdCNpZm5kZWYgQ09ORklHX0JSQ01fVFJBQ0lOR1xcbiA0NjA6XFx0dm9pZCBfX2JyY21mX2VycihzdHJ1Y3QgYnJjbWZfYnVzICpidXMsIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKVxcbiA0NjE6XFx0e1xcbiA0NjI6XFx0XFx0c3RydWN0IHZhX2Zvcm1hdCB2YWY7XFxuIDQ2MzpcXHRcXHR2YV9saXN0IGFyZ3M7XFxuIDQ2NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NDk6MTUuMzEwODI2MVoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDY3MzkyNzIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHdoYXQncyBnb2luZyBvbjpcblxuKipBbmFseXNpcyBvZiBgYnJjbWZfY19wcmVpbml0X2RjbWRzYCBhbmQgaXRzIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIHNvIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIHJldHVybnMgYW4gZXJyb3IgY29kZSwgYGVycmAuIFRoYXQncyB0aGUga2V5LiBJZiB0aGUgVVNCIGZ1enplciBpbiBzeXprYWxsZXIganVzdCByZXNwb25kcyB3aXRoIHplcm9zIGZvciBldmVyeSByZXF1ZXN0LCB0aGVuIGBlcnJgIHdpbGwgYmUgemVyby4gV2hpY2ggaW5pdGlhbGx5IGxvb2tzIGxpa2UgYSBnb29kIHNpZ24sIGEgc3VjY2Vzcy4gQnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBXYWl0IGEgc2Vjb25kLCBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfZ2V0YCBpcyBjYWxsZWQgbGF0ZXIsIGFuZCB0aGF0IHJlYWRzIGRhdGEgZGlyZWN0bHkgZnJvbSB0aGUgZGV2aWNlLiBJZiB0aGUgZnV6emVyIGlzIHNlbmRpbmcgYWxsIHplcm9zLCB0aGVuIHRoZSBkYXRhIHJlYWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBnb2luZyB0byBiZSBhbGwgemVyb3MgdG9vLiBUaGF0IGNvdWxkIGNhdXNlIGFsbCBzb3J0cyBvZiBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLCBjb3JydXB0aW5nIGludGVybmFsIHN0cnVjdHVyZXMsIHBhc3NpbmcgaW52YWxpZCB2YWx1ZXMgYXMgcGFyYW1ldGVycyB0byBvdGhlciBmdW5jdGlvbnMuXG5cbklmIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIHJldHVybnMgc3VjY2VzcyAoaS5lLiwgYGVycmAgaXMgMCksIHRoZSBleGVjdXRpb24gZmxvdyBwcm9jZWVkcyB0byBgYnJjbWZfYnVzX3N0YXJ0ZWRgLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgYGJyY21mX2ZlYXRfYXR0YWNoYCBpcyBjYWxsZWQuIFNvLCB0aGUga2V5IGlzIHRoZSBkYXRhIHRoYXQncyByZWFkIGJ5IGBicmNtZl9maWxfaW92YXJfZGF0YV9nZXRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzY3OCwiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjUwOjE5Ljk4NDc1ODM1M1oiLCJTZXEiOjUyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI3NDQyMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21mX2ZlYXRfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz0xMjE0PXN0YXRpYyBpbnQgYnJjbWZfYnVzX3N0YXJ0ZWQoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgc3RydWN0IGNmZzgwMjExX29wcyAqb3BzKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy0xMjQzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmM6MTI0NDpcXHRicmNtZl9mZWF0X2F0dGFjaChkcnZyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jLTEyNDUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jPTI1OT1zdGF0aWMgaW50IGJyY21mX2ZlYXRfZndjYXBfZGVidWdmc19yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0yODgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYzoyODk6dm9pZCBicmNtZl9mZWF0X2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMjkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmg9OTA9ZW51bSBicmNtZl9mZWF0X3F1aXJrIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmgtOTYtLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaDo5NzogKiBicmNtZl9mZWF0X2F0dGFjaCgpIC0gZGV0ZXJtaW5lIGZlYXR1cmVzIGFuZCBxdWlya3MuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaC05OC0gKlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaC0xMDAtICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuaDoxMDE6dm9pZCBicmNtZl9mZWF0X2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5oLTEwMi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6MjAuNTEyMjA4OFoiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTQ4NjA2NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBlbWJlZGRlZCBzeXN0ZW0gZGV2ZWxvcG1lbnQ6XG5cbioqQW5hbHl6aW5nIGBicmNtZl9mZWF0X2F0dGFjaGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgYnJjbWZfZmVhdF9hdHRhY2hgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIGEgY3JpdGljYWwgZnVuY3Rpb24gd2l0aGluIHRoZSBCcm9hZGNvbSB3aXJlbGVzcyBmaXJtd2FyZSwgcHJvYmFibHkgcmVsYXRlZCB0byBmZWF0dXJlIGluaXRpYWxpemF0aW9uIG9yIGF0dGFjaG1lbnQgZHVyaW5nIHRoZSBkcml2ZXIncyBzZXR1cCBwaGFzZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhlIGJpZ2dlciBwaWN0dXJlLCBwYXJ0aWN1bGFybHkgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSBhbmQgdGhlIHJlc3Qgb2YgdGhlIGRyaXZlcidzIGFyY2hpdGVjdHVyZS4gSSBleHBlY3QgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGRldmljZSBjYXBhYmlsaXRpZXMsIGZlYXR1cmUgZmxhZ3MsIGFuZCBwb3RlbnRpYWxseSBzZXRzIHVwIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBkaWZmZXJlbnQgd2lyZWxlc3MgZnVuY3Rpb25hbGl0aWVzLiBNeSBpbnN0aW5jdCBzYXlzIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGludGVyYWN0aW9ucyB3aXRoIGhhcmR3YXJlIHJlZ2lzdGVycywgcG93ZXIgbWFuYWdlbWVudCBsb2dpYywgYW5kIHBlcmhhcHMgZXZlbiBmaXJtd2FyZSBpbWFnZSBsb2FkaW5nIG9yIHZhbGlkYXRpb24uIExldCdzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBmdW5jdGlvbiBob2xkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ3NjMsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo1MDoyNC4wNjA4MTk0MDdaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU4NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg5LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg5OlxcdHZvaWQgYnJjbWZfZmVhdF9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4gMjkwOlxcdHtcXG4gMjkxOlxcdFxcdHN0cnVjdCBicmNtZl9pZiAqaWZwID0gYnJjbWZfZ2V0X2lmcChkcnZyLCAwKTtcXG4gMjkyOlxcdFxcdHN0cnVjdCBicmNtZl9wbm9fbWFjYWRkcl9sZSBwZm5fbWFjO1xcbiAyOTM6XFx0XFx0c3RydWN0IGJyY21mX2dzY2FuX2NvbmZpZyBnc2Nhbl9jZmc7XFxuIDI5NDpcXHRcXHR1MzIgd293bF9jYXA7XFxuIDI5NTpcXHRcXHRzMzIgZXJyO1xcbiAyOTY6XFx0XFxuIDI5NzpcXHRcXHRicmNtZl9mZWF0X2Zpcm13YXJlX2NhcGFiaWxpdGllcyhpZnApO1xcbiAyOTg6XFx0XFx0bWVtc2V0KFxcdTAwMjZnc2Nhbl9jZmcsIDAsIHNpemVvZihnc2Nhbl9jZmcpKTtcXG4gMjk5OlxcdFxcdGlmIChkcnZyLVxcdTAwM2VidXNfaWYtXFx1MDAzZWNoaXAgIT0gQlJDTV9DQ180MzQzMF9DSElQX0lEIFxcdTAwMjZcXHUwMDI2XFxuIDMwMDpcXHRcXHQgICAgZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2VjaGlwICE9IEJSQ01fQ0NfNDM0NV9DSElQX0lEIFxcdTAwMjZcXHUwMDI2XFxuIDMwMTpcXHRcXHQgICAgZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2VjaGlwICE9IEJSQ01fQ0NfNDM0NTRfQ0hJUF9JRCBcXHUwMDI2XFx1MDAyNlxcbiAzMDI6XFx0XFx0ICAgIGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlY2hpcCAhPSBDWV9DQ180MzQzOV9DSElQX0lEKVxcbiAzMDM6XFx0XFx0XFx0YnJjbWZfZmVhdF9pb3Zhcl9kYXRhX3NldChpZnAsIEJSQ01GX0ZFQVRfR1NDQU4sXFxuIDMwNDpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcXCJwZm5fZ3NjYW5fY2ZnXFxcIixcXG4gMzA1OlxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmdzY2FuX2NmZywgc2l6ZW9mKGdzY2FuX2NmZykpO1xcbiAzMDY6XFx0XFx0YnJjbWZfZmVhdF9pb3Zhcl9pbnRfZ2V0KGlmcCwgQlJDTUZfRkVBVF9QTk8sIFxcXCJwZm5cXFwiKTtcXG4gMzA3OlxcdFxcdGlmIChkcnZyLVxcdTAwM2VidXNfaWYtXFx1MDAzZXdvd2xfc3VwcG9ydGVkKVxcbiAzMDg6XFx0XFx0XFx0YnJjbWZfZmVhdF9pb3Zhcl9pbnRfZ2V0KGlmcCwgQlJDTUZfRkVBVF9XT1dMLCBcXFwid293bFxcXCIpO1xcbiAzMDk6XFx0XFx0aWYgKGJyY21mX2ZlYXRfaXNfZW5hYmxlZChpZnAsIEJSQ01GX0ZFQVRfV09XTCkpIHtcXG4gMzEwOlxcdFxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9pbnRfZ2V0KGlmcCwgXFxcIndvd2xfY2FwXFxcIiwgXFx1MDAyNndvd2xfY2FwKTtcXG4gMzExOlxcdFxcdFxcdGlmICghZXJyKSB7XFxuIDMxMjpcXHRcXHRcXHRcXHRpZnAtXFx1MDAzZWRydnItXFx1MDAzZWZlYXRfZmxhZ3MgfD0gQklUKEJSQ01GX0ZFQVRfV09XTF9BUlBfTkQpO1xcbiAzMTM6XFx0XFx0XFx0XFx0aWYgKHdvd2xfY2FwIFxcdTAwMjYgQlJDTUZfV09XTF9QRk5fRk9VTkQpXFxuIDMxNDpcXHRcXHRcXHRcXHRcXHRpZnAtXFx1MDAzZWRydnItXFx1MDAzZWZlYXRfZmxhZ3MgfD1cXG4gMzE1OlxcdFxcdFxcdFxcdFxcdFxcdEJJVChCUkNNRl9GRUFUX1dPV0xfTkQpO1xcbiAzMTY6XFx0XFx0XFx0XFx0aWYgKHdvd2xfY2FwIFxcdTAwMjYgQlJDTUZfV09XTF9HVEtfRkFJTFVSRSlcXG4gMzE3OlxcdFxcdFxcdFxcdFxcdGlmcC1cXHUwMDNlZHJ2ci1cXHUwMDNlZmVhdF9mbGFncyB8PVxcbiAzMTg6XFx0XFx0XFx0XFx0XFx0XFx0QklUKEJSQ01GX0ZFQVRfV09XTF9HVEspO1xcbiAzMTk6XFx0XFx0XFx0fVxcbiAzMjA6XFx0XFx0fVxcbiAzMjE6XFx0XFx0LyogTUJTUyBkb2VzIG5vdCB3b3JrIGZvciBhbGwgY2hpcHMgKi9cXG4gMzIyOlxcdFxcdHN3aXRjaCAoZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2VjaGlwKSB7XFxuIDMyMzpcXHRcXHRjYXNlIEJSQ01fQ0NfNDMzMF9DSElQX0lEOlxcbiAzMjQ6XFx0XFx0Y2FzZSBCUkNNX0NDXzQzMzYyX0NISVBfSUQ6XFxuIDMyNTpcXHRcXHRcXHRpZnAtXFx1MDAzZWRydnItXFx1MDAzZWZlYXRfZmxhZ3MgXFx1MDAyNj0gfkJJVChCUkNNRl9GRUFUX01CU1MpO1xcbiAzMjY6XFx0XFx0XFx0YnJlYWs7XFxuIDMyNzpcXHRcXHRkZWZhdWx0OlxcbiAzMjg6XFx0XFx0XFx0YnJlYWs7XFxuIDMyOTpcXHRcXHR9XFxuIDMzMDpcXHRcXHRicmNtZl9mZWF0X2lvdmFyX2ludF9nZXQoaWZwLCBCUkNNRl9GRUFUX1JTREIsIFxcXCJyc2RiX21vZGVcXFwiKTtcXG4gMzMxOlxcdFxcdGJyY21mX2ZlYXRfaW92YXJfaW50X2dldChpZnAsIEJSQ01GX0ZFQVRfVERMUywgXFxcInRkbHNfZW5hYmxlXFxcIik7XFxuIDMzMjpcXHRcXHRicmNtZl9mZWF0X2lvdmFyX2ludF9nZXQoaWZwLCBCUkNNRl9GRUFUX01GUCwgXFxcIm1mcFxcXCIpO1xcbiAzMzM6XFx0XFx0YnJjbWZfZmVhdF9pb3Zhcl9pbnRfZ2V0KGlmcCwgQlJDTUZfRkVBVF9EVU1QX09CU1MsIFxcXCJkdW1wX29ic3NcXFwiKTtcXG4gMzM0OlxcdFxcbiAzMzU6XFx0XFx0cGZuX21hYy52ZXJzaW9uID0gQlJDTUZfUEZOX01BQ0FERFJfQ0ZHX1ZFUjtcXG4gMzM2OlxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldChpZnAsIFxcXCJwZm5fbWFjYWRkclxcXCIsIFxcdTAwMjZwZm5fbWFjLFxcbiAzMzc6XFx0XFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZihwZm5fbWFjKSk7XFxuIDMzODpcXHRcXHRpZiAoIWVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6MjQuMDYxMDgxMDc4WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjM0NDU4MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBicmNtZl9mZWF0X2Zpcm13YXJlX2NhcGFiaWxpdGllc2AqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGNhbGwgdG8gYGJyY21mX2ZlYXRfZmlybXdhcmVfY2FwYWJpbGl0aWVzYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpc3NlY3Qgd2hhdCdzIGhhcHBlbmluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbi4gSXQncyBvYnZpb3VzbHkgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIGJlIGNhbGxlZCwgc28gbGV0J3Mgc3RhcnQgYnkgZmlndXJpbmcgb3V0IHByZWNpc2VseSB3aGF0IGl0cyBwdXJwb3NlIGlzLiBXaGF0IGRhdGEgZG9lcyBpdCBoYW5kbGU/IFdoYXQgYXJlIHRoZSBpbnB1dHM/IFdoYXQgYXJlIHRoZSBvdXRwdXRzPyBJJ2xsIHByb2JhYmx5IGJlIGxvb2tpbmcgYXQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgZmlybXdhcmUsIGFuZCB3aGF0IHNwZWNpZmljIGNhcGFiaWxpdGllcyBpdCdzIGF0dGVtcHRpbmcgdG8gZGlzY292ZXIgb3IgZW5hYmxlLiBUaGlzIGZlZWxzIGxpa2UgYSBjb3JlIHBpZWNlIG9mIHRoZSBpbml0aWFsaXphdGlvbiBvciBmZWF0dXJlIGRpc2NvdmVyeSBwcm9jZXNzLCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIGJyb2FkZXIgc3lzdGVtIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE2OCwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6MjcuNzg0NTMwNTU0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk4MTc2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfZmVhdF9maXJtd2FyZV9jYXBhYmlsaXRpZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jPTIwNj1zdGF0aWMgdm9pZCBicmNtZl9mZWF0X2lvdmFyX2RhdGFfc2V0KHN0cnVjdCBicmNtZl9pZiAqaWZwLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0yMjctI2RlZmluZSBNQVhfQ0FQU19CVUZGRVJfU0laRVxcdDc2OFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MjI4OnN0YXRpYyB2b2lkIGJyY21mX2ZlYXRfZmlybXdhcmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBicmNtZl9pZiAqaWZwKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMjI5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM9Mjg5PXZvaWQgYnJjbWZfZmVhdF9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMjk2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6Mjk3OlxcdGJyY21mX2ZlYXRfZmlybXdhcmVfY2FwYWJpbGl0aWVzKGlmcCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0yOTgtXFx0bWVtc2V0KFxcdTAwMjZnc2Nhbl9jZmcsIDAsIHNpemVvZihnc2Nhbl9jZmcpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6MjcuOTE0MzUzODM2WiIsIlNlcSI6NTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MTAwMjE3OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgRmlybXdhcmUgQ2FwYWJpbGl0aWVzKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGJyY21mX2ZlYXRfZmlybXdhcmVfY2FwYWJpbGl0aWVzYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1vZHVsZSBpcyBhbGwgYWJvdXQuIEJhc2VkIG9uIHRoZSBuYW1lLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgaXMgd2hlcmUgdGhlIGNvZGUgdGhhdCBkZWFscyB3aXRoIGRldGVybWluaW5nIHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGZpcm13YXJlIGlzIGxvY2F0ZWQuIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiwgaXQncyBsaWtlbHkgZGVhbGluZyB3aXRoIEJyb2FkY29tJ3MgV2lGaSBmaXJtd2FyZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgaGVhZGVyIGZpbGUgZm9yIGRlZmluaXRpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgZmlyc3QuIEknbSBsb29raW5nIGZvciB0aGUgZXNzZW50aWFsIGVsZW1lbnRzOiBhcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBiaXRmaWVsZCwgYSBtb3JlIGNvbXBsZXggc3RydWN0dXJlLCBvciBtYXliZSBldmVuIGFuIG9wYXF1ZSBibG9iIHRoYXQgcmVxdWlyZXMgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGludGVycHJldD8gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgc2Vuc2Ugb2YgaG93IHRoZXNlIGNhcGFiaWxpdGllcyBhcmUgcmVwcmVzZW50ZWQgYmVmb3JlIEkgZGlnIGludG8gYW55IG9mIHRoZSBwYXJzaW5nIG9yIGludGVycHJldGF0aW9uIGxvZ2ljLiBUaGVuIEknbGwgZm9jdXMgb24gaG93IHRoZSBmaXJtd2FyZSBjYXBhYmlsaXRpZXMgYXJlIGJlaW5nIHJlYWQsIGhvdyB0aGUgZGF0YSBpcyBiZWluZyBzdG9yZWQgaW50ZXJuYWxseSwgYW5kIGhvdyB0aGUgZHJpdmVyIHN1YnNlcXVlbnRseSB1c2VzIHRoaXMgaW5mb3JtYXRpb24uIEknbGwgZXhwZWN0IHRvIHNlZSB0aGlzIGluZm9ybWF0aW9uIGJlaW5nIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBmZWF0dXJlcyB0aGUgZHJpdmVyIGVuYWJsZXMuIEkgYW0gYWxzbyBnb2luZyB0byBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzIHRoYXQgbWF5IGhhdmUgYmVlbiBvdmVybG9va2VkIG9yIHBhdGNoZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2Nzg0LCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6MzEuODI0Mzc4ODdaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjI4OlxcdHN0YXRpYyB2b2lkIGJyY21mX2ZlYXRfZmlybXdhcmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBicmNtZl9pZiAqaWZwKVxcbiAyMjk6XFx0e1xcbiAyMzA6XFx0XFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGlmcC1cXHUwMDNlZHJ2cjtcXG4gMjMxOlxcdFxcdGNoYXIgY2Fwc1tNQVhfQ0FQU19CVUZGRVJfU0laRV07XFxuIDIzMjpcXHRcXHRlbnVtIGJyY21mX2ZlYXRfaWQgaWQ7XFxuIDIzMzpcXHRcXHRpbnQgaSwgZXJyO1xcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHRlcnIgPSBicmNtZl9maWxfaW92YXJfZGF0YV9nZXQoaWZwLCBcXFwiY2FwXFxcIiwgY2Fwcywgc2l6ZW9mKGNhcHMpKTtcXG4gMjM2OlxcdFxcdGlmIChlcnIpIHtcXG4gMjM3OlxcdFxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJjb3VsZCBub3QgZ2V0IGZpcm13YXJlIGNhcCAoJWQpXFxcXG5cXFwiLCBlcnIpO1xcbiAyMzg6XFx0XFx0XFx0cmV0dXJuO1xcbiAyMzk6XFx0XFx0fVxcbiAyNDA6XFx0XFxuIDI0MTpcXHRcXHRicmNtZl9kYmcoSU5GTywgXFxcIlsgJXNdXFxcXG5cXFwiLCBjYXBzKTtcXG4gMjQyOlxcdFxcbiAyNDM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoYnJjbWZfZndjYXBfbWFwKTsgaSsrKSB7XFxuIDI0NDpcXHRcXHRcXHRpZiAoc3RybnN0cihjYXBzLCBicmNtZl9md2NhcF9tYXBbaV0uZndjYXBfaWQsIHNpemVvZihjYXBzKSkpIHtcXG4gMjQ1OlxcdFxcdFxcdFxcdGlkID0gYnJjbWZfZndjYXBfbWFwW2ldLmZlYXR1cmU7XFxuIDI0NjpcXHRcXHRcXHRcXHRicmNtZl9kYmcoSU5GTywgXFxcImVuYWJsaW5nIGZlYXR1cmU6ICVzXFxcXG5cXFwiLFxcbiAyNDc6XFx0XFx0XFx0XFx0XFx0ICBicmNtZl9mZWF0X25hbWVzW2lkXSk7XFxuIDI0ODpcXHRcXHRcXHRcXHRpZnAtXFx1MDAzZWRydnItXFx1MDAzZWZlYXRfZmxhZ3MgfD0gQklUKGlkKTtcXG4gMjQ5OlxcdFxcdFxcdH1cXG4gMjUwOlxcdFxcdH1cXG4gMjUxOlxcdH1cXG4gMjUyOlxcdFxcbiAyNTM6XFx0LyoqXFxuIDI1NDpcXHQgKiBicmNtZl9mZWF0X2Z3Y2FwX2RlYnVnZnNfcmVhZCgpIC0gZXhwb3NlIGZpcm13YXJlIGNhcGFiaWxpdGllcyB0byBkZWJ1Z2ZzLlxcbiAyNTU6XFx0ICpcXG4gMjU2OlxcdCAqIEBzZXE6IHNlcXVlbmNlIGZvciBkZWJ1Z2ZzIGVudHJ5LlxcbiAyNTc6XFx0ICogQGRhdGE6IHJhdyBkYXRhIHBvaW50ZXIuXFxuIDI1ODpcXHQgKi9cXG4gMjU5OlxcdHN0YXRpYyBpbnQgYnJjbWZfZmVhdF9md2NhcF9kZWJ1Z2ZzX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKmRhdGEpXFxuIDI2MDpcXHR7XFxuIDI2MTpcXHRcXHRzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkZXZfZ2V0X2RydmRhdGEoc2VxLVxcdTAwM2Vwcml2YXRlKTtcXG4gMjYyOlxcdFxcdHN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBidXNfaWYtXFx1MDAzZWRydnI7XFxuIDI2MzpcXHRcXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcCA9IGJyY21mX2dldF9pZnAoZHJ2ciwgMCk7XFxuIDI2NDpcXHRcXHRjaGFyIGNhcHNbTUFYX0NBUFNfQlVGRkVSX1NJWkUgKyAxXSA9IHsgfTtcXG4gMjY1OlxcdFxcdGNoYXIgKnRtcDtcXG4gMjY2OlxcdFxcdGludCBlcnI7XFxuIDI2NzpcXHRcXG4gMjY4OlxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldChpZnAsIFxcXCJjYXBcXFwiLCBjYXBzLCBzaXplb2YoY2FwcykpO1xcbiAyNjk6XFx0XFx0aWYgKGVycikge1xcbiAyNzA6XFx0XFx0XFx0YnBoeV9lcnIoZHJ2ciwgXFxcImNvdWxkIG5vdCBnZXQgZmlybXdhcmUgY2FwICglZClcXFxcblxcXCIsIGVycik7XFxuIDI3MTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAyNzI6XFx0XFx0fVxcbiAyNzM6XFx0XFxuIDI3NDpcXHRcXHQvKiBQdXQgZXZlcnkgY2FwYWJpbGl0eSBpbiBhIG5ldyBsaW5lICovXFxuIDI3NTpcXHRcXHRmb3IgKHRtcCA9IGNhcHM7ICp0bXA7IHRtcCsrKSB7XFxuIDI3NjpcXHRcXHRcXHRpZiAoKnRtcCA9PSAnICcpXFxuIDI3NzpcXHRcXHRcXHRcXHQqdG1wID0gJ1xcXFxuJztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6MzEuODI0NTYxNzlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDg0MTAzNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlY29kaW5nIEZpcm13YXJlIENhcGFiaWxpdGllcyoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgc3lzdGVtIGRldGVybWluZXMgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGlzIEJyb2FkY29tIFdpLUZpIGRldmljZS4gSSBzZWUgdGhhdCB0aGUgZnVuY3Rpb24gYGJyY21mX2ZlYXRfZmlybXdhcmVfY2FwYWJpbGl0aWVzYCBpcyB0aGUgb25lIHJlYWRpbmcgdGhlIFwiY2FwXCIgZGF0YSBkaXJlY3RseSBmcm9tIHRoZSBkZXZpY2UuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggYXQgZmlyc3QgZ2xhbmNlLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi5cblxuSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGBCUkNNRl9GRUFUX1BNS0lEX1YyYC4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBmZWF0dXJlIGZsYWdnZWQsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBoYW5kbGVkIGluIHJlbGF0aW9uIHRvIHRoZSBnZW5lcmFsIGNhcGFiaWxpdHkgcmVhZGluZy4gXG5cblRoZSBuZXh0IGxvZ2ljYWwgc3RlcCwgYmVmb3JlIEkgZGlnIGZ1cnRoZXIsIGlzIHRvIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBgYnJjbWZfZmVhdF93bGNmZWF0X21hcGAgZGF0YSBzdHJ1Y3R1cmUuIEkndmUgZW5jb3VudGVyZWQgdGhpcyBvbmUgcHJldmlvdXNseSwgc28gaXQgc2hvdWxkIGJlIGEga2V5IHBhcnQgb2YgdGhlIG1hcHBpbmcgYmV0d2VlbiBkZXZpY2UgZmVhdHVyZXMgYW5kIHRoZWlyIGludGVybmFsIHJlcHJlc2VudGF0aW9ucy4gVGhhdCBtYXBwaW5nIHdpbGwgZ2l2ZSBtZSB0aGUgYmVzdCB2aWV3IG9mIHRoZSBmZWF0dXJlIGVuYWJsZW1lbnQgcHJvY2Vzcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgbWFwcyByZWxhdGUgdG8gd2hhdCBgYnJjbWZfZmVhdF9maXJtd2FyZV9jYXBhYmlsaXRpZXNgIGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Nzk3OCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6MzYuMDM1NDA1OTA2WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ1OTgxMzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfZmVhdF93bGNmZWF0X21hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM9MTMxPXN0cnVjdCBicmNtZl9mZWF0X3dsY2ZlYXQge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0xMzYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYzoxMzc6c3RhdGljIGNvbnN0IHN0cnVjdCBicmNtZl9mZWF0X3dsY2ZlYXQgYnJjbWZfZmVhdF93bGNmZWF0X21hcFtdID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmMtMTM4LVxcdHsgMTIsIDAsIEJJVChCUkNNRl9GRUFUX1BNS0lEX1YyKSB9LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYz0xNDI9c3RhdGljIHZvaWQgYnJjbWZfZmVhdF93bGNfdmVyc2lvbl9vdmVycmlkZXMoc3RydWN0IGJyY21mX3B1YiAqZHJ2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYy0xNTgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2ZlYXR1cmUuYzoxNTk6XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoYnJjbWZfZmVhdF93bGNmZWF0X21hcCk7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmM6MTYwOlxcdFxcdGUgPSBcXHUwMDI2YnJjbWZfZmVhdF93bGNmZWF0X21hcFtpXTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZmVhdHVyZS5jLTE2MS1cXHRcXHRpZiAobWFqb3IgXFx1MDAzZSBlLVxcdTAwM2VtaW5fdmVyX21ham9yIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjUwOjM2LjE4MDAwOTIzN1oiLCJTZXEiOjYxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzYzOTYxMzk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSB3ZWxsLXZlcnNlZCBpbiB0aGUgc3ViamVjdCBtYXR0ZXI6XG5cbioqRGl2aW5nIGludG8gYGJyY21mX2ZlYXRfd2xjX3ZlcnNpb25fb3ZlcnJpZGVzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhpcyBzcGVjaWZpYyBmaWxlOiBgYnJjbWZfZmVhdF93bGNfdmVyc2lvbl9vdmVycmlkZXNgLiBJIGltbWVkaWF0ZWx5IHJlY29nbml6ZSB0aGlzIGFzIHBhcnQgb2YgdGhlIEJyb2FkY29tIHdpcmVsZXNzIGRyaXZlciwgbGlrZWx5IHJlbGF0ZWQgdG8gZmVhdHVyZSBuZWdvdGlhdGlvbiBvciBjb21wYXRpYmlsaXR5IGJhc2VkIG9uIHRoZSB2ZXJzaW9uIG9mIHRoZSBCcm9hZGNvbSBXaXJlbGVzcyBMQU4gQ29udHJvbGxlciAoV0xDKSBmaXJtd2FyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGxvZ2ljIGhlcmUg4oCTIHBlcmhhcHMgYSBzZXJpZXMgb2YgbWFjcm9zLCBsb29rdXBzLCBvciBmdW5jdGlvbiBwb2ludGVycyDigJMgdGhhdCBhbGxvd3MgdGhlIGRyaXZlciB0byBhZGFwdCBpdHMgYmVoYXZpb3IgZGVwZW5kaW5nIG9uIHRoZSBjYXBhYmlsaXRpZXMgb3IgcmV2aXNpb24gbGV2ZWwgb2YgdGhlIFdMQyBpdCdzIGludGVyYWN0aW5nIHdpdGguIFRoaXMgY291bGQgcmFuZ2UgZnJvbSBlbmFibGluZyBzcGVjaWZpYyBmZWF0dXJlcyBvbmx5IGF2YWlsYWJsZSBvbiBuZXdlciBmaXJtd2FyZSB2ZXJzaW9ucywgdG8gaW1wbGVtZW50aW5nIHdvcmthcm91bmRzIGZvciBrbm93biBidWdzIG9yIGxpbWl0YXRpb25zIGluIG9sZGVyIHZlcnNpb25zLiBJJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugb3ZlcnJpZGVzIGFyZSBpbXBsZW1lbnRlZCBhbmQgbWFuYWdlZC4gU3BlY2lmaWMgYXJlYXMgb2YgZm9jdXMgd2lsbCBiZSB2ZXJzaW9uIGNoZWNrcywgZnVuY3Rpb24gcG9pbnRlciB0YWJsZXMsIGFuZCBhbnkgZmVhdHVyZSBmbGFnIGRlZmluaXRpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBkZXRlcm1pbmVzIHRoZSBXTEMgdmVyc2lvbiwgYW5kIHdoYXQgYWN0aW9ucyBpdCB0YWtlcyBiYXNlZCBvbiB0aGF0IGRldGVybWluYXRpb24uIFRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgYXJlYSBmb3IgbWFpbnRhaW5pbmcgY29tcGF0aWJpbGl0eSBhbmQgbWF4aW1pemluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgd2lyZWxlc3MgaW50ZXJmYWNlIGFjcm9zcyBhIHJhbmdlIG9mIFdMQyBmaXJtd2FyZSByZWxlYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg3NzYsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo1MDo0MC41NDM5NzUyMTNaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9mZWF0dXJlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQyLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQyOlxcdHN0YXRpYyB2b2lkIGJyY21mX2ZlYXRfd2xjX3ZlcnNpb25fb3ZlcnJpZGVzKHN0cnVjdCBicmNtZl9wdWIgKmRydilcXG4gMTQzOlxcdHtcXG4gMTQ0OlxcdFxcdHN0cnVjdCBicmNtZl9pZiAqaWZwID0gYnJjbWZfZ2V0X2lmcChkcnYsIDApO1xcbiAxNDU6XFx0XFx0Y29uc3Qgc3RydWN0IGJyY21mX2ZlYXRfd2xjZmVhdCAqZTtcXG4gMTQ2OlxcdFxcdHN0cnVjdCBicmNtZl93bGNfdmVyc2lvbl9sZSB2ZXI7XFxuIDE0NzpcXHRcXHR1MzIgZmVhdF9mbGFncyA9IDA7XFxuIDE0ODpcXHRcXHRpbnQgaSwgZXJyLCBtYWpvciwgbWlub3I7XFxuIDE0OTpcXHRcXG4gMTUwOlxcdFxcdGVyciA9IGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldChpZnAsIFxcXCJ3bGNfdmVyXFxcIiwgXFx1MDAyNnZlciwgc2l6ZW9mKHZlcikpO1xcbiAxNTE6XFx0XFx0aWYgKGVycilcXG4gMTUyOlxcdFxcdFxcdHJldHVybjtcXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0bWFqb3IgPSBsZTE2X3RvX2NwdSh2ZXIud2xjX3Zlcl9tYWpvcik7XFxuIDE1NTpcXHRcXHRtaW5vciA9IGxlMTZfdG9fY3B1KHZlci53bGNfdmVyX21pbm9yKTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJXTEMgdmVyc2lvbjogJWQuJWRcXFxcblxcXCIsIG1ham9yLCBtaW5vcik7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGJyY21mX2ZlYXRfd2xjZmVhdF9tYXApOyBpKyspIHtcXG4gMTYwOlxcdFxcdFxcdGUgPSBcXHUwMDI2YnJjbWZfZmVhdF93bGNmZWF0X21hcFtpXTtcXG4gMTYxOlxcdFxcdFxcdGlmIChtYWpvciBcXHUwMDNlIGUtXFx1MDAzZW1pbl92ZXJfbWFqb3IgfHxcXG4gMTYyOlxcdFxcdFxcdCAgICAobWFqb3IgPT0gZS1cXHUwMDNlbWluX3Zlcl9tYWpvciBcXHUwMDI2XFx1MDAyNlxcbiAxNjM6XFx0XFx0XFx0ICAgICBtaW5vciBcXHUwMDNlPSBlLVxcdTAwM2VtaW5fdmVyX21pbm9yKSkge1xcbiAxNjQ6XFx0XFx0XFx0XFx0ZmVhdF9mbGFncyB8PSBlLVxcdTAwM2VmZWF0X2ZsYWdzO1xcbiAxNjU6XFx0XFx0XFx0fVxcbiAxNjY6XFx0XFx0fVxcbiAxNjc6XFx0XFxuIDE2ODpcXHRcXHRpZiAoIWZlYXRfZmxhZ3MpXFxuIDE2OTpcXHRcXHRcXHRyZXR1cm47XFxuIDE3MDpcXHRcXG4gMTcxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBCUkNNRl9GRUFUX0xBU1Q7IGkrKylcXG4gMTcyOlxcdFxcdFxcdGlmIChmZWF0X2ZsYWdzIFxcdTAwMjYgQklUKGkpKVxcbiAxNzM6XFx0XFx0XFx0XFx0YnJjbWZfZGJnKElORk8sIFxcXCJlbmFibGluZyBmaXJtd2FyZSBmZWF0dXJlOiAlc1xcXFxuXFxcIixcXG4gMTc0OlxcdFxcdFxcdFxcdFxcdCAgYnJjbWZfZmVhdF9uYW1lc1tpXSk7XFxuIDE3NTpcXHRcXHRkcnYtXFx1MDAzZWZlYXRfZmxhZ3MgfD0gZmVhdF9mbGFncztcXG4gMTc2OlxcdH1cXG4gMTc3OlxcdFxcbiAxNzg6XFx0LyoqXFxuIDE3OTpcXHQgKiBicmNtZl9mZWF0X2lvdmFyX2ludF9nZXQoKSAtIGRldGVybWluZSBmZWF0dXJlIHRocm91Z2ggaW92YXIgcXVlcnkuXFxuIDE4MDpcXHQgKlxcbiAxODE6XFx0ICogQGlmcDogaW50ZXJmYWNlIHRvIHF1ZXJ5LlxcbiAxODI6XFx0ICogQGlkOiBmZWF0dXJlIGlkLlxcbiAxODM6XFx0ICogQG5hbWU6IGlvdmFyIG5hbWUuXFxuIDE4NDpcXHQgKi9cXG4gMTg1OlxcdHN0YXRpYyB2b2lkIGJyY21mX2ZlYXRfaW92YXJfaW50X2dldChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCxcXG4gMTg2OlxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBicmNtZl9mZWF0X2lkIGlkLCBjaGFyICpuYW1lKVxcbiAxODc6XFx0e1xcbiAxODg6XFx0XFx0dTMyIGRhdGE7XFxuIDE4OTpcXHRcXHRpbnQgZXJyO1xcbiAxOTA6XFx0XFxuIDE5MTpcXHRcXHQvKiB3ZSBuZWVkIHRvIGtub3cgZmlybXdhcmUgZXJyb3IgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6NDAuNTQ0MTE3MTgzWiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwOTI0NzI4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGZWFzaWJpbGl0eSBvZiBSZWFjaGluZyBgYnJjbWZfcG1rc2FfdjJfb3BgIHZpYSBTeXprYWxsZXIgVVNCIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgQlJDTUZfRkVBVF9QTUtJRF9WMmAgaXMgY29udGluZ2VudCBvbiB0aGUgZmlybXdhcmUncyByZXNwb25zZSB0byBgd2xjX3ZlcmAuIFNwZWNpZmljYWxseSwgaWYgdGhlIG1ham9yIHZlcnNpb24gcmVwb3J0ZWQgaW4gdGhhdCByZXNwb25zZSBpcyAxMiBvciBncmVhdGVyLCB0aGUgZmVhdHVyZSBpcyBlbmFibGVkLiBUaGUgcXVlc3Rpb24gaXMsIGNhbiBJLCB3aXRoIHN5emthbGxlcidzIFVTQiBmdXp6ZXIsIG1hbmlwdWxhdGUgdGhpcyBgd2xjX3ZlcmAgcmVzcG9uc2UgdG8gdHJpZ2dlciB0aGUgYWN0aXZhdGlvbiBvZiB0aGlzIGZlYXR1cmU/IElmIEkgY2FuLCB0aGVuIEkgY2FuIHBvdGVudGlhbGx5IHJlYWNoIHRoZSBgYnJjbWZfcG1rc2FfdjJfb3BgIGZ1bmN0aW9uIHRocm91Z2ggY2ZnODAyMTEgb3BlcmF0aW9ucy5cblxuTXkgZmlyc3QgdGhvdWdodCB3YXMsIGNhbiBzeXprYWxsZXIncyBVU0IgZnV6emVyIGV2ZW4gaW5pdGlhbGl6ZSB0aGUgYGJyY21mbWFjYCBkcml2ZXI/IFRoZSBkcml2ZXIgaW5pdGlhdGVzIGJ5IHNlbmRpbmcgbXVsdGlwbGUgY29tbWFuZHM7IGBCUkNNRl9DX0dFVF9SRVZJTkZPYCwgYHZlcmAsIGBjbG12ZXJgLCBgbXBjYCwgYGV2ZW50X21zZ3NgLCBgQlJDTUZfQ19TRVRfU0NBTl9DSEFOTkVMX1RJTUVgLCBgQlJDTUZfQ19TRVRfU0NBTl9VTkFTU09DX1RJTUVgLCBgdHhiZmAsIGBjYXBgLCBhbmQgYHdsY192ZXJgLiBJbml0aWFsbHksIEkgdGhvdWdodCB0aGF0IGlmIHRoZSBmdXp6ZXIgc2ltcGx5IHJldHVybmVkIDAgZm9yIGFsbCBvZiB0aGVzZSwgdGhlIGRyaXZlciBtaWdodCBwcm9jZWVkLiBIb3dldmVyLCBJIGhhdmUgdG8gYWNjb3VudCBmb3IgZXJyb3IgaGFuZGxpbmcgaW4gZnVuY3Rpb25zIHN1Y2ggYXMgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AgdGhhdCBjYW4gY2hlY2sgdGhlIGVycm9yIHZhbHVlIChgZXJyYCkuIElmIG15IGZ1enplciByZXR1cm5zIDAsIHRoZSBlcnJvciBjaGVjayB3aWxsIHNlZSAwLlxuXG5UaGVuIEkgcmVhbGl6ZWQgdGhhdCBgYnJjbWZfZmVhdF93bGNfdmVyc2lvbl9vdmVycmlkZXNgIHJlYWRzIHRoZSBgd2xjX3ZlcmAgcmVzcG9uc2UuIElmIG15IGZ1enplciByZXNwb25kcyB3aXRoIDAsIHRoZW4gdGhlIGBtYWpvcmAgYW5kIGBtaW5vcmAgdmVyc2lvbiBudW1iZXJzIHdpbGwgYWxzbyBiZSAwLiBUaHVzLCBzaW5jZSBJIG5lZWQgYG1ham9yIFx1MDAzZT0gMTJgIHRvIGVuYWJsZSBgQlJDTUZfRkVBVF9QTUtJRF9WMmAsIHRoaXMgYXBwcm9hY2ggd291bGQgZmFpbC5cblxuQSBjcnVjaWFsIHBvaW50IEkgbmVlZCB0byBjb25zaWRlciBpcyB3aGV0aGVyIHRoZSBmdXp6ZXIgY2FuIHJldHVybiAqbm9uLXplcm8qIGRhdGEuIFRoZSBnb29kIG5ld3MgaXMsIEkga25vdyB0aGF0IHN5emthbGxlcidzIFVTQiBmdXp6ZXIgY2FuIGluZGVlZCByZXR1cm4gYXJiaXRyYXJ5IGRhdGEgZm9yIGJvdGggVVNCIGNvbnRyb2wgYW5kIGJ1bGsgdHJhbnNmZXJzLiBJIGNhbiB1c2UgdGhlIGBzeXpfdXNiX2Nvbm5lY3RgIGNhbGwgdG8gZGVzY3JpYmUgdGhlIFVTQiBkZXZpY2UsIGFuZCB0aGVuIHN5emthbGxlciBsZXRzIG1lIGluamVjdCBhbnkgZGF0YSBJIHdhbnQgaW4gcmVzcG9uc2UgdG8gVVNCIFJlcXVlc3QgQmxvY2tzIChVUkJzKS5cblxuVGhlcmVmb3JlLCBpdCdzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdG8gY3JhZnQgYSBgd2xjX3ZlcmAgcmVzcG9uc2Ugd2hlcmUgdGhlIG1ham9yIHZlcnNpb24gaXMgMTIgb3IgZ3JlYXRlci4gQ29uc2VxdWVudGx5LCBJIGNhbiBhY3RpdmF0ZSBgQlJDTUZfRkVBVF9QTUtJRF9WMmAgYW5kIHJlYWNoIGBicmNtZl9wbWtzYV92Ml9vcGAuXG5cbkkgaGF2ZSB0byBjb25zaWRlciBvdGhlciBhc3BlY3RzIHRob3VnaCwgbGlrZSBgYnJjbWZfbmV0aWZfbW9uX3J4YCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBgYnJjbWZfcnhfZnJhbWVgIGlmIHRoZSBpbnRlcmZhY2UgaXMgaW4gbW9uaXRvciBtb2RlLiBJdCBzZWVtcyBsaWtlIHRoZSBjcml0aWNhbCBwYXRoIGlzIGBicmNtZl9yeF9mcmFtZWAgc28gSSB3aWxsIGZvY3VzIG9uIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5OTYxLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6NDkuNjM2NTkzMjIzWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDA3MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTY6XFx0dm9pZCBicmNtZl9yeF9mcmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsIGJvb2wgaGFuZGxlX2V2ZW50LFxcbiA1MTc6XFx0XFx0XFx0ICAgIGJvb2wgaW5pcnEpXFxuIDUxODpcXHR7XFxuIDUxOTpcXHRcXHRzdHJ1Y3QgYnJjbWZfaWYgKmlmcDtcXG4gNTIwOlxcdFxcdHN0cnVjdCBicmNtZl9idXMgKmJ1c19pZiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbiA1MjE6XFx0XFx0c3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGJ1c19pZi1cXHUwMDNlZHJ2cjtcXG4gNTIyOlxcdFxcbiA1MjM6XFx0XFx0YnJjbWZfZGJnKERBVEEsIFxcXCJFbnRlcjogJXM6IHJ4cD0lcFxcXFxuXFxcIiwgZGV2X25hbWUoZGV2KSwgc2tiKTtcXG4gNTI0OlxcdFxcbiA1MjU6XFx0XFx0aWYgKGJyY21mX3J4X2hkcnB1bGwoZHJ2ciwgc2tiLCBcXHUwMDI2aWZwKSlcXG4gNTI2OlxcdFxcdFxcdHJldHVybjtcXG4gNTI3OlxcdFxcbiA1Mjg6XFx0XFx0aWYgKGJyY21mX3Byb3RvX2lzX3Jlb3JkZXJfc2tiKHNrYikpIHtcXG4gNTI5OlxcdFxcdFxcdGJyY21mX3Byb3RvX3J4cmVvcmRlcihpZnAsIHNrYik7XFxuIDUzMDpcXHRcXHR9IGVsc2Uge1xcbiA1MzE6XFx0XFx0XFx0LyogUHJvY2VzcyBzcGVjaWFsIGV2ZW50IHBhY2tldHMgKi9cXG4gNTMyOlxcdFxcdFxcdGlmIChoYW5kbGVfZXZlbnQpIHtcXG4gNTMzOlxcdFxcdFxcdFxcdGdmcF90IGdmcCA9IGluaXJxID8gR0ZQX0FUT01JQyA6IEdGUF9LRVJORUw7XFxuIDUzNDpcXHRcXG4gNTM1OlxcdFxcdFxcdFxcdGJyY21mX2Z3ZWhfcHJvY2Vzc19za2IoaWZwLVxcdTAwM2VkcnZyLCBza2IsXFxuIDUzNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgQkNNSUxDUF9TVUJUWVBFX1ZFTkRPUl9MT05HLCBnZnApO1xcbiA1Mzc6XFx0XFx0XFx0fVxcbiA1Mzg6XFx0XFx0XFx0YnJjbWZfbmV0aWZfcngoaWZwLCBza2IpO1xcbiA1Mzk6XFx0XFx0fVxcbiA1NDA6XFx0fVxcbiA1NDE6XFx0XFxuIDU0MjpcXHR2b2lkIGJyY21mX3J4X2V2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gNTQzOlxcdHtcXG4gNTQ0OlxcdFxcdHN0cnVjdCBicmNtZl9pZiAqaWZwO1xcbiA1NDU6XFx0XFx0c3RydWN0IGJyY21mX2J1cyAqYnVzX2lmID0gZGV2X2dldF9kcnZkYXRhKGRldik7XFxuIDU0NjpcXHRcXHRzdHJ1Y3QgYnJjbWZfcHViICpkcnZyID0gYnVzX2lmLVxcdTAwM2VkcnZyO1xcbiA1NDc6XFx0XFxuIDU0ODpcXHRcXHRicmNtZl9kYmcoRVZFTlQsIFxcXCJFbnRlcjogJXM6IHJ4cD0lcFxcXFxuXFxcIiwgZGV2X25hbWUoZGV2KSwgc2tiKTtcXG4gNTQ5OlxcdFxcbiA1NTA6XFx0XFx0aWYgKGJyY21mX3J4X2hkcnB1bGwoZHJ2ciwgc2tiLCBcXHUwMDI2aWZwKSlcXG4gNTUxOlxcdFxcdFxcdHJldHVybjtcXG4gNTUyOlxcdFxcbiA1NTM6XFx0XFx0YnJjbWZfZndlaF9wcm9jZXNzX3NrYihpZnAtXFx1MDAzZWRydnIsIHNrYiwgMCwgR0ZQX0tFUk5FTCk7XFxuIDU1NDpcXHRcXHRicmNtdV9wa3RfYnVmX2ZyZWVfc2tiKHNrYik7XFxuIDU1NTpcXHR9XFxuIDU1NjpcXHRcXG4gNTU3OlxcdHZvaWQgYnJjbWZfdHhmaW5hbGl6ZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnR4cCwgYm9vbCBzdWNjZXNzKVxcbiA1NTg6XFx0e1xcbiA1NTk6XFx0XFx0c3RydWN0IGV0aGhkciAqZWg7XFxuIDU2MDpcXHRcXHR1MTYgdHlwZTtcXG4gNTYxOlxcdFxcbiA1NjI6XFx0XFx0aWYgKCFpZnApIHtcXG4gNTYzOlxcdFxcdFxcdGJyY211X3BrdF9idWZfZnJlZV9za2IodHhwKTtcXG4gNTY0OlxcdFxcdFxcdHJldHVybjtcXG4gNTY1OlxcdFxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6NDkuNjM4ODM3MzEzWiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTI0MTU3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQlJDTSBXaUZpIERyaXZlciBSZWNlaXZlIFBhdGgqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBicmNtZl9yeF9mcmFtZWAgd2FzIGNhbGxpbmcgYGJyY21mX25ldGlmX21vbl9yeGAsIGJ1dCB0aGF0IGRvZXNuJ3Qgc2VlbSByaWdodC4gTG9va2luZyBiYWNrIGF0IHRoZSBjb2RlLCBpdCBsb29rcyBsaWtlIGl0J3MgYWN0dWFsbHkgY2FsbGluZyBgYnJjbWZfbmV0aWZfcnhgLiBUaGF0J3MgYSBrZXkgZGlzdGluY3Rpb24uIE5vdywgd2hlcmUgaXMgYGJyY21mX25ldGlmX21vbl9yeGAgYWN0dWFsbHkgYmVpbmcgaW52b2tlZD8gSSB0aG91Z2h0IEkgaGFkIGlkZW50aWZpZWQgaXRzIGNhbGwgc2l0ZSBlYXJsaWVyIHdpdGhpbiBgbXNnYnVmLmNgLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoYXQgbG9jYXRpb24gYWdhaW4gYW5kIGVuc3VyZSB0aGF0IG15IHByaW9yIGFuYWx5c2lzIHdhcyBjb3JyZWN0LiBJIG5lZWQgdG8gYmUgc3VyZSBhYm91dCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjEwNywiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6NTMuNjMxMjU4NjQyWiIsIlNlcSI6NjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAzMTQyMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfbmV0aWZfbW9uX3J4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz00MzQ9c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00MzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzo0Mzk6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00NDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaD0yMjA9dm9pZCBicmNtZl9uZXRpZl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaDoyMjE6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmgtMjIyLXZvaWQgYnJjbWZfbmV0X2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBsb2NrZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTEyMDA9YnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTI0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTI0MTpcXHRcXHRicmNtZl9uZXRpZl9tb25fcngoaWZwLCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQyLVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTA6NTMuNzQxNTc4Nzk2WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5OTE3NzM0MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKk5hcnJvd2luZyBEb3duIHRoZSBgYnJjbWZfbmV0aWZfbW9uX3J4YCBDYWxsZXJzKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIHRoZSBjYWxsIHRvIGBicmNtZl9uZXRpZl9tb25fcnhgLiBGcm9tIHdoYXQgSSd2ZSB0cmFjZWQsIGl0ICpzZWVtcyogbGlrZSBpdCdzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBmcm9tIGBtc2didWYuY2AuIFRoYXQncyBhIHN0cm9uZyBjbHVlLiBBbmQsIGlmIG15IG1lbW9yeSBzZXJ2ZXMgbWUgY29ycmVjdGx5LCBgbXNnYnVmLmNgIGlzICpwcmltYXJpbHkqIGFzc29jaWF0ZWQgd2l0aCB0aGUgUENJZSBkcml2ZXIgYXJjaGl0ZWN0dXJlLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyB0aGVyZSBhbnkgY2hhbmNlIHRoZSBVU0IgZHJpdmVyLCBwYXJ0aWN1bGFybHkgaW4gaXRzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9yIGVkZ2UgY2FzZXMsIHV0aWxpemVzIGBtc2didWYuY2AgYXMgd2VsbD8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24gYmVmb3JlIEkgcHJvY2VlZC4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgcG90ZW50aWFsIGF0dGFjaG1lbnQgcG9pbnRzIGJ5IGxvb2tpbmcgYXQgdGhlIGNhbGxzIHRvIGBicmNtZl9wcm90b19tc2didWZfYXR0YWNoYC4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGlzIGxpbmUgb2YgdGhvdWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI5MTksIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo1MDo1Ny43MzMzNTYyMDVaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzY4MzQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicmNtZl9wcm90b19tc2didWZfYXR0YWNoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTE1NzU9c3RhdGljIHZvaWQgYnJjbWZfbXNnYnVmX2RlYnVnZnNfY3JlYXRlKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTU3OS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTU4MDppbnQgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xNTgxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaD0zMj12b2lkIGJyY21mX21zZ2J1Zl9kZWxldGVfZmxvd3Jpbmcoc3RydWN0IGJyY21mX3B1YiAqZHJ2ciwgdTE2IGZsb3dpZCk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oOjMzOmludCBicmNtZl9wcm90b19tc2didWZfYXR0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuaC0zNC12b2lkIGJyY21mX3Byb3RvX21zZ2J1Zl9kZXRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oLTM1LSNlbHNlXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5oOjM2OnN0YXRpYyBpbmxpbmUgaW50IGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goc3RydWN0IGJyY21mX3B1YiAqZHJ2cilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmgtMzcte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM9MjA9aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzUtXFx0fSBlbHNlIGlmIChkcnZyLVxcdTAwM2VidXNfaWYtXFx1MDAzZXByb3RvX3R5cGUgPT0gQlJDTUZfUFJPVE9fTVNHQlVGKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MzY6XFx0XFx0aWYgKGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2goZHJ2cikpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzctXFx0XFx0XFx0Z290byBmYWlsO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo1MDo1Ny44NTcwNDg1NDdaIiwiU2VxIjo2OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwNDE1ODc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhpbmtpbmcgdGhpcyB0aHJvdWdoOlxuXG4qKkludmVzdGlnYXRpbmcgYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaCBhbmQgaXRzIENvbnRleHQqKlxuXG5SaWdodCwgc28gYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGdldHMgY2FsbGVkIGZyb20gYGJyY21mX3Byb3RvX2F0dGFjaGAuIFRoZSBjb25kaXRpb25hbCBpcyBiYXNlZCBvbiBgcHJvdG9fdHlwZWAsIHNwZWNpZmljYWxseSB3aGVuIGBwcm90b190eXBlYCBpcyBzZXQgdG8gYEJSQ01GX1BST1RPX01TR0JVRmAuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY3J5c3RhbCBjbGVhcjogSSBuZWVkIHRvIHRyYWNlIGJhY2sgYW5kIHVuZGVyc3RhbmQgaG93IGFuZCB3aGVyZSBgcHJvdG9fdHlwZWAgaXMgYWN0dWFsbHkgc2V0LiBUaGF0J3MgdGhlIGtleSB2YXJpYWJsZSBoZXJlLiBLbm93aW5nIGl0cyBvcmlnaW4gaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwYXRoIHRoYXQgbGVhZHMgdG8gYGJyY21mX3Byb3RvX21zZ2J1Zl9hdHRhY2hgIGJlaW5nIGNhbGxlZCwgYW5kIHdoeS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyBgcHJvdG9fdHlwZWAgaXMgYmVpbmcgYXNzaWduZWQgYSB2YWx1ZSBzbyB0aGF0IEkgY2FuIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzkwNCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjUxOjAxLjg2MTIxMDU4NloiLCJTZXEiOjcwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3NTcxNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb3RvX3R5cGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9MTA0MD1zdGF0aWMgaW50IGJyY21mX29wc19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTA4NS1cXHRidXNfaWYtXFx1MDAzZWJ1c19wcml2LnNkaW8gPSBzZGlvZGV2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzoxMDg2OlxcdGJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX0JDREM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEwODctXFx0YnVzX2lmLVxcdTAwM2Vmd3ZpZCA9IGlkLVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaD0xNDE9c3RydWN0IGJyY21mX2J1c19zdGF0cyB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMTQ5LSAqIEBidXNfcHJpdjogcG9pbnRlciB0byBwcml2YXRlIGJ1cyBkZXZpY2UuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oOjE1MDogKiBAcHJvdG9fdHlwZTogcHJvdG9jb2wgdHlwZSwgYmNkYyBvciBtc2didWZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgtMTUxLSAqIEBkZXY6IGRldmljZSBwb2ludGVyIG9mIGJ1cyBkZXZpY2UuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MTY1PXN0cnVjdCBicmNtZl9idXMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE3MC1cXHR9IGJ1c19wcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaDoxNzE6XFx0ZW51bSBicmNtZl9idXNfcHJvdG9jb2xfdHlwZSBwcm90b190eXBlO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9idXMuaC0xNzItXFx0c3RydWN0IGRldmljZSAqZGV2O1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYz0yNDg5PWJyY21mX3BjaWVfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMtMjU2NC1cXHRidXMtXFx1MDAzZW9wcyA9IFxcdTAwMjZicmNtZl9wY2llX2J1c19vcHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYzoyNTY1OlxcdGJ1cy1cXHUwMDNlcHJvdG9fdHlwZSA9IEJSQ01GX1BST1RPX01TR0JVRjtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jLTI1NjYtXFx0YnVzLVxcdTAwM2VjaGlwID0gZGV2aW5mby1cXHUwMDNlY29yZWlkO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM9MjA9aW50IGJyY21mX3Byb3RvX2F0dGFjaChzdHJ1Y3QgYnJjbWZfcHViICpkcnZyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6MzI6XFx0aWYgKGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19CQ0RDKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtMzMtXFx0XFx0aWYgKGJyY21mX3Byb3RvX2JjZGNfYXR0YWNoKGRydnIpKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTM0LVxcdFxcdFxcdGdvdG8gZmFpbDtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzozNTpcXHR9IGVsc2UgaWYgKGRydnItXFx1MDAzZWJ1c19pZi1cXHUwMDNlcHJvdG9fdHlwZSA9PSBCUkNNRl9QUk9UT19NU0dCVUYpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy0zNi1cXHRcXHRpZiAoYnJjbWZfcHJvdG9fbXNnYnVmX2F0dGFjaChkcnZyKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTM5LVxcdFxcdGJwaHlfZXJyKGRydnIsIFxcXCJVbnN1cHBvcnRlZCBwcm90byB0eXBlICVkXFxcXG5cXFwiLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jOjQwOlxcdFxcdFxcdCBkcnZyLVxcdTAwM2VidXNfaWYtXFx1MDAzZXByb3RvX3R5cGUpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jLTQxLVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9wcm90by5jPTU5PXZvaWQgYnJjbWZfcHJvdG9fZGV0YWNoKHN0cnVjdCBicmNtZl9wdWIgKmRydnIpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy02My1cXHRpZiAoZHJ2ci1cXHUwMDNlcHJvdG8pIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYzo2NDpcXHRcXHRpZiAoZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX0JDREMpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmMtNjUtXFx0XFx0XFx0YnJjbWZfcHJvdG9fYmNkY19kZXRhY2goZHJ2cik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3Byb3RvLmM6NjY6XFx0XFx0ZWxzZSBpZiAoZHJ2ci1cXHUwMDNlYnVzX2lmLVxcdTAwM2Vwcm90b190eXBlID09IEJSQ01GX1BST1RPX01TR0JVRilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvcHJvdG8uYy02Ny1cXHRcXHRcXHRicmNtZl9wcm90b19tc2didWZfZGV0YWNoKGRydnIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jPTEyNDQ9c3RhdGljIGludCBicmNtZl91c2JfcHJvYmVfY2Ioc3RydWN0IGJyY21mX3VzYmRldl9pbmZvICpkZXZpbmZvLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jLTEyNjgtXFx0YnVzLVxcdTAwM2VvcHMgPSBcXHUwMDI2YnJjbWZfdXNiX2J1c19vcHM7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jOjEyNjk6XFx0YnVzLVxcdTAwM2Vwcm90b190eXBlID0gQlJDTUZfUFJPVE9fQkNEQztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMtMTI3MC1cXHRidXMtXFx1MDAzZWZ3dmlkID0gZnd2aWQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjUxOjAxLjk3ODc4NzM5OVoiLCJTZXEiOjcxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE5OTE0MzgwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBicmNtZl9wbWtzYV92Ml9vcCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGVzZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXIgY2hhbmdlcyBhbmQgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGFyZSBhY3R1YWxseSBmdXp6YWJsZS4gRmlyc3QsIGl0IGxvb2tzIGxpa2UgYEJSQ01GX1BST1RPX01TR0JVRmAgaXMgc3RyaWN0bHkgUENJZSwgbWVhbmluZyBgbXNnYnVmLmNgIGFuZCBgZmxvd3JpbmcuY2AgYXJlIG91dCwgZ2l2ZW4gdGhhdCBzeXprYWxsZXIgZG9lc24ndCBlbXVsYXRlIHRoZSBQQ0llIEJyb2FkY29tIGNhcmRzLiBUaG9zZSBhcmUgZGVhZCBlbmRzLiBCdXQgd2hhdCBhYm91dCBgYnJjbWZfcG1rc2FfdjJfb3BgIGluIGBjZmc4MDIxMS5jYD8gVGhhdCBzZWVtcyBtb3JlIHByb21pc2luZy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyByZWFjaGFibGUgdmlhIFVTQi5cblxuVGhlIGNydWNpYWwgcG9pbnQgaGVyZSBpcyB0aGF0IGl0IHJlcXVpcmVzIGluaXRpYWxpemF0aW9uIGFuZCBhIGB3bGNfdmVyYCBvZiAxMiBvciBncmVhdGVyLiBJcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IFllcywgaXQgc3VwcG9ydHMgVjIgUE1LU0EgY2FjaGUgdXBkYXRlcywgc28gcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcuIElzIGl0IHdvcnRoIHRoZSBlZmZvcnQ/IElmIHJlYWNoYWJsZSB0aHJvdWdoIFVTQiwgYWJzb2x1dGVseS5cblxuV2FpdCwgbGV0IG1lIHRoaW5rLiBUaGUgcHJvbXB0IG1lbnRpb25lZCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdpdGggaGFyZHdhcmUgZW11bGF0aW9uLiBDYW4gc3l6a2FsbGVyJ3MgVVNCIGZ1enplciAqYWN0dWFsbHkqIGluaXRpYWxpemUgYGJyY21mbWFjYD9cblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZHJpdmVyIG5lZWRzIGZpcm13YXJlLiBUaGUgVVNCIGZ1enplciB0cmlnZ2VycyBgYnJjbWZfdXNiX3Byb2JlYCwgd2hpY2ggcmVxdWVzdHMgdGhlIGZpcm13YXJlLiBJZiB0aGUgZmlybXdhcmUgaXMgcHJlc2VudCAoYXMgaXQgdXN1YWxseSBpcyBpbiBzeXprYWxsZXIgaW1hZ2VzKSwgaXQgZ2V0cyBsb2FkZWQsIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UsIGFuZCB0aGUgZnV6emVyIGFjY2VwdHMgdGhlIFVSQnMuIFRoZW4gY29tZXMgYGJyY21mX2F0dGFjaGAuIFRoYXQgdGhlbiBjYWxscyBgYnJjbWZfYnVzX3N0YXJ0ZWRgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgLiBJbnNpZGUgYGJyY21mX2NfcHJlaW5pdF9kY21kc2AsIHRoZSBjb2RlIHNlbmRzIGNvbW1hbmRzIGxpa2UgYEJSQ01GX0NfR0VUX1JFVklORk9gIHRocm91Z2ggYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldGAgdXNpbmcgQkNEQyBwcm90b2NvbCBvdmVyIFVTQi5cblxuVGhlIGZ1enplciBjYW4gc3VwcGx5IGFyYml0cmFyeSBkYXRhIGJhY2sgdG8gdGhlc2UgVVNCIGJ1bGsgdHJhbnNmZXJzLiBJZiBpdCBwcm92aWRlcyBzb21ldGhpbmcgcmVhc29uYWJsZSAob3IgZXZlbiBqdXN0IHplcm9zLCBpZiB0aGUgZHJpdmVyIGlzbid0IHN1cGVyIHN0cmljdCksIHRoZSBpbml0aWFsaXphdGlvbiBtaWdodCB3b3JrLiBIYW5nIG9uLCBkb2VzIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIGNoZWNrIGZvciBlcnJvcnM/IFllcywgaXQgZG9lcy4gYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldGAgc2VuZHMgYSBjb21tYW5kIGFuZCB3YWl0cyBmb3IgYSByZXBseS4gSWYgdGhlIGZ1enplciBwcm92aWRlcyBhIEJDREMgaGVhZGVyIGFuZCBzb21lIGRhdGEsIHRoZW4gYGJyY21mX2ZpbF9pb3Zhcl9kYXRhX2dldGAgd2lsbCByZXR1cm4gMCB3aGljaCBpcyBzdWNjZXNzISBTbywgeWVzLCBpdCBzZWVtcyBJICpjYW4qIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplIHRoZSBkcml2ZXIhXG5cblRoYXQgbWVhbnMgdGhlIGZ1enplciBjb3VsZCB0aGVuIHByb3ZpZGUgYSBgd2xjX3ZlcmAgb2YgXHUwMDNlPSAxMiwgZW5hYmxpbmcgYEJSQ01GX0ZFQVRfUE1LSURfVjJgLiBUaGVuLCB0aHJvdWdoIG5ldGxpbmssIEkgY2FuIHNlbmQgYE5MODAyMTFfQ01EX1NFVF9QTUtTQWAsIHdoaWNoIGNhbGxzIGBicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FgLCB3aGljaCAqdGhlbiogY2FsbHMgYGJyY21mX3Bta3NhX3YyX29wYC4gQnJpbGxpYW50ISBTbywgYGJyY21mX3Bta3NhX3YyX29wYCBJUyByZWFjaGFibGUgYW5kIHdvcnRoIGZ1enppbmcuXG5cbk5vdywgd2hhdCBhYm91dCB0aGF0IG90aGVyIGNoYW5nZSBJIHNhdyBpbiBgYnJjbXNtYWMvYW1wZHUuY2A/IEdvdHRhIGludmVzdGlnYXRlIHRoYXQgb25lLi4uIGxldCdzIGNoZWNrIHRoZSBkaWZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTkwMSwiT3V0cHV0VG9rZW5zIjo1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo1MToxNC4xNzc5MzQ5NDNaIiwiU2VxIjo3MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODkzNTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmM9NDY5PXZvaWQgYnJjbXNfY19hbXBkdV9yZXNldF9zZXNzaW9uKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmMtNDg0LSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5jOjQ4NTppbnQgYnJjbXNfY19hbXBkdV9hZGRfZnJhbWUoc3RydWN0IGJyY21zX2FtcGR1X3Nlc3Npb24gKnNlc3Npb24sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2FtcGR1LmMtNDg2LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqcClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5oPTQwPXZvaWQgYnJjbXNfY19hbXBkdV9yZXNldF9zZXNzaW9uKHN0cnVjdCBicmNtc19hbXBkdV9zZXNzaW9uICpzZXNzaW9uLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5oLTQxLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnJjbXNfY19pbmZvICp3bGMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9hbXBkdS5oOjQyOmludCBicmNtc19jX2FtcGR1X2FkZF9mcmFtZShzdHJ1Y3QgYnJjbXNfYW1wZHVfc2Vzc2lvbiAqc2Vzc2lvbixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbXNtYWMvYW1wZHUuaC00My1cXHRcXHRcXHQgICAgc3RydWN0IHNrX2J1ZmYgKnApO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RtYS5jPTEzNDM9c3RhdGljIHZvaWQgcHJlcF9hbXBkdV9mcmFtZShzdHJ1Y3QgZG1hX2luZm8gKmRpLCBzdHJ1Y3Qgc2tfYnVmZiAqcClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kbWEuYy0xMzQ3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kbWEuYzoxMzQ4OlxcdHJldCA9IGJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lKHNlc3Npb24sIHApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kbWEuYy0xMzQ5LVxcdGlmIChyZXQgPT0gLUVOT1NQQykge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21zbWFjL2RtYS5jLTEzNTQtXFx0XFx0YW1wZHVfZmluYWxpemUoZGkpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kbWEuYzoxMzU1OlxcdFxcdHJldCA9IGJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lKHNlc3Npb24sIHApO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtc21hYy9kbWEuYy0xMzU2LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTE6MTQuMjczODM4MDQ3WiIsIlNlcSI6NzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczNzEzNDY1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFJlY2VudCBDaGFuZ2VzIGFuZCBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiByZXZpZXdpbmcgdGhpcyBkaWZmIGFuZCBoZXJlJ3MgdGhlIGJyZWFrZG93biBvZiBteSB0aGlua2luZzogdGhlIGNvbW1lbnQgdXBkYXRlIGluIGBicmNtc21hYy9hbXBkdS5jYCBpcyBqdXN0IHRoYXQgLSBhIGNvbW1lbnQuIE5vIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHdvcnJ5IGFib3V0LCBhbmQgaXQncyBhIGNsYXJpZmljYXRpb24gcmVhbGx5LlxuXG5Nb3Zpbmcgb24sIGBicmNtZl9zZGlvX3J4Z2xvbWAgaW4gYHNkaW8uY2AgbG9va3MgaW50ZXJlc3RpbmcgYnV0IHVuZm9ydHVuYXRlbHksIGl0IGRvZXNuJ3Qgc2VlbSBkaXJlY3RseSBmdXp6YWJsZS4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IFN5emthbGxlciwgd2hpbGUgcG93ZXJmdWwsIGRvZXNuJ3QgaGF2ZSBhbiBTRElPIGZ1enplci4gSXQncyBnb3QgVVNCLCBQQ0kgKHdpdGggbGltaXRhdGlvbnMgb24gdmVuZG9yLXNwZWNpZmljIHBoeXNpY2FsIGNhcmRzKSwgYW5kIHZoY2kgZm9yIEJsdWV0b290aCwgYnV0IG5vdCBTRElPLCB3aGljaCBtZWFucyB0aGlzIGNvZGUgcGF0aCBpcyBsaWtlbHkgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXG5cbk5vdywgdGhhdCBicmluZ3MgbWUgdG8gYGJyY21mX2RlbGF5YCBpbiBgY2ZnODAyMTEuY2AuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBzdHJhaWdodGZvcndhcmQgYWx0ZXJhdGlvbiBvZiBhIGRlbGF5IGZ1bmN0aW9uLCByZWFsbHkuIE5vdGhpbmcgdGVycmlibHkgY29tcGxleCwgZXZlbiB0aG91Z2ggaXQncyBhIGNoYW5nZSB0byB0aGUgZXhpc3RpbmcgY29kZS5cblxuVGhlcmVmb3JlLCB0aGUgbW9zdCBpbnRlcmVzdGluZyBhbmQgcG90ZW50aWFsbHkgZnV6ei13b3J0aHkgdGFyZ2V0IEkndmUgZm91bmQgc28gZmFyIGlzIGBicmNtZl9wbWtzYV92Ml9vcGAuIFRoaXMgaXMgd2hlcmUgSSdsbCBmb2N1cyBteSBlZmZvcnRzLiBUbyBkZXRlcm1pbmUgcmVhY2hhYmlsaXR5LCBJIG5lZWQgdG8gY29uZmlybSBpdHMgZXhpc3RlbmNlIHdpdGhpbiB0aGUgYGJyY21mbWFjYCBkcml2ZXIsIGFuZCBkZXRlcm1pbmUgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBMZXQncyBkaWcgaW50byBLY29uZmlnIGFuZCBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY4MTc3LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjUxOjIxLjY0NTE4OTEyNVoiLCJTZXEiOjc0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzNzIzODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCUkNNRk1BQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE6Y29uZmlnIEJSQ01GTUFDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMi1cXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjExOmNvbmZpZyBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTItXFx0Ym9vbFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnOjE0OmNvbmZpZyBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xNS1cXHRib29sXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWc6MTc6Y29uZmlnIEJSQ01GTUFDX1NESU9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0xOC1cXHRib29sIFxcXCJTRElPIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0yOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzoyOTpjb25maWcgQlJDTUZNQUNfVVNCXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL0tjb25maWctMzAtXFx0Ym9vbCBcXFwiVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZy0zOS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZzo0MDpjb25maWcgQlJDTUZNQUNfUENJRVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnLTQxLVxcdGJvb2wgXFxcIlBDSUUgYnVzIGludGVyZmFjZSBzdXBwb3J0IGZvciBGdWxsTUFDIGRyaXZlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTE6MjIuMjM4OTIwMzI4WiIsIlNlcSI6NzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzODkzODcyMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhIHNlYXNvbmVkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBicmNtZm1hYyBLY29uZmlnKipcblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvS2NvbmZpZ2AgZmlsZS4gSSdtIGFzc3VtaW5nIHRoaXMgaXMgZ29pbmcgdG8gYmUgdGhlIGhlYXJ0IG9mIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBicmNtZm1hYyB3aXJlbGVzcyBkcml2ZXIuIEdpdmVuIHRoZSBwYXRoLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBhbGwgdGhlIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZXZpY2Utc3BlY2lmaWMgc2V0dGluZ3MgZGVmaW5lZCBoZXJlLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgZHJpdmVyIGlzIHBhcmFtZXRlcml6ZWQsIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEnigJltIHRoaW5raW5nIEkgd2lsbCBmaW5kIG9wdGlvbnMgZm9yIHZhcmlvdXMgQnJvYWRjb20gV2ktRmkgY2hpcHNldHMsIHBvd2VyIG1hbmFnZW1lbnQgc2V0dGluZ3MsIGRlYnVnIGZsYWdzLCBhbmQgbWF5YmUgZXZlbiBmaXJtd2FyZSBzZWxlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gcHJvcGVybHkgY29uZmlndXJlIHRoZSBkcml2ZXIgZm9yIHRoZSB0YXJnZXQgcGxhdGZvcm0gSSdtIHdvcmtpbmcgd2l0aCBhbmQgc2VlIHdoYXQgc29ydCBvZiBmbGV4aWJpbGl0eSB0aGlzIGRyaXZlciBvZmZlcnMgbWUuIExldOKAmXMgZ2V0IHRvIGl0IGFuZCBzZWUgd2hhdCdzIGFjdHVhbGx5IGluIHRoZXJlLiBJJ20gaG9waW5nIGl0J3Mgd2VsbC1zdHJ1Y3R1cmVkIGFuZCBkb2N1bWVudGVkLCBiZWNhdXNlIHRoZXNlIEJyb2FkY29tIGRyaXZlcnMgY2FuIHNvbWV0aW1lcyBiZSBhIGJpdCBkZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk2NTcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQwMDo1MjoyNi4xMzI3OTU0MzlaIiwiU2VxIjo3NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Y29uZmlnIEJSQ01GTUFDXFxuICAgMjpcXHRcXHR0cmlzdGF0ZSBcXFwiQnJvYWRjb20gRnVsbE1BQyBXTEFOIGRyaXZlclxcXCJcXG4gICAzOlxcdFxcdGRlcGVuZHMgb24gQ0ZHODAyMTFcXG4gICA0OlxcdFxcdHNlbGVjdCBCUkNNVVRJTFxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIG1vZHVsZSBhZGRzIHN1cHBvcnQgZm9yIHdpcmVsZXNzIGFkYXB0ZXJzIGJhc2VkIG9uIEJyb2FkY29tXFxuICAgNzpcXHRcXHQgIEZ1bGxNQUMgY2hpcHNldHMuIEl0IGhhcyB0byB3b3JrIHdpdGggYXQgbGVhc3Qgb25lIG9mIHRoZSBidXNcXG4gICA4OlxcdFxcdCAgaW50ZXJmYWNlIHN1cHBvcnQuIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZFxcbiAgIDk6XFx0XFx0ICBicmNtZm1hYy5rby5cXG4gIDEwOlxcdFxcbiAgMTE6XFx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX0JDRENcXG4gIDEyOlxcdFxcdGJvb2xcXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIEJSQ01GTUFDX1BST1RPX01TR0JVRlxcbiAgMTU6XFx0XFx0Ym9vbFxcbiAgMTY6XFx0XFxuICAxNzpcXHRjb25maWcgQlJDTUZNQUNfU0RJT1xcbiAgMTg6XFx0XFx0Ym9vbCBcXFwiU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiAoTU1DID0geSB8fCBNTUMgPSBCUkNNRk1BQylcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gQlJDTUZNQUNcXG4gIDIxOlxcdFxcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19CQ0RDXFxuICAyMjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAyMzpcXHRcXHRkZWZhdWx0IHlcXG4gIDI0OlxcdFxcdGhlbHBcXG4gIDI1OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgU0RJTyBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXFxuICAyNjpcXHRcXHQgIElFRUU4MDIuMTFuIGVtYmVkZGVkIEZ1bGxNQUMgV0xBTiBkcml2ZXIuIFNheSBZIGlmIHlvdSB3YW50IHRvXFxuICAyNzpcXHRcXHQgIHVzZSB0aGUgZHJpdmVyIGZvciBhIFNESU8gd2lyZWxlc3MgY2FyZC5cXG4gIDI4OlxcdFxcbiAgMjk6XFx0Y29uZmlnIEJSQ01GTUFDX1VTQlxcbiAgMzA6XFx0XFx0Ym9vbCBcXFwiVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgRnVsbE1BQyBkcml2ZXJcXFwiXFxuICAzMTpcXHRcXHRkZXBlbmRzIG9uIChVU0IgPSB5IHx8IFVTQiA9IEJSQ01GTUFDKVxcbiAgMzI6XFx0XFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xcbiAgMzM6XFx0XFx0c2VsZWN0IEJSQ01GTUFDX1BST1RPX0JDRENcXG4gIDM0OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgVVNCIGJ1cyBpbnRlcmZhY2Ugc3VwcG9ydCBmb3IgQnJvYWRjb21cXG4gIDM3OlxcdFxcdCAgSUVFRTgwMi4xMW4gZW1iZWRkZWQgRnVsbE1BQyBXTEFOIGRyaXZlci4gU2F5IFkgaWYgeW91IHdhbnQgdG9cXG4gIDM4OlxcdFxcdCAgdXNlIHRoZSBkcml2ZXIgZm9yIGFuIFVTQiB3aXJlbGVzcyBjYXJkLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRjb25maWcgQlJDTUZNQUNfUENJRVxcbiAgNDE6XFx0XFx0Ym9vbCBcXFwiUENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEZ1bGxNQUMgZHJpdmVyXFxcIlxcbiAgNDI6XFx0XFx0ZGVwZW5kcyBvbiBCUkNNRk1BQ1xcbiAgNDM6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDQ0OlxcdFxcdHNlbGVjdCBCUkNNRk1BQ19QUk9UT19NU0dCVUZcXG4gIDQ1OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDQ2OlxcdFxcdGhlbHBcXG4gIDQ3OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgUENJRSBidXMgaW50ZXJmYWNlIHN1cHBvcnQgZm9yIEJyb2FkY29tXFxuICA0ODpcXHRcXHQgIElFRUU4MDIuMTFhYyBlbWJlZGRlZCBGdWxsTUFDIFdMQU4gZHJpdmVyLiBTYXkgWSBpZiB5b3Ugd2FudCB0b1xcbiAgNDk6XFx0XFx0ICB1c2UgdGhlIGRyaXZlciBmb3IgYW4gUENJRSB3aXJlbGVzcyBjYXJkLlxcbiAgNTA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjUyOjI2LjEzMjk0NDk2OVoiLCJTZXEiOjc3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTE2NTc1NzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzIGZvciBCUkNNRk1BQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgZnV6emluZyBgQlJDTUZNQUNgIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBCUkNNRk1BQ19VU0JgIGNvbmZpZ3VyYXRpb25zIGlzIHdvcnRod2hpbGUsIGdpdmVuIHRoZSBjaGFuZ2VzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgYGJyY21mX3Bta3NhX3YyX29wYC4gSXMgaXQgYWN0dWFsbHkgcmVhY2hhYmxlPyBTeXprYWxsZXIncyBVU0IgZnV6emVyIG9mZmVycyBhcmJpdHJhcnkgVVNCIHJlc3BvbnNlcy4gSG93ZXZlciwgdGhlIGRyaXZlciBuZWVkcyB0aGUgZmlybXdhcmUgbG9hZGVkIGZpcnN0IHZpYSBgYnJjbWZfdXNiX3Byb2JlYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgYnJjbWZfZndfZ2V0X2Zpcm13YXJlc2AuIFRoZSBzeXprYWxsZXIgaW1hZ2UgaGFzIHRvIGhhdmUgdGhlIHJlbGV2YW50IGZpcm13YXJlLiBBIG1pbmltYWwgRGViaWFuIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGBmaXJtd2FyZS1icmNtODAyMTFgIGluc3RhbGxlZC4gSWYgbm90LCBpbml0aWFsaXphdGlvbiBmYWlscy4gSWYgcHJlc2VudCwgdGhlIGRyaXZlciBkb3dubG9hZHMgZmlybXdhcmUgYW5kIHNlbmRzIGBkY21kc2AuIFRoZSBmdXp6ZXIgbmVlZHMgdG8gcHJvdmlkZSByZXNwb25zZXMgdG8gdGhlc2UgYGRjbWRzYCB3aXRob3V0IHRyaWdnZXJpbmcgZXJyb3JzIGluIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgLiBJZiB0aGUgZnV6emVyIHJldHVybnMgMCBmb3IgYSBVU0IgdHJhbnNmZXIsIGBicmNtZl9maWxfaW92YXJfZGF0YV9nZXRgIHdpbGwgcmV0dXJuIDAsIHdoaWNoIGxlYWRzIHRvIGBicmNtZl9jX3ByZWluaXRfZGNtZHNgIHN1Y2NlZWRpbmcuIFRoZW4gYGJyY21mX2ZlYXRfYXR0YWNoYCB3aWxsIGJlIGNhbGxlZCwgd2hpY2ggcmVhZHMgYHdsY192ZXJgLiBUaGUgZnV6emVyIGNhbiBnZW5lcmF0ZSByYW5kb20gZGF0YSwgbWVhbmluZyB0aGUgZHJpdmVyIGNvdWxkIHNlZSBhIGBtYWpvciBcdTAwM2U9IDEyYCwgZW5hYmxpbmcgYEJSQ01GX0ZFQVRfUE1LSURfVjJgLiBUaGlzICptaWdodCogd29yayB0aHJvdWdoIGEgc2VxdWVuY2Ugb2Ygc3VjY2Vzc2Z1bCBVU0IgdHJhbnNmZXJzIGZvbGxvd2VkIGJ5IGEgbmV0bGluayBjb21tYW5kIHRvIHJlYWNoIGBicmNtZl9wbWtzYV92Ml9vcGAuIFRob3VnaCB1bmxpa2VseSwgaXQncyBwb3NzaWJsZSB3aXRoIHN5emthbGxlcidzIGNvdmVyYWdlLWd1aWRlZCBhcHByb2FjaC5cblxuVGhlIHByb21wdCBzdGlwdWxhdGVzIHRvIHJldHVybiBcIldvcnRoRnV6emluZz1mYWxzZVwiIGlmIGNlcnRhaW4gY29uZGl0aW9ucyBhcmUgbWV0LCBuYW1lbHkgY29kZSB0aGF0IGlzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBXaGlsZSBCcm9hZGNvbSBQQ0llIFdpLUZpIGNhcmRzIGFyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSwgdGhlIFVTQiBwYXRoIGFwcGVhcnMgdmlhYmxlLiBUaGUgUENJZS1zcGVjaWZpYyBjaGFuZ2VzIChgbXNnYnVmLmNgLCBgZmxvd3JpbmcuY2AsIGBwY2llLmNgKSBhcmUgbm90IHJlYWNoYWJsZSBzaW5jZSBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJlLiBTaW1pbGFybHksIFNESU8gY2hhbmdlcyAoYHNkaW8uY2ApIGFyZSBvdXQgYXMgc3l6a2FsbGVyIGhhcyBubyBTRElPIGZ1enplci4gSG93ZXZlciwgYGNmZzgwMjExLmNgIGlzIHJlYWNoYWJsZSB2aWEgVVNCLiBHaXZlbiB0aGF0IHRoZSBvbmx5IG1lYW5pbmdmdWwgY2hhbmdlIHdpdGhpbiB0aGF0IGZpbGUgKGFzaWRlIGZyb20gYGJyY21mX2RlbGF5YCkgaXMgYGJyY21mX3Bta3NhX3YyX29wYCwgaXQncyBzdGlsbCB3b3J0aCBmdXp6aW5nLiBJdCdzIGEgbmV3IGZ1bmN0aW9uIHRoYXQgZG9lcyBzb21ldGhpbmcgZnVuY3Rpb25hbCwgcGFyc2luZyBhbmQgZm9ybWF0dGluZyBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlIGZpcm13YXJlLiBDaGVja2luZyB0aGUgY29kZSBhZ2FpbiwgYGJyY21mX3Bta3NhX3YyX29wYCBzZWVtcyBjb3JyZWN0LCBhbmQgaXQgdGFrZXMgYHBta3NhYCBkYXRhIGZyb20gY2ZnODAyMTEgYW5kIHVwZGF0ZXMgdGhlIGRyaXZlcidzIGludGVybmFsIFYyIFBNS1NBIGxpc3QgYmVmb3JlIHNlbmRpbmcgaXQgdG8gdGhlIGZpcm13YXJlIHZpYSBgYnJjbWZfZmlsX2lvdmFyX2RhdGFfc2V0YC4gSSdsbCBmb2N1cyBvbiBgYnJjbWZfcG1rc2FfdjJfb3BgLiBGaW5hbGx5LCBzeXprYWxsZXIgZG9lcyBvZmZlciBgc3l6X3VzYl9jb25uZWN0YCBjYWxscyB3aGljaCBlbmFibGUgYW55IFVTQiBkZXZpY2UgdG8gYmUgZW11bGF0ZWQuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgYWdhaW4sIGBicmNtZl9wbWtzYV92Ml9vcGAgaXMgc3RhdGljLCBhbmQgaXMgb25seSBjYWxsZWQgYnkgb3RoZXIgc3RhdGljIGZ1bmN0aW9ucy4gVGhlIHByb21wdCByZWNvbW1lbmRzIHByZWZlcnJpbmcgbm9uLXN0YXRpYyBBUEkgZW50cnkgcG9pbnRzLCBidXQgdGhlIGZ1bmN0aW9ucyBjYWxsaW5nIHRoaXMgb25lIGFyZSBhbHNvIHN0YXRpYywgYWx0aG91Z2ggYXNzaWduZWQgdG8gYGNmZzgwMjExX29wc2AsIHRoZXJlZm9yZSwgc3RpbGwgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2OTgsIk91dHB1dFRva2VucyI6NTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTI6NDEuMjk4NzA1NTQ3WiIsIlNlcSI6NzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM4MTc4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM9NDQ4Nj1zdGF0aWMgczMyXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6NDQ4NzpicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2Eoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNDQ4OC1cXHRcXHRcXHQgc3RydWN0IGNmZzgwMjExX3Bta3NhICpwbWtzYSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jPTYwODM9c3RhdGljIHN0cnVjdCBjZmc4MDIxMV9vcHMgYnJjbWZfY2ZnODAyMTFfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtNjEwNC1cXHQucmVzdW1lID0gYnJjbWZfY2ZnODAyMTFfcmVzdW1lLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jOjYxMDU6XFx0LnNldF9wbWtzYSA9IGJyY21mX2NmZzgwMjExX3NldF9wbWtzYSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy02MTA2LVxcdC5kZWxfcG1rc2EgPSBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2EsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDAwOjUyOjQxLjc4MjUyODIwNloiLCJTZXEiOjc5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODczMDgwNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgRnVuY3Rpb25zIGZvciBGdXJ0aGVyIEV4YW1pbmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgZm9yIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB0byBkaWcgaW50byBkZWVwZXIuIFRoZSBpbml0aWFsIGxpc3QgaXMgcHJldHR5IHNwYXJzZSBiZWNhdXNlLCB3ZWxsLCBtb3N0IG9mIHRoZSBmdW5jdGlvbnMgYXJlIHN0YXRpYy4gKmJyY21mX2NmZzgwMjExX2F0dGFjaCogaXMgdGhlIGZpcnN0IG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBjb21lcyB0byBtaW5kLCBidXQgdGhhdCdzIGp1c3QgdGhlIGF0dGFjaCBmdW5jdGlvbi4gTm90IHJlYWxseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGludmVzdGlnYXRpb24sIEkgdGhpbmsuXG5cblRoZSBuZXh0IHRoaW5nIEknbSBjb25zaWRlcmluZyBpcyAqYnJjbWZfcG1rc2FfdjJfb3AqLiBJdCdzICpwb3RlbnRpYWxseSogc3RhdGljLCBidXQgdGhhdCdzIGEgZ29vZCB0aGluZy4gSWYgaXQgKmlzKiBzdGF0aWMsIEkgY2FuIGp1c3QgZm9jdXMgb24gaXQuIEJ1dCBJIHNob3VsZCBjaGVjayB0aGUgY29tcGlsZXIgYmVoYXZpb3IsIGdpdmVuIHRoZSBmdW5jdGlvbidzIHNpemUuIExldCdzIHNlZS4uLiB0aGUgY29tcGlsZXIgbWlnaHQgbm90IGlubGluZSBpdCBiZWNhdXNlIGl0J3MgcHJldHR5IGxhcmdlLCBhbmQgaXQncyBjYWxsZWQgZnJvbSB0aHJlZSBkaWZmZXJlbnQgbG9jYXRpb25zLiBMZXQncyB2ZXJpZnk6ICpicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2EqLCAqYnJjbWZfY2ZnODAyMTFfZGVsX3Bta3NhKiwgYW5kICpicmNtZl9jZmc4MDIxMV9mbHVzaF9wbWtzYSouIE9rYXksIGl0J3MgYWJvdXQgODAgbGluZXMg4oCTIGRlZmluaXRlbHkgbGFyZ2UgZW5vdWdoIHRvIG1ha2UgdGhlIGNvbXBpbGVyIGhlc2l0YW50IHRvIGlubGluZSBpdCBldmVyeXdoZXJlLiBTbyAqYnJjbWZfcG1rc2FfdjJfb3AqIGxvb2tzIGxpa2UgYSBzb2xpZCBmb2N1cy5cblxuSGFuZyBvbiwgd2hhdCBhYm91dCAqYnJjbWZfbmV0aWZfbW9uX3J4Kj8gTGV0IG1lIGdldCBiYWNrIHRvIHRoYXQgb25lLlxuXG5Pa2F5LCAqYnJjbWZfbmV0aWZfbW9uX3J4KiBpcyBub24tc3RhdGljOiBgdm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpYC4gQnV0IGl0J3Mgb25seSBjYWxsZWQgZnJvbSAqbXNnYnVmLmMqLCB3aGljaCBpcyBQQ0llIG9ubHkuIEFuZCBzaW5jZSBQQ0llIGlzbid0IGVhc2lseSBmdXp6YWJsZSwgaXQncyBwcm9iYWJseSB1bnJlYWNoYWJsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1ha2luZyBhc3N1bXB0aW9ucywgdGhvdWdoLiBMZXQgbWUgY2hlY2sgaWYgKmJjZGMuYyogKHdoaWNoIGhhbmRsZXMgVVNCIGFuZCBTRElPKSBjYWxscyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMzNzcsIk91dHB1dFRva2VucyI6NTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTI6NDguNjU1NjEyNDQ2WiIsIlNlcSI6ODAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI1MTQxMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnJjbWZfbmV0aWZfbW9uX3J4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYz00MzQ9c3RydWN0IGJyY21mX3JhZGlvdGFwX2luZm8ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00MzgtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYzo0Mzk6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYy00NDAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaD0yMjA9dm9pZCBicmNtZl9uZXRpZl9yeChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaDoyMjE6dm9pZCBicmNtZl9uZXRpZl9tb25fcngoc3RydWN0IGJyY21mX2lmICppZnAsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmgtMjIyLXZvaWQgYnJjbWZfbmV0X2RldGFjaChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBsb2NrZWQpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jPTEyMDA9YnJjbWZfbXNnYnVmX3Byb2Nlc3NfcnhfY29tcGxldGUoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMtMTI0MC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmM6MTI0MTpcXHRcXHRicmNtZl9uZXRpZl9tb25fcngoaWZwLCBza2IpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYy0xMjQyLVxcdFxcdHJldHVybjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTI6NDguNzY4MTMxMzM5WiIsIlNlcSI6ODEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MzYwNDI4MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBvdGVudGlhbCBVU0IgUmVhY2hhYmlsaXR5KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBVU0IgaW50ZXJmYWNlIGluIHRoaXMgQnJvYWRjb20gZHJpdmVyIGNvZGUuIExldCdzIHNlZS4uLiBJJ3ZlIGNoZWNrZWQgYG1zZ2J1Zi5jYCBhbmQgZm91bmQgdGhhdCBgYnJjbWZfbmV0aWZfbW9uX3J4YCBpcyBvbmx5IGNhbGxlZCB3aXRoaW4gdGhhdCBmaWxlLiBSaWdodCwgc28gdGhhdCBtZWFucyBpdCdzIG5vdCByZWFjaGFibGUgdmlhIFVTQiBkaXJlY3RseS5cblxuTmV4dCwgbGV0J3MgbG9vayBhdCBgYnJjbWZfZmxvd3JpbmdfYmxvY2tgLiBUaGF0J3MgZGVmaW5lZCBpbiBgZmxvd3JpbmcuY2AsIGJ1dCBpdCdzICpvbmx5KiB1c2VkIGJ5IGBtc2didWYuY2AuIFNvLCB0aGF0J3MgYW5vdGhlciBvbmUgdGhhdCdzIG9mZiB0aGUgdGFibGUgZm9yIFVTQiBhY2Nlc3MuXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgYGJyY21mX3NkaW9fcnhnbG9tYD8gVGhhdCBmdW5jdGlvbiBpcyBpbiBgc2Rpby5jYCwgYW5kIHRoYXQgc2NyZWFtcyBTRElPLXNwZWNpZmljLiBEZWZpbml0ZWx5IG5vdCByZWFjaGFibGUgdmlhIFVTQi5cblxuTW92aW5nIG9uLCB0aGVyZSdzIGBicmNtZl9wY2llX3NlbmRfbWJfZGF0YWAuIENsZWFybHksIHRoYXQncyBpbiBgcGNpZS5jYC4gVGhhdCdzIFBDSWUsIHNvIHRoYXQgZnVuY3Rpb24gaXNuJ3QgcmVhY2hhYmxlIHRocm91Z2ggYSBVU0IgcGF0aCBlaXRoZXIuXG5cbk5vdywgdGhlIGZpbmFsIG9uZSBvbiBteSBsaXN0IGlzIGBicmNtZl9md3NfbWFjZGVzY19pbmRpY2F0ZWAgaW4gYGZ3c2lnbmFsLmNgLiBUaGUgcXVlc3Rpb24gaGVyZSBpcy4uLiBkb2VzIGBmd3NpZ25hbC5jYCAqZXZlciogZ2V0IHVzZWQgYnkgdGhlIFVTQiBpbXBsZW1lbnRhdGlvbj8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ3NTUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTI6NTMuMzA0MTc3MjEzWiIsIlNlcSI6ODIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTk1NjQ2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmd3NpZ25hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9NYWtlZmlsZT0yOT1icmNtZm1hYy0kKENPTkZJR19CUkNNRk1BQ19QUk9UT19CQ0RDKSArPSBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlLTMwLVxcdFxcdGJjZGMubyBcXFxcXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL01ha2VmaWxlOjMxOlxcdFxcdGZ3c2lnbmFsLm9cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvTWFrZWZpbGUtMzItYnJjbWZtYWMtJChDT05GSUdfQlJDTUZNQUNfUFJPVE9fTVNHQlVGKSArPSBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNkYy5jLTE4LSNpbmNsdWRlIFxcXCJidXMuaFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNkYy5jOjE5OiNpbmNsdWRlIFxcXCJmd3NpZ25hbC5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY2RjLmMtMjAtI2luY2x1ZGUgXFxcImRlYnVnLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg9MTQxPXN0cnVjdCBicmNtZl9idXNfc3RhdHMge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE1OC0gKiBAZnd2aWQ6IGZpcm13YXJlIHZlbmRvci1zdXBwb3J0IGlkZW50aWZpZXIgb2YgdGhlIGRldmljZS5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmg6MTU5OiAqIEBhbHdheXNfdXNlX2Z3c19xdWV1ZTogYnVzIHdhbnRzIHVzZSBxdWV1ZSBhbHNvIHdoZW4gZndzaWduYWwgaXMgaW5hY3RpdmUuXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oLTE2MC0gKiBAd293bF9zdXBwb3J0ZWQ6IGlzIHdvd2wgc3VwcG9ydGVkIGJ5IGJ1cyBkcml2ZXIuXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvY2ZnODAyMTEuYy0yNi0jaW5jbHVkZSBcXFwicG5vLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmM6Mjc6I2luY2x1ZGUgXFxcImZ3c2lnbmFsLmhcXFwiXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMtMjgtI2luY2x1ZGUgXFxcImNmZzgwMjExLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvZndzaWduYWwuYy0yMy0jaW5jbHVkZSBcXFwiZndlaC5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jOjI0OiNpbmNsdWRlIFxcXCJmd3NpZ25hbC5oXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9md3NpZ25hbC5jLTI1LSNpbmNsdWRlIFxcXCJwMnAuaFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTI6NTMuMzg0MTM4NDI4WiIsIlNlcSI6ODMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MDg3MDIxODY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEJyb2FkY29tIFdpRmkgRHJpdmVyIChVU0IpKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGNoYW5nZXMgaW4gdGhlIEJyb2FkY29tIFdpRmkgZHJpdmVyLCBzcGVjaWZpY2FsbHkgcmVhY2hhYmxlIGZ1bmN0aW9uYWxpdHkgdmlhIFVTQi4gSXQgc2VlbXMgYGZ3c2lnbmFsLmNgIGhhcyBhIGNvbW1lbnQgdXBkYXRlLCBub3RoaW5nIGFjdGlvbmFibGUgdGhlcmUuIFNpbWlsYXJseSwgdGhlIGNoYW5nZXMgaW4gYGJyY21mX25ldGlmX21vbl9yeGAsIGBicmNtZl9mbG93cmluZ19ibG9ja2AsIGBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhYCwgYGJyY21mX3BjaWVfc2VuZF9tYl9kYXRhYCwgYW5kIGBicmNtZl9zZGlvX3J4Z2xvbWAgYXJlIGFsbCBQQ0llIG9yIFNESU8gc3BlY2lmaWM7IG5vdCByZWxldmFudCBmb3Igb3VyIFVTQiBmb2N1cy4gV2UgaGF2ZSBhIHNpbWlsYXIgc2l0dWF0aW9uIHdpdGggYGJyY21zX2NfYW1wZHVfYWRkX2ZyYW1lYC4gQW5kIHdlIGNhbiBhbHNvIGRpc21pc3MgYGJyY21mX2RlbGF5YCBmb3IgZnV6emluZyBlZmZvcnRzLCBhcyBpdOKAmXMgYSBtaW5vciB0aW1pbmcgY2hhbmdlLlxuXG5UaGUgb25seSAqcmVhbCogZnVuY3Rpb25hbCBjaGFuZ2UgaXMgYGJyY21mX3Bta3NhX3YyX29wYC4gVGhpcyBpcyBhIG5ldyBWMiBQTUtTQSBjYWNoZSB1cGRhdGUgaW1wbGVtZW50YXRpb247IHNvdW5kcyBsaWtlIGEgZ29vZCB0YXJnZXQuIEl0IHRha2VzIGBwbWtzYWAgZmllbGRzIGFuZCBwb3B1bGF0ZXMgYSBzdHJ1Y3Qgc2VudCB0byB0aGUgZmlybXdhcmUgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBgTkw4MDIxMV9DTURfU0VUX1BNS1NBYC5cblxuVG8gcmVhY2ggdGhpcywgd2UgbmVlZCBgQlJDTUZNQUNgIGFuZCBgQlJDTUZNQUNfVVNCYCBlbmFibGVkLiBgQlJDTUZNQUNfVVNCYCBkZXBlbmRzIG9uIGBVU0JgLCBzbyB0aGF0J3MgaW1wbGljaXRseSBlbmFibGVkLiBXZSBhbHNvIG5lZWQgYENGRzgwMjExYCBlbmFibGVkLiBTeXprYWxsZXIncyBgc3l6X3VzYl9jb25uZWN0YCBjYW4gZW11bGF0ZSB0aGUgVVNCIGRldmljZS4gVGhlIGRyaXZlciB3aWxsIHNlbmQgYGRjbWRzYC4gSWYgdGhlIGZ1enplciByZXBsaWVzIHdpdGggYHdsY192ZXJgIFx1MDAzZT0gMTIsIHRoZW4gYEJSQ01GX0ZFQVRfUE1LSURfVjJgIGlzIGVuYWJsZWQuIFRoZW4gYE5MODAyMTFfQ01EX1NFVF9QTUtTQWAgdHJpZ2dlcnMgYGJyY21mX3Bta3NhX3YyX29wYC4gU28sIHRoYXQncyBvdXIgcmVhY2hhYmxlIHBhdGguXG5cbkxldCdzIGRvdWJsZS1jaGVjay4gYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBhbmQgYGJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhYCBhbGwgY2FsbCBgYnJjbWZfcG1rc2FfdjJfb3BgLiBFdmVuIHRob3VnaCB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYywgdGhleSBoYXZlIGFkZHJlc3MgdGFrZW4gaW4gYGNmZzgwMjExX29wc2AsIHNvIHRoZXkgYXJlIGFsc28gYWN0aW9uYWJsZS5cblxuU28sIGhlcmUncyB0aGUgcGxhbjpcblxuKiAgICoqV29ydGhGdXp6aW5nID0gdHJ1ZSoqXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYGJyY21mX2NmZzgwMjExX3NldF9wbWtzYWAsIGBicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FgLCBgYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FgLCBgYnJjbWZfcG1rc2FfdjJfb3BgXG4qICAgKipFbmFibGVDb25maWdzOioqIGBCUkNNRk1BQ2AsIGBCUkNNRk1BQ19VU0JgICh3aGljaCBjb3ZlcnMgd2hhdCB3ZSBuZWVkKVxuXG5XZSBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhpcyBydW5uaW5nIGluIFFFTVUgd2l0aCBzeXprYWxsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MDE3LCJPdXRwdXRUb2tlbnMiOjI4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMDA6NTM6MDguNDcxMTYzMDUyWiIsIlNlcSI6ODQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkyNzM1NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJSQ01GTUFDXCIsXG4gICAgXCJCUkNNRk1BQ19VU0JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicmNtZl9wbWtzYV92Ml9vcFwiLFxuICAgIFwiYnJjbWZfY2ZnODAyMTFfc2V0X3Bta3NhXCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9kZWxfcG1rc2FcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2ZsdXNoX3Bta3NhXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2V2ZXJhbCBjb21wb25lbnRzIG9mIHRoZSBCcm9hZGNvbSBXaS1GaSBkcml2ZXJzLiBDaGFuZ2VzIHRvIFBDSWUgKG1zZ2J1Zi5jLCBmbG93cmluZy5jLCBwY2llLmMpIGFuZCBTRElPIChzZGlvLmMpIGFyZSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYXMgdGhleSByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlLiBIb3dldmVyLCB0aGUgYnJjbWZtYWMgZHJpdmVyIHN1cHBvcnRzIFVTQiwgd2hpY2ggY2FuIGJlIGVtdWxhdGVkIGJ5IHN5emthbGxlci4gVGhlIHBhdGNoIGFkZHMgYGJyY21mX3Bta3NhX3YyX29wYCBpbiB0aGUgc2hhcmVkIGNmZzgwMjExLmMgdG8gaGFuZGxlIFYyIFBNS1NBIGNhY2hlIHVwZGF0ZXMuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBjZmc4MDIxMSBuZXRsaW5rIGNvbW1hbmRzIChlLmcuLCBOTDgwMjExX0NNRF9TRVRfUE1LU0EpIGlmIHRoZSBlbXVsYXRlZCBVU0IgZGV2aWNlIHJlcG9ydHMgYSBmaXJtd2FyZSB2ZXJzaW9uIFxcdTAwM2U9IDEyLiBUaGVyZWZvcmUsIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgaXMgZnV6emFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQlJDTUZNQUNcIixcbiAgICBcIkJSQ01GTUFDX1VTQlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyY21mX3Bta3NhX3YyX29wXCIsXG4gICAgXCJicmNtZl9jZmc4MDIxMV9zZXRfcG1rc2FcIixcbiAgICBcImJyY21mX2NmZzgwMjExX2RlbF9wbWtzYVwiLFxuICAgIFwiYnJjbWZfY2ZnODAyMTFfZmx1c2hfcG1rc2FcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGNvbXBvbmVudHMgb2YgdGhlIEJyb2FkY29tIFdpLUZpIGRyaXZlcnMuIENoYW5nZXMgdG8gUENJZSAobXNnYnVmLmMsIGZsb3dyaW5nLmMsIHBjaWUuYykgYW5kIFNESU8gKHNkaW8uYykgYXJlIHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhcyB0aGV5IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUuIEhvd2V2ZXIsIHRoZSBicmNtZm1hYyBkcml2ZXIgc3VwcG9ydHMgVVNCLCB3aGljaCBjYW4gYmUgZW11bGF0ZWQgYnkgc3l6a2FsbGVyLiBUaGUgcGF0Y2ggYWRkcyBgYnJjbWZfcG1rc2FfdjJfb3BgIGluIHRoZSBzaGFyZWQgY2ZnODAyMTEuYyB0byBoYW5kbGUgVjIgUE1LU0EgY2FjaGUgdXBkYXRlcy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIGNmZzgwMjExIG5ldGxpbmsgY29tbWFuZHMgKGUuZy4sIE5MODAyMTFfQ01EX1NFVF9QTUtTQSkgaWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgcmVwb3J0cyBhIGZpcm13YXJlIHZlcnNpb24gXFx1MDAzZT0gMTIuIFRoZXJlZm9yZSwgdGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBpcyBmdXp6YWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}